Fundamentale sprogbegreber Sætninger og udtryk Niveauer af programbeskrivelse (statisk versus dynamisk syn)
Oversigt Sætninger Udtryk Niveauer af programbeskrivelse simple sætninger (assignment, metodekald) sammensatte sætninger (selektion, iteration, blok) (afsnit 6 i manualen) Udtryk operatorer præcedens og parenteser Niveauer af programbeskrivelse statisk syn versus dynamisk syn klassediagram, JavaDoc, Java-kode objektdiagram, sekvensdiagram dIntProg, E12
Simple sætninger Assignment Metodekald v= exp; x= x + 1; a= b; udregn værdien af udtrykket på højresiden og tildel denne værdi til variablen på venstresiden Metodekald interne metodekald eksterne metodekald v= exp; x= x + 1; a= b; x= 3 * w.getLeavesEaten(); object-reference.method(...); w.eatLeaf(); c.moveto(200, 300); dIntProg, E12
Interne metodekald w: Wombat public class Wombat extends Actor { private boolean foundLeaf() { ... } private void eatLeaf() { ...; leavesEaten= leavesEaten + 1; public void act() { if ( foundLeaf() ) { eatLeaf(); … w: Wombat act() foundLeaf() eatLeaf() dIntProg, E12
Interne metodekald (this) public class Wombat extends Actor { private boolean foundLeaf() { ... } private void eatLeaf() { ...; leavesEaten= leavesEaten + 1; public void act() { if (this.foundLeaf() ) { this.eatLeaf(); … w: Wombat act() foundLeaf() eatLeaf() dIntProg, E12 5
Eksterne metodekald public class AnimalTrainer{ Turtle t; ... a: AnimalTrainer t: SkilledTurtle public class AnimalTrainer{ Turtle t; ... public void doShow() { t.square(50); t.square(200); t.boxes(20); } doShow() square(50) move(200) boxes(20) Tegn sekvensdiagram på tavlen dIntProg, E12
Sammensatte sætninger Sekvens efterstilling af sætninger, først A, så B Selektion betinget udførelse af sætning Iteration repetition af sætning Flere sætninger kan samles til én ved at danne en blok: { ... } A B if ( B ) S1 if ( B ) S1 else S2 for ( exp1; exp2; exp3) S while ( B ) S dIntProg, E12
Eksempler, sekvens public void setTime(int hour, int minute) { hours.setValue(hour); minutes.setValue(minute); updateDisplay(); } public ClockDisplay(int hour, int minute) { hours= new NumberDisplay(24); minutes= new NumberDisplay(60); setTime(hour, minute); } dIntProg, E12
Sammensatte sætninger Sekvens efterstilling af sætninger, først A, så B Selektion betinget udførelse af sætning Iteration repetition af sætning Flere sætninger kan samles til én ved at danne en blok: { ... } A B if ( B ) S1 if ( B ) S1 else S2 for ( exp1; exp2; exp3) S while ( B ) S dIntProg, E12
Eksempler, selektion (1) public void timeTick() { minutes.increment(); if ( minutes.getValue() == 0 ) { // it just rolled over! hours.increment(); } updateDisplay(); dIntProg, E12
Eksempler, selektion (2) public String getDisplayValue() { if ( value < 10 ) { return "0" + value; } else { return "" + value; dIntProg, E12
Eksempler, selektion (3) public void act() { if( foundLeaf() ) { eatLeaf(); } else if( canMove() ) { move(); else { turnLeft(); dIntProg, E12 12
Sammensatte sætninger Sekvens efterstilling af sætninger, først A, så B Selektion betinget udførelse af sætning Iteration repetition af sætning Flere sætninger kan samles til én ved at danne en blok: { ... } A B if ( B ) S1 if ( B ) S1 else S2 for ( exp1; exp2; exp3) S while ( B ) S dIntProg, E12
Eksempler, iteration (1) for ( int i= 0; i<4; i++ ) { c.move(length); c.turn(90); } int i= 0; while ( i<4 ) { c.move(length); c.turn(90); i++; } dIntProg, E12
Eksempler, iteration (2) for ( int i= 0; i<60; i++ ) { c.timeTick(); } int i= 0; while ( i<60 ) { c.timeTick(); i++; } dIntProg, E12
Udtryk Højresiden af assignment Argumenter til metodekald skal have sammenlignelig type med variablen på venstresiden Argumenter til metodekald skal have sammenlignelig type med parametrene Betingelser i selektions- og iterationssætninger boolesk udtryk (sandhedsværdi) initialiserings- og optællingsudtryk i for-sætning dIntProg, E12
Udvalgte operatorer Aritmetiske operatorer + - * / % ... Logiske operatorer Relationelle operatorer Objektkonstruktionsudtryk + - * / % ... Operatorpræcedens og paranteser... && || ! ... == != < > <= >= new Class type (parameters) dIntProg, E12
clock-display-mec dIntProg, E12
Statisk versus dynamisk syn Klassediagram (specifikation) hvad JavaDoc (specifikation) Java-kode (implementation) hvordan Objektdiagram objektrelationer (referencer) Sekvensdiagram objektinteraktion Statisk struktur rum for hvad der generelt kan ske Dynamik scenarie for hvad der vil ske i en konkret situation dIntProg, E12
Klassediagram (BlueJ vs. UML) TestDriver run() 1 ClockDisplay NumberDisplay int getValue() String getDisplayValue() void setValue(int val) void increment() timeTick() setTime(int h, int m) getTime() - updateDisplay() 2 dIntProg, E12
JavaDOC dIntProg, E12
Java-kode dIntProg, E12
Objektdiagram :ClockDisplay hours minutes displayString :NumberDisplay 24 :NumberDisplay limit value “00:00” 60 :NumberDisplay limit value public ClockDisplay() { hours= new NumberDisplay(24); minutes= new NumberDisplay(60); updateDisplay(); } public NumberDisplay(int rollOverLimit) { limit= rollOverLimit; value= 0; } dIntProg, E12
Sekvensdiagram, timeTick minutes :NumberDisplay hours :NumberDisplay 22:59 :ClockDisplay timeTick() increment() getValue() increment() updateDisplay() getDisplayValue() getDisplayValue() public void timeTick() { minutes.increment(); if(minutes.getValue() == 0) { hours.increment(); } updateDisplay(); dIntProg, E12
Oversigt Sætninger Udtryk Niveauer af programbeskrivelse simple sætninger (assignment, metodekald) sammensatte sætninger (selektion, iteration, blok) (afsnit 6 i manualen) Udtryk operatorer præcedens og parenteser Niveauer af programbeskrivelse statisk syn versus dynamisk syn klassediagram, JavaDoc, Java-kode objektdiagram, sekvensdiagram dIntProg, E12