Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

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 ()

Merk at du kan godt lage andre konstruktører i tillegg, hvis du synes det er praktisk. F.eks. kan du lage en med et varargs-parameter av typen Object[], altså FeatureList(Object... namesValues), slik at en kan skrive new FeatureList("a", 2.0, "b", 3.0)

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)
fl1.hasFeature("a") => true
fl1.hasFeature("c") => false 

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)
fl1.getFeatureNames() => Collection<String> med elementene "a" og "b" 

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)
fl1.getFeatureValue("a") => 2.0
fl1.getFeatureValue("c") => 0.0

FeatureList toFeatureList() - lager en kopi (altså en ny FeatureList-instans) med samme innhold som denne FeatureList-instansen. Hvis denne instansen eller kopien siden endres (med en av metodene nedenfor) så skal ikke den andre endres.

// Anta fl1 er (a: 2.0, b: 3.0)
FeatureList fl2 = fl1.toFeatureList() => fl2 er nå (a: 2.0, b: 3.0)
// hvis en nå endrer fl1 eller fl2 så vil ikke den andre blir endret

I tillegg kan det være lurt å lage en toString()-metode, som returnerer en String på formen som er brukt i eksemplene.

 

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();
fl1.addFeature("a", 2.0) => fl1 er (a: 2.0)
fl1.addFeature("b", 3.0) => fl1 er (a: 2.0, b: 3.0)
fl1.addFeature("a", 4.0) => fl1 er (a: 2.0, b: 3.0)

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)
fl1.setFeatureValue("a", 4.0) => fl1 er
(a: 4.0, b: 3.0)
fl1.setFeatureValue("c", 1.0) => fl1 er (a: 4.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: 24.0, b: 43.0)
fl1.increment(3.0) => fl1 er (a: 57.0, b: 76.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: 57.0, b: 76.0), mens fl2 er (b: 1.0, c: 6.0)
fl1.add(f2) => fl1 er (a: 57.0, b: 87.0, c: 6.0), fl2 er uendret

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: 57.0, b: 87.0, c: 6.0) og fl2 fortsatt (b: 1.0, c: 6.0)
fl2.addFeature("d", 3.0) => fl2 er (b: 1.0, c: 6.0, d: 3.0)
fl1.mult(f2) => (a: 0.0, b: 87.0, c: 36.0, d: 0.0)

Løsningshint:

...