29 Temmuz 2014 Salı
28 Temmuz 2014 Pazartesi
hachi: bir köpeğin hikayesi
kutup macerası
milyoner
Şovun o gecelik bitmesinin ardından Jamal, eğitimsiz olan birinin bu kadar büyük başarıyı ancak hile yoluyla gösterebileceğinden şüphelenilip tutuklanır. Ama yarışmadaki her sorunun cevabıyla o gece Jamal'ın inanılması zor gerçek hikayesi ortaya çıkacaktır. Fakat sadece bir soru gizemini korur...
hayat güzeldir
o.çocukları
tepenin ardı
vicdan
bi küçük eylül meselesi
"Eylül. Beni hatırlamıyor musun? Sen burada, bu adada bana aşık oldun."
piyanist
ucuz roman
sihirbaz
Siyah kuğu
Umudunu kaybetme
yeşil yol
Esaretin Bedeli filmini de yönetmiş olan Frank Darabont, bu filminde de benzer bir atmosferi seyirciye başarıyla aktarıyor. Oscar Ödüllü Tom Hanks'in yanında, Michael Clarke Duncan ve James Cromwell gibi oyuncular başrolde yer alıyor.
Çingeneler zamanı
Prestige
can dostum

27 Temmuz 2014 Pazar
18 Temmuz 2014 Cuma
Collaboration Diagrams
"İşbirliği" Diyagramları
İşbirliği kelimesi (collaboration), "co-labor" (ortak-iş) kelimelerinden oluşmaktadır. İşbirliği diyagramları; tasarımcıların UML içinde çok fazla tercih etmediği diyagramlardandır. Çoğu tasarımcı, sıralama diyagramlarının nesneler arasındaki dinamik yapıyı göstermede yeterli olduğunu düşünür. Ancak; tasarımlarında işbirliği diyagramlarını kullanmış ve yararlarını görmüş olan tasarımcılar, bu diyagramları da modellerine katmayı düşünürler. Bu yazıdaki UML diyagramları Rational Rose tasarım aracı ile çizilecektir.
Önceki makalelerde; sınıf diyagramları ile sistemin statik yapısının, durum diyagramları ile karmaşık sınıfların davranışının, sıralama diyagramları ile sıra mantığının, aktivite diyagramları ile veri akışının modellenebileceğini açıklamaya çalışmıştık. Belirli bir amaca yönelik olarak ortaklaşa çalışan nesneleri ise işbirliği diyagramları ile modelleyeceğiz.
Karmaşık sistemler, tasarlanan görevleri 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, sıralama diyagramları mesaj sırası ile ilgilenmektedir. 2 diyagram bir çok noktada benzerlik göstermektedir. Bu nedenle; birçok tasarım aracı bir diyagramın çizili olması durumunda, diğerini bir tuşa basmanızla birlikte üretebilmektedir. Örneğin; Rational Rose (2002 versiyonu) içinde sıralama diyagramının çizili olduğu durumda, kullanıcı F5 tuşuna basarak işbirliği diyagramını görebilmektedir. Bu durumu, "UML ile Sıralama Diyagramları" makalesinde ATM makinesinin çalışmasını modelleyen sıralama diyagramı üzerinde inceleyeceğiz. Bu örnek sayesinde; iki diyagram arasında geçişi ve işbirliği diyagramlarını görmüş olacağız.
Şekil 1de örneğe ilişkin sıralama diyagramı verilmekte, Şekil 2de ise bu örneğin F5 tuşuna basılarak elde edilmiş işbirliği diyagramı gösterilmektedir.
Tasarım aracınızdaki sıralama diyagramı ekranında; aktör nesnesi oluşturmak için bir bileşen bulunmuyorsa, kullanım senaryosunda aktörü oluşturup sürükle-bırak ile sıralama diyagramına taşıyabilirsiniz.
Şekil 1 : ATM örneğine ilişkin sıralama diyagramı
Şekil 2: ATM örneğine ilişkin işbirliği diyagramı
Şekillerden de görüldüğü gibi, 2 diyagram da "nesneler" ve "mesajları" modellemekte, aynı bilgiyi farklı şekillerde göstermektedir. Temel elemanlar; nesneler, bağlantılar ve mesajlardır. Bu noktada; 2 diyagram arasındaki temel farkları incelememiz gerekmektedir.
İşbirliği diyagramları ile Sıralama diyagramları arasındaki farklar
1. Sıralama diyagramları, zamana bağımlı olarak nesneler arasındaki mesajlaşmayı göstermektedir. İş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östermeniz mümkündür. Sıralama diyagramları sadece dinamik yapıyı temsil etmektedir.
3. Sıralama diyagramları, müşterilerin daha kolay anlayabileceği diyagramlardır. Bu nedenle; ilk analiz safhasında sıralama diyagramları kullanılırken, işbirliği diyagramları daha çok tasarım aşamasında kullanılır.
4. Sıralama diyagramlarında; mesajlaşma sıraları, işbirliği diyagramlarında ilişkiler daha kolay gözlemlenir. Büyük diyagramlar için; mesaj sırası ile mesajlaşmayı takip etmek (işbirliği diyagramları), şekil üzerinden takip etmeye (sıralama diyagramları) göre daha zordur. Ancak; daha az alanda birçok bilgiyi göstermenizi sağlayabilir.
5. Belirli bir amacı yerine getiren nesneler arasındaki ilişkiler, işbirliği diyagramları ile daha net gösterilebilmektedir. Senaryoya ilişkin tüm resmi (nesneler ve arasındaki ilişkiler) işbirliği diyagramları ile daha net gösterebilirsiniz. Sıralama diyagramları, mesaj sırasına yoğunlaştığı için tüm resim net görünmeyebilir.
6. Sıralama diyagramlarında bir bağlantı, bir nesneden diğerine giden mesajı gösterirken; işbirliği diyagramlarında bir bağlantı, nesneler arasındaki 1 veya daha fazla mesajı gösterebilir.
7. Sıralama diyagramlarının bir avantajı; nesnelerin yaratılışı ve sonlandırılışını kolay şekilde gösterebilmenize imkan vermesidir. Zaman boyutunda "yeni ()" mesajı ile nesneyi yaratabilir, X işareti ile de nesnenin sonlandırıldığını gösterebilirsiniz. İşbirliği diyagramlarında bu kadar basit olarak aynı işlemi gerçekleştiremezsiniz. Bu durumu gerçekleştirmek için "oluştur( )" ve "sonlandır( )" mesajlarını modele katmanız gerekir.
8. İşbirliği diyagramlarınlarında zaman kavramı olmadığı için; bir nesnenin ne zaman aktif ne zaman pasif olduğunu mesaj tiplerini incelemeden anlayamazsınız ancak sıralama diyagramlarında bu durum çok kolay algılanmaktadır.
9. İşbirliği diyagramları; daha karmaşık dallanmalara (branch), eş zamanlı akış denetimine (concurrent flow of control) izin verirken sıralama diyagramları doğası gereği daha basit dallanmalara izin vermektedir. Bu açıdan; işbirliği diyagramları ile daha karmaşık sistemler modellenebilmektedir.
Nesne tipleri
Nesneler, diyagramlarda 2 türde yer alabilmektedir. Tedarikçi (supplier) ve istemci (client). Bu 2 kavram; işbirliği diyagramlarında parametreleri gösterirken karşınıza çıkabilir. Temel olarak tedarikçi nesneler; çağrılan metodu sunan nesnelerdir. A------->B şeklindeki bir örnek için; B nesnesi mesajı alan ve çağrılan metodu sunan "tedarikçi nesne" olarak ifade edilir. İstemci nesneler, tedarikçi nesneler üzerindeki metotları çağırır.
Bu durumda; A nesnesi istemci, B nesnesi de tedarikçi nesne olarak ifade edilir.
Özel semboller
İşbirliği diyagramları içinde kullanılan özel semboller bu bölümde açıklanacaktır. Bu kapsamda; Şekil 3de sadece kavramları göstermek için bir örnek verilmektedir.

