SEN2022 · 8. hafta · Structural Modeling

Yapısal modelleme: CRC kartları, class ve object diyagramları

Sınıfları metinden çıkarma, CRC kartı, class diagram'da attribute, operation, association, multiplicity, aggregation, composition, generalization ve object diagram. Vizenin en çok puanlı çizim sorusu.

structural modelclassobjectattributeoperationvisibilityderived attributeCRC cardresponsibilitycollaborationassociationmultiplicityassociation classaggregationcompositiongeneralizationabstract classobject diagramtextual analysis

Yapısal model (structural model), sistemin hangi veriyi tuttuğunu ve bu verilerin birbirine nasıl bağlı olduğunu gösterir. Use case “ne yapılıyor” sorusunu, yapısal model “neyle yapılıyor” sorusunu cevaplar. Bu haftanın sınav sorusu neredeyse hep aynı: bir senaryo verilir, sınıfları, attribute’ları, ilişkileri ve multiplicity’leri içeren bir class diagram çizmen istenir. Puan kaybı multiplicity’yi ters uca yazmaktan ve aggregation ile composition’ı karıştırmaktan gelir.

Altın kurallar:

  1. İsim → sınıf veya attribute, fiil → operation veya ilişki.
  2. Multiplicity karşı uçtan okunur. “Bir A’nın kaç B’si var?” cevabı B ucuna yazılır.
  3. Elmas bütün tarafındadır. Boş: parça bağımsız (aggregation). Dolu: parça bütünle ölür (composition).
  4. Üçgen üst sınıftadır. Ok alt sınıftan çıkar.

Yapısal modelin öğeleri

ÖğeAnlamıÖrnek
ClassAynı türden nesnelerin şablonuStudent, Book
ObjectSınıfın bir örneğiayse : Student
AttributeSınıfın tuttuğu veristudentNo, title
OperationSınıfın yaptığı işreserve(), calculateFine()
AssociationSınıflar arası ilişkiStudent “makes” Reservation
MultiplicityKaç tane1, 0.., 1..

Analiz aşamasında model iş dünyasını anlatır (problem domain): veritabanı tablosu, Java tipi ya da getter/setter ayrıntısı henüz yoktur.

Sınıfları bulmak

Metin analizi (textual analysis)

Use case description’lardaki kelimelere bak:

Kelime türüNeye dönüşürÖrnek
Özel isim (common noun)Sınıföğrenci, kitap, rezervasyon
Özel ad (proper noun)Nesne“Merkez Şube”
Sıfat, değerAttributebaşlık, son tarih, tutar
Eylem fiili (doing verb)Operationrezerve eder, hesaplar
“Sahiptir”, “içerir”İlişki (aggregation/composition)sipariş satırlardan oluşur
“Bir türüdür”Generalizationöğrenci bir kişidir

Diğer yollar: brainstorming (ekip olarak aday sınıfları sırala), ortak nesne listeleri (fiziksel şeyler, olaylar, roller, yerler), patterns (sipariş-sipariş satırı, rezervasyon gibi hazır kalıplar).

CRC kartları

CRC (Class-Responsibility-Collaboration) kartı, her sınıf için bir kartta sorumlulukları ve iş birliği yaptığı sınıfları gösterir.

+---------------------------------------+
| Class: Reservation       ID: 4        |
| Type: Concrete, domain                |
+---------------------------------------+
| Responsibilities   | Collaborators    |
|--------------------+------------------|
| Bilmek:            |                  |
|  kod, tarih,       |                  |
|  bitiş zamanı      |                  |
| Yapmak:            |                  |
|  süresi dolmuş mu  |                  |
|  kontrol et        |                  |
|  kopyayı ayır      | Copy             |
|  öğrenciye bildir  | Student          |
+---------------------------------------+
Arka yüz: attribute'lar (code, createdAt,
expiresAt), ilişkiler (Student, Copy)

