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.

Sınıf diyagramı

Sınıf diyagramları bir sistem içerisindeki nesne tiplerini ve birbirleri ile olan ilişkileri tanımlamak için kullanılırlar. Sınıf diyagramları, sınıf yapısını ve içeriğini sınıflar, paketler ve nesneler kullanarak modeller ve bir sistemi 3 farklı perspektiften; kavramsal, tanımsal ve yaşamsal açıdan ele alır.


Sınıf’lar üç şeyden oluşur: bir isim, nitelikler (property) ve işlemler (method).

Sınıf diyagramları aynı zamanda içerme, kalıtım, ilişki ve diğer bağlantıları ifade eder. Aşağıda bir ilişki bağlantısı gösterilmektedir.

İlişki bağlantıları bir sınıf diyagramdaki en genel bağlantıdır. İlişki sınıf’ın örnek (instance)’leri arasındaki bağlantıları gösterir. Örneğin Sipariş sınıfı Müşteri sınıfı ile ilişkilidir. Çokluk ilişkisi bu ilişkiye dahil olabilecek nesne sayısını temsil eder. Örnekte Sipariş nesnesi sadece bir Müşteriye ilişkilendirilebilirken bir Müşteri birden fazla Sipariş ile ilişkilendirilebilir.

Sınıf diyagramlarında sıklıkla kullanılan bir diğer ilişki de genelleştirmedir. Genelleştirme iki sınıfın biribirine benzer olup da sadece küçük farklarla ayrıldığı durumlarda kullanılır. Aşağıda bir genelleştirme örneği görülmektedir.

Bu örnekte Kurumsal Müşteri ve Bireysel Müşteri sınıflarında ad ve adres gibi alanlar ortak olmakla birlikte her sınıfın kendine özgü alan ve metodları da mevcuttur. Müşteri sınıfı ise her iki sınıfın genel yapısını temsil eder.

Sınıf Diyagramları nasıl çizilir:

Sınıf diyagramları en zor çizilen UML diyagramları arasındadır. Detaylı ve kullanışlı bir diyagram çizebilmek uzun süreli bir UML ve OO bilgisi gerektirir. Burada ise sadece genel bir bakış ortaya koyan, temel bir örnekle yetinilecektir.

Sınıf diyagramı çizmeden önce, çizilecek diyagramın sistemi her üç perspektiften de (kavramsal, tanımsal ve yaşamsal) göstermesi gerektiğini unutmayın. Diyagram tek bir perspektife odaklanmamalı, hepsinin bir arada nasıl çalışabileceğini göstermelidir.

Bir sınıfı tasarlarken hangi özelliklere ve işlemlere sahip olması gerektiğini göz önünde bulundurun. Daha sonra bu sınıftan türetilen örneklerin birbirleri ile nasıl etkileşeceğini düşünün. Bunlar her ne kadar bir sınıf diyagram çizmenin ilk adımları olsa da bu temel çizim ile bile sistemin genel yapısı ortaya koyulabilir.

Use-case diyagramları

Use case, bir kullanıcı ile sistem arasındaki etkileşimi göstermek üzere kullanılan senaryolar topluluğudur. Bir use case diyagramı aktörler ile use case’ler arasındaki ilişkiyi gösterir. Bu diyagram türünün iki temel elemanı aktör ve use case’dir.

Aktör, modellemekte olduğumuz sistem ile etkileşimde bulunan bir kişi ya da diğer bir sistemi temsil eder. Use case ise kullanıcının bir işlemini yerine getirmek üzere yapılan eylemleri yapan sistemin, dışarıdan bir görünüşüdür.

Use case diyagramları nasıl çizilir:

UML diyagramlarının çizimi kolay bir iş olmasına rağmen örnek olarak çok basit bir model ele alınmıştır.

Bunun için önce bir işlemi tamamlamak için kullanıcının ilerleyeceği süreçler sıralanır. Örneğin bir firmaya sipariş verecek olan kişi aşağıdaki adımları izleyecektir.

1. Katalog tarama ve ürün seçme

2. Müşteri temsilcisini arama

3. Teslimat bilgisini verme

4. Ödeme bilgilerini verme

5. İşlemi onaylatma

Bahsedilen bu adımların use case diyagramı aşağıdaki gibi olmaktadır.

