ข้อแลกเปลี่ยนระหว่างการสืบทอดกับการประกอบ
เปรียบเทียบการสืบทอดกับการประกอบ และเลือกเครื่องมือให้เหมาะกับการออกแบบ
ข้อแลกเปลี่ยนระหว่างการสืบทอดกับการประกอบ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การสืบทอดเดี่ยวและการสืบทอดหลายรูปแบบ
- ฟังก์ชันเสมือนและ vtable
- คลาสนามธรรมและเมธอดเสมือนบริสุทธิ์
- ข้อแลกเปลี่ยนระหว่างการสืบทอดกับการประกอบ