Принцип заміщення Ліскова в основному не дозволяє вам зловживати успадкуванням реалізації: ніколи не слід використовувати спадщину лише для повторного використання коду (для цього є склад)! Дотримуючись LSP, ви можете бути впевнені в тому, що між вашим суперкласом та вашим підкласом існує фактично "співвідношення".
Це говорить про те, що ваші підкласи повинні реалізовувати всі методи підкласу аналогічно до реалізації методів у підкласі. Ніколи не слід перекривати метод із реалізацією NOP або повертати null, коли супертип викидає виняток; зазначені в Дизайні за умовами контракту, ви повинні дотримуватись контракту методу з надкласового класу, коли замінюєте метод. Спосіб захисту від порушення цього принципу - ніколи не відміняючи реалізований метод; замість цього витягніть інтерфейс і реалізуйте цей інтерфейс в обох класах.
Принцип поділу інтерфейсу, Принцип єдиної відповідальності та Принцип високої когезії від GRASP так чи інакше пов'язані; вони посилаються на той факт, що суб'єкт господарювання повинен відповідати лише за одне, так що існує лише одна причина змін, так що зміни відбуваються дуже легко.
Насправді йдеться про те, що якщо клас реалізує інтерфейс, він повинен реалізувати та використовувати всі методи цих інтерфейсів. Якщо в цьому конкретному класі є методи, які не потрібні, то інтерфейс не є хорошим і повинен бути розділений на два інтерфейси, у яких є лише методи, необхідні для початкового класу. Це можна вважати з POV, що стосується попереднього принципу тим, що він не дозволяє створювати великі інтерфейси, щоб їх реалізація могла зламати LSP.
Ви можете побачити інверсію залежності в заводській схемі; тут і компонент високого рівня (клієнт), і компонент низького рівня (окремий екземпляр, який слід створити) залежать від абстракції(інтерфейс). Спосіб застосування його в шаруватій архітектурі: не слід визначати інтерфейс для шару в шарі, який реалізується, а в модулі, який викликається. Наприклад, API до рівня джерела даних не повинен записуватися в рівень джерела даних, а в рівень логіки buisness, куди потрібно викликати. Таким чином, рівень джерела даних успадковує / залежить від поведінки, визначеної в логіці buisness (таким чином, інверсії), а не навпаки (як це було б у звичайному порядку). Це забезпечує гнучкість у дизайні, що дозволяє бізнес-логіці працювати без будь-якої зміни коду, з іншим зовсім іншим джерелом даних.