Bir nesne kavramını anlıyorum ve bir Java programcısı olarak OO paradigmasının pratikte bana oldukça doğal geldiğini hissediyorum.
Ancak son zamanlarda kendimi düşünürken buldum:
Bir saniye, bir nesneyi statik bir sınıf (uygun kapsülleme ve OO uygulamalarıyla) kullanmanın pratik faydaları nelerdir?
Bir nesneyi kullanmanın iki faydasını düşünebilirim (her ikisi de önemli ve güçlüdür):
Çok biçimlilik: çalışma sırasında işlevselliği dinamik ve esnek bir şekilde değiştirmenize olanak tanır. Ayrıca sisteme kolayca yeni işlevler 'parçalar' ve alternatifler eklemenize izin verir. Örneğin
Car
,Engine
nesnelerle çalışmak üzere tasarlanmış bir sınıf varsa ve Aracın kullanabileceği sisteme yeni bir Motor eklemek istiyorsanız, yeni birEngine
alt sınıf oluşturabilir ve bu sınıftaki bir nesneyi nesneye nesnelere iletebilirsinizCar
. hakkında bir şey değiştirmekCar
. Ve bunu çalışma zamanı sırasında yapmaya karar verebilirsiniz.'İşlevsellikten geçebilme': sistem etrafında bir nesneyi dinamik olarak geçirebilirsiniz.
Ancak statik sınıflara göre nesnelere daha fazla avantajı var mı?
Genellikle bir sisteme yeni 'parçalar' eklediğimde, bunu yeni bir sınıf oluşturarak ve ondan nesneleri somutlaştırarak yaparım.
Ancak son zamanlarda durup düşündüğümde, statik bir sınıfın normalde bir nesneyi kullandığım birçok yerde bir nesne ile aynı şeyi yapacağını fark ettim.
Örneğin, uygulamama bir kaydetme / yükleme dosyası mekanizması eklemek için çalışıyorum.
Bir nesneyle, çağıran kod satırı şöyle görünecektir: Thing thing = fileLoader.load(file);
Statik bir sınıfla, şöyle görünecektir: Thing thing = FileLoader.load(file);
Fark ne?
Oldukça sık, sade eski bir statik sınıfın aynı şekilde hareket etmesi durumunda bir nesneyi başlatmak için bir neden düşünemiyorum. Ancak OO sistemlerinde statik sınıflar oldukça nadirdir. Bu yüzden bir şey eksik olmalıyım.
Listelediğim iki nesneden başka nesnelere daha fazla avantaj var mı? Lütfen açıkla.
EDIT: Açıklığa kavuşturmak için. İşlevleri değiştirirken veya verileri aktarırken nesneleri çok kullanışlı buluyorum. Örneğin, melodileri oluşturan bir uygulama yazdım. MelodyGenerator
farklı melodiler yaratan birkaç alt sınıfa sahipti ve bu sınıfların nesneleri birbirinin yerine kullanılabiliyordu (Strateji modeli).
Melodiler de nesnelerdi, çünkü onları etrafta geçirmek faydalıdır. Akorlar ve Teraziler de öyle.
Peki ya sistemin 'statik' kısımları - etrafa aktarılmayacak? Örneğin - bir 'dosya kaydet' mekanizması. Neden statik bir sınıfta değil de bir nesnede kullanmalıyım?
FileLoader
Bir soketten okunan bir tane için takas etmeniz gerektiğinde ne olur ? Ya da test için bir alay? Veya bir zip dosyası açan?
System.Math
.NET'te statik bir sınıf olarak çok daha mantıklı olan bir şeyin örneğidir: asla takas etmeniz veya taklit etmeniz gerekmez ve hiçbir işlem mantıksal olarak bir örneğin parçası olamaz. 'Tasarruf' örneğinizin bu faturaya uygun olduğunu düşünmüyorum.
Thing
?