Tri objektovo orientované princípy návrhu, ktoré by ste určite mali použiť! naučiť sa programovať

Kľúčové príjmy:

  • Čo je to hollywoodsky princíp?
  • Čo je to závislosť inverzie?
  • Čo sa myslí pod princípom najmenších znalostí?
  • Čo je zákon Demeters?

Už sme tu hovorili o tom, prečo nás dodržiavanie určitých pravidiel môže zachrániť pred očami modrých očí.

Na jednej strane nepracujeme sami, najmä na väčších projektoch, a naši kolegovia musia byť tiež schopní pracovať s našim kódom bez nervového zrútenia a musia byť schopní ho znova použiť.

Ale samozrejme, ťažíme z toho aj my sami.

Najlepšie je babkin jablkový koláč!

Prečo teda meniť receptúru, keď môžeme problém vyriešiť osvedčeným a predovšetkým známym spôsobom.

Preto sa v tomto článku chceme zaoberať ďalšími tromi objektovo orientovanými princípmi návrhu.

Hollywoodsky princíp

Nevolajte nám, my vám voláme!

Alebo v nemčine: Budeme vás kontaktovať!

Je to spôsob, akým agenti v Hollywoode vidia zhadzovanie kandidátov.

Hneď ako sa kandidát ukáže ako vhodný, agent ho o tom informuje. Naopak, uchádzač sa nemôže dostať k agentovi.

Udalosti sú objektovo orientovaný koncept, ktorý funguje presne podľa tohto princípu.

Napríklad ako fungujú udalosti v textovom procesore?

Textový procesor, napríklad Word, sa skladá z dvoch oblastí.

Na jednej strane oblasť, v ktorej upravujete textový dokument, a na druhej strane ponuka, v ktorej môžete určiť písmo, veľkosť písma alebo farbu textu, napríklad.

Kto je tu agentom a kto je kandidátom?

Namiesto kandidáta a agenta hovoríme v programovaní o predplatiteľovi a pozorovateľovi.

Určite by nebolo efektívne, keby sa oblasť dokumentu neustále pýtala ponuky formátovania, či používateľ upravil formátovanie textu.

Preto hneď ako používateľ preformátuje text pomocou ponuky, spustí sa udalosť, o ktorej je oblasť dokumentu informovaná a následne príslušne zareaguje.

orientované

V tomto príklade preto ponuka formátovania preberá úlohu pozorovateľa (agenta) a oblasťou dokumentu je predplatiteľ, ktorý čaká na oznámenia z ponuky.

Hollywoodsky princíp má osobitný význam v súvislosti s takzvanými rámcami.

Rámec sú programové knižnice, ktoré vývojára zbavujú určitých štandardných úloh.

Napríklad existujú rámce ako Java FX, ktoré za nás preberajú interakciu s používateľom v grafickom používateľskom rozhraní.

Napríklad, ak používateľ klikne na tlačidlo, sme o tejto akcii informovaní prostredníctvom rámca a môžeme podľa toho reagovať.

Princíp inverzie závislostí

Ďalším princípom, ktorý chceme zvážiť, je princíp inverzie závislostí.

Tento princíp dáva do popredia abstrakciu a nezávislú implementáciu.

Nejde nám o elektrinu, ale iba o zástrčku a zásuvku.

Aby sme mohli implementovať tento princíp, používame takzvaný proxy vzor, ​​ktorý umožňuje použitie metódy bez ohľadu na jej konkrétnu implementáciu.

Nástroj, ktorý na to používame, sú rozhrania Java.

Operácie databázy CRUD

Slávnym príkladom princípu inverzie závislostí je pripojenie k databáze prostredníctvom JPA (Java Persistence Architecture).

Spoločné parlamentné zhromaždenie slúži ako rozhranie k použitému databázovému systému.

V každej databáze potrebujeme takzvané CRUD operácie Create, Read, Update a Delete, pomocou ktorých môžeme vytvárať, čítať, upravovať a mazať položky databázy.

Implementácia týchto operácií sa však medzi rôznymi databázovými systémami líši.

Napríklad implementácia týchto operácií v databáze Oracle je iná ako v databáze MySql.

Bez JPA by sme museli napísať samostatnú implementáciu CRUD pre každý databázový systém.

Napríklad by sme potom mali pre každý databázový systém samostatnú metódu ukladania, ako je saveSQL, savePostgresSQL alebo saveOracle. .

A vývojár, ktorý chce použiť operáciu uloženia, by musel zakaždým skontrolovať, ktorý databázový systém sa použije, a v závislosti od toho zavolať správnu metódu CRUD.

Ak by niekto mal potom mať nápad zmeniť databázový systém, sú potrebné príslušné úpravy kódu.

Vďaka rozhraniu JPA sme toho ušetrení. V závislosti na použitom databázovom systéme dokážeme dynamicky ukotviť príslušnú implementáciu na server JPA proxy (aj keď je program spustený).

