270 likes | 369 Views
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
E N D
Indledende ProgrammeringUge 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 samletPris; samletPris = antal * billetPris; int antal = 10; antal = antal + 1; int antal = 10; antal += 1; int antal = 10; antal++;
Betingelser: if-sætninger if (boolean expression) statement; • Envejs valg: • Tovejs valg: • Valg med flere sætninger i samme gren: if (boolean expression) statement; else statement; if (boolean expression) { statement1; statement2; }
Betingelser: switch-sætninger (Javabogen appendix C side 439-440) • Flervejsvalg ud fra en enkelt værdi switch (expression) { case value: statements; break; case value: statements; break; … default: statements; break; }
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 Anvend altid lokale variable til værdier der kun anvendes lokalt i en metode public int refundBalance() { int amountToRefund; amountToRefund = balance; balance = 0; return amountToRefund; }
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); } } konkatenering af strenge ”3” + 4 giver ”34” 3 + 4 giver 7 Fra index (excl.) Fra index (incl.)
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 giver et statisk billede af relationerne mellem klasserne Klassediagrammet er skrevet i UML notation UML = Unified Modeling Language
Objekt diagram Objekt diagrammet viser et dynamisk billede af relationerne mellem objekterne på kørselstidspunktet Objekt diagrammet er skrevet i UML notation
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 simpel type: er indbygget i sproget værdi gemmes direkte i variabel int value; 32 NumberDisplay hours; objekt type: defineres af en klasse værdi gemmes i objekt
Simple typer vs. objekt typer ObjektType a; ObjektType b; b = a; int a; int b; 32 32
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(); } } Aktuel parameter Konstruktor i NumberDisplay: public NumberDisplay(int rollOverLimit) { limit = rollOverLimit; value = 0; } 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 public void setValue(int replacementValue) { if((replacementValue >= 0) && (replacementValue < limit)) { value = replacementValue; } } • && (and – en logisk konjunktion) • || (or – en logisk disjunktion) • ! (not – en negation) læs mere i app. D.2
Modulus operatoren % public void increment() { value = (value + 1) % limit; } • 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)
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