Davranışsal modelleme 2: state machine ve activity diyagramları
Bir nesnenin yaşam boyu durumları (state, event, guard, action) ve bir sürecin akışı (action, decision, merge, fork, join, swimlane). Sınavda 'draw the state machine for X' ya da 'activity diagram with swimlanes' gelir.
İlk sayfada nesnelerin birbirleriyle nasıl mesajlaştığını gördün. Bu sayfada iki farklı bakış var. State machine diagram tek bir nesnenin yaşamı boyunca geçtiği durumları gösterir: bir kitap kopyası rafta, ayrılmış, ödünçte, gecikmiş, kayıp. Activity diagram bir sürecin adımlarını, kararlarını ve paralel işlerini gösterir: bir yemek siparişinin müşteriden mutfağa, mutfaktan kuryeye akışı. Sınavda ikisi de “çiz” sorusu olarak gelir; puan detaylardan gelir: geçiş etiketi kalıbı, fork ile decision farkı, swimlane.
Altın kurallar:
- State machine bir nesne içindir, activity diagram bir süreç içindir.
- Geçiş etiketi: event [guard] / action. Üçü de opsiyonel ama sıra sabit.
- Elmas = bir yol seç (decision/merge). Kalın çubuk = hepsi paralel (fork/join).
- Swimlane = sorumluluk. Her aksiyon doğru şeritte olmalı.
State machine diyagramı
Öğeler
| Öğe | Gösterim | Anlamı |
|---|---|---|
| State | Yuvarlatılmış dikdörtgen | Nesnenin bir koşulu, belirli bir süre kalır |
| Initial state | Dolu küçük daire | Başlangıç noktası |
| Final state | Halka içinde dolu daire | Nesnenin yaşamının sonu |
| Transition | Ok | Bir durumdan diğerine geçiş |
| Event | Okun üstünde | Geçişi tetikleyen olay |
| Guard | [koşul] | Doğruysa geçiş olur |
| Action | / işlem() | Geçiş sırasında anlık iş |
| Activity | Durum içinde do / ... | Durumdayken süren iş |
Durum içine üç tür satır yazılabilir: entry / ... (girişte), do / ... (durumdayken), exit / ... (çıkışta).
Event türleri: call event (bir operation çağrısı: pickUp()), time event (after 48h), change event (when dueDate < today), signal event (dış sinyal).
Çözümlü örnek: Copy (kitap kopyası)
Senaryo: “Yeni kopya kataloğa eklenince müsaittir. Bir öğrenci rezerve ederse 48 saat ayrılır; öğrenci gelip alırsa ödünç verilir, gelmezse tekrar müsait olur. Müsait bir kopya doğrudan da ödünç verilebilir. İade tarihi geçerse kopya gecikmiş sayılır. İade edilince müsait olur; gecikmişse iade sırasında ceza kesilir. 30 gün gecikmiş kopya kayıp sayılır ve katalogdan düşülür.”
Adım 1: Durumlar. Available, On Hold, On Loan, Overdue, Lost.
Adım 2: Geçişler.
| Kaynak | Event [guard] / action | Hedef |
|---|---|---|
| ● | addToCatalog | Available |
| Available | reserve / startHoldTimer() | On Hold |
| Available | checkOut / setDueDate() | On Loan |
| On Hold | pickUp / setDueDate() | On Loan |
| On Hold | after 48h (holdExpired) | Available |
| On Loan | return | Available |
| On Loan | when today > dueDate | Overdue |
| Overdue | return / chargeFine() | Available |
| Overdue | after 30 days / markLost() | Lost |
| Lost | removeFromCatalog | ◉ |
Adım 3: Çizim.
●
| addToCatalog
v
+-----------+ reserve / +---------+
| Available | startHoldTimer() | On Hold |
| |------------------->| |
| |<-------------------| |
+-----------+ after 48h +---------+
^ ^ | |
| | | checkOut / | pickUp /
| | | setDueDate() | setDueDate()
| | v v
| | +---------+<-----------------+
| +-| On Loan |
| +---------+
| return | when today > dueDate
| v
| +---------+ after 30 days +------+
+----| Overdue |---------------->| Lost |
return/+---------+ / markLost() +------+
chargeFine() |
removeFromCatalog v ◉
Sayım: 5 durum, 10 geçiş (başlangıç ve bitiş okları dahil).
TUZAK · durumu aksiyonla karıştırmak. “Ceza kes” bir durum değildir, bir action’dır (geçişte
/ chargeFine()). Durum, nesnenin bir süre kaldığı koşuldur ve genelde sıfat ya da hal bildirir: Available, Overdue.
Activity diyagramı
Activity diagram bir iş sürecini ya da bir use case’in akışını gösterir. Akış şemasına benzer ama paralellik (fork/join) ve sorumluluk (swimlane) ekler. Ders kitabının çerçevesinde fonksiyonel modellemenin de parçasıdır; use case’lerin içini görselleştirmek için kullanılır.
Öğeler
| Öğe | Gösterim | Anlamı |
|---|---|---|
| Action | Yuvarlatılmış dikdörtgen | Tek adım (“Place Order”) |
| Activity | Yuvarlatılmış dikdörtgen, alt akışı var | Birden çok adımdan oluşan iş |
| Control flow | Düz ok | Sıra |
| Object node | Dikdörtgen | Akan nesne: Order [paid] |
| Object flow | Ok (nesneye/nesneden) | Verinin akışı |
| Initial node | Dolu daire | Başlangıç |
| Activity final | Halka içinde dolu daire | Bütün akışı bitirir |
| Flow final | Daire içinde X | Sadece o dalı bitirir |
| Decision | Elmas, çıkışlarda [guard] | Bir yol seç |
| Merge | Elmas, birden çok giriş | Alternatif yolları birleştir |
| Fork | Kalın çubuk, bir giriş çok çıkış | Paralel başlat |
| Join | Kalın çubuk, çok giriş bir çıkış | Hepsini bekle |
| Swimlane | Şerit | Sorumlu rol |
Çözümlü örnek: yemek siparişi (swimlane’li)
Senaryo: “Müşteri sipariş verir ve öder. Ödeme reddedilirse başka kart dener. Restoran siparişi değerlendirir; reddederse müşteriye bildirilir ve süreç biter. Onaylarsa yemek hazırlanırken aynı anda bir kurye atanır. İkisi de bitince kurye siparişi alır, teslim eder; müşteri teslimatı onaylar.”
Customer | Restaurant | Courier
---------------+----------------+-------------
● | |
| | |
[Place Order] | |
| | |
[Pay]<----+ | |
| | | |
<dec>-----+ | |
| [declined] | |
| [paid] | |
+------------>[Review Order] |
| | |
[Get notice]<-+--<dec> |
| [rejected] | | [accepted] |
◉ | | |
| ==+== (fork) |
| | | |
|[Prepare]+----->[Assign
| Food] | | Courier]
| | | | |
| ======= (join)<---+
| | |
| +---------->[Pick Up]
| | |
| [Deliver]
[Confirm | | |
Receipt]<----+----------------+--+
| | |
◉ | |
Okuma:
- 3 swimlane: Customer, Restaurant, Courier.
- 2 decision: ödeme sonucu ([paid] / [declined]) ve restoran kararı ([accepted] / [rejected]).
- 1 fork, 1 join: Prepare Food ile Assign Courier paralel; Pick Up ikisinin bitmesini bekler.
- 2 activity final: reddedilen sipariş ve normal bitiş.
İPUCU · decision sonrası merge. Decision ile ayrılan yollar tekrar birleşecekse bir merge elması kullan. Ödeme döngüsünde reddedilen yol tekrar “Pay”e döner; bu dönüş Pay’den önce bir merge ile çizilirse daha düzgün olur.
TUZAK · fork yerine decision. “Yemek hazırlanırken aynı anda kurye atanır” cümlesindeki “aynı anda” fork demektir. Decision kullanırsan ikisinden sadece biri olur.
Hangi diyagram ne zaman?
| Soru | Diyagram |
|---|---|
| Hangi nesneler hangi sırayla mesajlaşıyor? | Sequence |
| Hangi nesneler birbirine bağlı, kim kiminle konuşuyor? | Communication |
| Bir nesne yaşamı boyunca hangi durumlardan geçiyor? | State machine |
| Bir süreç hangi adımlardan, kararlardan, paralel işlerden oluşuyor; kim yapıyor? | Activity (swimlane’li) |
Sık yapılan hatalar
| Yanlış düşünce | Doğrusu |
|---|---|
| State machine bir süreç içindir | Bir nesnenin yaşam döngüsü içindir |
| Etiket sırası action [guard] event | event [guard] / action |
| Her sınıfa state machine | Sadece karmaşık yaşam döngüsü olanlara |
| Durum adı fiil (“Ödünç ver”) | Durum hal bildirir (“On Loan”); fiil event ya da action olur |
| Fork = decision | Fork paralel başlatır, decision birini seçer |
| Merge bütün dalları bekler | Join bekler; merge beklemez |
| Swimlane’siz sorumluluk göstermek | Kim yaptığını göstermek için swimlane |
| Activity final ile flow final aynı | Activity final her şeyi bitirir, flow final tek dalı |
Kendini test et
Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.
On a state machine transition labeled returnBook [daysLate > 0] / chargeFine(), identify the event, guard and action.
Cevabı göster
Geçiş etiketi kalıbı: event [guard] / action. Event geçişi tetikler, guard doğruysa geçiş olur, action geçiş sırasında yapılan anlık iştir.
Which kind of class deserves a state machine diagram?
- Every class
- A class whose objects go through clearly different states with different behavior
- Only abstract classes
- Only controller classes
Cevabı göster
State machine sadece karmaşık yaşam döngüsü olan sınıflar için çizilir: Order, Copy, Reservation, Membership gibi. Durumuna göre farklı davranan (örneğin "On Loan" iken ödünç verilemeyen) nesneler adaydır. Address gibi sınıflara gerek yoktur.
In the Copy state machine on this page, how many states (excluding initial and final pseudo-states) are there?
Cevabı göster
Available, On Hold, On Loan, Overdue, Lost. Başlangıç noktası (dolu daire) ve bitiş (halkalı daire) durum sayılmaz. Toplam 5 durum.
In the same Copy state machine, which event moves a copy from On Hold back to Available without a loan?
Cevabı göster
Rezervasyon süresi dolunca (temporal event, 'after 48h') kopya tekrar Available olur. Öğrenci gelip alırsa (pickUp) On Loan olur.
Food-delivery Order: states Placed, Accepted, Preparing, OutForDelivery, Delivered, Cancelled. The customer may cancel only before the restaurant starts preparing. From which states is there a 'cancel' transition?
Cevabı göster
Hazırlama başladıktan sonra (Preparing ve sonrası) iptal yok. Placed ve Accepted durumlarından 'cancel' olayıyla Cancelled durumuna geçiş çizilir. İstersen bunu Placed ve Accepted'ı içeren bir composite state ('Cancellable') ile tek okla da gösterebilirsin.
In an activity diagram, what is the difference between a decision node and a fork node?
Cevabı göster
Decision: elmas, çıkan oklarda [guard], sadece biri seçilir; merge ile birleşir. Fork: kalın çubuk, bütün dallar aynı anda başlar; join ile hepsinin bitmesi beklenir.
Which node waits until ALL incoming parallel flows have finished?
- Merge
- Join
- Decision
- Final
Cevabı göster
Join (kalın çubuk) bütün gelen paralel akışlar tamamlanınca devam eder. Merge (elmas) alternatif yollardan biri gelince devam eder, beklemez.
What do swimlanes show in an activity diagram?
Cevabı göster
Swimlane (partition) diyagramı dikey ya da yatay şeritlere böler; her şerit bir aktör ya da birimdir. Bir aksiyon hangi şeritteyse o rol yapar. Sorumluluk geçişleri (el değiştirmeler) görünür olur.
In the food-delivery activity diagram on this page, how many swimlanes and how many fork bars are there?
Cevabı göster
Şeritler: Customer, Restaurant, Courier. Restaurant siparişi onaylayınca bir fork var: 'Prepare Food' ve 'Assign Courier' paralel başlıyor; join ikisi de bitince 'Pick Up Order'a geçiriyor.
Write the transition for: 'When a membership expires, if the member has auto-renew on, charge the card.' (from Active)
Cevabı göster
Event: expire. Guard: [autoRenew = true]. Action: chargeCard(). Hedef, modele göre yine Active (kendine dönen geçiş) ya da ayrı bir Renewed durumudur. Diğer dal: expire [autoRenew = false] → Expired.
What is the difference between an action and an activity in a state machine?
Cevabı göster
Action kesintisiz, anlık iştir: geçişte / chargeFine(), durum içinde entry / startTimer(). Activity süren iştir, durum içinde do / trackLocation() olarak yazılır ve durumdan çıkınca kesilir.
Doğrulama: Kavramsal ve çizim/sayım soruları UML 2 state machine (geçiş etiketi event [guard] / action) ve activity diyagramı (decision/merge elmas, fork/join kalın çubuk, swimlane) kurallarına göre kontrol edildi. Sayfadaki diyagramlarda durum, geçiş ve düğüm sayıları elle sayıldı ve iki kez karşılaştırıldı.