Princípy objektovo orientovaného programovania v praxi 1Na jednoduchom príklade demonštrujem spôsob využitia objektovo orientovaných princípov. Ukážem, že v porovnaní s priamočiarym prístupom je objektový zápis prehľadnejší. Využijem aj hlavný princíp techniky „domain driven design“ (DDD), ktorým je „všadeprítomný jazyk“. A ukážem aj spôsob využitia niektorých SOLID princípov.
Zadanie
Vstupom je súbor o pohyboch na účte uložený v CSV súbore:
datum,meno,kredit
18.8.2018,Zdeno,500
19.8.2018,Peter,50
19.8.2018,Zdeno,600
20.8.2018,Peter,20
Úlohu je vytvoriť nový CSV súbor, ktorý obsahuje sumár všetkých pohybov na účte pre daného človeka:
meno,suma_kreditov
Peter,70
Zdeno,1100
Implementácia zadania v Jave využíva BufferedReader na čítanie vstupu a FileWriter na zápis dát do CSV súboru. Jednoduchá a priamočiara implementácia zadania vyzerá takto:
Zdrojový kód obsahuje dve časti: v prvej sa číta CSV súbor a súčasne sa do mapy napočítava sumár a v druhej časti sa sumár zapíše do nového výstupného CSV súboru. Problém spracovania výnimiek je v programe ignorovaný.
Keď sa k takémuto zápisu dostane iný programátor bez vysvetlenia a bez kontextu, musí veľmi podrobne prečítať celý kód, aby zistil, o čo vlastne ide. Doménové pojmy ako „pohyb na účte“ a „sumár pohybov“ tu nenájde. Hoci v zadaní sa vyskytovali.
Priamo v zdrojovom kóde sa dá prečítať, že repository načítajú pohyby na účte (account movements). Tie sa volaním metódy „summaryMovements“ prehodia na súčet účtu (account summary). Napokon sa súčty zapíšu zase do iného repository. Keďže repository obvykle zahŕňajú len zapisovanie alebo čítanie dát, z doménového hľadiska je ťažisko v metóde „summaryMovements“:
Niektoré zjavné nevýhody prvého riešenia by sa dali odstrániť využitím techník procedurálneho programovania. Napríklad import dát z CSV by mohla byť jedna podprocedúra, sumarizácia dát druhá a zápis do CSV tretia podprocedúra. Procedurálna dekompozícia je častý nástroj pri procedurálnom programovaní. Objektovo orientované programovanie však pracuje s pojmami, a teda robí „pojmovú dekompozíciu“. Správna dekompozícia je najťažší mentálny posun pre programátora pri prechode z procedurálneho na objektové programovanie.
Všetky uvedené výhody „správneho riešenia“ hovoria o kvalite kódu. Čiže o tom, ako rýchlo nový programátor pochopí existujúci kód. A o tom, ako rýchlo bude možné zapracovať nové požiadavky. Aj s využitím znovupoužiteľných komponentov, ktoré kvalitný objektový návrh automaticky prináša.
Všetky tieto výhody v praxi častokrát prevalcuje nevýhoda číslo jedna: pomalšia implementácia na začiatku. Táto nevýhoda je však iba iluzórna. Obvykle sa na konci projektu (alebo iterácie) vynoria ďalšie skryté požiadavky, ktoré nikomu počas analýzy a dizajnu nenapadli. Keďže zdrojový kód je už hotový a otestovaný, ide o normálne požiadavky na zmenu (change request). A už v tomto momente sa začnú prejavovať výhody druhého riešenia.
Ako tvrdí Dr. Dobbs: objektovo-orientovaný prístup je nutnou požiadavkou pre agilný vývoj softvéru.
Kompletné zdrojáky uvedených príkladov sú na githube.
Grady Booch: Object-Oriented Analysis and Design with Applications
OO as a Prerequisite to Agile
 
 
Dobrý článok? Chceš dostávať ďalšie?
Už viac ako 6 200 ITečkárov dostáva správy e-mailom. Nemusíš sa báť, nie každé ráno. Len občasne.
Tvoj email neposkytneme 3tím stranám. Posielame naňho len informácie z robime.it. Kedykoľvek sa môžeš odhlásiť.
robime.it existuje od roku 2012 s cieľom byť partnerom IT-čkárov a pomáhať im v odbornom raste.

Robíme to cez budovanie osobných vzťahov, HR službami a podpore IT komunít.

IT Blog – bloguj s nami
Vyhľadávanie pracovných príležitosti
Aktualizácia životopisu
Pohovor na skúšku
SÓLO pre freelancerov
Odporuč nám známeho
Digital footprint – Bloguj na robime.it
Pridať pracovnú ponuku
Prehľad pracovných ponúk

O nás
Kontakt
Ochrana súkromia
[email protected]

source