Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

GP3, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 3 Vi begynder 9.15. Slides ligger på hjemmesiden. Du er velkommen til.

Lignende præsentationer


Præsentationer af emnet: "GP3, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 3 Vi begynder 9.15. Slides ligger på hjemmesiden. Du er velkommen til."— Præsentationens transcript:

1 GP3, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 3 Vi begynder 9.15. Slides ligger på hjemmesiden. Du er velkommen til at printe dem nu. www.itu.dk/courses/GP/E2005 Martin Lillholm

2 GP3, Martin Lillholm 2 Øvelseshold (René Kofoed) www.itu.dk/courses/GP/E2005/hold1.html

3 GP3, Martin Lillholm 3 Obligatoriske Opgaver Hvordan gik det med sidste opgave ? Denne uge... lidt sværere... mere fri

4 GP3, Martin Lillholm 4 Sidste gang Mere om oversættelse, køretidsmiljø, klasser, objekter, Java programmers anatomi Navne (identifiers) Variable (variables) (Simple) typer (types) Operatorer (operators) Udtryk (expressions) Bibliotekter (libraries) Mere om Appletter, GUI og grafik

5 GP3, Martin Lillholm 5 Denne gang (meget stof) Hvad er det der egentlig sker med klasser, objekter osv,... Klasser, objekter (instanser) Felter (instansvariable) Metoder, konstruktører (lidt om statiske metoder og felter ( klassevariable )) Indkapsling Objektvariable – variable af ikke-primitiv type String, Random, Math og Scanner klasserne Formatteret udskrivning Frames, paneler

6 GP3, Martin Lillholm 6 Klasser og objekter Klasser – arbejdstegninger –Definitioner af kommende objekters Felter Metoder Objekter – instanser –Konkrete udgaver/instanser af Felter Statiske felter og metoder … senere

7 GP3, Martin Lillholm 7 Felter I princippet som (lokale) variable i metoder, men... Definerer et objekts tilstand! En af hovedideerne i OO. ”Synlige” i hele klassen (objektet) (alle metoder) ”Lever” lige så længe objektet gør det Får en standardværdi ved objekt instantiering 0 (byte, char, short, int, long), 0.0 (float, double) false (boolean)

8 GP3, Martin Lillholm 8 Metoder Metoder bruges til at samle en række kommandoer under et navn Parametre og returværdi Genbrug Abstraktion

9 GP3, Martin Lillholm 9 Konstruktører I princippet ”bare” specielle metoder, der altid hedder det samme som objektet Kaldes ved oprettelse/instantiering af objekter Har ingen returværdi Kaldes ikke explicit En klasse behøver ikke haven nogen konstruktører Altid én standard konstruktør uden parametre En klasse kan have flere konstruktører

10 GP3, Martin Lillholm 10 Klasser og objekter igen Felter (def.) Konstruktører Metoder Klasse 1 Felter (def.) Konstruktører Metoder Klasse n Felter Klasseref. Objekt m Felter Klasseref. Objekt 1 Felter Klasseref. Objekt 1 Felter Klasseref. Objekt l ”Abstrakt” model/konceptKonkret – instanser

11 GP3, Martin Lillholm 11 Terningerne er kastet... Felter (Instansvariable) Konstruktør Metoder Ny – ikke primitiv type

12 GP3, Martin Lillholm 12 Hvordan instantieres et objekt? Typisk ved tildeling og initialisering af variable af klassetype (objektvariable) Ved hjælp af kommandoen new:. operatoren

13 GP3, Martin Lillholm 13 Hvad sker der ved instantiering? Et nyt objekt oprettes Der afsættes plads til felterne Eventuelle initialiseringer Koden i en eventuel konstruktør udføres Hvilken konstruktør?

