09 – Arv og polymorfi i java

Slides:



Advertisements
Lignende præsentationer
HUNDE SPEED km h 34,4 HUNDE SPEED km h 34,1 HUNDE SPEED km h 32,8 HUNDE SPEED km h 31,9 HUNDE SPEED km h 31,8 HUNDE SPEED km h 30,9.
Advertisements

Velkommen til Softwarekonstruktion
07 – Kort om OO Introduktion.
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
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.
Selve objektet versus referencen til objektet Nedarvning
Objektorienteret programmering
08 – Mere OO Indkapsling Arv og polymorfi (OOP’s 3 hovedprincipper)
Hvordan man skriver koden.
01 – Java platform for starters. 2 NOEA2009Java-kursus – Java Platform Introduktion til Java Baggrund Hvad er Java? Faciliteter i Java.
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
Arv Idéen i arv et at kunne genbruge gennem generalisering
Abstrakte klasser og interfaces i Java
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.
FEN NOEA/IT Programmeringsteknologi 1 Arv og polymorfi Substitutionsprincippet Abstrakte klasser Design Patterns (Composite)
Forelæsning 3.1 Collections Javas for-each løkke
1 Tråde 2 Plan Trådbegrebet Synkronisering Koordinering Eksempel: et flertrådet spil.
Grunde til at jeg elsker dig
Items 4, 14, 24, 34, 44, 54 Orange gruppe Liv, Jonas, Thorkil, Søren S og Martin D.
Fundamentale datastrukturer
Mønstre En lille introduktion. Singleton Tilgå et objekt igennem klassereference i stedet for objektreference.  Overflødiggør referencer til objektet.
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
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
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
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.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
11 - Exceptions. 2 NOEA2009Java-kursus – Exceptions Hvad er en exception? En undtagelse. Typisk en fejl der opstår runtime Afbryder det normale programflow.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Uge 14: distribuerede objekter, fjernprocedurekald, RMI Tirsdag: Introduktion Mulige fordele ved distribuerede objekter Introduktion til RMI: - Interfacets.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
Forelæsning 7.1 – repetition
FEN NOEA - Nordjyllands Erhvervsakademi1 Objektorienteret programmering Indkapsling Arv og polymorfi (OOP’s 3 hovedprincipper)
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.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
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”
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.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Indledende Programmering Uge 6 - Efterår 2006
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Polymorfi Abstrakte klasser, substitutionsprincippet, statisk og dynamisk type.
Kari Rye Schougaard, Ph.d.-stud. Værktøjer og Teknikker, 2006 A A R H U S U N I V E R S I T E T DATALOGISK INSTITUT Java på 20 minutter (eller lidt mere)
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
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.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
 Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
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.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Objecter Introduktion Webintegrator HF1 PHP Object orienteret.
Klasser og objekter (Afsnit i manualen).
Præsentationens transcript:

09 – Arv og polymorfi i java Hvordan arv og polymorfi implementeres i Java

Opsummering af arv Arv er det at en subklasse arver metoder og variable som er defineret i superklassen Genbrug er en af de store fordele ved arv En subklasse behøver kun at implementere det der adskiller den fra super klassen

Why Inheritance? Reusability Benefits of Inheritance in OOP : Reusability Once a behavior (method) is defined in a super class, that behavior is automatically inherited by all subclasses Thus, you write a method only once and it can be used by all subclasses. Once a set of properties (fields) are defined in a super class, the same set of properties are inherited by all subclasses A class and its children share common set of properties A subclass only needs to implement the differences between itself and the parent.

