คำถามติดแท็ก inheritance

การสืบทอดเป็นวิธีการนำรหัสของวัตถุที่มีอยู่มาใช้ใหม่หรือเพื่อสร้างชนิดย่อยจากวัตถุที่มีอยู่หรือทั้งสองอย่างขึ้นอยู่กับการสนับสนุนภาษาโปรแกรม

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

9
มรดกเทียบกับองค์ประกอบสำหรับชิ้นหมากรุก
การค้นหาอย่างรวดเร็วของ stackexchange นี้แสดงให้เห็นว่าในองค์ประกอบทั่วไปโดยทั่วไปถือว่ามีความยืดหยุ่นมากกว่าการสืบทอด แต่เช่นเคยขึ้นอยู่กับโครงการ ฯลฯ และมีหลายครั้งที่การสืบทอดเป็นตัวเลือกที่ดีกว่า ฉันต้องการสร้างเกมหมากรุกสามมิติที่แต่ละชิ้นมีตาข่ายอาจเป็นภาพเคลื่อนไหวที่แตกต่างกันไปเรื่อย ๆ ในตัวอย่างที่เป็นรูปธรรมนี้ดูเหมือนว่าคุณสามารถโต้แย้งกรณีสำหรับทั้งสองวิธีฉันผิดหรือเปล่า? การสืบทอดจะมีลักษณะเช่นนี้ (พร้อมตัวสร้างที่เหมาะสม ฯลฯ ) class BasePiece { virtual Squares GetValidMoveSquares() = 0; Mesh* mesh; // Other fields } class Pawn : public BasePiece { Squares GetValidMoveSquares() override; } ซึ่งแน่นอนว่าเป็นไปตามหลักการ "เป็น -a" ในขณะที่องค์ประกอบจะมีลักษณะเช่นนี้ class MovementComponent { virtual Squares GetValidMoveSquares() = 0; } …

2
การออกแบบที่เหมาะสมเพื่อหลีกเลี่ยงการใช้ dynamic_cast?
หลังจากทำการวิจัยบางอย่างฉันไม่สามารถหาตัวอย่างง่ายๆในการแก้ไขปัญหาที่ฉันพบบ่อยได้ สมมติว่าฉันต้องการสร้างแอปพลิเคชั่นเล็ก ๆ ที่ฉันสามารถสร้างSquares, Circles และรูปร่างอื่น ๆ แสดงมันบนหน้าจอปรับเปลี่ยนคุณสมบัติของพวกเขาหลังจากที่เลือกพวกเขาแล้วคำนวณขอบเขตทั้งหมดของพวกเขา ฉันจะทำคลาสโมเดลดังนี้: class AbstractShape { public : typedef enum{ SQUARE = 0, CIRCLE, } SHAPE_TYPE; AbstractShape(SHAPE_TYPE type):m_type(type){} virtual ~AbstractShape(); virtual float computePerimeter() const = 0; SHAPE_TYPE getType() const{return m_type;} protected : const SHAPE_TYPE m_type; }; class Square : public AbstractShape { public: Square():AbstractShape(SQUARE){} …

1
การเปลี่ยนลายเซ็นวิธีการสำหรับการใช้งานคลาสใน PHP
มีการทำงานที่ดีในการขาด Generics ของ PHP ที่ช่วยให้การตรวจสอบรหัสคงที่เพื่อตรวจสอบความสอดคล้องของประเภท? ฉันมีคลาสนามธรรมที่ฉันต้องการ sub-class และบังคับใช้วิธีการอย่างใดอย่างหนึ่งเปลี่ยนจากการรับพารามิเตอร์ชนิดหนึ่งการรับพารามิเตอร์ซึ่งเป็น sub-class ของพารามิเตอร์นั้น abstract class AbstractProcessor { abstract function processItem(Item $item); } class WoodProcessor extends AbstractProcessor { function processItem(WoodItem $item){} } สิ่งนี้ไม่ได้รับอนุญาตใน PHP เพราะมันเปลี่ยนลายเซ็นวิธีที่ไม่ได้รับอนุญาต ด้วย generics สไตล์ Java คุณสามารถทำสิ่งที่ชอบ: abstract class AbstractProcessor<T> { abstract function processItem(T $item); } class WoodProcessor extends AbstractProcessor<WoodItem> { …

5
เราจะรู้ได้อย่างไรว่าองค์ประกอบที่สนับสนุนการวางนัยทั่วไปเป็นตัวเลือกที่ถูกต้องเสมอ
ไม่ว่าวัตถุจะมีอยู่จริงหรือไม่ก็ตามเราสามารถเลือกที่จะสร้างแบบจำลองด้วยวิธีที่แตกต่างกัน เราสามารถใช้การวางนัยทั่วไปหรือการจัดองค์ประกอบตามอำเภอใจในหลายกรณี อย่างไรก็ตามหลักการ GoF ของ "การจัดองค์ประกอบที่โปรดปรานเหนือการวางนัยทั่วไป [sic]" แนะนำให้เราใช้การจัดวาง ดังนั้นเมื่อเราสร้างแบบจำลองตัวอย่างหนึ่งบรรทัดจากนั้นเราสร้างคลาสที่มีสมาชิกสองคน PointA และ PointB ของประเภท Point (องค์ประกอบ) แทนการขยายจุด (ลักษณะทั่วไป) นี่เป็นเพียงตัวอย่างที่เรียบง่ายของวิธีที่เราสามารถเลือกการจัดองค์ประกอบหรือการสืบทอดให้กับโมเดลโดยพลการแม้ว่าวัตถุนั้นจะมีความซับซ้อนมากขึ้น เราจะรู้ได้อย่างไรว่านี่เป็นตัวเลือกที่ถูกต้อง? อย่างน้อยก็สำคัญเพราะอาจมีการปรับโครงสร้างอีกหลายครั้งหากทำผิด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.