NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Diskuze – Lekce 9 - Bojovník do arény v Pythonu

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Odpovídá na DarkCoder
Barbora Zdvihalová:27. června 20:47

takze ty atributy si musim zvolit na zacatku? A proc ma kazdy bojovnik jine, kdyz se tam zadavaji rucne? :D Pardon, ja sem asi trochu natvrdla.

 
Odpovědět
27. června 20:47
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Barbora Zdvihalová
DarkCoder:27. června 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.

Odpovědět
27. června 21:20
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Barbora Zdvihalová
DarkCoder:27. června 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.

Odpovědět
27. června 21:31
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Barbora Zdvihalová:27. června 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.

 
Odpovědět
27. června 21:33
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Barbora Zdvihalová
DarkCoder:27. června 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()
Odpovědět
27. června 21:47
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Barbora Zdvihalová
DarkCoder:27. června 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..

Odpovědět
27. června 22:00
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Barbora Zdvihalová
DarkCoder:27. června 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í.

Odpovědět
27. června 22:12
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Lukáš Chaloupek:5. července 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.

Odpovědět
5. července 19:15
Ú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. července 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()))

 
Odpovědět
13. července 17:46
Avatar
Mário Martinelli:28. srpna 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.

 
Odpovědět
28. srpna 1:10
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 91.