Yazılım Kalıplarını Yazılım Dünyası dışındaki kişilere nasıl açıklamalısınız?


10

Tasarım kalıplarını yeğenime açıklamak istiyorum, ama her zaman bunu yapmak için mücadele ediyorum. Bunun nedeni büyük ölçüde tasarım desenlerini net olarak anlamamış olmasından kaynaklanıyor. MVC, Singleton, Fabrika, Depo vb.Gibi kalıpları 10 yaşından büyük çocukların bile anlayabileceği kadar basit bir şekilde açıklamayı nasıl öneriyorsunuz?

Kalıpları anlamada yardımcı olabilecek örnekler arıyorum. Oyuncak, film, müzik vb.


2
Tasarım örüntüleri, matematiğe kategori teorisinin ne olduğunu yazılım geliştirmektir. . . en azından bunu bir matematikçiye açıklarım.
Eric Wilson

Bulmaca kitaplarının cevap bölümlerini okumak gibi. Her bulmacanın cevabını bilmeyeceksiniz, ama çoğu için yapacaksınız ve cevabını görmediğiniz bir bulmacanın nereden başlayacağınızı bileceksiniz.
StuperUser

Yanıtlar:


7

Ben başlangıcı düşünüyorum Vikipedi makalesinde muhtemelen iyi bir başlangıçtır:

A design pattern is a general reusable solution to a commonly occurring problem.

Yoksa bu belirli modellerin özelliklerini açıklamak mı istiyorsunuz?


spesifikasyonlar arıyor
gizgok


2
@gizgok: "özellikler"? Saçma. Daha ayrıntılı olarak ne isteyebileceğinizi belirleyin. "Özellikler" istemek belirsizdir.
S.Lott

5

Neden açıklamak istediğinize bağlı. Eğer sadece kalıp fikrini açıklamak istiyorsanız, bir Kalıp Dili mimarisinden örnekler alırdım. Bu araştırmacılar, bir binanın veya bir odanın belirli yönlerinin, insanları o binada veya odada yaşamaktan veya çalışmaktan zevk aldığını - tüm dünyada farklı kültürlerde, farklı yapı malzemeleriyle ve farklı mahallelerde. Örneğin "İki Yüze Işık" gibi. İki duvarda pencereli odalar sadece bir (veya hiçbiri) olanlardan çok daha güzel. Yazılımda da böyle desenler var - farklı programlama dilleri kullanarak bile, bazı desenler tekrar ediyor. Ve çok farklı yazılımlarda bile - bir oyun, finansal hesaplamalar için bir şey, Facebook'un içindeki motor vb.

Sonra belirli bir model hakkında konuşmak istiyorsanız (neden olduğundan emin değilim, on yaşında bir çocuğa), nasıl çalıştığını açıklamaya çalışmadan önce bunun nerede kullanıldığına dair örnekler vererek işe başlayabilirsiniz. Böylece Kompozit, konteynerin ağırlığını ve içerdiği tüm konteynırların ve gevşek şeylerin toplamını ekleyerek bir bavulun ağırlığını anladığınızda açık bir özyinelemeden kaçınmanıza izin verir, ancak aynı zamanda bir şirketteki maaş yükünü hesaplamak için de çalışır veya bir üretim kompleksindeki kapasite. Bu, on yaşındakiler için biraz ilginçse, nasıl çalıştığını açıklamaya çalışabilirsiniz.


1
coz 10 yıl
yaşlılar

2

Tasarım kalıpları var çünkü bazı insanlar birlikte çalışabilecek yazılım parçalarını bir araya getirmenin yollarının olduğunu fark ettiler ve fikirlerini paylaşmak istediler.

Tasarım kalıplarını, insan gruplarını düşündüğünüz şekilde düşünebilirsiniz. Örneğin, bazen tüm toplantılarımızı kolaylaştıran bir kişi olur. Bu, nesneler arasındaki etkileşimi kolaylaştıran bir Denetleyici modeli gibidir.

Ya da odanın önündeki bir kişinin ellerini kaldırmasını izlediğini izleyen bir izleyici düşünün, sonra soruyu herkesin duyabileceği şekilde tekrarlayın ya da cevap vererek tepki verin. Bu bir Konu / Gözlemci modeline benzer.

Çevirmenler (Adaptör deseni), güvenlik görevlileri (Proxy), bir alandaki uzmanlar (Singletons) veya arabanızı çalıştıranları kontrol eden kişiler (Doğrulayıcılar) gibi davranan desenler vardır.

