Seminář 2

Obsah semináře

Rozcvička

Objektově orientované programování (OOP)

Zde se OOP budeme zabývat spíše intuitivně tak, abychom mohli začít programovat v Javě. Související teorii a mnoho dalšího se dozvíte v kurzu věnovaném OOP jako takovému (není to prerekvizita). Intuice občas bývá zrádná, nad vším tedy zkuste více pouvažovat a neváhejte se zeptat.

Motivace

Zmínili jsme si pár motivačních příkladů (eshop, STAG) a ukázali si jednoduchou situaci s automobily určenými svými vlastnostmi (SPZ, barva, rychlost, lokace, posádka) a možnými úkony, které s těmito vozy lze provádět (zrychlit, zpomalit, nabrat osobu, vyložit osobu, přelakovat auto, …).

Vzali jsme si pár aut a ukázali si, že sice mají stejný soubor (v dané situaci zajímavých) vlastností, ale s různými hodnotami. Soubor vlastností a možných akcí jsme zachytili do třídy Car - jakéhosi předpisu, nebo výkresu pro všechny objekty daného typu - automobily.

A teď v Javě

Celý proces jsme následně provedli v Javě:

Zmínili jsme další principy - dědičnost, zapouzdření a polymorfismus - a prvky jazyka - gettery/settery, modifikátory přístupu a rozhraní. Na ty se podíváme příště.

Řetězce

Pole

Poznámky a zdroje

Úkoly

Úkolů je více, ale jsou jednoduché. Měli byste si na nich procvičit:

Zadání:

  1. Vytvořte třídu Country s konstruktorem
    Country(String name, String phoneCode),
    která reprezentuje stát.
    Instance mají dva atributy
    • name - jméno státu a
    • phoneCode- telefonní předvolba, např. +420.
    Dále definujte metodu print, která vypíše zemi ve formátu
    Stát{jméno=xxx, předvolba=xxx}
    a ukončí řádek.
    Mapování stát - předvolba nemusí odpovídat realitě. (Klidně si vymyslete i státy.)
  2. Vytvořte třídu Person s konstruktorem
    Person(int id, String firstname, String lastname, int age, String phone, Country country),
    která reprezentuje osobu.
    Instance mají atributy
    • id - unikátní identifikátor,
    • firstname - jméno,
    • lastname - příjmení,
    • age- věk,
    • phone - telefon,
    • country - stát.
    Dále definujte metodu getStatus(), která vrátí status osoby:
    • pokud je věk menší než 18, vrátí status “junior”,
    • pokud větší nebo roven 65, vrátí status “senior”,
    • jinak vrátí status “dospělý”.
  3. Třídě Person definujte metodu getPhone(), která vrátí telefonní číslo i s předvolbou. Pokud osoba nemá přiřazený stát, vrátí číslo bez předvolby.
  4. Třídě Person definujte metodu print(), která vypíše osobu ve formátu
    Osoba{id=xxx, jméno=xxx yyy, tel=xxx}
    a ukončí řádek. Pokud osoba nemá přiřazený stát, telefon bude bez předvolby, jinak s předvolbou.
  5. Vytvořte třídu PhoneBook s konstruktorem
    PhoneBook(Person[] persons, Country[] countries),
    která reprezentuje seznam kontaktů. Seznam obsahuje pole osob a pole států.
  6. Třídě PhoneBook definujte metodu
    count(String countryName),
    která vrací počet osob, žijících v určitém státě.
    Nyní zkuste třídě PhoneBook definovat metodu
    count(String firstname),
    která vrátí počet osob se zadaným křestním jménem. Proč to nejde?
  7. Třídě PhoneBook definujte metodu
    search(int id),
    která vyhledá osobu s určitým id.
  8. Třídě PhoneBook definujte metodu
    search(String country),
    která vyhledá všechny osoby žijící v zadaném státě.
  9. Třídě PhoneBook definujte metodu
    search(String firstname, String lastname),
    která vyhledá všechny osoby se zadaným (celým) jménem.
  10. Třídě PhoneBook definujte metodu
    setPhoneCode(Person person, String phoneCode),
    která osobě nastaví zemi (z uloženého pole) podle telefonní předvolby.
    Pokud je předvolba neplatná, neudělá nic a vrátí hodnotu false (jinak true).
  11. Třídě PhoneBook definujte metodu
    print(), která vypíše (efektivním způsobem!) obsah rejstříku v následujícím formátu:
Rejstřík{
	Osoba{id=0, jméno=Tonička Bolavá, tel=+420555444333}
	Osoba{id=1, jméno=Vilém Klika, tel=000000000}
	Osoba{id=2, jméno=Navážka Nóblhoch, tel=+421123456789}
	Osoba{id=3, jméno=Samuel Elánius, tel=+18357801}
	Osoba{id=4, jméno=Magráta Česneková, tel=666}
}
  1. Výsledek odevzdejte emailem s předmětem jj1-02 na tomas.urbanec@upol.cz do 3.10.2023, 14:59 CEST. Odevzdávejte pouze zdrojové kódy, nikoliv celé projekty vygenerované IDE.