Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 9. diel - Bojovník do arény v Pythone

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Barbora Zdvihalová
DarkCoder:27. júna 21:20

Atributy popisují vlastnosti objektu, slouží k uchování stavu objektu. Jsou to informace které objekt má. Metody popisují chování objektu, tedy to co objekt umí dělat a jaké akce může provádět. Atributy volíš takové aby vystihly vlastnost se kterou v aplikaci pracuješ.

To ruční zadávání má své opodstatnění, je to inicializace objektu konstruktorem. Aplikace simuluje souboj dvou odlišných ras, je pravděpodobné, že každá bude mít jiné hodnoty. Nic Ti samozřejmě nebrání mít stejné, snad až na jméno.. Ve skutečné hře by existovali různé třídy, ale to bych zacházel do složitostí.. Zde existuje jedna třída, ve které přesto existují odlišnosti .

Z reakcí usuzuji, že ještě nemáš zažraný princip OOP aplikace.. v jednom z prvních článků jsem tam poslal ukázkový příklad. Cvičit to na Bojovníkovi z Areny není efektivní.. Zbytečně se tam vměšují herní konstrukce, nesoustředíš se tak na jádro problému.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Barbora Zdvihalová
DarkCoder:27. júna 21:31

V Lekci 3 jsem nastínil princip OOP na příkladu. Postačí na to nahlížet bez nějakých detailů. To co je důležité na něm vidět je vytvoření určité šablony, vytvoření objektu podle šablony, vnímat vlastnosti objektu, vnímat chování objektu a způsob vzájemné komunikace mezi objekty.. Tohle je nutné pochopit, že vlastnosti jsou popsány atributy které tvoří jednu jednotku (jsou součástí jednoho celku. A že metody představují chování toho objektu, opět jsou součástí onoho celku. A ten celek je třída. To kdo spolu komunikuje mezi sebou jsou objekty (instance třídy). Smyslem OOP je udržovat vše pohromadě co k sobě patří. Nemáš rozházené vlastnosti v podobě proměnných a funkcí někde po aplikaci. Je to zkrátka programové paradigma, které má určitá pravidla a umožnuje a usnaďňuje vývojáři práci.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Barbora Zdvihalová:27. júna 21:33

Jo to mas pravdu, kdyz ma clovek na 40 lekci (vcetne testu a cviceni) 14 dni a pred tim se s tim nikdy nesetkal, tak se blbe neco "zazira", to jsou skoro 3 lekce na den. :) Diky, mrknu se na nejaky cviceni ze zacatku OOP.

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Barbora Zdvihalová
DarkCoder:27. júna 21:47

To je mi jasné, proto je třeba porozumět základů. Princip OOP aplikací se pak opakuje.. Vytvoření šablony, vytvoření objektu, nastavení objektů, komunikace objektů.. je to pořád dokola.

Podívej na následující příklad, snad Ti to bude jasnější.

class Obrazovka:
    def __init__(self):
        self.text = ""

    def prijmi_text(self, text):
        self.text = text

    def zobraz_text(self):
        print(f"Na obrazovce se zobrazuje: {self.text}")

class Klavesnice:
    def __init__(self):
        self.obsah = ""

    def napis_text(self, text):
        self.obsah = text

    def odesli_text(self, obrazovka):
        obrazovka.prijmi_text(self.obsah)

# Použití
obrazovka = Obrazovka()
klavesnice = Klavesnice()

klavesnice.napis_text("Hello, world!")
klavesnice.odesli_text(obrazovka)

# Teď skutečně zobrazíme text na obrazovce
obrazovka.zobraz_text()
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Barbora Zdvihalová
DarkCoder:27. júna 22:00

Abys měla představu jak jsem postupoval.

Chci vytvořit aplikaci která simuluje napsání textu na klávesnici a ten text aby se pak zobrazil na obrazovce.

Uvědomím si, že to je vzájemná interakce mezi právě klávesnicí a obrazovkou. Takže budu tvořit dvě třídy. Obrazovka a Klavesnice. Začnu klávesnicí neboť ta bude posílat data do obrazovky. Bude to text který se tam bude posílat, tak vytvořím instanční atribut, jehož obsah bude na začátku prázdný - žádný text napsaný. Chováním bude napsaání textu a odeslání textu. To reprezentují dvě metody uvnitř třídy. Text napsaný se předává jako argument a ukládám si ho do atributu ve třídě Klavesnice. Druhá metoda je odeslání zprávy objektu obrazovka. Takže vytvořím třídu obrazovka, oět nějak vlastnost text pro uchování stavu. A metody pro příjem textu a zobrazení.. a pak už následuje použití.

Souhrn:

Vytvoření tříd s atributy a metodami
Vytvoření objektu
Nastavení stavu objektů
Interakce mezi objekty..

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Barbora Zdvihalová
DarkCoder:27. júna 22:12

A teď to hlavní abys pochopila sílu OOP, srovnání s "klasickou" procedurální aplikací dělající obdobu OOP aplikace výše.

def napis_text(text):
    # Simuluje napsání textu klávesnicí
    print(f"Klávesnice napsala: {text}")
    return text

def prijmi_text(text):
    # Simuluje přijetí textu obrazovkou
    return text

def zobraz_text(text):
    # Simuluje zobrazení textu na obrazovce
    print(f"Na obrazovce se zobrazuje: {text}")

# Použití
text_klavesnice = napis_text("Hello, world!")
text_obrazovka = prijmi_text(text_klavesnice)
zobraz_text(text_obrazovka)

Nyní bys měla pocítit, jak u aplikace psané pomocí OOP paradigma existují samostatné celky, které mezi sebou navzájem operují.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Lukáš Chaloupek:5. júla 19:15

Mám z toho v hlavě zmatek. Velké tempo... masakr informací... Je fakt těžké z toho něco pochytit a pochopit to.

Odpovedať
Úspěch není konečný, selhání není fatální. Důležité je mít odvahu pokračovat.
Avatar
Martin Vlha
Člen
Avatar
Martin Vlha:13. júla 17:46

V textu nejsou dostatečně vysvětleny změny, které se objevily ve finální podobě kódu. Není tam popsáno nastavování zprávy zpětně pro jednotlivé akce.
Není tam objasněno nic ohledně
print("Život: {0}".format(bo­jovnik.grafic­ky_zivot()))

Avatar
Mário Martinelli:28. augusta 1:10

Používanie rovnakých názvov strašne skomplikovalo pochopenie učiva a na záver ešte čerešnička: prehodenie warrior na enemy a enemy na warrior. (asii aby bol z toho človek uplne zmätený)
Pochopil som to len vďaka priateľke, ktorá vie programovať v pythone. Aj to som si musel prepísať dočastne názvy bojovníkov v main.py aby sa mi to neplietlo.

Avatar
Mário Martinelli:28. augusta 1:23

... ale aby som len nekritizoval nedostatky :D ... Vytváranie hry aj téma hry ma dosť baví a mnohé postupy sú vysvetlené dobre. Len tá didaktická stránka má priestor pre zlepšenie. ;)

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 93.