กระบวนทัศน์เชิงวัตถุ

กระบวนทัศน์เชิงวัตถุ (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

ตามหลักการนี้ระบบควรสามารถขยายเพื่อให้เป็นไปตามข้อกำหนดใหม่ การใช้งานที่มีอยู่และรหัสของระบบไม่ควรแก้ไขอันเป็นผลมาจากการขยายระบบ นอกจากนี้ต้องปฏิบัติตามแนวทางต่อไปนี้ในหลักการเปิด - ปิด -

  • สำหรับแต่ละคลาสคอนกรีตจะต้องมีการบำรุงรักษาอินเตอร์เฟสและการใช้งานแยกกัน

  • ในสภาพแวดล้อมแบบมัลติเธรดเก็บแอตทริบิวต์ไว้เป็นส่วนตัว

  • ลดการใช้ตัวแปรส่วนกลางและตัวแปรคลาสให้น้อยที่สุด