Konstruktion av klasser med klasser



Relevanta dokument
Klasshierarkier. Klasser kan byggas på redan definierade klasser

Klasshierarkier - repetition

Konstruktion av klasser med klasser

Aggregering. Arv och klasshierarkier. Arv. Arv (forts)

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

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

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

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

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

OOP Objekt-orienterad programmering

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

Föreläsning 13 Innehåll

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

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

OOP Objekt-orienterad programmering

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

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

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

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

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

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

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

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

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

Objektorienterad Programmering (TDDC77)

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

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

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

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

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

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

Arv. Objektorienterad och komponentbaserad programmering

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

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

PROGRAMMERINGSTEKNIK TIN212

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 (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

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

TENTAMEN OOP

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

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

Objektorienterad programmering i Java

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

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

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

Objektorienterad Programmering (TDDC77)

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.

OOP Tenta

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

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

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.

Objektorienterad Programmering (TDDC77)

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

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

LÖSNINGSFÖRSLAG TILL TENTAMEN PROGRAMMERINGSMETODIK MOM2 - JAVA, 4P.

DAT043 - föreläsning 8

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

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

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

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

Tentamen Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel.

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

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

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Föreläsning 9: Arv och UML

Kap J 7-1 Mer om arv. (superklass) (subklass)

Instuderingsuppgifter läsvecka 2

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Lösningar till tentamen i EDAF25

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

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

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

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

DAT043 - Föreläsning 7

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

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Generisk klass med typparameter Inre klass - ListIterator

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

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

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

Lösningsförslag till exempeltenta 2

public boolean containskey(string key) { return search(key, head)!= null; }

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

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

Malmö högskola 2008/2009 CTS

Föreläsning 5-6 Innehåll

Lösningar för tenta 2 DAT043,

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

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

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

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

Transkript:

Konstruktion av klasser med klasser Klasser kan byggas på redan denierade klasser genom att klassobjekt används som dataattribut när en ny klass beskrivs. Exempel: Klassen PairOfDice har två attribut attribut av typen Die. Klassen TracSystem har tre attribut av typen Road och två av typen Light Klassen Road består av ett array -objekt som i sin tur innehåller ett antal Car -objekt. Man brukar säga att detta är en består av -relation (2008-11-03 10.1 )

Klasshierarkier En ny klass kan också byggas som en specialisering av en bentlig klass. Exempel: Klasserna StackException i Stack-exemplet om undantag gjorde som en subklass till Exception Om vi har en klass Fordon så kan vi bygga nya klasser som t.ex. Spark, Cykel och Bil. En Bil kan i sin tur vara basklass för klasserna Personbil och Lastbil Fordon Spark Cykel Bil Personbil Lastbil (2008-11-03 10.2 )

I dessa fall säger man att man har en klasshierarki Klassen Fordon sägs vara en basklass Klasserna Spark, Cykel och Bil är subklasser eller underklasser till klassen Fordon En subklass (t ex klassen Bil) kan användas som basklass för andra klasser (t ex Personbil och Lastbil) Man brukar säga att frasen är en... som... kan användas för att identiera att det är lämpligt att använda sig av en klasshierarki. (2008-11-03 10.3 )

Arv Ett objekt ur en subklass har alla basklassens attribut och metoder och kan lägga till egna Man säger att subklassen ärver basklassens egenskaper. Exempel: Klassen Bil kan ha egenskapen vikt. En Personbil kan tillfoga pantal medan en Lastbil kan tillfoga maxlast. En subklass kan också skriva över basklassens metoder. (2008-11-03 10.4 )

Unied Modeling Language (UML) Klasshierarkier uttrycks ofta i klassdiagram i UML. Fordon Spark Cykel Bil vikt : double Personbil pantal : int Lastbil maxlast : double (2008-11-03 10.5 )

Fordonshierarkin i kod public class Fordon { public void print() { System.out.print("Fordon"); public class Spark extends Fordon { public class Cykel extends Fordon { public void print() { System.out.print("Cykel"); public class Bil extends Fordon { double vikt; public Bil( double v ) { vikt = v; public void print() { System.out.print("Bil med vikt " + vikt); (2008-11-03 10.6 )

Användning Koden... public static void pr(string s) { System.out.print(s); public static void main(string [] args) { Fordon f = new Fordon(); Spark s = new Spark(); Cykel c = new Cykel(); Bil b = new Bil(1.2); pr("f: "); f.print(); pr("\n"); pr("s: "); s.print(); pr("\n"); pr("c: "); c.print(); pr("\n"); pr("b: "); b.print(); pr("\n");... ger utskriften f: Fordon s: Fordon c: Cykel b: Bil med vikt 1.2 (2008-11-03 10.7 )

Flera subklasser class Personbil extends Bil { int pantal = 5; public Personbil(double v) { super(v); public Personbil(double v, int ant) { super(v); pantal = ant; public void print() { System.out.print("Person"); super.print(); System.out.print(" och platsantal " + pantal); (2008-11-03 10.8 )

Fortsättning av main... Personbil pb1 = new Personbil(1.5); Personbil pb2 = new Personbil(0.9,4); pr("pb1: "); pb1.print(); pr("\n"); pr("vikt b : " + b.vikt + "\n"); pr("vikt pb1: " + pb1.vikt + "\n"); f = b; pr("f: "); f.print(); pr("\n"); f = pb1; pr("f: "); f.print(); pr("\n"); pb1 = (Personbil) f; pr("pb1: "); pb1.print(); pr("\n"); ger utskrifterna pb1: PersonBil med vikt 1.5 och platsantal 5 Vikt b: 1.2 Vikt pb1: 1.5 f: Bil med vikt 1.2 f: PersonBil med vikt 0.9 och platsantal 4 pb1: PersonBil med vikt 0.9 och platsantal 4 (2008-11-03 10.9 )

Exempel på illegala operationer pb1 = f; pb1 = (Personbil) c; pr("vikt: " + f.vikt); pb1 = (Personbil) f; // om f ej refererar Personbil Den sista kan göras säker genom if ( f instanceof Personbil ) pb1 = (Personbil) f; else... (Operatorn instanceof bör sällan användas!) (2008-11-03 10.10 )

Sammanfattning Om klassen S är en subklass till klassen B och om s är deklarerad som en referens till S och b till B så gäller Ett objekt ur klassen S har alla attribut och metoder som klassen B har Om S deklarerar ett attribut som nns i B så överskuggas Bs attribut. En referens får referera objekt ur deklarerad klass och dess subklasser. När man anger ett attribut a via punktnotation p.a så är det hur p är deklarerad som avgör vilket attribut som väljs. När man anropar en metod m via p.m() så är det typen på det element som p verkligen refererar som avgör vilken metod som väljs (så kallad dynamisk eller sen bindning). (2008-11-03 10.11 )

Metoder som bara nns i vissa klasser Fordon Spark Cykel Bil vikt : double Personbil pantal : int skatt() : double Lastbil maxlast : double skatt() : double Bilar beskattas men beräkningen görs på olika sätt för person- och lastbilar. (2008-11-03 10.12 )

Användning av skatt-metoden Bil b = new Lastbil(3., 2.);... if (...) { b = new Personbil(1.2, 5);... double s; s = b.skatt(); s = ((Lastbil) b).skatt(); // Illegalt! // Riskabelt! if ( b instanceof Lastbil ) // OK men klumpigt och s = ((Lastbil) b).skatt(); // oflexibelt else if ( b instanceof Personbil ) s = ((Lastbil) b).skatt(); else s = 0; (2008-11-03 10.13 )

Bättre Deniera dessutom en skatt-metod i klassen Bil eller, troligen bättre, i klassen Fordon: public class Fordon { public void print() { System.out.print("Fordon"); public double skatt() { return 0; Då kan metoden anropas för alla objekt av typen Fordon eller dess underklasser. Generellt: Använd inte instanceof! Utnyttja den dynamiska bindningen! (2008-11-03 10.14 )

Skyddsnivåer private Endast åtkomligt från klassens egna metoder public Åtkomligt för alla protected Åtkomligt från egna subklasser och klasser i samma paket package Om ingen skyddsnivå anges så ges alla klasser i samma paket åtkomsträttighet (2008-11-03 10.15 )

Konstruktorer vid arv Konstruktorer ärvs inte När ett objekt ur en subklass skapas så sker följande: 1. Instansvariablerna får sina defaultvärden 2. En konstruktor för superklassen anropas. Man använder super för att specicera vilken av basklassens konstruktor som skall användas. Om super inte används anropas basklassens parameterlösa konstruktor som då måste nnas. 3. Eventuella initieringsuttryck evalueras och tilldelas respektive instansvariabler 4. Satserna i subklassens konstruktor exekveras Använd super i stället för att upprepa kod! (2008-11-03 10.16 )

Standardprogramvara i Java Hela Java-miljön bygger på arv och klasshierakier! Exempel: 1. Klasserna för undantag: Throwable med underklasserna Error och Exception med underklasserna... 2. Graska komponenter: Component med underklasser Button, Checkbox, Container,... där t ex Container har underklasserna Panel, Window... 3. Avbildningar: Map med bl a underklassen HashMap 4. Samlingsklasserna: Collection med bl a underklassen och List som bl a har underklasserna Vector och LinkedList (Map, Collection och List är egentligen interface och inte klasser) (2008-11-03 10.17 )

Klassen Object Klassen Object är basklass till alla klasser. En referens till Object får således referera vilket objekt som helst. Detta kan utnyttjas för att göra generella samlingsklasser (listor, tabeller... ) (jfr användningen av void * i C): class ListNode { Object info; ListNode next; ListHead(Object i, ListNode n) { info = l; next = n; public class List { ListNode head; public void insertfirst(object o) { head = new ListNode(o, head)... Från och med Java 1.5 används dock oftast generics i stället. (2008-11-03 10.18 )

Klassen Object forts Några metoder i klassen Object: Object clone() boolean equals() String tostring() Ofta anledning att omdeniera dessa! Kunde ha denierat insertfirst i klassen List ovan: public void insertfirst(object o) { head = new ListNode(o.clone(), head) (2008-11-03 10.19 )