IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

2. diel - Prvý objektová aplikácie v Pythone - Hello object world

Minulá lekcie, Úvod do objektovo orientovaného programovania v Pythone , nás uviedla do objektovo orientovaného programovania. Už vieme, že objekty majú atribúty a metódy. Tiež vieme, že na vytvorenie objektu vytvoríme najprv triedu. Tá je vzorom, podľa ktorého následne tvoríme jej inštancie.

Na začiatku kurzu so základnými štruktúrami jazyka Python sme si vytvorili program Hello world. Urobme si v dnešnom tutoriálu podobný program ako úvod do objektovo orientovaného programovania. Naprogramujte si Hello object world!

Otvoríme IDLE (alebo iný editor) a otvoríme nový súbor. Triedy sa vytvárajú kľúčovým slovom class. Triedu pomenujeme Zdravice. V triede bude blok kódu, takže za meno triedy píšeme dvojbodku. Prvý riadok teda vyzerá takto:

class Zdravic:

Názov triedy píšeme vždy ťavie notáciou bez medzier a na rozdiel od premenných má každé slovo v názve veľké prvé písmeno. Názov je samozrejme tiež bez diakritiky, tú v programe používame maximálne vnútri textových reťazcov, nie v identifikátoroch. Podľa tejto triedy neskôr vytvoríme objekt Zdravice, ktorý nás bude vedieť pozdraviť. Vidíme, že sa na program už pozeráme úplne inak, za každú akciu je zodpovedný nejaký objekt. V našom prípade vám to môže prísť zbytočné, pri zložitejších aplikácií si to budete pochvaľovať :)

Teraz si do triedy Zdravice pridáme metódu pozdrav (), bude verejne viditeľná a nebude mať žiadnu návratovú hodnotu ani atribúty.

Deklarácia metódy v Pythone je podobná deklarácii funkcie. Za kľúčovým slovom def nasleduje samotný názov metódy, metódy píšeme rovnako ako premenné a funkcie malými písmenami. V prípade viacslovného názve použijeme podčiarknutia. Zátvorka s parametrami je povinná. Prvý povinný pozičné argument je self. Do neho sa vloží "odkaz" na objekt, do ktorého metóda patrí. Tento argument tam vloží sám objekt. Do tela metódy zapíšeme kód pre výpis do konzoly.

Naša trieda bude teraz vyzerať takto:

class Zdravic:

    def pozdrav(self):
    print("Hello object world!")

Názov prvého parametra - self - môže byť aj iný, ale my sa budeme držať zavedených praktík.

Teraz si vytvoríme inštanciu triedy Zdravice. Bude to teda ten objekt Zdravice, s ktorým budeme pracovať. Objekty sa ukladajú do premenných, názov triedy slúži ako dátový typ. Inštancia má spravidla názov triedy, len má prvé písmeno malé. Vyhlásiť si premennú a následne v nej založme novú inštanciu triedy Zdravice:

zdravic = Zdravic()

Pri vytvorení novej inštancie sa zavolá tzv. Konštruktor. To je špeciálna metóda na triede, preto pri vytvorení inštancie píšeme tie prázdne zátvorky, keďže voláme túto "vytvárajúci" metódu. Konštruktor spravidla obsahuje nejakú inicializáciu vnútorného stavu inštancie (napr. Dosadí východiskové hodnoty do premenných). My sme v kóde žiadny konštruktor nedeklaroval, Python si preto vytvoril tzv. Implicitné prázdny konštruktor. Vytvorenie inštancie objektu je teda podobné volanie metódy.

Keďže v premennej teraz máme naozaj inštanciu triedy Zdravice, môžeme inštanciu nechať pozdraviť. Zavoláme na ňu metódu pozdrav a to ako zdravic.pozdrav (). K aplikácii pridáme ešte input (). Náš kód bude teda teraz vyzerať nasledovne:

class Zdravic:

    def pozdrav(self):
    print("Hello object world!")

zdravic = Zdravic()
zdravic.pozdrav()
input()

Program spustíme.

Prvé objektová aplikácie v Python – Hello object world - Objektovo orientované programovanie v Pythone

Máme teda svoju prvú objektovú aplikáciu!

Dajme teraz našej metóde pozdrav () parameter jmeno, aby dokázala pozdraviť konkrétneho užívateľa:

def pozdrav(self, jmeno):
    print("Ahoj uživateli {0}!".format(jmeno))

Vidíme, že syntax parametra metódy je rovnaká, ako syntaxe premenné. Jednotlivé parametre oddeľujeme čiarkou. Upravíme tiež kód pod triedou:

zdravic = Zdravic()
zdravic.pozdrav("Karel")
zdravic.pozdrav("Petr")
input()

