กระบวนทัศน์เชิงวัตถุ
กระบวนทัศน์เชิงวัตถุ (OO) เกิดขึ้นจากแนวคิดเริ่มต้นของแนวทางการเขียนโปรแกรมใหม่ในขณะที่ความสนใจในการออกแบบและวิธีการวิเคราะห์ตามมามากในภายหลัง การวิเคราะห์ OO และกระบวนทัศน์การออกแบบเป็นผลลัพธ์เชิงตรรกะของการนำภาษาโปรแกรม OO มาใช้อย่างกว้างขวาง
ภาษาเชิงวัตถุแรกคือ Simula (การจำลองระบบจริง) ที่ได้รับการพัฒนาในปี พ.ศ. 2503 โดยนักวิจัยที่ศูนย์คอมพิวเตอร์แห่งนอร์เวย์
ในปีพ. ศ. 2513 Alan Kay และกลุ่มวิจัยของเขาที่ Xerox PARC ได้สร้างคอมพิวเตอร์ส่วนบุคคลชื่อ Dynabook และภาษาการเขียนโปรแกรมเชิงวัตถุบริสุทธิ์ตัวแรก (OOPL) - Smalltalk สำหรับการเขียนโปรแกรม Dynabook
ในช่วงทศวรรษที่ 1980 Grady Boochตีพิมพ์บทความชื่อ Object Oriented Design ซึ่งนำเสนอการออกแบบสำหรับภาษาโปรแกรมเป็นหลัก Ada ในรุ่นต่อ ๆ มาเขาได้ขยายแนวคิดของเขาไปสู่วิธีการออกแบบเชิงวัตถุที่สมบูรณ์
ในช่วงปี 1990 Coad รวมแนวคิดเชิงพฤติกรรมเข้ากับวิธีการเชิงวัตถุ
นวัตกรรมที่สำคัญอื่น ๆ ได้แก่ Object Modeling Techniques (OMT) โดย James Rum Baugh และวิศวกรรมซอฟต์แวร์เชิงวัตถุ (OOSE) โดย Ivar Jacobson.
รู้เบื้องต้นเกี่ยวกับ OO Paradigm
กระบวนทัศน์ OO เป็นวิธีการที่สำคัญสำหรับการพัฒนาซอฟต์แวร์ใด ๆ รูปแบบสถาปัตยกรรมส่วนใหญ่หรือรูปแบบเช่นไปป์และตัวกรองที่เก็บข้อมูลและองค์ประกอบตามสามารถนำไปใช้โดยใช้กระบวนทัศน์นี้
แนวคิดและคำศัพท์พื้นฐานของระบบเชิงวัตถุ -
วัตถุ
วัตถุเป็นองค์ประกอบในโลกแห่งความเป็นจริงในสภาพแวดล้อมเชิงวัตถุที่อาจมีอยู่จริงหรือมีอยู่ในแนวความคิด แต่ละวัตถุมี -
เอกลักษณ์ที่แยกความแตกต่างจากอ็อบเจ็กต์อื่นในระบบ
สถานะที่กำหนดคุณสมบัติลักษณะของอ็อบเจ็กต์ตลอดจนค่าคุณสมบัติที่อ็อบเจ็กต์เก็บไว้
พฤติกรรมที่แสดงถึงกิจกรรมที่มองเห็นได้จากภายนอกที่ดำเนินการโดยออบเจ็กต์ในแง่ของการเปลี่ยนแปลงในสถานะของมัน
สามารถจำลองวัตถุได้ตามความต้องการของแอปพลิเคชัน วัตถุอาจมีอยู่จริงเช่นลูกค้ารถยนต์ ฯลฯ ; หรือการดำรงอยู่ในแนวความคิดที่จับต้องไม่ได้เช่นโครงการกระบวนการ ฯลฯ
คลาส
คลาสแสดงถึงกลุ่มของวัตถุที่มีคุณสมบัติลักษณะเดียวกันที่แสดงพฤติกรรมทั่วไป มันให้พิมพ์เขียวหรือคำอธิบายของวัตถุที่สามารถสร้างขึ้นจากมัน การสร้างวัตถุในฐานะสมาชิกของคลาสเรียกว่าการสร้างอินสแตนซ์ ดังนั้นวัตถุคือไฟล์instance ของชั้นเรียน
องค์ประกอบของคลาสคือ -
ชุดของแอ็ตทริบิวต์สำหรับอ็อบเจ็กต์ที่จะสร้างอินสแตนซ์จากคลาส โดยทั่วไปออบเจ็กต์ที่แตกต่างกันของคลาสจะมีความแตกต่างบางประการในค่าของคุณลักษณะ แอตทริบิวต์มักเรียกว่าข้อมูลคลาส
ชุดของการดำเนินการที่แสดงให้เห็นพฤติกรรมของออบเจ็กต์ของคลาส การดำเนินการเรียกอีกอย่างว่าฟังก์ชันหรือวิธีการ
Example
ให้เราพิจารณาคลาสง่ายๆวงกลมที่แสดงถึงวงกลมรูปเรขาคณิตในปริภูมิสองมิติ คุณสมบัติของคลาสนี้สามารถระบุได้ดังนี้ -
- x - พิกัดเพื่อแสดง x - พิกัดของจุดศูนย์กลาง
- y - พิกัดเพื่อแสดงพิกัด y ของจุดศูนย์กลาง
- a เพื่อแสดงรัศมีของวงกลม
การดำเนินการบางอย่างสามารถกำหนดได้ดังนี้ -
- findArea () วิธีการคำนวณพื้นที่
- findCircumference () วิธีคำนวณเส้นรอบวง
- สเกล () วิธีการเพิ่มหรือลดรัศมี
การห่อหุ้ม
Encapsulation คือกระบวนการผูกทั้งแอตทริบิวต์และวิธีการเข้าด้วยกันภายในคลาส ด้วยการห่อหุ้มรายละเอียดภายในของคลาสสามารถซ่อนจากภายนอกได้ อนุญาตให้องค์ประกอบของคลาสสามารถเข้าถึงได้จากภายนอกผ่านทางอินเทอร์เฟซที่จัดเตรียมโดยคลาสเท่านั้น
ความหลากหลาย
Polymorphism เดิมเป็นคำภาษากรีกที่หมายถึงความสามารถในการมีหลายรูปแบบ ในกระบวนทัศน์เชิงวัตถุความหลากหลายหมายถึงการใช้การดำเนินการในรูปแบบต่างๆขึ้นอยู่กับอินสแตนซ์ที่พวกเขากำลังดำเนินการอยู่ ความหลากหลายช่วยให้วัตถุที่มีโครงสร้างภายในต่างกันมีส่วนต่อประสานภายนอกทั่วไป ความหลากหลายมีประสิทธิภาพโดยเฉพาะอย่างยิ่งในขณะที่ใช้การถ่ายทอดทางพันธุกรรม
Example
ให้เราพิจารณาสองคลาส Circle และ Square โดยแต่ละคลาสมีวิธี findArea () แม้ว่าชื่อและวัตถุประสงค์ของวิธีการในคลาสจะเหมือนกัน แต่การใช้งานภายในเช่นขั้นตอนการคำนวณพื้นที่จะแตกต่างกันไปในแต่ละคลาส เมื่อออบเจ็กต์ของคลาส Circle เรียกใช้เมธอด findArea () การดำเนินการจะค้นหาพื้นที่ของวงกลมโดยไม่มีข้อขัดแย้งกับเมธอด findArea () ของคลาส Square
Relationships
ในการอธิบายระบบต้องจัดเตรียมข้อกำหนดทั้งแบบไดนามิก (พฤติกรรม) และแบบสแตติก (ตรรกะ) ของระบบ ข้อกำหนดแบบไดนามิกอธิบายความสัมพันธ์ระหว่างวัตถุเช่นการส่งข้อความ และข้อกำหนดแบบคงอธิบายความสัมพันธ์ระหว่างคลาสเช่นการรวมการเชื่อมโยงและการสืบทอด
ข้อความผ่าน
แอปพลิเคชันใด ๆ ต้องการวัตถุจำนวนมากที่โต้ตอบกันอย่างกลมกลืน ออบเจ็กต์ในระบบอาจสื่อสารกันได้โดยใช้การส่งผ่านข้อความ สมมติว่าระบบมีสองวัตถุ - obj1 และ obj2 วัตถุ obj1 ส่งข้อความไปยังวัตถุ obj2 หาก obj1 ต้องการให้ obj2 ดำเนินการวิธีใดวิธีหนึ่ง
องค์ประกอบหรือการรวม
การรวมหรือองค์ประกอบเป็นความสัมพันธ์ระหว่างคลาสซึ่งคลาสสามารถประกอบขึ้นจากการรวมกันของอ็อบเจ็กต์ของคลาสอื่น ๆ อนุญาตให้วางวัตถุภายในเนื้อหาของคลาสอื่นได้โดยตรง การรวมเรียกว่าความสัมพันธ์ "ส่วนหนึ่งของ" หรือ "มี - a" โดยมีความสามารถในการนำทางจากทั้งหมดไปยังส่วนต่างๆ ออบเจ็กต์รวมคืออ็อบเจ็กต์ที่ประกอบด้วยอ็อบเจ็กต์อื่นอย่างน้อยหนึ่งอ็อบเจ็กต์
สมาคม
สมาคมคือกลุ่มของลิงก์ที่มีโครงสร้างและพฤติกรรมร่วมกัน การเชื่อมโยงแสดงถึงความสัมพันธ์ระหว่างอ็อบเจ็กต์ของคลาสอย่างน้อยหนึ่ง ลิงก์สามารถกำหนดเป็นอินสแตนซ์ของการเชื่อมโยง ระดับของการเชื่อมโยงหมายถึงจำนวนชั้นเรียนที่เกี่ยวข้องกับการเชื่อมต่อ ระดับอาจเป็นยูนารีไบนารี่หรือเทอร์นารี
- ความสัมพันธ์แบบยูนารีเชื่อมต่อออบเจ็กต์ของคลาสเดียวกัน
- ความสัมพันธ์แบบไบนารีเชื่อมต่อออบเจ็กต์ของสองคลาส
- ความสัมพันธ์แบบ ternary เชื่อมต่อออบเจ็กต์ที่มีตั้งแต่สามคลาสขึ้นไป
มรดก
เป็นกลไกที่อนุญาตให้สร้างคลาสใหม่จากคลาสที่มีอยู่โดยการขยายและปรับแต่งความสามารถ คลาสที่มีอยู่เรียกว่าคลาสพื้นฐาน / คลาสพาเรนต์ / ซูเปอร์คลาสและคลาสใหม่เรียกว่าคลาสที่ได้รับ / คลาสย่อย / คลาสย่อย
คลาสย่อยสามารถสืบทอดหรือได้รับคุณลักษณะและวิธีการของ super-class (es) โดยที่ซุปเปอร์คลาสอนุญาต นอกจากนี้คลาสย่อยอาจเพิ่มแอตทริบิวต์และวิธีการของตนเองและอาจปรับเปลี่ยนวิธีการระดับสูง การถ่ายทอดทางพันธุกรรมกำหนดความสัมพันธ์“ เป็น - a”
Example
จากสัตว์เลี้ยงลูกด้วยนมระดับชั้นสามารถได้มาหลายคลาสเช่นมนุษย์แมวสุนัขวัว ฯลฯ มนุษย์แมวสุนัขและวัวล้วนมีลักษณะที่แตกต่างกันของสัตว์เลี้ยงลูกด้วยนม นอกจากนี้แต่ละคนมีลักษณะเฉพาะของตัวเอง อาจกล่าวได้ว่าวัว“ เป็น -” สัตว์เลี้ยงลูกด้วยนม
การวิเคราะห์ OO
ในขั้นตอนการวิเคราะห์เชิงวัตถุของการพัฒนาซอฟต์แวร์ข้อกำหนดของระบบจะถูกกำหนดคลาสจะถูกระบุและยอมรับความสัมพันธ์ระหว่างคลาส จุดมุ่งหมายของการวิเคราะห์ OO คือการเข้าใจโดเมนแอปพลิเคชันและข้อกำหนดเฉพาะของระบบ ผลลัพธ์ของขั้นตอนนี้คือข้อกำหนดข้อกำหนดและการวิเคราะห์เบื้องต้นของโครงสร้างตรรกะและความเป็นไปได้ของระบบ
เทคนิคการวิเคราะห์สามแบบที่ใช้ร่วมกันสำหรับการวิเคราะห์เชิงวัตถุ ได้แก่ การสร้างแบบจำลองวัตถุการสร้างแบบจำลองแบบไดนามิกและการสร้างแบบจำลองเชิงฟังก์ชัน
การสร้างแบบจำลองวัตถุ
การสร้างแบบจำลองวัตถุพัฒนาโครงสร้างคงที่ของระบบซอฟต์แวร์ในแง่ของวัตถุ ระบุอ็อบเจ็กต์คลาสที่สามารถจัดกลุ่มอ็อบเจ็กต์และความสัมพันธ์ระหว่างอ็อบเจ็กต์ นอกจากนี้ยังระบุแอตทริบิวต์หลักและการดำเนินการที่กำหนดลักษณะของแต่ละคลาส
กระบวนการสร้างแบบจำลองวัตถุสามารถมองเห็นได้ในขั้นตอนต่อไปนี้ -
- ระบุวัตถุและจัดกลุ่มเป็นชั้นเรียน
- ระบุความสัมพันธ์ระหว่างชั้นเรียน
- สร้างไดอะแกรมโมเดลวัตถุผู้ใช้
- กำหนดแอตทริบิวต์วัตถุผู้ใช้
- กำหนดการดำเนินการที่ควรดำเนินการกับคลาส
การสร้างแบบจำลองแบบไดนามิก
หลังจากวิเคราะห์พฤติกรรมคงที่ของระบบแล้วจะต้องมีการตรวจสอบพฤติกรรมตามเวลาและการเปลี่ยนแปลงภายนอก นี่คือจุดประสงค์ของการสร้างแบบจำลองแบบไดนามิก
การสร้างแบบจำลองแบบไดนามิกสามารถกำหนดได้ว่าเป็น "วิธีอธิบายว่าวัตถุแต่ละชิ้นตอบสนองต่อเหตุการณ์อย่างไรเหตุการณ์ภายในที่ถูกกระตุ้นโดยวัตถุอื่นหรือเหตุการณ์ภายนอกที่เกิดจากโลกภายนอก"
กระบวนการสร้างแบบจำลองแบบไดนามิกสามารถมองเห็นได้ในขั้นตอนต่อไปนี้ -
- ระบุสถานะของแต่ละวัตถุ
- ระบุเหตุการณ์และวิเคราะห์ความเกี่ยวข้องของการกระทำ
- สร้างแผนภาพแบบจำลองไดนามิกซึ่งประกอบด้วยแผนภาพการเปลี่ยนสถานะ
- แสดงแต่ละสถานะในแง่ของคุณสมบัติของวัตถุ
- ตรวจสอบสถานะ - ไดอะแกรมการเปลี่ยนแปลงที่วาด
การสร้างแบบจำลองการทำงาน
Functional Modeling เป็นองค์ประกอบสุดท้ายของการวิเคราะห์เชิงวัตถุ แบบจำลองการทำงานจะแสดงกระบวนการที่ดำเนินการภายในออบเจ็กต์และวิธีการเปลี่ยนแปลงข้อมูลเมื่อย้ายไปมาระหว่างวิธีการ ระบุความหมายของการดำเนินการของการสร้างแบบจำลองวัตถุและการดำเนินการของการสร้างแบบจำลองแบบไดนามิก แบบจำลองการทำงานสอดคล้องกับแผนภาพกระแสข้อมูลของการวิเคราะห์โครงสร้างแบบดั้งเดิม
กระบวนการสร้างแบบจำลองการทำงานสามารถมองเห็นได้ในขั้นตอนต่อไปนี้ -
- ระบุอินพุตและเอาต์พุตทั้งหมด
- สร้างแผนภาพกระแสข้อมูลที่แสดงการพึ่งพาการทำงาน
- ระบุวัตถุประสงค์ของแต่ละฟังก์ชัน
- ระบุข้อ จำกัด
- ระบุเกณฑ์การเพิ่มประสิทธิภาพ
การออกแบบเชิงวัตถุ
หลังจากขั้นตอนการวิเคราะห์โมเดลแนวความคิดจะได้รับการพัฒนาต่อไปเป็นโมเดลเชิงวัตถุโดยใช้การออกแบบเชิงวัตถุ (OOD) ใน OOD แนวคิดที่ไม่ขึ้นกับเทคโนโลยีในแบบจำลองการวิเคราะห์จะถูกจับคู่กับคลาสที่นำไปใช้งานมีการระบุข้อ จำกัด และอินเทอร์เฟซได้รับการออกแบบทำให้เกิดโมเดลสำหรับโดเมนโซลูชัน จุดมุ่งหมายหลักของการออกแบบ OO คือการพัฒนาสถาปัตยกรรมโครงสร้างของระบบ
ขั้นตอนสำหรับการออกแบบเชิงวัตถุสามารถระบุได้ว่า -
- การกำหนดบริบทของระบบ
- การออกแบบสถาปัตยกรรมระบบ
- การระบุวัตถุในระบบ
- การสร้างแบบจำลองการออกแบบ
- คุณสมบัติของอินเทอร์เฟซของอ็อบเจ็กต์
การออกแบบ OO สามารถแบ่งออกเป็นสองขั้นตอน - การออกแบบแนวคิดและการออกแบบรายละเอียด
Conceptual design
ในขั้นตอนนี้คลาสทั้งหมดจะถูกระบุที่จำเป็นสำหรับการสร้างระบบ นอกจากนี้ยังมีการกำหนดความรับผิดชอบเฉพาะให้กับแต่ละชั้นเรียน แผนภาพคลาสใช้เพื่อชี้แจงความสัมพันธ์ระหว่างคลาสและแผนภาพปฏิสัมพันธ์ใช้เพื่อแสดงการไหลของเหตุการณ์ เป็นที่รู้จักกันในชื่อhigh-level design.
Detailed design
ในขั้นตอนนี้แอตทริบิวต์และการดำเนินการจะถูกกำหนดให้กับแต่ละชั้นเรียนตามแผนภาพปฏิสัมพันธ์ แผนภาพเครื่องสถานะได้รับการพัฒนาเพื่ออธิบายรายละเอียดเพิ่มเติมของการออกแบบ เป็นที่รู้จักกันในชื่อlow-level design.
หลักการออกแบบ
หลักการออกแบบที่สำคัญมีดังต่อไปนี้ -
Principle of Decoupling
เป็นการยากที่จะดูแลระบบด้วยชุดของคลาสที่พึ่งพาซึ่งกันและกันสูงเนื่องจากการปรับเปลี่ยนในคลาสหนึ่งอาจส่งผลให้มีการอัปเดตแบบเรียงซ้อนของคลาสอื่น ๆ ในการออกแบบ OO การมีเพศสัมพันธ์แบบแน่นสามารถกำจัดได้โดยการแนะนำคลาสใหม่หรือการสืบทอด
Ensuring Cohesion
คลาสที่เหนียวแน่นทำหน้าที่ชุดของฟังก์ชันที่เกี่ยวข้องอย่างใกล้ชิด การขาดวิธีการทำงานร่วมกัน - คลาสทำหน้าที่ที่ไม่เกี่ยวข้องแม้ว่าจะไม่ส่งผลกระทบต่อการทำงานของทั้งระบบ ทำให้โครงสร้างทั้งหมดของซอฟต์แวร์ยากต่อการจัดการขยายบำรุงรักษาและเปลี่ยนแปลง
Open-closed Principle
ตามหลักการนี้ระบบควรสามารถขยายเพื่อให้เป็นไปตามข้อกำหนดใหม่ การใช้งานที่มีอยู่และรหัสของระบบไม่ควรแก้ไขอันเป็นผลมาจากการขยายระบบ นอกจากนี้ต้องปฏิบัติตามแนวทางต่อไปนี้ในหลักการเปิด - ปิด -
สำหรับแต่ละคลาสคอนกรีตจะต้องมีการบำรุงรักษาอินเตอร์เฟสและการใช้งานแยกกัน
ในสภาพแวดล้อมแบบมัลติเธรดเก็บแอตทริบิวต์ไว้เป็นส่วนตัว
ลดการใช้ตัวแปรส่วนกลางและตัวแปรคลาสให้น้อยที่สุด