OOP Objekt-orienterad programmering

Relevanta dokument
OOP Objekt-orienterad programmering

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

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

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

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

Konstruktion av klasser med klasser

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

OOP Objekt-orienterad programmering

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

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

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

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

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

Föreläsning 13 Innehåll

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

Klasshierarkier - repetition

Objektorienterad Programmering (TDDC77)

OOP Objekt-orienterad programmering

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

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

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

Laboration 1 - Grunderna för OOP i Java

Classes och Interfaces, Objects och References, Initialization

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

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

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

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

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

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

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

Malmö högskola 2007/2008 Teknik och samhälle

Introduktion till arv

TENTAMEN OOP

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

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

TENTAMEN OOP

TENTAMEN OOP

Kopiering av objekt i Java

Objektorienterad Programmering (TDDC77)

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

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

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

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

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

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

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

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

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

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

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

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

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

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

DAT043 - Föreläsning 7

Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim

Arv. Objektorienterad och komponentbaserad programmering

Polymorfi. Objektorienterad och komponentbaserad programmering

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

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.

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

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

PROGRAMMERINGSTEKNIK TIN212

Tentamen ID1004 Objektorienterad programmering April 7, 2015

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

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

DAT043 - föreläsning 8

Modeller, Objekt och Klasser

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

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

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

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

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

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

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

Malmö högskola 2008/2009 CTS

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Tentamen. Programmeringsmetodik, KV: Java och OOP. 20 januari 2005

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

DD1342 Programkonstruktion för F1,

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

Agenda. Objektorienterad programmering Föreläsning 13

Föreläsning 9 Innehåll

Föreläsning 5-6 Innehåll

Generics och polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016

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.

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

OOP Tenta

ID1004 Laboration 4, November 2012

Objektorienterad programmering i Java

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

Transkript:

OOP F10:1 OOP Objekt-orienterad programmering Föreläsning 10 Mer om arv och klasshierarkier Interface Hierarkier - många nivåer OOP F10:2 Djur Rovdjur Hovdjur Fåglar Fiskar Björn Kattdjur Ko Lamm Hjort Skata Örn Torsk Haj Aborre Lejon Tiger Var placeras attribut? Hur deklareras referenser? Vad instansierar man? Hur fungerar instanceof? Hur åstadkoms polymorfism? Vilka klasser MÅSTE deklareras abstract? 1

