SEN2022 · 10. hafta · Behavioral Modeling

Davranışsal modelleme 1: sequence ve communication diyagramları

Nesnelerin bir use case'i gerçekleştirmek için zaman sırasıyla mesajlaşması: lifeline, activation, mesaj türleri, alt/opt/loop çerçeveleri ve aynı bilginin communication diyagramı. Sınavda bir senaryo için sequence diyagramı çizmen istenir.

behavioral modelinteraction diagramsequence diagramlifelineactivation (execution occurrence)synchronous messageasynchronous messagereturn messagecreate messagedestroycombined fragmentaltoptloopguard conditioncommunication diagramlinksequence numberCRUDE matrix

Fonksiyonel model (use case) sistemin ne yaptığını, yapısal model (class diagram) hangi nesnelerle yaptığını söyledi. Davranışsal model (behavioral model) bu nesnelerin zaman içinde nasıl birlikte çalıştığını gösterir. Üç diyagram var: etkileşim diyagramları (sequence ve communication), davranışsal durum makineleri (state machine) ve bunlara sık eşlik eden activity diyagramı. Bu sayfa etkileşim diyagramlarını anlatır; ikinci sayfa state machine ve activity diyagramını.

Sınav sorusu çoğunlukla: “Draw a sequence diagram for the normal flow of use case X.” Use case description’ı adım adım okuyup her adımı bir ya da birkaç mesaja çevirirsin.

Altın kurallar:

  1. Bir diyagram = bir use case’in bir senaryosu.
  2. Lifeline’lar class diagram’daki sınıflardan gelir. Yeni sınıf uydurduysan class diagram’a da ekle.
  3. Mesaj, alıcının bir operation’ıdır. checkEligibility() mesajını alan sınıfta bu operation olmalı.
  4. Ok uçlarına dikkat: dolu = senkron, açık = asenkron, kesik = dönüş.

Sequence diyagramının öğeleri

ÖğeGösterimAnlamı
ActorÇöp adam, altında lifelineEtkileşimi başlatan rol
Object / lifelineanOrder : Order kutusu + kesik dikey çizgiEtkileşime katılan nesne
ActivationLifeline üzerinde dar dikdörtgenNesnenin aktif olduğu süre
Synchronous messageDüz çizgi, dolu okÇağrı, cevap beklenir
Asynchronous messageDüz çizgi, açık okGönder ve devam et
Return messageKesik çizgi, açık okDönüş değeri
Create message<<create>> ya da create(), hedef kutu o hizadaYeni nesne oluşturulur
DestroyLifeline sonunda XNesne yok edilir
Guard[koşul]Mesaj sadece koşul doğruysa
Combined fragmentÇerçeve, sol üstte alt, opt, loopKontrol yapısı

Nesne adı yazılışı: aStudent : Student (belirli nesne), : Copy (o sınıfın isimsiz bir nesnesi). Analizde genelde isimsiz nesne kullanılır.

Combined fragments

FragmentKod karşılığıÖrnek guard
altif / else[kopya var] / [else]
optif (else yok)[toplam > 300]
loopfor / while[her sepet kalemi için]
parparaleliki bölme aynı anda

Sequence diyagramı nasıl çizilir?

  1. Use case’i ve senaryoyu seç (genelde normal flow).
  2. Katılan aktörü ve nesneleri belirle; soldan sağa, ilk konuşan solda olacak şekilde diz.
  3. Lifeline’ları çiz. Sonradan oluşan nesneleri oluştukları hizaya koy.
  4. Description’daki her adımı mesaja çevir, yukarıdan aşağı sırayla.
  5. Activation kutularını ekle.
  6. Koşul ve tekrarları fragment’lerle göster.
  7. Kontrol et: her mesajın alıcısında o operation var mı? Class diagram ile tutarlı mı?

