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

Relevanta dokument
Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 13 Innehåll

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

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

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

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

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.

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

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

OOP Objekt-orienterad programmering

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

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

Klasshierarkier - repetition

OOP Objekt-orienterad programmering

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

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

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

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

Problemlösning. Analys och design OOA&D. Programutveckling sker i faser OOA&D. Fastställa och analysera förutsättningarna/ kraven.

Objektorienterad Programmering (TDDC77)

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

Classes och Interfaces, Objects och References, Initialization

Konstruktion av klasser med klasser

Kopiering av objekt i Java

Objektorienterad programmering. Grundläggande begrepp

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

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

Arv och polymorfism i Java

Modeller, Objekt och Klasser

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

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

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

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

Arv. Objektorienterad och komponentbaserad programmering

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

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

DAT043 - Föreläsning 7

Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

Introduktion till arv

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

Objektorienterad programmering

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Imperativ programmering. Föreläsning 4

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

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

Laboration 1: Figurer i hierarki

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

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Föreläsning 9: Arv och UML

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

Java, klasser, objekt (Skansholm: Kapitel 2)

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

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

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

Arrayer. results

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

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

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

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

TENTAMEN OOP

Objekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

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

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

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Analys och design. Objekt. Klass. med hjälp av CRC. Klassdiagram

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.

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

OOMPA 2D1359 Föreläsning 8

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

TDDC76 - Programmering och Datastrukturer

TENTAMEN OOP

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

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

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

Malmö högskola 2008/2009 CTS

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

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

Föreläsning 15: Repetition DVGA02

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

Föreläsning 4. Polymorfism. Polymorfism Dynamisk bindning Inkapsling Information hiding Access-metoder och mutator-metoder

Polymorfi. Objektorienterad och komponentbaserad programmering

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

DAT043 - föreläsning 8

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

Repetition av viktiga begrepp inom objektorienterad programmering

OOP Objekt-orienterad programmering

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

Repetition av OOP- och Javabegrepp

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

Transkript:

Innehåll u OOP snabbintroduktion u Datatyper u Uttryck u Satser u Arv (intro) u Programvaruutveckling och programmering u Klassdesign och metodik (UML, CRC) u Arv, polymorfi och dynamisk bindning u Fält u Undantag u In-/utmatning och filer u Applets vs applikationer u Rekursion F6 jubo,thomasj,marie 2003 1

Omdefiniera metoder 1 u Ärvda metoder kan ibland vara olämpliga o changesize(), draw() och erase() t ex måste fungera olika för olika figurer Ë En subklass får omdefiniera en ärvd metod u I en omdefinition ges en metod en ny implementering u Måste dock ha samma signatur som superklassens metod u signatur : metodens namn och parametrar (antal,typ och ordning) F6 jubo,thomasj,marie 2003 2

Omdefiniera metoder 2 u Originalmetoden skuggas, finns dock fortfarande tillgänglig genom super referensen super.metod (parametrar); u...på detta sätt kan originalmetoden utökas u Se t.ex. metoden tostring i people2 F6 jubo,thomasj,marie 2003 3

Klassen Object u Alla klasser härleds från klassen Object u Om inget arv anges, är klassen automatiskt subklass till Object u Klassen Object är alltså rot i alla hierarkier Object // `== och `= för objekt + boolean equals (Object obj ) + Object clone ( ) + String tostring ( ) + Class getclass ( ) # wait (long timeout )... F6 jubo,thomasj,marie 2003 4

Omdefiniera metoder 3 /** * Return a string representation of this object. */ public String tostring() // redefined from "Object" { } return "Name: " + name + "\n" + "Year of birth: " + yearofbirth + "\n"; Person /** * Return a string representation of this object. */ public String tostring() // redefined from "Person" { } return super.tostring() + "Staff member\n" + "Room: " + room + "\n"; Staff F6 jubo,thomasj,marie 2003 5

