Nesneye yönelik düşünce süreci nedir? [kapalı]


9

Son birkaç aydır Zend'in MVC uygulaması ile birlikte OOP okuyorum. Programlamaya genel olarak yeniyim, ama şeyleri 'doğru' şekilde öğrenmem gerektiğini şiddetle hissediyorum, bu da benim için bir şeylerin neden böyle yapıldığını anladığımdan emin olmam anlamına geliyor . Yani, bir şeyin nasıl yapılacağını öğrenirken (herhangi bir şey, müzik deyin), bir şeyin nasıl yapılacağını öğrenmenin en iyi yolunun neden bu şekilde yapıldığını bilmektir.

Her neyse, kendi iş modellerimi nasıl geliştireceğimi anlamak için çok uğraşıyorum (yani MVC'nin M'si) ve bunun genel olarak OOP'yi anlamadığım için değil, çünkü birkaç kişi için çalıştım çünkü ve kavramları kavramanın çok zor olduğunu düşünmüyorum. Aslında çalıştığım örnekleri çok sezgisel buluyorum. Benim için sorun, kendi problemlerimi nesneye yönelik çözümlere dönüştürme sürecinde yatıyor. Kitaplarda (şimdiye kadar okuduğum) örnekler çok açık, bu yüzden problemi nesnelere dönüştürme süreci çok zor değil. Eksik olabileceğimi düşündüğüm, üst düzey soyutlanmış bir süreç. Her nesne yönelimli çözümün en üst düzeyde yanıtlaması gereken bazı adımlar veya sorular listesi.

Böyle bir süreci en fazla beş adımda tanımlamak zorunda olsaydınız, bunlar ne olurdu ve neden? Herhangi bir problemi nesne yönelimli bir çözüme dönüştürmede en etkili süreç nedir?


1
OOP her zaman hepsi bu değil ...
İş

OOP çalışmanızda henüz tasarım desenleri hakkında bir şey okudunuz mu?
Zoredache

1
Modeller oluşturmakta zorlandığınızda Eric Evan'ın Domain Driven Design hakkındaki kitabını okumanızı tavsiye ederim . Ayrıca bkz. @Simon Stellings cevabı. Kitap bu süreci oldukça ayrıntılı bir şekilde ele alıyor.
Falcon