Çözümlü örnek: Reserve Book

  1. haftadaki fully dressed description’ın normal flow’u. Analizde araya bir kontrol nesnesi (ReservationController) koymak akışı düzenler: aktör bu nesneyle konuşur, o da diğer nesneleri yönetir.
S = aStudent   C = :ReservationController
B = :Book      K = :Copy
R = :Reservation (4. mesajla doğar)

 S        C        B        K
 |        |        |        |
 |--1---->|        |        |
 |        |--2---->|        |
 |        |<- 2r- -|        |
 |        |--3--+  |        |
 |        |<----+  |        |
 |        |--4 create------------>[ R ]
 |        |--5------------->|       |
 |        |--6 (async)------------->|
 |<--7----|        |        |       |
 |        |        |        |       |

Numaralar aşağıdaki tablodaki mesajlardır; 2r, 2. mesajın dönüşüdür (kopya listesi). 3. mesaj C’nin kendine gönderdiği mesajdır (self-call). R kutusu en üstte değil, 4. mesajın hizasında başlar. Sınavda bu tablo ile çizim birbirini tamamlar.

NoGönderenAlıcıMesajTür
1aStudent:ReservationControllersearchBook(query)Senkron
2:ReservationController:BookgetAvailableCopies()Senkron, dönüş: kopya listesi
3:ReservationController:ReservationControllercheckEligibility(student)Kendine mesaj (self-call)
4:ReservationController:Reservationcreate(student, copy)Create, Reservation burada doğar
5:ReservationController:CopysetStatus(“On Hold”)Senkron
6:ReservationController:ReservationsendConfirmation()Asenkron (e-posta beklenmez)
7:ReservationControlleraStudentshowConfirmation(code)Senkron cevap gösterimi

Sayım: 5 lifeline (aStudent, :ReservationController, :Book, :Copy, :Reservation), 7 mesaj (dönüşler hariç).

Alternate flow’u eklemek: alt fragment

3a (“müsait kopya yok”) eklenirse 2. mesajdan sonra bir alt çerçevesi gelir:

+-alt-----------------------------------+
| [copy list boş değil]                 |
|   3 checkEligibility ... 7 showConf.  |
|- - - - - - - - - - - - - - - - - - - -|
| [else]                                |
|   3' offerWaitingList()               |
+---------------------------------------+

TUZAK · return’ü her mesaja zorla eklemek. Dönüş mesajı sadece anlamlı bir değer döndüğünde çizilir (kopya listesi, rezervasyon kodu). Her senkron çağrıya kesik ok koymak diyagramı kalabalıklaştırır ama yanlış değildir; asıl hata senkron ile asenkronu karıştırmaktır.

Communication diyagramı

Aynı etkileşim, nesneler arasındaki link’ler üzerinde gösterilir. Zaman ekseni yoktur; sıra numaralarla okunur. Kimin kimle konuştuğunu (yapıyı) bir bakışta gösterir.

               :Book
                 |  2: getAvailableCopies()
                 |
 aStudent ------ C ------ :Copy
 1: searchBook(q)|  5: setStatus("On Hold")
 7: showConf()   |
                 |  4: create()
                 |  6: sendConfirmation()
            :Reservation

 C = :ReservationController
 C üzerinde kendine link: 3: checkEligibility()

Numaralandırma kuralları:

NumaraAnlamı
1, 2, 3Sırayla gönderilen üst düzey mesajlar
2.1, 2.22 numaralı mesajı işlerken gönderilenler (iç içe)
2.1.12.1’in içinde gönderilen
*[i=1..n]Tekrar (iteration)
[koşul]Guard

Örnek: :Book, getAvailableCopies() mesajını işlerken her kopyaya durumunu sorsaydı bu mesajlar 2.1 *[her kopya]: getStatus() olarak yazılırdı.

Sequence mi communication mı?

ÖlçütSequenceCommunication
VurguZaman sırasıNesne bağlantıları
OkumaYukarıdan aşağıNumaralardan
Fragment (alt/opt/loop)VarSınırlı (guard ve * ile)
Çok nesneli etkileşimGenişler, yatay taşarDaha kompakt

