SIKI SIKI TUTMAK
Nesne yönelimli tasarımda , GRASP , "GRASP (nesne yönelimli tasarım Genel Sorumluluk Atama Yazılım Modelleri)"nin kısaltması olan Genel Sorumluluk Atama Yazılım Modelleri anlamına gelir. Kendi başına kalıplardan daha fazlası olduğu düşünülse de , bunlar yazılım tasarımında önerilen uygulamaların bir dizi "iyi uygulamaları" dır.
Bilgi uzmanı
Bilgi uzmanı GRASP, sorumlulukların atanmasının temel ilkesidir. Örneğin bize, bir nesnenin yaratılmasının veya bir yöntemin uygulanmasının sorumluluğunun, onu yaratmak için gerekli tüm bilgileri bilen sınıfa ait olması gerektiğini söyler. Bu şekilde daha uyumlu bir tasarım elde edeceğiz ve böylece bilgi kapsüllenmiş halde kalır (azalmış bağlantı).
- Sorun
- Nesnelere sorumluluk atamanın genel ilkesi nedir?
- Çözüm
- Bilgi uzmanına bir sorumluluk atayın.
- Faydalar
- Kapsülleme korunur, nesneler görevlerini yerine getirmek için kendi bilgilerini kullanır. Davranış, gerekli bilgileri içeren sınıflar arasında dağıtılır. Anlaşılmaları ve bakımı daha kolaydır.
Yaratıcı
Creator modeli , yeni nesnelerin veya sınıfların yaratılmasından (veya örneklenmesinden ) kimin sorumlu olması gerektiğini belirlememize yardımcı olur .
Yeni örnek, sınıf tarafından şu şekilde oluşturulmalıdır:
- Nesnenin oluşturulmasını gerçekleştirmek için gerekli bilgilere sahip veya
- Nesnenin oluşturulan örneklerini doğrudan kullanın veya
- Sınıfın birden çok örneğini depolar veya işler
- Sınıfı içerir veya ekler.
Bu kalıbı kullanmanın sonuçlarından biri, oluşturulan sınıf ile oluşturan sınıf arasındaki görünürlüktür. Bir avantaj, bakım ve yeniden kullanım kolaylığı anlamına gelen düşük bağlantıdır. Örnekleme, nesne yönelimli bir sistemdeki en yaygın etkinliklerden biridir. Sonuç olarak, yaratma sorumluluklarını atamak için genel bir ilkeye sahip olmak yararlıdır. İyi eşlenirse tasarım, gevşek bağlamayı, artan netliği, kapsüllemeyi ve yeniden kullanımı destekleyebilir.
Denetleyici
Denetleyici kalıbı, belirli bir arayüz ile onu uygulayan algoritma arasında aracı görevi gören, kullanıcıdan verileri alan ve bunları farklı sınıflara gönderen bir kalıptır. denilen yöntem.
Bu model, kodun yeniden kullanımını artırmak ve aynı zamanda daha fazla kontrole sahip olmak için iş mantığının sunum katmanından ayrılması gerektiğini önerir.
Uyum artırmak ve kuplajı azaltmak için sistem olaylarının mümkün olduğunca çok sayıda denetleyiciye bölünmesi önerilir.
Yüksek uyum ve düşük bağlantı
Uyum ve bağlantı kavramları yakından ilişkili değildir, ancak daha düşük düzeyde bir bağlantı ile daha yüksek bir uyum derecesine sahip olunması önerilir. Bu sayede daha az bağımlılık olur ve sistemdeki her nesnenin amacı belirlenir.
Yüksek uyum
Bize bir sınıfın sakladığı bilgilerin tutarlı olması ve (mümkün olduğunca) sınıfla ilgili olması gerektiğini söyler.
- Coincident Cohesion : Modül, aralarında herhangi bir ilişki olmaksızın birden fazla görevi gerçekleştirir.
- Mantıksal Uyum : Modül, birden fazla ilgili görevi gerçekleştirir, ancak çalışma zamanında bunlardan yalnızca biri gerçekleştirilecektir.
- Temporal Cohesion : Bir modül tarafından yürütülen görevler, tek ilişki olarak "aynı anda yürütülmeleri gerektiği"ne sahiptir.
- Prosedürel Uyum : Bir modülün görevleri arasındaki tek ilişki, "ürüne" özgü bir dizi adıma karşılık gelmeleridir.
- İletişim Uyum : Görevler, "ürün" için tipik olan bir dizi adıma karşılık gelir ve hepsi aynı verileri etkiler.
- Bilgi Uyum : Bir modül tarafından yürütülen görevlerin kendi başlangıç noktaları, bağımsız kodlamaları ve aynı veriler üzerinde çalışmaları vardır. Tipik örnek: NESNELER
- İşlevsel Uyum : Modül, yerine getirmek için tek bir amacı olan ve yalnızca bir görevi yürüttüğünde, İşlevsel Uyum'a sahip olduğu söylenir.
Düşük bağlantı
Sınıfların mümkün olduğunca birbiriyle daha az bağlantılı olması fikridir. Herhangi birinde bir değişiklik olması durumunda, sınıfların geri kalanı üzerinde mümkün olan en az etki olacak, yeniden kullanımı teşvik edecek ve sınıflar arasındaki bağımlılığı azaltacak şekilde.
- İçerik Birleştirme : Bir modül, başka bir modülün içeriğine doğrudan başvurduğunda. (Yüksek seviyeli dillerde çok nadirdir)
- Ortak Kuplaj : İki modül aynı global değere eriştiğinde (ve etkilediğinde).
- Kontrol Birleştirme : Bir modül, yürütme mantığını belirleyen bir kontrol elemanını diğerine gönderdiğinde.
Polimorfizm
Ne zaman tipe bağlı bir sorumluluk yürütmek zorunda kalsanız, polimorfizmden faydalanmalısınız , alternatifler veya ilgili davranışlar tipe (sınıfa) göre değiştiğinde, davranışın sorumluluğunu - polimorfik işlemleri kullanarak - türlere atayın. davranış değişir. Farklı nesnelerdeki hizmetlere aynı adı atayın.
Saf üretim
Saf üretim, problem alanındaki gerçek bir varlığı veya nesneyi temsil etmeyen, ancak kasıtlı olarak eşleşmeyi azaltmak, uyumu artırmak ve/veya kodun yeniden kullanımını geliştirmek için oluşturulan sınıflarda gerçekleşir. Tasarımcı gevşek bir sınıfla karşılaştığında ve bazı yöntemleri uygulayacak başka bir sınıfı olmadığında çözüm budur. Yani "icat edilmiş" bir sınıftır veya problemde yoktur, ancak eklenerek sistem yapısal olarak iyileştirilir. Bir kontrendikasyon olarak, bu kalıbı kötüye kullanırken genellikle işlev veya algoritma sınıflarının (sadece bir yöntemi olan) ortaya çıktığını belirtmeliyiz.
Dolaylı
Dolaylılık modeli, aralarındaki aracılık sorumluluğunu üçüncü bir ara elemana (sınıf) atayarak iki sınıf arasındaki bağlantıyı azaltmamızı sağlar. Örneğin, bir POS'ta (Satış Noktası Terminali), onu gerçekleştiren sınıflarla farklı ödeme yöntemlerini belirleyebileceğimiz bir Arayüz "Adaptör" kullanın.
- Sorun
- Öğeler arasındaki doğrudan bağlantıyı önlemek/azaltmak ve yeniden kullanımı iyileştirmek için sorumluluklar nereye atanır?
- Çözüm
- Öğeler arasında aracılık yapan bir nesneye sorumluluk atayın.
Korumalı Varyasyonlar
Kendinizi değişimden korumanın temel ilkesi, önceki bir analizde değişikliklere açık olan her şeyi öngördüğümüz her şeyi bir arabirime sararak, çeşitli uygulamalar oluşturmak ve gelecekteki uygulamalara izin vermek için polimorfizmi kullanmaktır. sistemimize mümkün olduğunca en az bağlı kalan şeydir, böylece varyasyon meydana geldiğinde, bizim üzerimizde en az etkiye sahip olur. Gelişmiş Kavrama modellerinin bir parçasıdır.
Ayrıca