Bu yazımda nesneye yönelik programlama (Object Oriented Programming) nedir bunu açıklayacağım.Nesne yönelimli dil olan java ile  akılda kalması açısından örneklendirerek anlatacağım.

Nesneye Yönelik Programlama – Object Oriented Programming Nedir ?

Bu yazımda nesneye yönelik programlama (Object Oriented Programming) nedir bunu açıklayacağım.Nesne yönelimli dil olan java ile akılda kalması açısından örneklendirerek anlatacağım.

Konuyu daha iyi anlamak için basit bir örnek ile başlayalım. Araba sürmek ve hız pedalına basarak arabayı hızlandırmak istediğinizi farzedin. Bunu yapabilmeniz için öncelikle birilerinin bu arabayı tasarlaması gerekir. Bu tasarım ev-inşaat planlarına benzeyen bir takım mühendislik çizimleridir aslında. Bu çizimler arabayı hızlandıracak olan gaz pedalını da içerir. Aslında arabayı hızlandıran geri planda karmaşık ve büyük bir mekanizma vardır ancak bizler bu mekanizmadan habersiz sadece gaz pedalını kullanarak arabayı hızlandırırız. Aynı şekilde fren pedalı da arabayı yavaşlatan geri plandaki büyük ve karmaşık mekanizmanın detaylarını gizlerken (hides), kullanımını istifademize sunar. Aynı şekilde direksiyon da arabayı döndüren mekanizmayı gizler.

Böylece motor vs. hakkında çok az veya hiç bilgisi olmayan insanlar bir arabayı kolayca kullanabilirler.

Ancak arabanın mühendislik çizimlerini süremeyiz. Öncelikle arabanın bu çizimlere göre inşa edilmesi gerekir. Yapımı tamamlanmış bir araba ise elbette çizimlerdeki gibi bir hız pedalını içerecektir. Yine de arabanın hızlanması bunun yeterli olmadığını, sürücünün bu pedala basması gerektiğini hatırlatalım.

Şimdi yukarıdaki örnek üzerinden nesneye yönelik programlama (OOP) kavramlarını açıklamaya çalışalım. Programlamada metodlar (fonkisyonlar – NYP’de fonksiyon yerine metod tabiri kullanıldığından yazının kalan kısmında bu kelime kullanılacak) belli görevlerin/işlevlerin gerçekleştirilmesi için çağrılırlar. Örneğin bir banka hesabını temsil eden bir sınıfta para yatırma, para çekme ve bakiye öğrenme gibi görevleri yerine getiren metodlar olabilir. Java’da metodları sınıflar barındırır. Başka bir ifade ile metodlar sınıflara aittir. Aşağıdaki Araba sınıfını inceleyelim:

public class Araba {
    private int hız; // bu değişken yalnızca sınıf içerisinden görülebilir.

    public void hızlan(){
        hız++;
    }
}


Çizimlerden bir araba inşa etmedikçe araba kullanmamız mümkün olmadığı gibi, bir sınıfta tanımlanan görevleri icra edebilmemiz için de o sınıfın (class) bir nesnesini (object) inşa etmemiz gerekiyor. Tıpkı aşağıdaki gibi:

public class Main {

    public static void main(String[] args) {

        Araba anadol = new Araba();
        anadol.hızlan();

    }//main
}//class



Bu kod kesiminde ne Araba sınıfında hız isimli bir değişken olduğunu ne de hızlan() metodunun içini bilmiyoruz. Aslında bilmek de istemiyoruz. Tek istediğimiz hızlan metodunun arabayı hızlandırması. Araba tasarımımızda göze bir eksiklik çarpıyor. Arabayı hızlandırabiliyoruz ama anlık hızımızın ne olduğunu bilmiyoruz. Tasarımımızı biraz geliştirelim:

public class Araba {
    private int hız; // bu değişken yalnızca sınıf içerisinden görülebilir.

    public void hızGöster(){
        System.out.println("Hız: " + hız);
    }

    public void hızlan(){
        hız++;
    }
}




Araba sınıfına eklenen yeni yeteneği bir anadol isimli nesnemiz üzerinde hemen test edelim:

public class Main {

    public static void main(String[] args) {
        
        Araba anadol = new Araba();
        anadol.hızlan();
        anadol.hızGöster();
        
    }//main
}//class



Kodun çıktısı ( output ) aşağıdaki gibi olacaktır:

Hız: 1

Peki anlık hızımızın 100 km’yi geçip geçmediğini kontrol etmek istersek? hızGöster() metodu hızı yalnızca ekrana yazıdığından bu değeri kodumuzun içinde integer olarak elde edip kullanma şansımız yok. O halde tasarımda ufak bir değişiklik yapalım. hızGoster() metodu hızı ekrana yazmakla beraber değerini de döndürsün. Aşağıdaki kodda hızGöster() metodunda yaptığımız değişikliğe dikkat edin:
public class Araba {
    private int hız; // bu değişken yalnızca sınıf içerisinden görülebilir.

