1.09.2009

Etkinlik (Activity) diyagramı

Etkinlik diyagramları, sistemin akış yönünden davranışını betimler. Etkinlik diyagramları bir şeyin durumlarını temsil etmesi niteliği ile durum diyagramlarına benzer. Fakat durum diyagramları gerçekleşen eylemler neticesinde oluşan durumları nitelerken etkinlik diyagramları ise koşullu ya da paralel ilerleyen eylemleri betimler.
Etkinlik diyagramları nasıl çizilir:
Etkinlik diyagramları sistem içerisindeki eylemlerin akışını gösterir. Diyagram yukarıdan aşağıya doğru okunur ve dallanmalar paralel eylemleri ve durumları belirtir. Dallanma, aynı anda birden fazla sürecin işlediğini gösterir. Aşağıdaki diyagramda 1.Aktivite’den sonra bir çatal yer almakta ve dallanma meydana gelmektedir. Bu, 2.Aktivite ve 3. Aktivite’nin aynı anda gerçekleştiğini göstermektedir. 2.Aktivite’den sonra da bir dallanma vardır. Dallanma belirli koşullar altında hangi eylemlerin gerçekleşeceğini gösterir. Tüm dallar bir noktada koşullu durumda işletilecek eylemlerin sonunu belirtmek üzere birleşirler. Tüm paralel aktiviteler sonuca ulaşmadan önce birleşmek zorundadır.
Aşağıda, sipariş işleminin olası bir etkinlik diyagramı görülmektedir. Diyagram, sistem akışı içerisinde eylemlerin akışını göstermektedir. Sipariş alındıktan sonra eylemler iki farklı eylem kümesine ayrılmaktadır. Bir yönde sipariş hazırlanmakta ve gönderilmekte, diğerinde ise faturalandırma işlemi yerine getirilmektedir. Sipariş hazırlama dalında teslim metodu duruma göre tespit edilmektedir. Duruma göre Acil teslimat ya da Normal teslimat işlemi gerçekleştirilir. Son olarak paralel yürüyen aktiviteler siparişi kapatmak üzere birleşirler.

Durum diyagramı

