inheritence etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
inheritence etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

11 Aralık 2014 Perşembe

IS-A ve HAS-A Kavramları

S.a. Arkadaşlar,
Bugün IS-A ve HAS-A konularını işlemeye çalışacağız. Öncelikle kalıtımın java için vazgeçilmez bir iş olduğunu kabullenmek gerekir. Peki nedir bu kalıtım ne işe yarar diye sorarsak , kısaca;
-          Kod tekrarından kurtuluruz
-          Kalıtım sayesinde bir sınıftan birden fazla sınıf türetebiliriz.

Peki IS-A ve HAS-A kalıtımın neresinde kalıyor diye sorarsanız biraz da onu açıklayalım.
Bilindiği gibi java’da sınıflar birbirinden türer demiştik. Bunu da kodla açıklamaya çalışalım öyle daha kalıcı/anlaşılır olabiliriz.

public class Car {
  gasaBas(){}
}
public class Ferrari extends Car {
  turbo(){}
}

        Arabalar diye bir sınıfımız var. Ve burada birden çok markası olduğunu varsayalım ve her birinin de gaza bas() özelliği olsun. Bu özellik her arabada bulunan bir şeydir. Bu nedenle Car sınıfı altına koyup her defasında tekrar tekrar tanımlamaya gerek yoktur. Fakat turbo() her arabada değil Ferrari’den olan bir özellik olduğu için Ferrari Classına tanımlamış olduk ve Ferrari is a Car olmuş oldu. Yani Ferrari bir arabadır. Kısaca is-a böyledir.

                Şimdi de has-a kavramına bakalım. Has-a kavramı da bir sınıfın farklı bir sınıftaki objesini kullanmasını ifader. Yani yukarıdaki örnekte Ferrari’nin bir motoru olsun ve biz bunu Car adı altında kullanalım. Fakat Ferrari olmadan motorunun da bir önemi yoktur. Onlar birlikte ya vardırlar ya yoktur. Buradaki kavrama da has-a diyoruz. Onu da kodlarsak dediğimiz havada kalmaz diye umuyorum.

public class Motor extends Ferrari {
                 //kodlar
}

                public class Motor {
   Private Motor motor;
   public void Motor(){
         this.motor= new Motor();
}
}

Elimizden geldiğince dilimiz döndüğünce konuyu anlatmaya çalıştık. Bir eksiğimiz olduysa affola . Kolay Gelsin.
Kaynak

29 Kasım 2014 Cumartesi

Nesneye Yönelik Programlama

    S.a. Arkadaşlar ,
     Çok uzun süredir başlamak istediğim fakat bir türlü cesaret edemediğim çoğu zaman başlayıp sildiğim bir blog yazısına başlıyorum, Elimden geldiğince , dilim döndüğünce hem yazdıkça kendim daha iyi pekiştirmek hem belki sizlere de yardımcı olabilmek amacıyla bu yazıyı kaleme alıyorum. Bu kısa girizgahtan sonra konuya giriş yapalım isterseniz.

      Nesne Yönelimli Programlama öncelikle C++ kullanmıştım kısa bir dönem , daha sonra da Java kullanmaya başladım. Ama anlattıklarım genelde Java'daki bilgilerimle paralellik gösterecektir.

     Nesneye yönelik programlamada 4 adet olmazsa olmaz konumuz vardır.Bunlar:
1-Kalıtım
2-Çok Biçimlilik
3-Kapsülleme
4-Soyutlama

    Aslında bakarsak bunların her biri başlı başlığına uzun makale olabilecek konular. Belki bunları daha sonra ayrıntılı ele alacağız fakat şuan bunları kısaca anlatmaya çalışacağız.

   1-Kalıtım: Bazı özellikleri tekrar tekrar yazmak yerine kullanabileceğimiz bir yapı. Örnek vermek gerekirse bir ailemiz var. Ve bu ailenin bazı özellikleri anne ve babadan gelir. Bu anne babadan gelen özellikleri tekrar çocuk yazmak yerine , anne-babadan referans kullanarak bu bilgileri çekebiliriz. Fakat bununla birlikte çocuğun kendine has özelliklerini ayrıca da ekleyebiliyoruz. Kalıtımın en sade ifadesiyle böyle anlatabilecğimi düşünüyorum.

   public class cocuk extends annebaba {
 
//Yazılacak Kodlar
}

   Yukarıdaki örnek ile anne-babadan gelen özellikleri çocuk artık kullanabilir hale gelmektedir. Kısaca kalıtım böyle , daha ileride daha ayrıntılı anlatmak dileğiyle.

    2-Çok Bçimlilik: Farklı sınıflar arasında aynı metod çağırma denilebilir en kısa ifadesiyle. Örnek vermek gerekirse elimizde üçgen , dörtgen ve beşgen gibi 3 şekil olsun.
   Her şeklin çevresi=kenar sayisi * kenar uzunluğu olmalıdır. Bunu aynı methodla farklı sınıflarda kullanılabilmesidir.

     3-Kapsülleme: Bir sınıfın içeriğinin bilinmesine gerek kalmadan kullanılabilmesidir. Bir örnekle zenginleştirmek gerekirse, arabası olan bir şoförün motor çalışma mantığına bilmesine gerek yoktur. Sadece anahtarla arabayı çalıştırıp gaza bastığında arabanın gitmesi kafidir. Aynen bu şekilde de kapsülleme yaparak dışarıya gözükmemesi gereken şeyleri gizleye biliyoruz. Burada bir kaç kavramı verip bu konuyu da bitirelim.

     Public: Herkesin görebileceği değişkenlerdir
     Procted: Aynı paket içinde görülebilecek , fakat farklı paketlerden ulaşılamayan değişkenlerdir.
     Private: Sadece aynı sınıftan erişilebilen değişkenlerdir.

     Bu değişkenlerin ulaşılmaz olanlarına ulaşılmak istendiğinde getter/setter metodlarını kullanmak zorundayız. Fakat şu unutulmamalıdır. Sadece kullanacağımız değişkenleri getter/setter yapmalıyız. Yoksa private değişkenlerimizin publicten pek farkı kalmayacaktır

      4-Soyutlama: Metodların bir kısmının kendisinde barındıran , bir kısmını kalıtım sınıflarından alan sınıflara soyut sınıflar denir.Alt sınıfların ortak özelliklerini ve işlevlerini taşıyan bir üst sınıf oluşturmak
istersek ve gerçek dünyada bu sınıftan bir nesne yoksa , üst sınıfı “soyut
sınıf” olarak tanımlarız. Örnek verecek olursak “Memeli” sınıfından direkt bir nesne oluşturulmaz; ancak alt sınıfları tanımlanarak onlardan nesneler oluşturulur.


     Şimdilik dilimiz döndüğünce bu konuyu yazmaya çalıştık , umarım faydamız dokunur . Varsa yanlışlarımız affola , diğer yazımızda görüşünceye kadar hoşça kalın .