Objektorientering (OO)

Relevanta dokument
Objektorientering (OO)

Objektorientering och händelsebaserad programmering. Gustav Taxén

Objektorientering i allmänhet

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

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

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

DAT043 - Föreläsning 7

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

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

Imperativ programmering. Föreläsning 4

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

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

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

Classes och Interfaces, Objects och References, Initialization

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

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

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

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

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

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

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

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

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

Klasshierarkier - repetition

Laboration 1 - Grunderna för OOP i Java

Objektorienterad Programmering (TDDC77)

Konstruktion av klasser med klasser

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

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

Objektorienterad Programmering (TDDC77)

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

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

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

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

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

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

Objektorienterad Programmering (TDDC77)

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

Generics och polymorfism. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

TENTAMEN OOP

JAVA Mer om klasser och objektorientering

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

Generics och polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Objektorienterad programmering

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

F4. programmeringsteknik och Matlab

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

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

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

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

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

Lösningar till tentamen i EDAF25

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

Arv och klassbibliotek

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

Instuderingsuppgifter läsvecka 2

Modeller, Objekt och Klasser

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

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

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

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

Exempel på spelprogrammering i java.

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

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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Författare: Juha Söderqvist IT-GUI. Version 1.0. Datum

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

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

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

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

Lösningar till tentamen i EDAF25

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Monday, November 16, Senaste Labben

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2

Generisk klass med typparameter Inre klass - ListIterator

OOP Objekt-orienterad programmering

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

Java: kort introduktion. Trådar. Något om mutex, Dekkers algoritm och monitorer. Javas ("inbyggda monitor") synchronized.

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Laboration 1: Figurer i hierarki

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

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

TENTAMEN OOP

Arv. Objektorienterad och komponentbaserad programmering

OOP Objekt-orienterad programmering

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal

Lösningsförslag till exempeltenta 2

Transkript:

GrIP-vt2008-Föeläsning 6: OO & UI Cristian Bogdan 2008-02-05 Objektorientering (OO) Objektorientering och UI-programmering Yngve Sundblad y@kth.se Cristian Bogdan cristi@kth.se From the icy waters of Norway comes object oriented programming programming ur Eiffel PL av B Meyer Första OO-begreppen i språket Simula (1967), skapat av Ole-Johan Dahl och Kristen Nygaard: klasser, subklasser, attribut (data och procedurer), objekt som instanser, referenser mm, syntaktiskt Algol60-utvidgning Simulas begreppsapparat lever vidare i Smalltalk, C++ (Simula med C), Objective-C (Smalltalk med C), Python, Ada 9X, Java, DH2640 Grafik och Interaktionsprogrammering VT 2009 OO bra för WIMP-gränssnitt, byggda på Windows, Icons, Menus, Pointers. Detta insåg utvecklarna på Xerox Parc som 1972-80 skapade objektorienterade programmeringsmiljön Smalltalk för grafiska arbetsstationer (Alto 1972-): Allt är objekt, svagt svagt typat, browser där man kan se all kod i klasskategorier, återanvändning naturlig Trygve Renskaug (1978): MVC (Model-View-Controler) Visual Works (1985): Interface Builder Squeak (1995-): Vidareutvecklat Smalltalk Parallellt: Jean-Marie Hulots Interface Builder och programmeringsmiljö för NeXT machine (1985-90), finns nu till stora delar i Mac OSX-miljön. http://en.wikipedia.org/wiki/history_of_the_graphical_user_interface Douglas Engelbart, 1968: The Augmentation Of Human Intellect Project. Smalltalk 80, ser ut så nu också Gränssnittsbyggare med metaforen filtyta (canvas), mera nästa gång http://en.wikipedia.org/wiki/xerox_alto http://www.digibarn.com/collections/ software/alto/index.html Xerox Alto, 1972. 1

GrIP-vt2008-Föeläsning 6: OO & UI http://www.thocp.net/ hardware/xerox_star.htm http://en.wikipedia.org/wiki/ History_of_the_graphical_user_interface Xerox Star, 1981. http://www.guidebookgallery.org/screenshots/win101 Microsoft Windows 1.0, 1985: Kooperativ multitasking. Hoppa mellan DOS-program (ett aktivt åt gången). Cristian Bogdan 2008-02-05 http://en.wikipedia.org/ wiki/apple_macintosh http://en.wikipedia.org/wiki/ History_of_the_graphical_user_interface Apple Macintosh, 1984: Desktop-metafor (brett tillgänglig pga priset) Denna NexT var Tim Berners-Lees och världens först Web-server 1990 NeXT Step, programmeringsmiljö, också för PC NeXT-machine 1986-93: Fantastisk programmeringsmiljö men dåliga prestanda http://www.guidebookgallery.org/screenshots/win30 http://en.wikipedia.org/wiki/history_of_microsoft_windows Microsoft Windows 3.0, 1990: Microsoft Windows 95, 1995: "Gömde" MS-DOS (så att inte konkurrerande varianter kunde användas). 2

