Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

GP 6, 3/10 20011 Grundlæggende programmering Efterår 2001 Forelæsning 6 onsdag 3/10 2001 kl. 9:15 – 12:00.

Lignende præsentationer


Præsentationer af emnet: "GP 6, 3/10 20011 Grundlæggende programmering Efterår 2001 Forelæsning 6 onsdag 3/10 2001 kl. 9:15 – 12:00."— Præsentationens transcript:

1 GP 6, 3/10 20011 Grundlæggende programmering Efterår 2001 Forelæsning 6 onsdag 3/10 2001 kl. 9:15 – 12:00

2 GP 6, 3/10 20012 Dagens program Det praktiske Lagermodel for klasser og objekter Indkapsling Overlæsning (overstyring) Overblik over Javas sprogbestanddele (review) Gennemgang af programeksempler (ikke inkluderet her)

3 GP 6, 3/10 20013 Det praktiske LinuxLab arrangement: torsdag, 4. okt., kl. 15:15-17, LinuxLab (lok. 4.05), introduktion til LaTeX, verdens mestbrugte tekstbehandlingssystem for videnskabelige artikler og teknisk dokumentation; se http://linuxlab.dk/adict/mgroup.php?organizer=LinuxLab http://linuxlab.dk/adict/mgroup.php?organizer=LinuxLab Opdateret forelæsningsplan: I dag: pakker, klasser og objekter i Java. Næste gang: tabeller. Næste gang igen: klassegrænseflader (interfaces) og nedarvning. Se hjemmesiden.

4 GP 6, 3/10 20014 Løbenumre i Konto public class Konto {private double saldo; private double maxOvertræk; private String ejer; private int kontoNummer; private static int løbeNummer = 1; public Konto(String ejeren) { ejer = ejeren; saldo = 0; maxOvertræk = -3000; kontoNummer = løbeNummer; løbeNummer = løbeNummer +1; }.... } static angiver at det er en klasse variabel. private at den ikke kan ses ude fra. variablen løbenummer får sin værdi når klassen bliver lavet, hvilket er første gang klassen bliver brugt. Man kan aflæse klasse variable som enhver anden variabel Og den kan også tildeles en ny værdi. Resultatet er at enhver konto objekt får sit eget konto nummer.

5 GP 6, 3/10 20015 Lagermodel for klasser og objekter Klasse: Konto løbeNummer: 3 Konto(String ejeren){...} double hæv(double beløb){...} void indsæt(double beløb){...} double aflæsSaldo(){...} void overførTil(Konto modtager,...){...} Kontoobjekt 2: klasse: saldo: 1500 maxOvertræk: -3000 ejer: ”Dilbert” kontoNummer: 2 Kontoobjekt 1: klasse: saldo: 2000 maxOvertræk: -3000 ejer: ”Kasper” kontoNummer: 1 public class Driver { public static void main(String[] args){ Konto kasper = new Konto(“Kasper”); Konto dilbert = new Konto(“Dilbert”); kasper.indsæt(3500.00); kasper.overførTil(dilbert, 1500); }} overførTil this: modtager: beløb: returTil: main, li. 5 main args: kasper: dilbert: returTil: prompt call stack heap

6 GP 6, 3/10 20016 Brug af klasse biblioteker Vektor klassen er beskrevet i kapitel 6.5, i appendiks M, og på Java’s hjemmeside.

7 GP 6, 3/10 20017 Indkapsling En klasse er en skabelon for at lave en række ens objekter. Objekter består af instansvariable og metoder. Instansvariablenes værdier udgør objektets tilstand. Metoderne kan aflæse og ændre tilstanden. Oftest er man ikke interesseret i at man ”udefra” – dvs. fra andre objekter, kan manipulere tilstanden direkte, f.eks. ændre saldo på kontoen. Motivationen for dette er at man således får indkapslet det indre af klassen; dvs. isoleret fra resten af programmet. Hvis man ikke ændrer grænsefladen til klassen, så vil klienterne af klassen være uberørt af ændringer i implementationen af klassen.

8 GP 6, 3/10 20018 Rocker udgaven instans variable erklæres privatemetoder erklæres public metoder der kun bruges som hjælpe metode for andre metoder i samme klasse erklæres som private. hvis man udefra har brug for at aflæse en tilstand, laves en public tilgangsmetode. F.eks. aflæsSaldo hvis man udefra har brug for at tildele en instansvariabel en ny værdi laves en public ”sæt” metode

