Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

Relevanta dokument
Föreläsning 9: Arv och UML

Föreläsning 2, vecka 7: Arv, subtyper och Javas API

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objektorienterad Programmering (TDDC77)

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

TENTAMEN OOP

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

Konstruktion av klasser med klasser

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objektorienterad Programmering (TDDC77)

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

Föreläsning 13 Innehåll

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

TDDD78 Viktiga begrepp, del 2

DAT043 - Föreläsning 7

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Objektorienterad Programmering (TDDC77)

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

TENTAMEN OOP

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

OOP Objekt-orienterad programmering

Klasshierarkier - repetition

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Klasshierarkier. Klasser kan byggas på redan definierade klasser

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Repetition av OOP- och Javabegrepp

Arv. Objektorienterad och komponentbaserad programmering

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Repetition av OOP- och Javabegrepp

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

OOP Objekt-orienterad programmering

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Programmering för språkteknologer II, HT2014. Rum

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Modeller, Objekt och Klasser

Instuderingsuppgifter läsvecka 2

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Lösningsförslag till tentamen

Classes och Interfaces, Objects och References, Initialization

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Laboration 1: Figurer i hierarki

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

Arv och polymorfi. Lite terminologi; Basklass eller superklass: En klass som fungerar som bas för vårt arv. Vi skapar nya klasser utifrån den.

Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).

DAT043 - föreläsning 8

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Programmering för språkteknologer II, HT2011. Rum

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Ett objekt... Exempel: Om ni tittar er runt i föreläsningssalen ser in många olika fysiska föremål:

Tentamen. Lösningsförslag

Lösningar för tenta 2 DAT043,

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Lösningsförslag till exempeltenta 1

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

TENTAMEN OOP

PROGRAMMERINGSTEKNIK TIN212

Föreläsning 5. Föreläsning 5. Klasser och objekt. Klasser och objekt. Klasser och objekt

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

OOP Tenta

Lösningar till tentamen i EDAF25

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Transkript:

itop F8 Arv (Inheritance) Läsanvisning: arv: i kap 10, exceptions: i kap 15 mer kommer sen UML: tas bara upp i OH Object Kalle Student Person Graduate Lärare! Arv! Object, instanceof! Relationer! UML Nästa gång: mer om arv, interface, abstrakta klasser, equals kap 10+11 Master Ph.D. Mycket av det vi vet om Kalle har med studenter och personer att göra. En Student är en specialiserad Person. Klasser organiseras i trädliknande strukturer. Utgående från en förälderklass ("superklass ) skapar man en ny klass, en barnklass ("subklass ) som ärver alla egenskaper (tillstånd och beteende) från superklassen som i sin tur ärver från sin superklass. public class Student extends Person... F8 1 F8 2 Multipelt arv finns i verkligheten djur näbbdjur (lägger ägg) Univ. lärare Chalmers lärare Erland däggdjur lärare GU lärare person undergrad. Kalle student Men inte i Java, Java tillåter inte multipelt implementationsarv Hur hitta lämpliga objekt? grad. Leta efter saker eller beteende dvs en uppgift att utföra. Den skall ha ett litet och väldefinierat ansvar, Den skall interagera så lite som möjligt, Definiera dess tillstånd och beteende. Överskuggning, metodbindning Överskuggning (Override): (jmf överlagring = overloading) Man kan ändra beteendet och lägga till nya egenskaper och beteende till en klass vid arv. Dock inte ta bort något, (nåja). Undantag eller ändrat beteende (tex ett näbbdjur lägger ägg) hanteras genom att en subklass överskuggar sitt arv från superklassen genom att ha en metod med samma namn och samma parameterprofil. Metodbindning: När man skall söka efter en metod så börjar man där man är (meddelandemottagarens klass). Finns där ingen metod med rätt namn och parameterprofil så söker man i föräldern osv. F8 3 F8 4