Durum diyagramları bir sistemin davranışlarını modeller ve bir olay gerçekleştiğinde olası tüm durumları tanımlar. Her bir diyagram bir sınıfın tek bir nesnesini ele alır ve sistem içerisindeki farklı durumlarını irdeler. Bir durum diyagramı aşağıdaki elemanlardan oluşur:
Durum makinesi (State machine): Bir nesnenin bütün durumlarını bir şema halinde gösteren yapıdır.
Durum (State): Tek bir nesnenin herhangi bir durumuna verilen addır.
Olay (Event): Nesnenin durumları arasında geçişini sağlayan yordama olay denir.
Eylem (Action): Nesnenin bir durumdan diğer bir duruma geçtiğinde yaptığı işlere eylem denir. Eylem, çalışıtırılabilir herhangi bir durum olabilir.
Geçiş (Transition): Nesnenin durumları arasındaki, geçişin gösterilmesine geçiş denir. Bir nesnenin her durumu arasında bir ilişki olmayabileceğinden dolayı iki durum arasında bir geçiş olmak zorunda değildir. Bir geçişte 4 yapı vardır. Bu yapılardan ikisi hedef (target) ve kaynak (source)’tır. Geçişler daima kaynak durumdan hedefv duruma doğru yapılır. Üçüncü yapı, kaynak durumdan hedef duruma geçişi sağlayan olay ateşleyicisi (event trigger)’dir. Son yapı da nesnenin geçiş sonrası ne şekilde davranacağını belirleyen eylem (action)’dir.
Özgeçiş (Self transaction): Bazen bir nesnenin gçişleri iki farklı durum arasında olmayıp, kendi üzerine döner. Daha net söylersek; geçişin kaynak ve hedef durumu aynı olur. Bu durum özgeçiş olarak adlandırılır.
İlk durum (Initial state): Programtaik olarak bir koda karşılık geşmese de ilk durum bir nesnenin ilk geçişinden hemen önceki durumunu temsil eder ve geçeceği ilk duruma geçişi sağlamak için bir ilk nokta teşkil eder ve durum kutusunda farklı olarak içi dolu daire olarak gösterilir.
Son durum (Final state): Nesnenin ömrü bittiğinde aldığı son durumu ifade etmek için kullanılan semboldür. Bir nesne birden fazla son duruma sahip olabilir.
Durum diyagramları nasıl çizilir:
Durum diyagramları çok az sayıda eleman içerir. Temel elemanlar, nesnenin durumunu temsil eden kutular ve bir sonraki duruma geçişi temsil eden oklardır. Durum sembolünün eylem kısmı nesnenin o durumda ne yapacağını betimler.
Tüm durum diyagramları, nesnenin ilk durumu ile başlar. Bu durum nesnenin ilk yaratıldığı andaki durumudur. İlk durumu takiben nesne durum değiştirmeye başlar. Eylemlerin koşuluna göre nesnenin geçeceği bir sonraki durum çeşitlenir.
Aşağıda sipariş örneğine uygun bir durum diyagramı görülmektedir. Nesne “Denetleniyor” durumuna geçtiğinde “ürün denetle” eylemini gerçekleştirir. Eylem tamamlandıktan sonra bir sonraki geçilecek durum “ürün mevcut” ve “ürün yok” koşullarına göre belirlenir. Eğer ürün mevcut değilse sipariş iptal edilir. Eğer ürün stoklarda mevcut ise ürün gönderilir. Nesne “Gönderiliyor” durumuna geçtiğinde ise “göndermeyi başlat” eylemi gerçekleşir ve nesne “Gönderildi” durumuna geçer.
Durum diyagramları aynı zamanda bir nesnenin üst durumunu da gösterebilir. Üst durum, pek çok geçişin belirli bir duruma gittiği zamanlarda kullanılır. Son duruma kadar olan ara geçişleri göstermek yerine tek bir üst durum içerisinde durumlar tanımlanıp, son duruma geçiş üst durum üzerinden gösterilebilir. Bu, durum diyagramını okumayı kolaylaştırır.
Aşağıdaki diyagramda bir üst durum görülmektedir. “Denetleniyor” ve “Gönderiliyor” durumları “İptal edildi” durumuna geçebileceğinden geçiş sadece bir üst durum olan “Aktif” durumundan “İptal edildi” durumuna gösterilmiştir. Bunun tam tersine “Gönderildi” durumuna sadece “Gönderiliyor” durumundan geçilebileceği için “Gönderildi” durumuna gelen ok sadece “Gönderiliyor” durumundan çıkarılır.

İşbirliği (Collaboration) diyagramı