Sorumluluklar iki türdür: knowing (bildiği veri) ve doing (yaptığı iş). Bir sorumluluğu tek başına yapamayan sınıf, iş birliği yaptığı sınıfı sağ tarafa yazar. Role-playing: ekip üyeleri kartları eline alıp bir use case’i adım adım canlandırır; eksik sorumluluk ya da sınıf hemen ortaya çıkar.

Class diagram

Sınıf kutusu

+---------------------------+
|         Student           |
+---------------------------+
| -studentNo : String       |
| -name : String            |
| -birthDate : Date         |
| -/age : int               |
+---------------------------+
| +reserve(c : Copy) : Bool |
| +getActiveCount() : int   |
+---------------------------+
KısımSöz dizimiÖrnek
Attributegörünürlük ad : tip-name : String
Derived attribute/ ile-/age : int
Operationgörünürlük ad(parametre : tip) : dönüş+reserve(c : Copy) : Bool
Görünürlük+ public, - private, # protected, ~ package

Operation türleri: constructor (nesne oluşturur), query (durumu değiştirmeden bilgi döner, ör. getActiveCount), update (durumu değiştirir, ör. reserve).

Association ve multiplicity

Association iki sınıf arasında düz çizgidir. Üstüne bir ad (makes, contains) ve okuma yönü yazılabilir. Her uca o uçtaki sınıftan kaç nesne olabileceği yazılır.

GösterimAnlamı
1Tam olarak bir
0..1Sıfır ya da bir
0..* ya da *Sıfır ya da daha çok
1..*En az bir
2..52 ile 5 arası
3Tam olarak üç

Okuma yöntemi: “Bir Student’ın kaç Reservation’ı var?” → 0..3 → Reservation ucuna yazılır. “Bir Reservation’ın kaç Student’ı var?” → 1 → Student ucuna yazılır.

+---------+ 1    makes >   0..3 +-------------+
| Student |---------------------| Reservation |
+---------+                     +-------------+

TUZAK · multiplicity’yi kendi ucuna yazmak. “Bir öğrencinin en fazla 3 rezervasyonu olur” cümlesindeki 3, Student’ın yanına değil Reservation’ın yanına yazılır. Her seferinde “bir X’in kaç Y’si var?” diye sor ve cevabı Y’nin yanına yaz.

Association class

İlişkinin kendisine ait veri varsa kullanılır. Öğrenci ve ders çok-çok ilişkili; not (grade) ne öğrenciye ne derse aittir.

+---------+ *          * +--------+
| Student |--------------| Course |
+---------+      :       +--------+
                 :
          +------------+
          | Enrollment |
          +------------+
          | grade      |
          | semester   |
          +------------+

Aggregation ve composition

İkisi de bütün-parça (part-of) ilişkisidir.

