|
UML ile "Sequence" Diyagramları |
|
Gönderiliyor lütfen bekleyin... |
|
|
Uzun bir aradan
sonra UML yazı dizisine devam ediyoruz. Yaklaşık 1.5 yıl önce yazmış oluğum
"Durum (State) Diyagramları" makalesinden sonra bir daha UMLe eğilememiştim.
Gerek iş yoğunluğu gereksede özel işlerimin yoğunluğu UMLe uzun bir süre ara
vermeme neden oldu. Ancak buna rağmen siz değerli okurlarımdan gelen UML makalelerine
yoğun istek beni bu alanda araştırmaya ve yazı yazmaya itti. Bu ve bundan sonraki
yazılarımda UMLin diğer önemli diyagramlarını ve konularını inceleyeceğim.
"Sequence" Diyagramları
Bu makalemizde UMLin en önemli diyagramlarından biri olan "Sequence"
diyagramlarını inceleyeceğiz. "Sequence" kelime anlamı olarak "birbirini
takip eden, ardışıl olan, peşi sıra" anlamlarına gelmektedir. UML diyagramı
olarak ise nesnelerin peşi sıra etkileşimde bulunmalarını ve nesnelerin zaman
boyutunda birbirleri ile ilişkiye girmeleri anlamında kullanılmaktadır. Bu yazı
boyunca bu diyagramlardan kelime kargaşası yaratmama adına "Sequence"
diyagramları şeklinde bahsedeceğim. Bir önceki UML makalesinde incelemiş olduğumuz
Durum diyagramlarının aksine "sequence" diyagramları nesnelerin birbirleriyle
haberleşmesini zaman boyutunda ele almaktadır. Dikkat ederseniz şu ana
kadar incelemiş olduğumuz, nesne,durum ve use case diyagramlarında nesnelerin
ilişkileri zamandan bağımsız olarak ele alınmıştı. İlk olarak zaman kavramını
"sequence" diyagramlarında ele almış olacağız.
Hatırlarsanız Durum
Diyagramları yazısında nesnelerin ömürleri boyunca alabilecekleri durumları
incelemiştik. Ancak nesnelerin birbirleri ile haberleşmesini ve durumlarını
bu haberleşme mantığına göre değiştirebilmelerini incelememiştik. İşte bu yazıda
göreceğimiz "sequence" diyagramları vasıtası ile nesnelerin birbirleri
ile haberleşmesini zamana bağlı olarak ele alacağız. Bir diyagramın zaman bağlı
olmasından kastımız, nesnelerin gerçekleştirdikleri aktivitelerin peşisıra gerçekleşmesi
ve bu peşisıralığın belirlenen zaman dilimleri içerisinde maydana gelmesidir.
İlerleyen kısımlarda daha detaylı olarak inceleyeceğimiz için isterseniz bir
"sequence" diyagramında olabilecek nesneleri tek tek ele alalım :
Bir "sequence"
diyagramı temel olarak nesnelerden(objects), mesajlardan (messages) ve zaman
eksenlerinden(timeline) oluşmaktadır. Aşağıda bu üç UML bileşenide ayrıntılı
bir şekilde açıklanmıştır.
Nesneler
(Objects)
Nesneler diğer
UML diyagramlarında da belirttiğimiz gibi belirli görevleri gerçekleştirmek
için tanımlanan yapı bloklarıdır. Nesneler, tasarım ve modellemenin en küçük
yapı taşı olduğu için hemen hemen her tür diyagramda nesneleri görmekteyiz.
"sequence" diyagramında nesneler aşağıdaki şekilde görüleceği üzere
diktörtgen ve bu diktörtgen içinde nesne ismi olacak şekilde temsil edilir.
Önemli noktalardan birisi ise nesne isminin :NesneIsmi formatında olmasıdır.
"sequence" diyagramlarında nesneler genellikle diyagramın fiziksel
olarak en üstünden ve soldan sağa olacak biçimde sıralanır. Yani nesnelerin
"sequence" diyagramlarındaki orjini sol üst köşedir. Ve yayılım biçimi
soldan sağadır. Bu bir kural olmamakla beraber kullanılan en yaygın biçimi bu
şekildedir. Bizde bu yazının sonunda vereceğimiz örnektte bu şekilde kullanacağız.
Şekil 1 : Nesne
Her bir nesnenin
altından çıkan ve kesik kesik olan çizgi nesnenin zaman çizgisini(timeline)
belirtmektedir. "Sequence" diyagramlarındaki zaman olgusu bu çizgilerle
belirtilmektedir. Kesik çizginin en altı teorik olarak sonraki zamanı göstermektedir.
Zaman çizgisi üzerinde bulunan ince ve uzun diktörgenler ise o nesnenin o zaman
içerisinde meydana getirdiği aktivitedir(activation). Yine teorik olarak
diktörgenin uzunluğu aktivitenin ne kadar zaman aldığı ile doğru orantılıdır.
Yani uzun süren bir aktivite daha uzun dikdörtgenle gösterilir. (Çoğu zaman
bu kurala uyulmamaktadır.)
Mesajlar
(Messages)
Mesajlar bir nesnenin
zaman çizgisinden diğer bir nesnenin zaman çizgisine doğru çizilen simgelerden
oluşmaktadır. Nesnelerin birbirleri ile haberleşmesi, birbirlerine komut göndermesi
kalın çizilmiş oklarla gösterilmektedir. Bir nesne kendisine mesaj gönderebileceği
(recursion - öz yineleme-) gibi başka nesneyede mesaj gönderebilir. Dahası
nesne olmayan farklı bir UML bileşenide nesnelere mesaj gönderebilir. Örneğin
use case diyagramlarında kullandığımız aktör bileşeni aşağıdaki gibi "sequence"
diyagramındaki bir nesneye mesaj gönderebilir.
Şekil 2 : Mesaj Örneği
"Sequence"
diyagramlarında 3 çeşit mesaj tipi kullanılmaktadır. Aşağıda bu 3 mesaj tipi
grafiksel gösterimleriyle birlikte açıklanmıştır.
Mesaj Tipleri :
1 - Basit(Simple)
Mesaj Tipi : Bu mesaj tipi basit anlamda bir nesnenin, akış kontrolünü
diğer bir nesneye verdiği durumlarda kullanılır. Sık kullanılan bir mesaj tipi
değildir. Gösterimi aşağıdaki gibidir :
Şekil 3 : Basit Mesaj
2 - Senkron
(Synchronous) Mesaj Tipi : Bir nesnenin mesajı gönderdikten sonra, zaman
çizgisinde devam edebilmesi için karşı nesneden cevap beklenmesi gereken durumlarda
kullanılır. Varsayılan mesaj tipi olduğundan sıklıkla bu mesaj tipi kullanılmaktadır.
Gösterimi UML diyagramlarında aşağıdaki gibidir.
Şekil 4 : Senkron Mesaj
3 - Asenkron
(Asynchronous) Mesaj Tipi : Senkron mesajların aksine bir nesnenin mesajı
gönderdikten sonra, zaman çizgisinde devam edebilmesi için karşı nesneden cevap
beklenmesi gerekmiyorsa kullanılır. Sıklıkla asenkron işlemesi gereken komut
zincirlerinde kullanılmaktadır.
Şekil 5 : Asenkron Mesaj
Zaman
(Time)
"Sequence"
diyagramlarının son ve en önemli bileşeni zaman olgusunun sembolize edildiği
zaman çizgisidir. (time line) Daha önce de denildiği gibi zaman çizgisi nesneden
dikey olarak aşağı doğru kesik bir çizgi şeklinde ilerler. Nesneye en yakın
olan aktiviteler daha erken gerçekleşir anlamındadır. Aşağıdaki örnekte iki
nesnenin zaman çizgileri aynı diyagram üzerinde gösterilmiş ve farklı zamanlarda
gerçekleşen aktivitelere örnek verilmiştir.
Şekil 6 : Basit bir "sequence" Diyagramı
Yukarıdaki basit diyagramda senkron mesajlar 1-2-3-4 sırasında gerçekleşmektedir.
Her mesaj gönderiminden sonra dikkat ederseniz aktivite kutuları çizilmiştir.
Ayrıca 3. mesajda ise öz yinelemeli (recursion - kendi kendine mesaj) mesajlara
örnek verilmiştir.
Gerçek "Sequence" Diyagramları Nasıl Çizilir
?
Gerçek projelerde
"sequence" diyagramlarını çıkarmak sanıldığı kadar zor bir işlem değildir.
Yeterki karşılaştığımız sorunun ve tasarım probleminin farkında olalım. Proje
modülleri için çıkaracağımız "sequence" diyagramları, bakış açımıza,
proje ekibinin iletişim biçimine veya modülün herkes tarafından bilinirliğine
göre değişebilmektedir. Söz gelimi akış biçimi kolayca anlaşabilecek sistemler
de basit bir "sequence" diyagramı yeterli olabilecekken henüz yeni
geliştirilen bir sistem için her ayrıntıyı "sequence" diyagramları
üzerinde göstermek gerekebilecektir. "Sequence" diyagramları bu ayrım
gözetilerek genellikle iki biçimde incelenmektedir : Instance (örnek) ve
generic (genel) "sequence" diyagramları. Instance olarak adlandırılan
diyagramlarda genellikle basit bir şema çizlir, ayrıntılar gözardı edilir ve
"best case" denilen en iyi olasılıklar ele alınır. Örneğin bir ATM
makinasının akışını modelleyen diyagramda sadece kullanıcı aktivitelerinin,
paranın kullanıcıya verilmesinin ele alınması aynı zamanda hesapta paranın
olmaması, ATM makinasında paranın olmaması gibi durumları ele alınmaması
bu tarz diyagramlara örnek olabilir. Generic diyagramlarda ise model daha karışık
ve her yönüyle ele alınır. Öyleki döngü ve koşul yapıları dahi "sequence"
diyagramında gösterilir. Koşul ve döngü ifadeleri aynı nesne üzerinde farklı
aktivite kutuları ile gösterilmektedir. Aşağıda her iki yaklaşımla çizilmiş
iki "sequence" diyagramını bulabilirsiniz.
Instance "Sequence"
Diyagramına Örnek :
Üç nesneli bir
ATM makinasının çalışmasını modelleyen "sequence" diyagramını örnek
verelim. Sistemimizde ilgilendiğimiz üç nesne bulunmaktadır.
Tuş Takımı ve Para Alma Modülü: Kullanıcnın ATM makinası ile haberleştiği
arayüzler (Nesne 1)
Hesap Kontrol Modülü : Kullanıcı doğrulama ve bakiye kontrol gibi mantıkların
işletildiği birim (Nesne 2)
Para İletme Bölümü : Kullanıcının yani talebinin arayüz yani Nesne1 yardımıyla
kullanıcıya sunulması. (Nesne 3)
Diyagramımızı çizmeden
önce iş kurallarımızı maddeler halinde yazalım :
1 - Kullanıcı
şifresini yazar.
2 - Ardından çekmek istediği tutarı nesne 1 yardımıyla yazar. (tuş takımı)
3 - Çekmek istenilen tutar nesne 2 tarafından kontrol edilir.
4 - Eğer bakiye uygun ise Nesne 3 e mesaj gönderilerek bu modüle para
aktarımı sağlanır. Not : Bu örnekte bakiyenin uygun olacağı varsayılacaktır.
(yukarıda anlatılan best case durumu)
5 - Nesne 3, Nesne 1 i yani arayüzü uyararak paranın alınması sağlanır.
Örneğe ilişkin "sequence" diyagramı ise aşağıdaki gibi çizilebilir.
Diakkat ederseniz sadece kullanıcının girdiği tutarın bakiyeden küçük olduğu
"best case" dediğimiz en ideal durum modellenmiştir. Diğer durumlar
bu modelde bulunmamaktadır.
Şekil 7 : Örneğe ilişkin instance "sequence" diyagramı
Generic "Sequence"
Diyagramına Örnek :
Generic "sequence"
diyagramında birden fazla senaryo aynı anda ele alınmaktadır. Söz gelimi aşağıdaki
örnekte kullanıcının girdiği tutar bakiyeden büyük ise iki senaryo daha eklenmektedir.
Bu durumda ya ödenebilen maksimum miktar ödenmekte yada işlem iptal edilmektedir.
Bunun gibi bir çok senaryo diyagrama eklenebilir. Tabi eklenen her senaryo diyagramı
iyice karıştıracaktır. Bu yüzden diyagramlarımızı oluştururken bütün senaryoları
içerebilecek durumları çıkarmaya çalışma ile birlikte maksimum okunabirliği
de gözönünde bulundurmak gerekir. Zira çıkaracağımız diyagramlar geliştiricilerin
işini zorlaştırma yerine kolaylaştırmalıdır. Zaten temel amacımız da bu olmalı.
Şekil 8 : Örneğe ilişkin generic "sequence" diyagramı
Yukarıdaki örnekte dikkat ederseniz kolaylık olması açısından aynı nesne birden
fazla zaman çizgisine sahip olabilmektedir. (Bkz : Nesne 1 zaman çizgisi)
Bu yazımda sizlere
"sequence" diyagramlarının temellerini aktarmaya çalıştım. Unutmayın!
bir kere okuma ile bu konuların iyi bir şekilde algılanması mümkün değildir.
Her şeyin ilacı zaman ve deneyimdir. Bu kural her meslekte olduğu gibi bizim
meslekte de geçerlidir. Bir sonraki yazımda "Collaboration" diyagramlarını
inceleyeceğim. Bir sonraki yazıda görüşmek üzere...
Makale:
UML ile "Sequence" Diyagramları UML ve Sistem Analizi Sefer Algan
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|