Objektorientering och händelsebaserad programmering. Gustav Taxén

Relevanta dokument
Objektorientering i allmänhet

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

Objektorientering (OO)

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

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

GUI-programmering. Gustav Taxén

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

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

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

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

Lösningar till tentamen i EDAF25

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

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

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

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

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

Laboration 1 - Grunderna för OOP i Java

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

Lösningar till tentamen i EDAF25

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

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

Konstruktion av klasser med klasser

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

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

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

Klasshierarkier - repetition

OOP Objekt-orienterad programmering

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

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

TENTAMEN OOP

Objektorienterad Programmering (TDDC77)

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

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

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

JAVA Mer om klasser och objektorientering

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

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

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

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

Laboration 3 GUI-programmering

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

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

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.

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

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

Objektorienterad Programmering (TDDC77)

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

TENTAMEN OOP

Imperativ programmering. Föreläsning 4

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

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

Lösningar för tenta 3 DAT043,

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

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

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

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

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

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

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

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

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

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

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

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.

TENTAMEN OOP

OOP Objekt-orienterad programmering

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

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Modeller, Objekt och Klasser

Tentamen i Objektorienterad modellering och design

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

Tentamen i Objektorienterad programmering

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

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

OOP Objekt-orienterad programmering

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

Tentamen i Objektorienterad modellering och diskreta strukturer

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

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

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

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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Tentamen i Objektorienterad modellering och design Helsingborg

Föreläsning 5-6 Innehåll

Transkript:

Objektorientering och händelsebaserad programmering Gustav Taxén gustavt@csc.kth.se 2D1640 Grafik och Interaktionsprogrammering VT 2007

Racingspel Vi skagöraettenkeltracingspel med olika sorters fordon. Vilka egenskaper har ett fordon? Position Orientering Hastighet Grafik / utseende

Racingspel 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);

Racingspel Klassnamn Data Metoder # = protected + = public - = private

Racingspel 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

Objektorientering i allmänhet 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

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.

Objektorientering i allmänhet 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 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.4f); a.f("hello");

Överlagring 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

Konstruktorer och destruktorer 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 Man använder nder ordet super för att hänvisa till superklassens 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;

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. 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.

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.

Final-klasser 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;

Meddelanden 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);

Instans- och klassvariabler 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 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;

Pass by value vs. pass by reference 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 class MyClass { 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 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. public class MyClass {... MyClass c = new MyClass(); c = null;

Type casting 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 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. public class MyClass { private int n; public class MyInnerClass { public int f() { n = 10; MyInnerClass c; public void g() { c.f();

Arrays 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 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 {...

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. http://pigseye.kennesaw.edu/~dbraun/csis4650/a&d/uml_tutorial/index.htm

UML: Klassdiagram http://pigseye.kennesaw.edu/~dbraun/csis4650/a&d/uml_tutorial/index.htm

UML: Interaktionsdiagram Visar hur meddealanden skickas mellan klassinstanser i systemet. Ger en översikt över processer i systemet. http://pigseye.kennesaw.edu/~dbraun/csis4650/a&d/uml_tutorial/index.htm

UML: Tillståndsdiagram Visar hur systemet går mellan olika tillstånd nd. http://pigseye.kennesaw.edu/~dbraun/csis4650/a&d/uml_tutorial/index.htm

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. http://pigseye.kennesaw.edu/~dbraun/csis4650/a&d/uml_tutorial/index.htm

UML: Fysikdiagram 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. http://pigseye.kennesaw.edu/~dbraun/csis4650/a&d/uml_tutorial/index.htm

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" 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 Koda med framework Min kod Framework Kod i klassbibliotek 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();

Inmatningstyper 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

Inmatningstyper: : Events 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

Design patterns 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

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. Ändra roder Controller Joystick med knappar Hämta data Modifiera vyn 3D-vy View 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 Control-komponenten skickar förändringar uppåt i hierarkin.

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.

Observer

Observer

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 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.

Events i Java 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);

...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 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);

...eller med anonym subklass 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);