สมมติว่าคุณมีสิ่งต่อไปนี้:
+--------+ +------+
| Animal | | Food |
+-+------+ +----+-+
^ ^
| |
| |
+------+ +-------+
| Deer | | Grass |
+------+ +-------+
Deer
สืบทอดจากAnimal
และสืบทอดจากGrass
Food
จนถึงตอนนี้ดีมาก Animal
วัตถุสามารถกินFood
วัตถุ
ทีนี้ลองผสมกันหน่อย ช่วยเพิ่มซึ่งสืบทอดมาจากLion
Animal
+--------+ +------+
| Animal | | Food |
+-+-----++ +----+-+
^ ^ ^
| | |
| | |
+------+ +------+ +-------+
| Deer | | Lion | | Grass |
+------+ +------+ +-------+
ตอนนี้เรามีมีปัญหาเพราะLion
สามารถที่จะกินทั้งDeer
และGrass
แต่Deer
ไม่ได้ มันเป็นFood
Animal
เมื่อใช้หลายมรดกและใช้การออกแบบเชิงวัตถุคุณจะแก้ปัญหานี้ได้อย่างไร
FYI: ฉันใช้http://www.asciiflow.comเพื่อสร้างแผนภาพ ASCII
IHuntable
แกะและวัวเป็นIHerdable
(สามารถควบคุมได้โดยมนุษย์) และ Lion เท่านั้นที่ใช้ IAnimal ซึ่งไม่ได้บ่งบอกถึงอินเทอร์เฟซเหล่านั้น AOE3 รองรับการสอบถามชุดอินเทอร์เฟซที่รองรับโดยวัตถุเฉพาะ (คล้ายกับinstanceof
) ซึ่งอนุญาตให้โปรแกรมสืบค้นความสามารถของมัน