การวิเคราะห์และออกแบบเชิงวัตถุ (OOAD)

Computer Science 26 มีนาคม พ.ศ. 2567 2,336
Home / Articles / 78

การวิเคราะห์และออกแบบเชิงวัตถุ Object-oriented analysis and design (OOAD) เป็นวิธีการ ออกแบบ และวิเคราะห์ การเขียนโปรแกรม ในรูปแบบหนึ่ง ซึ่งจะเกี่ยวข้องกับการเขียนโปรแกรมเชิงวัตถุ Object-oriented programming (OOP) ภาษาที่รองรับการเขียนแบบ OOP ก็อย่างเช่น Java, C#, PHP เป็นต้น

OOP นั้นแตกต่างกับ การเขียนโปรแกรมแบบเดิม (Procedural Programming) ตรงที่ ในการเขียนโปรแกรมแบบเก่าเราจะออกแบบฟังก์ชั่น (Functions) มาแก้ปัญหาต่าง ๆ เป็นขั้นตอนๆ แต่การเขียนโปรแกรมเชิงวัตถุ จะมองทุกอย่างเป็นวัตถุ และจะแก้ปัญหาต่างๆ โดยใช้วัตถุ เช่นเดียวกับในชีวิตประจำวันของมนุษย์ ที่เราจะใช้วัตถุต่างๆ มาตอบสนองความต้องการของเราอยู่เสมอ

แนวคิดของวัตถุ (Object) และคลาส (Class)

คลาส (Class) คือ แนวคิดของอะไรบางอย่าง เช่น รถ บ้าน คอมพิวเตอร์ โดยที่เราจะเห็นได้ว่า "รถ" และ "บ้าน" ที่เรายกตัวอย่างมา ล้วนเป็นสิ่งที่เป็น นามธรรม (Abstruction) หมายถึง เมื่อผมพูดว่า บ้าน ผมหมายถึงแนวคิดของ บ้าน ไม่เจาะจงไปที่บ้านหลังไหน บ้านของใคร บ้านสไตล์แบบไหน เพียงแต่เป็นแนวคิดของ บ้าน เท่านั้น คือ มีกำแพงล้อมรอบ มีประตูเข้าออกได้ มีหน้าต่าง มีหลังคา

วัตถุ (Object) คือ สิ่งที่เกิดจาก Class เช่น "บ้านสีขาวของนายบีในหมู่บ้าน A" เป็นการบอกเฉพาะเจาะจงว่าเป็น วัตถุจริงๆ ที่เป็นรูปธรรม ซึ่งเราสามารถแยกได้ว่า

"บ้านสีขาว" หมายถึง Object หนึ่งที่เกิดจาก Class บ้าน ที่มี คุณลักษณะ (Attribute) ได้แก่ มี "สี" และมี Public Function ที่คอยบอกค่าที่อยู่ใน Attribute "สี" ออกมา คนภายนอกจึงจะสามารถเห็นได้ว่า เป็น บ้านสีขาว

"หมู่บ้าน A" หมายถึง Object หนึ่งที่เกิดจาก Class "หมู่บ้าน" ที่เกิดมาจาก แนวคิดที่ว่า Class บ้าน หลายๆ บ้านมาอยู่รวมกัน จะเรียกว่า "หมู่บ้าน" และมี คุณลักษณะ (Attribute) ได้แก่ "ชื่อหมู่บ้าน" และมี Public Function ที่คอยบอกค่าที่อยู่ใน Attribute "ชื่อหมู่บ้าน" ออกมา คนภายนอกจึงจะสามารถเห็นได้ว่า เป็นหมู่บ้านที่ชื่อ "A"

"นายบี" หมายถึง Object หนึ่งที่เกิดจาก Class "คน" โดยมี คุณลักษณะ (Attribute) ได้แก่ ชื่อ เพศ เหตุผลที่มี เพศ ด้วยก็เพราะ มีการบอกคำนำหน้านาม "นาย" เป็นต้น

ในทาง OOAD จะมีขอบเขตของเหตุการณ์ต่างๆ เรียกว่า "Domain" ซึ่งก็คือ เราจะสนใจแต่ สิ่งที่เกิดขึ้น (Event) ที่อยู่ในขอบเขตที่เราสนใจเท่านั้น เช่น Domain คือ "ห้องเรียน 6/1 โรงเรียน A" เราก็จะสนใจแค่ว่า มีอะไรอยู่ใน ห้องเรียน 6/1 โรงเรียน A บ้าง ซึ่งก็คือ ครู (class) ครูไก่ (obj ของ class ครู) นักเรียน (class) โต๊ะ (class) เก้าอี้ (class) กระดาน (class) โดยที่สิ่งอื่นๆ ภายนอกห้องเรียนจะถูกมองข้ามไป แม้ว่าภายนอกโรงเรียน A ห้อง 6/1 จะมีครูอีกหลายคนที่ชื่อไก่

ความสัมพันธ์ของ ​(Relationship)  ก็คือสิ่งที่  Objects สองตัว กำลังมี ปฏิสัมพันธ์  (Interaction) ร่วมกัน เช่น "นายดำวิ่งบนถนนหมายเลข 12" คือการที่ นายดำ กำลังมีปฏิสัมพันธ์  ซึ่งก็คือการ "วิ่ง" อยู่บน ถนนหมายเลข 12