Şekil 3: İşbirliği diyagramındaki kavramları, sembolleri ve mesajlaşma çeşitlerini gösteren bir örnek
1. Nesne: Sıralama diyagramlarındaki nesne kavramının aynısıdır. a: A ile gösterilen nesne; A sınıfından yaratılan ve ismi a olan nesneyi temsil etmektedir.
2. Senkron mesaj: Senkron mesajlar, gönderildiği nesneden cevap bekleyen mesajlardır ve belirli bir süre sonra aynı bağlantı üzerinden cevap alınmaktadır. Şekil 3 de mesaj1( ) senkron bir mesajı temsil ederken,buna ilişkin dönüş cevabı mesaj2( ) ile gösterilmektedir.
3. Asenkron mesaj: Senkron mesajların aksine cevap beklemeyen mesajlardır. mesaj5( ), asenkron mesajlara örnek olarak verilebilir.
3. Prosedür çağırma: mesaj3( ) mesajı ile prosedür çağırma temsil edilmektedir. c nesnesi üzerinden, bu prosedür çağrılmaktadır.
4. Sıra numaraları: İşbirliği diyagramlarında zaman bilgisi bulunmadığı için sıra numarası kullanılır. Sıralama diyagramlarında, bu sıra bilgisi seçime bağlıdır ancak işbirliği diyagramlarında kullanılmak zorundadır. Her mesajın bir numarası örnekte görülmektedir.
5. Belirsiz nesne (anonymous object): Bir sınıfın herhangi bir nesnesinin aynı şekilde davranacağı düşünüldüğü zaman, ilgili nesne için isim kullanmayabilir. :D nesnesi, belirsiz bir nesnedir.
6. Kendi üzerine referans (self-reference): Kendi üzerinde bir metot çağıran nesne olarak düşünebiliriz. Çoğu durumda, nesne kontrol amaçlı sahip olduğu metotları kullanabilir. mesaj4( ) kendi üzerine referansa örnek olarak verilebilir.
7. Zaman aşımı olayı (timeout): Belirli bir zaman cevap gelmeyince çağrılan mesaj tipidir. mesaj6( ) bu mesaja örnek olarak verilebilir.
8. Çoklu nesne (multi-object): Bir nesne birden fazla nesne içeriyorsa; çoklu nesne olarak ifade edilir ve :G nesnesinde olduğu gibi gösterilebilir. Örneğin; modem nesnesi kendi içinde birden fazla nesne barındırabilir.
9. Yorum: Diyagramı kimin, ne zaman oluşturduğunu ve kapsamını gösteren bir yorum bileşeni diyagramın sağ üst köşesine konulabilir.
İşbirliği diyagramlarındaki önemli noktalar aşağıda açıklanmaktadır:
Bu bölüme kadar yapılan açıklamalar, özel semboller UML 1.x içinde yer aldığı şekilde verilmiştir. Birçok tasarım aracı, halen sadece UML 1.x ile diyagram çizebilmeyi desteklerken, bazıları UML 2yi de desteklemeye başlamıştır.
Bu noktada; işbirliği diyagramları yönünden UML 2deki değişimi inceleyebiliriz. UML 2 içinde işbirliği diyagramları; iletişim (communication) diyagramları adını almıştır. Bu diyagramlar; işbirliği diyagramlarına çok benzese de, daha az karmaşıktır ve işbirliği diyagramları kadar güçlü bir mekanizması yoktur. Bazı tasarımcılar; OMG içindeki UML grubuna, kaybolan bu özelliklerin eklenmesi için başvurmuşlar ve gerekli düzenlemelerin yapılmasını istemişlerdir. Yapılan bu değişikliklerin zamanla olgunlaşacağı ve tasarımcıların tercihine göre yön bulacağı beklenmektedir. Ancak; diyagramların temel felsefesinde çok fazla değişiklik bulunmamakta, daha çok gösterim açısından değişimler olmaktadır.
Bunun yanı sıra; UML 2, nesne etkileşimlerinin 4 farklı diyagramla modellenmesini önermektedir (UML 1.x içinde bu amaçla, sıralama ve işbirliği diyagramları kullanılmaktaydı). Bu diyagramlar; sıralama diyagramları, iletişim diyagramları (eski adıyla işbirliği diyagramları), etkileşim tanıtım diyagramları (interaction overview) ve zamanlama (timing) diyagramlarıdır.
İşbirliği diyagramları için daha fazla açıklama yapmak mümkündür. Ancak; UML 2 içindeki birçok özellik çoğu tasarım aracı tarafından şu anda desteklenmemektedir. Bu yazıda belirtilen temel kavramları kullanarak, kullandığınız tasarım aracının yeteneği ölçüsünde, projelerinizdeki nesneler arasındaki mesaj akışını kolaylıkla modellemeniz mümkün olacaktır.
İşbirliği kelimesi (collaboration), "co-labor" (ortak-iş) kelimelerinden oluşmaktadır. İşbirliği diyagramları; tasarımcıların UML içinde çok fazla tercih etmediği diyagramlardandır. Çoğu tasarımcı, sıralama diyagramlarının nesneler arasındaki dinamik yapıyı göstermede yeterli olduğunu düşünür. Ancak; tasarımlarında işbirliği diyagramlarını kullanmış ve yararlarını görmüş olan tasarımcılar, bu diyagramları da modellerine katmayı düşünürler. Bu yazıdaki UML diyagramları Rational Rose tasarım aracı ile çizilecektir.
Önceki makalelerde; sınıf diyagramları ile sistemin statik yapısının, durum diyagramları ile karmaşık sınıfların davranışının, sıralama diyagramları ile sıra mantığının, aktivite diyagramları ile veri akışının modellenebileceğini açıklamaya çalışmıştık. Belirli bir amaca yönelik olarak ortaklaşa çalışan nesneleri ise işbirliği diyagramları ile modelleyeceğiz.
Karmaşık sistemler, tasarlanan görevleri 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, sıralama diyagramları mesaj sırası ile ilgilenmektedir. 2 diyagram bir çok noktada benzerlik göstermektedir. Bu nedenle; birçok tasarım aracı bir diyagramın çizili olması durumunda, diğerini bir tuşa basmanızla birlikte üretebilmektedir. Örneğin; Rational Rose (2002 versiyonu) içinde sıralama diyagramının çizili olduğu durumda, kullanıcı F5 tuşuna basarak işbirliği diyagramını görebilmektedir. Bu durumu, "UML ile Sıralama Diyagramları" makalesinde ATM makinesinin çalışmasını modelleyen sıralama diyagramı üzerinde inceleyeceğiz. Bu örnek sayesinde; iki diyagram arasında geçişi ve işbirliği diyagramlarını görmüş olacağız.
Şekil 1de örneğe ilişkin sıralama diyagramı verilmekte, Şekil 2de ise bu örneğin F5 tuşuna basılarak elde edilmiş işbirliği diyagramı gösterilmektedir.
Tasarım aracınızdaki sıralama diyagramı ekranında; aktör nesnesi oluşturmak için bir bileşen bulunmuyorsa, kullanım senaryosunda aktörü oluşturup sürükle-bırak ile sıralama diyagramına taşıyabilirsiniz.
Şekil 1 : ATM örneğine ilişkin sıralama diyagramı
Şekil 2: ATM örneğine ilişkin işbirliği diyagramı
Şekillerden de görüldüğü gibi, 2 diyagram da "nesneler" ve "mesajları" modellemekte, aynı bilgiyi farklı şekillerde göstermektedir. Temel elemanlar; nesneler, bağlantılar ve mesajlardır. Bu noktada; 2 diyagram arasındaki temel farkları incelememiz gerekmektedir.
İşbirliği diyagramları ile Sıralama diyagramları arasındaki farklar
1. Sıralama diyagramları, zamana bağımlı olarak nesneler arasındaki mesajlaşmayı göstermektedir. İş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östermeniz mümkündür. Sıralama diyagramları sadece dinamik yapıyı temsil etmektedir.
3. Sıralama diyagramları, müşterilerin daha kolay anlayabileceği diyagramlardır. Bu nedenle; ilk analiz safhasında sıralama diyagramları kullanılırken, işbirliği diyagramları daha çok tasarım aşamasında kullanılır.
4. Sıralama diyagramlarında; mesajlaşma sıraları, işbirliği diyagramlarında ilişkiler daha kolay gözlemlenir. Büyük diyagramlar için; mesaj sırası ile mesajlaşmayı takip etmek (işbirliği diyagramları), şekil üzerinden takip etmeye (sıralama diyagramları) göre daha zordur. Ancak; daha az alanda birçok bilgiyi göstermenizi sağlayabilir.
5. Belirli bir amacı yerine getiren nesneler arasındaki ilişkiler, işbirliği diyagramları ile daha net gösterilebilmektedir. Senaryoya ilişkin tüm resmi (nesneler ve arasındaki ilişkiler) işbirliği diyagramları ile daha net gösterebilirsiniz. Sıralama diyagramları, mesaj sırasına yoğunlaştığı için tüm resim net görünmeyebilir.
6. Sıralama diyagramlarında bir bağlantı, bir nesneden diğerine giden mesajı gösterirken; işbirliği diyagramlarında bir bağlantı, nesneler arasındaki 1 veya daha fazla mesajı gösterebilir.
7. Sıralama diyagramlarının bir avantajı; nesnelerin yaratılışı ve sonlandırılışını kolay şekilde gösterebilmenize imkan vermesidir. Zaman boyutunda "yeni ()" mesajı ile nesneyi yaratabilir, X işareti ile de nesnenin sonlandırıldığını gösterebilirsiniz. İşbirliği diyagramlarında bu kadar basit olarak aynı işlemi gerçekleştiremezsiniz. Bu durumu gerçekleştirmek için "oluştur( )" ve "sonlandır( )" mesajlarını modele katmanız gerekir.
8. İşbirliği diyagramlarınlarında zaman kavramı olmadığı için; bir nesnenin ne zaman aktif ne zaman pasif olduğunu mesaj tiplerini incelemeden anlayamazsınız ancak sıralama diyagramlarında bu durum çok kolay algılanmaktadır.
9. İşbirliği diyagramları; daha karmaşık dallanmalara (branch), eş zamanlı akış denetimine (concurrent flow of control) izin verirken sıralama diyagramları doğası gereği daha basit dallanmalara izin vermektedir. Bu açıdan; işbirliği diyagramları ile daha karmaşık sistemler modellenebilmektedir.
Nesne tipleri
Nesneler, diyagramlarda 2 türde yer alabilmektedir. Tedarikçi (supplier) ve istemci (client). Bu 2 kavram; işbirliği diyagramlarında parametreleri gösterirken karşınıza çıkabilir. Temel olarak tedarikçi nesneler; çağrılan metodu sunan nesnelerdir. A------->B şeklindeki bir örnek için; B nesnesi mesajı alan ve çağrılan metodu sunan "tedarikçi nesne" olarak ifade edilir. İstemci nesneler, tedarikçi nesneler üzerindeki metotları çağırır.
Bu durumda; A nesnesi istemci, B nesnesi de tedarikçi nesne olarak ifade edilir.
Özel semboller
İşbirliği diyagramları içinde kullanılan özel semboller bu bölümde açıklanacaktır. Bu kapsamda; Şekil 3de sadece kavramları göstermek için bir örnek verilmektedir.
Şekil 3: İşbirliği diyagramındaki kavramları, sembolleri ve mesajlaşma çeşitlerini gösteren bir örnek
1. Nesne: Sıralama diyagramlarındaki nesne kavramının aynısıdır. a: A ile gösterilen nesne; A sınıfından yaratılan ve ismi a olan nesneyi temsil etmektedir.
2. Senkron mesaj: Senkron mesajlar, gönderildiği nesneden cevap bekleyen mesajlardır ve belirli bir süre sonra aynı bağlantı üzerinden cevap alınmaktadır. Şekil 3 de mesaj1( ) senkron bir mesajı temsil ederken,buna ilişkin dönüş cevabı mesaj2( ) ile gösterilmektedir.
3. Asenkron mesaj: Senkron mesajların aksine cevap beklemeyen mesajlardır. mesaj5( ), asenkron mesajlara örnek olarak verilebilir.
3. Prosedür çağırma: mesaj3( ) mesajı ile prosedür çağırma temsil edilmektedir. c nesnesi üzerinden, bu prosedür çağrılmaktadır.
4. Sıra numaraları: İşbirliği diyagramlarında zaman bilgisi bulunmadığı için sıra numarası kullanılır. Sıralama diyagramlarında, bu sıra bilgisi seçime bağlıdır ancak işbirliği diyagramlarında kullanılmak zorundadır. Her mesajın bir numarası örnekte görülmektedir.
5. Belirsiz nesne (anonymous object): Bir sınıfın herhangi bir nesnesinin aynı şekilde davranacağı düşünüldüğü zaman, ilgili nesne için isim kullanmayabilir. :D nesnesi, belirsiz bir nesnedir.
6. Kendi üzerine referans (self-reference): Kendi üzerinde bir metot çağıran nesne olarak düşünebiliriz. Çoğu durumda, nesne kontrol amaçlı sahip olduğu metotları kullanabilir. mesaj4( ) kendi üzerine referansa örnek olarak verilebilir.
7. Zaman aşımı olayı (timeout): Belirli bir zaman cevap gelmeyince çağrılan mesaj tipidir. mesaj6( ) bu mesaja örnek olarak verilebilir.
8. Çoklu nesne (multi-object): Bir nesne birden fazla nesne içeriyorsa; çoklu nesne olarak ifade edilir ve :G nesnesinde olduğu gibi gösterilebilir. Örneğin; modem nesnesi kendi içinde birden fazla nesne barındırabilir.
9. Yorum: Diyagramı kimin, ne zaman oluşturduğunu ve kapsamını gösteren bir yorum bileşeni diyagramın sağ üst köşesine konulabilir.
İşbirliği diyagramlarındaki önemli noktalar aşağıda açıklanmaktadır:
- İşbirliği diyagramlarında; özyineleme (iteration) ve şartlı (condition) ifadeler sıralama diyagramlarındaki gibi gösterilebilir. Özyineleme için; * sembolü, [i==true] ifadesi de şart için kullanılabilmektedir. Örneğin; 4*[i=İlkbahar..Kis] ifadesi her mevsim için bir defa çalıştırılarak, toplamda 4 defa çalıştırılmış olacaktır.
- İşbirliği diyagramlarında dönüş değerlerini de göstermeniz mümkündür. Örneğin; 5: sonuc := işle( ) ifadesi isle( ) metodu neticesinde oluşan sonuc ifadesini geri döndürmektedir.
- Döngüleri ve geri dönüşleri aynı ifade de gösterebilirsiniz. Örneğin 8*[i=Ocak..Aralik]:sonuc := işle(i) ifadesi, 8 nolu mesajın; 12 defa işle( ) yöntemini çağırdığını göstermektedir.
- Giriş ve çıkış argümanları da işbirliği diyagramları üzerinde temsil edilebilir. Örneğin; ModemBaslat(modelId:ModelTipi, out true:YeniModem) ifadesi ile modem oluşturulabiliyorsa doğru (true) bilgisi geri dönüş değeri olarak verilebilmektedir. ModelId parametresi de giriş parametresidir.
- UML içinde özyineleme ifadeleri yazabilmek için, programlama dili sentaksından yararlanabilmeye izin verilmiştir. Ancak; modeli dilden bağımsız tasarlamak, daha etkin modelleme mantığıdır.
- Çok parçacıklı (multi-threaded) sistemlerle çalışıyorsanız; eş zamanlı süreçlere aynı sıra numarası vererek gösterebilirsiniz. Ayırt edici nokta, mesajların ismi olacaktır. Örneğin; 1: thread1, 1: thread2, 1: thread3 seklinde bir gösterim mümkün olabilmektedir.
- Diyagramınızdaki bir bağlantı üzerinde, bazen get() ve set() türünde birçok mesaj göstermeniz gerekebilir. Diyagramın okunurluğunu bozmamak için, bilgiyiAl() ve bilgiyiEkle() gibi mesajlarla birçok mesajı tek bir mesaj olarak ifade edebilirsiniz.
- İşbirliği diyagramı oluştururken; en önemli nesneleri diyagramın ortasına koymanızda yarar vardır. Bu sayede; önemli noktaları daha net gözlemleyebilirsiniz.
- İşbirliği diyagramını çizmeden önce, diyagramı ne amaçla çizdiğinizi saptamanız gerekmektedir. Sıralama diyagramlarında olduğu gibi bir işbirliği diyagramı, çoğu kez bir kullanım senaryosunu (use-case) modellemek için kullanılmaktadır.
- Bir nesne, etkileşim sırasında durum değiştirebilir. Nesnenin yeni örneği oluşturularak; aralarında bir bağlantı çizilir ve <<become>> şeklinde gösterilir. Rational Rose içinde, bir nesnenin durumu gösterilemez. Bazı tasarım araçları bu duruma destek sunmaktadır.
Bu bölüme kadar yapılan açıklamalar, özel semboller UML 1.x içinde yer aldığı şekilde verilmiştir. Birçok tasarım aracı, halen sadece UML 1.x ile diyagram çizebilmeyi desteklerken, bazıları UML 2yi de desteklemeye başlamıştır.
Bu noktada; işbirliği diyagramları yönünden UML 2deki değişimi inceleyebiliriz. UML 2 içinde işbirliği diyagramları; iletişim (communication) diyagramları adını almıştır. Bu diyagramlar; işbirliği diyagramlarına çok benzese de, daha az karmaşıktır ve işbirliği diyagramları kadar güçlü bir mekanizması yoktur. Bazı tasarımcılar; OMG içindeki UML grubuna, kaybolan bu özelliklerin eklenmesi için başvurmuşlar ve gerekli düzenlemelerin yapılmasını istemişlerdir. Yapılan bu değişikliklerin zamanla olgunlaşacağı ve tasarımcıların tercihine göre yön bulacağı beklenmektedir. Ancak; diyagramların temel felsefesinde çok fazla değişiklik bulunmamakta, daha çok gösterim açısından değişimler olmaktadır.
Bunun yanı sıra; UML 2, nesne etkileşimlerinin 4 farklı diyagramla modellenmesini önermektedir (UML 1.x içinde bu amaçla, sıralama ve işbirliği diyagramları kullanılmaktaydı). Bu diyagramlar; sıralama diyagramları, iletişim diyagramları (eski adıyla işbirliği diyagramları), etkileşim tanıtım diyagramları (interaction overview) ve zamanlama (timing) diyagramlarıdır.
İşbirliği diyagramları için daha fazla açıklama yapmak mümkündür. Ancak; UML 2 içindeki birçok özellik çoğu tasarım aracı tarafından şu anda desteklenmemektedir. Bu yazıda belirtilen temel kavramları kullanarak, kullandığınız tasarım aracının yeteneği ölçüsünde, projelerinizdeki nesneler arasındaki mesaj akışını kolaylıkla modellemeniz mümkün olacaktır.
Alia
16 Temmuz 2014 Çarşamba
15 Temmuz 2014 Salı
14 Temmuz 2014 Pazartesi
13 Temmuz 2014 Pazar
UML ile state(durum) diyagramları
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 olantavsiye 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örebu 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.

Kaydol:
Kayıtlar (Atom)