< Všechna témata
Tisk

Objektově orientované programování

Objektově orientované programování, často označované zkratkou OOP, je jedním z nejpopulárnějších a nejrozšířenějších přístupů k programování. Abychom pochopili, co to OOP je, musíme si nejprve vysvětlit, proč vůbec existuje a proč je tak důležité.

Co je to OOP

Jednoduše řečeno, OOP je způsob, jak psát programy tak, že se díváme na svět kolem nás jako na sbírku objektů. Každý z těchto objektů má nějaké vlastnosti a může dělat určité činnosti. Například:

  • Auto má vlastnosti, jako je barva, typ motoru nebo rychlost. Také může dělat určité činnosti, například rozjet se, zastavit nebo zatroubit.
  • Kočka má vlastnosti, jako je barva srsti nebo jméno. A může dělat věci, jako je mňoukat, spát nebo běhat.

V OOP se tedy snažíme modelovat reálný svět pomocí objektů, které mají vlastnosti (data) a metody (činnosti). Tím program lépe odpovídá tomu, jak přemýšlíme o světě my, lidé.

Na začátku programování (v 60. a 70. letech) se psaly programy tzv. procedurálním způsobem. To znamená, že programy byly rozděleny do jednotlivých kroků (procedur), které vykonávaly určité úkoly. Tento přístup fungoval dobře u menších programů, ale jak se programy stávaly složitějšími, začaly se objevovat problémy:

  • Nepřehlednost kódu – když program obsahoval tisíce řádků, bylo těžké najít, kde se co děje.
  • Znovupoužitelnost kódu – bylo obtížné používat stejný kód v jiném programu, protože nebyl snadno oddělitelný.

OOP přišlo jako řešení těchto problémů. Rozdělením programu na objekty, které mají jasně definované role, se program stává přehlednějším (každý objekt má své místo), lépe použitelným (objekty můžeme použít i v jiných programech).

Základní pojmy

Třída

Třída je jako šablona nebo návod, podle kterého se vytváří objekty. Představme si třídu jako plán domu. Samotný plán není dům, ale podle něj můžeme postavit tolik domů, kolik chceme.

Například – třída Auto může definovat, jaké vlastnosti má mít každé auto (barva, rychlost) a jaké činnosti může dělat (jet, zatroubit).

class Auto:
    def __init__(self, barva, rychlost):
        self.barva = barva
        self.rychlost = rychlost

    def jet(self):
        print("Auto jede.")

    def troubit(self):
        print("Tůt tůt!")

Objekt

Objekt je konkrétní instance třídy. Je to „dům“, který jsme postavili podle plánu. Můžeme mít mnoho objektů vytvořených z jedné třídy, každý s vlastními hodnotami.

Například – podle třídy Auto vytvoříme dva objekty: červené auto a modré auto.

# Vytvoření objektů
auto1 = Auto("červená", 120)
auto2 = Auto("modrá", 100)

# Použití objektů
auto1.jet()  # výstup: Auto jede.
auto2.troubit()  # výstup: Tůt tůt!

Atributy

Atributy jsou vlastnosti objektů. Určují, jaké hodnoty má objekt. Například barva nebo rychlost auta.

Například u objektu auto1 je atribut barva nastaven na "červená"

Metody

Metody jsou činnosti, které může objekt vykonávat. Jsou to funkce, které jsou definované uvnitř třídy.

Například metoda jet() u auta způsobí, že auto pojede.

Dědičnost

Dědičnost umožňuje jedné třídě převzít vlastnosti a metody jiné třídy. Je to jako když dítě zdědí vlastnosti rodičů, ale může mít i své vlastní.

Například – vytvoříme třídu ElektrickeAuto, která zdědí vše z třídy Auto, ale přidá si vlastní metodu nabij_baterii()

class ElektrickeAuto(Auto):
    def nabij_baterii(self):
        print("Baterie nabita!")

Zapouzdření

Zapouzdření znamená, že některé části objektu (atributy nebo metody) můžeme skrýt před uživatelem. Uživatel pak může pracovat pouze s veřejnými částmi objektu, což zvyšuje bezpečnost a přehlednost.

Například – určitý atribut označíme jako „soukromý“ tím, že začneme jeho název podtržítkem (_atribut).

Celý kód
import tkinter as tk
root = tk.Tk()
root.title("Kreslení na Canvas")

platno = tk.Canvas(root, width=400, height=400, bg="white")
platno.pack()

def zmen_na_cernou(event):
    platno.itemconfig(obd1, fill="black")

def zmen_na_zelenou(event):
    platno.itemconfig(obd2, fill="green")


x = 200
y = 200

obd1 = platno.create_rectangle(x-75, y-50, x+75, y+50, fill="red")
obd2 = platno.create_rectangle(x-200, y-200, x-150, y-150, fill="blue")

platno.tag_bind(obd1, "<Button-1>", zmen_na_cernou)
platno.tag_bind(obd2, "<Button-1>", zmen_na_zelenou)

root.mainloop()


Zdroje

Seznam zdrojů

itnetwork.cz. Online. Dostupné z: https://www.itnetwork.cz/.

w3schools.com. Online. Dostupné z: https://www.w3schools.com/.

Python 3 documentation. Online. Dostupné z: https://docs.python.org/3/

SMOLKA, Pavel. Programovací jazyk Python [online]. Mendelova univerzita v Brně, 2019. Dostupné z: https://emendelu.publi.cz/book/771-programovaci-jazyk-python-pruvodce-studiem

ŠVEC, Jan. Učebnice jazyka Python (aneb Létající cirkus) [online]. 2002. Dostupné z: https://i.iinfo.cz/files/root/k/Ucebnice_jazyka_Python.pdf

PILGRIM, Mark. Ponořme se do Python(u) 3: Dive into Python 3. CZ.NIC. Praha: CZ.NIC, c2010. ISBN 978-80-904248-2-1.

PECINOVSKÝ, Rudolf. Python: kompletní příručka jazyka pro verzi 3.11. Knihovna programátora (Grada). Praha: Grada Publishing, 2023. ISBN 978-80-271-3891-3.

Další zdroje (Youtube, obrázky) jsou vždy uvedeny.

Obsah
© 2025 Lukáš Pospíšil