ความแตกต่างระหว่างการสืบทอดและความหลากหลาย

ผู้เขียน: Laura McKinney
วันที่สร้าง: 1 เมษายน 2021
วันที่อัปเดต: 12 พฤษภาคม 2024
Anonim
ความหลากหลายทางพันธุกรรม วันที่ 7 ต.ค.63
วิดีโอ: ความหลากหลายทางพันธุกรรม วันที่ 7 ต.ค.63

เนื้อหา


การสืบทอดทำให้โค้ดสามารถนำกลับมาใช้ใหม่ได้และพหุสัณฐานคือการเกิดขึ้นของฟังก์ชันหนึ่งที่มีรูปแบบที่แตกต่างกัน ความแตกต่างพื้นฐานระหว่างการรับมรดกและความแตกต่างคือการสืบทอดช่วยให้รหัสที่มีอยู่แล้วสามารถนำกลับมาใช้อีกครั้งในโปรแกรมและความหลากหลายให้กลไกในการตัดสินใจแบบไดนามิกรูปแบบของฟังก์ชั่นที่จะเรียก

  1. แผนภูมิเปรียบเทียบ
  2. คำนิยาม
  3. ความแตกต่างที่สำคัญ
  4. ข้อสรุป

แผนภูมิเปรียบเทียบ

พื้นฐานสำหรับการเปรียบเทียบมรดกความแตกต่าง
ขั้นพื้นฐานการสืบทอดกำลังสร้างคลาสใหม่โดยใช้คุณสมบัติของคลาสที่มีอยู่แล้วความแตกต่างนั้นเป็นอินเตอร์เฟสทั่วไปสำหรับหลายรูปแบบ
การดำเนินงานการสืบทอดจะถูกนำไปใช้กับคลาสความหลากหลายมีการใช้งานโดยทั่วไปในฟังก์ชั่น / วิธีการ
ใช้เพื่อสนับสนุนแนวคิดของการใช้ซ้ำใน OOP และลดความยาวของรหัสอนุญาตให้วัตถุตัดสินใจรูปแบบของฟังก์ชั่นที่จะเรียกใช้เมื่อในเวลารวบรวม (มากไป) และเวลาทำงาน (แทนที่)
รูปแบบการสืบทอดอาจเป็นมรดกเดียวหลายมรดกมรดกหลายระดับมรดกลำดับชั้นและมรดกไฮบริดความแตกต่างอาจเป็นช่วงเวลาที่รวบรวมความแตกต่าง (มากไป) หรือความแตกต่างในเวลาทำงาน (เอาชนะ)
ตัวอย่างตารางเรียนสามารถสืบทอดคุณสมบัติของเฟอร์นิเจอร์ระดับได้เนื่องจากตารางเป็นเฟอร์นิเจอร์คลาส study_table ยังมีฟังก์ชัน set_color () และคลาส Dining_table ยังมีฟังก์ชัน set_color () ดังนั้นรูปแบบของฟังก์ชัน set_color () ที่จะเรียกใช้สามารถตัดสินใจได้ทั้งในเวลารวบรวมและเวลาทำงาน


คำจำกัดความของมรดก:

การสืบทอดเป็นหนึ่งในคุณสมบัติที่สำคัญของ OOP ซึ่งสนับสนุน "การใช้ซ้ำ" ได้อย่างมาก ความสามารถในการนำมาใช้ใหม่สามารถอธิบายได้ว่าเป็นการสร้างคลาสใหม่โดยการนำคุณสมบัติของคลาสที่มีอยู่มาใช้ใหม่ ในการสืบทอดมีคลาสฐานซึ่งสืบทอดโดยคลาสที่ได้รับ เมื่อคลาสสืบทอดคลาสอื่น ๆ สมาชิกของคลาสพื้นฐานจะกลายเป็นสมาชิกของคลาสที่ได้รับ

รูปแบบทั่วไปของการสืบทอดคลาสมีดังต่อไปนี้:

