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.

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

Formularer (Access, del 3)
07 – Kort om OO Introduktion.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Object-Orienteret Programmering og Design. 2 Nordjyllands Erhvervakademi – 2009 Indhold “Classes, objects and object-oriented programming (OOP) play a.
NetBeans Installation og brug.
Selve objektet versus referencen til objektet Nedarvning
Grundlæggende programmering Efterår 2001
GP10, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 10 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi.
Objektorienteret programmering
09 – Arv og polymorfi i java
Hvordan man skriver koden.
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
Introduktion til Access (Access, del 1)
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
FEN IntroJava AAU1 Opsamling: afvikling af Java-programmer Input fra keyboard og fil Fra en prompt Fra BlueJ Fra NetBeans.
GP12, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 12 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi.
Forelæsning 3.1 Collections Javas for-each løkke
Rapporter (Access, del 5). RHS – Informationsteknologi – Udgangspunkt Vi har oprettet en database Vi har defineret en eller flere tabeller, og.
GP6, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 6 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
Fundamentale datastrukturer
Eksempel på realisering af domænemodel
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
Objekter og klasser Rasmus D. Lehrmann DM
Introduktion til Access (Access, del 1). RHS – Informationsteknologi – Fra design til udvikling Vi ved nu, hvordan vi finder et design for en database,
GP8, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 8 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Repetition: Introduktion til OOP med C# og .NET
Procestræ under afvikling af cp init login shell cp cp src dest.
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Forelæsning 2.2 Tilstand og opførsel (repetition)
Oprettelse af tabeller (Access, del 2)
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
GP4, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 4 Vi begynder Slides ligger på hjemmesiden. Du er velkommen til.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
GP9, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 11 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
GP3, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 3 Vi begynder Slides ligger på hjemmesiden. Du er velkommen til.
Forelæsning 7.1 – repetition
Tekst filer Tekstfiler opbygges normalt af linier, hvor disse ikke behøver at være samme længde. Når man skal arbejde med tekstfiler, ønsker man metoder.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
DAIMIIntroducerende Objektorienteret Programmering1 Polymorfi og nedarvning Motivation for arv og “mange former”
 1999, Henrik B. ChristensenIntroducerende objektorienteret programmering8A.1 Polymorfi og nedarvning Motivation for arv og “mange former”
 Jens Bennedsen 2001Multimedie programmering10A.1 Polymorfi og nedarvning Motivation for arv og “mange former”
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Indledende Programmering Uge 6 - Efterår 2006
Polymorfi Abstrakte klasser, substitutionsprincippet, statisk og dynamisk type.
Objektorienteret analyse og design Ó Bennedsen 2001 Design - part Programmering og systemudvikling Lektion 7 Design - part 2.
DAIMIIntroducerende Objektorienteret Programmering8A.1 Polymorfi og nedarvning Motivation for arv og “mange former”
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Objecter Introduktion Webintegrator HF1 PHP Object orienteret.
Klasser og objekter (Afsnit i manualen).
Præsentationens transcript:

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 Martin Lillholm

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

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

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)

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

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

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

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

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

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

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?

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

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

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

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

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

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

GP7, Martin Lillholm 18 Overskrivning – eksempel

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 ?

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 ?

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

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

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)

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

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

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

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

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 …

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

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

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