bir sınıfı sadece tek bir işlevi yeniden kullanmak üzere genişletmek makul bir uygulama mıdır?


10

Bir wordpress sitesi için bir dizi posta filtresi geliştiriyorum ve ilk 4'ü tek bir sınıfla oluşturdum.

Son ikisi, sınıflarında yalnızca tek bir işlevi (son bağlantıları üretme işlevi) paylaşacak kadar farklıdır.

Bu durumda veya herhangi bir sayıdaki benzer varsayımsal örnekte, bu işlevselliğe sahip olmak için orijinal sınıfı genişletmek makul mü yoksa daha iyi bir yol var mı?


Bu soruyu anlamıyorum. Sınıfla bir şeyler inşa etmekle ne demek istiyorsun? Bu sınıflar bir şeyden miras alıyor? Hiyerarşinin en üstündeki sınıfın ortak işlevi zaten olmaz mı?
David Thornley

Yanıtlar:


19

Hayır, eğer iki sınıf o kadar farklıysa, sadece bir işlevi paylaşırlarsa, bunlar birbirlerinin yerine kullanılamazlar ve bu nedenle liskov altlandırma ilkesini kırarlardı .

Bir taban sınıftan yalnızca bunu yapmak mantıklıysa elde edin. Tek bir kod parçasını paylaşmak nadiren kalıtım için bir gerekliliktir :)

Bu özel örnekte, bu işlevi kompozisyon üzerinden yeniden kullanmak istediğiniz gibi görünüyor ...


3
Kompozisyonu kalıtım yerine tercih edin! Çoğu durumda bu, uzun vadede hayatı kolaylaştırır.
Travis

Kompozisyon FTW!
back2dos

Cevabımı temel olarak @Sardathrion ile aynı, sadece ilgili ilkelere bağlı :)
MattDavey

7

Sınıf açıklamasında " ve " kelimesi varsa, iki (veya daha fazla) sınıfa ayrılmalıdır. Şeylerin görünüşüne göre, bu işlevi halihazırda sahip olduğunuz kişiler tarafından başvurulan başka bir sınıfın üyesi yapabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.