Základní cvičení na vytváření tříd a jejich použití jako objekty.
Na srazu jsme vytvářeli cvičné třídy pro koťátka/čtverce vytvoř seznam alespoň pěti ruzných koťátek/čtverců. Dokážeš to udělat v cyklu? Jak ověříš, že jde skutečně o různé objekty?
Vytvoř třídu Ctverec s jedním atributem strana
a metodami obvod()
, obsah()
a rozdil_obsahu(jiny_ctverec)
, která vrátí rozdíl obsahů dvou čtverců - zadaného a toho jehož metodu voláme.
Třídu Ctverec si uprav tak, aby jsi při zavolání print(objekt_typu_ctverec)
dostala smysluplnou
informaci o objektu (např. jak velká je jeho strana).
Vygeneruj slovník s libovolným počtem čtverců a různou velikostí strany. Klíčem slovníku bude velikost jeho strany. Všechny tyto čtverce vypiš i s jejich obvody a obsahy.
Tato technika (cachování) se používá, když víme, že často budeme potřebovat objekt se stejným nastavením (stejnými daty). Namísto toho, abychom takovýto objekt vytvářeli pořád dokola, když ho potřebujeme použít, tak si jej uložíme bokem a vytáhneme si jej ze slovníku pomocí klíče. Jednak tím ušetříme čas potřebný k vytvoření objektu a často si ušetříme i paměť.
Následující projekty jsou na procvičení dědičnosti, pokud jsme ji na kurzech ještě nestihli probrat, můžeš je zatím vynechat.
Výzva Jednou z výhod použití objektů v programu, je ten,
že určitý kód (často na začátku nebo v prvních částech/úrovních) programu nezajímá, že objekt je konkrétního typu. Stačí,
že je odvozen od třídy, která obsahuje danou funkci nebo atribut. Nám v tom případě stačí brát konkrétní objekt odvozený od
dané základní třídy. Vytvoř si tak třídu Obrazec, která bude definovat metody obvod()
, obsah()
a
rozdil_obsahu(jiny_obrazec)
. Metody obvod()
, obsah()
nebudou dělat nic, protože to záleží na konkrétní implementaci
daného obrazce. Metoda rozdil_obsahu(jiny_obrazec)
však naimplementovaná výt může. Od třídy Obrazec pak odvoď třídy
Ctverec, Trojuhlenik (rovnostraný), Kruh. Každá bude mít jeden atribut: délku strany pro Ctverec a Trojuhelnik, poloměr pro Kruh a
budou implementovat odpovídající výpočty obvodu a obsahu. Nezapomeň u každé třídy naimplementovat i textovou reprezentaci,
kterou dostaneš po použítí proměnné s objektem v příkazu print()
.
Výzva Za použití tříd z přechozího příkadu si vytvoř
seznam náhodně vytvořených Obrazců. Pro každý Obrazec v seznamu vypiš jeho typ a specifickou informaci o objektu, která
je daná jeho typem, obsah i objem. Nekoukej při tom jestli se jedná konkrétně o Ctverec, Trojuhelnik, nebo Kruh. Než začneš
pracovat s objektem ze seznamu, ujisti se, že objekt je typu, který je odvozen od třídy Obrazec. Pokud není, tak pokračuj na
další prvek v seznamu. Hodí se ti to v případě, že by se ti tam "zatoulal" objekt jiného typu, který nemá např. metodu obsah()
.