Excerpt |
---|
Denne oppgaven handler om en FeatureList-klasse, som representerer en såkalt feature vector. Dette er enkelt sagt er et sett med ord/navn med hvert sitt tilhørende (desimal)tall, omtrent som en matematisk vektor i N dimensjoner. |
Bakgrunn
En feature vector (norsk: egenskapsvektor?) knytter et sett med navngitte "dimensjoner" til hvert sitt (desimal)tall, slik at en kombinasjon av egenskaper kan representeres som et punkt i et N-dimensjonalt rom. En slik vektor brukes i mange anvendelser, f.eks. til å representere evner. En figur i et spill kan f.eks. ha tallverdier for kløkt, smidighet, utholdenhet osv., tilsvarende evnevektoren (kløkt: 10, smidighet: 15, utholdenhet: 5). Hvis figuren utfører visse (trenings)oppgaver, så vil evnene endre/utvikle seg. Trikset da er å knytter en tilsvarende evnevektor til oppgaven, så en kan beregne figurens nye evneprofil ved å legge samme de to vektorene: ny evnevektor = gammel evnevektor + oppgavevektor.
...
FeatureList-klassen har en del grunnleggende metoder for å hente ut informasjon om hvilke dimensjoner eller egenskapsnavn og verdier vektoren har. I tillegg har den en del metoder for å endre på innholdet, både legge til dimensjoner og verdier og endre eksisterende verdier:Grunnleggende metoder:.
Metoder som leser tilstanden |
---|
FeatureList() - konstruktøren initialiserer objektet slik at det fra starten er helt tomt, dvs. uten egenskaper (navn og verdier). FeatureList fl1 = new FeatureList() => fl1 er () |
boolean hasFeature(String featureName) - |
...
returnerer true |
...
dersom egenskapen (dimensjonen) med det gitt navnet finnes i denne FeatureList-instansen, |
...
og false ellers. // Anta fl1 er (a: 2.0, b: 3.0) |
Collection<String> getFeatureNames() - returnere alle egenskapsnavnene (dimensjonene) |
...
i denne FeatureList-instansen på én gang. Rekkefølgen er uten betydning. // Anta fl1 er (a: 2.0, b: 3.0) |
double getFeatureVaue(String featureName) - returnerer verdien for den angitte egenskapen (dimensjonen) i denne FeatureList-instansen. Hvis den angitte egenskapen ikke finnes, så |
...
skal metoden returnere 0.0, som er den (implisitte) verdien for manglende egenskaper. // Anta fl1 er (a: 2.0, b: 3.0) |
I tillegg kan det være lurt å lage en toString()-metode, som returnerer en String på formen som er angitt over.
Metoder som endrer tilstanden |
---|
...
void addFeature(String featureName, double value) - legger til egenskapen med det angitte navnet, dersom denne ikke finnes fra før. Hvis den finnes fra før, skal egenskapen ikke endres. FeatureList fl1 = new FeatureList(); |
void setFeatureValue(String featureName, double value) - endrer verdien til den angitte, eksisterende egenskapen. Hvis egenskapen ikke finnes, så skal FeatureList-instansen ikke endres. // fortsettelse, fl1 er altså (a: 2.0, b: 3.0) |
void increment(double value) - øker verdien til alle egenskapene i denne FeatureList-instansen med den angitte verdien. // fortsettelse, fl1 er altså (a: 2.0, b: 4.0) |
void add(FeatureList featureList) - endrer denne FeatureList-instansen, slik at den etterpå har alle egenskapene som denne og den angitte instansen hadde. Verdien til hver egenskap er summen av verdiene i de to instansene. Hvis en instans mangler en egenskap, så er det som om verdien til den er 0.0. // fl1 er fortsatt (a: 5.0, b: 7.0), mens fl2 er (b: 1.0, c: 6.0) |
void mult(FeatureList featureList) - endrer denne FeatureList-instansen, slik at den etterpå har alle egenskapene som denne og den angitte instansen hadde. Verdien til hver egenskap er produktet av verdiene i de to instansene. Hvis en instans mangler en egenskap, så er det som om verdien til den er 0.0. // fl1 er fortsatt (a: 5.0, b: 8.0, c: 6.0) og fl2 fortsatt (b: 1.0, c: 6.0) |
JExercise-testkode for denne oppgaven finner du her: objectstructures/FeatureListTest.java. jextest-koden finner du her: objectstructures/FeatureList.jextest.
...