İşbirliği diyagramları nesneler arasındaki ilişkileri ve aralarında gezen mesajların sırasını gösterir. Nesneler kutular ile gösterilirken, oklar nesnelerin arasında gezen mesajları gösterir. Mesajların yanındaki numaralar “sıra (dizge) numarası” olarak adlandırılır ve nesneler arasında iletilen mesajların sırasını gösterir. UML 1,2,3.. gibi numaralandırma sistemlerinin yanında 1.1, 1.2, 1.3, 2.1, 2.2,... gibi numaralandırma sistemlerini de kabul edilmektedir.
Aşağıdaki örnekte ise sipariş verme use case’i ile ilgili basit bir işbirliği diyagramını göstermektedir.. Bu sefer iki noktadan sonra sınıf isimleri yer almaktadır. Bunun nedeni ise bu sınıftan türetilen tüm nesnelerin aynı şekilde davranacağındandır.
İşbirliği diyagramlarında nesneler iki türde yer alır. Tedarikçi (supplier) ve istemci (client). Bu iki kavram işbirliği diyagramlarında parametreler gösterilirken karşımıza çıkar. Temel olarak tedarikçi nesneler çağrılan metodu sunan nesnelerdir. Bir dizge diyagramında aradaki bağlantıyı gösteren okun ucundaki nesne, mesajı alan ve çağrılan metodu sunan tedarikçi nesnedir. İstemci nesneler tedarikçi nesne üzerindeki metodları çağırır.
İşbirliği diyagramında kullanılan nesneleri daha detaylı incelersek:
Nesne: Yukarıdaki işbirliği diyagramında bize dizge diyagramlarından da tanıdık geleceği üzere nesne aynı şekilde gösterilmektedir. Nesne kutusunun içerisinde yer alan “a” harfi nesneyi, “A” harfi ise sınıfı temsil etmektedir.
Senkron mesaj: Gönderildiği nesneden yanıt bekleyen mesajlardır ve belirli bir süre sonra, işlem tamamlandığında aynı bağlantı üzerinden yanıt alınmaktadır. Bir senkron mesaj
ile gösterilirken geri dönen yanıt da
işaretiyle gösterilir.
Asenkron mesaj: Senkron mesajların aksine cevap beklemeyen mesajlardır. Bir işbirliği diyagramında asenkron mesaj aşağıdaki simge ile gösterilir.
Prosedür çağrısı: Yukarıdaki diyagramda “b” nesnesi “c” nesnesi üzerinden bir prosedürü çağırmaktadır.
Sıra numarası: İşbirliği diyagramlarında zaman bilgisi bulunmadığından mesajlaşmalarda sıra numarası kullanılır. Dizge diyagramlarında zaten bir zaman ekseni mevcut olduğundan sıra bilgisini yazmak seçime bağlıdır. Fakat işbirliği diyagramlarında zamanı ekseni olmadığından mesaj numarası kullanmak zorunludur.
Belirsiz nesne (Anonymous object): Bir sınıftan türeyen her nesnenin aynı şekilde davranacağının düşünüldüğü tasarımlarda sınıftan türeyen nesne için isim kullanılmayabilir. Bu durumda nesne adı belirtilmez ve belirsiz nesne “:A” şeklinde sadece sınıf adı ile nitelenir.
Kendine referans (Self-reference): Kendi üzerindeki bir metodu çağıran nesnedir. Çoğu durumda nesne, kontrol amaçlı olarak sahip olduğu metodları kullanabilir.
Zaman aşımı (Timeout): Belirli bir zaman cevap gelmeyince çağrılan mesaj tipidir. Aşağıdaki gibi gösterilir.
Çoklu nesne (Multi object): Bir nesen kendi içerisinde birden fazla nesne içeriyorsa bu nesne çoklu nesne olarak tanımlanırve aşağıdaki gibi gösterilir.
Yorum: Diyagramın kim tarafından, ne zaman oluşturulduğunu ve kapsamını tutan bileşendir. Bilgi amaçlı olarak sağ üst köşeye konulabilir.
Karmaşık sistemler, tasarlanan görevlerine yerine getirmek için ortaklaşa çalışan bir çok nesne içermektedir. UML içindeki işbirliği diyagramları temel olarak bu nesneler arasındaki ilişkiye yoğunlaşırken dizge diyagramları mesaj sırası ile ilgilenmektedir. Her iki diyagram da pek çok noktada ortaklık gösterir. Aralarındaki farklara bir göz atmek istersek:
1. Dizge diyagramları, zamana bağımlı olarak nesneler arasındaki mesajlaşmayı gösterir. İşbirliği diyagramları ise zamandan bağımsızdır.
2. İşbirliği diyagramları ile tek bir diyagram üzerinde dinamik yapıyı ve nesnelerin statik ilişkisini göstermek mümkündür. Dizge diyagramları ise sadece dinamik yapıyı temsil eder.
3. Dizge diyagramları ilk analiz safhasında oluşturulurken işbirliği diyagramları daha çok tasarım aşamasında oluşturulur.
4. Dizge diyagramlarından mesajlaşma sıraları, işbirliği diyagramlarında ise ilişkiler daha kolay gözlemlenir. Büyük diyagramlar için işbirliği diyagramlarını takip etmek zorken dizge diyagramlarında bu iş daha kolaydır. Ancak işbirliği diyagramları daha az alanda daha çok bilgiyi gösterebilir.
5. Belirli bir amacı yerine getirmek üzere bir araya gelen nesneler arasındaki ilişkiler işbirliği diyagramları ile daha rahat görülür. Yine genel resmi görmek işbirliği diyagramları ile daha kolay olmaktadır.
6. Dizge diyagramlarındaki bir bağlantı bir nesneden diğer bir nesneye giden mesajı gösterirken işbirliği diyagramlarındaki bir bağlantı nesneler arasındaki bir ya da daha fazla mesajı gösterebilir.
7. Dizge diyagramlarında nesnelerin yaratılışı ve sonlandırışı daha kolay görülür. İşbirliği diyagramında ise aynı iş bu kadar kolay gerçekleştirilemez.
8. İşbirliği diyagramlarında zaman kavramı olmadığı için bir nesnenin ne zaman aktif ne zaman pasif olduğunu anlamak zordur. Bunu anlamak içn mesaj tiplerini incelemek gerekmektedir. Fakat dizge diyagramlarında bunu kavramak çok kolaydır.
9. İşbirliği diyagramları daha karışıuk dallanmalara (branching) ve eş zamanlı akış denetimine (concurrent flow of control) izin verirken dizge diyagramları doğası gereği çok daha basit dallanmalara müsaade etmektedir. Bu yönüyle işbirliği diyagramları daha karışık sistemleri modelleyebilmektedir.

