Martin lillholm
This presentation is the property of its rightful owner.
Sponsored Links
1 / 31

Martin Lillholm PowerPoint PPT Presentation


  • 61 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Martin lillholm

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


Obligatorisk opgave

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å?


Hvad skal jeg lave i efter rsferien

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


Sidste gang

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)


Denne gang

Denne gang

  • Nedarvning

  • Skrivning til tekstfil

  • Eventuelt repetition af static-begrebet


Nedarvning

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


Naiv implementation uden hensyn til f lles egenskaber

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

...

}


Nedarvning1

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


Implementation med nedarvning

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

...

}


Nedarvning navne og n gleord

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 { ... }


Hvad er nedarvning

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?


Nedarvning eksempler

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


Protected adgang

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


Hvad er det egentlig der arves

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 ... ?


Object klassen

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


Super referencen og konstrukt rer

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


Overskrivning overriding

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 ... ?


Overskrivning eksempel

Overskrivning – eksempel


Abstrakte klasser

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 ?


N gleordet final og arv

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 ?


Multipel arv

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++


Det store motiverende eksempel

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


Str mme streams

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)


Filtyper buffere

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


L sning fra tekstfil i java repetition

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


Skrivning til tekstfil i java

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


Bin re filer i java

Binære filer i Java ...

  • Ikke pensum


Skrivning til tekstfil i java eksempel

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 …


Skrivning til tekstfil i java eksempel1

Skrivning til tekstfil i Java - eksempel

  • TestData.java side 547 i L&L i BlueJ

    • Tilføj ”header” og ”footer”


I o opsamling

I/O – opsamling

  • Forsimplet fremstilling

  • Generelt mere kompliceret

    • Parsere

    • Binære filer

    • ...

  • Langt flere muligheder i Java


Static begrebet

Static-begrebet …

  • Nogen spørgsmål ?


  • Login