1 / 24

Grundlæggende programmering Efterår 2001

Grundlæggende programmering Efterår 2001. Forelæsning 6 onsdag 3/10 2001 kl. 9:15 – 12:00. Dagens program. Det praktiske Lagermodel for klasser og objekter Indkapsling Overlæsning (overstyring) Overblik over Javas sprogbestanddele (review)

Download Presentation

Grundlæggende programmering Efterår 2001

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Grundlæggende programmeringEfterår 2001 Forelæsning 6 onsdag 3/10 2001 kl. 9:15 – 12:00

  2. 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. 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 • 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. 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; } .... } Løbenumre i Konto 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. Kontoobjekt 1: klasse: saldo: 2000 maxOvertræk: -3000 ejer: ”Kasper” kontoNummer: 1 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 Lagermodel for klasser og objekter overførTil this: modtager: beløb: returTil: main, li. 5 main args: kasper: dilbert: returTil: prompt 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); }} heap call stack

  6. Brug af klasse biblioteker • Vektor klassen er beskrevet i kapitel 6.5, i appendiks M, og på Java’s hjemmeside.

  7. 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. instans variable erklæres private metoder erklæres public Rocker udgaven • 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 • metoder der kun bruges som hjælpe metode for andre metoder i samme klasse erklæres som private.

  9. 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 Metode overstyring

  10. 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. Begreb: klient og server objekter 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. Overblik over Javas sprogbestanddele • Efterfølgende en komplet review af de dele af Java vi indtil nu har gennemgået.

  12. 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 enreferencetype(f.eks.String). • Basetyperne er indbygget i Java. Man kan ikke selv definere nyebasetyper. • 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ærdihørende til basetypen, f.eks. 117. • En variabel af referencetype (f.eks. Konto) kan indeholde en referencetil et objekt hørende til klassen, ellernull. • En variabel kan indeholde forskellige værdier på forskellige tidspunkter. • Variabelnavne kan vælges frit (bortset fra reserveredeord:if, else, for...). • Man bruger normalt lille begyndelsesbogstav i variabelnavne. • Variable skal erklæres før brug. • En variabel-erklæringbestår af en type efterfulgt af envariabel, eventuelt med en initialisering.

  13. 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. 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 formenpublic 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 (classpath). NB: Klassestien indeholder altid <jdk>\jre\lib\ext.

  15. 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. 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. 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. 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: double aflæsSaldo() void hæv(double) double sqrt(double)

  19. Ordrer • En ordre har en effekt (på lageret eller skærmen), men ingen værdi.

  20. Udtryk • Et udtryk har en type, en værdi og måske en effekt (på lageret eller skærmen).

  21. 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. Modifiers

  23. Modifiers...

  24. 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; }

More Related