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.
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:
- Bir diyagram = bir use case’in bir senaryosu.
- Lifeline’lar class diagram’daki sınıflardan gelir. Yeni sınıf uydurduysan class diagram’a da ekle.
- Mesaj, alıcının bir operation’ıdır.
checkEligibility()mesajını alan sınıfta bu operation olmalı. - Ok uçlarına dikkat: dolu = senkron, açık = asenkron, kesik = dönüş.
Sequence diyagramının öğeleri
| Öğe | Gösterim | Anlamı |
|---|---|---|
| Actor | Çöp adam, altında lifeline | Etkileşimi başlatan rol |
| Object / lifeline | anOrder : Order kutusu + kesik dikey çizgi | Etkileşime katılan nesne |
| Activation | Lifeline üzerinde dar dikdörtgen | Nesnenin aktif olduğu süre |
| Synchronous message | Düz çizgi, dolu ok | Çağrı, cevap beklenir |
| Asynchronous message | Düz çizgi, açık ok | Gönder ve devam et |
| Return message | Kesik çizgi, açık ok | Dönüş değeri |
| Create message | <<create>> ya da create(), hedef kutu o hizada | Yeni nesne oluşturulur |
| Destroy | Lifeline sonunda X | Nesne yok edilir |
| Guard | [koşul] | Mesaj sadece koşul doğruysa |
| Combined fragment | Çerçeve, sol üstte alt, opt, loop | Kontrol 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
| Fragment | Kod karşılığı | Örnek guard |
|---|---|---|
alt | if / else | [kopya var] / [else] |
opt | if (else yok) | [toplam > 300] |
loop | for / while | [her sepet kalemi için] |
par | paralel | iki bölme aynı anda |
Sequence diyagramı nasıl çizilir?
- Use case’i ve senaryoyu seç (genelde normal flow).
- Katılan aktörü ve nesneleri belirle; soldan sağa, ilk konuşan solda olacak şekilde diz.
- Lifeline’ları çiz. Sonradan oluşan nesneleri oluştukları hizaya koy.
- Description’daki her adımı mesaja çevir, yukarıdan aşağı sırayla.
- Activation kutularını ekle.
- Koşul ve tekrarları fragment’lerle göster.
- Kontrol et: her mesajın alıcısında o operation var mı? Class diagram ile tutarlı mı?
Çözümlü örnek: Reserve Book
- 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.
| No | Gönderen | Alıcı | Mesaj | Tür |
|---|---|---|---|---|
| 1 | aStudent | :ReservationController | searchBook(query) | Senkron |
| 2 | :ReservationController | :Book | getAvailableCopies() | Senkron, dönüş: kopya listesi |
| 3 | :ReservationController | :ReservationController | checkEligibility(student) | Kendine mesaj (self-call) |
| 4 | :ReservationController | :Reservation | create(student, copy) | Create, Reservation burada doğar |
| 5 | :ReservationController | :Copy | setStatus(“On Hold”) | Senkron |
| 6 | :ReservationController | :Reservation | sendConfirmation() | Asenkron (e-posta beklenmez) |
| 7 | :ReservationController | aStudent | showConfirmation(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ı:
| Numara | Anlamı |
|---|---|
| 1, 2, 3 | Sırayla gönderilen üst düzey mesajlar |
| 2.1, 2.2 | 2 numaralı mesajı işlerken gönderilenler (iç içe) |
| 2.1.1 | 2.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çüt | Sequence | Communication |
|---|---|---|
| Vurgu | Zaman sırası | Nesne bağlantıları |
| Okuma | Yukarıdan aşağı | Numaralardan |
| Fragment (alt/opt/loop) | Var | Sınırlı (guard ve * ile) |
| Çok nesneli etkileşim | Genişler, yatay taşar | Daha 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.
| Student | Book | Copy | Reservation | |
|---|---|---|---|---|
| ReservationController | R | R | RU | CE |
| Reservation | R | R |
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üşünce | Doğrusu |
|---|---|
| Bütün sistemi tek sequence’a koymak | Bir use case, bir senaryo |
| Lifeline’a class diagram’da olmayan sınıf koyup bırakmak | Yeni sınıfı class diagram’a da ekle |
| Senkron ve asenkron ok aynı | Dolu ok senkron, açık ok asenkron |
| Return düz çizgi | Return kesik çizgi |
| if/else için opt | if/else için alt; opt tek koşul, else yok |
| Communication diyagramında sıra yok | Sıra numaralarla gösterilir |
| 2.1, 3’ten sonra gelir | 2.1, 2’nin içindedir; 3’ten önce biter |
| Oluşan nesneyi en üste çizmek | Create mesajının hizasında başlar |
Kendini test et
Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.
What does a sequence diagram emphasize compared to a communication diagram?
- The time order of messages
- The structure of links between objects
- The states of one object
- The attributes of classes
Cevabı göster
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.
In a sequence diagram, what is the thin rectangle drawn on a lifeline?
Cevabı göster
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.
Which arrow represents a synchronous message?
- Solid line with a filled arrowhead
- Solid line with an open arrowhead
- Dashed line with an open arrowhead
- Line with a hollow triangle
Cevabı göster
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.
Which combined fragment shows that a group of messages happens only if a condition is true, with no else branch?
- alt
- opt
- loop
- par
Cevabı göster
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.
How many messages (excluding return messages) are in the Reserve Book sequence diagram on this page?
Cevabı göster
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.
How many lifelines are in the same diagram?
Cevabı göster
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.
In a communication diagram, a message is numbered 2.1. What does that mean?
Cevabı göster
İç 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.
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
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ı.
What does an X at the bottom of a lifeline mean?
Cevabı göster
Lifeline'ın sonundaki büyük X, nesnenin yok edildiğini (destroy) gösterir. Örnek: süresi dolan geçici bir Reservation nesnesi.
In the CRUDE matrix, what does each letter stand for?
Cevabı göster
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.
A sequence diagram is usually drawn for what scope?
- The whole system at once
- One scenario of one use case
- One class only
- The physical network
Cevabı göster
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ı.