12
เหตุใด Square ที่สืบทอดจากสี่เหลี่ยมผืนผ้าจึงมีปัญหาหากเราแทนที่เมธอด SetWidth และ SetHeight
หาก Square เป็นรูปแบบสี่เหลี่ยมผืนผ้ากว่าเหตุใด Square จึงไม่สามารถสืบทอดจากสี่เหลี่ยมผืนผ้าได้ หรือทำไมมันถึงออกแบบไม่ดี? ฉันเคยได้ยินคนพูดว่า: หากคุณกำหนดให้ Square ได้รับมาจากสี่เหลี่ยมผืนผ้าดังนั้น Square ควรใช้งานได้ทุกที่ที่คุณคาดว่าสี่เหลี่ยมผืนผ้า ปัญหาคืออะไรที่นี่? และทำไม Square ถึงใช้งานได้ทุกที่ที่คุณคาดหวังสี่เหลี่ยมผืนผ้า? มันจะใช้งานได้เฉพาะเมื่อเราสร้างวัตถุสแควร์และถ้าเราแทนที่วิธี SetWidth และ SetHeight สำหรับสแควร์กว่าทำไมจะมีปัญหาใด ๆ ? ถ้าคุณมีเมธอด SetWidth และ SetHeight บนคลาสพื้นฐานสี่เหลี่ยมผืนผ้าของคุณและถ้าการอ้างอิงสี่เหลี่ยมผืนผ้าของคุณชี้ไปที่สแควร์แล้ว SetWidth และ SetHeight ไม่สมเหตุสมผลเนื่องจากการตั้งค่าอย่างใดอย่างหนึ่งจะเปลี่ยนอีกเพื่อให้ตรงกับมัน ในกรณีนี้สแควร์ล้มเหลวการทดสอบการทดแทน Liskov ด้วยสี่เหลี่ยมผืนผ้าและนามธรรมของการมีการสืบทอดสแควร์จากสี่เหลี่ยมผืนผ้าเป็นสิ่งที่ไม่ดี บางคนสามารถอธิบายข้อโต้แย้งข้างต้นได้หรือไม่ อีกครั้งถ้าเราใช้วิธี SetWidth และ SetHeight มากเกินไปใน Square มันจะไม่แก้ไขปัญหานี้หรือไม่ ฉันเคยได้ยิน / อ่านด้วย: ปัญหาที่แท้จริงคือเราไม่ได้สร้างโมเดลสี่เหลี่ยมผืนผ้า แต่เป็น "สี่เหลี่ยมที่ปรับเปลี่ยนได้" เช่นสี่เหลี่ยมที่มีความกว้างหรือความสูงสามารถปรับเปลี่ยนได้หลังจากการสร้าง …