UML Etkileşim Diyagramları
Transkript
UML Etkileşim Diyagramları
Yazılım Modelleme ve Tasarımı Yazılım Modelleme ve Tasarımı UML Etkileşim Diyagramları (Interaction Diagrams) Tasarım yöntemlerini incelemeden önce tasarımı ifade etmek için kullanılacak olan UML etkileşim diyagramları incelenecektir. UML'de iki tür etkileşim diyagramı vardır: b) Ardışıl Diyagramlar (Sequence Diagrams): Nesneler yan yana gösterilir. Etkileşimler (mesajlar) oluştukları sıra ile yukarıdan aşağıya doğru çizilirler. a) İletişim Diyagramları (Communication Diagrams) UML 1.x’te: İşbirliği Diyagramları (Collaboration Diagrams) Nesneler arası etkileşim bir graf şeklinde gösterilir. sd Ornek :A cd Ornek Diyagram message1() Diyagramın adı UML 2.0 message2() :A A’dan yaratılan herhangi bir nesne message3() 1: message2() 2: message3() B’den yaratılan adı nb olan nesne Her yeni nesne çizimin sağına eklenir. - Fazla yer kaplar. + Mesajların zaman içinde sıralarını anlamak daha kolaydır. nb : B + Az yer kaplar. + Mesajların dallanmalarını göstermek kolaydır. - Mesajların sıralarını anlamak zordur. www.akademi.itu.edu.tr/buzluca www.buzluca.info ©2002 - 2012 Dr. Feza BUZLUCA 4ek.1 Yazılım Modelleme ve Tasarımı www.akademi.itu.edu.tr/buzluca www.buzluca.info ©2002 - 2012 Dr. Feza BUZLUCA 4ek.2 Yazılım Modelleme ve Tasarımı İletişim (Communication) Diyagramları Mesaj Sıra Numaraları: Mesajlar gönderildikleri sıraya göre numaralanırlar. İlk mesaja numara verilmez. Bir mesajın neden olduğu diğer mesajlara da sebep mesajın numarasına bağlı alt numaralar verilir. Aşağıdaki örnekte, ClassA'nın bir nesnesi ClassB'nin bir nesnesine msg2 mesajını yolladığında ClassB'nin nesnesi de ClassC'nin nesnesine msg3 mesajını gönderecektir. msg3 sonlandığında tekrar msg2'ye dönülecektir. Örnek: Mesajın yönü makePayment(cashTendered) İlk iç mesaj : Register 1: makePayment(cashTendered) Bağlantı Sisteme ilk mesaj nb : B message1() :Sale 1.1: create(cashTendered) Birinci :Payment parametre Nesne msg1() 1: msg2() :ClassA class Sale{ // C++ private: Payment * payment; public: void makePayment(const Money& cashTendered){ // Sale makePayment metodu payment = new Payment(cashTendered); // Payment sınıfından nesne yaratılıyor // Diğer işlemler ... } // Diğer üyeler ... }; www.akademi.itu.edu.tr/buzluca www.buzluca.info İkinci A Nesne yaratılıyor Kurucu (constructor ) çalışır ©2002 - 2012 Dr. Feza BUZLUCA 4ek.3 Yazılım Modelleme ve Tasarımı Üçüncü :ClassB B C msg2() msg3() 1.1: msg3() 1: 1.1: 2.1: msg5() 2: msg4() :ClassC msg4() Beşinci 2: msg5() 2.2: msg6() Dördüncü D msg1() 2.1: msg6() 2.2: :ClassD Altıncı www.akademi.itu.edu.tr/buzluca www.buzluca.info ©2002 - 2012 Dr. Feza BUZLUCA 4ek.4 Yazılım Modelleme ve Tasarımı Koşullu Mesajlar: Bu tür mesajlar sadece belli bir koşul gerçekleştiğinde gönderilebilirler. Kendine mesaj: Nesneler kendilerine de mesaj gönderebilirler. msg1() Nesne yaratma: Bir mesaj nesne yaratılmasını sağlamak için gönderiliyorsa normal olarak bu mesaja create adı verilir ve bir kurucu (constructor) çağrısı olarak yorumlanır. Eğer başka bir isim verilirse <<create>> tanımlayıcısı kullanılır. : Register 1: create(cashier) :Sale {new} :Register : Register «create» 1: make(cashier) Koşullu mesaj message1() 1 [ color = red ] : calculate() : Foo Koşulsuz olarak msg2 ya da msg4'ten sonra :Sale {new} : Bar Karşılıklı Dışlamalı Mesajlar: Nesneler arası etkileşim belli bir koşula bağlı olarak farklı yollar izleyebilir. Aşağıdaki örnekte "test" koşuluna bağlı olarak a ya da b yollarından biri izlenecektir. :ClassE 1a ve 1b karşılıklı dışlamalı iki koşullu yoldur 2: msg6() 1: clear() msg1() :ClassA 1a [test] : msg2() 1b [not test] : msg4() :ClassD www.akademi.itu.edu.tr/buzluca www.buzluca.info ©2002 - 2012 Dr. Feza BUZLUCA 4ek.5 www.akademi.itu.edu.tr/buzluca www.buzluca.info 1b.1: msg5() :ClassB 1a.1: msg3() :ClassC ©2002 - 2012 Dr. Feza BUZLUCA 4ek.6 1 Yazılım Modelleme ve Tasarımı Yazılım Modelleme ve Tasarımı Döngüler (İterasyonlar): Ardışıl Diyagramlar Örnek: Iterasyon * ile belirtilir. İstenirse döngü koşulu da yazılır. : Register runSimulation () : Simulator Nesne : Sale makePayment(cashTendered) 1 * [i:=1..N ] : num := nextInt() makePayment(cashTendered) :Random create(cashTendered) : Payment Çoklu Nesneler (Multiobject): Bazı durumlarda bir çok nesneden oluşan yapılara (list, map, set) aynı mesajın gönderilmesi gerekir. Bu tür yapılara çoklu nesne (multiobject) denir. Bu nesne grupları iki dörtgen (UML 1.X) şeklinde gösterilir. Aynı mesaj gruptaki tüm nesnelere gönderiliyor UML 1.X’te çoklu nesneler t := getTotal () 1 *: st := getSubtotal() : Sale :SalesLineItem * UML 2.0’da çoklu nesneler t := getTotal () lineItems[i]: SalesLineItem 1 *: st := getSubtotal() : Sale www.akademi.itu.edu.tr/buzluca www.buzluca.info ©2002 - 2012 Dr. Feza BUZLUCA 4ek.7 Yazılım Modelleme ve Tasarımı : Register : Sale msg1() a:=msg2() msg3() retValue msg4() msg5() www.akademi.itu.edu.tr/buzluca www.buzluca.info ©2002 - 2012 Dr. Feza BUZLUCA 4ek.8 Yazılım Modelleme ve Tasarımı Kendine mesaj: Karşılıklı Dışlamalı Mesajlar (UML 1.X): Nesne Yaratma / Yok Etme: :Register msg1() Geri Dönüşler: Metotlardan geri dönüşleri göstermek çoğunlukla gerekli değildir. Gerekli olduğu durumlarda geri dönüşler kesik çizgi ile gösterilir. Çağırılan metodun geri döndürdüğü değer istenirse mesajın başına yazılır istenirse geri dönüş çizgisinin üstüne yazılır. Kurucu (Constructor) :Sale clear() :A :B msg1() create(cachTendered) :C [x<10] calculate() :Payment [x>=10] calculate() .... <<destroy>> Koşullu Mesajlar: X Destructor sd koşullu :Foo Koşul olduğunu belirten Anahtar sözcük msg1() Yeni Format (UML 2.x): sd if-then-else :Bar :A msg x alt [ color = red ] calculate() opt :B :C msg1() [ x < 10 ] calculate() msg y [ else ] calculate() www.akademi.itu.edu.tr/buzluca www.buzluca.info ©2002 - 2012 Dr. Feza BUZLUCA 4ek.9 Yazılım Modelleme ve Tasarımı www.akademi.itu.edu.tr/buzluca www.buzluca.info ©2002 - 2012 Dr. Feza BUZLUCA 4ek.10 Yazılım Modelleme ve Tasarımı Nesne gruplarına (Multiobject) mesajlar: İterasyonlar (Döngüler): UML 1.X: :Sale :SalesLineItem t := getTotal() * st := getSubtotal() :Simulator :Random :Programmer runSimulation() loop [i:=1..N] Dizinin i.elemanı UML 2.0: hours := nextInt() Dizinin i.elemanı work(hours) :Sale eat() lineItems[i] :SalesLineItem t := getTotal() loop :Sale lineItems[i] :SalesLineItem t := getTotal() st := getSubtotal() loop [i<lineItemSize] st := getSubtotal() i++ www.akademi.itu.edu.tr/buzluca www.buzluca.info ©2002 - 2012 Dr. Feza BUZLUCA 4ek.11 www.akademi.itu.edu.tr/buzluca www.buzluca.info ©2002 - 2012 Dr. Feza BUZLUCA 4ek.12 2 Yazılım Modelleme ve Tasarımı Diyagramlar arası etkileşim (Interaction) (UML 2.x): Altprogram çağırmak gibidir. Çok tekrarlanan işlemler için kullanılır. sd etkilesim :A :B :C msg1() msg1() ref Tekrar msg2() sd Tekrar :B :C msg x() msg y() msg z() www.akademi.itu.edu.tr/buzluca www.buzluca.info ©2002 - 2012 Dr. Feza BUZLUCA 4ek.13 3
Benzer belgeler
Tasarım Modelinin (Design Model) Oluşturulması
Bu aşamada, nesneye dayalı yönteme göre problemin mantıksal çözümü oluşturulur.
Tasarım modelinde yazılım sınıfları ve aralarındaki işbirliği (etkileşim) belirlenir.
Bu model iki tip UML diyagramı ...
8.GoF Kalıpları
Aşağıdaki örnekte, ClassA'nın bir nesnesi ClassB'nin bir nesnesine msg2 mesajını
yolladığında ClassB'nin nesnesi de ClassC'nin nesnesine msg3 mesajını
gönderecektir. msg3 sonlandığında tekrar msg2'...