Bu örnekte aktör olarak müşteri gösterilmiştir çünkü sipariş sürecini yürüten kişi müşteridir. Diyagram, yukarıda listelenen adımları alır ve müşterinin gerçekleştirebileceği eylemler olarak gösterir. Bu diyagrama müşteri temsilcisi de dahil edilmelidir, çünkü bu süreçte o da etkileşimde bulunmaktadır.

Yukarıda gösterilen diyagramdan sipariş sürecinin işleyişi kolaylıkla çıkarılabilmektedir. Sistem gereken eylemleri yerine getirebilmek için listelenen bütün use case’leri gerçekleştirmelidir.

UML'e giriş

Unified Modelling Language (UML) yazılım sistemlerinin olgularını tanımlamak, görselleştirmek, oluşturmak ve dokümante etmek için kullanılan bir standartlar dilidir. UML, büyük ve karmaşık sistemlerin modellenmesinde başarısı ispatlanmış deneyimlerin bir araya gelmesiyle oluşmuştur ve Object Oriented Software (OOS) ve yazılım geliştirme sürecinin önenli bir parçasıdır. UML, yazılım projelerinin tasarımını daha çok grafiksel öğeler ile belirtir. UML kullanımı ekip içerisindeki iletişimi güçlendirir, potansiyel tasarımların ortaya çıkmasını sağlar ve yazılımın mimari tasarımını ortaya koyar.
UML’in amaçları
UML’in başlıca amaçları:

  1. Kullanıcılara geliştirip paylaşabilecekleri anlamlı bir göresel modelleme dili sunmak.

  2. Temel kavramları genişletmeye yönelik olarak genişleyebilir ve özelleştirilebilir bir mekanizma sunmak.

  3. Uygulama geliştirme dillerinden ve geliştirme süreçlerinden bağımsızlığı sağlamak.

  4. Modelleme dillerini anlamak üzere biçimsel bir zemin hazırlamak.

  5. Bileşen, pattern, framework ve bir arada yürütülen projelerin ileri seviyede geliştirilmesine destek sağlamak.
UML Diyagram tipleri:
Aslında UML tipleri burada bahsedeceklerimizden çok daha fazladır. Fakat giriş seviyesinde ortalama bir programcının bilmesi gereken ve en sık kullanılan UML diyagramlarına öncelik vermek istedim. Diğer diyagramları da sıra geldikçe açıklamaya çalışacağım.
Use case diyagramı: Aktörler ve use case’ler arasındaki ilişkiyi gösterir.
Sınıf diyagramı: Sınıf, package ve nesne gibi tasarım elemanlarını kullanarak sınıf yapısını ve içeriğini gösterir.
Etkileşim diyagramı:

  • Dizge (Sequence) diyagramı: Etkileşimde bulunan nesnelerin zaman içindeki sıralanışını gösterir. Dikey boyut (zaman) ve yatay boyut (nesneler)’tan oluşur.

  • İşbirliği (Collaboration) diyagramı: Nesnelerin çevreleri ile kurduğu etkileşimleri ve birbirlerine olan bağlantılarını gösterir. Mesajların sırası numaralar ile belirtilir.
Durum (State) diyagramı: Bir nesnenin yaşam döngüsü içerisinde gelen isteklere verdiği tepkileri; yanıtları ve eylemleri ile birlikte durum sırasında gösterir.
Etkinlik (Activity) diyagram: Çoğu durumun eylem durumu olduğu ve geçişlerin bir durumdaki eylemin sonuçlanması ile tetiklendiği özel bir durum diyagramı türüdür. Bu diyagram daha çok iç işlemler esnasındaki akışı gösterir.
Fiziksel diyagramlar:

  • Bileşen (Component) diyagramı: Kodun yüksek seviyede paketlenmiş yapısını gösterir. Bileşenler arasındaki bağlantılar kaynak kodu bileşeni, ikili (binary) kod bileşenler ve çalıştırılabilir bileşenleri de içerecek şekilde gösterilir. Bazı bileşenler derleme zamanında, bağlama zamanında, çalışma zamanında ya da birkaçında birden var olabilir.

  • Dağıtım (Deployment) diyagramı: Çalışma zamanında işlenen elemanları ve yazılım bileşenlerini, süreçleri ve üzerinde yaşayan nesnelerin düzenleşimlerini gösterir.