Arv. En klassdefinition class A extends B {... } definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som definierade för B.

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

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

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

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

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

Tentamen OOP

OOP Objekt-orienterad programmering

Föreläsnings 10 - Överlagring, Konstruerare, Arv, Mer Exceptions, Reguljära Uttryck

Klasshierarkier - repetition

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ 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

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

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

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

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

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

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

Föreläsning 13 Innehåll

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

Mera om generik. Innehåll. Generik och arv Wildcards Vektorer och generik Generiska metoder. EDA690 (Mera om generik) HT / 24

Enkla variabler kontra referensvariabel

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

Laboration 1 - Grunderna för OOP i Java

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

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

DAT043 - Föreläsning 7

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Du ska nu skapa ett litet program som skriver ut Hello World.

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

Övningar Dag 2 En första klass

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

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

Lösningsförslag övning 2.

JAVA Mer om klasser och objektorientering

Programmering A. Johan Eliasson

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

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

Konstruktion av klasser med klasser

Objektorienterad programmering i Java

Repetition av OOP- och Javabegrepp

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

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

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

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

Klasser och Objekt i Java. C++ använder beteckningarna datamedlem resp. medlemsfunktion. Klassdefinition. Exempel: Variabler

Repetition av OOP- och Javabegrepp

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

Klasser och objekt i C#

Objektsamlingar i Java

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Föreläsning 5-6 Innehåll

Föreläsning 9: Arv och UML

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

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

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

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

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

SMD 134 Objektorienterad programmering

Objekt och klasser - Introduktion

Mer om klasser och objekt

Objektorienterad programmering D2

Java, klasser, objekt (Skansholm: Kapitel 2)

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

OOP Objekt-orienterad programmering

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

TENTAMEN OOP

Lösningar för tenta 2 DAT043,

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

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

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

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

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

OOP Objekt-orienterad programmering

Classes och Interfaces, Objects och References, Initialization

Objektorienterad 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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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

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.

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

TENTAMEN OOP

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

Objektorientering: Lagring, räckvidd och livstid

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

Objektorientering: Lagring och livstid

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

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

Introduktion till arv

Transkript:

Arv En klassdefinition class A extends B {... } definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som definierade för B. A är en subklass till B. B är en superklass till A.

Arv: Ett exempel Fyra klasser: Fordon Motorfordon Bil Cykel Toppfarten för en cykel beräknas från cyklisten Toppfarten för en bil beräknas från motorstykan

Arv: Fordonsexempel class Fordon { } class Motorfordon extends Fordon { private double toppfart; Motorfordon (double t) { toppfart = t; } double gettoppfart() { return toppfart; } }