31.08.2009

Dizge (Sequence) diyagramı

Dizge diyagramları bir use case içerisindeki nesnelerin davranışlarını ve birbirlerine ilettikleri mesajları gösterir. Diyagram soldan sağa ve yukarıdan aşağı okunur. Bir dizge diyagramı temel olarak nesnelerden, mesajlardan ve zaman eksenlerinden oluşur. Dizge diyagramları, tasarımı yapan kişi ya da ekibin bakış açısına, gerekliliklerine ve modülün tüm çalışanlar tarafından bilinirliğine göre değişebilmektedir. Kolayca anlaşılabilecek sistemler için basit bir dizge diyagramı yeterli olabilecekken yeni geliştirilen bir sistem için her ayrıntıyı gösteren bir siyagram gerekebilmektedir. Bu ayrım gözetildiğine dizge diyagramları iki türe ayrılmaktadır. Genellike basit bir şemanın çizildiği, ve en iyi olasılıkları ele alan “best case” senaryo üzerinden yürüyen örnek (instance) diyagramı ve modelin her yönüyle ele alındığı ve daha karışık bir model olan genel (generic) diyagram.

Nesneler, diğer UML diyagramlarında olduğu gibi belirli görevleri gerçekleştirmek üzere tanımlı yapı bloklarıdır. Dizge diyagramında nesneler, diyagramında fiziksel olarak en üstten alta ve soldan sağa okunur. Her bir nesnenin altından çıkan kesikli çizgi zaman çizgisini (timeline) göstermektedir. Kesikli çizgi zaman akışını gösterirken üzerinde bulunan ince uzun dikdörtgenler o nesnenin zaman içerisinde meydana getirdiği aktivitelerdir. Her ne kadar teorik olarak dikdörtgenin uzunluğu aktivitenin uzunluğu ile doğru orantılı olsa ve da genellikle bu kurala pek uyulmaz.

Mesajlar bir nesnenin zaman çizgisinden diğer bir nesnenin zaman çizgisine doğru çizilen ok şekillerinden oluşmaktadır. Nesnelerin birbirleri ile haberleşmesi, birbirlerine gönderdikleri komutları temsil eden bu oklarla gösterilir. Bir nesne başka bir nesnenin dışında kendine de mesaj gönderebilir (öz yineleme - recursion). Bunun yanında, Actor gibi nesne olmayan UML bileşeni de nesnelere meaj gönderebilir.

Dizge diyagramlarında 3 çeşit mesaj tip kullanılmaktadır.

