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.
|
|
- Ann-Marie Falk
- för 7 år sedan
- Visningar:
Transkript
1 Arv och polymorfi Arv och polymorfi är två centrala begrepp i objektorientering. Arvsmekanismen innebär att vi kan skapa nya klasser utifrån redan existerande klasser. Man gör detta med hjälp av nyckelordet extends. Syftet med detta är att skapa nya klasser som har alla den gamla klassens egenskaper samt några nya. Alternativt kan man förändra den gamla klassens beteende genom att byta ut vissa delar i den. Polymorfi betyder att en metod är mångformig, att den finns i många upplagor och att Java under programmets gång väljer rätt variant. Lite terminologi; Basklass eller superklass: En klass som fungerar som bas för vårt arv. Vi skapar nya klasser utifrån den. Härledd klass eller subklass: En klass som skapas från en basklass. Överlagrad (overloaded) metod: En metod som finns i många varianter. Alla varianter har olika signatur och det är kompilatorn som väljer. Exempel på sådana metoder är println. Överskuggad (overridden) metod: En metod med samma namn och samma signatur som en annan metod. De måste finnas i olika klasser i en familj av basklass och härledda klasser. Java väljer vid programkörning vilken metod som ska användas. Arvshierarki: En basklass och ett antal härledda klasser. har-en relation: Ett objekt innehåller något annat objekt, exempelvis innehåller ett tänkt bilobjekt fyra stycken hjulobjekt. är-en relation: Ett objekt som härleds från en basklass är samma sort som basklassen. En bil är ett fordon i en tänkt hierarki. Arv och polymorfi 26 March Arv och polymorfi 26 March Javas grafiksystem bygger i hög grad på arv. När vi skriver import java.awt.*; import extra.*; public class Ex1 extends Frame { String s; Font f= new Font("SansSerif", Font.BOLD, 24); public Ex1(String s) { this.s = s; setsize(400,400); setvisible(true); settitle("en frametitel"); setbackground(color.white); public void paint(graphics g) { g.setcolor(color.green); g.drawline(0,0,400-1,400-1); g.drawrect(0,0,400-1,400-1); g.setfont(f); g.drawstring(s,50,200); g.setcolor(color.blue); g.fillrect(50,50,200,100); g.setcolor(color.red); g.drawoval(150,170,100,200); Nu har vi skapat en härledd klass Ex1 med Frame som basklass. Alla objekt av typen Ex1 är också en Frame. De har alla egenskaper som en Frame har. Dessutom har de: Egna attribut som inte finns i Frame En egen konstruktor En egen överskuggande paintmetod Notera att är-en relationer inte är ömsesidiga. En Frame är inte nödvändigtvis ett objekt av typ Ex1. Vi säger att Ex1 är en specialiserad variant av Frame, den kan allt som Frame kan och lite till. På så sätt kan vi utnyttja basklasser och anpassa dem till våra ändamål. public static void main(string[] args) { Ex1 e; if (args.length==0) e = new Ex1("nil"); else e = new Ex1(args[0]); Std.out.print("Tryck return när du sett nog "); Std.out.flush(); int i = Std.in.readChar(); System.exit(0); Arv och polymorfi 26 March Arv och polymorfi 26 March
2 När du ska instansiera objekt av typen Ex1 kan du göra Ex1 e = new Ex1( Hejsan ); men lika gärna Frame e = new Ex1( Hejsan ); Varför. Kom ihåg att alla objekt av typ Ex1 också är av typ Frame. Frame är härledd från Window som är härledd från Container som är härledd från Component som är härledd från Object! Hur blir det med metoderna. Vad händer med e.paint(...) (som vi aldrig gör!!) Det blir rätt metod, nämligen den i Ex1. Varför? För att metoderna är polymorfa och java väljer rätt metod automagiskt. Vad lär vi oss av detta? Man kanske skulle valt nån annan kurs? Använd alltid metoder för att komma åt detaljer i objekt, inte publika attribut!!!! Component e = new Ex1( Hejsan );//OK Blir det nån skillnad? Ett exakt likadant objekt skapas. Blir det nån annan skillnad? Ja det blir det. Om du utifrån vill komma åt attributen i objektet e, dvs e.s eller e.f så kommer kompilatorn inte att hitta dem om referensen inte är av rätt typ (Ex1 här). Betyder det att de inte finns? Nej, bara att kompilatorn inte vet nåt bättre. Arv och polymorfi 26 March Arv och polymorfi 26 March Finns det nån vits med att ange bastypen istället för den mer specifika Ex1? Nej inte här, men i andra fall finns det det. Vi kan vilja skapa strukturer som är inhomogen, t. ex. en array av olika sorts objekt. Då skapar vi en array av basklasstypen och kan sedan lagra alla typer av härledda klasser. Java har en universell basklass Object, som alla klasser härletts från. Vi kan alltså göra en array av Objects och i den lagra vad som helst (utom de primitiva bastyperna). Fråga: Om vi nu lagrar en massa olika saker i en array, hur ska vi sen veta vad det är när vi hämtar det? Vi kan använda operatorn instanceof för att kontrollera typen av ett objekt. Den är sann om testat objekt är av angiven typ eller någon härledd klass till detta. Object [] a = new Object[200];.. // fyll arrayen. if (a[0] instanceof Ex1)... // det var ett sånt objekt! Arv och polymorfi 26 March Arv och polymorfi 26 March
3 Antag nu att vi själva vill bygga en modell av geometriska objekt av olika form, exempelvis kuber, sfärer och pyramider. Vi kan då göra något sånt här: public class Geom { private double x,y,z; // position private double sx, sy, sz, //storlek private int typ; // typ av objekt public Geom() {... Nu kan man ska objekt av denna typ och arbeta med dem. Om vi nu vill beräkna volymen av ett objekt så adderar vi metoder volym i klassen. public double volym() { switch (typ) { case 1: // beräkna för sfären case 2: // beräkna för pyramiden case 3: // beräkna för kuben returnera volymen Detta ser ju bra ut. Arv och polymorfi 26 March Arv och polymorfi 26 March Vilka problem kan en sån här design ge? Storlek måste anges med 3 tal, fast en sfär bara behöver ett tal. Vi måste ha en typ som vi anger typ av objekt. Vi måste ha en test på objektypen så fort vi gör något som är olika för olika objekt. Vad händer om vill definera en ny sorts objekt? Vi måste definiera ett nytt värde för typ-attributet. Vi måste ändra koden på alla ställen där vi använder typen. Blir väldigt lite modulärt. Arv och polymorfi 26 March Arv och polymorfi 26 March
4 Kan vi då göra nåt bättre? (sk retorisk fråga) Vi skapar en arvshierarki istället!! Först gör vi en basklass som innehåller att gemensamma detaljer. Sen gör vi härledda klasser, en för varje sorts objekt som innehåller de specifika delarna. Voffö då då? Vad är då gemensamt? De flesta metoder är gemensamma Position är lika för alla sorters objekt. Storlek kan ju anges på lite olika sätt så det lägger vi i de härledda klasserna. Då blir det så här Vi slipper typ-attributet och vi slipper testa på och vi kan enkelt skriva nya härledda klasser om vi behöver utan att skriva om nåt gammalt. Arv och polymorfi 26 March Arv och polymorfi 26 March public class Geom { private double x,y,z; // position... public void flytta ( double dx, double dy, double dz) { x += dx; y+=dy; z+=dz; public double volym() {? Hur gör vi då? Man kan ju alltid returnera noll. Vidare frågeställning: Är det nån mening att skapa objekt av denna klass? Om vi tänker en stund så inser vi nog att sådana objekt inte är så värst meningsfulla. Nu blev det lite problem här. Vad ska stå i volymmetoden? Vi vet att detta är ett geometrisk objekt men vi har bara en position, inget mer. Arv och polymorfi 26 March Arv och polymorfi 26 March
5 Eftersom vi tycker så så gör vi så här: public abstract class Geom { protected double x,y,z; // position public Geom() { x = y = z = 0; public Geom(double xp, double yp, double zp) { x = xp; y = yp; z = zp;... public void flytta ( double dx, double dy, double dz) { x += dx; y+=dy; z+=dz; Vad fick vi nu då? Vi har skapat en abstrakt basklass, men en eller flera abstrakta metoder. Det betyder att: Vi INTE kan skapa objekt av denna klass, den är inte instansierbar. Vi måste skriva metoden volym i alla härledda klasser. Är det nån vits med en icke-instansierbar klass? Ja, den funkar som basklass! Åtkomligheten protected betyder att härledda klasser kommer åt attributen. public abstract double volym(); Arv och polymorfi 26 March Arv och polymorfi 26 March Nu kan vi skriva public class Sfär extends Geom { private double radie; public Sfär() { super(); // Geoms konstr. radie = 1; public Sfär(double xp, double yp, double zp, double r) { super(xp,yp,zp); radie = r; Nu kan vi naturligtvis göra Sfär s = new Sfär(); men lustigt nog också Geom s = new Sfär(); Hur kan vi instansiera Geom? Det fick vi ju inte! Gör vi ju inte ju! Tänk! I själva verket är det sista skrivsättet att föredra eftersom vi då tydligt säger att vi gör ett geometriskt objekt som är en sfär.... public double volym() { return 4.0*Math.PI*radie* radie*radie/3.0; Nu har vi skapat en härledd klass till Geom som beskriver en Sfär. Arv och polymorfi 26 March Arv och polymorfi 26 March
6 Vi kan nu göra en härledd klass till: public class Box extends Geom { private double b,d,h; public Box() { super(); // Geoms konstr. b=d=h=1; public Box(double xp, double yp, double zp, double b, double d, double h) { super(xp, yp, zp); this.b = b; this.d = d; this.h = h;... Nu kan vi skapa geometriska objekt om vi vill. Exempelvis så här import extra.*; public class GTest { private Geom[] g = new Geom[10]; public static void main(string [] args) { for (int i =0; i < 10; i++) { Std.out.print( 1 = Sfär, 2 = Box ); int typ = Std.in.readInt(); if (typ == 1) g[i] = new Sfär(1, 2, -3, 2.3); else g[i] = new Box(1, -2, 5, 0.5, 1.2, 3.4); // ta fram ytan av alla objekt for (int i = 0; i < 10; i++) Std.out.println(g[i].volym()); public double volym() { return b*d*h; På samma sätt som tidigare. Arv och polymorfi 26 March Arv och polymorfi 26 March Nu har vi ett program som skapar tio geometriska objekt och lagrar dem i en array. Sen skriver vi ut volymen av alla objekten. Java väljer för varje anrop av volymsmetoden vilken av de två tänkbara metoderna som ska anropas. Det görs genom en kontroll av vilken sorts objekt som refereras. Metoden är polymorf! En Sfär ÄR EN Geom och kan användas överallt där en ett objekt av typen Geom förväntas Samma för Box. Om du har en objektreferens av typ Geom kan det vara en Sfär eller en Box, det vet du inte förrän när programmet körs. Det skulle i det generella fallet kunna vara en instans av basklassen också. En Sfär är INTE en Box. Vi kallar detta för sen bindning eller dynamisk bindning. Java bestämmer sig för vilken volymsmetod som ska användas först när programmet körs. Vi har också tidig binding eller statisk bindning som görs när programmet kompileras. Överlagrade metoder använder tidig bindning. Exempelvis bestämmer kompilatorn vilken variant av println som ska användas. Arv och polymorfi 26 March Arv och polymorfi 26 March
7 Detta har betydelse vid parametrar och vid tilldelning. Geom a = new Box(); // OK Box b = new Box(); // OK Box c = new Geom(); // Fel Box d = new Sfär(); // fel Geom e = new Sfär(); // OK Sfär f = new Sfär(); // OK Sammanfattningsvis: Arv kan användas på två olika sätt: Att fylla i och förändra befintliga objekt så att de beter sig på ett mer önskvärt sätt Att skapa en samling med olika specialiserade varianter av en gemensam bas. a = b; e = b; e = f; // OK // OK // OK f = e; // Njet f = (Sfär) e; //OK eftersom e // är en Sfär f = (Sfär) a; // passerar javac // men inte java, a // är inte en Sfär f = (Sfär) b; // Fel Regler: Tilldela uppåt i hierarkin OK Tilldela nedåt OK med typkonvertering om det är korrekt sorts objekt. Tilldela horisontellt aldrig OK. Arv och polymorfi 26 March Arv och polymorfi 26 March Interface, gränssnitt När vi använder lyssnare har vi sett att vi exempelvis gör: public class X extends Frame implements ActionListener { ActionListener är ett interface. Det är en samling deklarationer av metoder utan implementation. public interface ActionListerner { public void actionperformed(actionevent e); En implementation av ett gränssnitt anses också vara av samma typ som gränssnittet och kan användas där ett sånt efterfrågas. En klass kan bara ha en basklass men implementera hur många gränssnitt som helst. Det finns många interface i Java bl. a. för händelselyssnarna. Det gäller alltid att du måste implementera ALLA metoder i ett interface. Vissa lyssnare har många metoder, men du kanske bara behöver en av dem. För att förenkla arbetet definieras då Adapterklasser. Varför har vi detta? Java använder sådana för att kunna beskriva exakt hur gränssnittet mot något ser ut, exempelvis olika lyssnare. Däremot får du själv sedan fylla gränssnittet med innehåll, beskriva vad som ska hända. Detta gör du genom att implementera alla metoder i gränssnittet. Arv och polymorfi 26 March Arv och polymorfi 26 March
8 En Adapterklass är en implementation av ett interface. Alla metoder implementeras med tomma metoder, dvs metoder som inte gör något alls. Exempelvis public class MouseAdapter implements MouseListener { public void mouseclicked( MouseEvent e) { public void mouseentered( MouseEvent e) { public void mouseexited( MouseEvent e) { public void mousepressed( MouseEvent e) { public void mousereleased( MouseEvent e) { Nu kan du göra public class Musse extends MouseAdapter { private int x,y; public void mouseclicked( MouseEvent e) { x = e.getx(); y = e.gety(); Nu kan du i någon annan klass göra Musse m = new Musse(); addmouselistener(m); Du behöver ingen implements och du behöver bara skriva en metod. Du har skapat en härledd klass från adaptern. Vad kan detta vara bra för då? Arv och polymorfi 26 March Arv och polymorfi 26 March Du kan ju skriva MouseAdapter m = new Musse(); addmouselistener(m); också om du vill. Varför? För att basklassen alltid kan anges istället för en mer specialiserad. Parametern till addmouselistener ovan ska ju vara något som implementerar lyssnaren. Det gör vi ju fast lite indirekt. Du kan alltså också skriva: MouseListener m = new Musse(); addmouselistener(m); Vi kan också skriva MouseAdapter m = new MouseAdapter() { private int x,y; public void MouseClicked( MouseEvent e) { x = e.getx(); y = e.gety(); ; Vad menas? Vi har skapat en anonym subklasstyp som härleds från MouseAdapter. Objektet m är alltså ett objekt härlett från MouseAdapter, men typen har inget namn. Används när vi bara vill utnyttja det hela en gång som här. Arv och polymorfi 26 March Arv och polymorfi 26 March
9 För finliraren: Vi kan göra en anonym instans av en anonym subklass också! Då gör vi: addmouselistener(new MouseAdapter() { private int x,y; public void MouseClicked( MouseEvent e) { x = e.getx(); y = e.gety(); ; ) Nu har vi en instans som inte heter nåt av en klass som heller inte heter nåt men som är härledd från MouseAdapter. Denna instans fungerar som lyssnare och behöver inget namn, bara en referens. Arv och polymorfi 26 March
Klasshierarkier - repetition
Klasshierarkier - repetition Klasser kan byggas på redan denierade klasser, egna och/eller färdigskrivna, genom: I att klassobjekt används som attribut (instansvariabler): har-relation. Exempel: traksystemet
Föreläsning 8 - del 2: Objektorienterad programmering - avancerat
Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta
Föreläsningsmaterial (Arv) Skrivet av Andreas Lund
Föreläsningsmaterial (Arv) Skrivet av Andreas Lund Inledning Arv är ett begrepp som är tätt förknippat med objektorientering. Principerna bakom arv är grundade i högst vardagliga relationer mellan olika
Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier
Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165 Grafisk respresentation: Arv
Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser
Föreläsning 8 Arv och abstrakta klasser Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen (extends) Den nya klassen behåller alla egenskaper som den gamla
Konstruktion av klasser med klasser
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
OOP Objekt-orienterad programmering
OOP F9:1 OOP Objekt-orienterad programmering Föreläsning 9 Arv och klasshierarkier Polymorfism OOP F9:2 Djur - String namn - int vikt + String getnamn() + int getvikt() + void ökavikt(int x) Ko - int mjölkvolym
Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser
Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 5 Innehåll Subklasser och arv Inledning till grafik (JFrame och JPanel).
Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel
Lösningar till Fiktiv Tentamen på kursen 2D4135 Objektorienterad programmering, design och analys med Java vt2004 Teoridel T1) (4p) Förklara kort följande grundläggande begrepp inom objektorienterad programmering:
Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }
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
2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning
2I1049 Föreläsning 5 Objektorienterad programmering i Java KTH-MI Peter Mozelius Objektorientering Världar uppbyggda av objekt Inte helt olikt vår egen värld Ett sätt att modularisera våra system Objekten
TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 TDDE11, 725G90 Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Arv Polymorf UML (klassdiagram) 1 Arv Möt tre studenter
Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14
Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 14 I torsdags & fredags: arrayer Deklaration, initiering, åtkomst Arrayer är referenser Arrayer som parametrar och returvärden Exempel
Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h
Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h Antalet uppgifter : 2 (20p + 20p = 40 p) ) Lärare, jourhavande lärare :
Föreläsning 13 Innehåll
Föreläsning 13 Innehåll Arv Repetition Om tentamen Datavetenskap (LTH) Föreläsning 13 HT 2017 1 / 32 Diskutera Här är början på klassen MemoryWindow som använts på en lab. Vad kan menas med extends SimpleWindow?
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 Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett
Introduktion till arv
Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering
OOP Objekt-orienterad programmering
OOP F10:1 OOP Objekt-orienterad programmering Föreläsning 10 Mer om arv och klasshierarkier Interface Hierarkier - många nivåer OOP F10:2 Djur Rovdjur Hovdjur Fåglar Fiskar Björn Kattdjur Ko Lamm Hjort
ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter
ITK:P1 Föreläsning 4 Grafiska gränssnitt och händelsehantering 1 DSV Peter Mozelius Grafiska gränssnitt i Java Efterfrågan på program med grafiskt gränssnitt har ökat avsevärt de senaste åren I Java finns
"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde
Föreläsning 7 "Har en"-relation Arv "Har en" "Är en" Superklassen Object Överskuggning Fordonsexempel Seminarium 2 Relevanta uppgifter Uppgift 31 I exemplet Boll från förra föreläsningen gällde följande
Händelsestyrda program
JavaD- 1 Program- eller händelsestyrd exekvering Händelsestyrda program JavaD- 2 Programstyrd exekvering I ett traditionellt program bestämmer programmet när det är dags att läsa indata, programmets exekvering
Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02
Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02 Denna laboration är frivillig och syftar till att låta dig lära mer om grafik i java. Labben är ganska grundlig och går igenom vad du skall
DAT043 - Föreläsning 7
DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar
public och private Obs: private inte skyddar mot access från andra objekt i samma klass.
public och private En metod som är public får anropas från alla metoder i alla klasser. Ett attribut som är public får avläsas och ändras från alla metoder i alla andra klasser. En metod som är private
Klasshierarkier. Klasser kan byggas på redan definierade klasser
Klasshierarkier Klasser kan byggas på redan definierade klasser på två sätt: Klassobjekt används som dataattribut när en ny klass beskrivs. Exempel: klassen partikel består av ett antal attribut av typen
Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {
Innehåll EDAF30 Programmering i C++ Arv. Polymorfism. Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Kort om dynamisk polymorfism Virtuella funktioner 2 Arv i C++ Konstruktorer och destruktorer Tillgänglighet
Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine
Objektorienterad Programmering (TDDC77) Föreläsning XI: åsidosättning, gränssnitt, uppräkning, hierarkier Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Klassen calculator Signatur Calculator
Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.
Fält av referenser Tanken med objekt är man kan bygga ihop olika sorts objekt till nya saker. Sålunda kan man exempelvis använda Bil och Trafikljus att konstruera ett Väg-objekt. Om Bil och Trafikljus
Laboration 1: Figurer i hierarki
Laboration 1: Figurer i hierarki Bakgrund Två grundläggande tekniker i objektorienterad konstruktion är arv och komposition. Mål Laborationen har flera avsikter: 1. Ge kunskaper i hur program kan organiseras
Objektorienterad Programmering (TDDC77)
Objektorienterad Programmering (TDDC77) Föreläsning XI: åsidosättning, gränssnitt, uppräkning, hierarkier Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Överlagring (overloading) Arv
Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).
3 Arv och gränssnitt 3.1 Vad innebär arv? Ett objektorienterat språk bygger på att programmeraren ges möjligheten att modellera verkligheten med hjälp av objekt. Objekt låter sig definieras i form av klasser.
Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private
Inkapsling tumregler Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler Tobias Wrigstad (baserat på material från Tom Smedsaas) 5 november 2010 1. Man skall
Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT 2013 1 / 42
Programmering i C++ EDA623 Arv EDA623 (Föreläsning 6) HT 2013 1 / 42 Arv Innehåll Härledda klasser Konstruktorer och destruktorer vid arv Tillgänglighet Polymorfism och dynamisk bindning Abstrakta klasser
F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander
F8 - Arv ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Arv och subklasser Klasser innehåller attribut och beteenden En subklass ärver dessa från föräldern Detta ger: Återanvänd kod
Arv. Objektorienterad och komponentbaserad programmering
Arv Objektorienterad och komponentbaserad programmering Arv Regel nr 1: Ett objektorienterat språk ska tillåta inkapsling av data Regel nr 2: Ett objektorienterat språk ska tillåta arv Regel nr 3: Ett
Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt
Föreläsning 4 Klasser Och Objekt Klass Beskrivning av en objekttyp Beskriver egenskaper och beteende (fält och metoder) Klassen fungerar som en ritning Objekt skapas från klassbeskrivningen - instansieras
LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p
UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det
Kort om klasser och objekt En introduktion till GUI-programmering i Java
Kort om klasser och objekt En introduktion till GUI-programmering i Java Klasser En klass är en mall för hur man ska beskriva på något. Antag att vi har en klass, Bil. Den klassen innehåller en lista på
UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.
Översikt UML Sekvensdiagram (dynamic structure) Informationsflöde genom programmet Användningsfall (use cases) Aktörers interaktion med systemet Paketdiagram Beroenden mellan paket abstrakta klasser Multipel
Lektion Händelsehanterare
Lektion Händelsehanterare Händelsehanterare kallas även lyssnare. En lyssnare har som uppgift att ta hand om olika händelser som kan inträffa. För att lyssnaren skall reagera på händelser måste den registreras
UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.
Översikt Klasshierarkier UML klassdiagram Relation mellan klasser mellan klasser och objekt Association ning ing andling Programmering tillämpningar och datastrukturer 2 UML UML Unified Modeling Language
DAT043 - föreläsning 8
DAT043 - föreläsning 8 Paket, generics, Java collections framework 2017-02-07 Paket och tillgänglighet Ovanför klasser finns en hierarkisk namespace med paket. Filer som inte deklareras i något paket finns
DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin
DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:
Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap
Objektorientering - Arv och polymorfi Eric Elfving Institutionen för datavetenskap 1 / 25 Med hjälp av arv kan vi bryta ut saker som är gemensamt hos flera klasser. Vi får också möjlighet att referera
TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2
TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2 Pelle Evensen, Daniel Wetterbro 5 november 2009 Sammanfattning Denna vecka ska vi titta på abstrakta klasser kontra interface,
PROGRAMMERINGSTEKNIK TIN212
Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Robin Adams Göteborg 8 June 2018 PROGRAMMERINGSTEKNIK TIN212 Dag: Fredag Datum:
Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1
Objektorienterad programmering Vi började med att programmera i main, sedan gick vi vidare till flera metoder i en klass. Nu är det dags för flera klasser. Objektorienterad programmering Relationer mellan
Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon
Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.
DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/4 2014 Innehåll Abstrakta klasser Klasshierarki och typhierarki Polymorfism och dynamisk bindning Polymorfi-exempel: Schack UML-översikt
Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt
Programmeringsteknik II - HT18 Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt 18-09-28 1 Förra gången: Arv och klasshierarkier Vi såg hur
Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.
Objektorienterad Programmering (TDDC77) Föreläsning X: Klass diagram, inkapsling, arv Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Att instansiera en klass Objekt I Man instansierar (skapar
FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl
Högskolan Dalarna sid 1 av 6 DI-institutionen Hans-Edy Mårtensson Sten Sundin FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY2 2001-03-16, kl 14.00-18.00 1. Grunderna i
Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010
Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010 interface, motivation och bakgrund Antag att vi gör en generell listklass: public class List { protected static class ListNode { public
Föreläsning 14: Grafik & mera händelsehantering
TDA 545: Objektorienterad programmering Föreläsning 14: Grafik & mera händelsehantering Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Idag Idag: grafik läs kap 17 Viktigt i denna föreläsning: att rita
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Objektorientering - Arv och polymorfi Eric Elfving Institutionen för datavetenskap 1 / 25 Med hjälp av arv kan vi bryta ut saker som är gemensamt hos flera klasser.
Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!
itop F8 Arv (Inheritance) Läsanvisning: arv: i kap 10, exceptions: i kap 15 mer kommer sen UML: tas bara upp i OH Object Kalle Student Person Graduate Lärare! Arv! Object, instanceof! Relationer! UML Nästa
Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och
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
Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design Alex Gerdes, 2016 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon tripoly =
TDDD78 Viktiga begrepp, del 2
jonas.kvarnstrom@liu.se 2015 TDDD78 Viktiga begrepp, del 2 Identitet och likhet Är likhet och identitet samma sak? Oj, vi har samma kläder på oss idag! Nej, men likadana! Besserwisser 3 Detta är två rutor
Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.
DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/3 2017 Innehåll Abstrakta klasser Klasshierarki och typhierarki Polymorfism och dynamisk bindning Polymorfi-exempel: Schack Klassen Object
DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye
DD2310 Javaprogrammering för Pythonprogrammerare Johan Boye James Gosling pappa till Java Hej.java public class Hej { public static void main( String[] args ) { System.out.println( "Hej" ); Java basics
Laboration 15 Grafiskt användargränssnitt
Laboration 15 Grafiskt användargränssnitt Avsikten med denna laboration är att du ska träna på att skriva program som använder grafiskt användargränssnitt, dvs program som använder grafiska komponenter
TENTAMEN OOP
TENTAMEN OOP 2014-01-19 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli
Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.
Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java
Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes
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
Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv
Innehåll EDAF30 Programmering i C++ 9. Polymorfism och arv Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Klasser Polymorfism och arv Konstruktorer och destruktorer Tillgänglighet Arv utan polymorfism
Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.
Tentamen 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.00, sal E33 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel
Dynamisk bindning och polymorfism
Dynamisk bindning och polymorfism I C++ är pekare till basklasser polymorfa, dvs de kan peka på objekt av en subklass typ Vid statisk bindning sker all bindning vid kompileringen -> Vid ett metodanrop
Lösningar till tentamen i EDAF25
Lösningar till tentamen i EDAF25 21 aug 2017 Lösning 1 Javaklasser (många varianter finns naturligtvis): class Client { private Invoker invoker; public void newcommand(string cmdtext) { Command cmd; if
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 På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1
Polymorfi. Objektorienterad och komponentbaserad programmering
Polymorfi Objektorienterad och komponentbaserad programmering Polymorfi, mångtydighet Polymorfi innebär att en viss konstruktion kan exekveras på olika sätt Överlagring av metoder ger ett polymorft beteende
Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:
Att skapa en klass kvadrat Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här: public class Kvadrat { private int sida; Det var väl inte
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 På denna föreläsning Generiska klasser Undantag Interface Nästlade klasser 1 Problem:
Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim
Objektorienterad programmering Föreläsning 12 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Introduktion till Arv Superklasser och Subklasser Dolda medlemmar (new och base) Statisk
Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.
Objektorienterad Programmering (TDDC77) Föreläsning XI: åsidosättning, gränssnitt, uppräkning, hierarkier Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Signatur public static int parseint (
Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo
Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till
Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)
Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Innehåll Föreläsning 8 Två designmönster, MVC och Observer/Observable. Designrekommendation
Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc
Föreläsning 5 (6) Metoder Metoder Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Metoder Deklarera public void setnamn(string n) Åtkomstmodifierare Returtyp
Objektorienterad Programmering (TDDC77)
Objektorienterad Programmering (TDDC77) Föreläsning X: Klass diagram, inkapsling, arv Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Instansiering Åtkomst Abstrakt datatyp UML Överlagring
Subtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016
Subtyping, co- och contra-variance Objekt-orienterad programmering och design Alex Gerdes, 2016 Typer Java har två sorters typer primitiva typer och referens-typer. Primitiva typer är typer för värden:
Lösningsförslag till tentamen
till tentamen 1 (5) Kurs Objektorienterad programmering Kursbeteckning DAT042 Program D2, TKDAT Läsår 2012/2013, lp 1 Examinator Uno Holmer Uppgift 1 (10 p) Ingen lösning ges. Se kurslitteraturen. Uppgift
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Konstruktorer Statiska metoder & attribut
Tentamen ID1004 Objektorienterad programmering May 29, 2012
Omtentamen för ID1004 Objektorienterad programmering HT11, 29 maj 2012, 09-13 Denna tentamen examinerar 3 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av 12 frågor. Varje fråga
2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering
2I1049 Föreläsning 8 Grafiska gränssnitt, Java interface och händelsehantering 1 KTH-MI Peter Mozelius Grafiska gränssnitt i Java Efterfrågan på program med grafiskt gränssnitt har ökat avsevärt de senaste
Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser
Föreläsning 5-6 Innehåll Exempel på program med objekt Skapa och använda objekt Skriva egna klasser public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600,
Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering
Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk
TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: 13-06-05 Tid: kl 16.00-20.
Umeå Universitet Datavetenskap Anders Broberg 130605 TENTAMEN Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg VT-13 Datum: 13-06-05 Tid: kl 16.00-20.00 Namn: Personnummer:
Föreläsning 5-6 Innehåll
Föreläsning 5-6 Innehåll Skapa och använda objekt Skriva egna klasser Datavetenskap (LTH) Föreläsning 5-6 HT 2017 1 / 32 Exempel på program med objekt public class DrawSquare { public static void main(string[]
Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte:
Objektorienterad programmering i Java
Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet
Classes och Interfaces, Objects och References, Initialization
Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class
TENTAMEN OOP
TENTAMEN OOP 2013-08-08 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli
Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer
Innehåll EDAF30 Programmering i C++ 8. Klasser; resurshantering och polymorfism Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Klasser 2 Operatorer 3 Klasser, resurshantering Rule of three Move semantics
Exempel på användning av arv: Geometriska figurer
(9 maj 2014 Klasshierarkier 1 ) Exempel på användning av arv: Geometriska figurer Uppgift: Skriv ett program som kan hantera några olika geometrisk figurer: linjer, cirklar och rektanglar. (9 maj 2014
Tentamen. Grundläggande programmering i Java A 5p, DTAA32 2003-03-21
Mitthögskolan ITM Institutionen för Informationsteknologi och medier. Bertil Danielsson 060-14 86 82 Jan-Erik Jonsson 060-14 87 90 Tentamen i Java A Sida 1/6 Tentamen Grundläggande programmering i Java
Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016
Objektorienterad Programkonstruktion Föreläsning 4 8 nov 2016 Nästade klasser I Java går det att deklarera en klass inuti en annan klass. Vi kallar detta för att en yttre klass innehåller en inre klass.
Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 00 - juni - 17 Tentamen i Objektorientering och Java Skrivtid 5 h
Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 00 - juni - 17 Tentamen i Objektorientering och Java Skrivtid 5 h Antalet uppgifter : 4 (12p+8p+12p+8p = 40p) Lärare, jourhavande lärare :
Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se
1 F18-20-2006 Denna vecka Måndag: Ett komplext problem Tisdag: Lektion. Kväll: Essäfrågan distribueras via webben. Dead-line onsdag 17 maj, kl 12.00. Inlämning elektroniskt och på papper. Onsdag: Grafik
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.
1 Uppgift 1 Klassen Company Banken FinanceTrust som tidigare bara haft privatpersoner som kunder vill nu bygga ut sitt datasystem så att även företag kan registreras som kunder. Skriv klassen Company som