Kubilay Kahil
YazarKubilay Kahil
5 dakika okuma süresi
Eki 28, 2019

Bir Görseli Kodlamak


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

Bunlar İlginizi Çekebilir