AggregationComposition
SembolBoş elmas, bütün tarafındaDolu elmas, bütün tarafında
Parça bağımsız yaşar mıEvetHayır, bütünle yok olur
Parça birden çok bütüne ait olabilir miOlabilirHayır, tek bütün
ÖrnekTeam <>- Player, Branch <>- CopyOrder <#>- OrderLine, Building <#>- Room
+-------+ 1        1..* +-----------+
| Order |<#>------------| OrderLine |
+-------+               +-----------+
(<#> = dolu elmas, Order silinirse satırlar da gider)

+--------+ 1       0..* +--------+
| Branch |<>------------|  Copy  |
+--------+              +--------+
(<> = boş elmas, şube kapanırsa kopya başka şubeye geçer)

Generalization

“Is-a-kind-of” ilişkisi. Alt sınıf (subclass) üst sınıfın (superclass) attribute ve operation’larını miras alır, kendine özgü olanları ekler.

          +----------+
          | Person   |  (abstract, italik)
          +----------+
          | -name    |
          | -email   |
          +----------+
              /_\
               |
       +-------+-------+
       |               |
+-----------+   +-------------+
| Student   |   | Librarian   |
+-----------+   +-------------+
| -studentNo|   | -staffNo    |
+-----------+   +-------------+

Abstract class doğrudan nesnesi olmayan sınıftır (kimse sadece “Person” değildir). Concrete class nesnesi olan sınıftır.

TUZAK · generalization ile aggregation karışması. “Öğrenci bir kişidir” → generalization. “Şube kopyalara sahiptir” → aggregation. Sor: “is a kind of” mi, “has a / is part of” mı?

Çözümlü örnek: kampüs kütüphanesi class diagram

Senaryo: “Kütüphanenin birden çok şubesi var. Her kitabın bir ya da daha çok fiziksel kopyası vardır ve her kopya bir şubede durur. Öğrenciler kopyaları ödünç alır; bir ödünç kaydı tek bir öğrenci ve tek bir kopya içindir. Öğrenci aynı anda en fazla 3 rezervasyon yapabilir; bir rezervasyon tek bir kopyayı tutar. Öğrenciler ve kütüphaneciler kişidir; her ikisinin adı ve e-postası tutulur.”

Adım 1: Sınıflar. Branch, Book, Copy, Student, Librarian, Person, Loan, Reservation.

Adım 2: Attribute ve operation.

SınıfAttributeOperation
Person (abstract)name, email
StudentstudentNo+reserve(c : Copy)
LibrarianstaffNo+confirmReturn(l : Loan)
Bookisbn, title, author+availableCopies() : int
Copybarcode, status+setStatus(s : String)
Branchname, address
LoanloanDate, dueDate, returnDate, /fine+calculateFine() : Money
Reservationcode, createdAt, expiresAt+isExpired() : Bool

Adım 3: İlişkiler ve multiplicity.

İlişkiTürUç 1Uç 2
Book - CopyAssociationBook 1Copy 1..*
Branch - CopyAggregation (Branch bütün)Branch 1Copy 0..*
Student - LoanAssociationStudent 1Loan 0..*
Copy - LoanAssociationCopy 1Loan 0..*
Student - ReservationAssociationStudent 1Reservation 0..3
Reservation - CopyAssociationReservation 0..1Copy 1
Student, Librarian - PersonGeneralization

Reservation - Copy satırını oku: bir Reservation tam olarak bir Copy tutar (Copy ucunda 1). Bir Copy aynı anda en fazla bir rezervasyonda olabilir (Reservation ucunda 0..1).

Adım 4: Çizim (özet).

Student     1 -------- 0..3 Reservation
Reservation 0..1 ----- 1    Copy
Student     1 -------- 0..* Loan
Copy        1 -------- 0..* Loan
Book        1 -------- 1..* Copy
Branch      1 <>------ 0..* Copy
Student   ---|> Person {abstract}
Librarian ---|> Person {abstract}

Her satır bir ilişki: soldaki sayı soldaki sınıfın ucuna, sağdaki sayı sağdaki sınıfın ucuna yazılır. Sınavda bunu kutularla çizersin; önemli olan her uçtaki multiplicity’nin doğru tarafta olması.

Object diagram

Object diagram, belirli bir anda sistemdeki nesneleri ve aralarındaki bağlantıları (link) gösterir. Class diagram’ın bir “fotoğrafı”dır. Nesne adı ad : Sınıf biçiminde, altı çizili yazılır; attribute’lar gerçek değerleriyle gösterilir. Multiplicity yazılmaz.

+------------------+     +------------------+
| ayse : Student   |-----| r1 : Reservation |
| studentNo="2041" |     | code="R-118"     |
+------------------+     +------------------+
        |                         |
        |                +------------------+
        |                | c7 : Copy        |
        |                | status="On Hold" |
        |                +------------------+
+------------------+     +------------------+
| r2 : Reservation |-----| c9 : Copy        |
| code="R-131"     |     | status="On Hold" |
+------------------+     +------------------+

Burada 5 nesne (ayse, r1, r2, c7, c9) ve 4 link var: ayse-r1, ayse-r2, r1-c7, r2-c9. Object diagram, multiplicity’leri test etmenin iyi yoludur: Ayşe’ye dördüncü bir rezervasyon eklemeye çalışırsan class diagram’daki 0..3 kuralını ihlal edersin.

Sık yapılan hatalar

Yanlış düşünceDoğrusu
Multiplicity kendi ucuna yazılırKarşı uçtan okunur: “bir A’nın kaç B’si” → B ucuna
Elmas parça tarafındaElmas bütün tarafında
Composition’da parça başka bütüne geçebilirGeçemez, bütünle yok olur
Generalization oku üstten altaAlttan üste, üçgen üst sınıfta
Her isim bir sınıftırBazıları attribute (tarih, tutar) ya da gereksiz (sistem, ekran)
İlişkiye ait veriyi bir uca koymakAssociation class kullan
Object diagram’da multiplicity yazmakLink’ler tekildir, multiplicity yok
Analizde getter/setter yazmakAnalizde yazılmaz; tasarım ayrıntısıdır

Kendini test et

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

Soru 1kolay

Read the association: Customer 1 ---- 0..* Order. How many orders can one customer have, and how many customers does one order have?

Cevabı göster
A customer has zero or more orders; an order belongs to exactly one customer.

Multiplicity karşı uçtan okunur. Order tarafındaki 0..*: "bir Customer'ın 0 ya da daha çok Order'ı var." Customer tarafındaki 1: "bir Order tam olarak bir Customer'a ait."

Soru 2orta

Give the multiplicity: 'A gym class session has one trainer; a trainer leads between 0 and 10 sessions per week.' (Trainer end, Session end)

Cevabı göster
Trainer end: 1, Session end: 0..10

Bir Session'ın kaç Trainer'ı var? 1, bu sayı Trainer ucuna yazılır. Bir Trainer kaç Session yönetir? 0..10, bu Session ucuna yazılır.

Soru 3kolay

An Order is made of OrderLines; an OrderLine cannot exist without its Order and is deleted with it. Which relationship?

  1. Association
  2. Aggregation
  3. Composition
  4. Generalization
Cevabı göster
C) Composition

