Yöntem parametre türlerinin, dönüş türlerinin ve özellik türlerinin somutluğu hakkında kurallar


9

Bir süre önce yöntem parametre türlerinin, dönüş türlerinin ve özellik türlerinin somutluğu hakkında bir tür "temel kural" okudum, ama sadece hatırlamıyorum.

Geri dönüş türlerinizi olabildiğince somut tutmak ve parametre türlerinizi mümkün olduğunca soyut tutmak ... veya tersi.

Aslında iyi ya da kötü bir tavsiye olup olmadığını bilmiyorum, bu yüzden bu konuda kendi düşünceleriniz varsa, lütfen bir yorum bırakın.

Şerefe.

Yanıtlar:



7

Soyut girdilere ve somut çıktılara sahip olmak işlevinizi daha genel hale getirir. Bu, daha fazla şekilde kullanılabileceği anlamına gelir. Öte yandan, yönteminizin gelecekteki uygulamalarının nasıl çalışabileceğini sınırlandırarak, yönteminizin daha güçlü kısıtlamalarını koyar. Yani farklı hedefler arasında bir değiş tokuş.


4

Postel'in yasasının bir tahminini duymuş olabilirsiniz : "Gönderdiğiniz şeylerde muhafazakar olun, kabul ettiğiniz şeyde liberal olun."

Çoğunlukla kod yeniden kullanılabilirliğini en üst düzeye çıkarmakla ilgilidir. Neden işe yaradığını göstermek için dava açmak kolaydır. Java Iterable<T>örneklerini ele alalım. Metodunuzun yaptığı tek şey, tüm Ts boyunca yineleniyorsa Iterable<T>, parametre türünüz olarak sahip olmak, bu yöntemi, arayüzü uygulayan herhangi bir özel sınıftan bahsetmemek için 60'ın üzerinde yerleşik sınıfla kullanmanıza izin verir. Örneğin Vector<T>, yönteminizi çağıran herhangi bir kodun birinciye dönüştürülmesi gerekir Vector<T>.

Öte yandan, dönen bir Iterable<T>bir yöntemi kullanırken bir alacak olanlara dönüş değerini kullanabilirsiniz kod miktarını sınırlayan Iterable<T>parametre. Eğer çok somut türü dönerseniz, gibi Vector<T>, sonra dönüş değeri bir alan herhangi bir yöntemle içine geçirilebilir Serializable, Cloneable, Iterable<T>, Collection<T>, List<T>, RandomAccess, Vector<T>, AbstractList<T>, veya AbstractCollection<T>beklendiği gibi ve işe yarayacak.


Postel'in yasası "en büyük yazılım mühendisliği hataları" listemde oldukça yüksek.
CodesInChaos
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.