Objektově orientované programování (OOP) je model počítačového programování, který organizuje návrh softwaru kolem dat nebo objektů, nikoliv funkcí a logiky. Objekt lze definovat jako datové pole, které má jedinečné atributy a chování.

Fungování objektově orientovaného programování

OOP se zaměřuje spíše na objekty, se kterými chtějí vývojáři manipulovat, než na logiku potřebnou k jejich manipulaci. Tento přístup k programování je vhodný pro programy, které jsou rozsáhlé, složité a aktivně aktualizované nebo udržované. Patří sem programy pro výrobu a konstrukci i mobilní aplikace – OOP lze například použít pro software pro simulaci výrobních systémů.

Díky organizaci objektově orientovaného programu je tato metoda výhodná i pro kolaborativní vývoj, kdy jsou projekty rozděleny do skupin. Prvním krokem v OOP je shromáždit všechny objekty, s nimiž chce programátor manipulovat, a určit, jak spolu souvisejí – což je úkol známý jako datové modelování. Příklady objektů mohou sahat od fyzických entit, jako je člověk, který je popsán vlastnostmi jako jméno a adresa, až po malé počítačové programy, jako jsou widgety. Jakmile je objekt znám, je označen třídou objektů, která definuje druh dat, jež obsahuje, a všechny logické sekvence, které s nimi mohou manipulovat. Každá odlišná logická posloupnost je známá jako metoda. Objekty mohou komunikovat pomocí přesně definovaných rozhraní, kterým se říká zprávy.

Struktura OOP

Struktura objektově orientovaného programování zahrnuje:
Třídy, což jsou uživatelsky definované datové typy, které slouží jako předloha pro jednotlivé objekty, atributy a metody.

Objekty, což jsou instance třídy vytvořené se specificky definovanými daty. Mohou odpovídat reálným objektům nebo abstraktní entitě. Při počáteční definici třídy je popis jediným definovaným objektem.

Metody, což jsou funkce definované uvnitř třídy, které popisují chování objektu. Každá metoda obsažená v definici třídy začíná odkazem na objekt instance. Metody se používají kvůli opakované použitelnosti nebo udržování funkčnosti uvnitř jednoho objektu v daném čase.

Atributy, které jsou definovány v šabloně třídy a představují stav objektu. Objekty budou mít data uložená v poli atributů.

Hlavní principy OOP

Objektově orientované programování je založeno na následujících principech:

1. Zapouzdření

Tento princip říká, že všechny důležité informace jsou obsaženy uvnitř objektu a vystaveny jsou pouze vybrané informace. Implementace a stav každého objektu jsou soukromě drženy uvnitř definované třídy, kam nemají jiné objekty přístup ani oprávnění provádět změny. Mohou zde pouze volat seznam veřejných funkcí nebo metod. Tato vlastnost skrývání dat poskytuje větší bezpečnost programu a zabraňuje nechtěnému poškození dat.

2. Abstrakce

Objekty odhalují pouze vnitřní mechanismy, které jsou důležité pro použití jinými objekty, a skrývají tak veškerý nepotřebný implementační kód. Tento koncept může vývojářům pomoci snadněji provádět další změny nebo doplňky v průběhu času.

3. Dědičnost

Třídy mohou opakovaně používat kód z jiných tříd. Mezi objekty lze přiřadit vztahy a podtřídy, což vývojářům umožňuje opakovaně používat společnou logiku při zachování jedinečné hierarchie. Tato vlastnost OOP si vynucuje důkladnější analýzu dat, zkracuje dobu vývoje a zajišťuje vyšší úroveň přesnosti.

4. Polymorfismus

Objekty jsou navrženy tak, aby sdílely chování a mohly nabývat více než jedné podoby. Program určí, který význam nebo použití je nutné pro každé provedení daného objektu z nadřazené třídy, čímž se sníží potřeba duplikovat kód. Tento princip tak umožňuje, aby různé typy objektů procházely stejným rozhraním.

Jazyky OOP

Programovací jazyk Simula je považován za první objektově orientovaný programovací jazyk, nicméně existuje mnoho dalších kompatibilních jazyků. Některé se však s OOP párují lépe než jiné. Například programovací jazyky považované za čisté OOP jazyky se vším nakládají jako s objekty. Jiné programovací jazyky jsou určeny primárně pro OOP, ale jsou v nich zahrnuty i některé procedurální postupy.

Mezi čisté OOP jazyky patří především Ruby, Scala, JADE a Emerald. Mezi jazyky určené primárně pro OOP patří Java, Python a C++. A mezi jazyky, jež jsou vhodné pro OOP, ale není to jejich hlavní zacílení, patří Visual Basic .NET, PHP a JavaScript.

Výhody OOP

  • Modularita – zapouzdření umožňuje, aby objekty byly samostatné, což usnadňuje řešení problémů a společný vývoj.
  • Znovupoužitelnost – kód lze opakovaně použít díky dědičnosti, což znamená, že tým nemusí psát stejný kód vícekrát.
  • Produktivita – programátoři mohou rychleji sestavovat nové programy díky použití více knihoven a opakovaně použitelného kódu.
  • Snadná aktualizovatelnost a škálovatelnost – programátoři mohou implementovat funkce systému nezávisle na sobě.
  • Popisy rozhraní – popisy externích systémů jsou jednoduché díky technikám předávání zpráv, které se používají pro komunikaci objektů.
  • Bezpečnost – pomocí zapouzdření a abstrakce je skryt složitý kód, údržba softwaru je jednodušší a internetové protokoly jsou chráněny.
  • Pružnost – polymorfismus umožňuje, aby se jedna funkce přizpůsobila třídě, ve které je umístěna. Přes stejné rozhraní mohou procházet i různé objekty.

Kritika OOP

Největší obavou je, že OOP příliš zdůrazňuje datovou složku vývoje softwaru a dostatečně se nezaměřuje na výpočty nebo algoritmy. Kromě toho může být kód OOP složitější na psaní a jeho kompilace může trvat déle.

I proto existuje mnoho alternativních metod k OOP, mezi které patří například funkcionální programování (jazyky Erlang a Scala, které se používají pro telekomunikace a systémy odolné proti chybám), strukturované nebo modulární programování (jazyky PHP a C#), imperativní programování (zaměřuje se spíše na funkce než na modely a patří sem C++ a Java), deklarativní programování (jazyky Prolog a Lisp) nebo logické programování (jazyk Prolog zaměřující se na úlohy, které mohou využívat logické dotazy založené na pravidlech).

Většina pokročilých programovacích jazyků umožňuje vývojářům kombinovat modely, protože je lze použít pro různé metody programování. Například jazyk JavaScript lze použít pro OOP a funkcionální programování.