130 likes | 280 Views
Kapittel 4. Skriving av klasser. 4.1 Anatomien til ein klasse. Så langt har vi brukt ferdige klasser frå klassebiblioteket i Java Vi lagar objekt og brukar metoder frå desse klassene
E N D
Kapittel 4 Skriving av klasser
4.1 Anatomien til ein klasse • Så langt har vi brukt ferdige klasser frå klassebiblioteket i Java • Vi lagar objekt og brukar metoder frå desse klassene • Vi veit ikkje korleis desse klassene ser ut “innvendig”, alt vi treng å vite er kva dei tilbyr og korleis vi kan bruke dei • Vi skal no lære å skrive våre eigne klasser i tillegg til slike som berre har ein main() metode
Anatomien til ein klasse • Vi treng klasser som representerer objekt med veldefinert tilstand og oppførsel • Deklarasjoner av data definerer tilstand, metoder definerer oppførsel • Vi kallar data og metoder for medlemmer av klassen • Litt om terning-eksemplet
Anatomien til ein klasse • Scope (referanseområde) • Variable på klassenivå er tilgjengelege for alle metodar i klassen • Variable inne i ein metode er ikkje synlege eller tilgjengelege utanfor metoden, dei er sågar ikkje-eksisterande utanfor metoden • Instansdata • Alle instanser har eigne data, om vi har fem terning-objekt har dei kvar sin verdi • Når instanser (objekt) blir oppretta, får kvar instans sitt område i minnet der instansvariable blir lagra • UML-diagram • Dette blir sentralt i In212, ikkje fullt så viktig her • Nyttig å kunne lese og forstå UML-diagram
4.2 Innkapsling • Innkapsling er eit sentralt prinsipp i objektorientering • Går ut på at objekt skal administrere og kontrollere sine eigne data • Kun objektet sjølv skal kunne endre data • Kode utanfrå skal ikkje ha direkte tilgang til dataverdiar • Tilgang utanfrå berre via metodar
Innkapsling • Vi oppnår innkapsling ved å bruke modifiers (modifikator, endringsord) • Dette er reserverte ord i Java som blir brukt til å spesifisere spesielle trekk ved konstruksjonar i språket • final – modifier brukt til å deklarere ein konstant • Visibility modifiers • private – støttar innkapsling og betyr at medlemmet (variabel eller metode) ikkje er tilgjengeleg utanfrå. Bør alltid brukast for klassevariable • public – medlemmet er tilgjengeleg for alle. Blir brukt for metodar som skal vere tilgjengelege. • protected – dette gjeld arv, som vi kjem tilbake til seinare
Innkapsling • Bruk av get- og set-metoder støttar innkapsling • Kan virke overflødig, kvifor ikkje ha variabelen public i staden for å ha public get- og set-metode? • Prinsipielt viktig, lettare å sjå kva vi gjer når vi brukar ein set-metode • objekt.verdi = 7; • objekt.setVerdi(7); • Kva om vi vil gi lese, men ikkje skrive-tilgang?
4.3 Innholdet i ein metode • Ein metodedeklarasjon består av • Modifier – public, private, static o l • Type – void eller type returverdi • Identifier – namn på metoden • Parameters • Parameterliste som spesifiserer type og namn for verdiar som skal sendast til metoden når han blir kalt • Formelle og verkelege parameter • Throws clause – eventuelle exceptions • Body – inkludert return • Vi ser på bank account-eksemplet
4.4 Konstruktørar • Konstruktøren til ein klasse er ein metode som blir kalt når eit objekt av klassen blir laga • Konstruktøren må ha same namn som klassen • Konstruktøren har ingen returtype, heller ikkje void • Konstruktøren blir brukt til å initialisere objektet, d v s gi verdi til instansvariable • Default konstruktør som ikkje tek parameter blir brukt om vi ikkje skriv konstruktør
4.5 Grafiske objekt • Eksempla SmilingFace og Splat • Her lagar vi eigne klasser som arvar JPanel • På denne måten definerer vi tillegg til det som finst i JPanel • Vi tegnar på sjølve panelet i staden for å legge til komponentar i panelet • Bruken av super() er kall til JPanel-klassen, meir om dette når vi kjem til arv
4.6 GUI • Viktige konsept når vi skal lage interaktive GUI-baserte program: • Komponentar som viser informasjon eller tilbyr brukaren å utføre noko • Knapper, tekstfelt, menyar • Events er objekt som representerer hendingar vi er interesserte i • Ein knapp som er blitt trykt på genererer eit event-objekt • Listeners er objekt som ventar på at ei hending skal inntreffe, og som reagerer når det skjer • Program som er orientert rundt eit GUI og reagerer på det brukaren gjer, blir kalla event-driven
4.7 Knapper • PushCounter • Enkel main() metode som lagar eit JFrame-objekt, legg til eit PushCounterPanel og viser dette • PushCounter-klasse som arvar JPanel • Inneheld ein teljar, ein JButton og ein JLabel • Legg til ein ButtonListener på JButton-objektet for å kunne fange opp at brukaren trykker på knappen • Indre klasse ButtonListener i PushCounter • Implementerer grensesnittet ActionListener • Meir om grensesnitt i kap 6 • Bruker indre klasse når ingen andre skal ha tilgang til klassen
4.8 Tekstfelt • Fahrenheit • Bygd på same lest som PushCounter • Bruker tekstfelt i staden for knapp • I dette tilfellet er det trykk på Enter-tasten som genererer hendinga vi vil reagere på • actionPerformed() metoden i listener-klassen definerer kva som skal skje