İşbirliği kelimesi (collaboration), "co-labor" (ortak-iş) kelimelerinden oluşmaktadır. İşbirliği diyagramları; tasarımcıların UML içinde çok fazla tercih etmediği diyagramlardandır. Çoğu tasarımcı, sıralama diyagramlarının nesneler arasındaki dinamik yapıyı göstermede yeterli olduğunu düşünür. Ancak; tasarımlarında işbirliği diyagramlarını kullanmış ve yararlarını görmüş olan tasarımcılar, bu diyagramları da modellerine katmayı düşünürler. Bu yazıdaki UML diyagramları Rational Rose tasarım aracı ile çizilecektir.
Önceki makalelerde; sınıf diyagramları ile sistemin statik yapısının, durum diyagramları ile karmaşık sınıfların davranışının, sıralama diyagramları ile sıra mantığının, aktivite diyagramları ile veri akışının modellenebileceğini açıklamaya çalışmıştık. Belirli bir amaca yönelik olarak ortaklaşa çalışan nesneleri ise işbirliği diyagramları ile modelleyeceğiz.
Karmaşık sistemler, tasarlanan görevleri yerine getirmek için ortaklaşa çalışan birçok nesne içermektedir. UML içindeki işbirliği diyagramları; temel olarak bu nesneler arasındaki ilişkiye yoğunlaşırken, sıralama diyagramları mesaj sırası ile ilgilenmektedir. 2 diyagram bir çok noktada benzerlik göstermektedir. Bu nedenle; birçok tasarım aracı bir diyagramın çizili olması durumunda, diğerini bir tuşa basmanızla birlikte üretebilmektedir. Örneğin; Rational Rose (2002 versiyonu) içinde sıralama diyagramının çizili olduğu durumda, kullanıcı F5 tuşuna basarak işbirliği diyagramını görebilmektedir. Bu durumu, "UML ile Sıralama Diyagramları" makalesinde ATM makinesinin çalışmasını modelleyen sıralama diyagramı üzerinde inceleyeceğiz. Bu örnek sayesinde; iki diyagram arasında geçişi ve işbirliği diyagramlarını görmüş olacağız.
Şekil 1de örneğe ilişkin sıralama diyagramı verilmekte, Şekil 2de ise bu örneğin F5 tuşuna basılarak elde edilmiş işbirliği diyagramı gösterilmektedir.
Tasarım aracınızdaki sıralama diyagramı ekranında; aktör nesnesi oluşturmak için bir bileşen bulunmuyorsa, kullanım senaryosunda aktörü oluşturup sürükle-bırak ile sıralama diyagramına taşıyabilirsiniz.
Şekil 1 : ATM örneğine ilişkin sıralama diyagramı
Şekil 2: ATM örneğine ilişkin işbirliği diyagramı
Şekillerden de görüldüğü gibi, 2 diyagram da "nesneler" ve "mesajları" modellemekte, aynı bilgiyi farklı şekillerde göstermektedir. Temel elemanlar; nesneler, bağlantılar ve mesajlardır. Bu noktada; 2 diyagram arasındaki temel farkları incelememiz gerekmektedir.
İşbirliği diyagramları ile Sıralama diyagramları arasındaki farklar
1. Sıralama diyagramları, zamana bağımlı olarak nesneler arasındaki mesajlaşmayı göstermektedir. İşbirliği diyagramları ise zamandan bağımsızdır.
2. İşbirliği diyagramları ile tek bir diyagram üzerinde; dinamik yapıyı ve nesnelerin statik ilişkisini göstermeniz mümkündür. Sıralama diyagramları sadece dinamik yapıyı temsil etmektedir.
3. Sıralama diyagramları, müşterilerin daha kolay anlayabileceği diyagramlardır. Bu nedenle; ilk analiz safhasında sıralama diyagramları kullanılırken, işbirliği diyagramları daha çok tasarım aşamasında kullanılır.
4. Sıralama diyagramlarında; mesajlaşma sıraları, işbirliği diyagramlarında ilişkiler daha kolay gözlemlenir. Büyük diyagramlar için; mesaj sırası ile mesajlaşmayı takip etmek (işbirliği diyagramları), şekil üzerinden takip etmeye (sıralama diyagramları) göre daha zordur. Ancak; daha az alanda birçok bilgiyi göstermenizi sağlayabilir.
5. Belirli bir amacı yerine getiren nesneler arasındaki ilişkiler, işbirliği diyagramları ile daha net gösterilebilmektedir. Senaryoya ilişkin tüm resmi (nesneler ve arasındaki ilişkiler) işbirliği diyagramları ile daha net gösterebilirsiniz. Sıralama diyagramları, mesaj sırasına yoğunlaştığı için tüm resim net görünmeyebilir.
6. Sıralama diyagramlarında bir bağlantı, bir nesneden diğerine giden mesajı gösterirken; işbirliği diyagramlarında bir bağlantı, nesneler arasındaki 1 veya daha fazla mesajı gösterebilir.
7. Sıralama diyagramlarının bir avantajı; nesnelerin yaratılışı ve sonlandırılışını kolay şekilde gösterebilmenize imkan vermesidir. Zaman boyutunda "yeni ()" mesajı ile nesneyi yaratabilir, X işareti ile de nesnenin sonlandırıldığını gösterebilirsiniz. İşbirliği diyagramlarında bu kadar basit olarak aynı işlemi gerçekleştiremezsiniz. Bu durumu gerçekleştirmek için "oluştur( )" ve "sonlandır( )" mesajlarını modele katmanız gerekir.
8. İşbirliği diyagramlarınlarında zaman kavramı olmadığı için; bir nesnenin ne zaman aktif ne zaman pasif olduğunu mesaj tiplerini incelemeden anlayamazsınız ancak sıralama diyagramlarında bu durum çok kolay algılanmaktadır.
9. İşbirliği diyagramları; daha karmaşık dallanmalara (branch), eş zamanlı akış denetimine (concurrent flow of control) izin verirken sıralama diyagramları doğası gereği daha basit dallanmalara izin vermektedir. Bu açıdan; işbirliği diyagramları ile daha karmaşık sistemler modellenebilmektedir.
Nesne tipleri
Nesneler, diyagramlarda 2 türde yer alabilmektedir. Tedarikçi (supplier) ve istemci (client). Bu 2 kavram; işbirliği diyagramlarında parametreleri gösterirken karşınıza çıkabilir. Temel olarak tedarikçi nesneler; çağrılan metodu sunan nesnelerdir. A------->B şeklindeki bir örnek için; B nesnesi mesajı alan ve çağrılan metodu sunan "tedarikçi nesne" olarak ifade edilir. İstemci nesneler, tedarikçi nesneler üzerindeki metotları çağırır.
Bu durumda; A nesnesi istemci, B nesnesi de tedarikçi nesne olarak ifade edilir.
Özel semboller
İşbirliği diyagramları içinde kullanılan özel semboller bu bölümde açıklanacaktır. Bu kapsamda; Şekil 3de sadece kavramları göstermek için bir örnek verilmektedir.
Şekil 3: İşbirliği diyagramındaki kavramları, sembolleri ve mesajlaşma çeşitlerini gösteren bir örnek
1. Nesne: Sıralama diyagramlarındaki nesne kavramının aynısıdır. a: A ile gösterilen nesne; A sınıfından yaratılan ve ismi a olan nesneyi temsil etmektedir.
2. Senkron mesaj: Senkron mesajlar, gönderildiği nesneden cevap bekleyen mesajlardır ve belirli bir süre sonra aynı bağlantı üzerinden cevap alınmaktadır. Şekil 3 de mesaj1( ) senkron bir mesajı temsil ederken,buna ilişkin dönüş cevabı mesaj2( ) ile gösterilmektedir.
3. Asenkron mesaj: Senkron mesajların aksine cevap beklemeyen mesajlardır. mesaj5( ), asenkron mesajlara örnek olarak verilebilir.
3. Prosedür çağırma: mesaj3( ) mesajı ile prosedür çağırma temsil edilmektedir. c nesnesi üzerinden, bu prosedür çağrılmaktadır.
4. Sıra numaraları: İşbirliği diyagramlarında zaman bilgisi bulunmadığı için sıra numarası kullanılır. Sıralama diyagramlarında, bu sıra bilgisi seçime bağlıdır ancak işbirliği diyagramlarında kullanılmak zorundadır. Her mesajın bir numarası örnekte görülmektedir.
5. Belirsiz nesne (anonymous object): Bir sınıfın herhangi bir nesnesinin aynı şekilde davranacağı düşünüldüğü zaman, ilgili nesne için isim kullanmayabilir. :D nesnesi, belirsiz bir nesnedir.
6. Kendi üzerine referans (self-reference): Kendi üzerinde bir metot çağıran nesne olarak düşünebiliriz. Çoğu durumda, nesne kontrol amaçlı sahip olduğu metotları kullanabilir. mesaj4( ) kendi üzerine referansa örnek olarak verilebilir.
7. Zaman aşımı olayı (timeout): Belirli bir zaman cevap gelmeyince çağrılan mesaj tipidir. mesaj6( ) bu mesaja örnek olarak verilebilir.
8. Çoklu nesne (multi-object): Bir nesne birden fazla nesne içeriyorsa; çoklu nesne olarak ifade edilir ve :G nesnesinde olduğu gibi gösterilebilir. Örneğin; modem nesnesi kendi içinde birden fazla nesne barındırabilir.
9. Yorum: Diyagramı kimin, ne zaman oluşturduğunu ve kapsamını gösteren bir yorum bileşeni diyagramın sağ üst köşesine konulabilir.
İşbirliği diyagramlarındaki önemli noktalar aşağıda açıklanmaktadır:
- İşbirliği diyagramlarında; özyineleme (iteration) ve şartlı (condition) ifadeler sıralama diyagramlarındaki gibi gösterilebilir. Özyineleme için; * sembolü, [i==true] ifadesi de şart için kullanılabilmektedir. Örneğin; 4*[i=İlkbahar..Kis] ifadesi her mevsim için bir defa çalıştırılarak, toplamda 4 defa çalıştırılmış olacaktır.
- İşbirliği diyagramlarında dönüş değerlerini de göstermeniz mümkündür. Örneğin; 5: sonuc := işle( ) ifadesi isle( ) metodu neticesinde oluşan sonuc ifadesini geri döndürmektedir.
- Döngüleri ve geri dönüşleri aynı ifade de gösterebilirsiniz. Örneğin 8*[i=Ocak..Aralik]:sonuc := işle(i) ifadesi, 8 nolu mesajın; 12 defa işle( ) yöntemini çağırdığını göstermektedir.
- Giriş ve çıkış argümanları da işbirliği diyagramları üzerinde temsil edilebilir. Örneğin; ModemBaslat(modelId:ModelTipi, out true:YeniModem) ifadesi ile modem oluşturulabiliyorsa doğru (true) bilgisi geri dönüş değeri olarak verilebilmektedir. ModelId parametresi de giriş parametresidir.
- UML içinde özyineleme ifadeleri yazabilmek için, programlama dili sentaksından yararlanabilmeye izin verilmiştir. Ancak; modeli dilden bağımsız tasarlamak, daha etkin modelleme mantığıdır.
- Çok parçacıklı (multi-threaded) sistemlerle çalışıyorsanız; eş zamanlı süreçlere aynı sıra numarası vererek gösterebilirsiniz. Ayırt edici nokta, mesajların ismi olacaktır. Örneğin; 1: thread1, 1: thread2, 1: thread3 seklinde bir gösterim mümkün olabilmektedir.
- Diyagramınızdaki bir bağlantı üzerinde, bazen get() ve set() türünde birçok mesaj göstermeniz gerekebilir. Diyagramın okunurluğunu bozmamak için, bilgiyiAl() ve bilgiyiEkle() gibi mesajlarla birçok mesajı tek bir mesaj olarak ifade edebilirsiniz.
- İşbirliği diyagramı oluştururken; en önemli nesneleri diyagramın ortasına koymanızda yarar vardır. Bu sayede; önemli noktaları daha net gözlemleyebilirsiniz.
- İşbirliği diyagramını çizmeden önce, diyagramı ne amaçla çizdiğinizi saptamanız gerekmektedir. Sıralama diyagramlarında olduğu gibi bir işbirliği diyagramı, çoğu kez bir kullanım senaryosunu (use-case) modellemek için kullanılmaktadır.
- Bir nesne, etkileşim sırasında durum değiştirebilir. Nesnenin yeni örneği oluşturularak; aralarında bir bağlantı çizilir ve <<become>> şeklinde gösterilir. Rational Rose içinde, bir nesnenin durumu gösterilemez. Bazı tasarım araçları bu duruma destek sunmaktadır.
Bu bölüme kadar yapılan açıklamalar, özel semboller UML 1.x içinde yer aldığı şekilde verilmiştir. Birçok tasarım aracı, halen sadece UML 1.x ile diyagram çizebilmeyi desteklerken, bazıları UML 2yi de desteklemeye başlamıştır.
Bu noktada; işbirliği diyagramları yönünden UML 2deki değişimi inceleyebiliriz. UML 2 içinde işbirliği diyagramları; iletişim (communication) diyagramları adını almıştır. Bu diyagramlar; işbirliği diyagramlarına çok benzese de, daha az karmaşıktır ve işbirliği diyagramları kadar güçlü bir mekanizması yoktur. Bazı tasarımcılar; OMG içindeki UML grubuna, kaybolan bu özelliklerin eklenmesi için başvurmuşlar ve gerekli düzenlemelerin yapılmasını istemişlerdir. Yapılan bu değişikliklerin zamanla olgunlaşacağı ve tasarımcıların tercihine göre yön bulacağı beklenmektedir. Ancak; diyagramların temel felsefesinde çok fazla değişiklik bulunmamakta, daha çok gösterim açısından değişimler olmaktadır.
Bunun yanı sıra; UML 2, nesne etkileşimlerinin 4 farklı diyagramla modellenmesini önermektedir (UML 1.x içinde bu amaçla, sıralama ve işbirliği diyagramları kullanılmaktaydı). Bu diyagramlar; sıralama diyagramları, iletişim diyagramları (eski adıyla işbirliği diyagramları), etkileşim tanıtım diyagramları (interaction overview) ve zamanlama (timing) diyagramlarıdır.
İşbirliği diyagramları için daha fazla açıklama yapmak mümkündür. Ancak; UML 2 içindeki birçok özellik çoğu tasarım aracı tarafından şu anda desteklenmemektedir. Bu yazıda belirtilen temel kavramları kullanarak, kullandığınız tasarım aracının yeteneği ölçüsünde, projelerinizdeki nesneler arasındaki mesaj akışını kolaylıkla modellemeniz mümkün olacaktır.
Hiç yorum yok:
Yorum Gönder