İki diyagram aynı bilgiyi taşır; bazı araçlar birinden diğerini otomatik üretir.

CRUDE matrisi

Sequence diyagramlarından sonra sınıfların birbirleriyle nasıl etkileştiğini özetleyen bir tablo kurulabilir.

StudentBookCopyReservation
ReservationControllerRRRUCE
ReservationRR

Hücre okuma: ReservationController, Reservation nesnesini Create eder ve onun bir operation’ını Execute eder (sendConfirmation). Copy’yi okur ve günceller (R, U). Bir sınıf diğerine hiç mesaj göndermiyorsa ama class diagram’da aralarında ilişki varsa, ilişkinin gerekliliğini sorgula (11. hafta).

Sık yapılan hatalar

Yanlış düşünceDoğrusu
Bütün sistemi tek sequence’a koymakBir use case, bir senaryo
Lifeline’a class diagram’da olmayan sınıf koyup bırakmakYeni sınıfı class diagram’a da ekle
Senkron ve asenkron ok aynıDolu ok senkron, açık ok asenkron
Return düz çizgiReturn kesik çizgi
if/else için optif/else için alt; opt tek koşul, else yok
Communication diyagramında sıra yokSıra numaralarla gösterilir
2.1, 3’ten sonra gelir2.1, 2’nin içindedir; 3’ten önce biter
Oluşan nesneyi en üste çizmekCreate mesajının hizasında başlar

Kendini test et

Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.

Soru 1kolay

What does a sequence diagram emphasize compared to a communication diagram?

  1. The time order of messages
  2. The structure of links between objects
  3. The states of one object
  4. The attributes of classes
Cevabı göster
A) The time order of messages

Sequence diyagramı zamanı dikey eksende gösterir: yukarıdan aşağı mesaj sırası. Communication diyagramı aynı mesajları nesneler arasındaki bağlantılar (link) üzerinde numarayla gösterir; yapıyı vurgular, sıra numaradan okunur.

Soru 2kolay

In a sequence diagram, what is the thin rectangle drawn on a lifeline?

Cevabı göster
An activation (execution occurrence): the period when the object is performing an operation.

Lifeline nesnenin varlığını gösteren kesik dikey çizgidir. Üzerindeki dar dikdörtgen activation'dır: nesne o süre boyunca bir iş yapıyor ya da çağırdığı işin dönmesini bekliyor.

Soru 3orta

Which arrow represents a synchronous message?

  1. Solid line with a filled arrowhead
  2. Solid line with an open arrowhead
  3. Dashed line with an open arrowhead
  4. Line with a hollow triangle
Cevabı göster
A) Solid line with a filled arrowhead

Senkron mesaj: düz çizgi, dolu ok ucu; gönderen cevabı bekler. Asenkron: düz çizgi, açık (çizgi) ok ucu; gönderen beklemez. Dönüş (return): kesik çizgi, açık ok ucu. Boş üçgen generalization'dır, sequence'ta kullanılmaz.

Soru 4kolay

Which combined fragment shows that a group of messages happens only if a condition is true, with no else branch?

  1. alt
  2. opt
  3. loop
  4. par
Cevabı göster
B) opt

opt: tek bölmeli, koşul doğruysa çalışır. alt: if/else, birden çok bölme ve her birinin guard'ı. loop: tekrar. par: paralel bölmeler.

Soru 5orta

How many messages (excluding return messages) are in the Reserve Book sequence diagram on this page?

Cevabı göster
7

1 searchBook, 2 getAvailableCopies, 3 checkEligibility, 4 create (Reservation), 5 setStatus, 6 sendConfirmation, 7 showConfirmation. Dönüşler (kesik oklar) ayrıca sayılmadı. Toplam 7 mesaj.

Soru 6kolay

