Class Diagram
ความหมาย Class diagram คือ แผนภาพที่ใช้แสดง class และความสัมพันธ์ (relationship) ระหว่าง class ความสัมพันธ์ที่แสดงเป็นความสัมพันธ์เชิงสถิตย์ (static) ไม่ใช่ความสัมพันธ์ที่เกิดขึ้นเนื่องจากกิจกรรม (dynamic)
Examples of Relationship Static relationship เจ้าของบัญชีเป็นเจ้าของบัญชีเงินฝาก Dynamic relationship เจ้าของบัญชีฝากเงินเข้าบัญชีเงินฝาก เจ้าของบัญชีถอนเงินจากบัญชีเงินฝาก เจ้าของบัญชีปรับปรุงยอดบัญชีเงินฝาก
สัญลักษณ์ Class Man - Name # Surname - Age + Tell_Name + Tell_Age
สัญลักษณ์ Visibility Private แทนด้วย - Protected แทนด้วย # Public แทนด้วย +
Visibility แบบ Public มองเห็นและเรียกใช้ได้โดยตรงจากภายนอก เข้าไปเปลี่ยนค่า อ่านค่า หรือเรียกใช้งานได้ทันทีโดยอิสระจากภายนอก มักใช้กับ Functions มากกว่า Attributes จะใช้เครื่องหมาย (+) กำกับไว้ข้างหน้า
Visibility แบบ Private ไม่สามารถเห็นได้จากภายนอก จะเห็นได้ภายในเฉพาะตัว class เองเท่านั้น หากภายนอกต้องการแก้ไข หรืออ่านค่า ทำได้วิธีเดียวคือ ทำผ่าน Function ที่เกี่ยวข้อง โดยทั่วไปมักใช้กับ Attributes มากกว่า Functions จะใช้เครื่องหมาย (-) กำกับไว้ข้างหน้า
Visibility แบบ Protected สงวนไว้สำหรับการทำ Inheritance โดยเฉพาะ โดยปกติจะเป็นของ Superclass เมื่อทำ inheritance แล้ว Attributes และ Functions เหล่านี้จะเป็นได้ทั้ง Private หรือ Protect ซึ่งขึ้นอยู่กับภาษาที่ใช้ จะใช้เครื่องหมาย (#) กำกับไว้หน้า
ตัวอย่าง Class คน คน - เลขบัตรประจำตัวประชาชน - ชื่อ # นามสกุล - อายุ - หมู่เลือด + สีผม + บอกเลขบัตรประชาชน + บอกชื่อ + บอกนามสกุล + บอกอายุ + บอกหมู่เลือด
หลักการในการสร้าง Class Diagram กำหนดกรอบของ Problem Domain ให้ชัดเจน เขียน use case diagram ของ problem domain ที่กำหนดไว้ พิจารณาว่าในแต่ละ use case มี object ใดอยู่บ้าง ทำให้ครบทุก use case
หลักการ... พิจารณาหา Tangible objects ให้ครบทุกตัว ในกรณีที่มีหลายตัวใน problem domain เดียวกัน ให้หาตัวแทน object นั้น พิจารณาหา Intangible objects ให้ครบทุกตัว
หลักการ... ใช้ Classification Abstraction เพื่อแยกแยะและสร้าง class จาก object ที่มีอยู่ หา attributes และ functions ที่มีอยู่ใน class นั้น ๆ วาด class ที่ได้ลงใน class diagram
หลักการ... หา Aggregation(การรวมกลุ่ม) Abstraction โดยพิจารณา class ที่มีความสัมพันธ์แบบเป็นส่วนหนึ่งหรือประกอบด้วยกับ class อื่น ๆ ระบุชนิด aggregation ได้แก่ One to One หรือ Many to One ใส่ Cardinality(สาระสำคัญ) ให้ถูกต้อง
หลักการ... ใช้ Generalization(ลักษณะทั่วไป) มาพิจารณา class ต่าง ๆ ใน class diagram หากมีความสัมพันธ์แบบ generalization(ทั่วไป) หรือ specialization(พิเศษ) ให้เพิ่มลงไปใน class diagram อาจมีการสร้าง class ใหม่เพื่อเป็น generalized class (คลาสทั่วไป) ได้
หลักการ... ใช้ Association(ความสัมพันธ์) มาพิจารณา class ต่าง ๆ ใน class diagram เพิ่มเติมสัญลักษณ์ของ Association ลงใน Class Diagram พิจารณาประเภทของความสัมพันธ์และ Cardinality ให้ถูกต้อง
หลักการ... พิจารณาว่าทุก class ควรมีความสัมพันธ์ แบบใดแบบหนึ่งกับ class อื่น หากพบ class ที่ยังไม่มีความสัมพันธ์กับ class อื่น อาจมีสาเหตุจาก class นั้นเป็น class ที่เกินความจำเป็น ซึ่งไม่จำเป็นต้องมีในระบบได้ หรือต้องเพิ่มเติม class อื่นที่มีความสัมพันธ์กับ class ดังกล่าวเข้าไป
หลักการ Cardinality Ratio ใน Class Diagram - Multiplicity หมายถึง การพิจารณาจำนวน instances (objects) ของคลาสหนึ่ง ที่สามารถเชื่อมโยงกับinstance (object) ของคลาสที่เกี่ยวข้อง - Multiplicity คือ Cardinality ratio ได้แก่ 0..n,0..1,1..1, 1..N, M-Nซึ่งเขียนให้อยู่ในรูป Min..Max - Cardinality ratio คือ การระบุจำนวนสมาชิกของ Entity ที่สัมพันธ์กัน - Multiplicity ในความสัมพันธ์ (Relationship) เป็นการแสดงจำนวน Object ของ Class หนึ่ง ซึ่งมีความสัมพันธ์กับ Objects ของอีก Class หนึ่ง บนเส้นความสัมพันธ์โดยใช้รูปแบบ Minimum Cardinality .. Maximum Cardinality
หลักการ ความสัมพันธ์ระหว่าง Object ประกอบด้วย - Association - Aggregation - Composition - Inheritance/Generalization
หลักการ Association มีไว้สำหรับระบุความสัมพันธ์ระหว่าง Class ใช้หัวลูกศรขนาดเล็ก ทึบ หรือเป็นลูกศรหัวเป็นเส้นเดี่ยว
หลักการ Aggregation - Aggregation เป็นความสัมพันธ์ระหว่างคลาสแบบต่างระดับ ในลักษณะของการป็นองค์ประกอบต่าง ๆ เรียกว่า “Part Class” ส่วน คลาสที่เกิดจากการรวมกันขององค์ประกอบต่าง ๆ เรียกว่า “Whole Class” โดยข้อสังเกตของความสัมพันธ์ชนิดนี้คือ Part Class มีอิสระ ไม่จำเป็นต้องพึ่งพา Whole Class หาก Whole Class ถูกทำลาย หรือเสียหาย Part Class ก็ยังคงอยู่ เช่น ความสัมพันธ์ระหว่างคลาส “Team” กับ Person” โดยที่ Team จะต้องมี Person มารวมกันเป็นองค์ประกอบ หรือความสัมพันธ์ระหว่างคลาส “Car” มีคลาส “Engine”, “Wheel”, Steering” เป็นต้น
หลักการ Aggregation - คือ การนำส่วนประกอบย่อยๆ หลายๆอย่างมาประกอบเป็นหนึ่ง Object ที่สามารถใช้งานได้อย่างสมบูรณ์ ถ้าขาดส่วนหนึ่งส่วนใดจะเกิดการผิดพลาดได้ เป็นความสัมพันธ์แบบ Aggregation แทนด้วยข้าวหลามตัดโปร่งใส ซึ่งความสัมพันธ์ระหว่าง Object หรือ Class แบบ “Whole-Part” หรือ “is part of” โดยจะมี Class ที่ใหญ่ที่สุดที่เป็น Object หลัก และมี Class อื่นเป็นส่วนประกอบ - วัตถุมี วัตถุอื่นๆ เป็นองค์ประกอบย่อย เช่น Car มี engine และwheels เป็นองค์ประกอบ - ปลายที่มีข้าวหลามตัดเป็น Class “Whole-Part หรือ Container(หลัก)” ปลายอีกข้างเป็น Class “Part(ส่วนประกอบ)”
หลักการ ตัวอย่างแสดงความสัมพันธ์แบบ Aggregation
หลักการ Composition - ในความสัมพันธ์แบบ “Composition” Part Class ไม่สามารถทำงานได้หากไม่มี Whole Class และ Part Class จะต้องทำงานร่วมกับ Whole Class ตลอดอายุของ Whole Class ดังนั้นเมื่อ Whole Class ถูกลบ Part Class ก็ถูกลบไปด้วย เช่น ความสัมพันธ์ระหว่างคลาส “Employee” กับ “EmpHistory” เมื่อพนักงานลาออกไปประวัติพนักงานก็จะไม่มีอีกต่อไป หรือ คลาส “Windows” กับ คลาสที่เป็นส่วนประกอบของโปรแกรมวินโดวส์ หากโปรแกรมวินโดวส์ถูกปิดลงส่วนประกอบอื่น ๆ ของโปรแกรมวินโดวส์ก็จะถูกปิดลงไปด้วย เป็นต้น
หลักการ Composition - เป็นความสัมพันธ์ระหว่าง Object หรือ Class แบบขึ้นต่อกันและมีความเกี่ยวข้องกันเสมอ โดยจะมี Class ซึ่งเป็นองค์ประกอบของ Class อื่นที่ใหญ่กว่า - วัตถุมีวัตถุอื่นๆ เป็นองค์ประกอบย่อยทั้งหมด - การส่ง message ติดต่อกับวัตถุที่เป็นองค์ประกอบรวม อาจมีผลกับองค์ประกอบทั้งหมด - ถ้า delete วัตถุที่เป็นองค์ประกอบรวม ส่วนย่อยจะต้องถูก delete ทิ้งไปด้วย - ใช้สัญลักษณ์ข้าวหลามตัดทึบ
หลักการ ตัวอย่างแสดงความสัมพันธ์แบบ Composition
หลักการ ความเหมือนและความแตกต่างระหว่าง Aggregation และ Composition - ส่วนของ Aggregation วัตถุแต่ละส่วนจะทำงานในแบบขอบริการซึ่งกันและกัน ดังนั้นถ้าขาดวัตถุชิ้นใด อาจทำให้ไม่สมบูรณ์แต่ไม่ถึงกับการทำงานทั้งหมดหยุดชะงัก - ความสัมพันธ์ระหว่าง วัตถุส่วนของ Composition นั้นวัตถุแต่ละชิ้นจะทำงานโดยพึ่งพาอาศัยกัน ซึ่งถ้าวัตถุชิ้นใดขาดหายไปจะทำให้การทำงานทั้งหมดกระทบกระเทือนไปด้วย
หลักการ Inheritance/Generalization แสดงถึงการสืบทอดคุณสมบัติ ระหว่างคลาสแม่และคลาสลูก ใช้ลูกศรหัวใหญ่และโปร่ง
ตัวอย่างการสร้าง Class Diagram Problem Domain ที่กำหนดคือ “ในคณะวิชาวิทยาศาสตร์ของสถาบันการศึกษาแห่งหนึ่งมีบุคลากรหลายประเภทด้วยกัน ได้แก่ อาจารย์ นักศึกษา และเจ้าหน้าที่ โดยที่อาจารย์แต่ละท่านมีหน้าที่ในการสอนวิชาใดวิชาหนึ่งหรือมากกว่า 1 วิชาก็ได้ และนักศึกษาก็มีหน้าที่ในการศึกษาวิชาวิชาหนึ่ง หรือมากกว่า 1 วิชาก็ได้ ในเวลาเดียวกันเจ้าหน้าที่ของภาควิชา คือ เจ้าหน้าที่ประจำห้องทดลองต่าง ๆ โดยกำหนดว่าใน 1 ห้องทดลองจะต้องมีเจ้าหน้าที่ 1 คนเสมอ”
หา use case จาก problem domain การเรียนการสอน การใช้ห้องทดลอง การดูแลห้องทดลอง
หา object/class จาก use case นักเรียน อาจารย์ ห้องเรียน วิชาเรียน ชั่วโมงเรียน use case การใช้ห้องทดลอง ห้องทดลอง use case การดูแลห้องทดลอง เจ้าหน้าที่
หา actor จาก use case สรุป actors ที่มีจาก use case คือ นักเรียน อาจารย์ เจ้าหน้าที่
เขียน Use Case Diagram <<uses>> การเรียนการสอนในคณะวิทยาศาสตร์ การเรียน การสอน การดูแล ห้องทดลอง การใช้ อาจารย์ นักศึกษา <<uses>> เจ้าหน้าที่ <<uses>> การใช้ห้องเรียน
object/class ทั้งระบบ นักเรียน อาจารย์ เจ้าหน้าที่ ห้องเรียน วิชาเรียน ชั่วโมงเรียน ห้องทดลอง
เขียน Class Diagram เบื้องต้น คณะวิทยาศาสตร์ ห้องเรียน ห้องทดลอง บุคลากร เจ้าหน้าที่ 1..n ชั่วโมงเรียน วิชาเรียน นักเรียน อาจารย์ ใช้ มี เรียน สอน ดูแล 1..1 0..n 0..1
ปรับเปลี่ยน Class Diagram ให้สมบูรณ์ขึ้น คณะวิทยาศาสตร์ ห้องเรียน ห้องทดลอง บุคลากร เจ้าหน้าที่ 1..n ชั่วโมงเรียน วิชาเรียน นักเรียน อาจารย์ ใช้ มี เรียน สอน ดูแล 1..1 0..n 0..1 ห้อง
รูป ที่ทำให้สมบูรณ์ขึ้น โดยการเพิ่ม Attributes และ Functions คณะวิทยาศาสตร์ +ที่ตั้ง ห้อง +หมายเลขห้อง +จองห้อง() +ใช้ห้อง() +เลิกใช้ห้อง() บุคลากร -ชื่อ -อายุ ห้องเรียน +จำนวนที่นั่ง ห้องทดลอง +จำนวนโต๊ะทดลอง เจ้าหน้าที่ -หน้าที่ +ปฎิบัติหน้าที่() นักศึกษา -เกรดเฉลี่ย +เรียน() อาจารย์ -ตำแหน่ง +สอน() ชั่วโมงเรียน -เวลาเริ่ม -เวลาจบ วิชาเรียน -ชื่อวิชา +อธิบาย() มี ใช้ ดูแล เรียน สอน 1..n 0..n 1..1 0..1 รูป ที่ทำให้สมบูรณ์ขึ้น โดยการเพิ่ม Attributes และ Functions
Inheritance การถ่ายทอดคุณสมบัติไปยังClass ลูก Class ที่เป็นต้นแบบเรียกว่า Superclass Class ที่ได้รับการสืบทอดคุณสมบัติเรียกว่า Subclasses Class หนึ่งจะมี Superclass ได้ Class เดียว ซึ่งประโยชน์ของ Inheritance คือ ทำให้มีโครงสร้างที่เป็นระบบ ระเบียบ ปรับเปลี่ยนได้ง่าย ลดเวลาในการพัฒนาระบบ ลดค่าใช้จ่ายในการพัฒนา
Inheritance Class x Java ใช้ extends ชื่อclass ในการสืบทอด class x extends y { } Class y
Inheritance
Inheritance
แบบทดสอบ เขียน class diagram ของระบบรายงานผลการเรียนผ่านเครือข่ายอินเทอร์เน็ต (Grade Online System)
โดยนักศึกษาสามารถดูผลการเรียนในแต่ละภาคเรียนจนถึงภาคเรียนปัจจุบันได้ Problem Domain ระบบต้องมีความสามารถในการแสดงผลการเรียนของนักศึกษาผ่านระบบเครือข่ายอินเตอร์เน็ต โดยนักศึกษาสามารถดูผลการเรียนในแต่ละภาคเรียนจนถึงภาคเรียนปัจจุบันได้
ซึ่งผลการเรียนที่แสดงจะต้องมีความถูกต้องและรักษาสิทธิส่วนบุคคลได้ Problem Domain ซึ่งผลการเรียนที่แสดงจะต้องมีความถูกต้องและรักษาสิทธิส่วนบุคคลได้ ระบบจะต้องสามารถรักษาความปลอดภัยของข้อมูลที่มีอยู่ในฐานข้อมูลได้ไม่ว่าจะมีเหตุการณ์ใด ๆ เกิดขึ้นก็ตาม
Problem Domain สำหรับการกรอกข้อมูลผลการเรียนในแต่ละรายวิชานั้นจะทำโดยเจ้าหน้าที่ฝ่ายทะเบียน ซึ่งผู้ที่จะทำหน้าที่นี้ได้จะต้องเป็นผู้ได้รับอนุญาตจากระบบแล้วเท่านั้น
Problem Domain นอกจากนั้นแล้วอาจารย์ที่ปรึกษาสามารถจะเข้าไปดูผลการเรียนของนักศึกษาที่อยู่ในการดูแลของตนเองได้ด้วย แต่จะต้องได้รับการอนุญาตจากระบบแล้วเช่นกัน