Composition güçlü bütün-parça ilişkisidir: parça tek bir bütüne aittir ve bütünle birlikte yok olur. Dolu (siyah) elmas bütün tarafında, Order'da çizilir.

Soru 4orta

A Team has Players, but a player can leave and join another team and still exists. Which relationship and which symbol?

Cevabı göster
Aggregation, a hollow (white) diamond at the Team end

Aggregation zayıf bütün-parça ilişkisidir: parça bütünden bağımsız yaşayabilir. Boş elmas bütün tarafına çizilir. Composition olsaydı takım dağılınca oyuncular da yok olurdu.

Soru 5kolay

What do the visibility symbols +, -, # mean?

Cevabı göster
+ public, - private, # protected

+ her yerden erişilir (public), - sadece sınıfın içinden (private), # sınıf ve alt sınıfları (protected). ~ package görünürlüğüdür. Analizde attribute'lar genelde private, operation'lar public yazılır.

Soru 6orta

In a class, the attribute /age : int appears next to birthDate : Date. What does the slash mean?

Cevabı göster
age is a derived attribute, calculated from birthDate.

/ derived (türetilmiş) attribute'u gösterir: saklanmaz, başka attribute'lardan hesaplanır. Bir Order'ın /total'ı satırların toplamından hesaplanır.

Soru 7zor

'Students take Courses. For each student-course pair we must store the grade and the semester.' Where do grade and semester go?

Cevabı göster
In an association class (e.g., Enrollment) attached to the Student-Course association.

Grade ne Student'a ne Course'a aittir, ikisinin ilişkisine aittir. Association class, ilişki çizgisine kesik çizgiyle bağlanan bir sınıftır: Enrollment (grade, semester). Çok-çok ilişkilerde sık görülür.