Ett exempel en person public class Person { private String name; private int age; private String address; public Person( String n, int ag, String adr){ name = n; age = ag; address = adr; // + eventuella kontroller public String tostring( ) { return getname( ) + " " + getage( ); public String getname() {... public int getage() {... public String getaddress(){... public final void setaddress( String newaddress) {... public final void setname( String newname) {...... final => kan ej överskuggas F8 5 En student som ärver personen public class Student extends Person { private double gpa; public Student( String n, int age, String adr, double gpa ) { super(n, age, adr); this.gpa = gpa; public String tostring( ) { return super.tostring( ) + " " + getgpa(); public double getgpa( ) { return gpa;! Vi kan lägga till fält och metoder, men inte ta bort dem (tex inte public -> private), och vi kan överskugga metoder (som tostring här).! Detta är en helt ny klass och den nya klassen måste ha sin egen konstruktor.! Den har också egna upplagor av alla fält och metoder från superklassen. F8 6 Typ kompabilitet 1 I vilken klass som helst kan man skriva public static boolean isolder (Person p1, Person p2){ return p1.getage() > p2.getage(); Vi kan anropa med objekt av typ Person eller med något objekt som är en Person dvs objekt av alla subklasser till Person som Student, Phd, Lärare osv. Object Undergrad. Student Person Graduate Master Lärare Ph.D. instanceof Instanceof runtime-testar om ett objekt är instans av en viss klass. Om uttrycket exp instanceof ClassName är sant så är exp en instans av ClassName eller en instans av någon av ClassName's subklasser Observera att det är en rätt svag test eftersom arv ju är transitivt, i vårt studentexempel så är en phd en instans av Phd, Graduate, Student, Person och Object. Phd phd = new Phd(...); Student stud = new Student(...); Person p = new Student(); if( phd instanceof Phd ) true if( phd instanceof Student ) true if( stud instanceof Phd ) false if( p instanceof Student ) true instanceof används ofta före en typkonvertering för att vara säker på att den går bra. Man kan alltid konvertera "uppåt" men inte nedåt utan problem och då använder man instanceof för att avgöra om det går. F8 7 F8 8

statisk / dynamisk typ Person p; String svar = <läs från användaren> if (svar.equals( p ) { p = new Person(...); else if (svar.equals( l ) { p = new Lärare(...); else if (svar.equals( s ) { p = new Student(...); Vad har p för typ här? (dvs vad kan vi göra med p?) p har statiska typen Person. Det är allt kompilatorn kan se /avgöra. p's dynamiska typ är inte känd förrän vid körningen och kan vara någon av Person,. Lärare eller Student....println( p.getage() ); if (p instanceof Student) { x = (Student p).getgpa(); F8 9 Typ kompabilitet 2 (Generisk metod) class PersonDemo { public static void printall( Object[] arr ){ for(int i=0; i<arr.length; i++){ if( arr[i]!= null ) {...println("[" + i + "] " + arr[i] ); public static void main(string[]args){ Person[] p = new Person[4]; p[0] = new Person("joe",... ); p[1] =new Student("becky",... ); p[3] = new Teacher("bob",... ); printall( p ); if( p[3] instanceof Teacher ) { ((Teacher) p[3]).raise(0.04); // p[3]s statiska typ är Person // och raise är inte def där // därav typkonverteringen F8 10 Om vi har en Teacher med ett fält salary hur funkar då public static boolean isritcher (Person p1, Person p2){ return p1.getsalary() > p2.getsalary(); - inget vidare. Men detta funkar if (p1 instanceof Teacher && p2 instanceof Teacher){ return (Teacher)p1.getSalary() > (Teacher)p2.getSalary(); --> Bättre byta typ till Teacher här public static boolean isritcher (Teacher p1, Teacher p2){ return p1.getsalary() > p2.getsalary(); Sammanfattning Base class = super class = parent class Derived class = sub class = child class! a sub class extends its super class! konstruktorer ärvs inte! privata variabler ärvs men kan inte kommas åt annat än via publika getters.! privata metoder ärvs inte! en sub klass kan kan ha nya metoder och variabler! en sub klass kan även överskugga metoder i super klassen! metoden x i superklassen kan kommas åt med super.x()! konstruktorer i super klassen kan man komma åt med super(...)! superkonstruktorn måste anropas först F8 11 F8 12

UML en notation för att beskriva relationer Notation: [optional], Foo = nonterminal, (Multi = kort för Multiplicity) Man kan beskriva fält och metoder med Javaeller UML syntax. Fält: J: [Visibility] [Type] Name [Multi] [=initialvalue] public int duration = 100 U: [Visibility] Name [Multi] [ :Type] [=initialvalue] + duration : int = 100 Metoder: Name Fields Methods Java: [Visibility] [Type] Name ([Parameter,...]) int add(int dx, int dy) UML: [Visibility] Name ([Parameter,...]) [ :Type] ~add(dx : int, dy : int) : int Java Visibility UML tolkning public + tillgänglig för alla protected # i alla klasser i samma paket och alla subklasser ~ alla i samma paket (package) private - enbart inom klassen Multiplicity Betecknar antalet förekomster av fältet och är en komma separerad sekvens av heltalsintervall. l..u från l till u inklusive, u kan vara * i ett heltal * 0, 1, 2, 3,... Java: Type Name UML: Name : Type Parametrar F8 13 F8 14 Exempel Korta former Att modellera Relationer och Struktur Inheritance (arv) (en är relation) inklusive extension och implementation Association (association) (känner till / har) inkl. aggregation och composition Dependency (beroende) Arv modellerar en är -relation (Is-a) Paket och objekt Ni behöver inte kunna så mycket UML men ni måste känna till relationerna, se nedan. aggregate = förenande, sammanlagd, summa, förena aggregation = sammanhopning, samling association = förbindelse, umgänge, samband,anknytning composition = (musik)komposition, sammansättning, bildande F8 15 F8 16

Arv modellerar en "är" - relation Beskriver allmänna gemensamma egenskaper Association modellerar känner till En binär känner till relation mellan klasser. 2 objekt känner till varandra: Subklassen kan vara:! en utökning av superklassen dvs man lägger till egenskaper (instansvariabler) och beteende (instansmetoder)! en specialisering av superklassen dvs vissa metoder ersätts Implementeras med Java konstruktionen arv F8 17 Implementeras med referenser dvs ett objekt har en pekare till andra objekt F8 18 många-> många och många -> en Aggregation och Composition - en "har" (has-a) relation Aggregation är en speciell form av association som representerar en har relation. Betecknas med en! i aggregatändan av relationen. Composition är en starkare form av aggregation där komponenterna är helt beroende (ägda) av aggregatet. Betecknas med en i aggregatändan av relationen. Ett objekt är här del i ett annat objekt. Ägaren har exklusiv tillgång till de inneslutna objekten.! En student deltar (enrolls) i en kurs! en student kan ta många kurser! en kurs kan ha många studenter! en lärare kan ha många kurser! en kurs har bara en lärare (nåja)! Implementeras med referenser dvs motorn innehåller en instansvariabel som är en pekare till en cylinder. F8 19 F8 20

Dependency (beror av) Om man tex vill kunna hämta information från ladok så måste man känna till strukturen hos kurser och studenter, man är beroende Man kan också modellera dynamiskt beteende i UML med sekvensdiagram och tillståndsdiagram. Det finns grafiska verktyg för att rita UML diagram tex argouml http://argouml.tigris.org/ Mycket nya glosor idag - igen! arv, inheritance, trädliknande arvstrukturer förälderklass ("superklass ), barnklass ("subklass ) base class = super class = parent class derived class = sub class = child class multipelt arv, multipelt implementationsarv extends överskuggning (override),, överlagring (overloading) parameterprofil metodbindning final, super, this typkompabilitet, typkonvertering instanceof statisk / dynamisk typ Uniform Modeling Language UML visibility, multiplicity protected, relationer: arv, association, aggregation, composition referenser, implementeras F8 21 F8 22