Forelsning Uge 2 Torsdag Java syntax og style

  • Slides: 22
Download presentation
Forelæsning Uge 2 – Torsdag • Java syntax og style guide • Sætninger –

Forelæsning Uge 2 – Torsdag • Java syntax og style guide • Sætninger – Simple sætninger (assignment, interne og eksterne metodekald) – Sammensatte sætninger (blok, selektion, gentagelse) • Udtryk og operatorer • Brug af Blue. J’s Code Pad • Afleveringsopgave: Skildpadder (Turtles)

● Syntaktiske elementer i Java • Reserverede ord (keywords) – class, new, public, private

● Syntaktiske elementer i Java • Reserverede ord (keywords) – class, new, public, private • Navne (identifiers) – Person, int, boolean, String, Date, p, a, turn, move, day, month, year, . . . • Konstanter (literals) – "Aarhus Universitet", 1928, 5. 78, true, . . . • Specialtegn (special characters) – ; ( ). { } = + == < <= // /* */ /**. . . • Luft (white space) – linjeskift, mellemrum, tab, . . . – kan indsættes vikårligt mellem syntaktiske elementer uden at betydningen påvirkes 2

Java style guide • Navngivning – Navne skrives på engelsk (eller amerikansk) og skal

Java style guide • Navngivning – Navne skrives på engelsk (eller amerikansk) og skal være velvalgte (beskrivende) – Klasser: med stort Camel. Case • eks. : Person, String, Number. Display, – Variabler og metoder: med lille camel. Case • eks. : first. Name, track. Name, display. String • Indrykning – Alt mellem {} rykkes ét ’hak’ ind – For hvert ekstra niveau af {} rykkes endnu et ’hak’ ind public class Person { private int age; public Person() { age = 32; } } Blue. J editor • public class Person { private int age; public Person() { age = 32; } } Mine slides Blue. J styleguide: http: //www. bluej. org/objects-first/styleguide. html Link 3

Hvad gør nedenstående kode? 4

Hvad gør nedenstående kode? 4

Hvad gør nedenstående kode? Præcis det samme • Det er de samme instruktioner •

Hvad gør nedenstående kode? Præcis det samme • Det er de samme instruktioner • De er nu meget lettere at læse og forstå • Vi har været omhyggelige med linjeskift og indrykningerne, og brugt editorens Auto-layout funktion Bemærk at editoren bruger farver til at vise kodens komponenter • Grøn: Klassen • Gul: Konstruktører og metoder • Gråtoner: if-sætninger, for-løkker og lignende • Hvid: simple sætninger 5

● Simple sætninger • Assignment – udregner værdien af udtrykket på højresiden og tildeler

● Simple sætninger • Assignment – udregner værdien af udtrykket på højresiden og tildeler denne værdi til variablen på venstresiden v = exp; x = x + 1; x = 3 * w. get. Leaves. Eaten(); • Internt metodekald (i samme objekt) method(…); move(100); turn(90); • Eksternt metodekald (i andet objekt) object-reference. method(…); w. eat. Leaf(); c. move. To(200, 300); 6

