Dinamik yapının oturtulması farklı tasarım deseninin bir araya getirilmesi sonucunda olur. Aynı zamanda ortaya bir yapının çıkması sonucunda dinamik olarak nesnelerin değiştirilmesi sağlanabilir. Bu durum sağlanırken belirli tasarım desenlerini içeren bir yapının oluşturulması gerekmektedir.
Örneğin bir satış işleminin yönetildiği sistem tasarladığımızı düşünelim. İlk olarak müşterinin bilgisinin saklandığı bir müşteri sınıfı olsun. Müşterilerin farklı tiplere sahip olacağını düşünelim.
Bu durumda Tip-Nesne desenini kullanarak MüşteriTipi sınıfını tanımlarız ve Müşteri sınıfı ile aralarında tip ilişkisi olduğunu belirtiriz (Şekil-1).

Şekil-1 : Tip-Nesne Tasarım Deseni
Bu andan sonra tek bir müşteri tipi olmadığı, birçok müşteri tipi olduğunu kabul etmekle birlikte, aynı zamanda her bir müşteri için bir müşteri tipi tanımlamak ve birçok farklı özellik tanımlamaktayız. Tüm bu özellikler MüşteriTipi sınıfını şişireceği için özellikleri sınıflardan ayırarak özellik, özellik tipi ve nesne üçlüsünü içeren Özellik listesi ve Değer Tutma Desenlerini birleştirmekteyiz.

Şekil-2 : Değer Tutma ve Özellik Listesi Desenleri
Özellik Listesi sayesinde bir müşterinin seçtiği özellik için belirttiği değer aralığının geçerliliğini kontrol etmekteyiz.
Şimdi bu yapıyı daha model haline getirdiğimizi düşünelim ve Dinamik Nesne Modelinin temelini oluşturan Sınıf/Sınıf Tipi ve Özellik/Özellik tipi sınıflarından oluşan yapıyı oluşturalım.(Şekil-3)
Şekil-3 : Dinamik Nesne Modeli için sınıf diyagramı
Bu yapı içerisinde üç farklı tasarım desenini birleştiren Dinamik Nesne Modeli tanımladığı özellik tutma ve değiştirme işlemlerini gerçekleştirmek için SınıflandırıcıRol'den faydalanmaktadır. Sınıflandırı rol bir nesnenin yürütme anında rolü belirtmek için kullanılmaktadır. Bir sınıf (ve nesneleri) tanımladığı sınıflandırı rol içerisinden bir değer almaktadır. Bir sınıflandırıcı rol başında "/" sonunda ":" imleçlerini alarak gösterilmektedir.
Dinamik Nesne Modeli içerisinde açık dünya anlayışını destekleyen yapının ortaya konması için sınıflandırıcı roller tanımlanmıştır. Sınıflandırıcı roller Şekil 3 içerisindeki Dinamik Nesne Modeline uygulandığında kullanıcı nesnelerinin farklı değerler alabilmesi ve özelliklerin de farklı değerler alabilmesi sağlanmaktadır.
Özellik listesi desenine Sınıflandırıcı rol uygulandığında bu durumda özellikler sadece sahibi olan sınıfa ait olmamakta aynı zamanda çalışma anında oluşan nesneler tarafından da erişilebilir olmaktadır. Özellikler dinamik olarak get ve set yapılabilmekte, aynı zamanda yeni özellikler tanımlanması sağlanabilmetedir. Bu sayede çalışma anında nesne içerisinden sahibi olan sınıfın özellikleri genişletilebilmektedir.(Şekil-4)
Şekil-4 : Özellik Listesi deseni için sınıflandırıcı Rol
Tip-Nesne desenini incelediğimizde bir nesnenin tip tanımları içerisine yeni bir davranış tanımladığını görmekteyiz. Sınıflandırıcı rol sayesinde müşteriye ait bir nesne sadece sınıfın sahip olduğu özelliklere bağlı kalmamaktadır. Çalışma anında yeni müşteri özellikleri de tanımlanabilmektedir.(Şekil 5)
Şekil 5 : Tip-Nesne deseni için sınıflandırıcı rol
Son olarak değer saklayan desen temelde değerlerin saklanması ve modellenmesi amacıyla kullanılır. Sınıflandırıcı rol sayesinde nesneler direk olarak değerlere erişebilmekte ve bu sayede değerleri değiştirmekle kalmayıp tiplerini ve bağlı olduğu nesneleri de değiştirebilmektedir.(Şekil 6)
Şekil 6 : Değer Tutucu desen için sınıflandırıcı rol
Sınıflandırıcı rolleri tanımladıktan sonra Şekil-3 içerisinde tanımladığımız Dinamik Nesne Modeline geri dönersek, bu sınıflandırıcı roller içerisinden hangi sınıfların hangi rollere atandığını tanımlarız.
Bileşen :
- Bileşen sınıfı Özellik sınıfının nesneleri için Sahip dir. /Özellik:Özellik
- Bileşen sınıfı Özellik sınıfının değer tutan rolü için bir istemcidir. Çünkü değerleri özellik sınıfına sormaktadır.
- Bileşen sınıfı BileşenTipi sınıfının tip rolü için bir nesnedir. Çünkü kendisine ait tipler temelde diğer sınıftan gelmektedir.
- Bileşen sınıfı BileşenTipi sınıfının tip rolü için bir istemcidir. Çünkü kendisine ait tiplerin özelliklerini bu sınıfa sormaktadır.
- Özellik sınıfı Bileşen sınıfının sahip rolü için bir özelliktir.
- Özellik sınıfı ÖzellikTipi sınıfının tip rolü için bir nesnedir.
- Özellik sınıfı Değer sınıfının değer rolü için bir değer tutucudur.
- Değer sınıfı Özellik sınıfının değer tutucu rolü için bir değerdir.
- Bileşen Tipi sınıfı Bileşen sınıfının sahip rolü için bir istemcidir. Çünkü sahip olacağı tipler Bileşen sınıfı içerisinden tanımlanmaktadır.
- Bileşen Tipi sınıfı Bileşen sınıfının nesne rolü için bir tipdir. Çünkü Bileşen sınıfına ait tipler Bileşen Tipi içerisinde saklanmaktadır.
- Bileşen Tipi sınıfı ÖzellikTipi sınıfının özellik rolü için bir sahiptir. Çünkü Özellik Tipi sınıfı Bileşen Tipi sınıfının tanımladıkları dışında tip bulunduramaz.
- Bileşen Tipi sınıfı Özellik Tipi sınıfının özellik rolü için bir istemcidir. Çünkü Bileşen Tipi içerisindeki tip tanımları Özellik Tipi içerisindedir.
- Özellik Tipi sınıfı Bileşen Tipi sınıfının sahip rolü için bir özelliktir.
- Özellik Tipi sınıfı Özellik Tipi sınıfının nesne rolü için bir tiptir. Kendi kendisi içerisinde tanımlanan tipleri kullanarak yeni tipler oluşturabileceğinden kendisinin tipidir.
Hiç yorum yok:
Yorum Gönder