Objektorientering i allmänhet

Relevanta dokument
Objektorientering och händelsebaserad programmering. Gustav Taxén

Fönstersystem. Objektorientering och händelsebaserad programmering. Applikation. Interaktionstoolkit. Händelsehanterare och grafiktoolkit

GUI-programmering. Gustav Taxén Martin Berglund DH2640 Grafik och Interaktionsprogrammering VT 2008

Objektorientering (OO)

Objektorientering (OO)

DAT043 - Föreläsning 7

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

GUI /ll tusen. GUI /ll tusen. Java/Swing. Top Level Containers. General Purpose Containers. GrIP-vt2010-GUI-programmering Cristian Bogdan

Frameworks. GUI till tusen. GUI till tusen. Sampling architectures. Inmatningstyper

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

GUI-programmering. Gustav Taxén

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

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

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

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

Model View. View Controller. Model View Controller. Observer. GrIP-vt2010-GUI-programmering Cristian Bogdan

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

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

Lösningar till tentamen i EDAF25

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Lösningar till tentamen i EDAF25

Laboration 1 - Grunderna för OOP i Java

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

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

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

Classes och Interfaces, Objects och References, Initialization

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

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

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

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

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

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

Properties. Användbara metoder som kan anropas i propertychanged:

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

OOP Objekt-orienterad programmering

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

TENTAMEN OOP

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

Konstruktion av klasser med klasser

Objektorienterad Programmering (TDDC77)

JAVA Mer om klasser och objektorientering

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

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

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

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

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

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

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

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Klasshierarkier - repetition

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

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

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

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

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

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

TENTAMEN OOP

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

Objektorienterad Programmering (TDDC77)

OOP Objekt-orienterad programmering

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

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

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

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.

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

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

Lösningar för tenta 3 DAT043,

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

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

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

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.

OOP Objekt-orienterad programmering

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

TENTAMEN OOP

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Modeller, Objekt och Klasser

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

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

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

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

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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Observer Pattern och MVC. Objekt-orienterad programmering och design Alex Gerdes, 2016

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

Laboration 3 GUI-programmering

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

Observer Pattern och MVC. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Imperativ programmering. Föreläsning 4

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

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

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

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

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

Laboration 1: Figurer i hierarki

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

Tentamen i Objektorienterad programmering

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

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

Transkript:

Objektorientering i allmänhet Objektorientering och händelsebaserad programmering Gustav Taxén gustavt@nada.kth.se Ett objekt är en "låda" da" där man samlar Data Metoder som (oftast) manipulerar denna data Den grundläggande ggande principen för objektorientering är att data ska vara gömd för "utomstående" klasser Undantaget är subklasser till basklassen, dessa kan eventuellt få accessa data direkt 2D1640 Grafik och Interaktionsprogrammering VT 2006 Objektorientering i allmänhet Objektorientering i allmänhet public class BaseClass { private int anumber; protected int anothernumber; public int add(int n) { anumber += n; return anumber; public class SubClass extends BaseClass { public void subtract(int n) { anothernumber -= n; BaseClass SubClass SubClass kan inte komma åt anumber eftersom den är satt som private. BaseClass b = new BaseClass(); SubClass s = new SubClass(); int n; n = b.add(10); n = s.add(10); s.subtract(3); Subklassen ärver alla basklassens metoder och data. En instans av subklassen innehåller alltså all data och alla metoder i basklassen plus eventuell data och metoder i subklassen. Överlagring Överlagring Det är helt OK att skriva olika versioner av samma metod. Det som inte får skilja mellan dem är typen på det som returneras. Detta brukar kallas överlagring (overloading). Man talar ibland också om polymorfism. public class ClassA { public void f(int n) { public void f(float f) { public void f(string s) { ClassA a = new ClassA(); a.f(10); a.f(3.4); a.f("hello"); En subklass kan ändra beteendet hos en metod. Det är också en form av överlagring. public class ClassA { public int f() { return 10; public class ClassB extends ClassA { public int f() { return 15; ClassA a = new ClassA(); ClassB b = new ClassB(); int n = a.f(); // 10 int m = b.f(); // 15 1

