• 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.
  • 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.
  • 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.
  • genellikle soyut sınıfları oluşturmadaki amacımız fonksiyonların kalıtım yoluyla transferini sağlamaktır. e peki neden abstract diyoruz ki normal kalıtım yoluyla da fonksiyonların transfer edebiliyorduk diyebiliriz. ama soyut sınıfın bir konsepti var. bir sınıf abstract edilmiş ise o sınıftan bir nesne üretemiyor ayrıca bu soyut sınıf ile kalıtım ilişkisi bulunan bir sınıfımız varsa soyut sınıftaki ilgili fonksiyonları kendine göre düzenlemek zorundadır. e ben normal sınıf oluşturur kalıtım yoluyla ilişkilendirdiğim sınıflarında her birinde gider yeniden kendime göre düzenlerim üst sınıfa da abstract demem diyebiliriz. buradaki olay da şu, çocuk sınıf ilgi fonksiyonu oldu ki yeniden düzenlemeyi unuttu. haliyle çağırdığımızda üstteki sınıfın fonksiyonu çalışacak. ama burada da fonksiyonun içi belki boş bırakıldı belki dolu. hani kendimize güvenip sürekli eziyoruz ya çocuk sınıflarda, ne yazdığı önemli değil diye yazdık bir şeyler diyelim. burada isteğimizin dışında bilgisayarın belleğinde boşu boşuna hiç çalışmaması gereken bir fonksiyon için yer tutmuş ve bunu yürütmüş olduk. bir yerde böyle hataların önüne geçmiş olmak dışında nesne üretmeyeceğimiz ayrıca fonksiyon tanımının aktarımına ihtiyaç duyacağımız ve bu fonksiyonun nedenli bir şey olduğunu kullanacağımız sınıflarda özellikle tanımlamamız yani fonksiyonun ebeveyn olan classta içinin dolu olmasının bir amacının olmadığı zaten çocuk sınıflarda kendine özgü olarak çalışma prensibi olan bir yapıya ihtiyaç duyulduğundan abstract sınıflara ihtiyaç duyuyoruz. detaylarına girmeden basitinden böyle bir ihtiyaç tanımı yapılabilir.
  • 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.
  • programlama diline göre sınırları ve kuralları değişen soyut sınıf.

    mesela multiple inheritance c++ ile mümkün iken java veya c# ile mümkün değildir. bu yüzden kavramlar ile ilgili verirken, hangi programlama dili ile ilgili olduğu da kısaca eklenmelidir.
  • override edilmesi zorunlu olan en az bir tane method içeren class'a verilen isimdir.

    "neden içi boş method yazıp override etmiyoruz ki" gibi sorular takılabiliyor insanın aklına bazen.

    bana kalırsa bunun en basit açıklaması tek başınıza program yazıyorsanız, programın size override etmeniz gerektiğini hatırlatması gerekliliğidir. gözden kaçmasını engeller.
    eğer tek değilseniz ve bir görev paylaşımı varsa, zaten override edilmesi gerektiğini diğer geliştiricilere göstermeniz gerekir ki, bana kalırsa yine en güzel yol budur.
    kullanın, kullandırın efendim. concrete class'lar ile workaround yapmaya uğraşmayın.

    not: işbu entry java ve python için yazılmış olmakla beraber muhtemelen birçok oop temelli dil için geçerlidir.
  • 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.
  • 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.
  • türkçesi soyut sınıf olan oop’de çokça kullanılan sınıf çeşidi.

    -abstract class’ı, birden fazla ortak özelliği bulunan nesnelerin ortak özelliklerini tekrar tekrar tanımlamak yerine, ortak özelliklerin tanımlandığı yer olarak tanımlayabiliriz. örneğin fabrikamız var ve bu fabrikada çalışan işçilerin bilgilerinin tutulduğu bir program tasarlayacağız. fabrikada çalışanları işçi, yönetici, mühendis, tekniker diye 4 kategoriyi ayırdığımızı varsayalım. bu 4 çeşit çalışanın da ortak özellikleri vardır. aldıkları maaşlar, yaşları, cinsiyetleri gibi. bu ortak özellikleri her sınıf için tekrar tekrar tanımlamak yerine bir kez abstract class’da tanımlarız ve bu class’ı diğer sınıflara miras veririz işimiz kolaylaşmış olur.

    -abstract classlar içlerinde normal fonksiyonlar tanımlayabildiğimiz gibi abstract fonksiyonlar da tanımlayabiliriz.
    abstract fonksiyon tanımlayabilmek için fonksiyonun başına abstract anahtar kelimesini koymalıyız. abstract fonksiyonun mantığı şudur: benzer özelliklere sahip nesnelerde, her bir nesne veya bir grup nesne için farklı olan özellikleri tekrar tekrar tanımlama zorluğunu ortadan kaldırmak. çok bilinen bir örnek üzerinden anlatayım. neredeyse bütün hayvanlar ses çıkarırlar. peki hayvanların çıkardıkları sesler birbirinin aynısı mıdır hayır. o zaman hayvanların sesi için abstract fonksiyon tanımlayıp, her bir hayvandan çıkan farklı ses için bu fonksiyonu override edebiliriz.

    -kendilerinden obje oluşturulamaz. yalnızca sınıflara miras verebilir.

    -genellikle bu konulara yeni başlayanlar interface ile abstract class’ları karıştırabiliyor. aralarındaki benzerlikleri ve farklılıkları anlatmak gerekirse:

    benzerlikler

    a. her ikisinden de obje oluşturulamaz.

    b. her ikisinde de fonkiyonların gövdeleri boş olmalıdır ve bu fonksiyonların kullanılabilmeleri için override edilmeleri gerekir. (abstract class’lardaki normal tanımlanan fonksiyonlar hariç.)

    farklılıklar

    a. interface’lerde değişken tanımlanamazken abstract class’larda değişken tanımlanabilir.

    b. bir sınıf birden fazla interface den miras alabilirken, en fazla bir abstract class dan miras alabilir.
hesabın var mı? giriş yap