Aradaki fark, bir şeyin ne olduğu ve Bir şeyin nasıl davrandığı arasındaki.
Pek çok dil ikisini bir araya getirmeye çalışır, ancak bunlar oldukça farklı şeylerdir.
Nasıl ve Nasıl?
Her şey miras alırsa object
o zaman bazı faydalar meydana gelir: nesnenin herhangi bir değişkeni herhangi bir değeri tutabilir. Ama ovmak da olduğu, her şey olmalıdır (davranırlar how bir benzeri) object
(gibi ve göz neyi ) bir object
.
Fakat:
- Nesnenizde anlamlı bir eşitlik tanımı yoksa ne olur?
- Anlamlı bir karması yoksa ne olur?
- Nesneniz klonlanamıyor, ancak nesneler olabilirse ne olur?
Her iki object
tür arasında da ortak bir özellik sağlamayan nesne nedeniyle, ya tür temel olarak işe yaramaz hale gelir. Ya da bazı object
gotikler dışında neredeyse evrensel davranışı kanıtlayan bazı evrensel özelliklerin kırılmış / ayakkabı boynuzlu / saçma bir tanımına sahip nesneler olacaktır .
Ne ile ilişkili değildir Nasıl
Alternatif olarak, Ne ve Nasıl Ayrı tutabilirsiniz . Sonra birkaç farklı türleri (en ortak noktası hiçbir şey tüm neyi ) can işbirlikçisi bakıldığı zaman aynı şekilde tüm davranan nasıl . Bu anlamda bir fikri Iterator
belirli değildir Ne , ama nasıl . Özellikle Nasıl bir şeyle sizi etkileşim yapmak Henüz bilmiyorum ne sen etkileşimde bulunur.
Java (ve benzeri), arayüzler kullanarak buna yaklaşımlara izin verir. Bu bağlamdaki bir arayüz iletişim araçlarını ve dolaylı olarak izlenen bir iletişim ve eylem protokolünü açıklar. Kendini belirli bir Nasıl olarak ilan eden herhangi bir şey , bunun protokol tarafından belirtilen ilgili iletişimi ve eylemi desteklediğini belirtir. Bu, herhangi bir ortak çalışan güvenmek sağlayan How ve tam olarak hangi belirterek saplanıp değil ne 'ler kullanılabilir.
C ++ (ve benzeri) ördek yazarak buna yaklaşım sağlar. Ortak çalışma türü, belirli bir derleme bağlamında, nesnenin belirli bir şekilde etkileşime girebileceğini belirten bir davranışı izlediğini bildirirse umursamaz. Bu, C ++ işaretçileri ve belirli işleçleri aşan nesnelerin aynı kod tarafından kullanılmasına izin verir. Çünkü eşdeğer sayılmak için kontrol listesine uyuyorlar.
- * a, a->, ++ a ve a ++ -> giriş / ileri yineleyiciyi destekler
- * a, a->, ++ a, a ++, --a ve a-- -> çift yönlü yineleyiciyi destekler
Altta yatan tür bir kabı yinelemek zorunda bile değil, herhangi bir şey olabilir . Buna ek olarak, bazı ortak çalışanların daha genel olmasına, sadece bir işlevin ihtiyaç duyduğunu hayal etmesine izin verir a++
, bir yineleyici bunu tatmin edebilir, böylece bir işaretçi de olabilir, bir tamsayı da olabilir, herhangi bir nesne uygulayabilir operator++
.
Alt ve Üst Özellikler
Her iki yaklaşımın da problemi az ve fazladır.
Bir arabirim kullanmak, nesnenin belirli bir davranışı desteklediğini beyan etmesini gerektirir, bu da yaratıcının bunu başından itibaren emmek zorunda olduğu anlamına gelir. Bu, bazı nedenleri nedir bunu beyan etmedi olarak, kesim yapmamaya s'. Hiç Ayrıca araç ne de ortak bir atası var, arayüz temsil How . Bu, ilk sorununa geri döner object
. Bu, ortak çalışanların gereksinimlerini gereğinden fazla belirtmelerine neden olurken, aynı zamanda bazı nesnelerin bildirim eksikliği nedeniyle kullanılamaz olmasına veya beklenen bir davranış kötü tanımlandığı için gizli yakalamalar olmasına neden olur.
Bir şablon kullanmak, ortak çalışanın tamamen bilinmeyen bir Ne ile çalışmasını gerektirir ve etkileşimleri aracılığıyla bir Nasıl tanımlar . O analiz etmeliyiz gibi bazı ölçüde bu markaları, sert işbirlikçileri yazma Ne dışına iletişim ilkel için (işlevleri / alanlar / vs) derleme hataları kaçınırken, ya da en azından nokta nasıl belirli bir Ne için gereksinimleri ile eşleşmiyor How . Bu herhangi bir mutlak minimum gerektirecek ortak çalışan veriyor Ne en geniş yelpazede sağlayan neyi 'kullanılacak s. Ne yazık ki, bu teknik için belirli bir iletişim ilkelerini sağlayan nesnelerin anlamsız kullanımına izin verme dezavantajı vardır.Nasıl , ama her türlü kötü şeylerin ortaya çıkmasına izin veren zımni protokolü takip etmeyin.
yineleyiciler
Bu durumda bir Iterator
bir olduğunu nasıl o etkileşim açıklaması için kısaltmadır. Bu açıklamaya uyan her şey tanım gereği an Iterator
. Nasıl bilmek genel algoritmalar yazmamızı ve algoritmanın çalışması için sağlanması gereken ' Belirli bir Neyin nasıl verildiğini ' içeren kısa bir listeye sahip olmamızı sağlar . Bu liste fonksiyonu / özellikler / vb bunların uygulanması dikkate özgü alır vardır ne algoritması tarafından ele ediliyor.