Soyut bir sınıfla bir arayüz arasındaki ayrımı tam olarak kavramaktan hala yıllarım. Ne zaman temel kavramları ele aldığımı düşündüğümde stackexchange'e gidiyorum ve iki adım geri gidiyorum. Ancak konu ve OP'lerin sorusu üzerine birkaç düşünce:
İlk:
Bir arabirimin iki ortak açıklaması vardır:
Arabirim, herhangi bir sınıfın uygulayabileceği yöntemlerin ve özelliklerin bir listesidir ve bir arabirim uygulayarak, bir sınıf, bu yöntemleri (ve imzalarını) garanti eder ve bu özellikler (ve türleri), bu sınıfa "müdahale ederken" kullanılabilir o sınıfın bir nesnesi. Arayüz bir sözleşmedir.
Arayüzler, hiçbir şey yapamayan / yapamayan soyut sınıflardır. Bunlar yararlıdır çünkü bu ortalama ebeveyn sınıflarının aksine, birden fazla uygulayabilirsiniz. Mesela, BananaBread sınıfının bir nesnesi olabilirim ve BaseBread'den miras kaldım, ama bu hem IWithNuts hem de ITastesYummy arayüzlerini uygulayamayacağım anlamına gelmiyor. IDoesTheDishes arayüzünü bile uygulayabilirim, çünkü sadece ekmek değilim, biliyor musunuz?
Soyut bir sınıfın iki ortak açıklaması vardır:
Soyut bir sınıf, bilirsin, yapabileceği şey değil. Bu, öz gibi, aslında gerçek bir şey değil. Bekle, bu yardımcı olacak. Bir tekne soyut bir sınıftır, ancak seksi bir Playboy Yacht, BaseBoat'ın alt sınıfı olacaktır.
Soyut sınıflar üzerine bir kitap okudum ve belki de o kitabı okumalısınız, çünkü muhtemelen onu alamazsınız ve eğer o kitabı okumadıysanız yanlış yaparsınız.
Bu arada, Citers kitabı her zaman etkileyici görünüyor, yine de kafam karışmış olsa bile.
İkinci:
SO'da, birileri bu sorunun daha basit bir versiyonunu sordu, klasik, "Neden arayüzleri kullanıyorsunuz? Fark nedir? Neyi özlüyorum?" Bir cevap, basit bir örnek olarak bir hava kuvvetleri pilotunu kullandı. Arazi oldukça iyi değildi, ancak bir tanesi IFOble arayüzünden takeOff, pilotEject, vs. gibi yöntemlerden bahseden harika yorumlar ortaya koydu. Ve bu gerçekten benim için arayüzlerin neden sadece faydalı olmadığının gerçek dünya örneği olduğunu gösterdi. ama çok önemli. Bir arayüz bir nesneyi / sınıfı sezgisel hale getirir veya en azından olduğu hissini verir. Bir arayüz, nesnenin veya verilerin yararına değil, o nesneyle etkileşime girmesi gereken bir şey için değildir. Klasik Meyve-> Elma-> Fuji veya Şekil-> Üçgen-> Eşkenar miras örnekleri, soyundan gelen belirli bir nesneyi taksonomik olarak anlamak için harika bir modeldir. Tüketiciyi ve işlemcileri, genel nitelikleri, davranışları, nesnenin bir şeyler grubu olup olmadığı hakkında bilgilendirir, yanlış bir yere koyarsanız sisteminizi hortumlar veya duyusal verileri, belirli bir veri deposuna bir konektörü açıklar veya Bordro yapmak için gerekli finansal veriler.
Belirli bir Plane nesnesinin acil iniş için bir yöntemi olabilir veya olmayabilir, ancak acil durumEğerini sadece DumbPlane ile kaplanmış uyanmak ve geliştiricilerin quickLand ile gittiğini öğrenmek için diğer tüm değişken nesneler gibi kabul edersem sinirleneceğim çünkü hepsinin aynı olduğunu düşünüyorlardı. Tıpkı her vida imalatçısının kendi hakkını sıkıca yorumlaması olsaydı ya da TV'mde ses azaltma düğmesinin üstünde ses artırma düğmesi yoksa, nasıl sinirleneceğimi.
Soyut sınıflar, herhangi bir iniş nesnesinin o sınıf olarak nitelemesi için gerekenleri belirleyen modeldir. Bir ördeğin tüm özelliklerine sahip değilseniz, sadece tuhaf bir pengueniniz olan IQuack arayüzünü uygulamanız önemli değildir. Arayüzler, başka hiçbir şeyden emin olamadığınızda bile mantıklı olan şeylerdir. Jeff Goldblum ve Starbuck uzaylı uzayları uçurmayı başardılar çünkü arayüz güvenilir bir şekilde birbirine benziyordu.
Üçüncü:
İş arkadaşınızla aynı fikirdeyim, çünkü bazen en başta belirli yöntemleri uygulamanız gerekebilir. Bir Active Record ORM oluşturuyorsanız, bir kaydetme yöntemine ihtiyacı vardır. Bu, başlatılabilecek alt sınıfa bağlı değildir. Ve eğer ICRUD arayüzü sadece bir soyut sınıfa birleştirilmeyecek kadar taşınabilirse, diğer sınıflar tarafından, o soyut sınıfın soyundan gelen herhangi bir sınıfa aşina olan herkes için güvenilir ve sezgisel hale getirmek için uygulanabilir.
Diğer taraftan, soyut sınıfa bir arayüz bağlamak için ne zaman atlamayacağımızın daha önce çok iyi bir örnek vardı, çünkü tüm liste tipleri bir sıra arayüzü uygulayamayacak (ya da vermemeli). Bu senaryonun yarı yarıya gerçekleştiğini söylediniz, bu da sizin ve iş arkadaşınızın her zaman yarı yarıya yanlış olduğu anlamına gelir ve bu nedenle yapılacak en iyi şey tartışmayı, tartışmayı, düşünmeyi ve doğru oldukları ortaya çıktığında eşleştirmeyi kabul ve kabul etmektir. . Ancak eldeki iş için en iyisi olmasa bile bir felsefeyi izleyen bir geliştirici olmayın.