|
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
|
||||||
Принцип подстановки Барбары Лисков19.06.2021, 12:22. Показов 4335. Ответов 25
Не понятен пример применения принципа ООП на python:
Главная идея, стоящая за Liskov Substitution Principle в том, что для любого класса клиент должен иметь возможность использовать любой подкласс базового класса, не замечая разницы между ними, и следовательно, без каких-либо изменений поведения программы при выполнении. Это означает, что клиент полностью изолирован и не подозревает об изменениях в иерархии классов. Более формально: Пусть q(x) является свойством, верным относительно объектов x некоторого типа T. Тогда q(y) также должно быть верным для объектов y типа S, где S является подтипом типа T. Проще говоря, это значит, что подкласс, дочерний класс должны соответствовать их родительскому классу или супер классу.
Тщательное обдумывание новых классов в соответствии с LSP помогает нам расширять иерархию классов правильно. Также, LSP способствует OCP. Рассказали бы своими словами, в чем фича данного примера?
0
|
||||||
| 19.06.2021, 12:22 | |
|
Ответы с готовыми решениями:
25
Принцип подстановки принцип подстановки Лисков и open/close - одно и то же? |
|
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
|
|
| 21.06.2021, 19:39 [ТС] | |
|
Viktorrus, несмотря на то, что данное сообщение адресовано не мне, как ТС скажу, что ваши вопросы позволили мне прийти к лучшему пониманию данного принципа.
0
|
|
| 21.06.2021, 19:49 | |
|
Не по теме: Viktorrus, а за что извиняться? На то он и форум, чтобы обсуждать и узнавать что-то новое. Ошибкой было бы оставаться в неведении, имхо.
0
|
|
|
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
|
|
| 21.06.2021, 19:52 [ТС] | |
|
https://itnan.ru/post.php?c=1&p=505430 - статья в картинках для лучшего понимания начинающим данных принципов ООП. Да, инкапсуляция, наследование и полиморфизм - это фундаментальные принципы ООП, но не стоит забывать, что данные принципы применялись и использовались в 80-х годах прошлого столетия. Современные реалии требуют новых абстракций для реализации поставленных задач.
0
|
|
| 21.06.2021, 20:42 | |
|
AlexMarkov, Я все таки попробовал разобраться в Liskov Substitution Principle воспользовавшись предложенной ссылкой. Оказалось я интуитивно оказался прав, Liskov Substitution Principle не всегда работает и может приводить к ошибкам, для исправления которых нужен дополнительный код, вносящий исправление в Liskov Substitution Principle.
Из материала по ссылке в переводе: Кликните здесь для просмотра всего текста
"Если S является подтипом T, то объекты типа T могут быть заменены объектами типа S без изменения корректности программы. Важно: В приведенном выше коде функция calculate всегда возвращает число (произведение a и b). Нарушить принцип подстановки Лискова
Каждый подкласс калькулятора должен реализовать функцию вычисления, которая возвращает число. Давайте нарушим этот принцип, создав функцию вычисления, которая также может вызвать ошибку. В этом примере добавляется класс DividerCalculator (наследуется от Calculator), где переопределенная функция calculate вызывает ошибку, когда Python пытается разделить на ноль. Нет никакого способа исправить этот код без: Рефакторинг иерархии классов или перенос каждого вызова вычисления в код try/except Здесь мы узнаем, что класс DividerCalculator отличается от класса Calculator следующим образом: Умножение двух чисел всегда приводит к числу Деление двух чисел приводит к числу или ошибке Это делает тип результата другим, а следовательно, и интерфейс другим. Умножение и деление-это не одно и то же, когда дело доходит до типа результата, и одно не должно вытекать из другого. Подозрительный код Как вы можете обнаружить подозрительный код, который может нарушить принцип подстановки Лискова? Помимо приведенного выше кода, вот еще несколько плохих примеров: Решите проблему Проблема обычно вызвана наследованием класса S от класса T, где S и T кажутся связанными, но имеют одно или несколько фундаментальных различий в интерфейсе. Вы можете решить эту проблему с помощью таких хаков, как подозрительный код выше, или увеличить или уменьшить уровни абстракции в иерархии классов. Это может привести к большему количеству кода, и это нормально. Когда ваши товарищи по команде начнут жаловаться на это, теперь вы можете объяснить им, почему вы приняли такое решение. Написание правильного кода более важно, чем написание компактного кода. Вернитесь к старому коду и найдите унаследованные классы с переопределенными функциями, которые имеют сбивающие с толку возвращаемые значения, такие как -1, пустые строки, 9999 или функции, вызывающие исключения. Скорее всего, вы обнаружили нарушение принципа замены Лискова." Добавлено через 2 минуты Я дал перевод только текстов, без кодов, подтверждающих текст. Полностью смотрите в оригинале по ссылке. ![]() https://www.pythonforeveryone.... ython.html Добавлено через 14 минут AlexMarkov, В чем тонкость понимания принципа. "Если S является подтипом T, то объекты типа T могут быть заменены объектами типа S без изменения корректности программы." Это работает только в том случае, когда объекты типа T имеют только те атрибуты, которые описаны в классе T. Но нужно понимать, что любой объект типа Т может иметь и другие, индивидуальные атрибуты, присущие только ему. И при замене такого объекта типа Т объектом типа S, эти индивидуальные атрибуты могут не работать для S. Пример этого дан по ссылке. Вывод. Принцип Liskov Substitution Principle можно применять, но только с умом, так как он не всегда может работать, и тогда придется применять дополнительный код, что бы избежать ошибки. О чем и говорится по ссылке. Добавлено через 10 минут AlexMarkov, Может я не верно описал причину ошибки, которая приведена в примере по ссылке. Но не суть важно. Важно понимать, что ошибки при применении этого принципа могут быть. И поэтому нужно это иметь ввиду и быть осторожным в его применении. ![]() Добавлено через 11 минут AlexMarkov, Я остаюсь при своем мнении. Лучший способ избежать ошибок при ООП, это моделировать человеческое мышление, которое отражает реальную действительность. Если ваши рассуждения при решении задачи будут верными, то будет верным и код ООП моделирующий эти рассуждения. При условии, что вы правильно смоделировали (правильно применили ООП).
1
|
|
| 21.06.2021, 20:42 | |
|
Cобытийность. Принцип использования и принцип работы событий в jQ и GCT Подстановки подстановки Подстановки Отображение подстановки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
|
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
https:/ / youtu. be/ VpfFZSUDGnQ. . .
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|