Omdefinition vs. Overloading u Omdefinition o Två (eller fler) metoder med samma signatur o Deklarerat i olika klasser o Originalversionen deklarerat i en superklass o Omdefinitioner i olika subklasser Ë Metodval beror på klasstyp u u Overloading o Två (eller fler) metoder med olika signatur o Får vara deklarerat i samma klass Ë Metodval beror på parameterlistan Se klassen Triangle i shapes2 exemplet F6 jubo,thomasj,marie 2003 6

Klass hierarkier u Subklasser kan i sin tur ha subklasser u God klassdesign placerar gemensamma egenskaper så högt som möjligt i hierarkin u God klassdesign lägger till bara ett fåtal nya attribut och metoder åt gången u Klass hierarkier måste ofta modifieras och utökas u Ingen generell design som duger överallt F6 jubo,thomasj,marie 2003 7

Arv och polymorfi Polymorfi: Kan förekomma i många former. u Referenser får referera till objekt av en subklass u Exempel: Figure f = new Square(); Square s = new Figure(); OK. Square är-en Figure Figure Square s = new Circle(); Square... Circle Typfel F6 jubo,thomasj,marie 2003 8

Dynamisk bindning u Objektets typ (inte referensens) bestämmer vilken metod som exekveras u Samma kod kan ge olika anrop vid olika tillfällen u Kopplingen görs under körningen (dvs dynamisk) OK. Square och Circle ärver från ( är-en ) Figure u Exempel: Figure f = new Square(); f.changesize (100); changesize i Square exekveras! Figure f = new Circle(); Square... Circle f.changesize (100); changesize i Circle exekveras! F6 jubo,thomasj,marie 2003 9

Sammanfattning u Arv tillåter att skapa speciella klasser på ett enkelt sätt u Polymorfi tillåter att använda en referens för olika klasstyper o Definierat klasstyp o Annan klasstyp som direkt eller indirekt ärver från denna u Metoder kan omdefinieras (bara i samband med arv) och överladdas u Dynamisk bindning ser till att rätt metod exekveras Ë Programmeraren behöver inte manuellt kolla klasstyp Ë Mera flexibla program u Se Database klassen i people2 exemplet F6 jubo,thomasj,marie 2003 10

Identifierares existens u En identifierare existerar i det block där den definierats public class MinKlass { private int x; // instansvariabler public int minmetod(int y) { for (int i=1; i <= 10; i=i+1) { int j;... }// i-loop... }// minmetod attribut x parameter y loopvariabel i lokal variabel j... }// MinKlass F6 jubo,thomasj,marie 2003 11

Att organisera Javakod u Förutom (enkelt) arv finns det fler koncept i Java som underlättar strukturering av kod u Abstrakta klasser (abstract) o När lämpliga superklasser blir för allmänna u Interfaces (interface) o När arv och abstrakta klasser inte räcker till u Paket (package) o När det blir så pass många klasser att de måste struktureras på ett lämplig sätt F6 jubo,thomasj,marie 2003 12

Abstrakta Klasser 1 u God klassdesign placerar gemensamma attribut och metoder så högt som möjligt i hierarkin u men ibland kan dessa egenskaper inte definieras fullständigt u Abstrakta klasser innehåller ofta abstrakta metoder u En abstrakt metod har ingen implementation, bara en signatur u Klasser med abstrakta metoder blir abstrakta Ë Abstrakta klasser är ofta för allmänna för att vara direkt användbara Ë En abstrakt klass kan inte instantieras o Varför inte? - Prova själv i labbet! F6 jubo,thomasj,marie 2003 13

Abstrakta Klasser 2 /* * Draw the figure on screen. */ protected abstract void draw(); Bara metodhuvudet } // Canvas canvas = Canvas.getCanvas(); // canvas.setforegroundcolour(color); // construct an appropriate Shape object // and call `canvas.fill() with this // `Shape object // canvas.wait(10); /* * Erase the figure on screen. */ protected abstract void erase(); // Canvas canvas = Canvas.getCanvas(); // construct an appropriate `Shape object and // call `canvas.erase() with this `Shape object F6 jubo,thomasj,marie 2003 14

