UML (2) — Class Diagram

Class Diagram = แผนภาพแสดงโครงสร้างของระบบ เชิงวัตถุ อธิบายคุณลักษณะและการดำเนินงานของคลาส ข้อจำกัดที่กำหนดในระบบ และ ความสัมพันธ์ระหว่างคลาส

1. ระดับของ Class Diagram

ระดับเน้นใช้ทำอะไร
Conceptualความเข้าใจและออกแบบโครงสร้างระดับสูง (High-Level Design) ภาพรวมองค์ประกอบหลักและความสัมพันธ์ใช้วางแผน และสื่อสารแนวคิดหลักของระบบ
Specificationรายละเอียดชัดเจนของคลาสและความสัมพันธ์ เพื่อนำไปพัฒนาได้กำหนดข้อกำหนดทางเทคนิคและรายละเอียดการออกแบบ
Implementationรายละเอียดที่ใช้พัฒนาซอฟต์แวร์จริง วิธีที่คลาสถูกนำไปใช้ทำงานได้จริงและสอดคล้องกับข้อกำหนดทั้งเทคนิคและธุรกิจ

2. Class คืออะไร

Class = แบบแผนสำหรับ Object — คลาสระบุว่าอ็อบเจกต์จะเป็นอย่างไร และอ็อบเจกต์คือตัวอย่างการใช้งานของคลาส แต่ละอ็อบเจกต์สร้างจากแบบแผนคลาสชุดเดียวกัน

องค์ประกอบหลักของ Class Diagram: คลาส (Class) และ ความสัมพันธ์ (Relationships)
กล่องคลาสแบ่งเป็น 3 ช่อง: ชื่อคลาส (Name) / Attributes / Methods

Customer - customerId: int - name: String # email: String + register(): void + placeOrder(): Order - validate(): boolean ชื่อคลาส (Name) Attributes (คุณสมบัติ) Methods (การดำเนินการ)
กล่องคลาส 3 ช่อง พร้อมสัญลักษณ์ Visibility

3. Class Visibility

สัญลักษณ์หน้าชื่อ attribute และ method บอกระดับการเข้าถึง ช่วยควบคุมว่าใครเข้าถึงหรือเปลี่ยนข้อมูลในคลาสได้

สัญลักษณ์ชื่อเข้าถึงได้จาก
+Public (สาธารณะ)ภายนอกคลาส — คลาสอื่นเรียกใช้และเปลี่ยนแปลงได้
-Private (ส่วนตัว)ภายในคลาสเท่านั้น — ป้องกันการเข้าถึงจากภายนอก
#Protected (ป้องกัน)ภายในคลาสและคลาสที่สืบทอด (subclasses) เท่านั้น

4. Relationships between classes — 5 แบบ

1. Association Customer Order เส้นทึบธรรมดา 2. Inheritance Dog (child) Animal (parent) หัวสามเหลี่ยมโปร่ง ชี้ไป parent 3. Aggregation Duck (part) Pond (whole) ข้าวหลามตัดโปร่ง ที่ฝั่ง whole 4. Composition Battery Electric car ข้าวหลามตัดทึบ ที่ฝั่ง whole 5. Unidirectional Association Booking Seat ลูกศรหัวเปิด ทิศทางเดียว หมายเหตุ: ตำแหน่งข้าวหลามตัดอยู่ฝั่ง "ตัวที่เป็นเจ้าของ (whole)" เสมอ
5 ความสัมพันธ์ระหว่างคลาส พร้อมรูปหัวลูกศร
ความสัมพันธ์ความหมายตัวอย่าง
1. Association
ความสัมพันธ์
การเชื่อมโยงทั่วไประหว่างคลาส Customer สามารถทำรายการ Order ได้
2. Inheritance
การสืบทอด
สืบทอดคุณสมบัติและพฤติกรรมจากคลาสพื้นฐาน (superclass) ไปยังคลาสลูก (subclass) Vehicle ถูกสืบทอดโดย Car และ Bike / Dog สืบทอดจาก Animal
3. Aggregation
การเป็นส่วนหนึ่ง
a-part-of โดยที่ part มีชีวิตอยู่ได้โดยไม่ขึ้นกับ whole Pond มี Duck — เอาเป็ดออกจากบ่อ บ่อก็ยังเป็นบ่อ (เพราะมีน้ำ ดอกบัว ปลา ฯลฯ)
4. Composition
การเป็นองค์ประกอบ
a-part-of โดยที่ part ไม่อาจแยกออกจากคลาสหลักได้ Electric car กับ Battery — เอา Battery ออก รถไฟฟ้าทำงานไม่ได้
5. Unidirectional Association
เชื่อมโยงทิศทางเดียว
คลาส A เรียกคลาส B ได้ แต่ B เรียก A ไม่ได้ การเข้าถึงเป็นไปทางเดียว Booking เข้าถึงข้อมูล Seat ที่ถูกจองได้ แต่ Seat ไม่ต้องรู้เรื่อง Booking
Aggregation vs Composition คือคู่ที่ออกสอบบ่อยที่สุด: ถ้าแยก part ออกแล้ว whole ยังอยู่ได้ = Aggregation (ข้าวหลามตัดโปร่ง) / ถ้าแยกแล้ว whole อยู่ไม่ได้ = Composition (ข้าวหลามตัดทึบ)

5. การวาด Class Diagram — 7 ขั้นตอน

Stepชื่อทำอะไร
01Identify Classesระบุคลาสทั้งหมดในระบบ
02List Attributes and Methodsระบุ attribute และ method ของแต่ละคลาส รวมถึงชนิดข้อมูลและ visibility
03Identify Relationshipsกำหนดความสัมพันธ์ระหว่างคลาส
04Create Class Boxesวาดกล่องคลาส ใส่ชื่อคลาสในช่องบนสุด
05Add Attributes and Methodsใส่ attribute และ method ในช่อง พร้อมสัญลักษณ์ visibility
06Draw Relationshipsใช้ลูกศรระบุทิศทาง และใช้ชนิดเส้นตามประเภทความสัมพันธ์
07Review and Refineตรวจสอบและปรับปรุงให้แสดงโครงสร้างได้ถูกต้อง

ตัวอย่างเขียน Class เป็นข้อความ

Class: Customer
  - customerId: int
  - name: String
  # email: String
  + register(): void
  + placeOrder(): Order

Class: Order
  - orderId: int
  - orderDate: Date
  + calculateTotal(): double

Relationship: Customer --- Order   (Association, 1 ต่อ *)
              Order ◆--- OrderItem (Composition: ลบ Order แล้ว OrderItem หายด้วย)