คำถามติดแท็ก liskov-substitution

สำหรับคำถามเกี่ยวกับหลักการแทนที่ Liskov ในการออกแบบเชิงวัตถุ

4
จะระบุ precondition (LSP) ในอินเตอร์เฟสใน C # ได้อย่างไร?
สมมติว่าเรามีส่วนต่อไปนี้ - interface IDatabase { string ConnectionString{get;set;} void ExecuteNoQuery(string sql); void ExecuteNoQuery(string[] sql); //Various other methods all requiring ConnectionString to be set } เงื่อนไขก่อนกำหนดคือ ConnectionString จะต้องตั้งค่า / intialized ก่อนที่จะสามารถเรียกใช้วิธีการใด ๆ เงื่อนไขนี้สามารถทำได้ค่อนข้างโดยผ่านการเชื่อมต่อสายผ่านตัวสร้างถ้า IDatabase เป็นระดับนามธรรมหรือคอนกรีต - abstract class Database { public string ConnectionString{get;set;} public Database(string connectionString){ ConnectionString = connectionString;} public void ExecuteNoQuery(string …

5
หลักการชดเชย Liskov เข้ากันไม่ได้กับการวิปัสสนาหรือการพิมพ์ดีดเป็ด?
ฉันเข้าใจอย่างถูกต้องหรือไม่ว่าหลักการแทน Liskovไม่สามารถสังเกตได้ในภาษาที่วัตถุสามารถตรวจสอบตัวเองเช่นภาษาเป็ดที่พิมพ์เป็นปกติ ยกตัวอย่างเช่นในทับทิมถ้าระดับBสืบทอดจากชั้นเรียนAแล้วสำหรับวัตถุทุกxของA, x.classเป็นไปได้กลับมาAแต่ถ้าxเป็นวัตถุของB, จะไม่กลับมาx.classA นี่คือคำแถลงของ LSP: Let Q (x)เป็นสถานที่ให้บริการสามารถพิสูจน์ได้เกี่ยวกับวัตถุxประเภทT จากนั้นQ (y)ควรจะสามารถพิสูจน์ได้สำหรับวัตถุYประเภทSที่Sเป็นชนิดย่อยของT ดังนั้นใน Ruby เช่น class T; end class S < T; end ละเมิด LSP ในแบบฟอร์มนี้ตามที่เห็นในคุณสมบัติq (x) =x.class.name == 'T' ส่วนที่เพิ่มเข้าไป. หากคำตอบคือ "ใช่" (LSP ไม่เข้ากับการวิปัสสนา) คำถามอื่น ๆ ของฉันจะเป็น: มีรูปแบบที่อ่อนแอของ LSP ที่ "อ่อนแอ" ซึ่งอาจจะเก็บไว้เป็นภาษาไดนามิกอาจอยู่ภายใต้เงื่อนไขเพิ่มเติมบางอย่างและมีชนิดพิเศษเท่านั้น ของคุณสมบัติ ปรับปรุง สำหรับการอ้างอิงนี่เป็นอีกสูตรของ LSP ที่ฉันพบบนเว็บ: ฟังก์ชันที่ใช้พอยน์เตอร์หรือการอ้างอิงไปยังคลาสพื้นฐานต้องสามารถใช้วัตถุของคลาสที่ได้รับโดยไม่ต้องรู้ เเละอีกอย่าง: …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.