ITI0011:harjutus 08
Üldine
Ülesande tähtaeg: 9. - 11. märts 2016
Kaust git'is: EX08
Ülesanne
Sind kutsuti tipptaseme programmeerijana osa võtma ülisalajasest sõjaväelisest operatsioonist. Sinu ülesandeks on komplekteerida operatsiooni missioonidel osalevaid tiime ja neid manageerida. Kahjuks on maailma parimad sõdurid juba grupeerunud A-Teamiks ning valitsuse palgale tulemiseks on järgi jäänud vaid teisejärgulised sõdurid. Nemad ei saa ise oma rühmade moodustamisega hakkama ning sinu ülesanne on neid sellega aidata. Otsustad kasutada teadmisi objektorienteeritud programmeerimise vallast luues kõigest vajalikust klassid ja nende järgi objektid.
Põhiosa implementeerimiseks on vaja luua SoldierOfFortune
klass, mis tähistab sõdurit ja Team
klass, mis tähistab tiimi.
SoldierOfFortune
klassis implementeeri järgmised väljad ja meetodid:
public SoldierOfFortune()
// Konstruktor, soovi korral võib ise kirjutada konstruktori, mille sisendiks onString firstName
,String codeName
,String lastName
String firstName
String lastName
String codeName
// Sõduri koodnimetuspublic String toString()
// Tagastab sõduri täisnime kujul ‘eesnimi “koodnimi” perenimi’. Kui ühtegi nime ei ole, tagastada "".
Team
klassis implementeeri järgmised väljad ja meetodid:
public Team();
// Konstruktor, soovi korral võib ise kirjutada konstruktori, mille sisendiks on koodnimiString codeName
List<SoldierOfFortune> members
// List, mis sisaldab sõduri objektepublic void addSoldierToTeam(SoldierOfFortune)
// Lisab liikmete listi uue sõduri. Sama sõdurit mitu korda lisada ei saa.public String toString()
// Tagastab tiimi nime ja tema liikmete koodnimetused kujul ‘tiimi nimi: liige1, liige2, ...’. Kui tiimil puudub koodnimi, siis printida tiimiliikmete koodnimetused eraldatuna koma + tühikuga. (Nt. "G.A., Bottom"). Kui tiimil pole liikmeid, printida tiimi koodnimetus kujul "koodnimi: ".public int getNumberOfSoldiers()
// Tagastab tiimiliikmete arvu
Eelnevas nimekirjas välja toodud väljad peavad olema privaatsed ja omama vastavaid avalikke (public) get/set meetodeid. Nimekirjas välja toodud meetodid võivad vajada täiendavaid muutujaid. Meetodite puhul on märgitud vaid argumendi tüüp.
Boonus
Lisaosa jaoks implementeeri lisaks ka Mission
klass ning täienda olemasolevaid klasse SoldierOfFortune
ja Team
.
Mission
:
public Mission()
// Konstruktor, soovi korral võib ise kirjutada konstruktori, mille sisendiks on String codeNamevoid setCodeName(String)
// Missiooni koodnimetusboolean isCompleted()
// Kas missioon on tehtud või mittevoid setRequiredMissionsCompleted(int)
// Missiooni õnnestumiseks vajalik nõue. Tiimiliikmete keskmine õnnestunud missioonide arv peab olema vähemalt nii palju.public boolean receiveTeam(Team)
// Tagastab, kas tiim täidab selle missiooni nõudeid. Kui tiimi ei eksisteeri või tiimi liikmeid ei ole, tagastadafalse
.public String toString()
// Tagastab missiooni nime kujul ‘Operation koodnimetus’
SoldierOfFortune
klassi lisa järgmised meetodid:
int getNumberOfMissionsCompleted()
//Mitu missiooni sõdur on edukalt läbinudvoid setNumberOfMissionsCompleted(int)
Team
klassi lisa järgnev:
public double averageMissionsCompleted()
// Tagastab tiimi liikmete õnnestunud missioonide arvude aritmeetilise keskmise. Kasutatakse missiooni nõuete täitmise kontrollimisel. Kui liikmeid ei eksisteeri, tagastada 0.0public boolean sendToMission(Mission)
// Kutsub missioonil väljareceiveTeam
meetodi. Kui missioon õnnestub, lisatakse missioon õnnestunud missioonide listi. Kui missiooni ei eksisteeri, tagastadafalse
.List<Mission> getCompletedMissions()
// Tagastab tiimi õnnestunud missioonide järjendi
Mall
EX08.java: <source lang="java"> public class EX08 {
public static void main(String[] args) { SoldierOfFortune soldier1 = new SoldierOfFortune();
// SoldierOfFortune soldier1 = new SoldierOfFortune("Gerald Albert", "G.A.", "Garacus"); // Ise kirjutatud konstruktoriga
soldier1.setFirstName("Gerald Albert"); soldier1.setLastName("Garacus"); soldier1.setCodeName("G.A.");
SoldierOfFortune soldier2 = new SoldierOfFortune(); soldier2.setFirstName("Templeton"); soldier2.setLastName("Peck"); soldier2.setCodeName("Bottom");
SoldierOfFortune soldier3 = new SoldierOfFortune(); soldier3.setFirstName("John"); soldier3.setLastName("Bro Hard"); soldier3.setCodeName("McClean");
SoldierOfFortune soldier4 = new SoldierOfFortune(); soldier4.setFirstName("John"); soldier4.setLastName("Rambro"); soldier4.setCodeName("Your Worst Nightmare"); SoldierOfFortune soldier5 = new SoldierOfFortune(); soldier5.setFirstName("Arnie"); soldier5.setLastName("Blackman"); soldier5.setCodeName("The Initiator");
Team bTeam = new Team(); bTeam.setCodeName("B-Team"); Team cTeam = new Team(); cTeam.setCodeName("C-Team");
bTeam.addSoldierToTeam(soldier1); bTeam.addSoldierToTeam(soldier2); bTeam.addSoldierToTeam(soldier3); cTeam.addSoldierToTeam(soldier3); // Soldier 3 on kahes tiimis cTeam.addSoldierToTeam(soldier4); cTeam.addSoldierToTeam(soldier5);
System.out.println(soldier1); // -> Gerald Albert "G.A." Garacus System.out.println(bTeam); // -> B-Team: G.A, Bottom, Bro Hard System.out.println(bTeam.getNumberOfSoldiers()); // -> 3 System.out.println(cTeam.getNumberOfSoldiers()); // -> 3
//Lisaosa näide Mission mission1 = new Mission(); mission1.setCodeName("Delta"); mission1.setRequiredMissionsCompleted(0); bTeam.sendToMission(mission1); System.out.println(bTeam.getCompletedMissions().size()); // -> 1 }
} </source>