Konstruktorer och destruktorer Gömda klassmedlemmar Klassens konstruktor anropas när en instans skapas. En default-konstruktor skapas alltid som gör ingenting. I t.ex.. C++ finns också en destruktor som anropas innan instansen tas bort ur minnet. private int n; public MyClass(int number) { n = number; public int getnumber() { return n; MyClass c = new MyClass(10); int n = c.getnumber(); Man använder nder ordet super för att hänvisa till superklassens uppsättning metoder och variabler. Det är det ända sättet att komma åt metoder eller variabler som gömts av subklassen. public class Base { public boolean avariable; public void amethod() { avariable = true; public class Sub extends Base { public boolean avariable; public void amethod() { avariable = false; super.amethod(); avariable = 10; super.avariable = 15; Abstrakta klasser interface MyInterface { void add(int n); public class MyClass implements MyInterface { void add(int n) { Ibland vill man "tvinga" att en klass implementerar vissa metoder. Detbästasättetattåstadkommadetärmed en s.k. abstrakt klass, d.v.s. en klass som talar om vilka metoder som ska finnas i subklassen men som inte bryr sig om hur de är implementerade. Abstrakta klasser abstract class MyClass { abstract void add(int n); void subtract(int n) { Man kan också göra klasser som är delvis abstrakta, d.v.s. har en eller flera abstrakta metoder kombinerat med vanliga metoder och data. I java kallas abstrakta klasser för interfaces. Final-klasser Meddelanden En klass som är deklarerad som final kan man inte göra subklasser till. En metod som är deklarerad som final kan inte överlagras. En variabel som är deklarerad som final kan aldrig ändra värde. final class MyClass { public class MyClass2 { final int f() { final int c = 10; I java-sammanhang brukar man säga att klasser kommunicerar via meddelanden. Man skickar ett meddelande genom att helt enkelt anropa en metod i en annan klass. public class ClassA { public void f(int n) { public class ClassB { private ClassA a; public void seta(classa a) { this.a = a; public void sendmsg(int n) { a.f(n); ClassB b = new ClassB(); ClassA a = new ClassA(); b.seta(a); b.sendmsg(10); 2

Instans- och klassvariabler Pass by value vs. pass by reference Det finns instansvariabler och klassvariabler. Instansvariabler har en egen "kopia"" i varje instans. Klassvariablerna finns det bara en av. Man använder nder ordet static för att ange att en variabel eller metod är en klassvariabel. public int n; public static int m; public int f() { static public int g() { MyClass c = new MyClass(); int n = c.f(); int m = c.g(); int p = MyClass.g(); int q = MyClass.m; I java är alla parametrar till metoder alltid pass by value, d.v.s. metoden använder nder en lokal kopia av de variabler som skickades till den. Det gäller även referenser till objekt. I andra språk finns också pass by reference, d.v.s. man skickar det faktiska objektet. public void f(int n) { n = 20; // n är lokal variabel MyClass c = new MyClass(); int v = 10; c.f(v); // ändrar inte v! Garbage collection Type casting I Java behöver man inte säga till när objekt ska frigöras ras. Istället finns en s.k. garbage collector som rensar minne för objekt som saknar referenser. Man kan "släppa"" en referens explicit genom att sätta den till null. MyClass c = new MyClass(); c = null; Ibland måste man omtolka en variabel (type casting). Vissa omtolkningar är inte tillåtna tna - i så fall varnar kompilatorn. Men ibland kan den inte avgöra om man gjort rätt, så var försiktig. public class Base { public class Sub1 extends Base { public class Sub2 extends Base { int a = 10; float b = (float)a; Base[] c = new Base[10]; c[0] = new Sub1(); c[1] = new Sub2(); if (c[0] instanceof Sub1) { Sub1 s = (Sub1)c[0]; Sub2 t = (Sub2)c[0]; // VARNING! Inre klasser Arrays Man kan skapa klasser inuti en klass. Dessa kan bara instansieras inuti den omslutande klassen. En inre klass har access till alla variabler och metoder i den omslutande klassen. private int n; public class MyInnerClass { public int f() { n = 10; MyInnerClass c; public void g() { c.f(); int[] num = new int[10]; for (int j = 0; j < 10; j++) { num[j] = j; int[] num2 = { 0, 1, 2 ; System.out.println(num.size); // Ger 10 System.out.println(num2.size); // Ger 3 int[][] twodim = new int[2][3]; twodim[0][0] = 0; int[][] twodimdyn = new int[2][]; twodimdyn[0] = new int[10]; twodimdyn[1] = new int[3]; 3

Strängar char c1 = 'a'; String s1 = new String("Hello"); char c2 = s1.charat(0); // Ger 'H' char[] c3 = { 'H', 'e', 'l', 'l', 'o' ; String s2 = new String(c3); System.out.println(s2.length()); // Ger 5 String s3 = s1 + s2; System.out.println(s3); // Ger "HelloHello" Namespaces I java kan man låta klasser tillhöra ett s.k. package. Det gör att det är enklare att skilja på klasser som råkar ha samma namn. Ta för vana att lägga dina klasser i ett eget package! package mypackage; import java.swing.*; public class Base { Fönstersystem Frameworks Applikation Interaktionstoolkit Händelsehanterare och grafiktoolkit Operativsystem Hårdvara Erfarenheten visar att det kan vara knepigt att hantera toolkits. Om allt är "tillåtet" är det lätt att applikationer blir inkonsekventa eller ser "fula" fula" ut. Ett framework är en uppsättning klasser (abstrakta och vanliga) som "påtvingar" ett visst sätt att arbeta. Javas framework för fönsterhantering heter Swing. Microsofts motsvarighet heter MFC (som( nu är på väg att ersättas av.net). Frameworks Koda med klassbibliotek Min kod Kod i klassbibliotek Koda med framework Framework Min kod, brukar kallas för callbacks. Frameworks Ett vanligt sätt att arbeta med frameworks är att man subklassar någon form av basklass med grundfunktionalitet.. Sedan överlagrar man de metoder som man intresserar sig för. import java.awt.*; import javax.swing.*; public class MyFrame extends JFrame { public void paint(graphics g) { g.drawstring("hello", 10, 50); public static void main(string[] args) { MyFrame f = new MyFrame(); 4

Inmatningstyper Inmatningstyper: : Events Request Lämna över kontrollen till användaren ndaren och vänta på att något sker. Exempel: : terminal i Unix. Sampling / polling Läsa av värdet hos en enhet så ofta som möjligt. Exempel: Spela in ljud från ljudkort Interrupt-subrutin Inenhet Eventkö Dispatcher Systemet placerar förändringar i en kö. Beta av kön vid lämpliga tillfällen llen. Skicka en s.k. event- instans med information om varje förändring till alla callbacks som är "intresserade". Callbacklista Callback UML Både en mjukvarudesignprocess och en serie diagramtyper. Utvecklades av företaget Rational i mitten av 90-talet. Är idag standardiserat och används nds överallt i industrin. Ger dock mycket begränsad info om hur användargr ndargränssnittetnssnittet ska se ut! UML: Use case diagrams En abstraktion av en eller flera processer, d.v.s. ett scenario. Visar aktörer och use cases, d.v.s. vad aktörerna gör. UML: Klassdiagram UML: Interaktionsdiagram Visar hur meddealanden skickas mellan klassinstanser i systemet. Ger en översikt över processer i systemet. 5

UML: Tillståndsdiagram Visar hur systemet går mellan olika tillstånd nd. UML: Aktivitetsdiagram Liknar tillståndsdiagrammet men fokuserar på aktivitet istället llet. En aktivitet behöver inte vara detsamma som ett tillstånd nd. Kan motsvara funktioner som användaren ndaren aktiverar. UML: Fysikdiagram Design patterns Används nds för att visa relationen mellan hård- och mjukvara i systemet. Kan också användas ndas för att visa hur systemet är distribuerat över olika maskiner, t.ex.. i ett nätverk. Utgår från arkitekten Alexanders arbete på 70- talet. Alexander försökte se mönster i hur man löst återkommande problem inom arkitektur och skrev en bok där han beskriver lösningarna. Idén togs upp på allvar inom systemdesign i mitten av 90-talet. Den mest kända boken är "Design Patterns: Elements of Reusable Object-Oriented Oriented Software" av Gamma, Helm, Johnson, och Vlissides. Design patterns Namn och generell typ Intent (vad( den gör) Also Known As Motivation Applicability Structure (ett( UML-diagram) Design patterns Participants (beskr( beskr. av klasser som ingår) Collaborations (hur( klasserna arbetar tillsammans) Consequences (av( att använda nda mönstret) Implementation Sample code Known uses Related patterns 6

Model View Controller En design pattern för användargr ndargränssnitt. Utvecklades under sent 70-tal, bl.a. för NeXT-datorn datorn. Exempel: Flygsimulator Model - simuleringsrutiner,, etc. Controller - joystick kopplad till datorn View - vy genom cockpitfönstret Model View Controller Model Simulering etc. Hämta data 3D-vy View Ändra roder Modifiera vyn Controller Joystick med knappar Om gränssnitten mellan de tre komponenterna inte ändras kan vilken som helst av dem bytas ut! Presentation Abstraction Control Variant av MVC som hanterar mer komplexa gränssnitt nssnitt. Utvecklades under mitten av 80-talet. Abstraction PAC Control Presentation PAC PAC PAC PAC PAC PAC Observer Ett av de vanligaste designmönstren nstren. Tillåter att ett objekt meddelas om det gjorts en förändring i ett annat objekt, utan att objekten görs starkt knutna till varandra. Control-komponenten skickar förändringar uppåt i hierarkin. Observer Observer 7

Observer i Java package java.util; public interface Observer { void update(observable o, Object arg); public class Observable { private Observer[] arr; public void addobserver(observer o) { arr.addelement(o); public void notify(object arg) { for (int i = 0; i < arr.size; i++) { arr[i].update(this, arg); Det här är inte hela sanningen, men principen är densamma i den riktiga javaimplementationen! Implementering av MVC Bygger på observer-mönstret nstret. Vy-instanserna registrerar sig hos modellen. När modellen ändras anropar den update() hos vyerna. I exemplet ni fått utdelat har modellen en särskild metod (addpoint) som controllern anropar. Controller är här ihopbakad med vyerna. Problem med MVC Events i Java Exemplet visar att det kan vara svårt att separera kontroller och vy i moderna grafiksystem. Men det lönar sig i princip alltid att separera datamodellen från applikationsmodellen, d.v.s. att hantera data på ett sådant sätt att det inte är beroende av hur det presenteras eller uppdateras. Påminner mycket om observer-mönstret nstret, men de som "lyssnar" måste implementera mer än en metod. Varje metod motsvarar något som hänt hos enheten. Events i Java Events i Java package MyTests; import java.awt.*; import java.awt.event.*; public class MyFrame1 extends Frame implements WindowListener{ public void windowopened(windowevent e) { public void windowclosing(windowevent e) { System.exit(0); public void windowclosed(windowevent e) { public void windowiconified(windowevent e) { public void windowdeiconified(windowevent e) { public void windowactivated(windowevent e) { public void windowdeactivated(windowevent e) { public static void main(string [] args) { MyFrame1 frame = new MyFrame1(); frame.addwindowlistener(frame); frame.setvisible(true); 8

som inre klass package MyTests; import java.awt.*; import java.awt.event.*; class MyWindowListener implements WindowListener { public void windowopened(windowevent e) { public void windowclosing(windowevent e) { System.exit(0); public void windowclosed(windowevent e) { public void windowiconified(windowevent e) { public void windowdeiconified(windowevent e) { public void windowactivated(windowevent e) { public void windowdeactivated(windowevent e) { public class MyFrame2 extends Frame { public static void main(string [] args) { Frame frame = new MyFrame2(); frame.addwindowlistener(new MyWindowListener()); frame.setvisible(true); Adaptors Förenklar hanteringen av events. Varje adaptor implementerar ett Listener- interface, men alla metoderna är tomma. Om man subklassar en adaptor behöver man alltså bara skriva precis den kod som behövs vs. Adaptors eller med anonym subklass class MyWindowAdapter extends WindowAdapter { public void windowclosing(windowevent e) { System.exit(0); public class MyFrame3 extends Frame { public static void main(string [] args) { Frame frame = new MyFrame3(); frame.addwindowlistener(new MyWindowAdapter()); frame.setvisible(true); public class MyFrame4 extends Frame { public static void main(string [] args) { Frame frame = new MyFrame4(); frame.addwindowlistener(new WindowAdapter (){ public void windowclosing(windowevent e) { System.exit(0); ); frame.setvisible(true); Gränssnittsexempel i Java Tre ritprogram och ett litet program med Swing-komponenter komponenter. Ni har källkoden som utdelade papper. Jag skriver dem i Eclipse på föreläsningen. Eclipse är en utmärkt utvecklingsmiljö för Java - helt gratis! 9