Interne metodekald public class Wombat extends Actor { public boolean found. Leaf(){. . .

Interne metodekald public class Wombat extends Actor { public boolean found. Leaf(){. . . } public void eat. Leaf(){. . . leaves. Eaten= leaves. Eaten + 1; } public void act() { if ( found. Leaf() ) { UML sekvensdiagram w: Wombat act() found. Leaf() eat. Leaf(); } } }. . . eat. Leaf() 7

Eksterne metodekald public class Animal. Trainer {. . . private Skilled. Turtle t; .

Eksterne metodekald public class Animal. Trainer {. . . private Skilled. Turtle t; . . . t = new Skilled. Turtle(); . . . public void do. Show() { t. square(50); t. square(100); t. boxes(10); } } UML sekvensdiagram a: Animal. Trainer do. Show() t: Skilled. Turtle square(50) square(100) boxes(10) 8

● Sammensatte sætninger • Blok (sekvens) { S 1 S 2 … Sn }

● Sammensatte sætninger • Blok (sekvens) { S 1 S 2 … Sn } • Selektion (valg) if ( exp ) S 1 else S 2 • Iteration (gentagelse) for (exp 1; exp 2; exp 3) S while ( exp ) S 9

Eksempel på blok (sekvens) public void set. Time(int hour, int minute) { hours. set.

Eksempel på blok (sekvens) public void set. Time(int hour, int minute) { hours. set. Value(hour); minutes. set. Value(minute); update. Display(); } Blok med to eksterne og et internt metodekald 10

Eksempel på selektion (valg) public void time. Tick() { minutes. increment(); if ( minutes.

Eksempel på selektion (valg) public void time. Tick() { minutes. increment(); if ( minutes. get. Value() == 0 ) { // it just rolled over! hours. increment(); } update. Display(); } Hvis minut-værdien er lig med 0, er vi netop startet på en ny time, og time-værdien skal derfor tælles op 11

Eksempel på selektion (valg mellem to) public String get. Display. Value() { if (

Eksempel på selektion (valg mellem to) public String get. Display. Value() { if ( value < 10 ) { return "0" + value; Hvis et af argumenterne til } + operatoren er en streng, else { konverteres det andet argument automatisk til en streng return "" + value; (og + betyder konkatenation) } } Kan denne del undværes? Nej. Så returnerer vi værdien af feltvariablen value, som er et heltal (og vi vil få en typekonflikt) 12

Eksempel på indlejret selektion public void act() { if( found. Leaf() ) { eat.

Eksempel på indlejret selektion public void act() { if( found. Leaf() ) { eat. Leaf(); } else { if( can. Move() ) { move(); } else { turn. Left(); } } } Den "røde" if-sætning er indlejret i else-delen af den "grønne" if-sætning e s u a P 13

Eksempel på ”dårlig” kode public boolean is. Teenager() { boolean result; } if (

Eksempel på ”dårlig” kode public boolean is. Teenager() { boolean result; } if ( 13 <= age && age <= 19 ) { result = true; } boolsk udtryk else { result = false; } return result; public boolean is. Teenager() { return (13 <= age && age <= 19); } Metoden tjekker om personen er teenager Kan koden simplificeres? 8 linjer kode 1 linje kode 14

Andet eksempel på ”dårlig” kode if (female) {. . . } if ( female

Andet eksempel på ”dårlig” kode if (female) {. . . } if ( female == true ) {. . . } feltvariabel af type boolean (boolsk udtryk) if ( female == false ) {. . . } negation if (!female) {. . . } • Helt galt går det, hvis man kommer til at skrive if (female = true) {. . . } if (female = false) {. . . } – Assignment, som ændrer værdien af female – Hvorfor klager oversætteren ikke? Parenteserne skal jo indeholde et boolsk udtryk Parenteserne indeholder lovlige boolske udtryk, men de tester ikke det, vi havde til hensigt, og de ændrer female x = y = 37; Assignment, men også et udtryk med værdien 37, som så assignes til x 15

Eksempler på iteration for-løkke for ( int i=0; i<4; i++ ) { c. move(length);

Eksempler på iteration for-løkke for ( int i=0; i<4; i++ ) { c. move(length); c. turn(90); } while-løkke int i = 0; while ( i<4 ) { c. move(length); c. turn(90); i++; } De to løkker gør det samme (gentager move og turn operationerne 4 gange) for-løkker bruges, når man på forhånd ved, hvor mange gange løkken skal gennemløbes while-løkker er mere fleksible end for-løkker Man skal selv huske at initialisere og opdatere 16

● Udtryk bruges forskellige steder • Højresiden af assignment – skal have sammenlignelig type

● Udtryk bruges forskellige steder • 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 – boolsk udtryk (sandhedsværdi: true eller false) – initialiserings- og opdateringsudtryk i for-løkke 17

Udvalgte operatorer Aritmetiske operatorer + - * / % . . . Logiske operatorer

Udvalgte operatorer Aritmetiske operatorer + - * / % . . . Logiske operatorer && || ! • Nogle operatorer er overloadede . . . ^ bitvis eksklusiv OR Relationelle operatorer == != < > <= >= new er også en operator new Class(. . . ); Clicker Quiz – Kan bruges på argumenter af forskellig type + kan betyde læg sammen + kan også betyde konkatenation af strenge • Præcedens regler – Bestemmer rækkefølgen, som operatorerne udføres i – 4 + 3 * 5 evaluerer til 19 • Java har 15 niveauer – Brug parenteser, når I er i tvivl – Søg i Google efter: ”java operator precedence” 18

● Brug af Blue. J’s Code Pad ► ► Code Pad ► • I

● Brug af Blue. J’s Code Pad ► ► Code Pad ► • I Code Pad’en kan man indtaste erklæringer, sætninger og udtryk – Erklæringer og sætninger udføres – Udtryk evalueres • Brug Code Pad’en til hurtige eksperimenter ► ► ► – Mere komplekse eksperimenter laves via en testklasse 19

● Afleveringsopgave: Skildpadder (Turtles) Skildpadde World I Greenfoot skal I lave en subklasse til

● Afleveringsopgave: Skildpadder (Turtles) Skildpadde World I Greenfoot skal I lave en subklasse til klassen Turtle med metoder til at tegne en række forskellige avancerede tegninger, i stil med nedenstående: 20

● Opsummering • Java styleguide – Navngivning – Indrykning • Sætninger – Simple sætninger

● Opsummering • Java styleguide – Navngivning – Indrykning • Sætninger – Simple sætninger (assignment, interne og eksterne metodekald) – Sammensatte sætninger (blok, selektion og iteration) • Udtryk – Operatorer, overloadning, præcedens regler, og brug af parenteser • Brug af Blue. J’s Code Pad – Eksperimenter med erklæringer, sætninger og udtryk • Afleveringsopgave: Skildpadder (Turtles) 21

Det var alt for nu…. . … spørgsmål 22

Det var alt for nu…. . … spørgsmål 22