Veri Odaklı Tasarım Nesneye Dayalı Programlama ile nasıl uygulanır? [kapalı]


17

Veri Odaklı Tasarım (DOD) hakkında birçok makale okudum ve anlıyorum ancak DOD düşünülerek bir Nesne Odaklı Programlama (OOP) sistemi tasarlayamıyorum, OOP eğitimim beni engelliyor. İkisini karıştırmayı nasıl düşünmeliyim? Amaç, perde arkasında DOD kullanırken güzel bir OOP arayüzüne sahip olmaktır.

Bunu ben de gördüm ama çok yardım etmedim: /programming/3872354/how-to-apply-dop-and-keep-a-nice-user-interface


3
Belirli (ve oyun ilgili), bu soru çok daha şey göndermek gerek uzak çok genel.
DeadMG

Haklısın, ama bunun oyun programlamanın yanı sıra başka alanlarda da tartışıldığını görmedim.
Pombal

4
@DeadMG: Oyun geliştirme dışında kullanılan uygulamalara atıfta bulunma dışında, veri geliştirme tasarımı terimini oyun geliştirme dışında kullandığımı hiç görmedim. Veriye dayalı tasarımı düşünüyorsanız, bu aynı şey değildir.

Yanıtlar:


16

şunu söylemek isterim Noel Llopis'in blogunun muhtemelen nesne odaklı programlama ve veri odaklı tasarımın bir kombinasyonu için en iyi talimat . DOD teriminin yaratıcılarından biri, güçlü bir C ++ programcısıdır ve stili ve C ++ 'ın OO özelliklerinden nasıl yararlandığı hakkında çok şey yazmıştır.

Noel'e göre onları birleştirmenin temel unsurlarını söylesem sanırım:

  • POD ve üye olmayan, arkadaş olmayan işlevleri olabildiğince kullanın. Üye olmayan, arkadaş olmayan işlevler kapsüllemeyi geliştirir ve verileri, verileri sakladıkları için veri yöneliminin önemli bir parçasıdır.
  • Nesnelerinizde "geçici" durum saklamaktan kaçının. Geçici durum verilerinizi tıkar. Yeni bir sınıfa ait bir şeyi önbelleğe almanız gerekiyorsa (ör. Performans için), iki türü birbirine bağlayan, üye olmayan arkadaş olmayan işlevlerle a-a veya a-bir ilişki değil.
  • A veya B durumunda olabilecek nesnelerden kaçının. Biri A ve biri B olan iki nesne arasında geçiş yapmayı tercih edin.
  • Çok biçimlilikten kaçının, sanal işlevlerden kaçının, şablonlardan kaçının, verilerinizin gerçek benzerlik yerine sözdizimsel benzerliğe sahip olmasını sağlayan her şeyden kaçının .

DOD propagandasındaki diğer büyük isim şu anda Insomniac'dan Mike Acton, ancak yazdıklarını okurken gerçekten pro-OO (veya hala veri odaklı olduğu sürece anti-OO olmadığını) söyleyebilirim.


Cevabınız için teşekkür ederim ama söylediğiniz şey, OOD'yi onunla nasıl kullanabileceğim değil, DOD kullanmak için ne yapmam gerektiğidir. Noel'in blogunu okudum, Mike Acton'un rantları (: D), DICE'ın diğerleri arasında yayınları ve DOD'un nasıl kullanıldığını anlıyorum, sadece OO karışık olarak değil.
Pombal

2
Sizce OO nedir? Örneğin Noel kod OO çoğunu çağırmak - hala sınıflar ve örnekler vardır, hala tür tabanlı gönderme, hala miras olabilir (C ++ 0x POD tanımı buna izin için değiştirildi). Biri hala operasyonlardan ziyade veri ile başlayan problemleri modelliyor.

Örneğin, polimorfizm, nesne durumları gibi OOP'nin önemli bir parçasıdır. Veri odaklı tasarım, oyun varlıklarına animasyon yapabilme, etkileşim yapabilme, hareket edebilme, ... kalıtım kullanarak özellikler vermek olmalıdır. Her şey, fizik veya animasyon gibi her bir bileşene yalnızca gerekli varlıkları sağlayan akıllı bir veri yöneticisine bağlıdır.
danijar

@sharethis: İtirazınızı anlarsam, alt tip polimorfizm OO'nun temel bir özelliği. Desteksiz OO olduğunu iddia eden bir dilin garip olacağını kabul ediyorum, ancak bu , oyun OO tarzında programlanmış olsa bile , programlama oyunlarıyla karşılaşan sorunların ilk çare olduğu anlamına gelmez . Ayrıca, DOD'un gerçekten belirli türdeki polimorfizmden (nominal alt tipleme) kaçınmak, ancak başkalarını teşvik etmekle (C ++, ADL ile ad hoc polimorfizm veya değer temsili garantiler yoluyla yapısal polimorfizm) olduğunu iddia ediyorum.
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.