logo

SOLID Principy v programování: Pochopte s příklady ze skutečného života

Ve vývoji softwaru, Objektově orientovaný design hraje klíčovou roli, pokud jde o psaní flexibilního, škálovatelného, ​​udržovatelného a opakovaně použitelného kódu. Existuje tolik výhod používání OOD, ale každý vývojář by měl také znát princip SOLID pro dobrý objektově orientovaný návrh v programování. Princip SOLID zavedl Robert C. Martin, také známý jako Uncle Bob a jedná se o standard kódování v programování. Tento princip je zkratkou pěti níže uvedených principů:

  • Princip jednotné odpovědnosti (SRP)
  • Princip otevřený/uzavřený
  • Liskovův substituční princip (LSP)
  • Interface Segregation Principle (ISP)
  • Princip inverze závislosti (DIP)

SOLID-Princip-in-Programming-Pochopte-s-reálnými-životními-příklady



Princip SOLID pomáhá snižovat těsné spojení. Těsná vazba znamená, že skupina tříd je na sobě vysoce závislá, čemuž byste se měli ve svém kódu vyhnout.

  • Opakem těsné vazby je volná vazba a váš kód je považován za dobrý kód, pokud má volně spojené třídy.
  • Volně propojené třídy minimalizují změny ve vašem kódu, napomáhají tomu, aby byl kód více znovupoužitelný, udržovatelný, flexibilní a stabilní. Nyní pojďme diskutovat jeden po druhém o těchto principech…

1. Princip jednotné odpovědnosti

Tento princip říká, že Třída by měla mít pouze jeden důvod ke změně což znamená, že každá třída by měla mít jedinou odpovědnost nebo jedinou práci nebo jediný účel. Jinými slovy, třída by měla mít v softwarovém systému pouze jednu práci nebo účel.

jak vycentrovat obrázek na css

Pojďme pochopit princip jednotné odpovědnosti na příkladu:



Představte si pekaře, který je zodpovědný za pečení chleba. Úkolem pekaře je soustředit se na pečení chleba a zajistit, aby byl chléb vysoce kvalitní, správně upečený a splňoval standardy pekárny.

  • Pokud by však pekař odpovídal také za správu zásob, objednávání zásob, obsluhu zákazníků a úklid pekárny, došlo by k porušení SRP.
  • Každý z těchto úkolů představuje samostatnou odpovědnost a jejich kombinací by mohlo být ohroženo zaměření a účinnost pekaře při pečení chleba.
  • Pro dodržení SRP by pekárna mohla přidělit různé role různým jednotlivcům nebo týmům. Například může existovat samostatná osoba nebo tým odpovědný za správu zásob, další za objednávání zásob, další za obsluhu zákazníků a další za úklid pekárny.

2. Princip otevřený/uzavřený

Tento princip říká, že Softwarové entity (třídy, moduly, funkce atd.) by měly být otevřené pro rozšíření, ale uzavřené pro úpravy což znamená, že byste měli být schopni rozšířit chování třídy, aniž byste jej upravovali.

Pojďme pochopit otevřený/uzavřený princip na příkladu:



Představte si, že máte třídu s názvemPaymentProcessor>který zpracovává platby za internetový obchod. Zpočátku,PaymentProcessor>třída podporuje pouze zpracování plateb pomocí kreditních karet. Chcete však rozšířit jeho funkčnost, aby podporovala také zpracování plateb pomocí PayPal.

nohy vs noha

Místo úpravy stávajícíhoPaymentProcessor>třídy pro přidání podpory PayPal, můžete vytvořit novou třídu s názvemPayPalPaymentProcessor>která rozšiřujePaymentProcessor>třída. Tímto způsobem,PaymentProcessor>třída zůstává uzavřená pro modifikace, ale otevřená pro rozšíření, v souladu s principem Open-Closed

3. Liskovův substituční princip

Princip zavedla Barbara Liskov v roce 1987 a podle tohoto principu Odvozené nebo podřízené třídy musí být nahraditelné svými základními nebo nadřazenými třídami . Tento princip zajišťuje, že jakákoli třída, která je potomkem nadřazené třídy, by měla být použitelná místo jejího rodiče bez jakéhokoli neočekávaného chování.

Pojďme pochopit Liskovův substituční princip na příkladu:

Jedním z klasických příkladů tohoto principu je obdélník se čtyřmi stranami. Výška obdélníku může mít libovolnou hodnotu a šířka může být jakákoli hodnota. Čtverec je obdélník se stejnou šířkou a výškou. Můžeme tedy říci, že můžeme rozšířit vlastnosti třídy obdélníku na třídu čtvercovou.

Chcete-li to provést, musíte zaměnit podřízenou (čtvercovou) třídu za nadřazenou (obdélníkovou) třídu, aby odpovídala definici čtverce se čtyřmi stejnými stranami, ale odvozená třída neovlivňuje chování nadřazené třídy, takže pokud to uděláte že poruší zásadu Liskovské substituce.

python nový řádek

4. Princip segregace rozhraní

Tento princip je prvním principem, který platí pro rozhraní namísto tříd v SOLID a je podobný principu jediné odpovědnosti. Uvádí to nenuťte žádného klienta, aby implementoval rozhraní, které je pro něj irelevantní . Zde je vaším hlavním cílem zaměřit se na to, abyste se vyhnuli tlustému rozhraní a upřednostnili mnoho malých rozhraní specifických pro klienta. Měli byste upřednostňovat mnoho klientských rozhraní před jedním obecným rozhraním a každé rozhraní by mělo mít specifickou odpovědnost.

Pojďme pochopit princip segregace rozhraní na příkladu:

Předpokládejme, že vstoupíte do restaurace a jste čistý vegetarián. Číšník v této restauraci vám dal jídelní lístek, který obsahuje vegetariánská jídla, nevegetariánská jídla, nápoje a sladkosti.

  • V tomto případě byste jako zákazník měli mít jídelní lístek, který obsahuje pouze vegetariánské položky, nikoli vše, co v jídle nesníte. Zde by se menu mělo lišit pro různé typy zákazníků.
  • Společný nebo obecný jídelní lístek pro každého lze rozdělit na více karet namísto jedné. Použití tohoto principu pomáhá snížit nežádoucí účinky a frekvenci požadovaných změn.

5. Princip inverze závislosti

Princip inverze závislosti (DIP) je princip v objektově orientovaném návrhu, který to říká Moduly vysoké úrovně by neměly záviset na modulech nízké úrovně. Obojí by mělo záviset na abstrakcích . Kromě toho by abstrakce neměly záviset na detailech. Podrobnosti by měly záviset na abstrakcích.

  • Jednodušeji řečeno, DIP navrhuje, že třídy by se měly spoléhat na abstrakce (např. rozhraní nebo abstraktní třídy) spíše než na konkrétní implementace.
  • To umožňuje flexibilnější a oddělený kód, což usnadňuje změny implementací bez ovlivnění jiných částí kódové základny.

Pojďme pochopit Princip inverze závislosti na příkladu:

řetězec podřetězec

V týmu vývoje softwaru závisí vývojáři na abstraktním systému správy verzí (např. Git), aby mohli spravovat a sledovat změny v kódové základně. Nezávisí na konkrétních detailech toho, jak Git interně funguje.

To umožňuje vývojářům soustředit se na psaní kódu, aniž by museli rozumět složitosti implementace správy verzí.