GrIP-vt2008-Föeläsning 6: OO & UI Cristian Bogdan 2008-02-05 http://archer.oregontel.com/brandon/vista/5219/3d.png Mac OSX 2001 (Cheetah) - 2007 (Leopard) Med Mac och NeXT en Unix-utvecklingsmiljö mm Microsoft Windows Vista, 2007: Bygger på Windows XP. Första operativsystemet som kräver 3D-grafikkort. Några andra WIMP-system Fordonsspel GEM Desktop (PC, Atari, m.fl.), 1984. X Window System (Unix), mitten av 80-talet. DESQview (PC), 1985. Workbench (Commodore Amiga), 1985. GEOS (PC, Commodore 64/128), 1986. OS/2 (PC), 1988. MacOS 5-9, 1988-1999. BeOS (BeBox, PC), 1991. Modern Linuxes: KDE, Gnome (X-based) Första version av fordon (bilar) Vi ska göra ett enkelt spel med olika sorters fordon. Vilka egenskaper har ett fordon? Position Orientering Hastighet Grafik / utseende Simulaversion av fordon (bilar) BEGIN CLASS Point2D (x, y); REAL x,y; ; CLASS Vehicle (position, orientation, speed); REF (Point2D) position; REAL orientation, speed; BEGIN REF (Point2D) PROCEDURE setposition(p); REF (Point2D) p; position :- p; PROCEDURE setorientation(angle); REAL angle; orientaton := angle; PROCEDURE setspeed(mps); REAL mps; speed := mps; END Vehicle; 3

