2 — Analiz Modeli

Mennan Sevim
Trendyol Tech
Published in
6 min readMay 9, 2020

Yeniden Kullanılabilir Nesne Modelleri

Selamlar,

Serinin bu kısmında Analiz Modeli kavramından ve yapısından bahsedeceğim.

Analiz modelleri, uygulamalar arasında yeniden kullanılabilirlik alanındaki modelleri yakalayan kalıplardır.

Martin Fowler ilk olarak 1997’de Analiz Kalıpları terimini ortaya atmıştır.

Fowler, zaman içerisinde 50’den fazla analiz modeli tanımladı. Bu kalıplar, bir uygulama etki alanındaki kavramsal modellerin yakalanmasına yardımcı olan yapılardan oluşur ve sıklıkla iş analisti ve sistem analisti tarafından ihtiyaç duyulan modellerdir.

Resim 1 : Analiz deseninin yazılım geliştirme sürecine yerleştirilmesi

Analysis Pattern / Analiz Modeli Nedir ?

  • Sağlık ve Telekom gibi bir geniş kapsamlı iş alanlarıyla ilgilidir.
  • Yeniden kullanılabilir bir tasarım oluşturma amacı taşır.
  • Yaygın sorunlar için tasarım kalıpları ve güvenilir çözümler önerir.

Pattern denildiğinde Tasarım Kalıpları (Design Pattern) genellikle insanların düşündüğü ilk kalıp türüdür. Tasarım Kalıpları ile Analiz Modelleri arasında bazı önemli farklar vardır.

Analiz Modelleri yazılım yaşam döngüsünde çok daha erken ortaya çıkar, genellikle uygulama alanına bağlıdır. Tasarım Kalıpları uygulama aşamasına çok daha yakın kullanılır, genellikle uygulamadan uygulamaya taşınabilir.

Analiz Kalıpları, tasarlanan sistemin organizasyonel, sosyal ve ekonomik yönlerine de odaklanabilirken, Tasarım Kalıpları yalnızca yazılım uygulama çözümleri sağlayabilir.

Analiz tasarımında her bir model, çevremizde tekrar tekrar ortaya çıkan bir problemi tarif eder daha sonra problemi çözmek için çözümün özünü açıklar.

Pratik bir bağlamda yararlı olan bir desen muhtemelen diğer problemlerde de yararlı olacak bir fikirdir ~Martin Fowler

Genel Yapısı

  • Design pattern konseptinin daha üst seviyesinde yer alır.
  • Birçok işletme alanında var olan ortak kavramsal modeller sağlar.
  • Tekrar kullanılabilirlik sağlar.

Bir tasarımın kabul görmesi ve herkes tarafından kullanılabilir olması önemlidir ayrıca bazı değerler vardır.

Bunları kısaca şu şekilde açıklayabilirim;

Pattern adı: Bir desen adı soyutlamanın anlamını gerçekten yansıtmalıdır. Analiz sırasında buna başvurabilmek için basit olmalıdır.

Amaç: Modelin ulaşmaya çalıştığı hedefi tarif etmeyi amaçlar, ayrıca çözmeye çalıştığı sorunu da tanımlamalıdır.

Motivasyon: Sorunu ve analiz modelinin somut senaryoda çözüme nasıl katkıda bulunduğunu gösteren bir senaryo.

Kuvvetler ve Bağlam: Analiz modeli tarafından çözülmesi gereken sorunların ve zorlukların tartışılması.

Çözüm: Motivasyon bölümündeki senaryoda analiz deseni tarafından elde edilen çözümün ve kuvvet dengesinin tanımıdır. Analiz deseninin ilgili tüm yapısal ve davranışsal yönlerini içerir.

Sonuçlar: Bu, sınırlama ile analiz modeli tarafından hedefe nasıl ulaşıldığını vurgulamalıdır.

Tasarım: Bu modelin tasarım uygulama önerileri.

Bilinen kullanımlar: Bu desen kullanımına gerçek dünyadan örnekler.

Analiz Model Türleri

Bu bölümde yer alan türlerin birçoğu Fowler tarafından tanımlanan analiz modelleridir.

Accountability

Taraflar arasındaki sorumlulukları tanımlamak için kullanılan bir dizi desendir.

Bir taraf kişi veya kuruluş olabilir ayrıca ilişki organizasyon yapıları, sözleşmeler ve istihdam olarak da temsil edilebilir.

Observations and Measurements

Bu model, sağlık sektöründeki departmanlar ve süreçler arasındaki ilişkiler için çözüm üretir.

Observations for Corporate Finance

Daha çok kurumsal analizlere ağırlık veren bir modeldir.

Referring to Objects

Bu model, kavramsal olarak çalışma dünyasındaki ilişkiler ve davranışlar arasındaki yapıyı ele alır.

Planning

Bu model, bireysel planları ve protokolleri tanımlayan bir dizi desendir.