class-class-name ที่ได้รับมา: access-specifier base-class-name {// เนื้อหาของคลาส};

ที่นี่ตัวระบุการเข้าถึงจัดเตรียมโหมดการเข้าถึง (ส่วนตัวสาธารณะป้องกัน) ให้กับสมาชิกในคลาสฐานไปยังคลาสที่ได้รับ หากไม่มีตัวระบุการเข้าถึงตามค่าเริ่มต้นจะถือว่าเป็น "ส่วนตัว" ใน C ++ ถ้าคลาสที่ได้รับคือ "struct" ตัวระบุการเข้าถึงคือ "สาธารณะ" โดยค่าเริ่มต้น

ใน C ++ การสืบทอดสามารถทำได้ในห้ารูปแบบ พวกเขาสามารถจำแนกได้เป็น: -

  • มรดกเดี่ยว (คลาสเดียวเท่านั้น)
  • การสืบทอดหลายรายการ (Superclasses หลายรายการ)
  • การสืบทอดลำดับชั้น (คลาส Super หนึ่งคลาส, คลาสย่อยจำนวนมาก)
  • การสืบทอดหลายอย่าง (มาจากคลาสที่ได้รับ)

ใน Java ชั้นเรียนสืบทอดชั้นอื่น ๆ โดยใช้คำหลัก "ขยาย" ใน Java คลาสพื้นฐานถูกเรียกว่าคลาสซุปเปอร์และคลาสที่ได้รับจะถูกเรียกว่าคลาสย่อย คลาสย่อยไม่สามารถเข้าถึงสมาชิกเหล่านั้นของคลาสฐานซึ่งถูกประกาศเป็น "ส่วนตัว" รูปแบบทั่วไปที่สืบทอดคลาสใน Java มีดังต่อไปนี้


คลาสที่ได้รับคลาสชื่อขยายฐานชั้นชื่อ {// ร่างกายของชั้น};

Java ไม่รองรับการสืบทอดหลายการสืบทอดขณะที่สนับสนุนการลำดับชั้นหลายระดับ ใน Java บางครั้งคลาส super อาจต้องการซ่อนรายละเอียดการนำไปใช้และทำให้บางส่วนของข้อมูลนั้น“ เป็นส่วนตัว” เช่นเดียวกับใน Java คลาสย่อยไม่สามารถเข้าถึงสมาชิกไพรเวตของซูเปอร์คลาสและหากคลาสย่อยต้องการเข้าถึงหรือกำหนดค่าเริ่มต้นสมาชิกเหล่านั้น Java จะจัดเตรียมโซลูชัน คลาสย่อยสามารถอ้างถึงสมาชิกของซูเปอร์คลาสทันทีโดยใช้คำสำคัญ“ super” จำไว้ว่าคุณสามารถเข้าถึงสมาชิกของซูเปอร์คลาสได้ทันที

‘super’ มีสองรูปแบบทั่วไป อย่างแรกคือมันใช้เพื่อเรียกนวกรรมิกของ super class ประการที่สองคือการเข้าถึงสมาชิกของซูเปอร์คลาสที่ถูกซ่อนไว้โดยสมาชิกของคลาสย่อย

// รูปแบบแรกของการเรียกนวกรรมิก คลาส supper_class {supper_class (argument_list) {.. } // ตัวสร้างของคลาส super}; sub_class คลาสขยาย supper_class {sub_class (argument_list) {.. } // คอนสตรัคของ sub_class super (argument_list); // sub_class เรียกตัวสร้างของ super class}};

// วินาทีสำหรับคลาส super supper_class {int i; } คลาส sub_class ขยาย supper_class {int i; sub_class (int a, int b) {super.i = a; // i ของ class super i = b; // i ของคลาสย่อย}};

ความหมายของความแตกต่าง

ความแตกต่างของคำศัพท์นั้นหมายถึง 'หนึ่งฟังก์ชั่น, หลายรูปแบบ' ความแตกต่างคือทำได้ทั้งในเวลารวบรวมและเวลาทำงาน polymorphism เวลาคอมไพล์สามารถทำได้ผ่าน "overloading" ในขณะที่ polymorphism เวลารันสามารถทำได้ผ่าน "overriding"

ความแตกต่างช่วยให้วัตถุที่จะตัดสินใจ "รูปแบบของฟังก์ชั่นที่จะเรียกเมื่อ" ที่ทั้งเวลารวบรวมและเวลาทำงาน
เรามาพูดถึงแนวคิดแรกของการโอเวอร์โหลด ในการโอเวอร์โหลดเรากำหนดฟังก์ชันในคลาสมากกว่าหนึ่งครั้งด้วยชนิดข้อมูลและจำนวนพารามิเตอร์ที่แตกต่างกันในขณะที่ฟังก์ชั่นโอเวอร์โหลดจะต้องมีประเภทผลตอบแทนเดียวกัน ส่วนใหญ่แล้วฟังก์ชั่นการโอเวอร์โหลดเป็นคอนสตรัคเตอร์ของคลาส

คลาสเกินพิกัด {int a, b; สาธารณะ: int เกิน (int x) {// แรกเกิน () คอนสตรัค a = x; กลับมา; } int โอเวอร์โหลด (int x, int y) {// วินาทีโอเวอร์โหลด () คอนสตรัคเตอร์ a = x; ข y =; คืน a * b; }}; int main () {โอเวอร์โหลด O1; O1.overload (20); // แรกโอเวอร์โหลด () คอนสตรัคโทร O1.overload (20,40); // การเรียกใช้ constructor เกินสอง ()

ทีนี้เรามาพูดถึงรูปแบบที่สองของความแตกต่างคือการเอาชนะ แนวคิดของการเอาชนะสามารถนำไปใช้กับฟังก์ชั่นของคลาสที่ยังใช้แนวคิดของการสืบทอด ใน C ++ ฟังก์ชั่นที่จะถูกแทนที่จะถูกนำหน้าด้วยคำหลัก "เสมือน" ในคลาสฐานและนิยามใหม่ในคลาสที่ได้รับด้วยต้นแบบเดียวกันยกเว้นคำสำคัญ "เสมือน"

ชั้นฐาน {สาธารณะ: ฟังก์ชั่นโมฆะเสมือน () {// ฟังก์ชั่นเสมือนจริงของชั้นฐานศาล << "นี่คือฟังก์ชั่นชั้นฐาน ()"; }}; ระดับที่ได้รับ 1: ฐานสาธารณะ {สาธารณะ: เป็นโมฆะฟังก์ชั่น () {// ฟังก์ชั่นเสมือนจริงของระดับฐานที่กำหนดไว้ในชั้นเรียนที่ได้รับมา << "นี่คือฟังก์ชั่นที่ได้รับมาระดับ 1); }}; int main () {base * p, b; ได้รับ 1 d1; * p = & B; p-> funct (); // เรียกใช้ฟังก์ชันคลาสพื้นฐาน () * p = & d1; กลับ 0 }

  1. การสืบทอดกำลังสร้างคลาสที่ได้รับคุณลักษณะจากคลาสที่มีอยู่แล้ว ในทางตรงกันข้าม polymorphism เป็นอินเตอร์เฟสที่สามารถกำหนดได้ในหลายรูปแบบ
  2. การสืบทอดจะดำเนินการในชั้นเรียนในขณะที่ความแตกต่างจะดำเนินการในวิธีการ / ฟังก์ชั่น
  3. เนื่องจากการสืบทอดทำให้คลาสที่ได้รับมาใช้องค์ประกอบและวิธีการที่กำหนดไว้ในคลาสพื้นฐานคลาสที่ได้รับจึงไม่จำเป็นต้องกำหนดองค์ประกอบหรือวิธีการเหล่านั้นอีกครั้งดังนั้นเราจึงสามารถพูดได้ว่ามันจะเพิ่มความสามารถในการใช้รหัสได้อีกครั้ง . ในทางตรงกันข้ามความหลากหลายทำให้มันเป็นไปได้สำหรับวัตถุที่จะตัดสินใจว่ารูปแบบของวิธีการที่มันต้องการที่จะเรียกทั้งเวลารวบรวมและเวลาทำงาน
  4. การสืบทอดสามารถจัดประเภทเป็นการสืบทอดเดี่ยวการสืบทอดหลายการสืบทอดหลายระดับการสืบทอดลำดับชั้นและการสืบทอดไฮบริด ในทางตรงกันข้าม polymorphism จัดเป็น overloading และ overriding

สรุป:

การสืบทอดและความหลากหลายเป็นแนวคิดที่มีความสัมพันธ์กันในขณะที่ความแตกต่างแบบไดนามิกใช้กับชั้นเรียนซึ่งยังใช้แนวคิดของการถ่ายทอดทางพันธุกรรม