0Pricing
C++ Academy · บทเรียน

ข้อแลกเปลี่ยนระหว่างการสืบทอดกับการประกอบ

เปรียบเทียบการสืบทอดกับการประกอบ และเลือกเครื่องมือให้เหมาะกับการออกแบบ

ข้อแลกเปลี่ยนระหว่างการสืบทอดกับการประกอบ เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

สองวิธีในการใช้โค้ดซ้ำ

คุณสามารถใช้โค้ดซ้ำโดย สืบทอด จากคลาสอื่น หรือโดย ประกอบ คลาสนั้นเป็นสมาชิก ทั้งสองวิธีต่างก็มีกรณีที่เหมาะสม

การสืบทอด: "เป็น"

ใช้การสืบทอดเมื่อคลาส derived เป็นชนิดพิเศษของคลาส base อย่างแท้จริง

class Vehicle {};
class Car : public Vehicle {};       // a Car IS a Vehicle
class SportsCar : public Car {};

การประกอบ: "มี"

ใช้การประกอบเมื่อความสัมพันธ์เป็นแบบ "มี" หรือ "ใช้"

class Engine {};
class Car {
    Engine engine_;                  // a Car HAS an Engine
};

ข้อแลกเปลี่ยนด้านการเชื่อมโยง

การสืบทอดสร้างการเชื่อมโยงอย่างแน่นหนา — คลาส derived ต้องพึ่งพารายละเอียดภายในของ base การประกอบทำให้โมดูลเป็นอิสระและเปลี่ยนแปลงได้ง่ายกว่า

ความยืดหยุ่น

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

class Logger {
    std::unique_ptr<LogSink> sink_;   // can swap implementations
public:
    void setSink(std::unique_ptr<LogSink> s) { sink_ = std::move(s); }
};

การทดสอบ

วัตถุที่นำมาประกอบสามารถแทนที่ด้วยวัตถุจำลองเพื่อการทดสอบได้ ส่วนคลาส base ที่สืบทอดจะจำลองได้ยากกว่า หากไม่มีฟังก์ชันเสมือนหรือแม่แบบ

ปัญหาคลาส base ที่เปราะบาง

การเปลี่ยนแปลงในคลาส base อาจทำให้คลาส derived จำนวนมากเสียหาย การประกอบจะแยกผลกระทบของการเปลี่ยนแปลงไว้ในคลาสที่นำมาประกอบ

เลือกการสืบทอดเมื่อ

การสืบทอดเหมาะสมเมื่อ:

  • มีความสัมพันธ์แบบ "เป็น" ที่ชัดเจน
  • จำเป็นต้องใช้พหุสัณฐานผ่านอินเทอร์เฟซของ base
  • คลาส base ได้รับการออกแบบมาเพื่อรองรับการสืบทอดโดยเฉพาะ

เลือกการประกอบเมื่อ

การประกอบเหมาะสมเมื่อ:

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

รูปแบบกลยุทธ์

รวมการประกอบเข้ากับพหุสัณฐาน โดยเก็บตัวชี้ไปยังคลาส base ของวัตถุกลยุทธ์ที่คลาสเจ้าของนำมาประกอบ

class Sorter {
    std::unique_ptr<SortStrategy> strategy_;
public:
    void sort(std::vector<int>& v) { strategy_->execute(v); }
};

มิกซ์อินและคลาสนโยบาย

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

อินเทอร์เฟซ + การประกอบ

รูปแบบสมัยใหม่ที่พบได้บ่อยคือ กำหนดอินเทอร์เฟซ (base แบบนามธรรม) แล้วประกอบคลาสรูปธรรมที่นำอินเทอร์เฟซนั้นไปใช้งาน ใช้การสืบทอดสำหรับอินเทอร์เฟซ และใช้การประกอบสำหรับการทำงาน

ตรวจสอบความเข้าใจ

โดยทั่วไป วิธีใดให้ความยืดหยุ่นมากกว่าและมีการเชื่อมโยงหลวมกว่า

สรุปทบทวน

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

คำถามที่พบบ่อย

บทเรียน “ข้อแลกเปลี่ยนระหว่างการสืบทอดกับการประกอบ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ข้อแลกเปลี่ยนระหว่างการสืบทอดกับการประกอบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ข้อแลกเปลี่ยนระหว่างการสืบทอดกับการประกอบ”

เปรียบเทียบการสืบทอดกับการประกอบ และเลือกเครื่องมือให้เหมาะกับการออกแบบ คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ข้อแลกเปลี่ยนระหว่างการสืบทอดกับการประกอบ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสืบทอดเดี่ยวและการสืบทอดหลายรูปแบบ
  2. ฟังก์ชันเสมือนและ vtable
  3. คลาสนามธรรมและเมธอดเสมือนบริสุทธิ์
  4. ข้อแลกเปลี่ยนระหว่างการสืบทอดกับการประกอบ
← กลับไปที่ C++ Academy