Soru 8orta

From the text 'A courier delivers an order to a customer's address and records the delivery time', identify candidate classes using textual analysis.

Cevabı göster
Courier, Order, Customer, Address (and possibly Delivery); delivery time is an attribute.

İsimler sınıf adayıdır: courier, order, customer, address. Fiiller (delivers, records) operation ya da ilişki adayıdır. "Delivery time" bir değerdir, attribute olur (Delivery ya da Order sınıfında). Address basit tutulursa Customer'ın attribute'u da olabilir.

Soru 9kolay

On a CRC card, what goes on the right side?

  1. Attributes
  2. Collaborators
  3. Responsibilities
  4. Superclasses
Cevabı göster
B) Collaborators

CRC = Class, Responsibilities, Collaborators. Kartın sol tarafı sorumluluklar (bilmek ve yapmak), sağ tarafı işbirliği yaptığı sınıflardır. Arka yüze attribute'lar ve ilişkiler yazılabilir.

Soru 10orta

In the object diagram on this page, how many objects and how many links are shown?

Cevabı göster
5 objects, 4 links

Nesneler: ayse:Student, r1:Reservation, r2:Reservation, c7:Copy, c9:Copy. Bağlantılar: ayse-r1, ayse-r2, r1-c7, r2-c9. Toplam 5 nesne, 4 bağlantı. Object diagram'da multiplicity yazılmaz, adlar altı çizili gösterilir.

Soru 11orta

Which statement about generalization is TRUE?

  1. The arrow goes from superclass to subclass
  2. A subclass inherits attributes and operations of its superclass
  3. Composition is a kind of generalization
  4. An abstract class must have instances
Cevabı göster
B) A subclass inherits attributes and operations of its superclass

Generalization "is-a-kind-of" ilişkisidir; ok alt sınıftan üst sınıfa, boş üçgen üst sınıfta. Alt sınıf üst sınıfın her şeyini miras alır ve ekler. Abstract class'ın doğrudan nesnesi olmaz (adı italik yazılır).

Soru 12kolay

A Copy belongs to exactly one Book; a Book has at least one Copy. Write the multiplicity at each end.

Cevabı göster
Book end: 1, Copy end: 1..*

Bir Copy'nin kaç Book'u var? 1 → Book ucuna. Bir Book'un kaç Copy'si var? En az 1 → Copy ucuna 1..*.

Doğrulama: Multiplicity, ilişki türü ve sayım soruları UML 2 class diagram kurallarına (multiplicity okuması karşı uçtan yapılır; composition'da parça bütünle birlikte yok olur; generalization alt sınıftan üst sınıfa boş üçgen) göre tek tek kontrol edildi. Object diagram'daki nesne ve bağlantı sayıları sayfadaki çizim üzerinden elle sayıldı ve iki kez karşılaştırıldı.

Deftere not kartı

Sınıf kutusu: ad / attribute'lar / operation'lar Görünürlük: + public - private # protected ~ package attribute: -name : String operation: +reserve(b : Book) : Boolean /attr = derived (hesaplanır, saklanmaz) Multiplicity: 1, 0..1, 0..*, 1..*, 2..5 → KARŞI uçtan oku Association: düz çizgi, ad + okuma yönü (▸) Association class: ilişkiye ait veri (Enrollment: grade) Aggregation: boş elmas BÜTÜN tarafında, parça bağımsız yaşar Composition: dolu elmas BÜTÜN tarafında, parça bütünle ölür Generalization: boş üçgen ÜST sınıfta, "is-a-kind-of" Abstract class: italik ad, nesnesi yok CRC: Class | Responsibilities (sol) | Collaborators (sağ) Metin analizi: isim → sınıf/attribute, fiil → operation/ilişki Object diagram: nesne:Sınıf (altı çizili), değerler, link (multiplicity yok)