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



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

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.

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. Arv. Arv (forts) Arv och abstrakta klasser

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

Klasshierarkier - repetition

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

Java, klasser, objekt (Skansholm: Kapitel 2)

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

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

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

Laboration 1 - Grunderna för OOP i Java

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

Föreläsning 13 Innehåll

Enkla variabler kontra referensvariabel

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

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

(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

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

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Repetition av OOP- och Javabegrepp

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

DAT043 - Föreläsning 7

Repetition av OOP- och Javabegrepp

Classes och Interfaces, Objects och References, Initialization

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

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

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

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

JAVA Mer om klasser och objektorientering

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

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

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

Objektorientering: Lagring och livstid

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

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

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

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

Objektorientering: Lagring, räckvidd och livstid

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

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

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

Lösningsförslag övning 2.

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

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

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

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

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

Konstruktion av klasser med klasser

TENTAMEN OOP

Mer om klasser och objekt

Föreläsning 5-6 Innehåll

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

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

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

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

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Tentamen OOP

Objektorienterad Programmering (TDDC77)

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Administrativt. Programmeringsteknik för I1. Dagens program. 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

Objektorienterad Programmering DAT043

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

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

OOP Objekt-orienterad programmering

Dynamisk bindning och polymorfism

Objekt och klasser - Introduktion

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

Objektorienterad Programmering (TDDC77)

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

Objekt och referenser

Objektorienterad Programmering (TDDC77)

TENTAMEN OOP

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Introduktion till Java

Lösningar för tenta 2 DAT043,

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

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

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

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

Imperativ programmering. Föreläsning 4

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

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

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

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

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

OOP Objekt-orienterad programmering

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

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

OOP Objekt-orienterad programmering

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

DD1342 Programkonstruktion för F1,

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

Transkript:

En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class Fordon { Arv: Fordonsexempel class Motorfordon extends Fordon { private double toppfart; Motorfordon (double t) { toppfart = t; double gettoppfart() { return toppfart; OOP m Java Sida 1 OOP m Java Sida 3 Fyra klasser: Fordon Motorfordon Bil Arv: Ett exempel 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 Cykel Toppfarten för en cykel beräknas från cyklistens ålder. Toppfarten för en bil beräknas från motorstykan. motorstyrka = m; antal_hjul = h; OOP m Java Sida 2 OOP m Java Sida 4

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... 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 som rymmer gemensamma datastrukturer och metoder. OOP m Java Sida 5 OOP m Java Sida 7 Arv Hur kan klasser kan relateras genom arv? Arv betyder att en klass ärver implementation av en annan Klasserna bör vara konceptuellt relaterade Exempel: Fordon -> Motorfordon -> Bil Polymorfi En variabel av klasstyp kan bindas till ett objekt av en subklass. Exempel: Fordon f = new Bil(); OOP m Java Sida 6 OOP m Java Sida 8

Polymorfi... Utöka klassen fordon med metoderna gettoppfart (abstrakt) och beskriv. abstract class Fordon { abstract double gettoppfart (); void beskriv () { System.out.println("Detta fordon har toppfart " + gettoppfart()+" km/h"); 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 OOP m Java Sida 9 OOP m Java Sida 11 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(); Typer Vi talar om typen av en variabel och typen av ett objekt Typen av en variabel är statisk, givet av programmet och ändras aldrig. Ett objekt får en viss typ när det skapas (med new). Typen ändras aldrig. OOP m Java Sida 10 OOP m Java Sida 12

Typkonvertering Vad vi vet om objekt och klasser Där ett objekt av klass K förväntas kan man använda ett objekt av en subklass (implicit konvertering) Anta: ett objekt av klass K förväntas, vi har en variabel av en superklass, bunden till ett objekt av klass K. Vi kan konvertera referensen till klass K via explicit typkonvertering. Kompilatorn lägger in ett test för att kontrollera att typen är som angetts 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 representationen. Metoderna beskriver gränssnittet till omvärlden. Allt data är kopplat till ett visst objekt. OOP m Java Sida 13 OOP m Java Sida 15 Vad vi vet (forts) Bil b = new Bil(...); Fordon f = b; //OK Typkonvertering, exempel Bil b1 = f; //Kompileringsfel Bil b1 = (Bil)f; //OK Cykel c = (Cykel)f; //Fel vid körning Frågor: Ska ett objekts data (fält) alltid vara tillgängligt utifrån? Ibland kan det vara naturligt att låta data leva oberoende av något objekt. Exempel: Matematiska konstanter, räknare för antalet objekt i en klass, globala datastrukturer Ibland kan det vara naturligt att kunna använda en metod utan att ha skapat objekt i klassen. Exempel: Matematiska bibliotek OOP m Java Sida 14 OOP m Java Sida 16

Klassvariabler Klassvariabler, testkörning Exempel: static int x; En klassvariabel existerar i en version allokeras när klassen laddas in lever oberoende av om klassen har några objekt X a = new X(); X b = new X(); X c = new X(); System.out.println(c.number); Ger variabeln c ordningsnummer 3. OOP m Java Sida 17 OOP m Java Sida 19 class X { static int counter = 0; int number; X () { counter = counter + 1; number = counter; Klassvariabler (forts) Exempel: En klass Konto med Klassvariabler... klassvariabel räntesats (gemensam för alla konton) instansvariabel saldo (varje konto har sitt eget saldo!) OOP m Java Sida 18 OOP m Java Sida 20

Klassmetoder, exempel Inkapsling och synlighet, modell 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 klassen inte har några objekt en klassmetod har tillgång till klassvariabler men inte instansvariabler (varför inte?) public class V { private int x; public void setx(int x1) { x = x1; public int getx() { return x; OOP m Java Sida 21 OOP m Java Sida 23 Jämför klassvariabler instansvariabler klassmetoder vanliga metoder klassvariabler globala variabler (i tex C eller Pascal) klassmetoder funktioner i C eller Pascal Synlighet (forts) Vi kan inte komma åt instansvariabeln x direkt: V v; v.x =... är inte tillåtet. Men med metoderna setx() och getx() kan värdet på x läsas och skrivas. En instansvariabel, klassvariabel eller metod kan deklareras private. Då kan variabeln eller metoden bara användas i klassen. OOP m Java Sida 22 OOP m Java Sida 24

Paket (forts) Rekommendationer Ange alltid synlighet för variabler och metoder. Gör alla klass- och instansvariabler private. Man talar om att en viss klass ska ingå i ett visst paket med en deklaration package mittpaket; som ska stå först i filen. Precis som en klass i Java (normalt) definieras i en klass med samma namn, måste alla.class-filer som ingår i ett visst paket finnas i en mapp (directory) med samma namn. OOP m Java Sida 25 OOP m Java Sida 27 Lite om paket i Java Ett paket (package) är en samling av klasser. I Javas standardbibliotek finns paket som System.out, java.io, java,lang, java.applet och java.swing. Varje klass har ett enkelt namn (som ges i dess definition), till exempel String, och ett fullständigt namn, till exempel java.lang.string. Paket i paket Ett paket kan innehålla andra paket (subpaket). Ett paket med namnet mittpaket.ettannatpaket är ett subpaket till paketet mittpaket. Dess klassfiler ska ligga i mappen ettannatpaket som i sin tur ska finnas i mappen mittpaket. OOP m Java Sida 26 OOP m Java Sida 28

Paket (forts) För att komma åt en klass i ett visst paket kan man använda klassens fullständiga namn, tex mittpaket.klassnamn eller mittpaket.ettannatpaket.klassnamn (Klassen KlassNamn kan vara definierad i båda paketen) Paket synlighet Om man inte anger synlighet för ett namn kommer namnet att vara synligt för andra klasser inom samma paket. public paket protec private Klassen ja ja ja ja Annan klass (samma p.) ja ja ja nej Subklass (annat paket) ja nej ja nej Annan klass (i annat p.) ja nej nej nej OOP m Java Sida 29 OOP m Java Sida 31 Paket (forts) Man kan även importera en viss klass eller ett visst 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 paket. Om man importerar två klasser med samma korta namn ger kompilatorn ett felmeddelande. Slutgiltiga klasser och metoder Nyckelordet final betyder För en variabel: deklarerar att variabeln är konstant. För en klass: att andra klasser inte kan ärva från den För en metod: att den inte kan få en ny definition i en subklass Motivering: Ger effektivare kod. Gör det möjligt för en konstruktör av en klass att styra hur andra bygger vidare på klassen. OOP m Java Sida 30 OOP m Java Sida 32

Final: Exempel Abstrakt klass: exempel class Person { int ålder; final String namn; abstract public class GeometricShape { public GeometricShape( int ix, int iy ) {... Person (String n, int å) { ålder = å; namn = n; protected int x; protected int y; abstract public void draw( Graphics g); public void move( int dx, int dy ) {... OOP m Java Sida 33 OOP m Java Sida 35 Abstrakta klasser Exempel: Abstrakt klass: exempel (forts) Ett antal klasser för olika geometriska figurer (Circle, Square, Triagle) Alla definierar en metod draw För att kunna hantera alla likformigt i ett ritprogram: definiera en abstrakt klass GeometricShape. Låt alla ärva från denna. class Square extends geometricshape { public void draw ( Graphics g ) {... class Rectangle extends geometricshape { public void draw ( Graphics g ) {... OOP m Java Sida 34 OOP m Java Sida 36

Klassen Object Java definierar en klass Object Varje klass är en subklass till Object Object definierar några användbara metoder, tex tostring(), getclass(), clone(), equals(..) vissa bör definieras om i subklasser Exempel: Object b = new Person(...); Person p = (Person) b; Varje omslagsklass Omslagsklasser (forts) har en konstruktor som accepterar motsvarande primitiva datatyp definierar en metod för att ta fram värdet, tex intvalue(). Integer x = new Integer(42); int y = x.intvalue(); Dito för Boolean, Character, Byte, Double, Float, Long, Short OOP m Java Sida 37 OOP m Java Sida 39 Omslagsklasser (Wrapper classes) Object b Problem: Givet denna deklaration kan b bindas till alla datastrukturer i Java utom de primitiva datatyperna. Lösning: För varje primitiv datatyp finns en omslagsklass (wrapper class) definierad. Tex int - Integer boolean - Boolean char - Char Så, om man har en generell datastruktur för att lagra Object kan man lagra de primitiva typerna med hjälp av omslagsklasser en viss kostnad; varje instans av en omslagsklass måste lagras på heap och avallokeras av GC ganska bökigt, en del kod för att packa in och packa upp. OOP m Java Sida 38 OOP m Java Sida 40

Autoboxing/unboxing: Automatisk 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äckt kan koden bli betydligt ineffektivare. boolean stavas med liten bokstav. OOP m Java Sida 41