Deklareras genom att göra extends en nivå i taget. OOP F10:3... class Rovdjur extends Djur{... class Kattdjur extends Rovdjur{... class Lejon extends Kattdjur{... Konstruktorer måste anropas "hela vägen" upp: OOP F10:4 private int ålder; public Djur(int ålder){ this.ålder=ålder; class Rovdjur extends Djur{ class Fiskar extends Djur{ class Kattdjur extends Rovdjur{ class Haj extends Fiskar{ class Lejon extends Kattdjur{ class Torsk extends Fiskar{ 2

super Refererar till superklassen. Två olika användningar. Dels att i konstruktorn anropa superklassens konstruktor (måste göras överst i konstruktorn). Dels: public void äta(int mat){ vikt+=mat/2; OOP F10:5 class Rovdjur extends Djur{ public void äta(int mat){ vikt+=mat; class Kattdjur extends Rovdjur{... class Lejon extends Kattdjur{ public void äta(int mat){ styrka += 3; super.äta(mat); super.äta() - anropet i Lejon anropar metoden äta hos superklassen. Finns ingen där går man ett steg upp i hierarkin och kollar där... class Object OOP F10:6 ALLA klasser ärver ALLTID från java s egen klass Object. Behöver ej anges.... och class Djur extends Object{... samma sak. I Object finns ett antal default-metoder, några av dem class Object{ public String tostring() {... public boolean equals() {... protected Object clone() {... Kan överskuggas i olika klasser public String tostring(){ return namn+" Vikt: "+vikt+" Värde: "+värde(); 3

En Object-referens kan referera till vilken sorts objekt som helst. Object o1 = new Myra("Myrre", 42); Object o2 = new Ko("Rosa", 145, 3); Object o3 = new Scanner(System.in); Obs att man endast kan komma åt attribut som finns definierade i klass Object OOP F10:7 Om man vill hantera många objekt av okänd sort: Object[] allaobj = new Object[100]; ArrayList<Object> alla = new ArrayList<Object>(); Nu kan vilka objekt som helst stoppas in. Om man vill stoppa in enkla datatyper (t.ex. en int)? allaobj[13] = 43; alla.add(43); Fungerar från Java 5 int görs om till Integer Multipelt arv Ibland skulle man vilja ärva från flera superklasser. OOP F10:8 Man Varg Varulv Problem - vad händer om Man och Varg har attribut med samma namn? Vilket av dessa får Varulv?? T ex om Man har en favorit som betyder favoritleksak t ex Boll Och Varg har en favorit som betyder favoritbyte t ex Lamm Vad är Varulvens favorit?? I java finns INTE multipelt arv. Löses i vissa fall med interface 4

OOP F10:9 Djur Rovdjur Hovdjur Fåglar Fiskar Björn Kattdjur Ko Lamm Hjort Skata Örn Torsk Haj Aborre Lejon Tiger Anta att vissa djur är farliga för människor. Dessa djur har en metod skada som returnerar en int som anger hur mycket skada som djuret gör. Alla rovdjur är farliga liksom örnar och hajar. Vi vill smidigt implementera detta. Hur göra? interface OOP F10:10 Ett interface talar om att en klass innehåller vissa metoder. En klass som implementerar ett interface måste implementera de metoder som finns beskrivna i interface t. Alla metod-beskrivningar i ett interface är abstracta. Ett interface är ungefär som en klass som endast innehåller abstracta metoder. Vårt exempel med farliga Djur löses på följande sätt: interface Farlig{ public int skada(); Alla Djur som är farliga kan nu implementera detta interface. class Haj extends Fiskar implements Farlig{ //I denna klass måste nu skada implementeras public int skada(){ return ålder * antaltänder; 5

Övriga farliga djur implementerar också Farlig OOP F10:11 class Örn extends Fåglar implements Farlig{ public int skada(){ return näbbstyrka + klostyrka; class Rovdjur extends Djur implements Farlig{ public int skada(){ return vikt + antaltänder + antalklor; Kan överskuggas t ex i klass Tiger: class Tiger extends Kattdjur{ public int skada(){ return super.skada() + antalränder; Kan nu användas på följande sätt: OOP F10:12 Anta att vi har en Djur-referens. Den kan referera till vilket Djur som helst. OM det råkar vara ett farligt djur vill vi skriva ut skadan det ger. Djur[] alladjuren = new Djur[100]; //arrayen alladjuren har fyllts med en blandning av olika Djur Djur ettdjur = alladjuren[17]; // Ett Djur vilket som helst if (ettdjur instanceof Farlig){ int dennaskada = ((Farlig)ettdjur).skada(); System.out.println("Skadan var: " + dennaskada); Systemet kommer nu (tack vare polymorfismen) att anropa rätt skada-metod. Vi behöver inte veta vilket sorts Djur det är för att ta reda på skadan. Ett interface används som synes på samma sätt som klasser. Ger oss ett sätt att ha en viss form av multipelt arv. Samma klass kan implementera flera olika interface s. 6

Arv eller attribut? OOP F10:13 Säg att vi har Personer i ett program. Nu upptäcker vi att det finns skillnader mellan män och kvinnor. Ska vi subklassa Person eller ha ett attribut som talar om ifall man är man eller kvinna? class Person{... class Kvinna extends Person{... class Man extends Person{... class Person{ boolean kvinna; Det finns inget direkt rätt eller fel. Är det stora skillnader på män och kvinnor i detta program (olika attribut och beteenden) är det förmodligen bäst att subklassa. Om det däremot endast är detaljer som skiljer kan det vara lämpligare att ha attributet kvinna och testa med if-satser där det behövs. Obs att man inte kan göra om ett object till ett annat under exekvering. Hur göra en hierarki? OOP F10:14 Säg att vi i ett program skall kunna representera höns, kor, vargar, örnar och lamm. Vilken hierarki är lämplig? Djur Djur Fåglar Fyrbenta Vilda Tamdjur Höna Örn Varg Ko Lamm Varg Örn Höna Ko Lamm Finns inget rätt eller fel. Beror helt på vilka attribut och beteenden som skall finnas i just detta program. 7

OOP F10:15 private int ålder; public Djur(int ålder){ this.ålder=ålder; protected int ålder; public Djur(){ class Ko extends Djur{ public Ko(int ålder){ super(ålder); public Gris(){ super(3); class Ko extends Djur{ public Ko(int ålder){ this.ålder=ålder; public Gris(){ ålder=3; OOP F10:16 abstract abstract int värde(); return 5; class Ko extends Djur{ return vikt*mjölk; class Ko extends Djur{ return vikt*mjölk; return vikt*3+styrka; return vikt*3+styrka; 8