Klasser og nedarvning
|
|
|
- Birgitte Mortensen
- 6 år siden
- Visninger:
Transkript
1 Datalogi C, Efterår 2004 OH er, forelæsning 21/ Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Opgaven til senere: Generalisere dele af opgaven fra sidste gang til generiske versioner
2 Formål klasser og nedarvning (bl.a.): - at kunne genbruge kode (generisk, parameteriseret ) - at beskytte data mod uautoriseret tilgang til repræsentation o uautoriserede ændringer => ødelægger (måske) korrekhed o Hvis repræsentation ændres duer program ikke :( o uautoriserede læsninger => ødelægger modularitet: Hvis repræsentation ændres duer program ikke :( - sikkerhed: compiler finder så mange fejl som muligt, o f.eks. forkert operationer på forkerte slags data, o forkerte slags data i forkerte slags variable) Generisk kode (kode = klasser/metoder/datatyper...): - kode som kan anvendes på forskellige (men beslægtede ) datatyper - kræver kraftige parameteriseringsmekanismer eller nedarvning
3 Eksempler på, hvad vi ikke kan i Java: void sortér(type T)( T [] array data, boolean (T x, T y) ) // T er en typeparameter {... } a = sorter(new int [] {12,87,435,2,-17,76}, <=); b = sorter(new Automobil [] {minferrari,...}, sammenlignbilpriser); c= sorter(b, sammenlignmotorkubikker); class Set_of(type T) // T er en typeparameter { public void insert(t) {...} public T get {...} } s Set_of(Set_of(BlaBla)) = new Set_of(Set_of(BlaBla)) Hvis vi kunne noget-i-den-retning i Java undgik vi: - at benytte den generelle klasse Object - dynamisk typecheck (kommer vi tilbage til) - eksplicit definitioner af specialiserede klasser hele tiden og så igen!
4 Generelle/generiske ting (klasser, metoder i klasser, interface) i Java: - enhver klasse/metode som ikke er final - en abstrakt klasse (pr. def klasse med abstrakte metoder) - interface (en slags totalt abstrakt klasse definition) Brug af generelle/generiske ting : - specialisering med nye eller andre egenskaber - Nedarvning med mindre andet er nævnt, overtager specialiseringen egenskaber fra det generelle Generel syntax i Java class KlasseNavn {egenskaber} class KlasseNavn extends GammeltKlasseNavn {nogle nye egenskaber} interface InterFaceNavn {navne-på-egenskaber} class KlasseNavn implements InterFaceNavn1, InterFaceNavn2,... {udfylde egenskaber} Princip: Erklæring af klasse eller interface skaber ny type referencer til objekter i klasse, værdier (= referencer til objekter) skabes ved new Princip: specialisering skaber undertyper. Hvor T kan bruges kan undertype of T også! Designproblem i Java: simple typer og klasser er ikke helt kompatible (kommer vi til)
5 Til design af sprog (som Java) med klasser og nedarvn. hører konventioner for/syntax for: - hvilke navne kan ses hvor ( hvilke egenskaber kan refereres) o når et objekt benyttes o når en klasse specialiseres - eller omvendt, når der står x i en programtekst, hvilken (om nogen) egenskab refereres til? - hvordan løses navnekonflikter (flere ting kaldet x ) - hvor stor grad af overloading tillades? Hvad er et navn Java? navn på variabel eller klasse signatur: metode-navn(parameter-type1,... ) obs: resultattype ikke en del af signaturen Java benytter signatur til at identificere metode int f(); {return 5} og float f(); {return 7.7} har samme signatur float f(float x) har en anden signatur Reference til f afgøres så vidt mulig statisk; hvis flere lige gode muligheder afgøres det dynamisk. (U)synlighed kontrolleres i Java ved: static, final, abstract, public, protected,... (læs selv hvis I ikke kan dem allerede)
6 Særligt problem ved multipel nedarvning Følgende kan man ikke i Java: class A {public int f(); {return 5}...}; class B {public int f(); {return 7} ;...} class C extends A,B {...} new C(...).f() ==??? // hvad for en f??? Problem kunne løses med ekstra syntaks etc_objekt.f of A() eller etc_objekt.f of B() Noget der minder om multipel nedarvning kan opnås ved at implementere flere interfaces: - der må ikke være overlappende signaturer med forskellig resultat-type i forskellige interfaces som kombineres - class AB extend IF1, IF2 {... kun én metode for hver signatur+resultat}... resten af forelæsning: lidt mere detaljer om hvordan det ser ud i Java.
7 Eksempel på overloading (konstruktører) public class Point { private double x, y; public Point() { x = 0.0; y = 0.0; } public Point(double x, double y) { this.x = x; this.y = y; } }...
8 Eksempel på overloading; metoder public class Point { private double x, y; //... public double distance(point other) { double dx = this.x - other.x, dy = this.y - other.y; return Math.sqrt(dx*dx + dy*dy); } } public double distance(double x, double y) { double dx = this.x - x, dy = this.y - y; return Math.sqrt(dx*dx + dy*dy); }
9 Eksempel på nedarving public abstract class Shape { public abstract double area( ); public abstract double perimeter( ); public double semiperimeter( ) {return perimeter( ) / 2; }}
10 public class Circle extends Shape { public Circle( double rad ) {radius = rad;} public double area( ) {return Math.PI * radius * radius;} public double perimeter( ) { return 2 * Math.PI * radius;} public String tostring( ) { return "Circle: " + radius;} private double radius; } public class Rectangle extends Shape { public Rectangle( double len, double wid ){length = len; width = wid;} public double area( ){return length * width;} public double perimeter( ){ return 2 * ( length + width );} public String tostring( ){return "Rectangle: " + length + " " + width;} public double getlength( ){return length;} public double getwidth( ) { return width;} private double length; private double width; } public class Square extends Rectangle { public Square( double side ){super( side, side );} public String tostring( ){return "Square: " + getlength( );} }
11 Klassen Object (std. Java), Object er overklasse for alle andre klasser public class Object { public Object(); public String tostring(); public boolean equals(object obj); public int hashcode();... } På grund af manglende typeparameterisering, benyttes Object til generiske klasser/metoder Prisen: Typedisciplinen sættes til dels over styr!
12 Eksempel: ArrayList (std. Java klasse) public class SimpleArrayList { public SimpleArrayList( ) {clear( );} public int size( ) {return thesize;} public Object get( int idx ) { if( idx < 0 idx >= size( ) ) throw new ArrayIndexOutOfBoundsException( "Index " + idx + "; size " + size( ) ); return theitems[ idx ]; } public Object set( int idx, Object newval ) { if( idx < 0 idx >= size( ) ) throw new ArrayIndexOutOfBoundsException( "Index " + idx + "; size " + size( ) ); Object old = theitems[ idx ]; theitems[ idx ] = newval; return old; } public boolean add( Object x ) { if( theitems.length == size( ) ) { Object [ ] old = theitems; theitems = new Object[ theitems.length * ]; for( int i = 0; i < size( ); i++ ) theitems[ i ] = old[ i ];} theitems[ thesize++ ] = x; return true; } public Object remove( int idx ) { Object removeditem = theitems[ idx ]; for( int i = idx; i < size( ) - 1; i++ ) theitems[ i ] = theitems[ i + 1 ]; thesize--; return removeditem; }
13 public void clear( ) { thesize = 0; theitems = new Object[ DEFAULT_CAPACITY ];} private static final int DEFAULT_CAPACITY = 10; private static final int NOT_FOUND = -1; private int thesize; private Object [ ] theitems; } Det store problem når vi bruger ArrayList: - vi kan ikke specialisere til versioner som begrænser hvilken undertype Object er listen en given ArrayList indeholder - dvs. dynamisk typecheck, massevis af type casting - dvs. større risiko for uopdagede fejl, som først opdages på runtime!!! Nok et problem: Simple værdier er ikke klasser, derfor behov for wrapper classes (std. Java) public final class Integer { public Integer(int v) {value = v;} public int intvalue() {return value;}... diverse andre gode ting for heltal private int value; }
14 Andre bøjede søm i form af standardklasser for at kompensere for manglende typeparameterisering: public interface Comparable {int compareto( Object other); } // =0 hvis ens; positiv hvis selv < other; negativ ellers Eksempel: Antag vi skriver en klasser (ikke std. java.util): public class ArrayList_with_sorting extends ArrayList; { public void sort(); {... må typecaste Object er til Comparable} } public classe Shape extends Comparable; {... som tidligere Shape men med en compareto metode... } Korrekt brug: a = new ArrayList_with_sorting(); a.add(new triangle(...)) ; a.add(new square(...));a.sort; Men runtime-fejl i tilfælde af: - der indsættes et Object som ikke er i underklasse af Comparable - der indsættes et Object som er i underklasse af Comparable men ikke sammenlignelig med Shape.
15 Hvorfor indeholder java.util.arrays mon følgende metoder: static void sort(byte[] a) Sorts the specified array of bytes into ascending numerical order. static void sort(char[] a) Sorts the specified array of chars into ascending numerical order. static void sort(double[] a) Sorts the specified array of doubles into ascending numerical order. static void sort(float[] a) Sorts the specified array of floats into ascending numerical order. static void sort(int[] a) Sorts the specified array of ints into ascending numerical order. static void sort(long[] a) Sorts the specified array of longs into ascending numerical order. static void sort(object[] a) Sorts the specified array of objects into ascending order, acc. to the natural ordering of its elements. static void sort(short[] a) Sorts the specified array of shorts into ascending numerical order.
16 Beslægtet std. java klasse til subtile tilfælde hvor Comparable ikke fungerer: public interface Comparator { int compare( Object lhs, Object rhs );} Læs også i bogen om Anonymous Classes som gør det lidt nemmere at skrive generisk kode. Programmering i Java: Kræver grundig debugging og disciplin for metodisk brug af nedarvningsmekanismerne Opgaven til senere: Generalisere dele af opgaven fra sidste gang til generiske versioner
Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion
Polymorfi Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type Coercion Tvangskonvertering (forfremmelse og begrænsning) Oversigt Abstrakt klasse abstrakt
Ugeseddel 4 1. marts - 8. marts
Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,
AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007
AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til [email protected]. Besvarelsen skal
DANMARKS TEKNISKE UNIVERSITET
DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler
University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11
DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void
Tree klassen fra sidste forelæsning
Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years
Objektorienteret design med arv og polymorfi:
Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Objektorienteret design med arv og polymorfi: Substitutionsprincippet Composite Design Pattern Finn Nordbjerg Side 1 Objektorienteret
University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3
DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget
Software Construction 1 semester (SWC) Spørgsmål 1
Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /
Skriftlig eksamen i Datalogi
Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2
SWC eksamens-spørgsmål. Oversigt
SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition
Forelæsning Uge 3 Mandag
Forelæsning Uge 3 Mandag ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet i JavaDoc) MusicOrganizer projektet Eksempel på brug af ArrayList
Abstrakte datatyper C#-version
Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype
Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java
Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger
Objektorienteret Programmering
Objektorienteret Programmering Struktureret Systemudvikling Jan Bendtsen Automation and Control Indhold Lidt om programmeringssprog Klasser i Java Klasser i C++ Oversættelse og kørsel af kode Et eksempel:
Crash Course i Programmering. HumTek, RUC
Crash Course i Programmering HumTek, RUC Kursus mål At give en basal introduktion til programmering i sproget Processing At give et overblik over sprogets potentiale At have det sjovt :-) Kursus form Meget
Hashing og hashtabeller
Datastrukturer & Algoritmer, Datalogi C Forelæsning 12/11-2002 Hashing og hashtabeller Teknik til at repræsentere mængder Konstant tid for finde og indsætte men ingen sortering af elementerne Specielt
4 Basal Objekt-orienteret Programmering I.
4 Basal Objekt-orienteret Programmering I. Klasser i forhold til abstrakte datatyper og record-typer. Variable og operationer. Klasse-interfaces. Klasser og typer. Klasse-instantiering og initialisering.
A Profile for Safety Critical Java
A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren
Programmering i C. Lektion 4. 5. december 2008
Programmering i C Lektion 4 5. december 2008 Funktioner Eksempel Fra sidst 1 Funktioner 2 Eksempel Funktioner Eksempel Eksempel: 1 / f u n k t i o n s p r o t o t y p e r / i n t i n d l a e s ( void )
Videregående programmering i Java
Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Videregående Programmering for Diplom-E Noter
Videregående Programmering for Diplom-E Noter 1. Uddelegering Ét af de væsentlige principper i objektorienteret programmering er, at enhver klasse selv skal kunne "klare ærterne". Enhver klasse skal altså
Skriftlig eksamen i Datalogi
Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Sommer 1999 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 15% Opgave 2 15% Opgave 3 8% Opgave
Hvad er Objekter - Programmering
Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som
Objektorienterede metoder
Objektorienterede metoder Denne gang: Designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Singleton eksempel: Forskellige slags
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2015 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 3. marts, 2015 Dette projekt udleveres i to dele. Hver del har sin deadline, således
Om binære søgetræer i Java
Om binære søgetræer i Java Mads Rosendahl 7. november 2002 Resumé En fix måde at gemme data på er i en træstruktur. Måden er nyttig hvis man får noget data ind og man gerne vil have at det gemt i en sorteret
Objekt-orienteret programmering uden klasser: Self.
Objekt-orienteret programmering uden klasser: Self. Sammenligning klasse-baseret og klasseløs programstrukturering. Basale forhold Singulære objekter Dynamisk nedarvning Variable i forhold til metoder.
Løsning af møntproblemet
Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
DATALOGI 0GB. Skriftlig eksamen tirsdag den 6. januar 2004
Københavns Universitet bacheloruddannelsen i datalogi side 1 af 6 DATALOGI 0GB Skriftlig eksamen tirsdag den 6. januar 2004 Dette opgavesæt består af 6 nummererede sider. Eksamensdeltagerne bør straks
Rekursion og dynamisk programmering
Rekursion og dynamisk programmering Datastrukturer & Algoritmer, Dat C Forelæsning 12/10-2004 Henning Christiansen Rekursion: at en procedure kalder sig selv eller et antal metoder kalder hinanden gensidigt.
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Bits, bit operationer, integers og floating point
Denne guide er oprindeligt udgivet på Eksperten.dk Bits, bit operationer, integers og floating point Denne artikel beskriver hvordan data gemmes som bits og hvordan man kan manipulere med bits. Den forudsætter
University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2
DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
