Skip to main content

Command Palette

Search for a command to run...

OOP: Přežitek minulosti, nebo nutné zlo?

Updated
4 min read
OOP: Přežitek minulosti, nebo nutné zlo?

Už jsi někdy slyšel o OOP? Teda pardon, o ó-ó-pé? Jasně, že jo! Všude ti cpou, že bez toho se jako programátor neobejdeš. Ale co když ti řeknu, že to není tak úplně pravda? Pojď se na to podívat z trochu jiného úhlu!

Co to vlastně je to OOP?

OOP, neboli objektově orientované programování, je způsob, jak psát a organizovat kód. Zní to super, co? No, není všechno zlato, co se třpytí!

Proč by tě to mělo zajímat?

  1. Protože to potkáš všude. Bohužel.

  2. Protože se tomu možná budeš muset vyhnout. Naštěstí!

Kde se OOP používá?

Krátká odpověď? Všude. Dlouhá odpověď? Úplně všude. Od Pythonu přes Javu až po JavaScript. Ale neboj, existují i lepší způsoby!

Je to těžké?

Upřímně? Je to jako učit se jezdit na jednokolce, když máš k dispozici super rychlé elektrokolo. Proč si to komplikovat?

K čemu je OOP "dobré"?

Tady je ten háček - není. Aspoň ne tak, jak si myslíš. OOP ti slibuje organizaci kódu, ale ve skutečnosti ti přináší spoustu problémů:

Zbytečná složitost a nepřehlednost: Představ si, že stavíš dům z lega. OOP je, jako když ti někdo řekne, že musíš použít speciální kostky a stavět podle složitých plánů, i když chceš postavit jen jednoduchý domek. Často končíš s "přearchitektovaným" kódem, který vypadá impozantně, ale je těžké se v něm vyznat. Příklad: Místo jednoduchého kódu pro výpočet průměru známek můžeš skončit s TřídaStudenta, která má SeznamZnámek, každá známka je objekt Známka s metodami jako getPředmět() a getHodnota(). A to vše jen proto, abys vypočítal průměr! V reálu by stačil jednoduchý seznam čísel a jedna funkce.

Problémy s testováním a debugováním: Objektově orientovaný kód může být obtížnější testovat na úrovni unitů kvůli závislosti na stavu a komplexním vztahům mezi objekty. To také ztěžuje debugování.

Špatná podpora paralelismu: OOP vzniklo v době, kdy většina programů běžela sekvenčně na jednom procesoru. V dnešní éře cloud computingu, distribuovaných systémů a vícejádrových procesorů je tradiční OOP model často překážkou. Neodpovídá přirozeně paralelním a asynchronním procesům, což může vést k neefektivnímu využití hardwaru a složitější implementaci moderních architektur.

Problémy s rozšiřitelností a údržbou: Rigidní hierarchie tříd může ztížit rozšiřování a modifikaci kódu v budoucnu. Změna jedné části systému může mít neočekávané důsledky v jiných částech.

Technické komplikace: Tvůj program je jako velká skládačka puzzle, a když používáš OOP, každý dílek puzzle (objekt) může mít spoustu malých háčků a oček, kterými se spojuje s ostatními dílky. To je super, dokud chceš puzzle jen složit na stole. Pokud chceš tu skládačku poslat kamarádovi přes internet (serializace) nebo ji uložit do krabice (ukládání dat)? Najednou zjistíš, že je to pěkná fuška. Všechny ty háčky a očka (vazby mezi objekty) musíš nějak „rozpojit“ a nejlépe tak, aby si mohl puzzle zase správně složit. V praxi to znamená, že když máš složitý systém objektů (třeba hru s hráči, předměty, mapou...), může být opravdu těžké ho uložit do souboru nebo poslat přes síť. Často končíš s komplexními knihovnami jen na to, abys mohl data uložit a načíst, což v jednodušších programovacích stylech není potřeba.

Jak to teda dělat lépe?

Místo OOP zkus:

  1. Funkcionální programování

  2. Kompozici místo dědičnosti

Proč kompozice a ne dědičnost?

Dědičnost v OOP je jako když se snažíš vytvořit nový nábytek tím, že vezmeš starý a něco k němu přiděláš. Kompozice je jako když si vezmeš IKEA nábytek a poskládáš ho přesně tak, jak potřebuješ. Poskládáš vedle sebe víc různých samostatných kousků. Výhody:

  • Flexibilita: Snadno můžeš měnit části programu, aniž by ses musel starat o celou "rodinu" objektů. • Přehlednost: Je jasnější, co tvůj kód dělá, protože vidíš přímo, z čeho se skládá. • Znovupoužitelnost: Můžeš používat malé, jednoduché komponenty v různých částech programu.

Závěr

OOP není svatý grál programování. Je to jen jeden z mnoha přístupů, a ne vždy ten nejlepší. Nauč se kriticky myslet a vybírat si nástroje, které ti skutečně pomůžou. Pamatuj, že v jednoduchosti je krása - a to platí i v kódu!

Tak co, už vidíš OOP v jiném světle? Nezoufej, jestli jsi ho už začal studovat. Každá zkušenost se počítá. Ale teď už víš, že existují i lepší cesty. Tak do toho, ukaž světu, že umíš psát čistý, jednoduchý a efektivní kód!

More from this blog