OOP teoreticky: Základy

…aneb teorii musí znát každý!
29. 12. 2008

OOP je objektově orientované programování. Ha! A co je to objekt? Objekt je abstraktní cosi, které uchovává spřízněné funkce a proměnné. A teď trochu detailněji.

Objektové programování je pouhopouhý styl programování, je to jakési paradigma. Samotné OOP vám obvykle neposkytne nic, co byste už neměli v klasickém procedurálním programování, tedy co naprogramujete v jednom, zpravidla naprogramujete v druhém. V zásadě jde pouze o přístup a o eleganci. Jsou věci, které lze přes objekty řešit velmi efektivně a naopak – jsou věci, na které se hodí zase jiné paradigma, třeba funkcionální. OOP určitě není samospasné, pokud se rozhodnete programovat objektově problém, na který se objekty zkrátka nehodí, dopadne to pravděpodobně špatně.

Takže jaký je smysl či princip OOP? Rozdělit celý program na dílčí části a řešit postupně pouze tyto menší části programu. Tím, že problém rozdělíme na menší části, stává se celkový projekt snáze řešitelný, snáze analyzovatelný a snáze udržovatelný. Příklad: programujeme nějakou hru. Třeba šachy, to je vcelku jedno. Jak by se to řešilo objektově? Celý problém by se rozdělil na menší díly, takže bychom měli část, která by se starala o pravidla hry, byl by to takový rozhodčí. Další část by se starala o reprezentaci hrací desky, dále bychom potřebovali něco, co bude celou hru řídit, nějakého manažera celé hry. Vidíte, jak jsme hezky rozkouskovali projekt na menší části? Důležité je, že každá část se stará jen o to své. Rozhodčí jako jediný zná pravidla hry. Manažer nemá žádnou představu o tom, kam může která figurka skočit.

Všem předchozím částem můžeme říkat objekty. Rozdělili jsme velký problém šachů na menší části/objekty Rozhodčí, Manažer, Hrací deska apod. Takže co je to objekt? Objekt je jakási entita, struktura, která reprezentuje určitou jedinečnou souvislou část celého programu. Pokud poskládáme a pospojujeme všechny objekty dohromady, máme celý program.

Více programátorsky je objekt struktura, která obsahuje určitě proměnné a určité funkce, které se vztahují k myšlence objektu. Například pokud bychom měli objekt Bod, mohl by obsahovat proměnné X a Y, reprezentující x-ovou a y-ovou souřadnici. A teď by to chtělo vymyslet nějakou funkci, která by se k tomuto objektu hodila. Co můžeme dělat s bodem/souřadnicí? Bod můžeme třeba posouvat, takže objekt Bod by mohl mít u sebe funkci Posun(), která by daný bod posunula o nějaké ty pixely.