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

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

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.

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Java, klasser, objekt (Skansholm: Kapitel 2)

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

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

Classes och Interfaces, Objects och References, Initialization

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

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

Enkla variabler kontra referensvariabel

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

DAT043 - Föreläsning 7

Föreläsning 13 Innehåll

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

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

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

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

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

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

Föreläsning 5-6 Innehåll

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

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

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

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

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

Repetition av OOP- och Javabegrepp

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

Lösningsförslag övning 2.

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

Repetition av OOP- och Javabegrepp

JAVA Mer om klasser och objektorientering

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

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

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

Collection Classes. bjectorienterad programmering Sida 1

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

Collection classes. Interface, första exempel. Interface (forts) Men först

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

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

Objektorienterad Programmering DAT043

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 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?

Mer om klasser och objekt

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

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

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

Klasshierarkier - repetition

Objektorienterad Programmering (TDDC77)

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

Objektorienterad Programmering (TDDC77)

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

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

OOP Objekt-orienterad 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

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

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

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

Imperativ programmering. Föreläsning 4

(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

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Objektorientering: Lagring, räckvidd och livstid

Enkla variabler kontra referensvariabel

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

Objekt och referenser

PROGRAMMERINGSTEKNIK TIN212

Kopiering av objekt i Java

Föreläsning 6. Mer om klasser och objekt. Enkla variabler kontra referensvariabel. Omslagsklassen Integer. Referensvariabler

Objekt och klasser - Introduktion

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

TENTAMEN OOP

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

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

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

Objektorientering: Lagring och livstid

Arv och polymorfism i Java

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

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

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

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

Objektsamlingar i Java

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

OOMPA 2D1359 Föreläsning 8

Lösningsförslag till exempeltenta 2

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

Lektion 12. Talbas - Radix. Funktioner. Primitiva datatyper. Procedurer. Att anropa en metod. Repetition Genomgång av gammal tenta

Föreläsning 7: Objektorienterad programmering - introduktion

TENTAMEN OOP

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

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

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

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

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

Transkript:

Idag statiska metoder och variabler private/public/protected final, abstrakta klasser, gränssnitt, delegering wrapper classes ett lite större exempel Objectorienterad programmering Sida 1

Vad vi vet om objekt och klasser 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. Objectorienterad programmering Sida 2

Vad vi vet (forts) 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 Objectorienterad programmering Sida 3

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 objekt Objectorienterad programmering Sida 4

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

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. Objectorienterad programmering Sida 6

Klassvariabler... Exempel: En klass Konto med klassvariabel räntesats (gemensam för alla konton) instansvariabel saldo (varje konto har sitt eget saldo!) Objectorienterad programmering Sida 7

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 klassen inte har några objekt en klassmetod har tillgång till klassvariabler men inte instansvariabler (varför inte?) Objectorienterad programmering Sida 8

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

public class V { private int x; Inkapsling och synlighet, modell public void setx(int x1) { x = x1; } } public int getx() { return x; } Objectorienterad programmering Sida 10

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. Objectorienterad programmering Sida 11

Rekommendationer Ange alltid synlighet för variabler och metoder. Gör alla klass- och instansvariabler private. Objectorienterad programmering Sida 12

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. Objectorienterad programmering Sida 13

Paket (forts) 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. Objectorienterad programmering Sida 14

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. Objectorienterad programmering Sida 15

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) Objectorienterad programmering Sida 16

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. Objectorienterad programmering Sida 17

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 Objectorienterad programmering Sida 18

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. Objectorienterad programmering Sida 19

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

Abstrakta klasser Exempel: 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. Objectorienterad programmering Sida 21

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 ) {... } Objectorienterad programmering Sida 22

Abstrakt klass: exempel (forts) class Square extends geometricshape { public void draw ( Graphics g ) {... }} class Rectangle extends geometricshape { public void draw ( Graphics g ) {... }} Objectorienterad programmering Sida 23

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; Objectorienterad programmering Sida 24

