2 - Objekty, třídy, instance a atributy

Očekávaný stav

Po předchozím cvičení mají všichni studenti:

  • Základní porozumění gitu, zprovozněný přístup ke svým repozitářům na gitlab.fel.cvut.cz.
  • Úspěšně odevzdaný první domácí úkol!

Úvod

  • Diskuze vašeho řešení příkladu z minulého cvičení.

Teorie ke cvičení

  • Diskutujte rozdíl mezi třídou a instancemi.
  • Jaký význam mají v objektovém návrhu atributy a jaký metody.
  • Jakým způsobem v objektovém návrhu kontrolujeme přístup k třídním atributům a metodám? Proč není dobrý nápad nechávat atributy veřejné?

Příklad na cvičení

  • Nejmenovaná firma pro provoz své činnosti používá vozidla, která jsou na firmu registrována. Pro potřeby finanční evidence je nutné na konci každého měsíce vykázat celkový počet najetých kilometrů.
  • Aby nemusela firma každý měsíc kontrolovat počty najetých kilometrů na každém vozidle svého vozového parku, rozhodla se implementovat GPS tracking system, který tuto práci udělá za ní.
  • Ze zpracované analýzy vzešel následující objektový návrh:

Při programování používejte anglické názvy atributů, tříd a metod.

Cvičení

Na základě dodaného objektového modelu a připravené třídy Main implementujte třídy: Vehicle, Tracker a GPSTrackingSystem. Stáhněte si kostru projektu na: https://gitlab.fel.cvut.cz/B241_B6B36OMO/seminar. (git clone https://gitlab.fel.cvut.cz/B241_B6B36OMO/seminar.git)

Pokud jste neabsolvovali kurzy čarodějnictví, tak doporučujem vyklonovat mimo své hlavní repo a do svého hlavního repa soubory překopírovat.

1. Třída Vehicle

  • Implementujte třídu Vehicle, u vozidla evidujeme atributy: manufacturer, vinCode, mileage. Atributy manufacturer a vinCode jsou neměnné.
  • Vozidlo má dále metodu drive, pomocí které vozidlo ujede danou vzdálenost, po ujetí vzdálenosti dochází k úpravě najetých kilometrů vozidla.
  • Implementujte getter metody pro získání: manufacturer, mileage, vinCode.
  • Implementujte metodu toString() pro výpis objektu ve formátu: “[manufacturer], [vinCode]”.

2. Třída Tracker

  • Implementujte třídu Tracker, která reprezentuje jedno trackovací zařízení, které je instalováno na vozidlo.
  • Tracker má unikátní identifikační číslo trackerId, které je trackeru přiřazeno při jeho vytvoření a dále je neměnné.
  • Dále má atribut innerMemory, který slouží jako vnitřní paměť pro výpočet kilometrů.
  • Doplňte do třídy getCurrentVehicle pro zachování zapouzdření.
  • Doplňte metodu attachTracker, která k danému Trackeru přiřadí vozidlo, které bude sledovat. Při přiřazení vozidla se innerMemory automaticky nastaví na najeté kilometry vozidla.
  • Doplňte metodu getTrackerMileage, která pomocí své vnitřní paměti a najetých kilometrů vozidla vypočte počet najetých kilometrů s Trackovacím zařízením.
  • Doplňte metodu resetTrackerMileage, která nastaví vnitřní paměť (innerMemory) na hodnotu najetých kilometrů vozidla.
  • Implementujte metodu pro výpis objektu ve formátu: “Tracker_[trackerId], attached to [vehicle]”

3. Třída GPSTrackingSystem

  • Implementujte třídu GPSTrackingSystem, která reprezentuje nové řešení pro GPS sledování vozidel.
  • Třída drží List všech vytvořených Trackovacích zařízení a vnitřní counter, pomocí kterého je trackerům přidělováno ID (jelikož každé trackovací zařízení musí mít unikátní ID, counter musí být statický).
  • Třída podporuje vlastnost attachTrackingDevices, která na vstupu dostane List vozidel a ke každému vytvoří a připevní trackovací zařízení.
  • Dále třída podporuje vlastnost generateMonthlyReport, která vypíše informaci o všech trackovacích zařízeních včetně vozidel, ke kterým jsou připevněny a vypočte ujetou vzdálenost od posledního měření. Metoda následně resetuje všechna trackovací zařízení, aby report obsahoval vždy pouze vzdálenost ujetou za daný měsíc.

Příklad výpisu metody generateMonthlyReport:

—– GPS Tracking system: Monthly report —–

Currently active devices:

Tracker_1, attached to VOLVO, VINKLJ15

Tracker_2, attached to Saab, JKLAJSL15

Tracker_3, attached to BMW, HASUINJ15

This month traveled distance: 300 Km.

4. Implementujte JUnit testy pro otestování metod objektů

  • Otestujte základní funkcionalitu nově vytvořených objektů.
Pro pojmenování metod testů používejte následující jmennou konvenci:
MethodName_StateUnderTest_ExpectedBehavior

Co by se mohlo hodit:

Dokument prezentovaný na cvičení: https://docs.google.com/document/d/1zXJ5mb7h0IE7DiPCyMR2Ox2CY74GRnn1/edit?usp=sharing&ouid=107896043615264415354&rtpof=true&sd=true

+ zadání bonusového úkolu (zapracujte class diagram do Java kódu, nahrajte ho na gitlab a zašlete odkaz svému cvičícímu.

courses/b6b36omo/labs/lab022017.txt · Last modified: 2024/10/01 11:20 by sebekji1