extends keyword extends bliver brugt til at angive at klassen arver fra en anden Eksempel, her en parent eller superklasse Person: public class Person { protected String name; protected String address; public Person(){ System.out.println(“Inside Person:Constructor”); name = ""; address = ""; } . . . .

extends keyword Opretter nu en Student klasse Da Student “er-en” slags Person, kan vi arve fra Person og genbruge name og address: public class Student extends Person { public Student(){ System.out.println(“Inside Student:Constructor”); } . . . .

Hvad bliver arvet is subklassen? Subklassen arver alle “public” og “protected” medlemmer (attributter og metoder) fra dens parent, uanset hvilken pakke den er i. Hvis subklassen er i samme pakke, arver den også pakke specifikke medlemmer, dvs. dem der ikke angivet en access modifier

Hvad kan gøres med attributter? De nedarvede attributter kan bruges direkte Subklassen kan udvides med attributter, der ikke er i superklassen Der kan erklæres en attribut med samme navn i subklassen som i superklassen. Derved skjules superklassens attribut. (dette kan ikke anbefales) En subklasse arver ikke private attributter, men hvis en public eller protected metode tilgår atttributten kan den stadig bruges.

Hvad kan gøres med metoder? De nedarvede metoder kan bruges som de er Der kan skrives en ny instans metode med samme signatur som superklassens metode. Derved overskrives / omdefineres metoden Der kan skrives en ny static metode i subklassen med samme signatur somsuperklassens. På den måde skjules superklassens metode Subklassen kan udvides med nye metoder, der ikke er i superklassen

Object klassen Object klassen er superklasse for alle klasser I Java arver alle klasser fra Object klassen Object klassen er derfor den eneste klasse der ikke har en forældre Den definerer og implementer adfærd der er fælles for alle klasser inklusiv dem man selv skriver getClass() equals() toString() ...

Eksempel på klasse hierarki

Super klasse & sub klasse Super klasse (Parent) Klasser, der ligger over en specifik klasse i klasse hierarkiet. Sub klasse (Child) Klasser, der ligger under en specifik klasse i klasse hierarkiet.

Kald af konstruktøren i super klassen En subklasse’s konstruktør kalder implicit default konstruktøren i super klassen En subklasse’s konstruktør kan eksplicit kalde konstruktøren i super klassen ved at bruge super super kan kaldes med parametre

Eksempel: Super’s default konstruktør kaldes implicit I student eksemplet fra før: Outputtet er: public static void main( String[] args ){ Student anna = new Student(); } Inside Person:Constructor Inside Student:Constructor

Eksempel forsat Program flowet er:

“super” keyword En subklasse kan eksplicit kalde en konstruktør i dens umiddelbare super klasse. Dette gøres med super(parameterliste). Hvilken konstruktør der kaldes afhænger af parametrene super(..) skal komme som det første statement i konstruktøren super(..) kan kun forekomme i konstruktøren public Student(){ super( "SomeName", "SomeAddress" ); System.out.println("Inside Student:Constructor"); }

“super” keyword En anden anvendelse af super er at referere til medlemmer af super klassen (lidt på samme måde som med this) public Student() { super.name = “somename”; super.setAddress(“some address”); }

Overriding metoder En afledt klasse (subklasse) kan overskrive (overriding på engelsk) en instans metode i superklassen. Bemærk: Overriding henfører til instans metoder For static metoder kaldes det metode hiding Den overskrivende metode skal have samme navn, parameterliste og returtype (altså signatur) som den metode den overskriver Dog kan den overskrivende metode returnere en subtype af den type som returneres af den overskrivne metode Bemærk at fra Java 1.5+ skal keyword’et @Overwrite bruges ved overskrivning

Eksempel: Overriding metoder Der er følgende metode i super klassen Person: public class Person { : public String getName(){ System.out.println("Parent: getName"); return name; }

Eksempel: Overriding metoder For at overskrive metoden i subklassen skrives en ny metode med samme signatur public class Student extends Person{ : public @Override String getName(){ System.out.println("Student: getName"); return name; } Output: Student: getName

Access modifiers i overriding metoder Access modifier’en kan tillade mere, men ikke mindre end access modifieren i super klassen F.eks kan protected instans metode i super klassen blive public i sub klassen, men ikke private. Brud på dette vil give compileringsfejl

Polymorfi? Polymorfi i et Java program Evnen til at en reference variabel kan ændre opførsel i forhold til hvilket objekt den peger på. Dette gør at objekter af forskellige subklasser kan håndtereres som om de var en instans af super klassen Man siges at objektet af subklassen substitueres ind på superklassens sted Der kommer mere polymorfi senere

Eksempel: Runtime Polymorfi Code: Person person2 = new Student(); person2.myMethod("test4"); Person person3 = new InternationalStudent(); person3.myMethod("test5"); Result: myMethod(test4) in Student class is called myMethod(test5) in InternationalStudent class is called

Polymorfi Eksempel: Shape Givet en basis klasse shape. Her giver polymorfi mulighed for at implementere forskellige area() metoder for forskellige afledte klasser, f.eks cirkel, rektangel og trekant Area() metoden er implementeret forskelligt afhængig af geometri Men ligegyldigt hvilken slags shape et objekt er, vil area()give det rigtige resultat

Eksempel: Polymorfi Student og Employee arver begge fra Person public static main( String[] args ) { Student studentObject = new Student(); Employee employeeObject = new Employee(); Person ref = studentObject; // Person reference points // to a Student object // Calling getName() of the Student object instance String name = ref.getName(); }

Eksempel: Polymorfi Student og Employee overskriver nu begge getName() public class Student { public String getName(){ System.out.println(“Student Name:” + name); return name; } public class Employee { System.out.println(“Employee Name:” + name);

Eksempel: Polymorfi I main metoden fra før, Student’s getName() metode blive kaldt Og hvis vi sætter ref til at pege på et Employee objekt vil Employee’s getName() metode blive kaldt

Eksempel: Polymorfi public static main( String[] args ) { Student studentObject = new Student(); Employee employeeObject = new Employee(); Person ref = studentObject; //Person ref. points to a Student object // getName() method of Student class is called String temp= ref.getName(); System.out.println( temp ); ref = employeeObject; //Person ref. points to Employee object //getName() method of Employee class is called String temp = ref.getName(); }

Eksempel: Polymorfi Nu har vi en static metode ‘printInformation’ der tager en Person reference som parameter. public static printInformation( Person p ){ System.out.println(p.getName()); }

Eksempel: Polymorfi Vi kan overføre referencer af typen Employee og typen Student til printInformation metoden sålænge de arver fra Person. public static main( String[] args ){ Student studentObject = new Student(); Employee employeeObject = new Employee(); printInformation( studentObject ); printInformation( employeeObject ); }

Fordele ved polymorfi Forenkling I en familie af subklasser er det muligt at ignorere type-specifikke detaljer og kun interagere med superklassen Selv om man i koden betragter en reference som et objekt af superklassen, så kan det ivirkelighed være superklassen eller en af dens arvninger Dette gør lettere at skrive, og lettere at forstå

Fordele ved polymorfi Udvidelse Nye subklasser kan tilføjes familien på et senere tidspunkt, og objekterne af disse klasser vil stadig fungere sammen med den eksisterende kode

3 former for polymorfi i et Java program Metode overriding Metoder af en subklasse overskriver metoderne af superklasse Metode overriding (implementation) af abstract metoder Abstrakte metoder er metoder,der er angivet, men ikke implementeret i super klassen. Der skal derfor være en subklasse, der implementerer metoden Metode overriding (implementation) af Java interface Metoder i en konkret klasse implementerer metoderne i et interface Om interfaces og abstrakte klasser senere

Hiding metoder Hvis en subklasse omdefinerer en klasse metode (static) med samme signatur som super klassen kaldes det hiding, dvs. den skjuler super klassens metode. Det ligner metode overskrivning, men det er det ikke: Ved metode overskrivning er der dynamisk binding, dvs. at hvis et objekt af en subklasse sættes ind på superklassens plads, så bliver subklassens metode kørt Ved metode hiding er det statisk binding. Dvs. at i ovennævnte situation vil superklassens metode blive kørt Demo

Type En instans af en given type kan bruges de steder hvor typen eller suppertypen er erklæret Eksempel: student1 objektet en “type” af CsStudent, Student, og Person student1 objektet kan bruges de steder hvor der er erklæret en instans af CsStudent, Student, eller Person. Dette giver mulighed for polymorfi

Implicit Type Casting Et objekt af en subklasse kan tildeles en variabel, der er erklæret som en parent Dette gøres implicit fordi objektet er en slags af parent Eksempel Student klassen arver fra Person klassen CsStudent klassen arver fra Student klassen CsStudent csStudent = new CsStudent(); Student student = csStudent; // Implicit type casting Person person = csSstudent; // Implicit type casting Object object = tuftsstudent; // Implicit type casting

Explicit Type Casting Et objekt af en superklasse kan tildeles en variabel, der er erklæret som en subklasse gennem eksplicit type casting. En superklasse er ikke en slags subklasse, f.eks er et pattedyr ikke en slags hund At undlade casting vil medføre en kompileringsfejl Compiler vil gennem casting sikre at du ved det er en slags hund Person person1 = new Student(); Student student1 = (Student) person1; // Explicit type casting

Runtime Type Mismatch Exception Selv man bruger casting, kan der stadig komme runtime fejl Example Student og Teacher arver begge fra Person Person person1 = new Student(); Person person2 = new Teacher(); Student student1 = (Student) person1; // Explicit type casting // No compile error, but runtime type mismatch exception Student student2 = (Student) person2;

Brug instanceof til at forhindre runtime fejl Person person1 = new Student(); Person person2 = new Teacher(); // Do the casting only when the type is verified if (person2 instanceof Student) { Student student2 = (Student) person2; }

Final klasser Klasser der ikke kan arves fra For at erklære final klasser, skriv: public final ClassName{ . . . } Eksempler på klasser i Java api’et er String og wrapper klasser f.eks Integer. Man kan ikke arve fra String

Final Metoder Metoder der ikke kan overskrives public final [returnType] [methodName]([parameters]){ . . . } Static metoder er automatisk final