Gränssnitt (Interface) En slags lättviktsklasser ungefär som abstrakta klasser. Definierar ett interface ( eller protokoll) Ett interface består av ett antal metodnamn med argumenttyper och resultattyper. Ett interface innehåller inte några datastrukturer eller någon programkod. Objectorienterad programmering Sida 25

Interface, första exempel public interface MyInterface { void amethod(int i); } public class MyClass implements MyInterface { public void amethod(int i) {... }... } Objectorienterad programmering Sida 26

Interface (forts) Vi säger att en klass implementerar ett interface. En klass kan bara ärva en annan klass men implementera många interface. Man kan använda interface för att hänga på en klass ytterligare egenskaper. En vanlig variabeldeklaration beskriver hur det data som variabeln lagrar ser ut En variabel som deklareras att vara av ett visst interface: varje objekt som variabeln refererar måste implementera gränssnittet Objectorienterad programmering Sida 27

Exempel på interface i Javas API EventListener Comparable List, Set, Map Iterator Objectorienterad programmering Sida 28

Interface för att simulera multipelt arv Exempel (Jia 179-) Två klasser: Student, Employee. Vad händer om en student också är anställd? I andra objekt-orienterade språk: låt klassen StudentEmployee ärva från båda: public class StudentEmployee extends Student, Employee {... } Objectorienterad programmering Sida 29

public interface Student { float getgpa ();... } Multipelt arv i Java public interface Empolyee { float getsalary ();... } Objectorienterad programmering Sida 30

Multipelt arv (forts) Definiera sen implementationer... public class StudentImpl implements Student { float getgpa () {... }... } public class EmployeeImpl implements Empolyee { float getsalary () {... }... } Objectorienterad programmering Sida 31

Multipelt arv (forts) Om vi nu vill ha en klass för dom som är både studenter och anställda: public class StudentEmployee implements Student, Employee { private Student student; private Employee employee; StudentEmployee () { student = new StudentImpl(); employee = new EmployeeImpl(); Objectorienterad programmering Sida 32

float getgpa () { return student.getgpa(); } } float getsalary () { return employee.getsalary(); } Objectorienterad programmering Sida 33

Objekt b Omslagsklasser (Wrapper classes) Problem: Givet denna deklaration kan b bindas till alla datastrukturer i Java utom de primitiva datatyperna. Allt är objekt? Lösning: För varje primitiv datatyp finns en omslagsklass (wrapper class) definierad. Tex int - Integer boolean - Boolean char - Char Objectorienterad programmering Sida 34

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 Objectorienterad programmering Sida 35

Så, om man har en generell datastruktur för att lagra Objekt 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. Objectorienterad programmering Sida 36

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 Objectorienterad programmering Sida 37

koden bli betydligt ineffektivare. boolean stavas med liten bokstav. Objectorienterad programmering Sida 38

Ett lite större exempel Ett gränssnitt Shape med metod area(). Circle, Rectangle, Square, Triangle implementerar Shape. Objectorienterad programmering Sida 39

Exempel, version 2 Notera: för samtliga figurer gäller: arean av en instans ändras aldrig Idé: En instansvariabel area. Låt konstruktorn beräkna arean. (Vi ändrar endast Circle och Rectangle) Objectorienterad programmering Sida 40

Exempel, version 3 Både Circle och Rectangle har en instansvariabel area och en metod area() med exakt samma definition. Idé: Skapa en klass ShapeClass. Låt Circle och Rectangle ärva av denna. Placera det som är gemensamt, instansvariabeln och metoden area(), här. Objectorienterad programmering Sida 41

Exempel, version 4 Vi kan plocka bort några av instansvariablerna för Circle och Rectangle: diameter, side1, side2 Idé: Skapa en klass ShapeClass. Låt Circle och Rectangle ärva av denna. Placera det som är gemensamt, instansvariabeln och metoden area(), här. Objectorienterad programmering Sida 42

Mer ideer Gör samma sak med Triangle och Square Låt ShapeClass få en konstruktor med ett argument Då kan instansvariabeln area bli privat Objectorienterad programmering Sida 43