Erinevus lehekülje "ITI0011-2015:harjutus 09" redaktsioonide vahel
(Uus lehekülg: '== Kirjeldus == Ülesandes harjutame <code>interface</code>'i ja abstraktse klassi kasutamist. Ülesande sisu on bussipargi busside kirjeldamine. Allpool (vt #Mall) on antu...') |
P (Ago teisaldas lehekülje ITI0011:harjutus 09 pealkirja ITI0011-2015:harjutus 09 alla) |
||
(ei näidata sama kasutaja 11 vahepealset redaktsiooni) | |||
4. rida: | 4. rida: | ||
Ülesande sisu on bussipargi busside kirjeldamine. Allpool (vt [[#Mall]]) on antud bussi abstraktne kirjeldus. Te peate seda oma koodis kasutama. Järgmised sammud: | Ülesande sisu on bussipargi busside kirjeldamine. Allpool (vt [[#Mall]]) on antud bussi abstraktne kirjeldus. Te peate seda oma koodis kasutama. Järgmised sammud: | ||
− | # loo ''interface'' <code> | + | # loo ''interface'' <code>LiquidFuel</code>, millel oleks kaks meetodi signatuuri: <code>double getRange()</code> ja <code>double getEmission()</code>. |
− | # loo ''interface'' <code> | + | # loo ''interface'' <code>Electric</code>, millel oleks meetodi signatuur: <code>double getVoltage()</code>. Lisaks oleks sellel kaks <code>double</code> konstanti: <code>HIGH_VOLTAGE = 600</code> ja <code>LOW_VOLTAGE = 480</code>. |
− | # loo klass <code>Hybrid</code>. Klassi signatuuris peab kasutama nii <code>extends</code> kui ka <code>implements</code> osa. | + | # loo klass <code>Hybrid</code>. Klassi signatuuris peab kasutama nii <code>extends</code> kui ka <code>implements</code> osa. See klass peaks siis kõikidest eelnevatest pärinema. |
## kirjuta konstruktor | ## kirjuta konstruktor | ||
## lisa väljad <code>voltage</code>, <code>range</code>, <code>emission</code> | ## lisa väljad <code>voltage</code>, <code>range</code>, <code>emission</code> | ||
## realiseerida <code>getRange()</code>, <code>getEmission()</code>, <code>getVoltage()</code>, <code>getAcceleration()</code>. | ## realiseerida <code>getRange()</code>, <code>getEmission()</code>, <code>getVoltage()</code>, <code>getAcceleration()</code>. | ||
− | ## <code>getAcceleration()</code> tagastab | + | ## <code>getAcceleration()</code> tagastab 4.0. |
# loo klass <code>FuelBus</code> (liquid fuel bus) | # loo klass <code>FuelBus</code> (liquid fuel bus) | ||
## lisa väljad <code>range</code>, <code>emission</code>. | ## lisa väljad <code>range</code>, <code>emission</code>. | ||
## kirjuta konstruktor | ## kirjuta konstruktor | ||
− | ## realiseeri päritud abstraktsed | + | ## realiseeri päritud abstraktsed meetodid |
− | ## <code>getAcceleration()</code> tagastab | + | ## <code>getAcceleration()</code> tagastab 3.0. |
− | + | # Kirjuta klass <code>ElectricBus</code> | |
− | # Kirjuta klass <code> | ||
## kirjuta konstruktor | ## kirjuta konstruktor | ||
## lisa väli <code>voltage</code> | ## lisa väli <code>voltage</code> | ||
− | ## <code>getAcceleration()</code> tagastab | + | ## <code>getAcceleration()</code> tagastab 5.0. |
Lisaks tee klass Main ja sinna sisse: | Lisaks tee klass Main ja sinna sisse: | ||
− | # staatiline meetod nimega <code>findBusWithLowestVoltage</code>. Sellel on üks parameeter, mis on <code>List</code> tüüpi. See, milline on listi elemendi andmetüüp, mõtle ise välja. Meetod vaatab etteantud busside nimekirja läbi ja tagastab selle '''objekti''', millise puhul oli kõige väiksem <code>voltage</code> väärtus. | + | # staatiline meetod nimega <code>findBusWithLowestVoltage</code>. Sellel on üks parameeter, mis on <code>List</code> tüüpi. See, milline on listi elemendi andmetüüp, mõtle ise välja. Meetod vaatab etteantud busside nimekirja läbi ja tagastab selle '''objekti''', millise puhul oli kõige väiksem <code>voltage</code> väärtus. Bussid, millel puudub vastav väli, tuleb arvestusest kõrvale jätta. Kui kõige väiksema väärtusega objekte on mitu, siis tagastada esimene (ehk siis kui järjest neid listist lugeda, siis piisab kontrollimisest, kas element on senisest väikseimast väiksem (range kontroll "<")). Signatuur on selline <code> public static ? findBusWithLowestVoltage(List<?>)</code>, ? asemele pead panema mingi struktuuri nime. |
− | # staatiline | + | # staatiline meetod nimega <code>printData</code>, millele samamoodi antakse kaasa <code>List</code>, milles saab hoida kõiki erinevaid loodud klasse. Meetod kuvab iga listis oleva sõiduki kohta: id, kiirenduse, kohtade arvu. Lisaks näitab elektribussi puhul voltage väärtust. Vedelkütuse bussi kohta kuvada välja range väärtus. |
− | # main-funktsioonis loo üks list, kuhu paned kõiki erinevat tüüpi busse. Kutsu välja kahte teist staatilist | + | # main-funktsioonis loo üks list, kuhu paned kõiki erinevat tüüpi busse. Kutsu välja kahte teist staatilist meetodit. |
+ | |||
+ | == Täpsustused == | ||
+ | |||
+ | <span style="color: #900; font-weight: bold;">Täpsustused</span>: | ||
+ | * [03-18 14:40] tekstis oli näpuviga jäänud: <code>LoquidFuel</code>. Peaks olema <code>LiquidFuel</code>. Kui juba on koodis LoquidFuel, saab igal pool koodis selle ära muuta nii, et parem klikk LoquidFuel peal, refactor -> rename (shortcut windowsis alt+shift+R). Muuda nimi vastavalt vajadusele ära ja enter. Nüüd peaks igal pool koodis olema muudetud. | ||
+ | * [03-18 14:40] loodavad konstruktorid võiksid olla sellised, kus kõik vajalikud väärtused antakse kaasa. Ehk siis näiteks capacity, voltage (sõltuvalt bussi tüübist) jne. Täpset kirjeldust ning parameetrite järjekorda pole ette antud. | ||
+ | * [03-18 14:40] konstruktorisse antavad parameetrid võiks olla kontrollitud selliselt, et negatiivseid väärtusi ei lubata. Kui sisestatakse negatiivne väärtus, tuleks visata ''exception'': <code>throw new IllegalArgumentException();</code>. | ||
+ | * [03-18 17:51] Minimaalse <code>voltage</code> leidmisel tuleb bussid, millel puudub vastav väli (voltage), arvestusest kõrvale jätta. Ehk siis minimaalne tuleb leida nendest, millel see väli on olemas. | ||
== Mall == | == Mall == |
Viimane redaktsioon: 10. märts 2016, kell 06:05
Kirjeldus
Ülesandes harjutame interface
'i ja abstraktse klassi kasutamist.
Ülesande sisu on bussipargi busside kirjeldamine. Allpool (vt #Mall) on antud bussi abstraktne kirjeldus. Te peate seda oma koodis kasutama. Järgmised sammud:
- loo interface
LiquidFuel
, millel oleks kaks meetodi signatuuri:double getRange()
jadouble getEmission()
. - loo interface
Electric
, millel oleks meetodi signatuur:double getVoltage()
. Lisaks oleks sellel kaksdouble
konstanti:HIGH_VOLTAGE = 600
jaLOW_VOLTAGE = 480
. - loo klass
Hybrid
. Klassi signatuuris peab kasutama niiextends
kui kaimplements
osa. See klass peaks siis kõikidest eelnevatest pärinema.- kirjuta konstruktor
- lisa väljad
voltage
,range
,emission
- realiseerida
getRange()
,getEmission()
,getVoltage()
,getAcceleration()
. getAcceleration()
tagastab 4.0.
- loo klass
FuelBus
(liquid fuel bus)- lisa väljad
range
,emission
. - kirjuta konstruktor
- realiseeri päritud abstraktsed meetodid
getAcceleration()
tagastab 3.0.
- lisa väljad
- Kirjuta klass
ElectricBus
- kirjuta konstruktor
- lisa väli
voltage
getAcceleration()
tagastab 5.0.
Lisaks tee klass Main ja sinna sisse:
- staatiline meetod nimega
findBusWithLowestVoltage
. Sellel on üks parameeter, mis onList
tüüpi. See, milline on listi elemendi andmetüüp, mõtle ise välja. Meetod vaatab etteantud busside nimekirja läbi ja tagastab selle objekti, millise puhul oli kõige väiksemvoltage
väärtus. Bussid, millel puudub vastav väli, tuleb arvestusest kõrvale jätta. Kui kõige väiksema väärtusega objekte on mitu, siis tagastada esimene (ehk siis kui järjest neid listist lugeda, siis piisab kontrollimisest, kas element on senisest väikseimast väiksem (range kontroll "<")). Signatuur on sellinepublic static ? findBusWithLowestVoltage(List<?>)
, ? asemele pead panema mingi struktuuri nime. - staatiline meetod nimega
printData
, millele samamoodi antakse kaasaList
, milles saab hoida kõiki erinevaid loodud klasse. Meetod kuvab iga listis oleva sõiduki kohta: id, kiirenduse, kohtade arvu. Lisaks näitab elektribussi puhul voltage väärtust. Vedelkütuse bussi kohta kuvada välja range väärtus. - main-funktsioonis loo üks list, kuhu paned kõiki erinevat tüüpi busse. Kutsu välja kahte teist staatilist meetodit.
Täpsustused
Täpsustused:
- [03-18 14:40] tekstis oli näpuviga jäänud:
LoquidFuel
. Peaks olemaLiquidFuel
. Kui juba on koodis LoquidFuel, saab igal pool koodis selle ära muuta nii, et parem klikk LoquidFuel peal, refactor -> rename (shortcut windowsis alt+shift+R). Muuda nimi vastavalt vajadusele ära ja enter. Nüüd peaks igal pool koodis olema muudetud. - [03-18 14:40] loodavad konstruktorid võiksid olla sellised, kus kõik vajalikud väärtused antakse kaasa. Ehk siis näiteks capacity, voltage (sõltuvalt bussi tüübist) jne. Täpset kirjeldust ning parameetrite järjekorda pole ette antud.
- [03-18 14:40] konstruktorisse antavad parameetrid võiks olla kontrollitud selliselt, et negatiivseid väärtusi ei lubata. Kui sisestatakse negatiivne väärtus, tuleks visata exception:
throw new IllegalArgumentException();
. - [03-18 17:51] Minimaalse
voltage
leidmisel tuleb bussid, millel puudub vastav väli (voltage), arvestusest kõrvale jätta. Ehk siis minimaalne tuleb leida nendest, millel see väli on olemas.
Mall
Bus.java
<source lang="java">
/**
* Abstract class of Bus. */
public abstract class Bus { /** * Unique id. */ private int id; /** * Capacity of the bus. */ private int capacity; /** * Static field which holds the next id. * When a new bus is created, the value is incremented. */ private static int nextId = 1;
/** * Constructor. As this is an abstract class, * creating Bus directly (Bus b = new Bus();) * is not allowed. But this method can be used * by subclass(es). * @param capacity */ public Bus(int capacity) { /* * Let's take next id from a static field. * Static field holds the next id number. * When a new bus is created, the number is increased. * That way every bus gets a unique id. */
id = nextId++;
this.capacity = capacity; }
/** * Returns acceleration of the bus. * @return Acceleration. */ public abstract double getAcceleration();
/** * Returns the id of the bus. * @return Id. */ public int getId() { return id; }
/** * Returns the capacity of the bus. * @return Capacity. */ public int getCapacity() { return capacity; } }
</source>