2011-11-03 12 views
6

Sayısız S/O kayıtları aradım ve bana yardımcı olan bir cevap bulamadım.
Soyut bir sınıfın ne olduğu ve bir arayüzün ne olduğuna dair zihinsel bir bakış açısı almak istiyorum. Bu yazıyı Real world abstract class usage simple samples aracılığıyla okudum, ancak hala kavramlar hakkında net değilim.Gerçek bir dünya kavramının gerçek bir sınıf kavramına sahip olmaya çalışılması Asp.net'de Arayüz

Birisinin "Kişi" nesnesi biçiminde gerçek bir dünyayı tanımlayabileceğini umuyorum. Yani miras "Kişi" olur -> "Çalışan" -> "Yöneticisi"
Ve Overriding Soyut bir sınıf tanımlamak nasıl "İşçinin Maaş" haline gelecek "Satış çalışanın komisyonu"

olacak ve bir Bir Kişi nesne kavramı içinde arayüz?

cevap

9

Arabirim ve soyut sınıf kullanma konusunda farklı bakış açıları vardır. Ancak bir arayüz, bir nesnenin davranışını ifade etmelidir (ne yapabilir) ve soyut sınıf, ne olduğunu tanımlamalıdır. Temel olarak "Ben" nesnesinin perspektiften "ben" olabilir.

Yani, eğer bir Kişimiz varsa, bu bir isim ve onu tanımlamak için soyut bir sınıf kullanacağız. "Bir" olan herhangi bir şey Kişi o sınıftan miras alır. Kişinin yapabileceği bazı davranışları tanımlayan bazı davranışları tanımlamak istiyorsak, tüm Kişilere genişlemezsek, bunu bir arayüze koymalıyız.

Tanımladığınız ilişkiyi kullanarak (Kişi -> Çalışan -> Yönetici), Çalışanın IFirable'ı uyguladığı ve Yöneticinin IFirer'i uyguladığı söylenebilir. Çalışan kovulabilir ve yönetici bir çalışanı kovabilir.

+0

İyi bir benzerlik. Kişinin soyut bir sınıf olduğunu mu söylüyorsunuz? – DotNetRookie

+1

@DotNetCookie - Gerçekten evet ya da hayır demek istemiyorum. Her şey, çözmeye çalıştığınız sorunun bağlamına bağlıdır. "Düz" bir Kişi nesnesini oluşturabilmeniz gerekiyorsa, bu çok mantıklı olmaz. Bu durumda (Kişi -> Çalışan -> Müdür), temel sınıf, Kişi, özet yapmak mantıklı olabilir. –

+1

Kişi ile bir arabirimde kullanacağım davranış, bir Besleme yöntemini bildirebilen IEat'tır. Buradaki nokta, arayüzlerin kesilmesi, yani Mammal: IEat> Kişi> vb. Ve PlantLife: IEat> Cactus, yani bir Kişi bir PlantLife değildir (bazıları böyle davranır) ama hepsi bir şekilde yiyebilirler. –

4

Şahıs örneğini kullanmıyorum diye özür dilerim, lütfen bunu yalnızca genişletilmiş bir yorum olarak alın.

Kavramları, program arka planı olmayan insanlara, çoğu kişinin zaten anladığı bir analoji kullanarak açıklamayı en kolay buluyorum: Plastik kalıplama!

kalıp gibi, nihai ürünün şekline sahiptir

bir arayüz, ancak farklı renk ve malzemeler her türlü doldurabilirsiniz:

biz örneğin plastik meyve yapıyoruz düşünelim. Renk ve dokuda tamamen farklı olsalar bile, hepsinin sonunda aynı şekle sahip olacaklar.

Soyut bir sınıf, resim gibi fazladan bir adım gerektiren bir şeye benzeyecektir. Temel plastik meyveyi yaratırsın, sonra üzerine resim veya kürk yapıştırmak için bir şeyler yolladım. Bitmemiş meyve, bitmiş ürünün daha fazla tanımına sahip olan soyut bir sınıf gibidir, o zaman küf yapar, fakat kendi başına tamamlanmamıştır. Tamamlanmak için daha fazla çalışmaya ihtiyaç duyuyor ve son ürünler tamamen farklı renklerde olabilir, ama yine de temel olarak aynı.

Umarım bu yardımcı olur!

4

Tamam,

Ben arayüzleri ve soyut sınıfların kullanımı arasındaki farklılıklar ve/veya benzerlikleri sizin conceptaully emin düşünüyorum ... Ben sorunuzu anladım bakalım.Eğer sorun o zaman "10 için starter" özetim;

Özet sınıflar , örneği olamaz ama uygulama ayrıntılarını içerebilir, bu nedenle tek bir sınıf türetmek zaman sözleşme ve soyut sınıfta koymak herhangi varsayılan davranışı olsun. Örneğin, Kişi sınıfınız (bu örnek için soyut bir sınıfını alacağım) sözleşmeyi, türetilmiş bir Çalışan veya Yönetici sınıfının (en azından) sahip olması gerektiğini, ancak bazı varsayılan davranışları da sağlayabileceğini tanımlar.

Arabirimler diğer taraftan yalnızca sözleşmeyi belirtin; Hangi uygulayıcı sınıfların yapması gerektiği, herhangi bir uygulama şekli sunamazlar. Örneğin, örneğinizdeki "Kişi", bir arabirimi etkiliyorsa, onu uygulayan hangi sınıfların (Çalışan ve Yönetici) yapması gerektiğini tanımlasa da, bu sözleşme için varsayılan bir uygulama sağlayamaz. Ayrıca, birçok dilde (Java, C#, Delphi) sadece bir ana sınıftan miras alabileceğinizi, ancak birçok arabirimi uygulayabileceğinizi unutmayın.

İlgili konular