@Zoredache Ben tasarım desenleri kavramının yanı sıra singleton, fabrika ve MVC kendisi (Zend'in uygulamasında da ön denetleyici olan) gibi bazı örneklere rastladım. Ancak, bu benim bir sonraki adımımdı. Martin Fowler'in kurumsal desenler hakkındaki kitabını aldım ve girişin sadece bir kısmını okudum. Tavsiye edeceğiniz net, okunması kolay bir tanıtım mı?

@Falcon Geçen gün SO php / MySQL ve tarih biçimlendirme hakkında bir sorum vardı ve cevabınızı seçerdim ama sadece bir yorum, ne için değer.

Yanıtlar:


10

Uygun bir model bulmak her zaman kolay değildir. Sade bilgiden daha fazla deneyim gerektiren bu şeylerden biridir. Bununla birlikte, aşağıdaki basit tarif, ilk zihinsel bloğu aşmanıza yardımcı olabilir.

Bu makalede Abbott tarafından orijinal olarak tanımlanmıştır ve sıklıkla "Abbott'un metin analizi" olarak adlandırılmaktadır.

  1. Düz metin belirtimi yazın.
  2. Sınıfları belirleyin : İsimler iyi adaylardır.
  3. Özellikleri bulun : Sıfatlar / zarflar iyi adaylardır.
  4. İşlemleri bulun : Fiiller iyi adaylardır.
  5. Sınıflar arasındaki ilişkileri bulun .
  6. Refine.

Misal:

İsimler , fiiller ve adjectivesişaretlenir.

Kütüphane içeren kitaplar ve dergiler . Belirli bir kitabın birkaç kopyası olabilir . Bazı kitaplar içindir kredilerin sadece. Diğer tüm kitaplar edilebilir ödünç herhangi biri tarafından kütüphane üyesi üç hafta boyunca. Kütüphanenin üyeleri normalde altı kadar ödünç alabilir öğeleri bir anda, ama personel üyeleri olabilir ödünç 12 kadar öğeleri aynı anda. Sadece personel üyeleri dergi ödünç alabilir .short-term

İlk analiz yinelemesi şöyle olur:

Sınıflar:

  • Kütüphane
  • Kitap, Dergi
  • kopya
  • borç
  • Kütüphane Üyesi
  • madde
  • Personel

Buradan itibaren, hangi sınıfın davranışı uygulamak için hangi niteliklere ve yöntemlere ihtiyaç duyduğunu düşünebilir ve daha sonra bu modeli giderek daha da hassaslaştırabilirsiniz.


1
İyi cevap. Abbott'un makalesine ek olarak, Eric Evan'ın Domain Driven Design adlı kitabını da öneriyorum . Proje için her yerde bir dilin nasıl oluşturulacağını ve güçlü bir modelin nasıl damılacağını öğretir.
Falcon

Bu cevaba çekildim çünkü biraz dilbilim okudum ve fazla çaba harcamadan bana sezgisel bir anlam katıyor, ancak aynı nedenlerden korkuyorum çünkü çok fazla benzetmenin beni yoldan saptırabileceğini buldum .

@Falcon +1, Kandinsky kapak resmi içeren bir kitap önerdiği için.

@ tbj1982: Kesinlikle haklısın. Bu basit bir sezgisel taramadır ve sonuçlar akılda tutulur. Altın mermi değil, ama yardımcı bir başlangıç ​​olabilir.
blubb

4

Kanımca TDD yaklaşımını kullanmak doğal ve etkilidir:

  1. Belirli gereksinimleri not edin (Verilen, Ne Zaman, Sonra)
  2. Her gereksinimi (en önemlisi önce) birim testine çevirin.
  3. # 2 ile yazılmış testi geçmek için en az miktarda kod yazın.
  4. Testi geçtikten sonra, kodunuzu SOLIDD tasarım ilkelerine göre yeniden düzenleyin.
  5. # 4'ten sonra, kodunuzun yazılı tüm testleri geçtiğinden emin olun.
  6. 2-5 tekrarlayın.

Bu işlemle, yavaş yavaş ses tasarımı ile test edilebilir kod üretebilirsiniz. İlk başta yazma testinin gereksiz olduğunu düşünebilirsiniz, ancak bu etkinlik aslında sağlam mimari oluşturmanıza yardımcı olur.


3

İşte c ++ kodunda kullandığım adımlar:

  1. sınıf ismine karar ver
  2. yapıcı parametrelerine ve veri üyelerine karar verir.
  3. üye işlev adlarına ve prototiplerine karar verme
  4. diğer sınıflardan bağımsız yap
  5. Tasarım yapılıyor ve diğer her şey sadece uygulama.

(1) 'in nedeni sınıfa ait işlevsellik kapsamını tanımlamasıdır. (2) 'nin nedeni, sınıfın dış dünya ile nasıl iletişim kurduğunu tanımlamasıdır. (3) 'ün nedeni, her durumda sınıfın hangi işlevselliğinin gerekli olacağını nasıl seçeceğini tanımlamasıdır. (4) 'ün nedeni, sınıfın birçok farklı durumda kullanılmasına izin vermesidir. (5) 'in nedeni, tasarım ve uygulama arasındaki sınırı tanımlamasıdır.


Adlandırma için +1. Sadece isimleri eklemenin düşünce süreçlerini ne kadar düzenleyebileceği şaşırtıcı, çünkü onunla "gerçek dünya" nın tüm bilgisini dolaylı olarak getiriyorsunuz.
Mark Brackett
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.