การอ่านไดอะแกรม UML
ทำไมต้องมีไดอะแกรมด้วย
หัวข้อที่มีชื่อว่า “ทำไมต้องมีไดอะแกรมด้วย”ทุก pattern ในคอร์สนี้มี UML class diagram อยู่ในส่วน Structure ของตัวเอง UML — Unified Modeling Language — เป็นโน้ตเทชันมาตรฐานสำหรับร่างรูปทรงเชิงสถิตของ code เชิง object: มี type อะไรอยู่บ้าง แต่ละ type ถืออะไรไว้ และเชื่อมโยงกันอย่างไร ไดอะแกรมบอกในแวบเดียวสิ่งที่ย่อหน้าหนึ่งต้องใช้หลายประโยคในการอธิบาย บทเรียนนี้ครอบคลุมเฉพาะส่วนย่อยของ UML ที่คุณต้องใช้จริง ๆ ในการอ่านไดอะแกรมที่นี่ และจับคู่แต่ละชิ้นเข้ากับ syntax ของ Mermaid ที่ render ไดอะแกรมออกมา
class และ interface
หัวข้อที่มีชื่อว่า “class และ interface”class คือกล่องหนึ่ง ที่อาจแบ่งออกเป็นสามแถว: ชื่อ field ของตัวเอง และ operation ของตัวเอง เครื่องหมาย + นำหน้าบ่งบอก member ที่เป็นสาธารณะ ส่วน - บ่งบอกตัวที่เป็นส่วนตัว interface — สัญญาที่ไม่มี implementation — ถูกวาดเป็นกล่องที่มี stereotype <<interface>> อยู่เหนือชื่อของตัวเอง
classDiagram
class Account {
-balance: number
+deposit(amount)
+withdraw(amount)
}
class Repository {
<<interface>>
+save(account)
+findById(id)
} inheritance และ implementation
หัวข้อที่มีชื่อว่า “inheritance และ implementation”ลูกศรสองแบบอธิบายความสัมพันธ์แบบ “เป็นชนิดหนึ่งของ” และดูคล้ายกัน ดังนั้นการแยกแยะจึงสำคัญ สามเหลี่ยมกลวงบนเส้นทึบ หมายถึง inheritance — class หนึ่ง extend อีก class หนึ่ง สามเหลี่ยมกลวงบนเส้นประ หมายถึง implementation — class หนึ่งทำตามสัญญาของ interface ใน Mermaid <|-- คือ inheritance (สามเหลี่ยมชี้ไปที่ parent) และ ..|> คือ implementation (เส้นประชี้ไปที่ interface)
classDiagram
class Shape {
<<interface>>
+area() number
}
class Polygon
class Circle
Shape <|-- Polygon : Polygon extends Shape
Circle ..|> Shape : Circle implements Shape association, aggregation และ composition
หัวข้อที่มีชื่อว่า “association, aggregation และ composition”ลูกศรที่เหลืออธิบายความสัมพันธ์แบบ “has-a” เรียงตามว่า object ทั้งสองถูกผูกเข้าด้วยกันแน่นแค่ไหน:
- Association — เส้นธรรมดา (Mermaid
-->) object หนึ่งเพียงใช้หรืออ้างถึงอีกตัว โดยไม่บ่งบอกถึงความเป็นเจ้าของOrderอ้างถึงCustomer - Aggregation — สี่เหลี่ยมข้าวหลามตัดกลวง (Mermaid
o--) ที่ปลายฝั่งเจ้าของ ความสัมพันธ์แบบทั้งหมด-ส่วนย่อยที่ส่วนย่อยสามารถอยู่ได้นานกว่าทั้งหมด:TeamaggregatePlayerหลายตัว แต่ผู้เล่นดำรงอยู่อย่างเป็นอิสระจากทีม - Composition — สี่เหลี่ยมข้าวหลามตัดทึบ (Mermaid
*--) ที่ปลายฝั่งเจ้าของ ความสัมพันธ์แบบทั้งหมด-ส่วนย่อยที่แข็งแกร่งกว่า ที่อายุของส่วนย่อยถูกผูกเข้ากับทั้งหมด:Houseประกอบขึ้นจากRoomหลายตัวที่ถูกทำลายไปพร้อมกับบ้าน
classDiagram class Order class Customer class Team class Player class House class Room Order --> Customer : association (uses) Team o-- Player : aggregation (shared part) House *-- Room : composition (owned part)
ตารางอ้างอิงฉบับย่อ
หัวข้อที่มีชื่อว่า “ตารางอ้างอิงฉบับย่อ”จงจำการจับคู่นี้ไว้ในใจ แล้วทุกไดอะแกรมในคอร์สก็จะอ่านออก:
<|--— inheritance (extend class หนึ่ง)..|>— implementation (ทำตามสัญญาของ interface)-->— association (ใช้หรืออ้างถึง)o--— aggregation (เป็นเจ้าของส่วนย่อยที่อยู่ได้อย่างเป็นอิสระ)*--— composition (เป็นเจ้าของส่วนย่อยที่ควบคุมอายุของตัวเอง)