Object interaction Grunnleggende programmering i Java Monica Strand 3. september 2007 1 Innhold Til nå: Hva objekter er og hvordan de implementeres I klassedefinisjonene: klassevariable (fields), konstruktører (constructors), metoder (methods) Fra nå: Interaksjon mellom objekter 2 Abstraksjon Dele oppgaven inn i deloppgaver og deloppgaver i del deloppgaver også kalt Devide and conquer (splitt og hersk) Når man har klart å løse en av deloppgavene kan man glemme denne og konsentrere seg om høyre nivå problemer Lettere å håndtere etter hvert som programmene blir større og mer komplekse 3 1
Modulisering Prosess for å dele helheten inn i veldefinerte deler som kan lages og kjøres separat og som vil fungere sammen på en veldefinert måte 4 Bileksempel En gruppe ingeniører har bilen i sin helhet som prosjekt og bryr seg om design av bilen, hvor motoren skal være, plassering av seter etc En annen gruppe ser på motoren som sitt prosjekt (sin modul) og fokuserer på alle små og store detaljer i denne En annen gruppe vil se på tennpluggene (egen modul) Den første gruppen abstraherer seg fra tekniske detaljer etc etc 5 Modulisering vs. Abstraksjon Modulisering er prosessen for å del større problemer inn i mindre deler, mens abstraksjon er evnen til å ignorere detaljer for å fokusere på helheten 6 2
Bileksempelet igjen Bil som dataprogram: Bilen er et objekt som består av masse objekter som igjen består av masse objekter Bil Girkasse Motor Hjul Seter Etc. Tennplugg Stempel Etc. 7 Klokke Ett objekt 09:13 0 9 8 Klokke Bryr seg kun om antall timer fra 0 23 09:13 09 13 Tre objekter Bryr seg kun om antall minutter fra 0 59 9 3
Implementere klokke programmet De to tallene for henholdsvis timer og minutter: Én klasse for et to sifret tall med en aksessmetode for å hente verdien og to mutatormetoder for å sette verdien og øke den To objekter med forskjellige start og sluttverdier (00 59 og 00 23) 10 Klasse for to sifret visning NumberDisplay: Klassen må lagre to verdier; en for grenseverdien og en for aktuell tallverdi public class NumberDisplay { private int limit; private int value; } 11 Klasse for selve klokken ClockDisplay Klassen må lagre to to sifrede objekter public class ClockDisplay { private NumberDisplay hours; private NumberDisplay minutes; } 12 4
Objektdiagram hours mydisplay: ClockDisplay :NumberDisplay 09 minutes :NumberDisplay 13 Objektreferanser: Variabler av typen objekt lagrer referanser til objekter 13 Klassediagram ClockDisplay Kan lage flere objekter av en klasse NumberDisplay 14 Objekt /Primitive datatyper Java kjenner to svært forskjellige datatyper: Primitive datatyper Forhåndsdefinerte i programmeringsspråket byte, short, int, long, float, double, char, boolean Objekt datatyper Definert av klasser Noen forhåndsdefinert i Java (eks: String), andre lager vi selv Primitive datatyper lagrer verdien direkte i variabelen, mens objekt datatypen lagrer en referanse til et objekt som kan lagre mange verdier i sine respektive variable 15 5
Excercise 3.5 Start BlueJ, open the clock display example and experiment with it, create a ClockDisplay object, then open an inspector window for this object. With the inspector open, call the object s methods. Watch the displaystring field in the inspector. Read the project comment (by double clicking the text note icon on the main screen) to get more information. 16 Logiske operatorer Opererer på booleanverdier (true or false) og produserer booleanverdier som resultat && (and) (or)! (not) a&& b er true hvis begge er true og false hvis en av dem, eller begge er false a b er true hvis enten a, b eller begge er true og false hvis begge er false!a er true hvis a er false og false hvis a er true 17 Excercise 3.9 Hvilke av følgende uttrykk returnerer true?! (4 < 5)! false (2 > 2) ( (4 == 4) && (1 < 0) ) (2 > 2) (4 == 4) && (1 < 0) (34!= 33) &&! false 18 6
Lenking av tekststrenger Operatoren + oppfører seg forskjellig avhengig av typen den operer på Eks: 42 + 12 (legger sammen tallene til 54, int+int = int) Java + with BlueJ (lenker sammen setningene til Javawith BlueJ, String + String = String) answer: + 42 (gjør om 42 til String og lenker sammen til answer: 42, String + int = String return 0 + value; (hvis value lagrer tallet 3 (int) vil 03 (String) returneres Return + value; (hvis value lagrer tallet 13 (int) vil 13 (String) returneres 19 Modulusoperatoren (%) Modulusoperatoren gir oss resten ved heltallsdivisjon Tenk dere 8 pizzastykker som skal deles på 3 personer int antallpizzastykkertilhver = 8 / 3; int antallpizzastykkerigjen = 8 % 3; 20 Modulus Hva er resultatet av følgende regnestykker? 3% 3 = 6 % 3 = 30 % 3 = 10 % 5 = 16 % 3 = Hvis vi tar modulus 2 på et tall, hvilken egenskap ville dette ha? 21 7
Objekter som lager objekter new ClassName ( paramterliste) Eksempel: hours = new NumberDisplay (24); minutes = new NumberDisplay (60); 22 Flere konstruktører i en klasse Både konstruktører og metoder kan ha instanser med samme navn så lenge de ikke har samme antall parametere Eksempel: new ClockDisplay(); new ClockDisplay(hour, minute); 23 Interne metodekall methodname ( parameterliste) Eksempel: Metodesignatur: private void updatedisplay() Metodekall: updatedisplay(); 24 8
Eksterne metodekall Metoder kan kalle metodene til andre objekter: object. methodname ( paramterliste) Eksempel: public void timetick() { minutes.increment(); if (minutes.getvalue() == 0) { hours.increment(); } updatedisplay(); } 25 9