şükela:  tümü | bugün
  • sadece child class derive etmek icin kullanilabilen , obje* yaratamayacaginiz parent class.

    icerdigi abstract metodlar , abstract classdan derive edilen child classlar tarafindan implement edilir.

    ---
    uktecinin notu: "java ile ilgili". dogaclamayi ilk bilgiden sonra yaparsiniz belki.
  • bir inteface olu$turulacak, ancak bu interface icinde deklare edilen methodlarin bir kismi, interfacei implemente eden classlarda aynen gercekle$tirilecekse, hemen bu methodlarin gercekle$tirimi bir kereligine o interface icinde yapilir ki, boyle siniflara abstract class adi verilir.
  • java'da sınıfların çoğunlukla bir kavram olarak tanımlandığı sınıflardır. içinde gövdesi olan veya olmayan fonksiyon ve altyordamlar olabilir. bu interface 'lerden farklı olan yanıdır.
    sinif a = new sinif () ; şeklinde yeni bir nesne oluşturamazsınız.
    class a extends sinif şeklinde türetilip soyut methodların içinin doldurulması gerekir. bu tam olarak "fonksiyonların geçersiz kılınması" işlemidir.
  • bir anlamda class sablonu yaratmak icin kullanilan soyut class'lar.

    mesela bes cesit araba class'i olacak, ve bu class'lar arabalarin butun ozelliklerini tasiyacak. fakat bu bes cesit arabanin ortak ozellikleri olacak, hepsinin dort tekerinin olmasi, hepsinin motorunun olmasi, hepsinin direksiyon sisteminin benzer olmasi vs. vs.

    bu durumda araba'nin abstract bir class sablonu ile tanimlanip, bes farkli araba icin bes ayri child class turetmek (araba abstract class'indan extend ile tureterek), daha mantiklidir.

    http://www.tutorialspoint.com/…java_abstraction.htm

    ayrica abstract class'tan obje yaratilamaz. yani sadece superclass (bkz: parent class) olarak kullanilir.
  • ayrica uml class diagram'inda italik fontla gosterilir.
  • c# için konuşacak olursak implemente edilmedikleri sürece bir anlamları olmayan sınıflardır. base class olarak kullanılırlar ve üzerlerinden herhangi bir instance oluşturulamaz. bir abstract class içerisinde oluşturulan abstract metotların tamamı, ilgili abstract class'dan derive edilen child class tarafından implemente edilmek zorundadır. ancak aynısı abstract olmayan metotlar için geçerli değildir. ve yine abstract olmayan metotlar static olarak tanımlanabilir.

    interface'lerden en temel farkları hem abstract hem de abstract olmayan (non-abstract) metotlar içerebilmeleridir. oysa ki interface'lerin içerdikleri tüm metotlar abstract gibi davranır. yani derive edilen sınıfta mutlaka implemente edilmek zorundadırlar. eğer bir abstract class'ın tüm üyeleri abstract olarak tanımlanmışsa bu abstract class'ın interface'ten pek bir farkı kalmaz. ayrıca bir sınıf birden fazla interface'den kalıtılabilirken ancak tek bir abstract class'tan kalıtılabilir. yani abstract class'lar çoklu kalıtımı desteklemez.
  • (bkz: oop) basitçe bunun object oriented'da kullanılma mantığı şudur aslında. procedurel dillerde (oop olmayan), benzer tipleri, veri yapılarını kullanan kod parçalarındaki hataları ayıklamak, unit testlerini yapmak ciddi bir hammallık ve programcı maliyeti yaratıyordu. yani yapısal olarak benzeşen yüzlerce kodun unit testleri ayrı ayrı yapılmak zorunda olduğu için, oop'de abstract class denen bir konsept yaratılmıştır.

    böylelikle farklılıklar child class'lere yüklenir, abstract class'in testi yapılır, child class'ler için daha az unit test yapılır, testi geçmiş abstract class'a bir daha dokunulmaz, maliyet azalır, hammallık azalır ve en önemlisi bir problem çıktığında hatayı ayıklamak daha kolay olur.
  • bir kere oluşturulup child class'ları türetildikten sonra, üzerinde değişiklik yapılması çok zor olan ve üzerinde sonradan değişiklik yapılması pek tavsiye edilmeyen class'lardır.
  • memory leak karşıtı bir arkadaş.

    oop'un sevilesi yanlarından sadece biri. severiz, kullanırız. siz de kullanın, kullanmayanları uyarın, öğretin.
  • nesne yönelimli programlamaya (object oriented programming) girenlerde ilk baslarda kafa karisikligi yaratabilien programlama ve yazilim mimarisinin en önemli unsurlarindan biridir. özellikle interface ile karistirilirlar. dogada her nesne aslinda abstract yapidadir yani bir parcanin bütünü olarak olusurlar. parcalar olmadan bütün yoktur yani soyut birer nesnelerdir. örnegin kitabi ele alalim. kitap kendini olusturan bircok sayfa ve kapaktan olusan abstract yapidadir. yani kitap diye abstract bir class olusturuyoruz, bu abstract class icin sayfa ve kapak ögelerini yine abstract olarak belirliyoruz. eger bir kitap örnegin sadun boro nun pupa yelken kitabini olustururken kitap nesnesinden "extend" ediyoruz. abstract bir method dan "extend" ettigimiz icin bu kitabimiz sayfa ve kapak ögelerini uygulamamiz icin bizi zorlar. cünkü bu kitabin sayfa ve kapagi olmali der.

    bir method hem abstract hem final olamaz cünkü bunlar tamamen zit amacla kullanilir. abstract alt siniflar tarafindan uygulanmasini zorlamak icin vardir, final ise tam tersine uygulanmasini önlemek icin kullanilir.

    abstract classlar "parent" den aldiklari abstract methodlari uygulamak zorunda degillerdir. uygulanmasi icin altlarindaki normal classlara devrederler.

    abstract classlar ile tek basina bir örnek olusturulamaz, "instantiate" edilemezler. cünkü tek baslarina yoklardir, diger nesneler tarafindan "extend" edilmelidirler.