|  | 
        
            | 
                    
                        | UML ile State(Durum) Diyagramları |  |  
                        | 
	
    
		
            | Gönderiliyor lütfen bekleyin... | 
 |  | 
        
            | Uzun 
  bir süreden sonra UML diyagramları ile ilgili yazılarıma devam ediyorum, bundan 
  önceki yazlarda sınıf(class) ve use case diyagramlarını incelemiştik, bu yazıda 
  ise State diyagramlarının ne anlama geldiği ve çeşitli tanımları aktarmaya 
  çalışacağım. 
 "State" kelimesinin Türkçe karşılığı "Durum" dur. O halde 
  state diyagramlarını, bir nesnenin ömrü buyonca sahip olacağı durumları modelleyen 
  diyagramlar şeklinde tanımlayabiliriz. Peki ne demek bu? Öyle bir nesne düşününki 
  belirli olaylar karşısında değişik durumlarda bulunsun. Ve bu durumlar arasında 
  çeşitli yöntemlerle geçişler mümkün olsun. Mesela bir lambayı düşünün, lambanın 
  yaşam süresince 3 farklı durumda olabileceğini söyleyebiliriz. Birinci durum 
  lambanın kapalı olması, ikinci durum lambanın açık olması son durum da lambanın 
  düşük enerji harcayarak yanması olsun. Bu 3 durum arasında geçişler mümkündür. 
  Bu geçişleri sağlayan ise çeşitli olaylardır. Örneğin lambayı kapalı durumdan 
  açık duruma getirmek için lambanın anahtarını çevirmek gerekir. Aynı şekilde 
  lambayı düşük enerjili halde yanan durumundan açık durumuna getirmek için lamba 
  anahtarını yarım çevirmek gerekir. Lamba nesnesi durum değiştirirken yaptığı 
  işlere "action", lambanın durum değiştirmesini sağlayan mekanizmaya 
  ise event(olay) denilmektedir.
 
 Nesnelerin bu şekilde durumlarını modellemek için UML'deki standart State Diyagramları 
  kullanılır. State diyagramları bir nesneye ait dinamik modellemeyi içermektedir. 
  Dinamik modellemeden kastım nesnenin ömrü boyunca gireceği durumları belirtmesidir. 
  Daha önce gördüğümüz sınıf diagramları ise statik modelleme olarak anılmaktadır. 
  Şimdi bu kısa girişten sonra State Diyagramları ilgili temel bilgileri aktarayım.
 
 State Machine (Durum Makinesi)
 
 "State 
  Manchine", bir nesnenin bütün durumlarını bir şema halinde gösteren yapıdır. 
  Temel kavramları anlattıktan sonra bir "state machine" örneği vereceğim.
 
 State (Durum)
 
 Tek bir nesnenin herhangi bir durumunu ifade etmek için "State" 
  sözcüğü kullanılır.
 
 Event (Olay)
 
 Nesnenin "state" ler arasındaki geçişini sağlayacak yordama 
  event(olay) denir.
 
 Action (Aksiyon)
 
 Nesnenin bir durumdan diğer bir duruma geçtiğinde yaptığı işlere 
  "action" denilmektedir. Action, çalıştırılabilir herhangi bir durum 
  olabilir.
 
 Transition (Geçiş)
 
 Nesnelerin durumları arasındaki geçişi sembol etmeye "Transition" 
  denir. Bir nesnenin her durumu arasında bir ilişki olmayabilir. Örneğin lamba 
  açıkken lamba kapatılamıyorsa bu iki durum arasında bir geçiş yoktur denir. 
  Bir transiton(geçiş)'da 4 yapı vardır. Bu yapılardan ikisi doğal olarak "hedef(target)" 
  ve "kaynak(source)" durumudur. Geçişler kaynak durumdan hedef duruma 
  doğru yapılır. Üçüncü yapı Kaynak durumdan hedef duruma geçişi sağlayan "event 
  trigger(olay ateşleyicisi)" dır. Son yapı ise nesnenin durum geçişi sonrasında 
  ne şekilde davranacağını belirleyen "action" dır.
 
 
 Self 
  Transition (Öz-Geçiş)
 
 Bazen bir nesnenin durum geçişleri farklı iki durum arasında olmayabilir. 
  Mesela lamba açık durumda olduğu halde lambayı tekrar açmaya çalışmak "self 
  transition" kavramına bir örnektir. Kısaca hedef durum ve kaynak durumun 
  aynı olduğu durumlar "Self Transition" olarak adlandırılır.
 
 Initial State (İlk durum)
 
 Programatik bir anlam ifade etmiyor gibi görünsede Initial State 
  kavramı nesnenin gerçek bir duruma geçmeden önceki durumunu belirtir. Kısaca, 
  nesne ilk yaratıldığında alacağı duruma bir geçiş sağlamak için gerçek anlamda 
  bir "state" olmayan şekil(içi dolu küre) kullanılır.
 
 Final State (Son Durum)
 
 Nesnenin ömrü bittiğinde aldığı durumu ifade etmek için kullanılan 
  semboldür. Bir nesne birden fazla "Final State" durumuna sahip olabilir.
 
 Yukarıda anlatılan kavramların kafanızda daha belirgin bir hale gelmesi için 
  aşağıdaki şemayı inceleyebilirsiniz. Bu şemaya kabaca "State Macihine" 
  de denilebilir. (Not: Aşağıdaki şema sadece kavramların kafanızda daha net olarak 
  canlanabilmesi için verilmiştir. Gerçek yaşama yönelik bir durum makinesi değildir. 
  )
 
 
   
 
 Bu 
  aşamada önemle vurgulamamız gereken nokta State Diyagramlarının tek bir nesne 
  ile ilişkili olmasıdır.
 
 Nesnelerin 
  durumlarının UML ile nasıl gösterildiğine bakalım. Bir State yukarıdaki şemada 
  olduğu gibi köşeleri yuvarlatılmış dörtgen şeklinde gösterilir. Bir State'in 
  yukarıdaki şemada görülmeyen 3 ana bileşeni vardır. Birinci bileşeni State'in 
  adıdır. İkinci bileşen State değişkenleri üçüncü bileşen ise State ile ilgili 
  çeşitli aktiviteleri belirtmek için kullanılan yapıdır. Bu aktivitilerin bazıları 
  UML'de standart olarak belirtilmiş olmasına rağmen istersek kendimizde aktivite 
  tanımlayabiliriz. Standart olan aktivitelerin sayısı 3'tür. Bunlar entry, 
  exit ve do isimli aktivitelerdir. entry aktivitesi, nesnenin 
  ilgili duruma geçtiği andaki davranışın adını belirtir. exit aktivitesi, 
  nesne ilgili durumdan diğer bir duruma geçişi sırasındaki davranışını belirler. 
  Örneğin bir lambanın açık durumdan kapalı duruma geçtiğinde lambadaki elektrik 
  devresinden akımın kesilmesi yada lambanın kapalı durumdan açık duruma geçişi 
  sırasında devreye akımın verilmesi bu tür aktivitelere örnek verilebilir. Diğer 
  bir standart aktivite olan do ise nesnenin belirtilen durumda olduğu 
  sürece nasıl bir davranış sergileyeceğini belirtir. Lambanın yanması sırasında 
  devreden geçen akımın sabitliğinin korunması do aktivitesine örnek olarak 
  verilebilir. Bir "State" 'in bütün standart aktivitelerini tanımlamak 
  zorunda değiliz. Söz gelimi bir "State" ' in yalnızca do aktivitesi 
  olabilir.
 
 Yukarıdaki "State" tanımlamalarını göz önünde bulundurursak UML'de 
  en temel durum modeli aşağıdaki gibi yapılabilir.
 
 
  
 Yukarıdaki şekil teknik makale içeriği sunan bir siteye ait kullanıcının ONLINE 
  olma durumunu modellemektedir. Şekildeki 
  en üstteki kısım "State Name" yani durum adını belirtir. İkinci kısım 
  ilgili duruma ait çeşitli parametreleri gösterir. Bu örnekte ONLINE durumunda 
  olan kullanıcının sisteme ne zaman giriş yaptığı belirtilmektedir. Parametreler 
  bölümüne ihtiyaç olduğunda çeşitli ifadelerde(ToplamSüre = EskiSüre + YeniSüre 
  gibi) yazılabilir. Son ve en alttaki bölüm ise "State" ile ilgili 
  aktiviteleri göstermektedir. entry aktivitesinde kullanıcının "Hoş geldin" 
  mesajı ile karşılanması, exit aktivitesinde "Güle güle" mesajı ile 
  uğurlanması, do aktivitesinde ise kullanıcıya makale okuma iznin verileceği 
  belirtilmektedir. Bu standart aktivitelerin dışında olan tavsiye isimli 
  diğer bir aktivitede ise kullanıcıya diğer teknik makale içeren sitelerin tavsiye 
  edileceği belirtilmektedir.
 
 
 Durumlar Arası Koşullu Geçişler (Guard Condition)
 
 Bir nesnenin bir durumdan diğerine geçişi için sadece olay tetiklenmesi 
  yetmeyebilir. Mesela gün ışığına göre yanıp sönen aynı zamanda açma kapama düğmeside 
  olan bir lambayı düşünün. Gündüz saatlerinde lamba kapalı durumdayken anahtar 
  çevrilerek lambanın açılması istenmeyebilir. Yani lambanın açılması ortamın 
  karanlık olmasınada bağlıdır. Sadece lambanın anahtarını çevirerek lambanın 
  açılamayacağı koşullu geçişlere örnek olabilir. Lambanın açılması için "anahtar 
  açma" olayının meydana gelmesi ve ortamın aydınlık seviyesinin lambanın 
  açılması için yeterli olması gerekmektedir. Bu durumu geçişler üzerine açılan 
  ve kapanan köşeli parantezler içine koşulu yazarak belirtebiliriz. Örneğin KAPALI 
  ve AÇIK durumları arasındaki geçişe aşağıdaki gibi bir koşul yazılabilir.
 
 [Aydınlık 
  == Gunduz Seviyesi]
 KAPALI --------------------------------------> AÇIK
 Anahtarı 
  Çevirme
 
 Eğer geçişler arasında sadece koşul ifadesi yazılırsa, koşul ifadesi gerçekleştiği 
  anda geçişin sağlanması beklenir. Yani olayın ateşlenmesine gerek yoktur. Yukurıdaki 
  gösterimde ise lambanın AÇIK duruma geçebilmesi için hem koşulun sağlanması 
  hemde olayın(anahtarı çevirme) gerçekleşmesi gerekir.
 
 Alt Durumlar (Substates)
 
 Gerçek hayattaki sistemler burada anlattığım sistemlerden çoğu zaman 
  daha kompleks olacaktır. Hatta bir çok sistemin durum modeli çıkarıldığında 
  bazı durumların içinde farklı durumların olduğu görülmektedir. Bu tür "alt 
  durumları" içeren modellemeler UML ile yapılabilmektedir. Alt durumlara 
  bir örnek verelim : Bir CD çalar programını düşünün. CD çalar programı belirli 
  bir anda ya çalışıyor durumdadır yada çalışmıyor durumundadır. Eğer CD çalar 
  programı çalışır durumda ise yine iki durum olabilir. CD çalar programı ya bir 
  kayıt yapıyordur, yada seçilen şarkıyı çalıyordur. Çalışma durumu içindeki bu 
  iki durumu aşağıdaki gibi modelleyebiliriz.
 
 
   
 Alt-durumlar ile ilgili önemli durumlar :
 
 1-a ) Bir alt-durum, varolan başka bir durum içinde olmalıdır.
 
 1-b 
  ) Alt-durumu olan bir duruma "Composite State" denir.
 
 1-c ) Bir durum içinde birden fazla seviyede durum olabilir. Örneğin yukarıdaki 
  örnekte Kayıt durumu içinde de alt durumlar olabilir.
 
 1-d ) Herhangi bir alt-durum içermeyen durumlara "Simple State" yani 
  basit durum denir.
 
 Kompozite(Composite) Durumlar ilgili Önemli Özellikler
 
 2-a ) Bir composite duruma geçiş(transition) olabileceği gibi, composite durumdan 
  başka durumlarada geçiş olabilir. Eğer bir geçiş composite duruma doğru ise 
  bu composite durumun "Başlangıç Durumu(Initial State)" içermesi zorunludur. 
  Eğer böyle olmasaydı tanımsız durumlar ortaya çıkardı. Bu durumu aşağıdaki composite 
  durum diyagramından rahatlıkla görebilirsiniz.
 
 2-b ) Eğer geçiş(transition) bir alt-duruma doğru ise, ve dıştaki duruma ilişkin 
  her hangi bir entry aktivitesi varsa çalıştırılır ve ardından alt-duruma ilişkin 
  aktiviteler çalıştırılır.
 
 2-c ) Eğer geçiş(transition), composite durum içindeki bir alt-durumdan, composite 
  durumun dışındaki bir duruma doğru ise, önce composite durumun exit aktivitesi 
  ardından alt-durumun exit aktivitesi çalıştırılır.
 
 2-d ) Eğer geçiş(transition) composite durumdan, dışarıdaki farklı bir duruma 
  doğru ise öncelik sırası diğer alt-durumlara göre bu geçiştedir.
 
 Aşağıda kompleks bir durum modeli verilmiştir. Bu modelde 2-a, 2-b, 2-c ve 2-d 
  maddelerinde verilen geçişler işaretlenmiştir.
 
 
   
 
 Bu makalede durum diyagramları ile ilgili temel kavramları aktarmata çalıştım. 
  Sonraki makalelerimde gerçek bir sistemi tüm yönleri ile ele alıp durum modellenmesi 
  ve bu modelin nesne yönelimli bir programlama dili (C++,C#,JAVA) ile nasıl gerçeklenebileceği 
  üzerinde duracağım.
 
 
 
 
 
                Makale:UML ile State(Durum) 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
                         | 
        
            |  |