Ayrıca kaynak kullanımının nasıl planlanacağını ve kaydedileceğini de açıklarlar.

Trading

Ticaret, mal alışverişine odaklanan bir dizi modeldir.

Bu model türü, hızla değişen koşullarda alım satım yapılan mallara ve bu malların borsaya ilişkin fiyatlarına bakar.

Ticaret sisteminin farklı koşullardaki mal alışverişine hazırlıklı olması için çözümler üretir.

Derivative Contracts

Bu model grubu, türev ticaret alanına özgüdür.

Not: Türev ticaret, değeri başka bir menkul kıymetin değerine bağlı olan ticaret anlamına gelir.

Trading Packages

Ticaret Paketleri modelleri, object packaging için sürdürülebilirliği ve esnekliği artırabilen kalıplardır.

Bu kalıpların temel amacı büyük domain modellerini bölmektir.

Analiz Modeli Nasıl Uygulanır ?

Bu bölümde, Transformation Patterns (Dönüşüm Kalıpları) yoluyla Analiz Kalıplarının nasıl yazılım haline geldiğini açıklamaya çalışacağım.

Dönüşüm Kalıpları, bir yapıyı bir formdan diğerine dönüştürmek için ilkeleri açıklar. Bu Dönüşüm Kalıplarının amacı tasarım şablonları oluşturmaktır.

Associations

Association, bir nesnenin diğerine karşı olan sorumluluğunu belirleme amacıyla kullanılır. Bu sorumluluk, diğer nesne ile olan ilişkisini takip etmeyi ve değiştirmeyi içerir. İki tür etkileşim vardır; iki yönlü ve tek yönlü.

Çift yönlü ilişkilerin uygulanması daha zordur ve yüksek bağlantıya neden olur ancak gezinmesi daha kolaydır.

Tek yönlü ilişkilerin uygulanması daha kolaydır ve düşük bağlantıya neden olur ancak gezinmesi daha zordur.

Bu bölümde, hem tek yönlü hem de çift yönlü ilişkilendirmeler için arayüz ve uygulama tekniklerinden kısaca bahsedeceğim.

Interface for Associations

İlişkilendirmeler için gereken arayüzler ilgili nesneye erişmek ve güncelleştirmek için kullanılan işlemlerdir.

Güncelleme nesnesi, tek değerli ve çok değerli ilişkilendirmeler arasında farklılık gösterir. Tek değerli bir ilişkilendirmede, güncelleme işlemi başka bir sınıfla olan ilişkiyi değiştirmek için kullanılan tek bir işlemdir. Çok değerli ilişkilendirmeler için iki güncelleme işlemi gerekir. Biri ilişkilendirmeyi silmek diğeri de eklemek içindir.

Unidirectional Implementation

Tek yönlü ilişkilendirmelerin uygulanması, ilişkili bir nesneye başvuru içeren bir sınıf alanından oluşur. Access yöntemi bu başvuruyu döndürür.

Modifier method: UPDATE

Bidirectional Implementation Using Pointers in Both Directions

Bu uygulama, her iki katılımcı sınıftaki pointerlardan oluşur. Tek değerli bir eşleme için, pointer bir nesneden diğerine ve tersi yönünde belirlenir.

Çok değerli bir ilişkilendirme için diğer ilişkili nesnelere bir küme döndürür.

Bidirectional Implementation Using Pointers in One Direction

Bu uygulama sadece bir yönde bir pointer içerir. Bu da uygulamadaki bilgi akışının tek yönlü oluşması olarak iletilmesidir ve yönetilmesi uygulama büyüdükçe zorlaşır.

Bidirectional Implementation Using Association Objects

İlişkilendirme nesneleri, diğer iki nesneyi birbirine bağlamak için kullanılabilen iki işaretçi içeren basit nesnelerdir.
Tüm ilişkilendirme nesnelerini döndürecek bir tablo sağlanabilir. Erişim yöntemleri, içindeki tüm nesneleri
ve ardından aranan nesneye bir başvuru döndürür.

Modifier methodlar: CREATE, DELETE

Generalizations

Genellemeler, nesneler içindeki kavramlar arasında genel bir ortaklık olduğunda kullanılır. Bunun için ortak ihtiyaçlara cevap veren bir süper sınıf tanımlanmıştır.

Interface for Generalizations

Genelleme için gerekli arayüzler polimorfik yöntemler ve isimlendirme şemalarının kullanımıdır. Bu sayede aynı mesajı farklı sınıflara göndermenin ve farklı yanıtlar beklemenin yararı elde edilir.
Yaygın olarak kullanılan isimlendirme şemaları isTypeName(bool) ve hasType(bool) şeklindedir.

Implementing Generalizations

Diğer tekniklerin yanı sıra, OOP kalıtım prensibini kullanarak genel sınıftan türeyen özel alt sınıfları oluşturmayı konu alır.

Interface for Object Creation

Tüm sınıflar kendi nesnesini yaratmanın bir yoluna sahip olmalıdır.

