‫Bu derste, soyut sınıflar ve arayüzler arasındaki kritik farkı öğreneceksiniz.
‫Uygulamaları tasarlarken, ne zaman soyut bir sınıf, ne zaman bir arayüz kullanılacağını ve ne zaman ikisinin
‫de kullanılmayacağını bilmek çok önemlidir.
‫Soyut sınıflar ve arayüzler bazı yönlerden benzer görünse de, elde etmeye çalıştığınız şey için hangisinin
‫en iyi seçim olduğunu belirleyecek önemli farklılıklar vardır.
‫Soyut bir sınıf ile bir arayüz arasındaki farkı anlamak çok önemlidir, böylece gevşek bir şekilde bağlanmış
‫ve genişletilebilir uygulamalar tasarlayabiliriz, böylece her şeyi bozmadan kolayca değiştirebileceğimiz ve değiştirebileceğimiz
‫uygulamalar.
‫Bu farklılıkları ve hangisini ne zaman kullanacağınıza nasıl karar vereceğinizi bu videoda tartışacağız.
‫Ancak bunu yapmadan önce, soyut sınıflar ve arayüzler hakkında hafızamızı tazeleyelim.
‫İlk olarak, soyut sınıflar.
‫Soyut bir sınıf tamamlanmamış bir sınıftır veya örneklenemeyen bir sınıftır, yani ondan nesneler
‫oluşturamayız.
‫Soyut bir sınıfın amacı, türetilmiş sınıflar için bir plan sağlamak ve türetilmiş sınıfların neleri uygulaması gerektiği
‫gibi bazı kurallar belirlemektir.
‫Ama neden bir sınıfın başlangıçta soyut sınıf olarak işaretlenmesine ihtiyaç duyalım ki?
‫Normal sınıfların nesi var?
‫Bir motosiklet sınıfımız ve bir araba sınıfımız olduğunu ve kod fazlalığını azaltmak için bazı işlevleri paylaştıklarını
‫düşünün.
‫vehicle tipinde örneklerin oluşturulmasını önlemek ve her metodun vehicle metotlarının kendi versiyonlarını uygulamasını zorunlu
‫kılmak için vehicle adında temel bir sınıf oluşturuyoruz.
‫Bunu soyut bir sınıf olarak işaretlemeliyiz.
‫Bileşenleri tasarlamak ve türetilmiş sınıflar tarafından uygulanması gereken bazı ortak işlevsellik düzeylerini belirlemek
‫için soyut sınıflardan yararlanabiliriz.
‫Bu aracı soyut hale getirelim ve bu iyi olacaktır.
‫Şimdi bir kez daha arayüzlere bakalım.
‫Yani bir arayüz bir sözleşmedir ve yalnızca yöntem bildirimlerini içerebilir.
‫Yöntem tanımları içeremez.
‫Bir sınıfın sahip olduğu bir yeteneği tanımlarlar.
‫Üç sınıfımız olduğunu düşünelim, yani bisiklet, motosiklet ve araba sınıfımız var.
‫Ve sonra tüm bu sınıfların bu vehicle sınıfından miras aldığından emin olmak istiyoruz.
‫Örneğin arabamıza kendi kendine sürüş işlevi eklemek istiyorsanız ve örneğin uçak gibi bir şey
‫oluşturabilecek başka sınıflar oluşturmanızı istiyorsak, kendi kendine sürüş işlevini temel sınıf
‫olan araca eklemek mantıklı değildir çünkü alt sınıflarımızın tümü bu özelliğe sahip olmayacaktır.
‫Kendi kendine sürüş adı verilen bir arayüz şeklinde eklemek daha uygun olacaktır.
‫Daha sonra bu arayüzü uygulayan sınıflar bunu başarmak için gerekli mantığı sağlayabilir.
‫Şimdi arayüzler ve soyut sınıflar arasındaki benzerliklerden bahsedelim.
‫Hem arayüzler hem de soyut sınıflar örneklenebilir.
‫Bu, onlardan nesne oluşturamayacağımız anlamına gelir, ancak her ikisi de çok biçimliliği destekler, yani kedi türündeki
‫bir nesneyi soyut sınıf hayvan türündeki bir değişkende saklayabiliriz.
‫Aynı şey, liste veya yığın gibi herhangi bir koleksiyonu i enumerable tipinde bir değişkende saklayabileceğimiz arayüzler
‫için de geçerlidir.
‫Şimdi temel farklılıklara bakalım.
‫Soyut bir sınıf, yöntemlerini uygulayan veya geçersiz kılan alt sınıflar tarafından miras alınmak üzere tasarlanmıştır.
‫Başka bir deyişle, soyut sınıflar ya kısmen uygulanır ya da hiç uygulanmaz.
‫Öte yandan, arayüzler hiç uygulanmaz.
‫O halde soyut bir sınıfın buna zıt bir kurucusu olamaz.
‫Soyut sınıfların yapıcıları ve alanları olabileceği gibi yöntem tanımları da olabilir ve uygulama,
‫arayüzü uygulayan sınıfın sorumluluğunda olacaktır.
‫Öte yandan, soyut bir sınıf metot, tanım ve alanlar içerebilir ve bahsettiğimiz gibi arayüzlerin
‫herhangi bir yapıcısı olmadığından, alanları da olamaz.
‫Böylece artık sınıflar birçok arayüzü uygulayabilir, bu da bir çeşit çoklu kalıtım elde etmenin bir yoludur, çünkü
‫C-sharp tek bir kalıtım dilidir ve varsayılan olarak buna izin vermez.
‫Yani bir sınıf sadece bir sınıfın kapsamını miras alabilir.
‫Dolayısıyla, bir sınıf bir arayüzü uyguluyorsa, özellikler, yöntemler ve benzeri gibi tüm üyelerini
‫uygulamalıdır.
‫Öte yandan, bir sınıf soyut bir sınıfı genişlettiğinde, yalnızca soyut üyelerini uygulamalıdır.
‫Yani soyut sınıfın uygulanmayan kısmı.
‫Burada bir benzetme yapalım.
‫AB eğitimlerinde keskin bir eğitmen gördüğümü hayal edin, eğitmen bir konuda uzman değilse ya da bir
‫konuda uzman değilse hiçbir şey başaramaz çünkü soyut sınıfların örneklerine sahip olamayız.
‫Dolayısıyla bir eğitmenin bir konuyu öğretebilmesi için o konuda uzman olması gerekir.
‫Böylece eğitmen bir diyez uzmanı oldu ve artık Do diyez öğretebiliyor.
‫Bir noktada C atölyesi eğitmeni videolarını düzenlemek zorunda kaldı.
‫Yine de tüm eğitmenlerin aynı şeyi yapması gerekmez.
‫Bu nedenle, bunun çalışması için video düzenleyici arayüzünü uyguladık, bu nedenle tüm eğitmenlerin düzenleme yapabilmesi gerekmiyor,
‫ancak bu video düzenleyiciyi uygulayanların bunu yapması gerekecek.
‫Tamam.
‫Atölye sınıfı kütüphanelerini tasarlarken bir arayüz yerine kalıtımı mı seçmelisiniz?
‫Alt sınıflarının sahip olmasını istediğiniz bazı işlevler varsa soyut bir sınıf kullanın.
‫Örneğin, bir dizi işleviniz varsa, alt sınıfların bunları soyut bir sınıfa koymasını istersiniz.
‫Soyut sınıf, türetilen sınıfın, soyut sınıfın temel özelliklerini ve davranışını, yani aslında sınıfı tanımlayan
‫davranış türünü paylaşması durumunda kullanılır.
‫Yalnızca genel bir sözleşme davranışı veya işlevselliği istiyorsanız bir arayüz kullanın.
‫Arayüzler, soyut sınıflara kıyasla tipik olarak gevşektir.
‫Tüm arayüz yöntemleri için sürekli aynı kodu yazdığınız bir durumda arayüzleri kullanmak
‫istemezsiniz.
‫Soyut bir sınıf kullanın ve her yöntemi bir kez tanımlayın.
‫Yani kısa bir özet.
‫Soyut sınıflar hakkında konuştuğumuzda, bir nesnenin ne olduğunu belirten bir nesne türünün özelliklerini
‫tanımladık.
‫Bir arayüzden bahsettiğimizde ve sağlamayı vaat ettiğimiz yetenekleri tanımladığımızda, nesnenin neler
‫yapabileceğine dair bir sözleşme oluşturmaktan bahsediyoruz.
‫Yani nesne soyut sınıftır.
‫Nesnenin yapabilecekleri.
‫Bir arayüz.
‫Tamam.
‫Umarım bu özeti ve iki farklı yaklaşım türüne ilişkin bu genel bakışı beğenmiş ve anlamışsınızdır.
‫Şimdi bu kavramları sonraki derslerde ve kursun geri kalanında farklı örneklerde
‫kullanalım.