Arv: fordonsexempel (forts) class Bil extends Motorfordon { int motorstyrka; int antal_hjul; Bil(int m, int h){ super(m *1.5); //Antar att toppfarten är motorstyrkan * 1.5 } } motorstyrka = m; antal_hjul = h;

Arv: fordonsexempel (forts) class Cykel extends Fordon { private Person cyklist; Cykel (Person p) { cyklist = p; } double gettoppfart () { if (cyklist.ålder > 60) return 10; if (cyklist.ålder > 25) return 20; return 30; //Larvigt... } }

Arv Hur kan klasser kan relateras genom arv? Arv betyder att en klass ärver implementat annan Klasserna bör vara konceptuellt relaterade Exempel: Fordon -> Motorfordon -> Bil

Använd arv endast när Rekommendation det är lämpligt att ärva implementation, och subklassen representerar en delmängd av superklassen Ofta är det lämpligt att introducera en ny klass rymmer gemensamma datastrukturer och meto

Polymorfi En variabel av klasstyp kan bindas till ett objek subklass. Exempel: Fordon f = new Bil();

Polymorfi... Utöka klassen fordon med metoderna gettopp (abstrakt) och beskriv. abstract class Fordon { abstract double gettoppfart (); } void beskriv () { System.out.println("Detta fordon har toppf + gettoppfart()+" km/h"); }

Kod för att testa... Person p = new Person("Olle", 24); Cykel c = new Cykel (p); Bil b = new Bil (100, 4); System.out.println("Cykel..."); c.beskriv(); System.out.println("Bil..."); b.beskriv(); Fordon f = new Cykel(new Person("Nisse", 99) System.out.println("Fordon?..."); f.beskriv();

Körexempel svenolof@harpo$ javac Fordonstest.java svenolof@harpo$ java Fordonstest Cykel... Detta fordon har toppfart 30.0 km/h Bil... Detta fordon har toppfart 150.0 km/h Fordon?... Detta fordon har toppfart 10.0 km/h

Typer Vi talar om typen av en variabel och typen av e Typen av en variabel är statisk, givet av pro och ändras aldrig. Ett objekt får en viss typ när det skapas (m Typen ändras aldrig.

Typkonvertering Där ett objekt av klass K förväntas kan ma ett objekt av en subklass (implicit knverteri Anta: ett objekt av klass K förväntas, vi ha variabel av en superklass, bunden till ett ob klass K. Vi kan konvertera referensen till klass K typkonvertering. Kompilatorn lägger in ett test för att kontrol typen är som angetts

Bil b = new Bil(...); Typkonvertering, exempel Fordon f = b; //OK Bil b1 = f; //Kompileringsfel Bil b1 = (Bil)f; //OK Cykel c = (Cykel)f; //Fel vid körning

Vad vi vet om objekt och klass En klass definierar en typ av objekt. Varje klass har ett antal fält (instansvariabler) ett antal metoder en konstruktor Idé: Fälten beskriver den interna represen Metoderna beskriver gränssnittet till omvär Allt data är kopplat till ett visst objekt.

Vad vi vet (forts) Frågor: Ska ett objekts data (fält) alltid vara tillgäng utifrån? Ibland kan det vara naturligt att låta data le oberoende av något objekt. Exempel: Matematiska konstanter, räknare antalet objekt i en klass, globala datastruk Ibland kan det vara naturligt att kunna anvä metod utan att ha skapat objekt i klassen. Exempel: Matematiska bibliotek

Klassvariabler Exempel: static int x; En klassvariabel existerar i en version allokeras när klassen laddas in lever oberoende av om klassen har några

class X { static int counter = 0; Klassvariabler (forts) int number; X () { counter = counter + 1; number = counter; }}

Klassvariabler, testkörning X a = new X(); X b = new X(); X c = new X(); System.out.println(c.number); Ger variabeln c ordningsnummer 3.

Klassvariabler... Exempel: En klass Konto med klassvariabel räntesats (gemensam för al instansvariabel saldo (varje konto har sitt saldo!)

Klassmetoder, exempel class F { static double m(double x, double y) { return (x + y) / 2; } } Anropet F.m(4.2, 9) ger resultatet 6.6. en klassmetod kan anropas även om klass några objekt en klassmetod har tillgång till klassvariable instansvariabler (varför inte?)

Jämför klassvariabler instansvariabler klassmetoder vanliga metoder klassvariabler globala variabler (i tex C Pascal) klassmetoder funktioner i C eller Pascal

Inkapsling och synlighet, mod public class V { private int x; public void setx(int x1) { x = x1; } } public int getx() { return x; }

Synlighet (forts) Vi kan inte komma åt instansvariabeln x di V v; v.x =... är inte tillåtet. Men med metoderna setx() och getx() kan x läsas och skrivas. En instansvariabel, klassvariabel eller meto deklareras private. Då kan variabeln eller m bara användas i klassen.

Rekommendationer Ange alltid synlighet för variabler och meto Gör alla klass- och instansvariabler private

Lite om paket i Java Ett paket (package) är en samling av klass I Javas standardbibliotek finns paket som System.out, java.io, java,lang, java.applet o java.swing. Varje klass har ett enkelt namn (som ges i definition), till exempel String, och ett fullst namn, till exempel java.lang.string.

Paket (forts) Man talar om att en viss klass ska ingå i ett vis med en deklaration package mittpaket; som ska stå först i filen. Precis som en klass i Java (normalt) definieras med samma namn, måste alla.class-filer som visst paket finnas i en mapp (directory) med sa namn.

Paket i paket Ett paket kan innehålla andra paket (subpaket) Ett paket med namnet mittpaket.ettannatpaket är ett subpaket till paketet mittpaket. Dess klas ligga i mappen ettannatpaket som i sin tur ska mappen mittpaket.

Paket (forts) För att komma åt en klass i ett visst paket kan använda klassens fullständiga namn, tex mittpaket.klassnamn eller mittpaket.ettannatpaket.klassnamn (Klassen KlassNamn kan vara definierad i båd

Paket (forts) Man kan även importera en viss klass eller ett paket, tex import mittpaket.klassnamn eller import mittpaket.ettannatpaket.klassnamn för att importera en viss klass, eller import mittpaket.* eller import mittpaket.ettannatpaket.* för att importera alla klasser inom ett visst pake Om man importerar två klasser med samma ko ger kompilatorn ett felmeddelande.

Paket synlighet Om man inte anger synlighet för ett namn kom namnet att vara synligt för andra klasser inom paket. public paket p Klassen ja ja ja Annan klass (samma p.) ja ja ja Subklass (annat paket) ja nej ja Annan klass (i annat p.) ja nej n

Slutgiltiga klasser och metod Nyckelordet final betyder För en variabel: deklarerar att variabeln är För en klass: att andra klasser inte kan är För en metod: att den inte kan få en ny de subklass Motivering: Ger effektivare kod. Gör det möjlig konstruktör av en klass att styra hur andra byg på klassen.

class Person { int ålder; final String namn; Final: Exempel Person (String n, int å) { ålder = å; namn = n; } }

Abstrakta klasser Exempel: Ett antal klasser för olika geometriska figurer (C Square, Triagle) Alla definierar en metod draw För att kunna hantera alla likformigt i ett ritprog definiera en abstrakt klass GeometricShape. L från denna.

Abstrakt klass: exempel abstract public class GeometricShape { public GeometricShape( int ix, int iy ) {... } protected int x; protected int y; } abstract public void draw( Graphics g); public void move( int dx, int dy ) {... }

Abstrakt klass: exempel (fort class Square extends geometricshape { public void draw ( Graphics g ) {... }} class Rectangle extends geometricshape { public void draw ( Graphics g ) {... }}

Klassen Object Java definierar en klass Object Varje klass är en subklass till Object Object definierar några användbara metod tostring(), getclass(), clone(), equals(..) vissa bör definieras om i subklasser Exempel: Object b = new Person(...); Person p = (Person) b;

Objekt b Omslagsklasser (Wrapper class Problem: Givet denna deklaration kan b bindas datastrukturer i Java utom de primitiva datatyp Lösning: För varje primitiv datatyp finns en om (wrapper class) definierad. Tex int - Integer boolean - Boolean char - Char

Varje omslagsklass Omslagsklasser (forts) har en konstruktor som accepterar motsva primitiva datatyp definierar en metod för att ta fram värdet, t intvalue(). Integer x = new Integer(42); int y = x.intvalue(); Dito för Boolean, Character, Byte, Double, Floa Short

Så, om man har en generell datastruktur för at Objekt kan man lagra de primitiva typerna med omslagsklasser en viss kostnad; varje instans av en omsla måste lagras på heap och avallokeras av G ganska bökigt, en del kod för att packa in o upp.

Autoboxing/unboxing: Automa inpackning och uppackning Nytt för Java 5 (detta finns ej i Jias bok) int a = 123; Object x = a; int y = (Integer) x; När x tilldelas allokeras ett objekt. Tips! Se upp för detta. Om man använder omslagsklasser där primitiva datatyper hade rä koden bli betydligt ineffektivare. boolean stavas med liten bokstav.