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
กล่องคลาส 3 ช่อง พร้อมสัญลักษณ์ Visibility
3. Class Visibility
สัญลักษณ์หน้าชื่อ attribute และ method บอกระดับการเข้าถึง ช่วยควบคุมว่าใครเข้าถึงหรือเปลี่ยนข้อมูลในคลาสได้
| สัญลักษณ์ | ชื่อ | เข้าถึงได้จาก |
|---|---|---|
| + | Public (สาธารณะ) | ภายนอกคลาส — คลาสอื่นเรียกใช้และเปลี่ยนแปลงได้ |
| - | Private (ส่วนตัว) | ภายในคลาสเท่านั้น — ป้องกันการเข้าถึงจากภายนอก |
| # | Protected (ป้องกัน) | ภายในคลาสและคลาสที่สืบทอด (subclasses) เท่านั้น |
4. Relationships between classes — 5 แบบ
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 | ชื่อ | ทำอะไร |
|---|---|---|
| 01 | Identify Classes | ระบุคลาสทั้งหมดในระบบ |
| 02 | List Attributes and Methods | ระบุ attribute และ method ของแต่ละคลาส รวมถึงชนิดข้อมูลและ visibility |
| 03 | Identify Relationships | กำหนดความสัมพันธ์ระหว่างคลาส |
| 04 | Create Class Boxes | วาดกล่องคลาส ใส่ชื่อคลาสในช่องบนสุด |
| 05 | Add Attributes and Methods | ใส่ attribute และ method ในช่อง พร้อมสัญลักษณ์ visibility |
| 06 | Draw Relationships | ใช้ลูกศรระบุทิศทาง และใช้ชนิดเส้นตามประเภทความสัมพันธ์ |
| 07 | Review 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 หายด้วย)