UML ile State(Durum) Diyagramları
Yayınlanma Tarihi : 21.6.2003
Okunma Sayısı : 57791
Ana Sayfa / Makaleler / UML / Analiz / UML ile State(Durum) Diyagramları
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.
Tek bir nesnenin herhangi bir durumunu ifade etmek için "State" sözcüğü kullanılır.
Nesnenin "state" ler arasındaki geçişini sağlayacak yordama event(olay) denir.
Nesnenin bir durumdan diğer bir duruma geçtiğinde yaptığı işlere "action" denilmektedir. Action, çalıştırılabilir herhangi bir durum olabilir.
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
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.
UML ile State(Durum) Diyagramları UML ve Sistem Analizi Sefer Algan
dilek meyva / üye hakkında
internette uml ile ilgili çok az türkçe çok az kaynak bulabildim ama sizin sayenizde umli daha iyi anladığımı düşünüyorum ayrıca vermiş olduğunuz örnekler basit ve anlaşılması çok kolay günlük yaşamla çok bağlantılı tebrikler..
mehmet general / üye hakkında
ARKADAŞLAR sizi kutlamakla kalmayıp tebrikler ediyorum. Sizin sayenizde uml yi öğrendim
Sirus Rahimov / üye hakkında
Cok anlasiyiyor yaziyorsunuz. Devamini bekliyoruz.
Duray AKAR / üye hakkında
UML makaleleri devam edecek mi ? Tanitimdan sonra pratikte uygulamaya yonelik bilgiler verilse guzel olur. Ornegin bir projede UML hangi asamalarda hangi sirayla kullaniliyor? Ayrica UML araclari da tanitilabilirse faydali olur. Ornegin VS.NET' in bazi paketleri ile birlikte gelen VISIO ile reverse engineering ve code generation ...