Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros
Plan for i dag Assignment operatorer Betingelser/selektioner (if og switch) Lokale variable Strengbehandling Interaktion mellem objekter –Abstraktion og moduler –Klassediagram og objektdiagram –Simple datatyper og objekt datatyper –Logiske operatorer og modulus operator –Overload og metodekald Debugging
Assignment operatorer int antal = 10; antal = antal + 1; int samletPris; samletPris = antal * billetPris; int antal = 10; antal += 1; int antal = 10; antal++;
Betingelser: if-sætninger Envejs valg: Tovejs valg: Valg med flere sætninger i samme gren: if (boolean expression) statement; if (boolean expression) statement; else statement; if (boolean expression) { statement1; statement2; }
Betingelser: switch-sætninger Flervejsvalg ud fra en enkelt værdi switch (expression) { case value: statements; break; case value: statements; break; … default: statements; break; } (Javabogen appendix C side )
Betingelser: switch-sætninger Flervejsvalg ud fra en enkelt værdi switch (month) { case 1: case 3: … case 12: numberOfDays = 31; break; case 4: case 6: … case 11: numberOfDays = 30; }
Lokale variable Erklæres i metodens krop Virkefelt (scope): metodens krop Levetid (lifetime): indtil metoden returnerer public int refundBalance() { int amountToRefund; amountToRefund = balance; balance = 0; return amountToRefund; } Anvend altid lokale variable til værdier der kun anvendes lokalt i en metode
Felter, parametre og lokale variable klassificer og angiv virkefelt og levetid: –amount, balance og newBalance public void insertMoney(int amount) { int newBalance = balance + amount; if (amount > 0) balance = newBalance; else System.out.println(”Use a positive amount ” + amount); }
Strengbehandling i Java public class Student { private String name; private String id; public void print() { System.out.println(name + " (" + id + ")"); } public String getLoginName() { return name.substring(0,4) + id.substring(0,3); } Fra index (incl.) Fra index (excl.) konkatenering af strenge ”3” + 4 giver ”34” giver 7
Interaktion mellem objekter Gennemgående eksempel: Et digitalt ur
Abstraktion og modulopdeling Abstraktion –evnen til at at fokusere på det store billede/helhedsindtrykket I stedet for at fortabe sig I detaljer Modulopdeling –at opdele komplekse problemer i mindre enheder der er mere overskuelige (del-og-hersk strategien) Modul –En veldefineret enhed som kan konstrueres separat men som bruges I samspil med andre moduler til at opbygge en større helhed
Modulopdeling i praksis Eksempel – at designe en bil –Opdel bilen I komponenter: hjul, motor, sæder osv. –Design de enkelte komponenter –Design bilen ved at sætte komponenterne sammen og få dem til at interagere
Moduler i Java I Java udgøres modulerne af objekter (grupperet eller hver for sig) Interaktionen mellem modulerne / objekterne er det der binder programmet sammen Objekterne interagerer ved at oprette referencer til hinanden og kalde hinandens metoder
Det digitale ur Et display med 4 cifre? Eller 2 displays med hver 2 cifre? Lighed mellem funktionaliteten i de to displays?
Klasse diagram Klassediagrammet er skrevet i UML notation UML = Unified Modeling Language Klassediagrammet giver et statisk billede af relationerne mellem klasserne
Objekt diagram Objekt diagrammet er skrevet i UML notation Objekt diagrammet viser et dynamisk billede af relationerne mellem objekterne på kørselstidspunktet
Implementation - NumberDisplay public class NumberDisplay { private int limit; private int value; Constructor and methods omitted. }
Implementation - ClockDisplay public class ClockDisplay { private NumberDisplay hours; private NumberDisplay minutes; Constructor and methods omitted. }
Simple typer vs. objekt typer 32 objekt type: defineres af en klasse værdi gemmes i objekt simpel type: er indbygget i sproget værdi gemmes direkte i variabel NumberDisplay hours; int value;
Simple typer vs. objekt typer 32 ObjektType a; int a; ObjektType b; 32 int b; b = a;
Objekter der opretter objekter public class ClockDisplay { private NumberDisplay hours; private NumberDisplay minutes; private String displayString; public ClockDisplay() { hours = new NumberDisplay(24); minutes = new NumberDisplay(60); updateDisplay(); } Konstruktor i NumberDisplay: public NumberDisplay(int rollOverLimit) { limit = rollOverLimit; value = 0; } Aktuel parameter Formel parameter
Hvad skal uret kunne Startes kl. 0:0 eller på bestemt klokkeslæt Stilles til bestemt klokkeslæt Gå et minut ad gangen Vise hvad klokken er Heraf udledes krav til felter og metoder i klasserne ClockDisplay og NumberDisplay
Logiske operatorer && (and – en logisk konjunktion) || (or – en logisk disjunktion) ! (not – en negation) læs mere i app. D.2 public void setValue(int replacementValue) { if((replacementValue >= 0) && (replacementValue < limit)) { value = replacementValue; }
Modulus operatoren % 27 divideret med 4 er lig med 6 rest 3 I Java: –27 / 4 = 6 (med to heltalsoperander) –27 % 4 = 3 (kun med heltalsoperander) –27 / 4.0 = 6.75 (med 1 eller 2 floating point operander) public void increment() { value = (value + 1) % limit; }
Klasser med flere konstruktører public ClockDisplay() { hours = new NumberDisplay(24); minutes = new NumberDisplay(60); updateDisplay(); } public ClockDisplay(int hour, int minute) { hours = new NumberDisplay(24); minutes = new NumberDisplay(60); setTime(hour, minute); } Klassens konstruktor er overloaded, dvs. der er flere udgaver af samme metode med forskellige parameterlister
Interne og eksterne metodekald Internt metodekald (metode i samme objekt): Syntax: metodekald(parameterliste) Eksempel: setTime(12,5); alternativt: this.setTime(12,5); Eksternt metodekald (metode i andet objekt) Benytter ”dot” notation Syntax: object.metodekald(parameterliste) Eksempel: clock.setTime(12,5);
Debugging Bruges til at finde fejl i programmet Breakpoint markerer hvor koden skal stoppe eksekveringen ”Step” eksekverer en linie kode og går så videre til næste kodelinie – abstraktion fra detaljer ”Step into” går i detaljer og går ind i de enkelte metodekald