Náš kód je teraz v metóde a my ho môžeme jednoducho pomocou parametrov volať znova s rôznymi parametrami. Nemusíme 2x opisovať "Ahoj užívateľovi ...". Odteraz budeme deliť kód logicky do metód.

Pozdravenie užívateľov v objektovej aplikácii v Pythone - Objektovo orientované programovanie v Pythone

Triede pridáme nejaký atribút, ponúka sa text, kde bude uložený text pozdravu. Atribúty sa definujú rovnako, ako premenné. Pred ich názov píšeme self. Upravme našu triedu:

def pozdrav(self, jmeno):
    print("{0} {1}!".format(self.text, jmeno))

Avšak vďaka tomu, že zatiaľ nemáme metódu konstruktoru, tak musíme atribút text inicializovať pred zavolaním metódy, ktorá tento atribút vyžaduje.

zdravic = Zdravic()
zdravic.text = "Ahoj uživateli"
zdravic.pozdrav("Karel")
zdravic.pozdrav("Petr")
zdravic.text = "Vítám tě tu programátore"
zdravic.pozdrav("Richard")
input()

Program teraz zobrazí:

Pozdravenie užívateľov v objektovej aplikácii v Pythone - Objektovo orientované programovanie v Pythone

Vzhľadom k objektovému návrhu nie je najvhodnejšie, aby si každý objekt ovplyvňoval vstup a výstup, ako sa mu zachce. Pochopiteľne narážam na naše vypisovanie do konzoly. Každý objekt by mal mať určitú kompetenciu a tú by nemal prekračovať. Povera náš objekt iba zostavením pozdravu a jeho výpis si spracujeme už mimo. Výhodou takto navrhnutého objektu je vysoká univerzálnosť a znovupoužitelnost. Objekt doposiaľ vie len písať do konzoly, my ho však prispôsobíme tak, aby daná metóda text iba vracala a bolo na jeho príjemcovi, ako s ním naloží. Takto môžeme pozdravy ukladať do súborov, písať na webové stránky alebo ďalej spracovávať.

K návratu hodnoty použijeme príkaz return. Return metódu ukončí a navráti hodnotu. Akýkoľvek ďalší kód v tele metódy po return sa už nevykoná! Upravme triedu:

Metóda pozdrav:

def pozdrav(self, jmeno):
    return "{0} {1}!".format(self.text, jmeno)

Hlavná časť programu:

zdravic = Zdravic()
zdravic.text = "Ahoj uživateli"
print(zdravic.pozdrav("Karel"))
print(zdravic.pozdrav("Petr"))
zdravic.text = "Vítám tě tu programátore"
print(zdravic.pozdrav("Richard"))
input()

Teraz je náš kód podľa dobrých praktík. Ešte našu triedu Okomentujte, ako sa sluší a patrí. Komentáre budeme písať pod názov triedy a pod názov každého atribútu a metódy. K ich zápise použijeme tri dvojité úvodzovky ( "" "). Ak do interaktívnej konzoly v IDLE (príkazový riadok Windows nepodporuje unicode) zadáme príkaz help () a ako parameter napíšeme názov triedy, zobrazí jej popis aj popis všetkých jej metód. Dokumentovaná trieda môže vyzerať napr. nasledovne:

class Zdravic:
    """
    Třída reprezentuje zdravič, který slouží ke zdravení uživatelů.
    """

    def pozdrav(self, jmeno):
        """
        Vrátí pozdrav uživatele s nastaveným textem a jeho jménem.
        """
        return "{0} {1}!".format(self.text, jmeno)

Pozrieme sa, že sa nám popisky zobrazia po importovaní modulu a napísanie príkazu help ():

Metódy objektu Zdravice v Python Shellu - Objektovo orientované programovanie v Pythone

A sme u konca. Nami napísaný program má už nejakú úroveň, aj keď vlastne nič nerobí. Za úlohu máte prerobiť si našu konzolovú kalkulačku do objektov. V budúcej lekcii, Kvíz - Úvod, objekty, triedy a metódy v Pythone , si urobíme takú jednoduchú hračku. Necháme dva objekty (bojovníkmi) súperiť v aréne (tiež objektu). Máte sa na čo tešiť ;-)

V nasledujúcom kvíze, Kvíz - Úvod, objekty, triedy a metódy v Pythone, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 833x (3.17 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python

 

Predchádzajúci článok
Úvod do objektovo orientovaného programovania v Pythone
Všetky články v sekcii
Objektovo orientované programovanie v Pythone
Preskočiť článok
(neodporúčame)
Kvíz - Úvod, objekty, triedy a metódy v Pythone
Článok pre vás napísal gcx11
Avatar
Užívateľské hodnotenie:
6 hlasov
(^_^)
Aktivity