Bu, tüm sınıflarla sağlanan varsayılan nesne oluşturma mekanizması veya Factory Method yoluyla olabilir. (Gamma, E, et al. 1995)

Implementing Object Creation

Nesneye yönelik uygulama, bir construction işlemi yoluyla nesne oluşturma olanağı sağlar. Constuctor kullanımını C++, C# ve Java gibi dillerde görebiliriz.

Object Destruction

Bir nesneyi destroy etmek aslında basit bir iş değildir. Bunu yaparken, nesnenin sahip olduğu ilişkilendirmelerin yanı sıra bellek de dikkate alınmalıdır.

Destroy teknikleri, memory ve nesne ilişkileri ile ilgili birkaç yöntem ile devam edelim.

Interface for Object Destruction

Yok edilebilir tüm nesneler tek bir destroy işlemine sahip olmalıdır. Bu anlayışla kullanıcı, nesnenin yok edildiği sırada nesnenin sahip olabileceği mevcut ilişkilerin farkında olmalıdır.

Implementing Object Destruction

Destroy işlemi sırasında bellek yönetimi bu aşamada birincil öncelikli alandır. Bir nesneyi yok etmeden önce tüm bağımlılıkların kopması çok önemlidir. Bellekle yönetilmeyen sistemlerde garbage collector iyi yönetilmelidir.

Avantajları Nelerdir ?

Bir pattern kullanılacaksa öncelikle bakılması gereken bu pattern bana ne katacak ya da nasıl bir kolaylık sağlayacak önce bunu tespit etmek gerekir.

Analiz Modeli kullanmanın iki avantajı vardır.

Birincisi Analiz Modeli, yazılım geliştiricilere projedeki ortak kullanılan nesneleri gösterir ve yazılan kod bu sayede tekrar kullanılabilir ve sadeleştirilebilir.(Reuse). İkincisi, aynı analiz modeli faklı uygulamalar tarafından da kullanılabilir.

Development Effort Reduction

Son olarak size bir çalışmadan bahsetmek istiyorum.

Araştırmacı Andreas Geyer-Schulz ve Michael Hahsler birlikte analiz modellerinin kod yazarak nasıl kurtarabileceğini görmek için bazı testler yaptı ve sonucunda analiz kalıplarının kullanımının kod satır sayısını azalttığı gösterdiler.

Bu testler Viyana Ekonomi ve İşletme Üniversitesi Sanal Üniversite Projesi sırasında yürütüldü ve elde edilen sonuçlar “Software Reuse With Analysis Patterns (Analizle Yazılımın Yeniden Kullanımı)” başlıklı çalışmalarına dahil edilmiştir.

Sanal Kütüphane

Schulz ve Hahsler, Sanal Kütüphane (Virtual Library) adı verilen PERL ve HTML dillerinde yazılmış bir analiz modeli tanımladılar. Bu modeli, kendi bilgi kaynakları koleksiyonuna erişim sağlamak için bir taslak olarak kullandılar.

Analiz modelinin uyguladıkları 2 örnek proje oluşturdular;

1- Calendar of Events System Projesi ~Etkinlik Takvimi Sistemi

Ekip Etkinlik Takvimi Sistemi’ni geliştirirken, ekip hem kod hem de çalışma saatlerinde büyük miktarda zaman tasarrufu sağladı.

PERL kodlarının % 93'ünü ve HTML kodunun neredeyse % 70'ini yeniden kullanılabilir olduğunu tespit ettiler.

Ayrıca çalışma saatlerini bu sayede yaklaşık % 91 oranında azalttılar.

2- Digital Library System ~Dijital Kütüphane

Ekip, Dijital Kütüphane’yi geliştirirken aynı tasarrufu bulamadı ancak yine de etkili bir ölçüde hız ve zaman kazandırdılar.

PERL kodunun % 53'ünü ve HTML kodunun % 33'ünü analiz modelini kullanarak sadeleştirmeyi başardılar ve bu toplamda %50'ye yakın bir kod geliştirme hızı sağlamış oldu.

Sonuç olarak doğru tasarım desenleriyle kullanılan analiz desenlerinin zamanı ve karmaşıklığı büyük ölçüde azaltabileceği gibi uzun vadede de maliyetleri düşürebileceği düşünülmektedir.

Buraya kadar okuduğunuz için teşekkürler, serinin son makalesinde Analiz Modeli Örnekleri’nden detaylı bahsedeceğim.

Buraya kadar okuduğunuz için teşekkürler.

Referans ve Kaynaklar:

Fowler, M., (1997) Analysis Patterns — Reusable Object Models

Geyer-Schulz, A., Hahsler, M., (2001) Software Engineering with Analysis Patterns, Institut for Data Processing and Information Economy

Fernandez, E., (1999) Building Systems Using Analysis Patterns, Florida Atlantic University.

Martin Fowler’ın tüm kitaplarına bu linkten erişebilirsiniz.

--

--