Java Nesne yönelimli programlama dersinde işlediğimiz bir konuya bu yazı içerisinde inceleyebilirsiniz. Yukarıdaki görselde bulunan işlemleri nesne yönelimli programlama kullanarak oluşturalım.
Yeni bir proje içerisinde iki farklı dosya oluşturuyorum. Bunlardan biri main dosyası, öteki de class dosyası olacak.
Class içerisinde x ve y değişkenlerimi tanımlıyorum. Default ve parametreli constructor oluşturuyorum. Ardından setter ve getter işlemlerini tanımlıyorum.
Bu adımları bilmeyenler veya hatırlamayanlar, JAVA OOP Temelleri yazısını kontrol edebilir.
package birgörselikodlamak;
public class Point {
private int x, y;
//default constructor
public Point(){
this.x = 0;
this.y = 0;
}
//params constructor
public Point(int x, int y){
this.x = x;
this.y = y;
}
//setter and getter method
public int getX(){
return this.x;
}
public int getY(){
return this.y;
}
public void setX(int x){
this.x = x;
}
public void setY(int y){
this.y = y;
}
}
Bu işlemlerin ardından nesneyi canlı bir varlık haline getirebilirim. Sadece bu yapıyı oluşturarak işlem yükümün büyük bir bölümünü halletmiş oluyorum.
package birgörselikodlamak;
public class BirGörseliKodlamak {
public static void main(String[] args) {
// TODO::Bir görseli kodlamak
Point nokta1 = new Point();
}
}
Point() : Point class üzerinde parametresiz bir nesne oluşturmamı istiyor. Şuana kadar yazdığım kodlarda tanımlamıştım. Yapmam gereken tek şey, main dosyamda bir nesne oluşturmak.
Point nokta2 = new Point();
System.out.println("x noktası: " + nokta2.getX() +
"\ny noktası: " + nokta2.getY());
Point(x:int, y:int) : Point class üzerinde parametre vererek tanımlama yapmamı istiyor. Parametreli constructor ile bu işlemi gerçekleştirmiştim.
Point nokta3 = new Point(12, 5);
System.out.println("x noktası: " + nokta3.getX() +
"\ny noktası: " + nokta3.getY());
getX(), getY() : Method bir yerden tanıdık geliyor mu? Setter ve Getter methodları… Getter methodu herhangi bir değer döndürmez. Değeri kullanmak istediğimiz yerlerde bu methodu oluşturabilirim. Tanımladığım class yapısı içerisinde getter methodunu oluşturdum. getX() ve getY() methodlarını çağırıyorum:
Point nokta4 = new Point(6, 8);
System.out.println("x noktası: " + nokta4.getX() +
"\ny noktası: " + nokta4.getY());
setX(), setY() : Setter methodları bir değer döndürür. Nesnemin değişkenlerine atama yapmak istediğim yerlerde setter methodunu kullanabilirim. Method içerisine parametre olarak verdiğimiz değer nesnemin değişkenine erişerek atama yapıyor.
Point nokta5 = new Point();
nokta5.setX(10);
nokta5.setY(9);
System.out.println("x noktası: " + nokta5.getX() +
"\ny noktası: " + nokta5.getY());
toString() : Bu method ile birlikte oluşturduğum yapıya farklı metod ve özellikler eklemeye başlayacağım. Nesne adını yazdıktan sonra “.” ekleyince nesnemize ait metod ve özelliklere erişim sağlayabiliyoruz. İçeriği kontrol edince toString() adından bir methodun var olduğunu görebilirim(nokta5.toString()). Class içerisinde toString() adında yeni bir method tanımladığım taktirde override işlemi yapmış olacağım. Bu toString methodunun farklı bir şekilde yeniden düzenlendiği anlamına gelir.
//class dosyası
//override toString() method
@Override
public String toString(){
return "(" + getX() + ", " + getY() + )"";
}
Ana fonksiyonum içerisinde toString() methodunu çağırıyorum:
//main dosyası
Point nokta6 = new Point(6, 9);
System.out.println(nokta6.toString());
getXY():int[2] : Bu method içerisinde bir dizi döndürmemi istiyor. Integer değerlerimi getter ve setter methodlarını kullanarak atayacağım:
//class dosyası
//getXY():int[2] method
public int[] getXY(){
int[] pointArr = new int[2];
pointArr[0] = getX();
pointArr[1] = getY();
return pointArr;
}
Ana fonksiyonum içerisinde getXY() methodunu çağırıyorum:
//main dosyası
Point nokta7 = new Point(5, 7);
System.out.println(Arrays.toString(nokta7.getXY()));
setXY(x:int, y:int): Bu işlemde iki parametreli bir setter methodu oluşturmamızı istiyor. Setter işlemimin aynısını, iki parametreli olarak tanımlıyorum:
//setXY() methodu
public void setXY(int x, int y){
this.x = x;
this.y = y;
}
Ana fonksiyonum içerisinde setXY(x, y) methodunu çağırıyorum:
//main dosyası
Point nokta8 = new Point(3,5);
System.out.println(Arrays.toString(nokta8.getXY()));
nokta8.setXY(4, 6);
System.out.println(Arrays.toString(nokta8.getXY()));
distance(x:int, y:int) : Bu işlemde iki nokta arasındaki mesafeyi hesaplayan bir method oluşturmamı istiyor. Mesafeyi hesaplamak için, iki farklı x ve iki farklı y noktasına ihtiyacım var. Methodumun içerisinde girilen iki parametreyi x ve y noktası olarak alacağım. x noktalarını ve y noktalarını kendileri aralarından önce farklarını, ardından karelerini alıyorum. Çıkan sonucu toplayıp kökünü buluyorum:
//class dosyası
//distance(x:int, y:int) methodu
public double distance(int x, int y){
int p1, p2, p3, p4;
double result;
p1 = getX(); //nesnenin x noktası
p2 = x; // uzaklığı hesaplanacak olan mesafenin x noktası
p3 = getY(); //nesnenin y noktası
p4 = y; // uzaklığı hesaplanacak olan mesafenin y noktası
result = Math.sqrt( Math.pow( (p1-p2), 2 ) + Math.pow( (p3-p4), 2 ) );
return result;
}
Ana fonksiyonum içerisinde distance(x,y) methodunu çağırıyorum:
//main dosyası
Point nokta9 = new Point(4,2);
System.out.println(nokta9.distance(8,5));
distance(another:Point) : Bu işlemde oluşturduğum bir Point sınıfını veri tipi olarak alacağım. Tekrardan distance methodu üzerinde çalışıyorum. Aynı formulü uygulayacağım:
//class dosyası
//distance(Point:another) methodu
public double distance(Point another){
int p1, p2, p3, p4;
double result;
p1 = getX(); //nesnenin x noktası
p2 = another.getX(); // uzaklığı hesaplanacak olan mesafenin x noktası
p3 = getY(); //nesnenin y noktası
p4 = another.getY(); // uzaklığı hesaplanacak olan mesafenin y noktası
result = Math.sqrt( Math.pow( (p1-p2), 2 ) + Math.pow( (p3-p4), 2 ) );
return result;
}
Ana fonksiyonum içerisinde distance(Point another) methodunu çağırıyorum:
//main dosyası
Point nokta10 = new Point(4,2);
System.out.println(nokta10.distance(new Point(8,5)));
distance() : Sabırla davranıp bu adıma kadar gelebildiyseniz, kodları görmeden önce, öğrenme durumunuzu test etmek için kodları yazarak çalıştırmanızı tavsiye ederim. Bu işlemde ikinci x ve y değerleri verilmeden uzaklık hesabının bulunması isteniyor:
//class dosyası
//distance() methodu
public double distance(){
int p1, p2;
double result;
p1 = getX(); //nesnenin x noktası
p2 = getY(); //nesnenin y noktası
result = Math.sqrt( Math.pow( (p1-0), 2 ) + Math.pow( (p2-0), 2 ) );
return result;
}
Ana fonksiyonum içerisinde distance() methodunu çağırıyorum:
//main dosyası
Point nokta11 = new Point(4,2);
System.out.println(nokta11.distance());
Bu işlemle birlikte istenenler tamamlandı. Kodların hepsine erişmek için, github adresini inceleyebilirsiniz: https://github.com/kahilkubilay/JAVA_OOP_Fundamentals/blob/master/BirResmiKodlamakClass.java