    public int hızGöster(){
        System.out.println("Hız: " + hız);
        return hız;
    }

    public void hızlan(){
        hız++;
    }
}


Artık hız değerini kod içinde istediğimiz gibi kullanabiliriz:

public class Main {

    public static void main(String[] args) {

        Araba anadol = new Araba();
        anadol.hızlan();
        int hız = anadol.hızGöster();
        if (hız > 100){
            System.out.println("Aşırı Hız!");
        }

    }//main
}//class


Ancak bu tasarım yine de eksik duruyor. Bu şekilde hızlan() metodunu hızı elde etmek için her çağırdığımda ekrana (output) da bir şeyler yazılacak. Oysa biz zaman zaman ekrana yazmak zaman zaman da yalnızca hız değerini (value) elde etmek ve belli işlemler yapmak istiyoruz. Bunu yapmanın tek yolu bu iki işlevi birbirinden ayırmak, yani 2 ayrı metod yazmak:

public class Araba {
    private int hız; // bu değişken yalnızca sınıf içerisinden görülebilir.

    public void hızGöster(){
        System.out.println("Hız: " + hız);        
    }
    
    public int getHız(){
        return hız;
    }

    public void hızlan(){
        hız++;
    }
}


Araba sınıfının kullanıldığı kod kesimi:

public class Main {

    public static void main(String[] args) {

        Araba anadol = new Araba();
        anadol.hızlan();
        anadol.hızGöster();

        if (anadol.getHız() > 100){
            System.out.println("Aşırı Hız!");
        }

    }//main
}//class


Araba tasarımıza ihtiyacımıza göre pek çok değişken ve metod ekleyebiliriz. Örneğin renk, anlık benzin miktarı, fiyat gibi değişkenlerin yanı sıra yavaşla(), benzinEkle() gibi metodlar sınıfımıza eklenebilirdi. Bu değişkenlerin sınıfın her bir nesnesi için ayrı ayrı olacağını, başka bir ifade ile her Araba nesnesinin kendi renk, hız, fiyat vb. bilgilerini tutacağını unutmayalım. Örneğin :

public class Main {

    public static void main(String[] args) {

        Araba anadol = new Araba();
        anadol.hızlan();
        anadol.hızGöster();
        Araba mercedes = new Araba();
        mercedes.hızlan();
        mercedes.hızlan();
        mercedes.hızGöster();
        

    }//main
}//class


Programın çıktısı aşağıdaki gibi olacaktır:

Hız: 1
Hız: 2


anadol ve mercedes nesnelerinin kendilerine ait hız değerlerinin olduğunu tekrar hatırlatalım. Bellekte (Memory/RAM) nesnelerin durumu aşağıdaki gibidir.


Şu ana kadar tasarladığımız araba hızlanma, hız gösterme gibi yetenekler sahip ancak arabamızı yavaşlatmak mümkün değil. Bunun trafikte biraz problem olabileceğini düşünerek Araba sınıfımıza yavaşlamasını sağlayacak bir metod daha yazalım:

public class Araba {
    private int hız; // bu değişken yalnızca sınıf içerisinden görülebilir.

    // diğer metodlar halen burada… Yer darlığından gösterilmiyorlar

    public void yavaşla(int miktar){
        hız = hız - miktar;
    }
}


public static void main(String[] args) {

        Araba anadol = new Araba();
        anadol.hızlan();
        anadol.hızlan();
        anadol.hızlan();
        anadol.hızGöster();       
        anadol.yavaşla(2);
        anadol.hızGöster();
        

    }//main


Programın çıktısı aşağıdaki gibi olacaktır.

Hız: 3
Hız: 1


yavaşla() metodunda sizin de fark edebileceğiniz gibi ufak bir problem var. Arabamızın hızının 3 olduğu durumda metod yavaşla(4) şeklinde çağırılırsa hız değeri -1 olur ki bu da gerçek hayatta mümkün olmayan bir durum. O halde yavaşla() metodunu hızın en 0 değerinden daha az olmamasını sağlayacak şekilde değiştirelim.

public void yavaşla(int miktar){
        if (miktar < hız)
            hız = hız - miktar;
        else
            hız = 0; //hız en az 0 olabilir
}


Arabamızı önce 3 birim hızlandırıp sonra 5 birim yavaşlatmaya çalışalım:

public static void main(String[] args) {

        Araba anadol = new Araba();
        anadol.hızlan();
        anadol.hızlan();
        anadol.hızlan();
        anadol.hızGöster();
        anadol.yavaşla(5);
        anadol.hızGöster();
        
    }//main


Programın çıktısı aşağıdaki gibi olacaktır:

Hız: 3
Hız: 0


Bu yazımda OOP mantığını anlatmaya çalıştım. Nesneye yönelimli programlama makelelerin devamı gelecektir. Diğer makalelere göz atmayı unutmayınız.

Bu Gönderiyi Paylaş

İçerik Hakkında Yorum Yapın

www.000webhost.com