Föreläsning 3, Kapitel 3 Objektinteraktion - Skapa objekt som samarbetar Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Replace this with your course title and your name/contact details. Fredric Ragnar fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén andreas.hedren@hgo.se
Idag Hur objekt interagerar med andra objekt Hur objekt består av andra objekt Diskutera typer och primitiva typer
En digitalklocka
Abstraktion och modularisering Abstraktion är förmågan att kunna bortse från detaljer för att fokusera på ett problem på högre nivå. Modularisering är processen att dela upp en helhet till väl avgränsade delar som kan byggas och testas var för dig och samarbeta på ett bra sätt.
Modularisera klockans display En display med fyra siffror? Eller två displayer med två siffror?
Klassen NumberDisplay public class NumberDisplay { private int limit; private int value; //Konstruktor och //metoder utelämnade }
Klassen ClockDisplay public class ClockDisplay { private NumberDisplay hours; private NumberDisplay minutes; //Konstruktor och //metoder utelämnade }
Objektdiagram
Klassdiagram Notera att i klassdiagrammet så går det en pil från klassen ClockDisplay till klassen NumberDisplay. Det är för att detta gäller klasserna och inte objekten.
Primitiva typer vs. objekt SomeObject obj; Objekt int i; Primitiv typ 32
Primitiva typer vs. objekt SomeObject a; SomeObject b; b = a; int a; int b; 32 32
Källkod: NumberDisplay public NumberDisplay(int rollOverLimit) { limit = rollOverLimit; value = 0; } public void increment() value = (value + 1) % limit;
Källkod: NumberDisplay public String getDisplayValue() { if(value < 10) return "0" + value; else return "" + value; }
Objekt som skapar objekt public class ClockDisplay { private NumberDisplay hours; private NumberDisplay minutes; private String displayString; public ClockDisplay() hours = new NumberDisplay(24); minutes = new NumberDisplay(60); updateDisplay(); }
Metodanrop public void timeTick() { minutes.increment(); if(minutes.getValue() == 0) //Det slog just över hours.increment(); } updateDisplay();
Intern metod /** * Uppdatera den interna stängen som * representerar displayen */ private void updateDisplay() { displayString = hours.getDisplayValue() + ":" + minutes.getDisplayValue(); }
ClockDisplay objektdiagram
Objekt som skapar objekt I klassen NumberDisplay: public NumberDisplay(int rollOverLimit); formell parameter I klassen ClockDisplay: hours = new NumberDisplay(24); egentlig parameter
objekt.metodNamn(parametrar); Metodanrop Internt metodanrop updateDisplay(); Externt metodanrop minutes.increment(); //Generellt objekt.metodNamn(parametrar); När det gäller interna metodanropet kan man även använda sig av självreferensen ”this” för att förtydliga vilket objekt som anropar metoden. Exempelvis för det interna anropet ovan: this.updateDisplay();
Frågor att ställa sig efter föreläsningen Vad är det egentligen som skiljer mellan typer från primitiva typer? Vilka olika primitiva typer finns det? Hur stora eller hur små värden kan lagras i den primitiva typen int?