Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

GP7, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 7 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.

Lignende præsentationer


Præsentationer af emnet: "GP7, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 7 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder."— Præsentationens transcript:

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

2 GP7, Martin Lillholm 2 Obligatorisk opgave Var opgaven til i onsdags 1.For nem 2.For svær 3.Tilpas – skulle bruge noget tid og tanker på den, men så var den også til at løse/forstå. Er der nogen, der ikke har afleveret fordi den slet ikke var til at få hul på?

3 GP7, Martin Lillholm 3 Hvad skal jeg lave i efterårsferien? Høste kartofler … Plukke svampe … Besøge mor … Repetere GP – jubii –Læs pensum igen –Løs eventuelt manglende obligatoriske opgaver –Gamle eksamensopgaver

4 GP7, Martin Lillholm 4 Sidste gang Ganske kort om programudvikling En slags UML klassediagrammer –Klasser –Attributter (felter, klassevariable) –Metoder inkl. konstruktører –Afhængigheder (dependencies) –Aggregations kursorisk Mere om statiske variable (klassevariable) og metoder Mere om metoder og parametre og virkefelt (scope)

5 GP7, Martin Lillholm 5 Denne gang Nedarvning Skrivning til tekstfil Eventuelt repetition af static -begrebet

6 GP7, Martin Lillholm 6 Nedarvning Motivation... Design et system til håndtering af ansatte og studerende på ITU. En ansat kan enten være en VIP eller en TAP En studerende kendetegnes ved navn, højde, studieretning En ansat kendetegnes ved navn, højde, afdeling –En VIP kendetegnes yderligere ved et forskningsområde –En TAP kendetegnes yderligere ved et arbejdsområde Alle har naturligvis også en række ansvar (metoder), men dem ignorerer vi indtil videre

