SEN2022 · 10. hafta · Behavioral Modeling

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.

behavioral state machinestateeventtransitionguard conditionactionactivityinitial statefinal statecomposite stateactivity diagramaction nodecontrol flowobject flowdecision nodemerge nodefork nodejoin nodeswimlane (partition)object node

İ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:

  1. State machine bir nesne içindir, activity diagram bir süreç içindir.
  2. Geçiş etiketi: event [guard] / action. Üçü de opsiyonel ama sıra sabit.
  3. Elmas = bir yol seç (decision/merge). Kalın çubuk = hepsi paralel (fork/join).
  4. Swimlane = sorumluluk. Her aksiyon doğru şeritte olmalı.

State machine diyagramı

Öğeler

ÖğeGösterimAnlamı
StateYuvarlatılmış dikdörtgenNesnenin bir koşulu, belirli bir süre kalır
Initial stateDolu küçük daireBaşlangıç noktası
Final stateHalka içinde dolu daireNesnenin yaşamının sonu
TransitionOkBir durumdan diğerine geçiş
EventOkun üstündeGeçişi tetikleyen olay
Guard[koşul]Doğruysa geçiş olur
Action/ işlem()Geçiş sırasında anlık iş
ActivityDurum 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.

KaynakEvent [guard] / actionHedef
●addToCatalogAvailable
Availablereserve / startHoldTimer()On Hold
AvailablecheckOut / setDueDate()On Loan
On HoldpickUp / setDueDate()On Loan
On Holdafter 48h (holdExpired)Available
On LoanreturnAvailable
On Loanwhen today > dueDateOverdue
Overduereturn / chargeFine()Available
Overdueafter 30 days / markLost()Lost
LostremoveFromCatalog◉

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

ÖğeGösterimAnlamı
ActionYuvarlatılmış dikdörtgenTek adım (“Place Order”)
ActivityYuvarlatılmış dikdörtgen, alt akışı varBirden çok adımdan oluşan iş
Control flowDüz okSıra
Object nodeDikdörtgenAkan nesne: Order [paid]
Object flowOk (nesneye/nesneden)Verinin akışı
Initial nodeDolu daireBaşlangıç
Activity finalHalka içinde dolu daireBütün akışı bitirir
Flow finalDaire içinde XSadece o dalı bitirir
DecisionElmas, çıkışlarda [guard]Bir yol seç
MergeElmas, birden çok girişAlternatif yolları birleştir
ForkKalın çubuk, bir giriş çok çıkışParalel başlat
JoinKalın çubuk, çok giriş bir çıkışHepsini bekle
SwimlaneŞeritSorumlu 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?

SoruDiyagram
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üşünceDoğrusu
State machine bir süreç içindirBir nesnenin yaşam döngüsü içindir
Etiket sırası action [guard] eventevent [guard] / action
Her sınıfa state machineSadece 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 = decisionFork paralel başlatır, decision birini seçer
Merge bütün dalları beklerJoin bekler; merge beklemez
Swimlane’siz sorumluluk göstermekKim 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ç.

Soru 1kolay

On a state machine transition labeled returnBook [daysLate > 0] / chargeFine(), identify the event, guard and action.

Cevabı göster
Event: returnBook; guard: daysLate > 0; action: chargeFine()

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.

Soru 2kolay

Which kind of class deserves a state machine diagram?

  1. Every class
  2. A class whose objects go through clearly different states with different behavior
  3. Only abstract classes
  4. Only controller classes
Cevabı göster
B) A class whose objects go through clearly different states with different behavior

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.

Soru 3orta

In the Copy state machine on this page, how many states (excluding initial and final pseudo-states) are there?

Cevabı göster
5

Available, On Hold, On Loan, Overdue, Lost. Başlangıç noktası (dolu daire) ve bitiş (halkalı daire) durum sayılmaz. Toplam 5 durum.

Soru 4orta

In the same Copy state machine, which event moves a copy from On Hold back to Available without a loan?

Cevabı göster
holdExpired (48 hours pass without pickup)

Rezervasyon süresi dolunca (temporal event, 'after 48h') kopya tekrar Available olur. Öğrenci gelip alırsa (pickUp) On Loan olur.

Soru 5zor

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
From Placed and from Accepted

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.

Soru 6orta

In an activity diagram, what is the difference between a decision node and a fork node?

Cevabı göster
A decision (diamond) chooses ONE outgoing path based on guards; a fork (thick bar) starts ALL outgoing paths in parallel.

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.

Soru 7kolay

Which node waits until ALL incoming parallel flows have finished?

  1. Merge
  2. Join
  3. Decision
  4. Final
Cevabı göster
B) Join

Join (kalın çubuk) bütün gelen paralel akışlar tamamlanınca devam eder. Merge (elmas) alternatif yollardan biri gelince devam eder, beklemez.

Soru 8kolay

What do swimlanes show in an activity diagram?

Cevabı göster
Who (which actor, role or department) is responsible for each action.

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.

Soru 9orta

In the food-delivery activity diagram on this page, how many swimlanes and how many fork bars are there?

Cevabı göster
3 swimlanes, 1 fork (and 1 join)

Ş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.

Soru 10zor

Write the transition for: 'When a membership expires, if the member has auto-renew on, charge the card.' (from Active)

Cevabı göster
expire [autoRenew = true] / chargeCard() : Active → Active (or → Renewed)

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.

Soru 11zor

What is the difference between an action and an activity in a state machine?

Cevabı göster
An action is atomic and instantaneous (on a transition or entry/exit); an activity takes time and runs while the object is in a state (do/).

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ı.

Deftere not kartı

State machine: BİR nesnenin yaşam boyu durumları State: yuvarlatılmış dikdörtgen; initial ● ; final ◉ Geçiş etiketi: event [guard] / action Event: olay (çağrı, zaman "after 48h", koşul "when x") Guard: [doğru/yanlış], doğruysa geçiş Action: anlık (geçişte, entry/, exit/); Activity: süren (do/) Composite state: içinde alt durumlar Sadece karmaşık yaşam döngülü sınıflar için çiz Activity: süreç akışı (iş akışı ya da use case akışı) Decision/merge: elmas, BİR yol; Fork/join: kalın çubuk, HEPSİ paralel Swimlane: kim yapıyor Object node: dikdörtgen, akan veri (Order[paid]) Activity final ◉ hepsini bitirir; flow final ⊗ tek akışı