จำแนก Object และ Class จาก เหตุการณ์ โดยอาศัย 4 Abstraction

1. Classification Abstraction

 เป็นการมองเข้าไปใน Object เพื่อหาว่า Object นี้จัดอยู่ใน Class อะไร เมื่อได้ class ออกมา เราจะเรียก class นั้นๆ ว่าเป็น Fundamental Classes เช่น "นายแดงขับรถ Honda Civic ของเขา"

  • เมื่อเห็น นายแดง ก็รู้ได้ว่า นายแดง จัดอยู่ใน Class คน
  • เมื่อเห็น รถ Honda Civic ก็รู้ได้ว่า จัดอยู่ใน Class รถยนต์
คน รถยนต์
- ชื่อ (Attribute) - ยี่ห้อ (Attribute)
- เพศ (Attribute) - รุ่น (Attribute)
+ บอกชื่อ(); (Function) + บอกยี่ห้อ(); (Function)
+ บอกเพศ(); (Function) + บอกรุ่น(); (Function)

2. Aggregation Abstraction

เป็นการรวมตัวกันของ Fundamental Classes เพื่อให้เกิดสิ่งใหม่ แนวคิดใหม่ เช่น Classes อย่าง ล้อ เครื่องยนต์ ตัวรถ รวมกัน (Composition) กันได้เป็น Class ใหม่ที่ชื่อ "รถยนต์" และเมื่อ จำแนก (Decomposition) ออกมาก็จะได้ว่า Class "รถยนต์" ประกอบด้วย Class ล้อ เครื่องยนต์ ตัวถัง

เราสามารถกำหนด Cardinality ให้กับมัน หมายถึง จำนวนน้อยที่สุด (Minimum) และมากที่สุด (Maximum) ที่จะประกอบกันแล้วทำงานได้ เช่น รถยนต์จะมี ล้อน้อยสุด 4 ล้อ มากสุด 4 ล้อ ถึงจะทำงานได้ ก็จะใส่ 4..4 ดังในภาพ

จะเห็นว่าไม่มีตัวไหนที่น้อยสุดเป็น 0 เลย แบบนี้จะเรียกว่า "Mandatory" คือ ทุกองค์ประกอบจำเป็นต้องมี ถึงจะเป็นรถยนต์ที่ทำงานได้ปกติ หากตัวไหนเป็น 0..1 หรือ 0..n จะเรียกว่า "Optional" คือจะมีหรือไม่มีก็ได้ เช่น เบาะนั่ง เป็นต้น

3. Generalization Abstraction

คือการที่เราเพิ่ม คุณสมบัติ  (Attribute) พิเศษเข้าไปใน Fundamental Class เพื่อให้เกิดเป็นสิ่งใหม่ การที่เราเพิ่มคุณสมบัติพิเศษใหม่เข้าไปเรียกว่าการ "Specialization" หรือ "Inheritance (การถ่ายทอด)" หรือ  ส่วนการละเลยคุณสมบัติพิเศษดังกล่าวไป ก็จะเรียกว่าการ "Generalization"

เช่น Class "คน" นำไป Specialize ได้เป็น ผู้หญิง และ ผู้ชาย เป็นต้น เมื่อนำ Classes ผู้ชาย และ ผู้หญิง ไปทำการ Generalize แล้วก็จะหมายถึง Class "คน" โดยที่ Class ผู้หญิง และ ผู้ชาย จะเรียกว่า "Sub class" ส่วน Class คน จะเรียกว่า "Seed class" หรือ "Super class"

Class ผู้หญิง และ ผู้ชาย ก็จะถูกถ่ายทอดคุณลักษณะ Attributes ทุกอัน จาก Class คน เข้ามา (ไม่สามารถขาด attribute ใด attribute หนึ่ง จาก super class ได้) สามารถต่างกันเพียงแค่ Functions ที่ต่างกัน การที่ subclass มี function ที่ต่างจาก superclass จะเรียกว่า subclass ดังกล่าว มีคุณลักษณะแบบ "Polymorphism"

4. Association Abstraction

เป็นการบอกความสัมพันธ์ระหว่าง Classes โดยจะมีการกำหนด "Cardinality" ซึ่ง หมายถึง จำนวนน้อยที่สุด (Minimum) และมากที่สุด (Maximum) ของความสัมพันธ์นั้นๆ เช่น

คน เป็นเจ้าของ รถยนต์ น้อยที่สุดคือ 0 มากที่สุดคือจำนวนเท่าไหร่ก็ได้ เขียนแทนด้วย n ก็จะได้เป็น "0..n"

ผู้ชาย เป็นคู่สมรส กับผู้หญิงได้ 0 ถึง 1 คน ส่วนผู้หญิงก็จะเป็นคู่สมรสกับผู้ชายได้ 0 ถึง 1 คน ผู้ชายและผู้หญิงจะมีลูก 0 คน หรือมี n คน ก็ได้ แต่ลูกจะมี ผู้ชายและผู้หญิง ซึ่งเป็นพ่อและแม่ ได้เพียง class และ 1 คน

Profile Picture.
  • Name (Pen name): Sunny Jirakit (Sunny420x)
  • Study: Bachelor Degree of Computer Science from Chiang Mai Rajabhat University
  • Personality: Architect (INTJ-T)
  • Experience: JavaScript,  Angular.js, React.js, Next.js  Express.js, Unity C#, Socket.io