ฉันชอบความคิดที่ว่าจะมีหลายมรดกที่สนับสนุนในภาษา ส่วนใหญ่มักจะลืมมันโดยเจตนาและ "การแทนที่" ที่ควรจะเป็นอินเตอร์เฟส การเชื่อมต่อก็ไม่ได้ครอบคลุมการสืบทอดหลาย ๆ อันเหมือนกันทั้งหมดและข้อ จำกัด นี้บางครั้งอาจนำไปสู่รหัสสำเร็จรูปมากขึ้น
เหตุผลพื้นฐานเดียวที่ฉันเคยได้ยินเรื่องนี้คือปัญหาเพชรกับชั้นเรียนพื้นฐาน ฉันไม่สามารถยอมรับได้ สำหรับฉันมันหลุดออกมามากมายเช่น "เอาละมันเป็นไปได้ที่จะพลาดมันดังนั้นมันจึงเป็นความคิดที่ไม่ดีโดยอัตโนมัติ" คุณสามารถทำอะไรผิดพลาดในภาษาการเขียนโปรแกรมและฉันหมายถึงอะไร ฉันไม่สามารถทำสิ่งนี้ได้อย่างจริงจังอย่างน้อยก็ไม่ใช่โดยไม่ต้องอธิบายให้ละเอียด
เพียงตระหนักถึงปัญหานี้ 90% ของการต่อสู้ นอกจากนี้ฉันคิดว่าฉันได้ยินบางสิ่งบางอย่างเมื่อหลายปีก่อนเกี่ยวกับวัตถุประสงค์ทั่วไปที่เกี่ยวข้องกับอัลกอริทึม "ซองจดหมาย" หรืออะไรทำนองนั้น (เสียงกริ่งดังขึ้นทุกคนหรือไม่)
ปัญหาเกี่ยวกับเพชรปัญหาของแท้ที่ฉันอาจนึกได้คือถ้าคุณพยายามใช้ห้องสมุดบุคคลที่สามและไม่เห็นว่าสองคลาสที่ไม่เกี่ยวข้องกันดูเหมือนว่าในห้องสมุดนั้นมีคลาสพื้นฐานร่วมกัน แต่นอกเหนือไปจาก เอกสารคุณสมบัติของภาษาที่ง่ายอาจทำให้คุณต้องการประกาศความตั้งใจในการสร้างข้าวหลามตัดก่อนที่จะทำการรวบรวมเพชรให้คุณ ด้วยคุณสมบัติเช่นนี้การสร้างเพชรใด ๆ ก็อาจเป็นการจงใจไม่ประมาทหรือเพราะไม่มีใครรู้ถึงความผิดพลาดนี้
เพื่อให้ทุกคนพูดว่า ... มีเหตุผลจริงหรือที่คนส่วนใหญ่เกลียดชังมรดกหลายอย่างหรือว่ามันเป็นเพียงแค่กลุ่มฮิสทีเรียที่ก่อให้เกิดอันตรายมากกว่าดี? มีบางอย่างที่ฉันไม่เห็นใช่ไหม ขอขอบคุณ.
ตัวอย่าง
รถขยาย WheeledVehicle, KIASpectra ขยายรถยนต์และอิเล็กทรอนิกส์ KIASpectra มีวิทยุ เหตุใด KIASpectra จึงไม่มี Electronic
เพราะมันเป็นอิเล็กทรอนิกส์ การสืบทอดกับการจัดองค์ประกอบควรเป็นความสัมพันธ์แบบ is-a กับความสัมพันธ์แบบ a-a
เพราะมันเป็นอิเล็กทรอนิกส์ มีสายไฟแผงวงจรสวิตช์ ฯลฯ ทั้งหมดขึ้นและลงสิ่งนั้น
เพราะมันเป็นอิเล็กทรอนิกส์ หากแบตเตอรี่ของคุณตายในช่วงฤดูหนาวคุณก็มีปัญหาเช่นเดียวกับล้อทั้งหมดของคุณก็หายไป
ทำไมไม่ใช้อินเทอร์เฟซ ยกตัวอย่างเช่น # 3 ฉันไม่ต้องการที่จะเขียนมากกว่านี้และอีกครั้งและผมจริงๆไม่ต้องการที่จะสร้างบางระดับผู้ช่วยพร็อกซี่ที่แปลกประหลาดที่จะทำนี้อย่างใดอย่างหนึ่ง
private void runOrDont()
{
if (this.battery)
{
if (this.battery.working && this.switchedOn)
{
this.run();
return;
}
}
this.dontRun();
}
(เราไม่ทราบว่าการนำไปปฏิบัตินั้นดีหรือไม่ดี) คุณสามารถจินตนาการได้ว่าอาจมีฟังก์ชั่นหลายอย่างที่เกี่ยวข้องกับระบบอิเล็กทรอนิกส์ที่ไม่เกี่ยวข้องกับสิ่งใดใน WheeledVehicle และในทางกลับกัน
ฉันไม่แน่ใจว่าจะตัดสินตัวอย่างนั้นหรือไม่เนื่องจากมีห้องสำหรับการตีความที่นั่น คุณสามารถคิดในแง่ของเครื่องบินที่ขยายยานพาหนะและ FlyingObject และนกที่ขยายสัตว์และ FlyingObject หรือในแง่ของตัวอย่างที่บริสุทธิ์กว่ามาก
Traits
- พวกมันทำหน้าที่เหมือนอินเทอร์เฟซที่มีการติดตั้งเสริม แต่มีข้อ จำกัด บางอย่างที่ช่วยป้องกันปัญหาเช่นปัญหาเพชรที่เกิดขึ้น
KiaSpectra
ไม่; มันมีเครื่องใช้ไฟฟ้าและอาจจะเป็น(ซึ่งจะขยาย... ) Electronic
ElectronicCar
Car