| 
                
             | 
        
        
            
                
                    
                        | 
                            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
                         
                     
                 
                
                
             | 
        
        
            | 
                
             |