1 / 31

Martin Lillholm

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. Obligatorisk opgave. Var opgaven til i onsdags For nem For svær

yul
Télécharger la présentation

Martin Lillholm

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 Programmering (GP)Efterår 2005Forelæsning 7Slides ligger på nettet. Du er velkommen til at printe dem nu.Vi begynder 9.15.www.itu.dk/courses/GP/E2005 Martin Lillholm

  2. Obligatorisk opgave • Var opgaven til i onsdags • For nem • For svær • 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. 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. 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. Denne gang • Nedarvning • Skrivning til tekstfil • Eventuelt repetition af static-begrebet

  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. 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. Nedarvning Ansat Studerende TAP Person VIP • 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

  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. 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. 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. 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. 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. Hvad er det egentlig der arves ? • Felter uanset om de er erklæret public, private eller protected • Metoderuanset 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. 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. 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. 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. Overskrivning – eksempel

  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. 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. 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. 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. 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. 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. 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 ... ? byte char String Fil BufferedReader FileReader strøm strøm String, char, int, double, ... Scanner Fil

  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 videreIndtil vi har haft om exceptions blot med throws IOException Primitive typer, strenge, objekter byte char Fil PrintWriter FileWriter strøm strøm

  27. Binære filer i Java ... • Ikke pensum

  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. Skrivning til tekstfil i Java - eksempel • TestData.java side 547 i L&L i BlueJ • Tilføj ”header” og ”footer”

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

  31. Static-begrebet … • Nogen spørgsmål ?

More Related