OOAD - โมเดลวัตถุ
โมเดลอ็อบเจ็กต์แสดงให้เห็นถึงองค์ประกอบในแอปพลิเคชันซอฟต์แวร์ในแง่ของอ็อบเจ็กต์ ในบทนี้เราจะพิจารณาถึงแนวคิดและคำศัพท์พื้นฐานของระบบเชิงวัตถุ
วัตถุและคลาส
แนวคิดของอ็อบเจ็กต์และคลาสมีการเชื่อมโยงกันภายในและเป็นรากฐานของกระบวนทัศน์เชิงวัตถุ
วัตถุ
วัตถุเป็นองค์ประกอบของโลกแห่งความเป็นจริงในสภาพแวดล้อมเชิงวัตถุที่อาจมีอยู่จริงหรือมีอยู่ในแนวความคิด แต่ละวัตถุมี -
เอกลักษณ์ที่แยกความแตกต่างจากวัตถุอื่น ๆ ในระบบ
สถานะที่กำหนดคุณสมบัติลักษณะของวัตถุตลอดจนค่าของคุณสมบัติที่วัตถุนั้นเก็บไว้
พฤติกรรมที่แสดงถึงกิจกรรมที่มองเห็นได้จากภายนอกที่ดำเนินการโดยวัตถุในแง่ของการเปลี่ยนแปลงในสถานะของมัน
สามารถจำลองวัตถุได้ตามความต้องการของแอปพลิเคชัน วัตถุอาจมีอยู่จริงเช่นลูกค้ารถยนต์ ฯลฯ ; หรือการดำรงอยู่ในแนวความคิดที่จับต้องไม่ได้เช่นโครงการกระบวนการ ฯลฯ
คลาส
คลาสแสดงถึงกลุ่มของวัตถุที่มีคุณสมบัติลักษณะเดียวกันที่แสดงพฤติกรรมทั่วไป มันให้พิมพ์เขียวหรือคำอธิบายของวัตถุที่สามารถสร้างขึ้นจากมัน การสร้างวัตถุในฐานะสมาชิกของคลาสเรียกว่าการสร้างอินสแตนซ์ ดังนั้นวัตถุจึงเป็นตัวอย่างของคลาส
องค์ประกอบของคลาสคือ -
ชุดของแอ็ตทริบิวต์สำหรับอ็อบเจ็กต์ที่จะสร้างอินสแตนซ์จากคลาส โดยทั่วไปออบเจ็กต์ที่แตกต่างกันของคลาสจะมีความแตกต่างบางประการในค่าของคุณลักษณะ แอตทริบิวต์มักเรียกว่าข้อมูลคลาส
ชุดของการดำเนินการที่แสดงให้เห็นพฤติกรรมของออบเจ็กต์ของคลาส การดำเนินการเรียกอีกอย่างว่าฟังก์ชันหรือวิธีการ
Example
ให้เราพิจารณาคลาสง่ายๆ Circle ที่แสดงถึงวงกลมรูปเรขาคณิตในปริภูมิสองมิติ คุณสมบัติของคลาสนี้สามารถระบุได้ดังนี้ -
- x - พิกัดเพื่อแสดงพิกัด x ของจุดศูนย์กลาง
- y - พิกัดเพื่อแสดงพิกัด y ของศูนย์กลาง
- a เพื่อแสดงรัศมีของวงกลม
การดำเนินการบางอย่างสามารถกำหนดได้ดังนี้ -
- findArea () วิธีคำนวณพื้นที่
- findCircumference () วิธีคำนวณเส้นรอบวง
- สเกล () วิธีเพิ่มหรือลดรัศมี
ในระหว่างการสร้างอินสแตนซ์จะมีการกำหนดค่าสำหรับแอตทริบิวต์บางอย่างเป็นอย่างน้อย ถ้าเราสร้างวัตถุ my_circle เราสามารถกำหนดค่าเช่น x-Coord: 2, y-Coord: 3 และ a: 4 เพื่อแสดงสถานะของมัน ตอนนี้ถ้าการดำเนินการมาตราส่วน () ถูกดำเนินการบน my_circle โดยมีค่ามาตราส่วนเป็น 2 ค่าของตัวแปร a จะกลายเป็น 8 การดำเนินการนี้ทำให้สถานะของ my_circle เปลี่ยนแปลงไปกล่าวคือวัตถุได้แสดงพฤติกรรมบางอย่าง
การห่อหุ้มและการซ่อนข้อมูล
การห่อหุ้ม
Encapsulation คือกระบวนการผูกแอตทริบิวต์และวิธีการเข้าด้วยกันภายในคลาส ด้วยการห่อหุ้มรายละเอียดภายในของคลาสสามารถซ่อนจากภายนอกได้ อนุญาตให้องค์ประกอบของคลาสสามารถเข้าถึงได้จากภายนอกผ่านทางอินเทอร์เฟซที่จัดเตรียมโดยคลาสเท่านั้น
การซ่อนข้อมูล
โดยปกติคลาสได้รับการออกแบบมาเพื่อให้ข้อมูล (แอตทริบิวต์) สามารถเข้าถึงได้โดยวิธีการคลาสและหุ้มฉนวนจากการเข้าถึงโดยตรงจากภายนอก กระบวนการหุ้มฉนวนข้อมูลของวัตถุนี้เรียกว่าการซ่อนข้อมูลหรือการซ่อนข้อมูล
Example
ในคลาส Circle การซ่อนข้อมูลสามารถรวมเข้าด้วยกันโดยทำให้แอตทริบิวต์มองไม่เห็นจากภายนอกคลาสและเพิ่มอีกสองวิธีในคลาสเพื่อเข้าถึงข้อมูลคลาส ได้แก่ -
- setValues () วิธีกำหนดค่าให้กับ x-Coord, y-Coord และ a
- getValues () วิธีการดึงค่าของ x-Coord, y-Coord และ a
ที่นี่ข้อมูลส่วนตัวของวัตถุ my_circle ไม่สามารถเข้าถึงได้โดยตรงด้วยวิธีการใด ๆ ที่ไม่ได้ห่อหุ้มภายในคลาส Circle ควรเข้าถึงได้โดยใช้เมธอด setValues () และ getValues () แทน
ข้อความผ่าน
แอปพลิเคชันใด ๆ ต้องใช้วัตถุจำนวนมากที่โต้ตอบกันอย่างกลมกลืน ออบเจ็กต์ในระบบอาจสื่อสารกันโดยใช้การส่งผ่านข้อความ สมมติว่าระบบมีสองอ็อบเจ็กต์: obj1 และ obj2 วัตถุ obj1 ส่งข้อความไปยังวัตถุ obj2 หาก obj1 ต้องการให้ obj2 ดำเนินการวิธีใดวิธีหนึ่ง
คุณสมบัติของการส่งข้อความคือ -
- ข้อความที่ส่งผ่านระหว่างวัตถุสองชิ้นโดยทั่วไปจะเป็นแบบทิศทางเดียว
- การส่งข้อความเปิดใช้งานการโต้ตอบทั้งหมดระหว่างออบเจ็กต์
- การส่งผ่านข้อความเกี่ยวข้องกับการเรียกใช้เมธอดคลาส
- ออบเจ็กต์ในกระบวนการต่างๆอาจเกี่ยวข้องกับการส่งผ่านข้อความ
มรดก
การสืบทอดเป็นกลไกที่อนุญาตให้สร้างคลาสใหม่จากคลาสที่มีอยู่โดยการขยายและปรับแต่งความสามารถ คลาสที่มีอยู่เรียกว่าคลาสพื้นฐาน / คลาสพาเรนต์ / ซูเปอร์คลาสและคลาสใหม่เรียกว่าคลาสที่ได้รับ / คลาสย่อย / คลาสย่อย คลาสย่อยสามารถสืบทอดหรือรับคุณสมบัติและวิธีการของ super-class ได้โดยที่ super-class อนุญาต นอกจากนี้คลาสย่อยอาจเพิ่มแอตทริบิวต์และวิธีการของตนเองและอาจปรับเปลี่ยนวิธีการระดับสูง การถ่ายทอดทางพันธุกรรมกำหนดความสัมพันธ์“ คือ - a”
Example
จากสัตว์เลี้ยงลูกด้วยนมระดับชั้นสามารถได้มาหลายคลาสเช่นมนุษย์แมวสุนัขวัว ฯลฯ มนุษย์แมวสุนัขและวัวล้วนมีลักษณะที่แตกต่างกันของสัตว์เลี้ยงลูกด้วยนม นอกจากนี้แต่ละคนมีลักษณะเฉพาะของตัวเอง อาจกล่าวได้ว่าวัว“ เป็น -” สัตว์เลี้ยงลูกด้วยนม
ประเภทของมรดก
Single Inheritance - คลาสย่อยมาจากซูเปอร์คลาสเดียว
Multiple Inheritance - คลาสย่อยมาจากคลาสซุปเปอร์มากกว่าหนึ่งคลาส
Multilevel Inheritance - คลาสย่อยมาจากคลาสซุปเปอร์ซึ่งจะมาจากคลาสอื่นและอื่น ๆ
Hierarchical Inheritance - คลาสมีคลาสย่อยจำนวนหนึ่งซึ่งแต่ละคลาสอาจมีคลาสย่อยตามมาโดยดำเนินการต่อไปในหลายระดับเพื่อสร้างโครงสร้างต้นไม้
Hybrid Inheritance - การรวมกันของการสืบทอดหลายระดับและหลายระดับเพื่อสร้างโครงสร้างตาข่าย
รูปต่อไปนี้แสดงตัวอย่างของการสืบทอดประเภทต่างๆ
ความแตกต่าง
Polymorphism เดิมเป็นคำภาษากรีกที่หมายถึงความสามารถในการมีหลายรูปแบบ ในกระบวนทัศน์เชิงวัตถุความหลากหลายหมายถึงการใช้การดำเนินการในรูปแบบต่างๆขึ้นอยู่กับอินสแตนซ์ที่พวกเขากำลังดำเนินการอยู่ ความหลากหลายช่วยให้วัตถุที่มีโครงสร้างภายในต่างกันมีส่วนต่อประสานภายนอกทั่วไป ความหลากหลายมีประสิทธิผลโดยเฉพาะอย่างยิ่งในขณะที่ใช้การถ่ายทอดทางพันธุกรรม
Example
ให้เราพิจารณาสองคลาส Circle และ Square โดยแต่ละคลาสมีวิธี findArea () แม้ว่าชื่อและวัตถุประสงค์ของวิธีการในชั้นเรียนจะเหมือนกัน แต่การใช้งานภายในเช่นขั้นตอนการคำนวณพื้นที่จะแตกต่างกันไปในแต่ละคลาส เมื่อออบเจ็กต์ของคลาส Circle เรียกใช้เมธอด findArea () การดำเนินการจะค้นหาพื้นที่ของวงกลมโดยไม่มีข้อขัดแย้งกับเมธอด findArea () ของคลาส Square
ลักษณะทั่วไปและความเชี่ยวชาญ
การกำหนดลักษณะทั่วไปและความเชี่ยวชาญเป็นตัวแทนของลำดับชั้นของความสัมพันธ์ระหว่างคลาสโดยที่คลาสย่อยสืบทอดมาจากซูเปอร์คลาส
ลักษณะทั่วไป
ในขั้นตอนการวางนัยทั่วไปลักษณะทั่วไปของคลาสจะถูกรวมเข้าด้วยกันเพื่อสร้างคลาสในลำดับชั้นระดับที่สูงขึ้นกล่าวคือคลาสย่อยจะถูกรวมเข้าด้วยกันเพื่อสร้างซุปเปอร์คลาสทั่วไป มันแสดงถึงความสัมพันธ์แบบ“ เป็น - แบบ - ของ” ตัวอย่างเช่น“ รถยนต์เป็นพาหนะทางบกชนิดหนึ่ง” หรือ“ เรือเป็นพาหนะทางน้ำ”
ความเชี่ยวชาญ
ความเชี่ยวชาญเป็นกระบวนการย้อนกลับของลักษณะทั่วไป ที่นี่คุณสมบัติที่แตกต่างของกลุ่มของวัตถุถูกใช้เพื่อสร้างคลาสเฉพาะจากคลาสที่มีอยู่ กล่าวได้ว่าคลาสย่อยเป็นเวอร์ชันพิเศษของซูเปอร์คลาส
รูปต่อไปนี้แสดงตัวอย่างของลักษณะทั่วไปและความเชี่ยวชาญ
ลิงค์และการเชื่อมโยง
ลิงค์
ลิงก์แสดงถึงการเชื่อมต่อที่อ็อบเจ็กต์ทำงานร่วมกับอ็อบเจ็กต์อื่น Rumbaugh ได้ให้คำจำกัดความว่าเป็น "การเชื่อมต่อทางกายภาพหรือแนวคิดระหว่างวัตถุ" ผ่านลิงก์วัตถุหนึ่งอาจเรียกใช้วิธีการหรือนำทางผ่านวัตถุอื่น ลิงก์แสดงความสัมพันธ์ระหว่างวัตถุสองชิ้นขึ้นไป
สมาคม
การเชื่อมโยงเป็นกลุ่มของลิงก์ที่มีโครงสร้างและพฤติกรรมร่วมกัน การเชื่อมโยงแสดงถึงความสัมพันธ์ระหว่างอ็อบเจ็กต์ของคลาสอย่างน้อยหนึ่งคลาส ลิงก์สามารถกำหนดเป็นอินสแตนซ์ของการเชื่อมโยง
ปริญญาสมาคม
ระดับของการเชื่อมโยงหมายถึงจำนวนชั้นเรียนที่เกี่ยวข้องกับการเชื่อมต่อ ปริญญาอาจเป็นยูนารีไบนารี่หรือเทอร์นารี
ก unary relationship เชื่อมต่อออบเจ็กต์ของคลาสเดียวกัน
ก binary relationship เชื่อมต่อออบเจ็กต์ของสองคลาส
ก ternary relationship เชื่อมต่อออบเจ็กต์ตั้งแต่สามคลาสขึ้นไป
อัตราส่วนการเต้นของหัวใจของสมาคม
จำนวนสมาชิกของการเชื่อมโยงไบนารีหมายถึงจำนวนอินสแตนซ์ที่เข้าร่วมในการเชื่อมโยง อัตราส่วนคาร์ดินาลลิตี้มีสามประเภท ได้แก่ -
One–to–One - อ็อบเจ็กต์เดียวของคลาส A เชื่อมโยงกับอ็อบเจ็กต์เดียวของคลาส B
One–to–Many - อ็อบเจ็กต์เดียวของคลาส A เชื่อมโยงกับอ็อบเจ็กต์หลายคลาส B
Many–to–Many - ออบเจ็กต์ของคลาส A อาจเชื่อมโยงกับอ็อบเจ็กต์คลาส B จำนวนมากและในทางกลับกันอ็อบเจ็กต์ของคลาส B อาจเชื่อมโยงกับอ็อบเจ็กต์คลาส A
การรวมหรือองค์ประกอบ
การรวมหรือองค์ประกอบเป็นความสัมพันธ์ระหว่างคลาสที่คลาสสามารถประกอบขึ้นจากการรวมกันของอ็อบเจ็กต์ของคลาสอื่น ๆ อนุญาตให้วางวัตถุภายในเนื้อหาของคลาสอื่นได้โดยตรง การรวมเรียกว่าความสัมพันธ์ "ส่วนหนึ่งของ" หรือ "มี - a" โดยมีความสามารถในการนำทางจากทั้งหมดไปยังส่วนต่างๆ ออบเจ็กต์รวมคืออ็อบเจ็กต์ที่ประกอบด้วยอ็อบเจ็กต์อื่นอย่างน้อยหนึ่งอ็อบเจ็กต์
Example
ในความสัมพันธ์“ รถยนต์มี - มอเตอร์” รถยนต์คือวัตถุทั้งหมดหรือมวลรวมและมอเตอร์เป็น“ ส่วนหนึ่งของ” ของรถ การรวมตัวอาจแสดงถึง -
Physical containment - ตัวอย่างคอมพิวเตอร์ประกอบด้วยจอภาพซีพียูเมาส์แป้นพิมพ์และอื่น ๆ
Conceptual containment - ตัวอย่างผู้ถือหุ้นมี - หุ้น
ประโยชน์ของ Object Model
ตอนนี้เราได้ผ่านแนวคิดหลักที่เกี่ยวข้องกับการวางแนววัตถุแล้วมันก็คุ้มค่าที่จะสังเกตข้อดีที่โมเดลนี้มีให้
ประโยชน์ของการใช้แบบจำลองวัตถุคือ -
ช่วยในการพัฒนาซอฟต์แวร์ได้เร็วขึ้น
ง่ายต่อการบำรุงรักษา สมมติว่าโมดูลเกิดข้อผิดพลาดจากนั้นโปรแกรมเมอร์สามารถแก้ไขโมดูลนั้นได้ในขณะที่ส่วนอื่น ๆ ของซอฟต์แวร์ยังคงทำงานอยู่
รองรับการอัพเกรดที่ค่อนข้างยุ่งยาก
ช่วยให้สามารถใช้วัตถุการออกแบบและฟังก์ชันซ้ำได้
ช่วยลดความเสี่ยงในการพัฒนาโดยเฉพาะอย่างยิ่งในการรวมระบบที่ซับซ้อน