Bir şeyi private
kodlarken her şeyi en üst düzeye çıkarmanın iyi bir uygulama olduğunu söylemek adil midir?
Ve sonra sadece protected
bir alt sınıfa ihtiyaç duyuyorsa ya public
da başka bir sınıfa ihtiyaç duyuyorsa?
Bir şeyi private
kodlarken her şeyi en üst düzeye çıkarmanın iyi bir uygulama olduğunu söylemek adil midir?
Ve sonra sadece protected
bir alt sınıfa ihtiyaç duyuyorsa ya public
da başka bir sınıfa ihtiyaç duyuyorsa?
Yanıtlar:
Kısa cevap: Evet
Daha uzun cevap:
Evet, ancak bu, sınıflarınızı özel her şeyle yazarak başlamak için bir öneri olarak yorumlanmamalıdır; bu yaklaşım, bir arayüze yerleşmeden önce uygulama ayrıntılarına odaklanarak sınıf tasarımını ifade eder.
Bir sınıfı tasarlarken dikkate alınması gereken en önemli hususlardan biri, sınıfın nasıl kullanılacağıdır; özel / uygulama ayrıntıları hakkında düşünmeye başlamadan önce genel yöntemlerinizi düşünmeyi içerir.
Dahası, bu yaklaşım genellikle kendinize "Bu sınıf için nasıl bir birim testi yazarım?" Diye sorma şansını kaçırıyor. - bu gerçekten birim testler yazmasanız bile sorulması gereken önemli bir sorudur. (İlgili: "Test edilebilir kodu tanıtan tasarım ilkeleri nelerdir?" )
Bu nedenle, genel arayüzü tanımladıktan sonra, geri kalanını özel olarak varsayılan yapmak iyi bir fikirdir, çünkü bunların çoğu tipik olarak sınıf dışındaki herhangi bir şey için endişe duymayan cesur uygulama detayı olacaktır.
"Ve sonra sadece bir alt sınıfa ihtiyaç duyuyorsa onu korumalı hale mi, yoksa başka bir sınıfa ihtiyaç duyarsa herkese açık mı?"
Bu yanlış yaklaşım. Tasarım zamanında, hangi kamu erişimini vermek istediğinizi bilmelisiniz . Genellikle herkese açık erişim sağlarsınız çünkü sınıfınızın tüm amacı budur. Ve korumalı erişim sağlıyorsunuz çünkü alt sınıfların bir şeye erişmesini istiyorsunuz . Ve kimsenin işi olmayan şeyler için özel kullanırsınız.
Birisi Şimdi eğer ihtiyaçları onlar erişemiyor şeyler erişmek, o zaman bu konuda gerçekten zor düşünmek gerekir ihtiyacı . Bu erişime ihtiyaçları olmamalı veya tasarımınız yanlış. Belki tasarım olan yanlış ve bir şey bunu değiştirmek, böylece kamu olması gerektiğini herkese açık değil. Tasarım doğru ise, o zaman birlikte bir terslik mi var ihtiyacı düzeltmek böylece, o tasarımınızı zarar yerine.
private
yoksa protected
?
Nesneye Dayalı programlamanın bu yönünü anlamanın anahtarı, veri kapsülleme kavramıdır . Fikir, bir sınıfın uygulama ayrıntılarını gizleyerek anlaşılmasını kolaylaştırmaktır. Buna veri gizleme denir . Bu nedenle, sadece sınıfı kullanmak için gerekli olan işlevleri ortaya çıkarmak istiyoruz. Bu işlevler sınıfın arabirimidir .
Arabirimi bir arabanın tekerleği gibi düşünün. Tekerleği çevirerek arabanın hangi yöne gittiğine siz karar verirsiniz, ancak kapakların altında tekerleklerin dönüşünü değiştiren döner valfler, hidrolikler, kasnaklar vardır, ancak araba sürmek için makine mühendisi olmanıza gerek yoktur.
Yani sorunuzun cevabı evet. Bir sınıfla ilgili diğer ayrıntıları olabildiğince fazla ayrıntı gizlemek istiyorsunuz. Bir şeyin ne zaman genel, özel veya korunmalı olması gerektiğini anlamak kolaydır, ancak ustalaşması zordur.