Professional Documents
Culture Documents
Unified Modeling Language: Nedir?
Unified Modeling Language: Nedir?
Unified Modeling Language: Nedir?
Nedir?
UML 'nin faydaları
1-) Öncelikle programımız kodlanmaya başlamadan önce geniş bir analizi ve tasarımı yapılmış olacağından kodlama
işlemi daha kolay olur. Çünkü programdan ne beklediğimizi ve programlama ile neler yapacağımızı profesyonel bir
şekilde belirleriz UML ile.
2-) Programımızda beklenmedik bir takım mantıksal hataları (bug) minimuma indirgemiş oluruz.
3-) Tasarım aşaması düzgün yapıldıysa tekrar kullanılabilen kodların sayısı artacaktır. Buda program geliştirme
maliyetini büyük ölçüde düşürecektir.
4-) UML diagramları programımızın tamamını kapsayacağı için bellek kullanımını daha etkili hale getirebiliriz.
5-) Programımızın kararlılığı artacaktır. UML ile dokümanlandırılmış kodları düzenlemek daha az zaman alacaktır.
6-) Ortak çalışılan projelerde programcıların iletişimi daha kolay hale gelir.Çünkü UML ile programımızı parçalara
ayırdık ve parçalar arasında bir ilişki kurduk.
Bir sistemin geliştirilmesi kabaca aşağıdaki aşamalardan geçmektedir. İlk iki aşamada UML büyük ölçüde rol oynar.
UML komponentleri(diagramlar)
Nesneler arasında ilişki kurmak için UML bir takım grafiksel elemanlara sahiptir. Bu
elemanları kullanarak diyagramlar oluşturacaktır.
UML temel olarak 9 diyagram türünden oluşur.
Bir nesne(object) sınıfın (class) bir örneğidir. Bu tür diyagramlarda sınıfın yerine
gerçek nesneler kullanılır.
-> Bire-bir
-> Bire-çok
-> Bire-bir veya daha fazla
-> Bire-sıfır veya bir
-> Bire-sınırlı aralık (mesela:bire-[0,20] aralığı)
-> Bire-n (UML de birden çok ifadesini kullanmak için '*' simgesi kullanılır.)
-> Bire-Beş yada Bire-sekiz
ASSOCATION (Sınıflar arası ilişki)
Diğer bir ilişki türü ise bir sınıfın kendisiyle kurduğu ilişkidir.Bu tür ilişkiler genellikle
bir sınıfın sistemde birden fazla rolü varsa ortaya çıkar.Bu tür ilişkilere "reflexive
associations (Kendine Dönen )" denir.Bu tür bir ilişki UML ile aşağıdaki gibi gösterilir.
Nesneler arasında ortak özellikler varsa bunu her sınıfta belirtmenin yerine ortak özellikleri bir
sınıfta toplayıp diğer sınıfları ondan türetip yeni özellikler ekleyerek organizasyonu daha etkin
hale getirebiliriz.Tabi istersek ortak özelliklerin toplandığı sınıf ile gerçek nesneler oluşturmayı
engelleyebiliriz.Bu tür sınıflara "abstract class" denir.Bir sınıfın "Abstract" olması için Sınıf ismini
italik yazmamız gerekir.
İÇERME (AGGREGATIONS)
Bazı sınıflar birden fazla parçadan oluşur.Bu tür özel ilişkiye "Aggregation" denir.Mesela ,bir TV
'yi ele alalım.Bir televizyon çeşitli parçalardan oluşmuştur.Ekran,Uzaktan Kumanda,Devreler
vs.. Bütün bu parçaları birer sınıf ile temsil edersek TV bir bütün olarak oluşturulduğunda
parçalarını istediğimiz gibi ekleyebiliriz. Aggregation ilişkisini 'bütün parça' yukarıda olacak
şekilde ve 'bütün parça'nın ucuna içi boş elmas yerleştirecek şekilde gösteririz.Örnek bir şekil
aşağıdaki gibidir.
Mesela bir bilgisayar dosyası ilgili sınıfın özellikleri ve işlevleri ile ilgili görünülürlük özelliği
aşağıdaki gibi gösterilebilir.
USE CASE Diagram
Use Case diyagramları ise sistemin ve sınıfların zamanla değişimini de içerecek biçimdeki diyagramlardır. Bir
Use Case modeli Use Case diyagramları ve Use case açıklamaları dediğimiz senaryolardan oluşmaktadır.
Use Case diyagramları ise Actors,Use Case ve Use Case 'ler arasındaki ilişkilerden oluşmaktaır. Kısaca Use
Case modelini tanımlarsak şöyle diyebiliriz. Sistemin kullanıcısının bakış açısıyla sistemin davranışlarının
diyagramlarla modellenmesidir. Use Case 'ler sistemin kabaca ne yaptığı ile ilgilenir, kesinlikle nasıl ve neden
yapıldığını incelemez.
Use Case modelini oluşturan diğer önemli bir yapı ise senaryolardır. Senaryolar kullanıcı tarafından başlatılan
çeşitli olaylar dizisidir. Her ne kadar bazı sistemlerde bir olay ya da senaryo kullanıcı tarafından değil de
donanım veya belirli bir zaman geçmesi sonucu başlatılsa da, sistemi tasarlamamız için Use Case 'lerden
faydalanamayacağımız anlamına gelmez.
Use Case ifadeleri UML diyagramlarıyla aşağıdaki gibi gösterilir.
Yukarıda da görüldüğü gibi Aktör yani kullanıcı Use Case modelinde bir Use Case 'i
başlatır ve sonuç olarak bir değeri başka bir kullanıcıya verir. Use Case 'ler yukarıda
da görüldüğü gibi elips şeklinde gösterilir. Kullanıcıların altında kullanıcıların adı
bulunur. Kullanıcı ve Use Case arasındaki ilişkiyi belirtmek için ise düz bir çizgi çizilir.
herbir Use Case, senaryalordan oluşur, senaryolar ise bir çeşit olaylar serisidir. Her Use Case 'e ait senaryolar
aşağıdaki ifadelerden bir sonuç bekler.
-> Use Case 'i başlatan kullanıcıdan
-> Use Case 'in başlaması için gereken ön bilgilerden
-> Senaryodaki adımlardan
-> Senaryo bittikten sonraki durumlardan
-> Use Case 'den faydalanacak aktör durumundaki nesnelerden.
USE CASE Diagram
Use Case'ler Arasındaki İlişki
Yukarıda da belirttiğimiz gibi use case 'ler tekrar kullanılabilen birimlerdir. Tekrar kullanmanın iki yöntemi
vardır.Bunlar : inclusion ve extension 'dır. Bu iki metodun dışında use case 'ler arasındaki ilişkiyi gösteren iki
kavram daha vardır. Bunlar ise :Generalization(Genelleme) ve Grouping(gruplama) 'dır. Bu kavramlar
hakkında detaylı bilgiyi aşağıda bulabilirsiniz.
Inclusion(içerme)
Bu metodla bir use case içindeki adımlardan birini başka bir use case içinde kullanabiliriz. Inclusion yöntemini
kullanmak için <<include>> şeklindeki bir ifade kullanılır. Bu ifade daha önce gördüğümüz sınıf
diyagramlarındaki sınıfları birbirine bağlayan noktalı çizgilerin üzerine yazılır. Kullanmak istediğimiz use case
'ler arasına çektiğimiz noktalı çizginin üzerine <<include>> yazısını yazarız.
Extension(eklenti)
Bu metodla varolan bir Use Case 'e yeni yeni adımlar ekleyerek yani use case 'ler yaratlır. Inclusion'da olduğu
gibi extension 'ları göstermek için yine use case 'ler arasına noktalı çizgiler konur ve üzerine <<extension>>
ibaresi yazılır.
USE CASE Diagram
Generalization(genelleme)
Sınıflar için türetme kavramı vardır. Türetme ile oluşturulan sınıf ana sınıfın tüm özelliklerini alır ve istenirse
yeni sınıfa yeni özellikler eklenir. Use Case 'ler arasındaki bu ilişki de sınıflarda türetme(inheritance)
kavramına benzemektedir. Gösterim biçimi sınıf diyagramlarındaki türetmenin gösteriliş şekliyle aynıdır. Yani
use case 'ler arasında düz bir çizgi çizilir ve çizginin taban(base) sınıfı gösteren ucuna içi boş bir üçgen çizilir.
Aşağıdaki şekilde, bir siteye ait kullanıcıların genellemesinin nasıl yapıldığını görebilirsiniz. Bir sitedeki online
kullanıcılar ziyaretçilerden ve üyelerden oluşur, ayrıca sitenin üye kullanıcıları ve ziyaretçiler için sunduğu
hizmetler farklı olabileceği için aktörler arasında genelleme yapılmıştır.
USE CASE Diagram
Grouping(gruplama)
Gruplama metodu tamamen fiziksel olarak bazı use case 'leri bir arada toplamak için kullanılır. Gruplama
tekniği genellikle birkaç alt sistemden oluşan büyük sistemlerde kullanılır.
Use Case diyagramları hakkında temel bilgileri verdikten sonra Use Case diyagramlarına örnek olabilecek bir
uygulama yapalım.
Örnek:
C#nedir?com web sayfasına gelen bir kullanıcının neler yapabileceğini use case diyagramlarıyla göstermeye
çalışalım. Siteye gelen bir kullanıcı kayıtsız şartsız makale başlıklarını görebilmektedir. Online olan kullanıcı
Siteyi tavsiye edebilir, siteye üye olabilir, C# ile ilgili olan kitapları inceleyebilir. Ancak makale okuması ve
kaynak kod indirebilmesi için siteye üye girişi yapmalıdır. Makale okuması ve kaynak kod indirebilmesi için
gereken şart siteye üye olmaktır. C#nedir?com sitesine bağlanan bir kullanıcının site üzerindeki hareketlerini
belirtir diyagram aşağıdaki gibidir.
State (Durum)Diagram
"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
State Machine (Durum Makinesi)
"State Manchine", bir nesnenin bütün durumlarını bir şema halinde gösteren yapıdır.
State (Durum)
Tek bir nesnenin herhangi bir durumunu ifade etmek için "State" sözcüğü kullanılır.
Event (Olay)
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.
State Machine (Durum Makinesi)
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.
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.
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. )
State Machine (Durum Makinesi)
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.
State Machine (Durum Makinesi)
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.
State Machine (Durum Makinesi)
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.
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.
State Machine (Durum Makinesi)
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 :
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.
"Sequence" Diyagramları
"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ı.
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 dikdö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.)
"Sequence" Diyagramları
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.
Üç 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.
"Sequence" Diyagramları
Örneğe ilişkin "sequence" diyagramı ise aşağıdaki gibi çizilebilir. Dikkat 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.
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ı.
Sistemin yaşamı boyunca alabileceği tüm durumlar "durum diyagramı" ile belirtilirken,
ilgili durumda yapılması gereken aktiviteler "aktivite diyagramı" sayesinde ortaya
konur. Aktivite diyagramları; bir davranışın giriş ve çıkışlarını göstermektedir.
Oluşturacağınız modelde; giriş ve çıkışlar önemliyse "aktivite diyagramlarını" tercih
etmek durumundasınız. "Durum diyagramları" ise; olaylara verilen tepkileri daha etkin
biçimde göstermektedir. Giriş/çıkışın önemli olmadığı, durumların daha önemli olduğu
senaryolarda "durum diyagramlarını" tercih edebilirsiniz.
Rational Rose tasarım aracı ile aktivite diyagramı çizebilmek için; öncelikle bir
kullanım senaryosu oluşturulur. Kullanım senaryosuna farenin sağ tuşu ile tıklayarak,
alt diyagramlar menüsünden (sub diagrams) yeni aktivite diyagramı (new activity
diagram) seçilir. Bu örnekte; bir müşterinin kahve istediğini varsayalım. Bu aşamada
gerekli olan "kahvehazirla" kullanım senaryosunu detaylandırmak için basit bir aktivite
diyagramı çizeceğiz. Şekil 1’de kullanım senaryosu, Şekil 2’de ise aktivite diyagramı
gösterilmektedir.
«Aktivite" Diyagramları
Bölmeleme için kullandığımız çizgileri dikey olarak gösterebileceğimiz gibi, yatay olarak da
gösterebiliriz. Paralel aktiviteleri göstermek için kullandığımız çizgileri de yatay olarak
göstermek mümkündür. Kulvarlar (swimlane), doğrusal süreçlere kolaylıkla
uygulanmaktadır.
UML diagramlarına
4+1 bakış, bu diyagramları sınıflandırmak ve yazılım yaşam çevrimindeki kullanım yerlerini
ortaya koymak için kullanılan bir kavramdır. Bu bakışlar;
1-) Kullanıcı Bakışı (User View): Müşteri gereksinimlerini ortaya koymak ve müşteriye,
sistemi tanıtmak amacı ile kullanılan bakış açısıdır. Bazı kaynaklarda; kullanım senaryosu
(use case) bakışı olarak da açıklanmaktadır. Bu amaçla; önceki yazılarımızda
açıkladığımız "kullanım senaryosu" (use case) diyagramları kullanılmaktadır.
2-) Yapısal Bakış (Structural View): Sistemin nelerden meydana geldiğini gösteren bakış
açısıdır. Bazı kaynaklarda bu bakış, tasarım (design) veya mantıksal (logical) bakış olarak
da açıklanmaktadır. Bu amaçla; önceki yazılarımızda açıkladığımız "sınıf" (class)
diyagramları ve "nesne" (object) diyagramları kullanılmaktadır.
3-) Davranış Bakışı (Behavioral View): Sistemin dinamik yapısını ortaya koyan bakış
açısıdır. Bazı kaynaklarda; süreç (process) bakışı olarak da açıklanmaktadır. Bu amaçla;
önceki yazılarımızda açıkladığımız "sıralama" (sequence), "işbirliği" (collaboration),
"durum" (statechart), "aktivite" (activity) diyagramları kullanılmaktadır.
4-) Gerçekleme Bakışı (Implementation View): Sistemin alt modüllerini ortaya koyan bakış
açısıdır. Bazı kaynaklarda; bileşen (component) bakışı olarak da açıklanmaktadır. Bu
amaçla; bu yazımızın asıl konusu olan "bileşen" (component) diyagramları
kullanılmaktadır.
5-) Ortam Bakışı (Environment View): Donanımın (üzerinde yazılımın çalışacağı), fiziksel
mimarisinin ortaya konduğu bakış açısıdır. Bazı kaynaklarda; dağıtım (deployment) bakışı
olarak da açıklanmaktadır. Bu amaçla; ileriki yazılarımızda açıklanacak olan "dağıtım"
(deployment) diyagramları kullanılmaktadır.
Bileşen diagramları
Gerçekleme bakışı, geliştirilen yazılım sisteminin alt modüllerini ortaya koymayı hedefler.
Bu amaçla kullanılan modelleme elemanları, bileşenler ve paketlerdir (package). Paketler;
yazılımın üst seviyedeki fiziksel parçaları olup katmanlar halinde oluşturulur. Her katmanın
bir arayüzü bulunmaktadır. Örneğin; istemci-sunucu uygulaması geliştirdiğimizi düşünelim.
Bu sistem için paketler; istemci, istemciye erişimi sağlayacak olan sürücü (bir kütüphane
olarak oluşturulabilir veya hazır bir sürücü kullanılabilir), sunucu tarafında bağlantıyı
sağlayacak olan sunucu kayıt yöneticisi, istemcinin isteklerini karşılayacak olan sunucu
hizmet yöneticisi olabilir. Geliştirilecek sistemin gereksinimlerine bağlı olarak, bu paketlerin
sayısını arttırabilir veya azaltabilirsiniz.
"Temel bileşen diyagramı" (main component diagram) ile, yazılım sistemi içindeki tüm
paketleri bir diyagram üzerinde göstermek mümkündür. Şekil 1’ de yukarıda açıklanan
örneğe ilişkin, temel bileşen diyagramı verilmektedir. Bu sayede, sisteme dışarıdan bakan
birisi (müşteri, testçi, programcı, tasarımcı veya analist) sistemi basit bir yapıda
görebilmektedir.