Simulaversion av bilarna, forts Vehicle CLASS Car; PROCEDURE draw; BEGIN Rita röd bil (rektangel) från punkten position ; END draw; PROCEDURE update(dt); REAL dt; BEGIN position.x := position.x+dt*speed*cos(orientation); position.y := position.y+dt*speed*sin(orientation); END update; END Car; REF (Car) mycar, mycar2; REAL pi; pi := 3.141593; mycar :- NEW Car(NEW point2d(250,250),174*pi/180,20); mycar2 :- NEW Car(NEW point2d(250,250),0,40); WHILE TRUE DO BEGIN COMMENT Oändlig slinga ; mycar.update(0.01); mycar.draw(surf); mycar2.update(0.01); mycar2.draw(surf); END slinga; END program Fordonsspelet i Java (demas i Eclipse, källkod på kurswebben) class Vehicle { protected Point2D.Float position; protected float orientation; protected float speed; public Point2D.Float getposition(); public void setposition(point2d.float p); public float getorientation(); public void setorientation(float angle); public float getspeed(); public void setspeed(float mps); Dessutom importeras: import java.awt.geom.*;import javax.swing.*; Och finns källkod till public class CarGame public class Car extends Vehicle public class GameSurface extends JPanel public class AnimationSystem implements Runnable Fordon Klassnamn Data Metoder # = protected + = public - = private Fordonsspel Varje typ av fordon vet hur det ska rita ut sig självt Så vi låter Vehicle bli en abstrakt klass med en metod draw, som alla fordon måste implementera The actual draw method of a Vehicle object is found at runtime (polymorphism) Objektorientering i allmänhet Objektorientering i allmänhet Ett objekt är en instans av en klass, som beskriver "lådor, där man samlar Data Metoder som (oftast) manipulerar dessa data En princip som stöds av objektorientering är att data blir gömt för "utomstående" klasser encapsulation Undantaget är subklasser till basklassen, dessa kan eventuellt få accessa data direkt Man kan allstå definiera en hierarki av klasser och subklasser. 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. 4

Objektorientering i allmänhet Överlagring 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. - inheritance En instans av subklassen innehåller alltså alla data och alla metoder i basklassen plus eventuella data och metoder i subklassen. 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). 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.4f); a.f("hello"); Överlagring Konstruktorer och destruktorer En subklass kan ändra beteendet hos en metod. Det är också en form av överlagring (overriding, see polymorphism). 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 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. public class MyClass { private int n; public MyClass(int number) { n = number; public int getnumber() { return n; MyClass c = new MyClass(10); int n = c.getnumber(); Gömda klassmedlemmar Abstrakta klasser Man använder ordet super för att hänvisa till överordnade klassens uppsättning metoder och variabler. Det är det enda 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; 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. Det bästa sättet att åstadkomma det är med 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. I Java kallas abstrakta klasser för interfaces. 5

Abstract classes and Polymorphism An instance of MyClass will be both a MyClass and a MyInterface Some methods may require a MyClass parameter, some a MyInterface parameter, instances of MyClass can be passed to both In Java A class can inherit (extend) one class, and implement any number of interfaces Therefore a Java object can be of many types at the same time The declared type (MyClass) The inherited type (if any) and the types it inherits The implemented abstract classes (interfaces) The abstract classes implemented by the inherited type Object Orientation summary Encapsulation: Keep specific data and code only for object internal use, do not expose it to the outside world Inheritance: Derive a class from a conceptually more general one Polymorphism: An object is of multiple types, and can (re)define behavior declared by the respective types All improve code reusability and reliability but OO: No silver bullet Fred Brooks (1986) It is difficult to get a OO design (classes and their relations) right from the beginning Refactoring is standard practice by now, restructure the code without changing overall behavior as we learn more In fact, any domain can be modeled in a large number of ways, all correct, depending on our priorities, concerns (see frameworks later) Class is maybe not the suitable abstraction Pattern: a re-occuring problem and an OO design that addresses it Ibland måste man omtolka en variabel (type casting). Vissa omtolkningar är inte tillåtna - i så fall varnar kompilatorn. Men ibland kan den inte avgöra om man gjort rätt, så var försiktig. Downcasting from supertype to a subtype Top types: Object, always require downcasting A solution: generics Type casting 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! Meddelanden Inre klasser I java-(och Smalltalk-)sammanhang brukar man säga att klasser/instanser 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); 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. Anonymous inner classes, redefine methods on the spot public class MyClass { private int n; public class MyInnerClass { public int f() { n = 10; MyInnerClass c; public void g() { c.f(); MyClass x= new MyClass(){ public void g(){ ; 6

Final Instans- och klassvariabler 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; Det finns instansvariabler och klassvariabler. Instansvariabler har en egen "kopia" i varje instans. Klassvariablerna finns det bara en av. Man använder ordet static för att ange att en variabel eller metod är en klassvariabel. public class MyClass { 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; Garbage collection Arrays (vektorer och matriser) I Java behöver man inte säga till när objekt ska frigö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. public class MyClass { MyClass c = new MyClass(); c = null; 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]; Strängar Paket 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" 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 access is default: classes have access to each other s members unless they are declared private package mypackage; import java.swing.*; public class Base { 7

Utökat bilspel med styrmöjligheter Ny Vehicle-klass steering force Vi utökar vårt spel. velocity orientation Vi behöver en bättre modell för hur bilarna ska flyttas. Vi vill kunna styra (åtminstone) en av bilarna. side Se vidare fullständiga programmet på kurswebplatsen. 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 överallt i industrin. Ger dock mycket begränsad info om hur användargränssnittet 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. One or more scenarios may be generated from a use case UML: Klassdiagram UML: Interaktionsdiagram Visar hur meddelanden skickas mellan klassinstanser i systemet. Ger en översikt över processer i systemet. 8

UML: Tillståndsdiagram Visar hur systemet går mellan olika tillstånd. UML: Aktivitetsdiagram Liknar tillståndsdiagrammet men fokuserar på aktivitet istället. En aktivitet behöver inte vara detsamma som ett tillstånd. Kan motsvara funktioner som användaren aktiverar. UML: Fysikdiagram Används för att visa relationen mellan hårdoch mjukvara i systemet. Kan också användas för att visa hur systemet är distribuerat över olika maskiner, t.ex. i ett nätverk. Fönstersystem Applikation Interaktionstoolkit Händelsehanterare och grafiktoolkit Operativsystem Hårdvara Frameworks 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" 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. Swing vs IBM/Eclipse SWT Microsofts motsvarighet heter MFC (som nu är på väg att ersättas av.net). MFC vs Borland OWL Koda med klassbibliotek Min kod Kod i klassbibliotek Frameworks Koda med framework Framework Min kod, brukar kallas för callbacks. Inversion of control (see Spring framework) Hollywood principle (we ll call you) Template method design pattern 9

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. It is often suitable that the subclass is anonymous 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(); 10