Bu yazımda sizlere, UML içindeki işbirliği (collaboration)
diyagramlarını açıklayacağım. İşbirliği diyagramlarının ne tür durumlarda
kullanıldığını, içerdiği özel sembolleri, sıralama (sequence) diyagramlarından
farklarını ve nasıl oluşturabileceğimizi örnek üzerinde göreceğiz.
"İşbirliği" Diyagramları
İş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.
UML 2 içinde yapılan değişiklikler
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.
Yazıyı tamamlamadan önce; Deborah Melewskinin 09/01/2000
yılındaki bir makalesine kısaca değinmek istiyorum. Bu makalede; pazar araştırma
şirketlerinden ACNielsenin, tüm yeni yazılım projelerine UML ve Rational Rose
tasarım aracı ile başladığı açıklanmaktadır. Aynı zamanda; aynı makalede
ACNielsen Uzman Sistem Mimarı Joe Canon ile yapılan röportajda, işbirliği
diyagramlarının zamandan bağımsız olmasının yararına değinilmiş ve farklı nesne
etkileşimlerini göstermede kullanılabileceği ifade edilmiştir. Bu diyagramları;
nesne modellerini normalize etmede ve hangi sınıfların bağımsız olması,
hangilerinin aynı nesne olması gerektiğini belirlemede kullandıklarını
açıklamıştır. Bu makale de gösteriyor ki, birçok uzman tasarımcı bu
diyagramlardan gerektiği durumda yararlanmaktadır. Siz de, tasarladığınız
sistemin karmaşıklığına göre bu diyagramlardan yararlanmaya çalışarak, gereksiz
nesneleri saptayabilir ve nesneler arasındaki mesaj akışını kolaylıkla
modelleyebilirsiniz.
Bir sonraki yazıda görüşmek üzere.
Çağatay Çatal
[email protected]
Kaynaklar
1-) UML Weekend Crash Course, Thomas A. Pender, Wiley
Publishing Inc., 2002.
2-)
UML Bible, Tom Pender, John Wiley, 2003.
3-)
UML Distilled:
A Brief Guide to the Standard Object Modeling Language, Martin Fowler, Kendall
Scott, Addison Wesley, 1999.
4-) The Elements of UML Style, Scott W. Ambler,
Cambridge University, 2003.
5-) Visual Modeling with Rational Rose 2000 and
UML, Terry Quatrani, Addison Wesley,1999.
6-) The Object Primer 3rd Edition: Agile Model
Driven Development with UML2, Scott W. Ambler, 2003.
7-)
UML in a Nutshell
, Sinan Si Alhir, O’Reilly, 1998.
8-) UML 2 for Dummies, Michael Jesse Chonoles and James A.
Schardt, Hungry Minds, 2003.
9-)
www.adtmag.com/article.asp?id=2656
10-)
www.visualuml.com/whitepapers/UML%20collaboration%20diagrams.pdf
Makale:
UML ile İşbirliği (Collaboration) Diyagramları UML ve Sistem Analizi Çağatay Çatal
|