Læringsmål for forelesningen • Objektorientering – Enumerations
• Javaprogrammering – Enumerations
• Eclipse – Opprette Enumklasse
1
Enumerations hvorfor • I Cardklassen har vi brukt en String for å angi kortfarge • Kun et begrenset sett verdier, ”H”, ”S”, ”D”, ”C” har vært lov å bruke • Problemer – Initialisering av Cardobjekt med ulovlig farge, f.eks. ”Hjerter” – Sammenligning card.getSuit() == ”H” kan gi false, selv for hjerterkort
• Hverken tall eller String er egnet, hvis en trenger typesjekking og egendefinerte metoder 2
Enumerations (2) • Mange programmeringsspråk gir muligheten til å definere nye typer verdier, som ligner både på tall og på objekter. – – – –
Et (begrenset) sett verdier som refereres til ved navn. Verditypen er ulike alle andre typer. Verdiene kan ha en logisk ordning. Enkle operasjoner kan utføres på dem, men ingen behov for avansert OO (som arv)
• Kalles ”enumerations” – som kan oversettes til”sette nummer” på eller ”telle/ramse opp” • I Java representerer en enum ett sett av forhåndsdefinerte instanser • Vanligvis brukt kun når vi skal representere et sett navn på ”noe”. 3
Enumerations (3) • Eksempel: – enum Kortfarge { spar, hjerter, ruter, kløver } – Kortfarge er nå en type – Fire instanser er ferdiglaget og flere kan ikke opprettes. – For hver instans finnes det et navn som refererer til verdien (som ikke kan endres). I Java er dette et statisk felt og brukes på vanlig måte med, f.eks. Kortfarge.spar. 4
Enumerations (3) • Typedeklarasjoner kan utnytte den nye klassen, f.eks. public class Spillkort { private Kortfarge farge; private int verdi; } public Spillkort(Kortfarge farge, int verdi) { this.farge = farge; this.verdi; }
• Verdiene har ofte en intern ordning (tilsvarende heltall)
– I Bridgespillet er fargene rangert kløver, ruter, hjerter, spar – Rekkefølgen som de står i, definerer ordningen dem i mellom. Noen språk tillater også at en oppgir et nummer som verdien skal ha i rekken av verdier.
5
Enumerations i Java (1) • enumdeklarasjonen definerer ny type, med et (begrenset) sett verdikonstanter
• Enumtyper har mange likhetstrekk med klassedefinisjoner... 6
Enumerations i Java (2) • enumdeklarasjonen – navngir en ny type/klasse med navngitte verdier: public enum { , , ...; } – definerer et sett konstanter som navngis med ., f.eks. Kortfarge.SPAR
• En del metoder blir automatisk definert – String name() returnerer attributtnavnet – int ordinal() returnerer nummeret i rekken av verdier (0 og oppver) – values(): statisk metode som returnerer tabell med alle verdiene
7
Enumerations i Java (3) • Flere metoder er definert, basert på disse
– String toString() returnerer navnet, dvs. name() – valueOf(String) returnerer verdien for et bestemt navn – int compareTo() er basert på ordinal() og støtter sortering
• En kan (re)definere metoder, som for vanlige klasser • switchkonstruksjonen kan brukes på verdier av enumtyper 8
Enumerations i Java (4) • En kan definere attributter og gi disse ulike verdier vha. av en konstruktør. • Merk at vi likevel ikke kan bruke new selv. 9
Har du nådd læringsmålene? • Javaprogrammering – Lag en enum for kortverdiene også, med sekvensen ess, to, ..., ti, knekt, dame og konge. – Endre Spillkort og Kortstokkspillklassene, slik at de benytter den nye Kortverdiklassen (som altså er en enumerationklasse). – Hva gjør du dersom et kortspill bruker verdiene to, tre, ..., konge og ess istedenfor ess, to, ..., konge? 10