Basit (Simple) mesaj: Bu mesaj tipi 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 gibi olmaktadır:
Senkron (Synchronous) mesaj: Bir nesnenin mesajı gönderdikten sonra, zaman çizelgesinde devam edebilmek için karşı nesneden cevap beklemesi gereken durumlarda kullanılır. Varsayılan mesaj tipi olduğundan sıklıkla kullanılmaktadır. Gösterimi aşağıdaki gibidir:
Asenkron (Asynchronous) mesaj: Senkron mesajların aksine bir nesnenin mesajı gönderdikten sonra, zaman çizelgesinde devam edebilmek için karşı nesneden cevap beklemesi gerekmediği durumlarda kullanılır. Sıklıkla asenkron işlemesi gereken komut zincirlerinde kullanılmaktadır. Gösterimi aşağıdaki gibidir:
Aşağıdaki örnek, Sınıf1 nesnesinin Sınıf2 nesnesine bir mesaj göndermesi ile başlamakta olup Sınıf3 son mesajı alıncaya kadar farklı nesneler arasındaki mesaj alışverişi ile devam etmektedir.
Aşağıda ise biraz daha karmaşık bir örnek görülmektedir. Açık mavi dikey kutular nesnenin aktif olduğu süreci gösterirken yeşil kesikli çizgi ise nesnenin ömrünü göstermektedir. Yeşil dikey kutular ise o anda kontrolü elinde tutan nesneyi ifade eder. Turuncu kutu ise nesnenin yok edildiğini belirtir. Bu diyagram aynı zamanda bir nesneye mesaj gönderilme koşullarını gösterir. Koşul, mesajın yanına köşeli parantez içerisinde yazılır. Örneğin aşağıdaki örnekte Sınıf2’nin Sınıf3’e mesajını gönderebilmesi için [koşul] ifadesi sağlanmalıdır.
Sonraki diyagram, bir sipariş alımı için olan dizge diyagramının başlangıç kısmını göstermektedir. “Sipariş Giriş Penceresi” adında bir nesne yaratılmakta ve siparişin hazırlanması için Sipariş nesnesine mesaj göndermektedir. Diyagramda nesne isimlerinden sonra iki nokta üst üste konulduğuna dikkat ediniz. Şekilde nesnelerin türedikleri sınıf adları belirtilmemiştir. Buna rağmen “nesneAdı : sınıfAdı” biçiminin korunması için iki nokta üst üste işaretinin kullanılması gerektiğini unutmayınız.

Daha sonra Sipariş nesnesi ürünün stokta olup olmadığına bakmakta ve eğer [StoktaVar] koşulu sağlanırsa “Sipariş Edilen Ürün” nesnesine mesaj göndermektedir.
Bir sonraki diyagramda ise Sipariş nesnesine koşullu mesaj eklenmiştir. Eğer ürün [StoktaYok] koşulunu sağlarsa “Sipariş Giriş Penceresi” nesnesine ürünün kalmadığını belirten bir mesaj gönderir.

Etkileşim diyagramı

Etkileşim diyagramları, use case’lerin görevleri yerine getirmek üzere nesnelerin nasıl etkileştiklerini modeller. İki tür etkileşim diyagramı vardır; dizge ve ortak çalışma diyagramları.

Etkileşim diyagramları ne zaman kullanılır:

Etkileşim diyagramları bir use case içerisindeki farklı nesnelerin davranışlarını modellemek istediğimizde kullanılır ve davranışı oluşturmak üzere nesnelerin ne şekilde işbirliği yaptıklarını ortaya koyar. Etkileşim diyagramları davranış ile derinlemesine bilgi vermediğinden belirli bir nesnenin farklı use case’ler için nasıl davrandığını görmek için durum diyagramlarını kullanınız.

Etkileşim diyagramları nasıl çizilir:

Dizge diyagramları, Ortak çalışma diyagramları ve ikisi bir arada nesnelerin bir use case içerisindeki etkileşimlerini göstermek üzere kullanılabilir. Dizge diyagramları genel olarak oluşan olayların sırasını gösterir. Ortak çalışma diyagramları ise nesnelerin statik olarak birbirlerine bağlantılarını gösterir. Her iki diyagram da ortak elemanlar içerirler ve çizimleri kolaydır.