Kódím.cz
3

Dědičnost

V objektově orientovaném programování existuje důležitý pojem, kterým je dědičnost. Podíváme se, jak funguje.

4
Audioknihy

V některých případech je nutné sáhnout k úpravám již napsané třídy. Uvažujme nakladatelství, pro které jsme vytvořili třídu Book v minulé lekci. Třída měla atributy title, pages and price. Nyní uvažujeme, že se nakladatelství rozhodlo vydávat i audioknihy. Ty nemají počet stránek, ale musíme u nich evidovat herce nebo herečku, který/která audioknihu předčítá. Budeme tedy chtít vytvořit třídu AudioBook, ale ta by neměla přímo dědit od třídy Book, protože by nám tam zbyl nepotřebný atribut pages. Musíme tedy prové úpravu již existujícího kódu. Takové úpravě se někdy říká refaktorizace.

Vytvoř třídu Item, což je obecná položka, kterou bude nakladatelství prodávat. Třída Item bude mít atributy title a price. Uprav třídu Book tak, aby dědila od třídy Item. Třída Book bude mít navíc atribut pages. Atributy title a price nastav s využitím metody __init__ rodičovské třídy Item. Dále přidej třídu AudioBook, která bude mít navíc atributy duration_in_hours (délka nahrávky v hodinách) a narrator (člověk, který knihu čte). Třída AudioBook bude opět dědit od třídy Item a atributy title a price bude nastavovat s využitím metody __init__ rodičovské třídy Item.

Třída Book si zachová svoji metodu get_time_to_read(), která pracuje s počtem stran (pages). Třída AudioBook bude mít metodu get_time_to_read() taky a při jejím zavolání bude vracet hodnotu atributu duration_in_hours. Pokud mají metodu všichni potomci, je běžné metodu přidat i rodičovské třídě. Přidej tedy metodu get_time_to_read() třídě Item. Do metody vlož klíčové slovo pass, protože pro třídu Item nebudeme do metody vkládat žádný výpočet.

Vytvoř objekty reprezentující audioknihu Problém tří těles (délka 14.4, čte Zbyšek Horák, cena 299 Kč) a knihu Kadet Hornblower (242 stran, cena 399 Kč). Uvažuj, že nakladatelství přidá do e-shopu funkci, která vrátí celkový čas, kdy si bude moci zákazník nebo zákaznice užívat nakoupené produkty. Vytvoř tedy proměnnou total_time, která bude obsahovat součet délky audioknihy a času potřebného na přečtení knihy. Obojí zjisti s využitím metody get_time_to_read().