7 GP7, Martin Lillholm 7 Naiv implementation uden hensyn til fælles egenskaber public Class Student { private String name; private int height; private String study; // constructors, accessors, // and mutators... } public Class Vip { private String name; private int height; private String department; private String researchArea; // constructors, accessors, // and mutators... } public Class Tap { private String name; private int height; private String department; private String workArea; // constructors, accessors, // and mutators... }

8 GP7, Martin Lillholm 8 Nedarvning Hvad har de tre typer personer til fælles: –De er alle personer med navn og højde –Både VIP’ere og TAP’ere er ansat i en afdeling StuderendePersonTAPAnsatVIP

9 GP7, Martin Lillholm 9 Implementation med nedarvning public Class Person { private String name; private int height; // constructors, accessors, // and mutators... } public Class Employee extends Person { private String department; // constructors, // additional accessors, and mutators... } public Class Student extends Person { private String study; // constructors, // additional accessors, and mutators... } public Class Vip extends Employee { private String researchArea; // constructors, // additional accessors, and mutators... } public Class Tap extends Employee { private String workArea; // constructors, // additional accessors, and mutators... }

10 GP7, Martin Lillholm 10 Nedarvning, navne og nøgleord Vi benytter følgende ord om klassen der arves fra: –Superklasse –Forældreklasse –Baseklasse Vi benytter følgende ord og vendinger om klassen der arver: –Subklasse –Barneklasse –Subtype (Subklassen er en (udvidet/specialiseret) superklasse) (En studerende er en person, en VIP er en ansat) –Subklassen er en specialisering af superklassen Vi kalder en samling af klasser, hvor der indgår arv for et klassehierarki Vi benytter nøgleordet extends efter et klassenavn for at indikere nedarvning: public class Students extends Person {... }

11 GP7, Martin Lillholm 11 Hvad er nedarvning ? Nedarvning benyttes til at modellere klassers fælles egenskaber og dermed genbruge felter, metoder uden eksplicit at skulle genskrive de fælles dele – software genbrug Husk at vi kan tænke på klasser som arbejdstegninger. Vi kan tænke på nedarvning som genbrug af tegninger; eventuelt med ændringer eller tilføjelser Ideen er, at subklassen i udgangspunktet arver superklassens karakteristika (felter og metoder, men ikke konstruktører) Vi kan tilføje yderligere felter og metoder og overskrive felter og metoder. (NB: Lad være med at overskrive felter) Hvor er nedarvning (i nogen tilfælde) smart?

12 GP7, Martin Lillholm 12 Nedarvning – eksempler En ansat er en person Heste, køer og grise er pattedyr Volvo, Saab og Toyota er biler En ordbog er en bog: –Words.java L&L side 440 i BlueJ

13 GP7, Martin Lillholm 13 protected adgang Vi har tidligere talt om indkapsling gennem brugen af private nøgleordet En subklasse har ikke adgang til superklassens felter og metoder, hvis de er erklæret private. Det lyder umiddelbart meget restriktivt; hvorfor er det faktisk en god ide? Hvis de derimod er erklæret public har subklassen fuld adgang, men det har alle andre klasser desværre også. Vi bryder med ideen om indkapsling Et kompromis opnås ved brug af protected. Her får subklassen (og alle andre klasse i samme pakke) adgang –Words.java L&L side 440 i BlueJ igen

14 GP7, Martin Lillholm 14 Hvad er det egentlig der arves ? Felter uanset om de er erklæret public, private eller protected Metoder uanset om de er erklæret public, private eller protected Superklassens felter er altså med til at definere tilstanden af subklassens instanser, men er ikke nødvendigvis synlige/tilgængelige. Igen hvorfor giver det mening ? Indirekte adgang – indkapsling Ikke konstruktører. Betyder det så at konstruktører skal skrives fra bunden og hvordan harmonerer det med eventuelle private felter... ?

15 GP7, Martin Lillholm 15 Object klassen Enhver klasse arver implicit fra Object; anderledes sagt Object er roden i ethvert klassehieraki Indeholder bl.a. metoden toString() –Altså har alle objekter altid en toString() –Returnerer et objekts klassenavn samt en unik identifikation (tal) Inderholder bl.a. metoden equals (Object obj) –o1.equals (o2) returnerer true hvis o1 og o2 refererer samme objekt Begge metoder overskrives typisk, men findes altså altid

16 GP7, Martin Lillholm 16 super referencen og konstruktører Hvis en subklasse ikke gives en konstruktør kaldes superklassens konstruktør automatisk med super() (Hvad hvis superklassen ikke har en argumentløs konstruktør?) Det kan også gøres eksplicit (altid som første linie) i en skreven konstruktør og sker under alle omstændigheder implicit Alternativt kan super anvendes til at kalde eventuelle andre konstruktører i superklassen: super(”Martin Lillholm”, 192cm) Hvis der eksempelvis arves fra Person klassen I praksis betyder at subklassers konstruktører typisk skrives ved at kalde superklassens konstruktør først og derefter initialisere felter osv. der er unikke for subklassen. Vi fremmer igen indkapsling –Words2.java L&L side 445 i BlueJ

17 GP7, Martin Lillholm 17 Overskrivning (overriding) En subklasse kan overskrive de (fra superklassen) nedarvede metoder Subklassens (nye) metode skal have samme signatur og returtype som superklassens ditto Subklassens (nye) metode skal være mindst lige så tilgængelig som superklassens ditto Selvom vi overskriver kan vi stadig tilgå superklassen oprindelige metoder vha super referencen – eks. super.toString(); (super vs this) Nedarvede felter kan også ”overskrives”, MEN lad være Hvorfor overskrive... ?

18 GP7, Martin Lillholm 18 Overskrivning – eksempel

19 GP7, Martin Lillholm 19 Abstrakte klasser Abstrakte klasser er klasser der ikke kan og ikke skal instantieres. Hvad betyder det for en reference, der har en abstrakt type (klasse) ? Metoder kan enten være ”normale” eller abstrakte Abstrakte metoder implementeres ikke, men skal overkskrives. Bruges typisk om ikke realiserbare koncepter i et klassehieraki Nøgleord abstract Hvorfor abstrakte klasser ?

20 GP7, Martin Lillholm 20 Nøgleordet final og arv En metode der erklæres final kan ikke overskrives Der kan ikke arves fra en klasse, der erklæres final Det giver ikke mening at erklære abstrakte metoder final –Hvorfor ?

21 GP7, Martin Lillholm 21 Multipel Arv Benyttes hvis vi ønsker at aflede en klasse fra flere superklasser Eksempel vis kunne en studerende både være en person og en borger og dermed arve fra begge ”forældre” I praksis ganske kompliceret. Hvad hvis superklasserne eksempelvis har metoder med samme navn – hvilken metode arves ? Understøttes ikke i Java, men derimod i eksempelvis C++

22 GP7, Martin Lillholm 22 Det store motiverende eksempel Cirkler og Rektangler som eksempler på former –InheritanceDriver.java –InheritancePanel.java –Shape.java –Circle.java –Rectangle.java –Findes alle på hjemmesiden

23 GP7, Martin Lillholm 23 Strømme (Streams) Hvorfor hedder det egentlig strømme ? En ordnet sekvens af bytes Et program kan arbejde med mange samtidige strømme I/O (input/output) strømme –Input strømme Standard input ( System.in ) Filer (Netværk) –Output strømme Standard output ( System.out, System.out.println ) Standard error ( System.err, System.err.println ) Filer (Netværk)

24 GP7, Martin Lillholm 24 Filtyper & buffere Tekstfiler –ASCII – hver byte er et tegn –Kan vises i en tekst-editor Binære filer –Alt andet end tekstfiler –int, long, float,... –jpg, wav, doc,... –Hvordan ser man indholdet af en binær fil? Buffere –Input –Output

25 GP7, Martin Lillholm 25 Læsning fra tekstfil i Java (repetition) Scanner klassen fra java.util.Scanner Scanner scanFile = new Scanner (new File (”filenavn”)); next(), nextLine(), nextInt(), nextDouble() hasNext() useDelimiter() f.eks. useDelimiter("\\s*[\\n,]\\s*"); Er det her den fulde sandhed om læsning fra tekstfiler... ? Fil FileReaderBufferedReader byte strøm char strøm String Fil Scanner String, char, int, double,...

26 GP7, Martin Lillholm 26 Skrivning til tekstfil i Java Eventuelt med en BufferedWriter indskudt mellem PrintWriter og FileWriter ( Alle defineret i java.io) PrintWriter metoder –println(...), print (...) –close() En tekstfil oprettes eller overskrives ved når den åbnes Husk at lukke filer efter endt skrivning! IOException, (checked).. skal behandles eller kastes videre Indtil vi har haft om exceptions blot med throws IOException Fil FileWriter PrintWriter byte strøm char strøm Primitive typer, strenge, objekter

27 GP7, Martin Lillholm 27 Binære filer i Java... Ikke pensum

28 GP7, Martin Lillholm 28 Skrivning til tekstfil i Java - eksempel Filewriter fw = new FileWriter (”test.dat”); BufferedWriter bw = new BufferedWriter (fw); PrintWriter outFile = new PrintWriter (bw); outFile.println (”Dette er en test” + 5); outFile.close(); Hvad med undtagelsen IOException der skal behandles eller kastes? Se eksempel på næste slide …

29 GP7, Martin Lillholm 29 Skrivning til tekstfil i Java - eksempel –TestData.java side 547 i L&L i BlueJ Tilføj ”header” og ”footer”

30 GP7, Martin Lillholm 30 I/O – opsamling Forsimplet fremstilling Generelt mere kompliceret –Parsere –Binære filer –... Langt flere muligheder i Java

31 GP7, Martin Lillholm 31 Static-begrebet … Nogen spørgsmål ?


Download ppt "GP7, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 7 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder."

Lignende præsentationer


Annoncer fra Google