Vývojár, ktorý chce použiť operáciu CRUD, môže potom zavolať metódy CRUD rozhrania, napríklad save, bez ohľadu na podkladovú implementáciu.

Samotné rôzne implementácie sú navzájom nezávislé.

Princíp najmenších znalostí!

Neraz sme o tom hovorili. Programátori sú leniví a stále hľadajú spôsoby, ako si ušetriť prácu.

Dobrým spôsobom, ako to urobiť, je využiť prácu vykonanú inými vývojármi.

Je to však užitočné, iba ak je čas na oboznámenie sa so zahraničným programovým kódom čo najkratší.

A práve tu vstupuje do hry takzvaný princíp najmenšej znalosti alebo v nemčine princíp málo vedomosti.

Tento princíp má osobitný význam v súvislosti s návrhom API (Application Programming Interface).

Určite to viete aj vy? Ak máte otázku Na koho sa obrátiť Dobrý priateľ alebo cudzinec z pešej zóny?

Pravdepodobne radšej kontaktujete svojho priateľa. Alebo?

A to je presne základ, na ktorom je založený princíp najmenších znalostí, ktorý je známy aj pod menom Demeterov zákon.

Demeter’s Law odporúča, aby sme sa najskôr spýtali priateľa a až potom kontaktovali cudzinca, ak nám náš kamoš nemôže pomôcť.

Kto je priateľ a kto cudzinec?

Určite ste nikdy nepili pivo s metódou, triedou alebo atribútom. Alebo? Ako teda v našich programoch definujeme, kto je priateľ a kto cudzinec?.

Pretože Demiterov zákon je objektovo orientovaný princíp návrhu, musíme určiť, ktoré metódy a atribúty objektu patria našim priateľom.

Je logické, že všetky metódy v tej istej triede sú navzájom priateľské. Vzájomné volanie metód v rámci tej istej triedy preto umožňuje Demiterov zákon.

Kto iný je jeden z našich priateľov?

Rovnako označujeme všetky objekty, ktoré odovzdáme ako parametre, keď voláme metódu ako naši priatelia.

Ďalej všetky objekty (a ich atribúty), ktoré vytvoríme v rámci tej istej triedy, tiež patria do nášho okruhu priateľov.

Indikátorom, že porušujete Demiterov zákon, je, ak má vaša hovorová metóda viac ako jedného (.) Operátora.

Dobre, na príklade si precvičme to, čo sme sa naučili.

Sme v knižnici.

Knižnica sa skladá z políc s knihami.

Na mapovanie tohto objektovo orientovaného v Jave potrebujeme dve triedy. Jedna trieda pre police a jedna trieda pre samotnú knižnicu.

Regály na knihy zjavne patria do knižnice. Preto sú police priateľmi s knižnicou.

Každá polica obsahuje ako atribút počet kníh, ktoré obsahuje.

Atribút number of books je teda priateľom triedy Bookshelf, ale nie triedy Library .

Pretože povedzme, že chceme zistiť počet kníh na desiatej poličke knižnice. Ako by mohlo vyzerať zodpovedajúce volanie metódy?

V našom odvolaní sú dva body. Je zrejmé, že tu porušujeme zákon o Demeters. Atribút „number of books“ nie je v skutočnosti žiadnym priateľom triedy knižnice.

Ako môžeme dosiahnuť, aby bol hovor v súlade so zákonom Demeters?

Aby sme tento problém obišli, musíme do triedy knižnice pridať metódu, ktorá priamo vracia počet kníh na poličke.

Takáto metóda by mohla vyzerať napríklad takto.

Pretože sú police v knižnici, atribút police je priateľom triedy knižnice. Zákon Demeters preto nie je porušený v rámci metódy getAnzahlRegal.

Teraz dostaneme počet kníh na polici 10 pomocou nasledujúceho volania metódy.

Pretože metóda getAnzahlInRegal je priateľkou triedy knižnice, neporušili sme v tomto prípade zákon Demeters.

Záver: V tomto článku ste sa dozvedeli o ďalších troch objektovo-orientovaných princípoch návrhu. Hollywoodsky princíp je základom pre takzvané rámce, ktoré nás v praxi zbavia mnohých opakujúcich sa a často nudných rutinných úloh.

Inverzia závislosti nám umožňuje pracovať s API (Application Programming Interfaces) oddelením definície a implementácie funkcie.

Hlavným záujmom všetkých princípov návrhu je, ale najmä pri princípe najmenších znalostí je jednoduchšie urobiť váš kód opakovane použiteľným, ľahšie pochopiteľným a priaznivejším pre údržbu.

Páčil sa vám článok? Potom nás ihneď sledujte na Facebooku!

Kim Peter

Ahoj, volám sa Kim a chcem sa stať skvelým programátorom. Zúčastňujete sa?