9 GP 6, 3/10 20019 Metode overstyring Metode overstyring (overload se 4.5) man kan i den samme klasse have to metoder med samme navn, hvis de har forskellige typer parametre, f.eks. out objektet println(String s) println(int i) println(double d) Man bruger ofte overstryring ved kontruktører. F.eks. Dato Dato(int year, int month, int day) Dato(String s) Dato() //today

10 GP 6, 3/10 200110 Begreb: klient og server objekter Server objekter stiller en række metoder til rådighed som andre objekter (kaldet klient objekter) kan benytte sig af. Klient objekter har instansvariable der refererer til andre objekter (server objekter). I klientens metoder kalder server objektets metoder. Klient objekt Server serverObjekt;... void klientMetode(){... serverObjekt.service();... } Server objekt void service(){... serverObjekt.service();... } Et klient objekt starter enten ved at det bliver lavet og startet fra main, eller ved at det er server for en anden klient. Appletten er et server program, og browseren er klienten. Bemærk at man ikke selv skriver klienten.

11 GP 6, 3/10 200111 Overblik over Javas sprogbestanddele Efterfølgende en komplet review af de dele af Java vi indtil nu har gennemgået.

12 GP 6, 3/10 200112 Grundbegreber: værdi, type, variabel En værdi er en størrelse man kan ’regne’ med (f.eks. 117, false, objektreference). –Værdier kan ikke ændres eller ”opdateres”! –Objekter kan opdateres ved at opdatere deres instansvariable, men de er ikke værdier i Java, kun objektreferencer. En type er en familie af værdier (f.eks. int, som er typen af heltal). –En type er enten en basetype (f.eks. int, double, boolean) eller en referencetype (f.eks. String). –Basetyperne er indbygget i Java. Man kan ikke selv definere nye basetyper. –Man kan selv definere nye referencetyper ved at definere klasser. En variabel navngiver en plads (”skuffe” for værdier) i maskinens lager. –En variabel af basetype (f.eks. int) kan indeholde en værdi hørende til basetypen, f.eks. 117. –En variabel af referencetype (f.eks. Konto) kan indeholde en reference til et objekt hørende til klassen, eller null. –En variabel kan indeholde forskellige værdier på forskellige tidspunkter. –Variabelnavne kan vælges frit (bortset fra reserverede ord: if, else, for...). –Man bruger normalt lille begyndelsesbogstav i variabelnavne. –Variable skal erklæres før brug. –En variabel-erklæring består af en type efterfulgt af en variabel, eventuelt med en initialisering.

13 GP 6, 3/10 200113 Pakker package edu.it.pakkenavn; class Klassenavn { Felter Konstruktorer Metoder } class Klassenavn { Felter Konstruktorer Metoder } class Klassenavn { Felter Konstruktorer Metoder } Et program er en samling klasser (en pakke). En klasse indeholder felter, konstruktorer og metoder. En metode består af returtype, signatur og en metodekrop. En metodekrop er en blok, der indeholder erklæringer og ordrer.

14 GP 6, 3/10 200114 Programmer og Java-filer Et program består af en samling klassedefinitioner. Programmets klassedefinitioner kan ligge i en eller flere.java-filer. Mindst en af klasserne skal indeholde en metode-erklæring af formen public static void main(String[] args) {... } hvis programmet skal kunne udføres fra kommandofortolkeren. Hvis klassen hedder Driver så kan programmet køres med kommandoen ”java Driver”, som invokerer main-metoden i Driver. BlueJ kan invokere vilkårlige metoder. main-metoden er ikke nødvendig for BlueJ. Hvis en klasse har brug for andre klasser skal de oversatte klassefiler (.class-filer) ligge i samme katalog som Driver eller i klassestien (class path). NB: Klassestien indeholder altid \jre\lib\ext.

15 GP 6, 3/10 200115 Klassedefinitioner En klassedefinition består af: –felt-erklæringer, –konstruktor-erklæringer og –metode-erklæringer. Rækkefølgen er ligegyldig. Klassenavne kan vælges frit. Man bruger normalt stort begyndelsesbogstav i klassenavne.

16 GP 6, 3/10 200116 Felter En felt-erklæring består af et typenavn efterfulgt at et eller flere feltnavne, f.eks. String mærke, nr_plade, farve; int serie_nr; Et felt kan være static (en klassevariabel). Så navngiver feltet en bestemt plads i maskinens lager. Ellers er feltet et objektfelt (instansvariabel). Så navngiver feltet en separat plads i hvert objekt hørende til klassen. Felter initialiseres altid med en standardværdi (0, false, null) afhængig af feltets type. Feltnavne kan vælges frit. Man bruger normalt lille begyndelsesbogstav i feltnavne.