14 GP3, Martin Lillholm 14 Metoder igen int metodenavn (int a, int b,...) { // metode krop variabelErklæring1; kommando1; kommando2; variabelErklæring2;... kommando3; return... } int, double, char, boolean, String,... Returtype Parametre og typer NB: Lokale variable

15 GP3, Martin Lillholm 15 Hvad sker der ved metodekald? char calc (int num1, int num2, String message) { int sum = num1 + num2; char result = message.charAt (sum); return result; } ch = obj.calc (25, count, "Hello"); Formelle (lokale variable) og faktiske parametre (de faktiske værdier)

16 GP3, Martin Lillholm 16 Hvad sker der ved metodekald? myMethod(); myMethodcompute

17 GP3, Martin Lillholm 17 Hvad sker der ved metodekald? doIt helpMe helpMe(); obj.doIt(); main

18 GP3, Martin Lillholm 18 Metodekroppen char calc (int num1, int num2, String message) { int sum = num1 + num2; char result = message.charAt (sum); return result; } Udtrykket der returneres skal have samme type som formelle retur type sum og result er lokale

19 GP3, Martin Lillholm 19 return kommandoen Retur typen indikerer hvilken type der returneres En metode der ikke returnerer noget har type void En return kommando angiver den værdi der bliver returneret return Udtryk Udtrykket skal have samme type som den formelle retur type

20 GP3, Martin Lillholm 20 Konstruktører igen I princippet ”bare” specielle metoder, der altid hedder det samme som objektet Kaldes ved oprettelse/instantiering af objekter Har ingen returværdi Kaldes ikke explicit En klasse behøver ikke haven nogen konstruktører Altid én standard konstruktør uden parametre En klasse kan have flere konstruktører

21 GP3, Martin Lillholm 21 Terninger igen... og BlueJ –RollingDice.java og Die.java i BlueJ (L&L side 157-159)

22 GP3, Martin Lillholm 22 Indkapsling (1) Et objekt kan ses fra to vinkler –internt – alle detaljer: felter og den definerende klasses metoder –eksternt – de services (objektets interface eller grænseflade) et objekt tilbyder. Alle øvrige detaljer er indkapslede Et andet objekt (en klient) kan benytte objektets services (i praksis metoder) Klienten kender hverken metoders virkemåde eller en interne repræsentation af de data de opererer på Kun objektet selv bør ændre på dets tilstand (felterne) Det bør være uhyre svært for klienter at ændre tilstanden direkte (bør altid ske gennem metoder). Objekter er selv- styrende

23 GP3, Martin Lillholm 23 Indkapsling (2) Vi kan tænke på objekter som en sort kasse (black box) Eneste mulige adgang bør være gennem services Hvorfor nu alt det her? Metoder Data (felter) Klient

24 GP3, Martin Lillholm 24 Adgangsbegrænsere (Visibility Modifiers) (1) Benyttes til at implementere indkapsling Tre slags: private, public, protected Venter med protected til vi har behandlet arv Klassemedlemmer (metoder og felter) der erklæres public kan tilgås, kaldes og ændres af alt og alle Klassemedlemmer der erklæres private kan kun tilgås, kaldes og ændres af og i den klasse, hvor de er erklæret Klassemedlemmer der erklæres uden en adgangsbegrænser kan tilgås, kaldes og ændres af alle i klasser i samme pakke (default access)

25 GP3, Martin Lillholm 25 Adgangsbegrænsere (Visibility Modifiers) (2) publicprivate Variable Metoder Provide services to clients Support other methods in the class Enforce encapsulation Violate encapsulation

26 GP3, Martin Lillholm 26 Accessors og Mutators For at muliggøre aflæsning og ændring af private tilstandsdata (felter) stilles typisk en række service metoder til rådighed. En accessor metode giver mulighed aflæsning af data (eks. getX ) En mutator metode giver mulighed for at ændre data (eks. setX ) – oftest med en eller flere begrænsninger – eksempelvis korrekt opdatering. Jamen var det ikke lige netop det vi ville undgå?

27 GP3, Martin Lillholm 27 Flere terninger...

28 GP3, Martin Lillholm 28 Et eksempel på en klasse... En bil defineres ved: –Et mærke –En tophastighed En bil i BlueJ...

29 GP3, Martin Lillholm 29 Statiske felter og metoder Lever på klasseniveau på ”tværs” af instanser En af hver per klasse; uanset antallet af instanser Kan tilgås/benyttes uden at klassen instantieres Erklæres med foranstillet keyword static public static double sqrt (double num) {... } public static double PI; Eksempler fra Math klassen. Hvorfor er statiske metoder og felter smarte ?

30 GP3, Martin Lillholm 30 Statiske metoder og felter Felter (def.) Konstruktører Metoder Klasse 1 Felter (def.) Konstruktører Metoder Klasse n Felter Klasseref. Objekt m Felter Klasseref. Objekt 1 Felter Klasseref. Objekt 1 Felter Klasseref. Objekt l ”Abstrakt” model/konceptKonkret – instanser public static double sqrt (double num) {... } public static double PI;

31 GP3, Martin Lillholm 31 Hello.java igen igen

32 GP3, Martin Lillholm 32 HelloGUI.java igen igen

33 GP3, Martin Lillholm 33 Gemmer en reference (pointer, pegepind) til objektet; ikke selve objektet. Die number1 = new Die (); Die number2; number2 = new Die (); number2 = number1; // Her kopieres kun en reference number1 Die objekt1 number2 Die objekt2 Garbage collection. Objektvariable (Pointer fun with Binky)

34 GP3, Martin Lillholm 34 String klassen Typen String er en klasse! Strenge er objekter/instanser. String title; title = ”Java Software Solutions”; (title = new String(”Java Software Solutions”)) Virker kun for tekststrenge. Enhver streng konstant refererer/repræsenterer et String objekt Syntaktisk sukker. int a=4; a++; (a = a + 1) a += 3; (a = a + 3)

35 GP3, Martin Lillholm 35 String klassen Når først et streng objekt er oprettet kan det ikke ændres. (immutable). Men en variabel med en reference til objektet kan sagtens ændres; med mindre den er erklæret final Derimod returnerer mange af String klassens metoder nye instanser og det ser i praksis ud som om man kan ændre et String objekt. L&L side 119 eventuelt i BlueJ hvis tiden tillader

36 GP3, Martin Lillholm 36 toString metoden Ethver klasse bør have en toString () metode! Kaldes automatisk ved brug af eksempelvis System.out.println og streng sammensætning Die number1 = new Die (); System.out.println(number1); String message = ”Resultatet blev: ” + number1; System.out.println(message); toString kan alt efter behov eller ønske være mere eller mindre kompleks – keep it simple...

37 GP3, Martin Lillholm 37 Bankkontoen... –Transactions.java og Account.java i BlueJ. (L&L side 172-174)

38 GP3, Martin Lillholm 38 Scanner klassen (1)

39 GP3, Martin Lillholm 39 Scanner klassen (2)

40 GP3, Martin Lillholm 40 Random klassen

41 GP3, Martin Lillholm 41 Statiske metoder og felter igen (Eventuelt konstante) statiske felter (klassevariable) (Alm. felter (instansvariable)) Statiske metoder

42 GP3, Martin Lillholm 42 Math klassen

43 GP3, Martin Lillholm 43 DecimalFormat klassen

44 GP3, Martin Lillholm 44 Spørgsmål... MEGET stof... Spørg løs

45 GP3, Martin Lillholm 45 GUI by example... java.awt.* javax.swing.* Containere –JFrame –JPanel metoden paintComponent(Graphics page)

46 GP3, Martin Lillholm 46 SmilingFace.java

47 GP3, Martin Lillholm 47 SmilingFacePanel.java

48 GP3, Martin Lillholm 48 Splat.java

49 GP3, Martin Lillholm 49 SplatPanel.java

50 GP3, Martin Lillholm 50 Circle.java (1)

51 GP3, Martin Lillholm 51 Nok for i dag!


Download ppt "GP3, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 3 Vi begynder 9.15. Slides ligger på hjemmesiden. Du er velkommen til."

Lignende præsentationer


Annoncer fra Google