Fundamentale sprogbegreber Sætninger og udtryk Niveauer af programbeskrivelse (statisk versus dynamisk syn)
dIntProg, F08Klasser og objekter.2 Oversigt Sætninger –simple sætninger (assignment, metodekald) –sammensatte sætninger (selektion, iteration, blok) Udtryk –operatorer –præcedens og paranteser Niveauer af programbeskrivelse –statisk syn versus dynamisk syn –klassediagram, JavaDoc, Java-kode –objektdiagram, sekvensdiagram
dIntProg, F08Klasser og objekter.3 Simple sætninger Assignment –udregn værdien af udtrykket på højresiden og tildel denne værdi til variablen på venstresiden Metodekald –interne metodekald –eksterne metodel v= exp; x= x + 1; a= b; x= 3 * b.noOfTricks(); object-reference.method(...); a.clap(3); c.moveto(200, 300);
dIntProg, F08Klasser og objekter.4 Interne metodekald public class Skuespiller { private void clapOnce() {...; number= number + 1; } public void clap(int n) { for (int i= 0; i<n; i++) { clapOnce(); } s: Skuespiller clap(2) clapOnce()
dIntProg, F08Klasser og objekter.5 Interne metodekald (this) public class Skuespiller { private void clapOnce() {...; number= number + 1; } public void clap(int n) { for (int i= 0; i<n; i++) { this.clapOnce(); } s: Skuespiller clap(2) clapOnce()
dIntProg, F08Klasser og objekter.6 Eksterne metodekald public class Drawer { Crayon c;... public void box(int length) { for (int i= 0; i < 4; i++) { c.move(length); c.turn(90); } public void spirille(int length){ for (int i= 0; i < 36; i++) { box(length); c.turn(10); } spirille(100) d: Drawerc: Crayon box(100) turn(10) move(100) turn(90) 4 36
dIntProg, F08Klasser og objekter.7 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 A B if ( B ) S1 if ( B ) S1 else S2 for ( exp1; exp2; exp3) S while ( B ) S Flere sætninger kan samles til én ved at danne en blok: {... }
dIntProg, F08Klasser og objekter.8 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, F08Klasser og objekter.9 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 A B if ( B ) S1 if ( B ) S1 else S2 for ( exp1; exp2; exp3) S while ( B ) S Flere sætninger kan samles til én ved at danne en blok: {... }
dIntProg, F08Klasser og objekter.10 Eksempler, selektion (1) public void timeTick() { minutes.increment(); if ( minutes.getValue() == 0 ) { // it just rolled over! hours.increment(); } updateDisplay(); }
dIntProg, F08Klasser og objekter.11 Eksempler, selektion (2) public String getDisplayValue() { if ( value < 10 ) { return "0" + value; } else { return "" + value; }
dIntProg, F08Klasser og objekter.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 A B if ( B ) S1 if ( B ) S1 else S2 for ( exp1; exp2; exp3) S while ( B ) S Flere sætninger kan samles til én ved at danne en blok: {... }
dIntProg, F08Klasser og objekter.13 Eksempler, iteration (1) int i= 0; while ( i<4 ) { c.move(length); c.turn(90); i++; } for ( int i= 0; i<4; i++ ) { c.move(length); c.turn(90); }
dIntProg, F08Klasser og objekter.14 Eksempler, iteration (2) int i= 0; while ( i<60 ) { c.timeTick(); i++; } for ( int i= 0; i<60; i++ ) { c.timeTick(); }
dIntProg, F08Klasser og objekter.15 Udtryk Højresiden af assignment –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, F08Klasser og objekter.16 Udvalgte operatorer Aritmetiske operatorer Logiske operatorer Relationelle operatorer Objektkonstruktionsudtryk + - * / %... && || !... new Class type (parameters) == != = Operatorpræcedens og paranteser...
dIntProg, F08Klasser og objekter.17 clock-display-mec
dIntProg, F08Klasser og objekter.18 Statisk versus dynamisk syn Klassediagram (specifikation) –hvad JavaDoc (specifikation) –hvad 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, F08Klasser og objekter.19 Klassediagram (BlueJ vs. UML) ClockDisplay NumberDisplay int getValue() String getDisplayValue() void setValue(int val) void increment() timeTick() setTime(int h, int m) getTime() - updateDisplay() 2 TestDriver run() 1
dIntProg, F08Klasser og objekter.20 JavaDOC
dIntProg, F08Klasser og objekter.21 Java-kode
dIntProg, F08Klasser og objekter.22 :ClockDisplay hours minutes displayString Objektdiagram 24 :NumberDisplay 0 limit value 60 :NumberDisplay 0 limit value public ClockDisplay() { hours= new NumberDisplay(24); minutes= new NumberDisplay(60); updateDisplay(); } “00:00” public NumberDisplay(int rollOverLimit) { limit= rollOverLimit; value= 0; }
dIntProg, F08Klasser og objekter.23 Sekvensdiagram, timeTick :ClockDisplay minutes :NumberDisplay hours :NumberDisplay timeTick() increment() getValue() increment() updateDisplay() getDisplayValue() public void timeTick() { minutes.increment(); if(minutes.getValue() == 0) { hours.increment(); } updateDisplay(); } 22:59
dIntProg, F08Klasser og objekter.24 Oversigt Sætninger –simple sætninger (assignment, metodekald) –sammensatte sætninger (selektion, iteration, blok) Udtryk –operatorer –præcedens og paranteser Niveauer af programbeskrivelse –statisk syn versus dynamisk syn –klassediagram, JavaDoc, Java-kode –objektdiagram, sekvensdiagram