Nesneler ve insanlar arasındaki fark, istediğimiz kadar çok nesne oluşturabilmemiz ve birden fazla farklı kopyasına sahip olabilmemizdir. Bu, nesnelerin hangi sorumluluklara sahip olması gerektiğini anlamayı, sorumluluklarını küçük tutmayı ve yaptıklarını çoğaltmamayı önemli kılar, böylece yazılım çok karmaşık olmaz. Uzmanlar bu konuda çok deneyime sahipler ve bize, yazılımın nasıl etkileşime girdiğine dair bu kalıpları verdiler, böylece yapmaya çalıştığımız iş için ne tür bir rolün en iyi metafor olduğuna karar verebiliriz ve en uygun şekilde işbirliği yapmak için yazılım parçaları.


1

Ona, bir pişirme / yemek yapmak için kullanılan pişirme teknikleri gibi, sistemin bağımsız bileşenlerini oluşturmak için kullanıldıklarını söyleyin. Patates, et ve sebze ile akşam yemeği hazırladığınızı düşünün. Patateslerin haşlanıp püre edilmesine, etin ızgaraya ve sebzelerin buharda pişirilmesine karar veriyorsunuz. Izgara tasarım deseninizi patatesler için et, kaynatma ve püre desenlerini ve sebze için buhar desenini pişirmek için kullanırsınız.


1

Bu tasarım modellerinin çoğu nesne yönelimli tasarımın bir parçasıdır. Onları OOD bilgisi olmayan birine gerçekten açıklayamazsınız. Verilen desenle elde ettiğiniz hedefi açıklayabilirsiniz, ancak nasıl çalıştığını veya niye ihtiyacınız olduğunu değil. Tabii ki tüm OOD'u açıklamaya girmedikçe.


1
Çoğu tasarım deseni, belirli bir sorunu çözmek için uygun soyutlamaların nasıl kullanılacağına ilişkin talimatlardır. Aslında nesne yönelimli tasarımın bir parçası değildir.
Pemdas

@Pemdas: örneğin fabrika almak. OOP dışında nasıl bir anlamı var?
vartec

