Uzun zamandır geliştiriciyim (49 yaşındayım) ama nesne odaklı geliştirmede yeniyim. Bertrand Meyer’in Eiffel’inden beri OO hakkında okudum, ancak çok az OO programlaması yaptım.
Mesele şu ki, OO tasarımındaki her kitap, bir tekne, araba veya çok sık kullandığımız ortak nesnelerden bir örnekle başlar ve öznitelikler ve yöntemler eklemeye başlar ve nesnenin durumunu nasıl modellediklerini ve ne ile yapılabileceğini açıklar. o.
Bu yüzden genellikle "model ne kadar iyi olursa uygulamadaki nesneyi ne kadar iyi temsil ederse ve sonuç o kadar iyi çıkar" gibi bir şeye giderler.
Şimdiye kadar çok iyi, ama diğer taraftan, “bir sınıf sadece tek bir sayfaya sığmalı” gibi tarifler veren birkaç yazar buldum (şimdi ne denemek istediğimize “hangi monitör boyutuna?” Eklerdim. kodu yazdırmak için!).
Örneğin PurchaseOrder
, davranışını kontrol eden sınırlı bir durum makinesine sahip olan bir sınıfı ve PurchaseOrderItem
buradaki çalışmadaki argümanlardan birisini, PurchaseOrder
bazı yöntemlerle (bir veri sınıfından biraz daha fazla) basit bir sınıf kullanmamız gerektiği ve PurchaseOrderFSM
sonlu durum makinesini kullanan bir “uzman sınıfı” PurchaseOrder
.
Bunun, Jeff Atwood'un Kod Kokuları'ndaki Kod Yazma Korkusuyla ilgili mesajında “Özellik Envy” veya “Uygunsuz samimiyet” sınıfına girdiğini söyleyebilirim . Ben sadece sağduyu derdim. Ben verebilir Eğer onaylamak veya benim gerçek satın alma siparişi iptal sonra PurchaseOrder
sınıf olmalı issuePO
, approvePO
ve cancelPO
yöntemleri.
Bu, OO'nun temel taşları olarak anladığım “bağdaştırmayı maksimize et” ve “eşleşmeyi minimize et” asırlık ilkeleri ile uyumlu değil mi?
Ayrıca, bu sınıfın korunmasına yardımcı olmuyor mu?
PurchaseOrder
, sadece yöntemleri sayabilirimissue
,approve
vecancel
.PO
Eki yalnızca negatif bir değer katar.