17 GP 6, 3/10 200117 Konstruktorer En konstruktor skal have samme navn som den klasse den er defineret i. En konstruktor har en parameterliste ligesom en metode. En konstruktor har ingen returtype, ulige metoder. En konstruktors krop en en blok {... }, som indeholder erklæringer og ordrer. Konstruktorer bruges til at give klassens felter passende værdier, f.eks. Konto(String ejer) { this.ejer = ejer; saldo = 0; overtræk = -3000; }

18 GP 6, 3/10 200118 Metode-erklæringer En metode-erklæring består af: –returtype, –metodenavn, –parameterliste, –metodekrop. Hvis returtypen er ”void” skal metoden ikke returnere en værdi. Ellers skal den returnere en værdi af den rigtige type med ordren return udtryk En metodesignatur består af: –metodenavn og –liste af parametertyper. Eksempler på returtyper og metodesignaturer: doubleaflæsSaldo() voidhæv(double) doublesqrt(double)

19 GP 6, 3/10 200119 Ordrer En ordre har en effekt (på lageret eller skærmen), men ingen værdi. Ordre-artEksempel if-ordreif (x != 0) y = 1/y; if-else-ordreif (x !=0) y = 1/y; else y=0; metodekald (void)System.out.println(“Hello”); blok{ x = 1; y = 1/y; } for-løkkefor (int i = 0; i < 100; i++) { sum += i; } while-løkkewhile (sum < 100) sum++; do-while-løkkedo { sum++; } while (sum < 100); retur-ordrereturn x*x; switch-ordreswitch (x) { case 0: y = 0; break; default: y = 1/x; }

20 GP 6, 3/10 200120 Udtryk Et udtryk har en type, en værdi og måske en effekt (på lageret eller skærmen). Udtryks-artEksempelType (int x)Type (double x) konstant7 variabelx aritmetisk udtrykx + 1 tildelingx = x+1 sammenligningx == 7 logisk udtrykx == 7 && y < 10 metodekald (nonvoid)Math.sqrt(5) konstruktorkaldnew Konto(“Kasper”) betinget udtrykx != 0 ? 1/x : 1

21 GP 6, 3/10 200121 Fra udtryk til ordre Et udtryk efterfulgt af “;” giver en ordre En tildelingsordre x = 10 + 117; består af: –udtrykket x = 10 + 117, der har værdien 127 og har den effekt at sætte x til 127; –et semikolon “;”. Semikolon forvandler udtrykket “x = 10 + 117” til en ordre “x = 10 + 117;” ved at smide udtrykkets værdi væk. Hvad er værdien af x efter udførslen af int x = 8; x == 9;

22 GP 6, 3/10 200122 Modifiers Felt:staticikke static Antal kopierEn for hver klasseEn for hvert objekt Fælles for klassejanej Metode:staticikke static Kan bruge ”this”nejja Invokeres påklassenavnobjektreference Felt:finalikke final Kan opdateresnejja

23 GP 6, 3/10 200123 Modifiers... Felt eller metode:publicprivatehverken public eller private Synlig i samme klasse ja Synlig i andre klasser i samme pakke janejja Synlig i andre klasser uden for pakken janej

24 GP 6, 3/10 200124 Overlæsning (overstyring, overloading) En klasse kan indeholde flere konstruktorer og metoder med samme navn sålænge deres signaturer er forskellige. Signaturen er konstruktorens, hhv. metodens navn, efterfulgt at typerne af parametrene. Metodens resultat-type indgår ikke i signaturen. Overlæssede metoder med samme navn kan have forskellige resultat- typer. Konto(String ejer, double overtræk){ this.ejer = ejer; this.overtræk = overtræk; saldo = 0; } Konto(String ejer){ this.ejer = ejer; overtræk = -3000; saldo = 0; } void indsæt(double beløb){ saldo += beløb; } void indsæt(String beløb){ saldo += Int.parseInt(beløb); } void indsæt(int beløb){ saldo += beløb; }


Download ppt "GP 6, 3/10 20011 Grundlæggende programmering Efterår 2001 Forelæsning 6 onsdag 3/10 2001 kl. 9:15 – 12:00."

Lignende præsentationer


Annoncer fra Google