How many lifelines are in the same diagram?

Cevabı göster
5

aStudent (aktör), :ReservationController, :Book, :Copy, :Reservation. Reservation diyagramın ortasında create mesajıyla oluştuğu için kutusu aşağıda başlar ama yine bir lifeline'dır.

Soru 7orta

In a communication diagram, a message is numbered 2.1. What does that mean?

Cevabı göster
It is the first message sent while handling message 2 (nested inside message 2).

İç içe numaralandırma çağrı yapısını gösterir: 2 numaralı mesajı alan nesne, işini yaparken 2.1 ve 2.2'yi gönderir. 3 ise 2 tamamen bittikten sonra gelir.

Soru 8zor

Food-delivery: 'The customer submits an order. The OrderController creates an Order. For each item in the cart, the Order creates an OrderLine. If the total is over 300 TL, a free-delivery flag is set.' Which fragments do you need?

Cevabı göster
loop (for each item) around OrderLine creation, and opt [total > 300] around setting the free-delivery flag.

Tekrar eden mesaj loop çerçevesine girer (guard: [for each item]). Koşullu ve else'i olmayan mesaj opt çerçevesine girer (guard: [total > 300]). else olsaydı alt kullanılırdı.

Soru 9kolay

What does an X at the bottom of a lifeline mean?

Cevabı göster
The object is destroyed at that point.

Lifeline'ın sonundaki büyük X, nesnenin yok edildiğini (destroy) gösterir. Örnek: süresi dolan geçici bir Reservation nesnesi.

Soru 10orta

In the CRUDE matrix, what does each letter stand for?

Cevabı göster
Create, Read, Update, Delete, Execute

CRUDE matrisi satırda ve sütunda sınıfların olduğu bir tablodur. Hücre, satırdaki sınıfın sütundaki sınıfla nasıl etkileştiğini gösterir: Create, Read, Update, Delete, Execute. Sequence diyagramlarındaki mesajlardan doldurulur ve sınıflar arası ilişkileri doğrulamaya yarar.

Soru 11kolay

A sequence diagram is usually drawn for what scope?

  1. The whole system at once
  2. One scenario of one use case
  3. One class only
  4. The physical network
Cevabı göster
B) One scenario of one use case

Sequence diyagramı genelde bir use case'in bir senaryosu (çoğunlukla normal flow) için çizilir. Önemli alternate flow'lar için ayrı diyagram ya da alt çerçevesi eklenir. Bütün sistemi tek diyagrama koymak okunmaz hale getirir.

Doğrulama: Kavramsal ve çizim/sayım soruları UML 2 etkileşim diyagramı kurallarına (senkron mesaj dolu ok ucu, asenkron açık ok ucu, dönüş kesik çizgi; alt/opt/loop çerçeveleri; communication diyagramında iç içe numaralandırma 1, 1.1, 1.2) göre kontrol edildi. Sayfadaki diyagramlarda mesaj ve lifeline sayıları elle sayıldı ve iki kez karşılaştırıldı.

Deftere not kartı

Davranışsal model: nesneler zaman içinde NASIL birlikte çalışır Sequence: zaman yukarıdan aşağı, sıra vurgusu Lifeline: nesne kutusu + kesik dikey çizgi; aktör çöp adam Activation: lifeline üstünde dar kutu (nesne iş yapıyor) Senkron: düz çizgi + DOLU ok; Asenkron: düz + AÇIK ok Return: KESİK çizgi + açık ok create: oluşan nesnenin kutusu mesaj hizasında başlar; X = destroy Fragment: alt (if/else), opt (if), loop (tekrar), par (paralel) Guard: [koşul] köşeli parantezde Communication: aynı bilgi, link üzerinde numaralı mesaj Numaralama: 1, 1.1, 1.2, 2 → iç içe çağrı CRUDE matrisi: Create Read Update Delete Execute Kapsam: bir use case, bir senaryo