Запитання з тегом «liskov-substitution»

Питання про принцип заміщення Ліскова в об'єктно-орієнтованому дизайні.

10
Це порушення принципу заміни Ліскова?
Скажімо, у нас є список суб'єктів Завдання та ProjectTaskпідтип. Завдання можуть бути закриті в будь-який час, за винятком випадків, ProjectTasksколи вони не можуть бути закриті, коли вони мають статус Почато. Користувальницький інтерфейс повинен гарантувати, що можливість закрити розпочатий доступ ProjectTaskніколи не доступна, однак у домені є деякі гарантії: public class …

8
LSP проти OCP / Liskov Заміна VS Open Close
Я намагаюся зрозуміти тверді принципи ООП і дійшов висновку, що LSP і OCP мають деякі подібності (якщо не сказати більше). принцип відкритого / закритого типу визначає, що "програмні об'єкти (класи, модулі, функції тощо) повинні бути відкритими для розширення, але закритими для модифікації". LSP простими словами зазначає, що будь-який примірник Fooможе …

3
Яка різниця між підкласом і підтипом?
Відповідь на це запитання щодо принципу заміни Ліскова має найвищі оцінки для розмежування термінів підтип та підклас . Це також вказує на те, що деякі мови поєднують ці дві, тоді як інші - ні. Для об'єктно-орієнтованих мов, які мені найбільше знайомі (Python, C ++), "type" і "class" є синонімічними поняттями. …

14
Чи існує мовна чи дизайнерська схема, яка дозволяє * видаляти * поведінку об'єктів чи властивості в ієрархії класів?
Відомий недолік традиційних ієрархій класів полягає в тому, що вони погані, коли йдеться про моделювання реального світу. Як приклад, намагаючись представити види тварин класами. У цьому насправді є кілька проблем, але одна, яку я ніколи не бачив, це рішення, коли підклас «втрачає» поведінку або властивість, визначені в суперкласі, як пінгвін, …

9
Що може піти не так, якщо порушено принцип заміни Ліскова?
Я слідкував за цим високоголосним питанням щодо можливого порушення принципу заміни Ліскова. Я знаю, що таке принцип заміни Ліскова, але все ще не ясно в моєму розумінні, що може піти не так, якщо я як розробник не замислююся над принципом під час написання об'єктно-орієнтованого коду.

5
Чи порушують особливі випадки з запасною системою Принцип заміни Ліскова?
Скажімо, у мене є інтерфейс FooInterfaceіз таким підписом: interface FooInterface { public function doSomething(SomethingInterface something); } І конкретний клас, ConcreteFooякий реалізує цей інтерфейс: class ConcreteFoo implements FooInterface { public function doSomething(SomethingInterface something) { } } Я хотів би ConcreteFoo::doSomething()зробити щось унікальне, якщо він передається спеціальному типу SomethingInterfaceоб'єкта (скажімо, він називається …

3
Як посилення передумов і ослаблення посткондукцій порушує принцип заміни Ліскова?
Я читав, що принцип заміни Ліскова порушується, якщо: Передумови посилюються, або Послідовності ослаблені Але я ще не розумію, як ці два пункти порушили б принцип заміни Ліскова. Може хтось, будь-ласка, поясніть на прикладі. Зокрема, як будь-яка з перерахованих вище умов спричинить ситуацію, коли об'єкт підкласу не може бути замінений об’єктом …

3
Чи існує конкретна назва парадоксу «Квадратний спадок від прямокутника»?
Певний збій OOP показаний із класом Square, що успадковується від Rectangle, де логічно Square є спеціалізацією прямокутника, і тому слід успадковувати його, але все розпадається при спробі змінити довжину або ширину квадрата. Чи є конкретний термін для опису того, що йде в цьому випадку не так?

3
Чи порушує державний зразок Принцип заміни Ліскова?
Це зображення взято із застосування дизайну та шаблонів, керованих доменом: із прикладами в C # та .NET Це діаграма класів для шаблону стану, в якій SalesOrderможе мати різні стани протягом свого життя. Дозволені лише певні переходи між різними станами. Тепер OrderStateклас - це abstractклас, і всі його методи успадковуються підкласам. …

1
Чи застосовується Принцип заміщення Ліскова також для класів, що реалізують інтерфейс?
LSP заявляє, що класи повинні бути замінними для їх базових класів, тобто похідні та базові класи повинні бути семантично еквівалентними. Але чи застосовується також LSP для класів, що реалізують інтерфейс? Іншими словами, якщо метод інтерфейсу, реалізований класом, семантично відрізняється від того, що очікує, що це буде користувач, чи вважатиметься це …

2
Реальний світ - Принцип заміни Ліскова
Передумови: я розробляю рамки для обміну повідомленнями. Ця рамка дозволить: відправлення повідомлень через службову шину підписавшись на черги на шині повідомлень передплатити теми на шині повідомлень Наразі ми використовуємо RabbitMQ, але я знаю, що ми найближчим часом перейдемо до службової шини Microsoft (у приміщенні). Я планую створити набір інтерфейсів та …


1
Як перевірити принцип заміщення Ліскова в ієрархії спадкування?
Натхненний цією відповіддю: Принцип заміщення Ліскова вимагає цього Передумови не можна посилити в підтипі. Послідовності не можуть бути ослаблені в підтипі. Інваріанти супертипу повинні зберігатися в підтипі. Обмеження історії ("правило історії"). Об'єкти вважаються модифікованими лише завдяки їх методам (інкапсуляція). Оскільки підтипи можуть вводити методи, відсутні в супертипі, то введення цих …

2
Стек, що розширює LinkedList. Порушення принципу заміни Ліскова?
Клас LinkedList існує з такими функціями, як add_first (), add_last (), add_after (), remove_first (), remove_last () та remove () Тепер існує клас Stack, який забезпечує такі функції, як push (), pop (), peek () або top (), і для реалізації цих методів він розширює методи класу LinkedList. Це порушення …

6
Чи можна вирішити задачу кола-еліпса шляхом обернення відношення?
Маючи CircleсягатиEllipse перерв в Ліски Substition принципі , тому що вона змінює постусловіем , а саме: ви можете встановити X і Y незалежно один від одного , щоб намалювати еліпс, але X завжди має дорівнювати Y для кіл. Але хіба тут проблема не спричинена тим, що Circle є підтипом Еліпса? …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.