Abstrakta Klasser - deklaration public abstract class Classname { attribut deklareras implementerade metoder abstrakta metodhuvuden } F6 jubo,thomasj,marie 2003 15

Abstrakta Klasser 3 u Abstrakta klasser (och metoder) markeras med modifieraren abstract u Subklasser som inte (om)definierar alla abstrakta metoder blir också abstrakta u Exempel: File id size name() print() <<abstract>> Text_File text print() Binary_File data print() Picture_File print() F6 jubo,thomasj,marie 2003 16

Vad kännetecknar en god klass u En odelad, väldefinierad abstraktion u Uppgiften kan beskrivas kort och tydlig u Namnet är en substantiv eller adjektiv som beskriver abstraktionen på ett adekvat sätt u Har ett koncist och sammanhörig gränssnitt u Har tillstånd och beteende u Representerar en mängd möjliga run-time objekt u Problemet ska delas upp i lämpliga klasser Ë Cohesion och Coupling (sammanhörighet och koppling) Ë Metoderna i varje klass ska ha stark sammanhörighet Ë Klasserna ska vara löst kopplade (oberoende av varann) F6 jubo,thomasj,marie 2003 17

Cohesion u Varje metod ska vara ansvarig för bara en uppgift u Cohesion mäter huruvida en metod uppfyller detta krav u Ju mer en metod fokuserar på en enda uppgift, desto o enklare är det att finna ett bra namn o enklare och förståeligare blir koden u Metoder med stark sammanhörighet kan lättare ändras utan att andra metoder påverkas Ë Det ska vara möjligt att beskriva en metod med en enkel mening med ett verb och ett objekt F6 jubo,thomasj,marie 2003 18

Cohesion: Exempel u Exempel 3: public void setfirstname (String name) { firstname = name; } public void setlastname (String name) { lastname = name; fullname = firstname + + lastname; } Bättre: public void setfirstname (String name) { firstname = name; fullname = firstname + + lastname; } public void setlastname (String name) { lastname = name; fullname = firstname + + lastname; } F6 jubo,thomasj,marie 2003 19

Kategorier av metoder u Konstruktorer o Skapa instanser u Selektor (get-metod) o Returnerar information om objektets tillstånd u Mutator (set-metod) o Ändra objektets tillstånd u Iteratorer o Gå igenom en kollektion elementvis o Returnerar ett objekt och fortsätter till nästa u Annat o Gör nånting Ë En metod ska vara bara i en kategori F6 jubo,thomasj,marie 2003 20

Coupling u Klasserna ska vara så oberoende som möjligt av varann u Coupling mäter hur stark klasserna är kopplade u Ju lösare klasserna är kopplade, desto o enklare är det att förstå en enstak klass o enklare och förståeligare blir systemet som helhet u Klasserna med lös koppling kan lättare ändras utan att andra klasser påverkas Ë Systemet blir lättare att ändra Ë Mera flexibilitet PROBLEM: Koppling och återanvändning går inte ihop F6 jubo,thomasj,marie 2003 21

u Ju starkare relation desto starkare koppling ( sämre) u Dependency u Association u Komposition u Arv Klassrelationer igen <<beror på>> Klass1 Klass 2 relation Klass1 Klass 2 Klass1 Klass 2 Klass1 Klass 2 svag koppling stark koppling F6 jubo,thomasj,marie 2003 22

protected u Problem: Omdefinition av icke publika metoder u Private metoder ärvs inte u men public ska de inte vara Ë Modifieraren protected tillåter arv men ger bättre skydd än public Ë Subklasser kommer åt public och protected attribut/ metoder Ë medan andra klasser bara kommer åt public F6 jubo,thomasj,marie 2003 23

Visibility Variabel eller metod Nås inom samma klass Nås inom samma paket Nås från subklass Nås av alla private nej nej nej default nej nej protecte d public nej F6 jubo,thomasj,marie 2003 24

Visibility via arv Variabel eller metod private default protecte d public Ärvs av subklass i samma paket nej Ärvs av godt. subklass nej nej nej F6 jubo,thomasj,marie 2003 25