OOP, kalıpların en çok konuşulduğu yerdir, ancak Diğer diller ve kendi kalıpları vardır. Örneğin Monadlar (genellikle İşlevsel dillerde bulunur, bazen OOP'de yapılabilir) kendi kalıplarıdır ve diğer kalıpları etkinleştirirler. Ayrıca, burada da belirtildiği gibi, tasarım kalıpları Mimariden programlamaya geldi.
Charlie

Tasarım desenlerinin OOP ile hiçbir ilgisi yoktur. Tasarım kalıpları tekrar tekrar ortaya çıkan problemler ve problemleri ele almak için geliştirilen stratejilerle ilgilidir. Eğer bir strateji tekrar tekrar geliştirilirse, bir düzeniniz olur. Bir strateji tekrar tekrar çalışırsa, ona bir tasarım deseni olarak adlandırırsınız, eğer tekrar tekrar başarısız olursa buna bir anti-desen olarak adlandırırsınız. Tasarım kalıplarını öğrenmek, geçmişte tekrar tekrar çalışan öğrenme stratejileri anlamına gelir. Programlamadan nasıl bahsetmedim, çok daha az OOP?
gnasher729

0

Tasarım kalıpları ilk olarak mimarlık için tanımlanmıştır. Meydanın konumu, binalar ve genellikle tekrarlanan diğer düzenler gibi şeyler. Oradan başlayabilirsiniz. Ana giriş gibi şeyler sokağa, odanın köşesine açılan kapıya ve aklınıza gelebilecek her şeye bakar. Orijinal yazarın kalıpları yaygın olarak kullanılmamıştır. Artık kalıpların kendilerinin yeterli olmadığını belirtiyor.

Odanın etrafında hareket etmeyi tartışın. Kapının önüne bir sandalye koy. Pencereleri veya kapıyı başka bir yere taşımak mantıklı mı? Neden ya da neden olmasın?

Masada bir yer ayarlamak gibi bir şey deneyin. Sizden uzaklaşacak şekilde bir şeyler düzenlemeyi deneyin. Normal desen ve çalışmak zor değil. Normal şekilde kurun. Bu hızlı bir bardak meyve suyu için uygun bir düzen mi? Desenler her zaman uygun değildir.

Sürekli desenlerle yaşıyoruz. Üç ya da dört kitap alın ve sayfalarını aramaya başlayın. Düzende belirgin bir desen var; başlık sayfası, içindekiler, içerik ve dizin. Tüm bileşenlere gerek yoktur, ancak bunları yerinde görmek kafa karıştırıcı olacaktır.


0

Tasarım modelleri, jiglerin ağaç işçiliğine ne olduğunu yazılım geliştirmeye yöneliktir. Daha büyük projelerde kullanmak için iyi bilinen 'kesmeler' yapabileceğiniz bir araçtır.

Kesimi yapmak için jig'e ihtiyacınız olmadığını unutmayın, bazı durumlarda sadece daha kolaydır.


0

Diğer cevabımın genel durum için geçerli olduğunu hissediyorum, ancak OP ayrıntılar sorarak yorumladı (bu yüzden ayrı bir cevabı hak ettiğini hissettim). Ne yazık ki Depo desenine aşina değilim, ama diğerlerine bir bıçakla bakacağım. Kural olarak, bunları açıklamanın en iyi yolu, hangi sorunu çözmek istediğiniz, neden çözmek istediğiniz ve sorunun nasıl başardığıdır.

Singleton

Bu desen, bir şeyden sadece birinin olduğunu garanti etmek istediğimizde kullanılır. Desen, başkalarının bizim neslimizi yaratmasını engelleyerek gerçekleştirilir.

Vikipedi

MVC

Bu model, bununla birlikte gelen tüm avantajlarla şeyleri modüler tutmaya yardımcı olmak için kullanılır. Görünüm "kullanıcı arabirimi", Model verilerdir (iş mantığı dahil) ve Denetleyici kullanıcı eylemlerinin modeli nasıl işlediğidir. Bu modülerlikle, hiçbir şey aynı modelle çalışmak için birden fazla görünüm / denetleyiciye sahip olmamı engellemiyor. Aşırı basitleştirilmiş bir örnek için, bir web sitesi, masaüstü uygulaması ve iPhone'um ("görünümler + denetleyiciler") aracılığıyla e-postalarımla ("model") etkileşim kurabilirim. Paylaşılan bir grup posta kutum varsa, e-posta göndermeyen bir denetleyici oluşturabilir ve aynı uygulama görünümünü ve e-postasını yeniden kullanabilirim. (evet aşırı basit, ama umarım anlaşılabilir :))

Ek olarak, bu iyi tanımlanmış kaygı ayrımı ile, birindeki (ideal olarak) değişiklikler diğerinde değişiklik gerektirmez. Somut örnek, bir Oracle veritabanı yerine bir MySQL veritabanına okuma / yazmayı desteklemem gerekirse, sadece modelimi değiştirmeniz gerekir ve görünümüm / denetleyicim değişmez.

Vikipedi

Fabrika

Fabrika olarak adlandırılan birçok benzer desen olduğu için burada dikkatli olmalısın ... Soyut Fabrika hakkında konuşacağım , ancak aynı zamanda bir Fabrika Metodu deseni olduğunu da bilmelisiniz .

Temel olarak, hangi adımları uygulamak istediğimi bildiğimde bir Soyut Fabrika kullanırdım, ancak bu bireysel adımların nasıl gerçekleştirileceğine ilişkin adımlar değişebilir. Örneğin, üzerinde bir düğme olan bir iletişim kutusu oluşturmam gereken bir uygulama oluşturabilirim. Kodumun varsayımsal bir UI fabrikası kullanmasını sağlayarak, kodumu Windows yerine Mac veya Linux'a ihtiyacım varsa, sadece farklı bir fabrika sağlarım ve kodumun geri kalanı değişmez. Bir potansiyel olarak daha vahşi bir örnek için, bir Web Fabrikası olabilir ve aniden masaüstü uygulamamı destekleyen kodun çoğu şimdi de zengin bir web sitesine güç veriyor :) (diğer nedenlerle pratik değil, ancak teoride :))


0

Bilgisayar korsanı olmak isteyen 10 yaşında bir çocuğa - derim.

Düşününce dünyanın en iyi hacker'larından bazılarının yanınızda oturabileceğini düşünün .. ve şimdi ve sonra derler ki ... "bunu böyle yaparsanız bilirsiniz ... [desen ekle] ... o zaman kod [daha hızlı / daha güvenli / daha sürdürülebilir / vb.] olacaktır.

Şimdi fikre meraklı olduğunu varsayıyorum - onun "hack görevi" ayarlayacağım her örüntüyü açıklamak için zamanımı boşa harcamaz .. ve sonra bir tasarım deseni uygulayın ve değeri açıklayın ... sonra sadece onu işaret iyi kaynaklar ve nereye gittiğini görmek

Ama çoğunlukla onları rehberlik yoluyla öğrenmesi gerekecek.

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.