Grafik-Programmierung
|
|
- Gesche Fuhrmann
- vor 7 Jahren
- Abrufe
Transkript
1 Grafik-Programmierung In dieser Übung fahren wir mit den Grundlagen der Grafikprogrammierung aus Übung 6 fort und wenden dies auf Spiele an. Aufgabe 1: Zeichenbare Game-Objekte Zunächst definieren wir ein Interface PaintableGameObject mit der Methode paintcomponent. Unsere Spielobjekte (vom Typ GameObject) sollen dieses Interface implementieren und dadurch grafisch darstellbar sein. Die eigentliche Darstellung erfolgt jeweils spezifisch für jedes Spielobjekt. In unserem Spiel brauchen wir uns dann nicht mehr weiter darum zu kümmern, wie die Spielobjekte gezeichnet werden, da aufgrund der dynamischen Bindung jedes Objekt weiß, wie es sich selbst zeichnen soll. Wir erweitern danach das Interface GraphicsObject um dieses Interface, damit alle Spielobjekte gezeichnet werden können. Da durch diese Interfaces-Erweiterung die implementierenden Klassen abstrakt geworden sind, müssen wir noch die Methode paintcomponent jeweils spezifisch implementieren. Hinweis: Falls Sie Ihre Lösung von Übung 4 nicht vollständig realisiert haben, können Sie von der Webseite der Veranstaltung eine Beispielvorgabe der bereits in den Übungen realisierten Interfaces und Klassen herunterladen. a) Erstellen Sie ein Interface PaintableGameObject im Paket games.basic.gameobjects.interfaces. Diese soll die Methode public void paintcomponent(graphics g) bereitstellen. b) Leiten Sie das Interface games.basic.gameobjects.interfaces. GameObject (siehe Übung 4) neben SimpleGameObject auch von PaintableGameObject ab. c) Passen Sie dann die Klassen RectangularGameObject und CircularGameObject aus dem Paket games.basic.gameobjects entsprechend an, indem Sie dort jeweils die Methode paintcomponent implementieren. S. 1 / 14
2 Dabei soll die Farbe des Rechteckes bzw. Kreises jeweils per Attribut wählbar sein, ebenso ob die Figuren ausgefüllt sein sollen oder nicht. Hinweis: Zum Zeichnen eines ausgefüllten Rechteckes bzw. Kreises können Sie die Methoden fillrect(x, y, width, height) bzw. filloval(x, y, width, height) aus der Klasse java.awt.graphics verwenden (siehe während drawrect bzw. drawoval jeweils nur den Rahmen der Figuren zeichnet. Hinweis: Zum Festlegen der Strichdicke können Sie die Methode setstroke(new BasicStroke( <<Strichdicke>> ) aus der Klasse Graphics2D verwenden. d) Erstellen Sie eine (analog zu RectangularGameObject) eine von AbstractGameObject abgeleitete Klasse CrossGameObject, welche ein Kreuz (d.h. 2 Linien) darstellt. games.basic.gameobjects.interfaces.paintablegameobject.java: package games.basic.gameobjects.interfaces; import java.awt.graphics; public interface PaintableGameObject { public abstract void paintcomponent(graphics g); games.basic.gameobjects.interfaces.gameobject.java: package games.basic.gameobjects.interfaces; public interface GameObject extends SimpleGameObject, PaintableGameObject { public abstract boolean isleftof(gameobject other); public abstract boolean isrightof(gameobject other); public abstract boolean isaboveof(gameobject other); public abstract boolean isbelowof(gameobject other); public abstract boolean touches(gameobject other); S. 2 / 14
3 games.basic.gameobjects.rectangulargameobject.java: package games.basic.gameobjects; import java.awt.basicstroke; import java.awt.color; import java.awt.graphics; import java.awt.graphics2d; import java.awt.stroke; import games.basic.position.interfaces.positionable; public class RectangularGameObject extends AbstractGameObject { private int width; private int height; private Color color; boolean filled; final static float STROKE = 3.0f; // Strichdicke // Konstruktor public RectangularGameObject(Positionable pos, int width, int height, Color color, boolean filled) { super(pos); // Aufruf: AbstractGameObject(pos); this.width = width; this.height = height; this.color = color; this.filled = filled; public int getwidth() { return this.width; public int getheight() { return this.height; public void paintcomponent(graphics g) { Color oldcolor = g.getcolor(); // alte Farbeeinstellung sichern // Rechteck zeichnen g.setcolor(color); if (filled) { g.fillrect( getpos().getx(), getpos().gety(), width, height); else { Graphics2D g2d = (Graphics2D) g; Stroke oldstroke = g2d.getstroke(); // alte Strichdicke sichern g2d.setstroke( new BasicStroke(STROKE) ); g.drawrect( getpos().getx(), getpos().gety(), width, height); g2d.setstroke( oldstroke ); // Strichdicke wiederherstellen S. 3 / 14
4 g.setcolor(oldcolor); // Farbe wiederherstellen public String tostring() { // verwende tostring-methode aus Positionable return ("pos = " + this.getpos() + ", size = " + this.getwidth() + " x " + this.getheight()+ ")"); public boolean equals(object other) { if (other == null!(other instanceof RectangularGameObject)) return false; RectangularGameObject otherrect = (RectangularGameObject)other; Positionable thispos = this.getpos(); // Beachte: this.pos funktioniert nicht, da Attribut pos // in Oberklasse private ist! // --> getpos() funktioniert, egal ob // Attribut pos hier oder in Oberklasse // definiert ist Positionable otherpos = otherrect.getpos(); return // vergleiche aktuelle Position // verwende equals-methode von Positionable thispos.equals( otherpos ) // vergleiche Breite/Höhe && this.getwidth() == otherrect.getwidth() && this.getheight() == otherrect.getheight() && this.color == otherrect.color && this.filled == otherrect.filled; games.basic.gameobjects.circulargameobject.java: package games.basic.gameobjects; import java.awt.basicstroke; import java.awt.color; import java.awt.graphics; import java.awt.graphics2d; import java.awt.stroke; import games.basic.position.interfaces.positionable; public class CircularGameObject extends AbstractGameObject { private int radius; private Color color; private boolean filled; final static float STROKE = 3.0f; // Strichdicke // Konstruktor public CircularGameObject(Positionable pos, int radius, Color color, boolean filled) { super(pos); // Aufruf: AbstractGameObject(pos); S. 4 / 14
5 this.radius = radius; this.color = color; this.filled = filled; public int getwidth() { return 2 * this.radius; public int getheight() { return 2 * this.radius; public void paintcomponent(graphics g) { Color oldcolor = g.getcolor(); // alte Farbeeinstellung sichern // Kreis zeichnen g.setcolor(color); if (filled) { g.filloval( getpos().getx(), getpos().gety(), 2 * radius, 2 * radius); else { Graphics2D g2d = (Graphics2D) g; Stroke oldstroke = g2d.getstroke(); // alte Strichdicke sichern g2d.setstroke( new BasicStroke(STROKE) ); g.drawoval( getpos().getx(), getpos().gety(), 2 * radius, 2 * radius); g2d.setstroke( oldstroke ); // Strichdicke wiederherstellen g.setcolor(oldcolor); // Farbe wiederherstellen public String tostring() { // verwende tostring-methode aus Positionable return ("pos = " + this.getpos() + ", radius = " + this.radius + ")"); public boolean equals(object other) { if (other == null!(other instanceof CircularGameObject)) return false; CircularGameObject othercirc = (CircularGameObject)other; // Beachte: this.pos funktioniert nicht, da Attribut pos // in Oberklasse private ist! // --> getpos() funktioniert, egal ob // Attribut pos hier oder in Oberklasse // definiert ist Positionable thispos = this.getpos(); Positionable otherpos = othercirc.getpos(); S. 5 / 14
6 return // vergleiche aktuelle Position // verwende equals-methode von Positionable thispos.equals( otherpos ) // vergleiche Breite/Höhe && this.radius == othercirc.radius && this.color == othercirc.color && this.filled == othercirc.filled; games.basic.gameobjects.crossgameobject.java: package games.basic.gameobjects; import games.basic.position.interfaces.positionable; import java.awt.basicstroke; import java.awt.color; import java.awt.graphics; import java.awt.graphics2d; import java.awt.stroke; public class CrossGameObject extends AbstractGameObject { private int width; private int height; private Color color; boolean filled; final static float STROKE = 3.0f; // Strichdicke public CrossGameObject(Positionable pos, int width, int height, Color color, boolean filled) { super(pos); this.width = width; this.height = height; this.color = color; this.filled = filled; public int getwidth() { return this.width; public int getheight() { return this.height; public void paintcomponent(graphics g) { Color oldcolor = g.getcolor(); // alte Farbeeinstellung sichern // Kreuz zeichnen g.setcolor(color); if (filled) { S. 6 / 14
7 g.fillrect( getpos().getx(), getpos().gety(), width, height); else { Graphics2D g2d = (Graphics2D) g; Stroke oldstroke = g2d.getstroke(); // alte Strichdicke sichern g2d.setstroke( new BasicStroke(STROKE) ); g.drawline( getpos().getx(), getpos().gety(), getpos().getx() + getwidth(), getpos().gety() + getheight()); g.drawline( getpos().getx() + getwidth(), getpos().gety(), getpos().getx(), getpos().gety() + getheight()); g2d.setstroke( oldstroke ); // Strichdicke wiederherstellen g.setcolor(oldcolor); // Farbe wiederherstellen public String tostring() { return ("pos = (" + this.getpos().getx() + ", " + this.getpos().gety() + ", size = " + this.getwidth() + " x " + this.getheight()+ ")"); public boolean equals(object other) { if (other == null!(other instanceof CrossGameObject)) return false; CrossGameObject othercross = (CrossGameObject)other; Positionable thispos = this.getpos(); Positionable otherpos = othercross.getpos(); return (thispos.getx() == otherpos.getx()) && (thispos.gety() == otherpos.gety()) && this.getwidth() == othercross.getwidth() && this.getheight() == othercross.getheight() && this.color == othercross.color && this.filled == othercross.filled; Aufgabe 2: Grafik für Tic Tac Toe Tic Tac Toe (auch Drei gewinnt oder Kreis und Kreuz ) ist ein Spiel für zwei Personen. Dabei machen auf einem 3 3 Felder großen Spielfeld die beiden Spieler abwechselnd ihre Zeichen (ein Spieler Kreuze, der andere Kreise). Der Spieler, der als erstes drei seiner Zeichen in eine Reihe, Spalte oder eine der beiden Hauptdiagonalen setzen kann, gewinnt. [wikipedia] S. 7 / 14
8 Implementieren Sie die grafische Darstellung für das Spiel Tic Tac Toe. Dabei sollen geeignete Spielobjekte jeweils (rote) Kreuze sowie (blaue) Kreise zur Darstellung der Züge der beiden Gegner verwendet werden. a) Erstellen Sie eine von JPanel abgeleitete Klasse TicPanel im Paket games.examples.tictactoe. Übergeben Sie der Klasse eine Liste von darzustellenden Spielobjekten, d.h. von Objekten vom Typ games.basic.gameobjects.interfaces.gameobject. Hinweis: Für Listen bietet Java u.a. die generische Klasse ArrayList (java.util.arraylist<gameobject>, siehe Diese besitzt u.a. die folgenden für diese Aufgabe relevanten Funktionen: new ArrayList<GameObject>() erzeugt eine leere Liste von GameObject-Objekten. boolean add(gameobject elem) fügt ein Element zur Liste hinzu for (GameObject elem : liste) { iteriert über alle Elemente einer Liste von GameObject-Elementen. Weitere wichtige Methoden aus ArrayList sind u.a. GameObject get(int index) liest das Element an Position index aus int size() liefert die Anzahl der Elemente in der Liste boolean remove(gameobject elem) löscht das Element aus der Liste, sofern es enthalten ist. Überschreiben Sie dann die Methode public void paintcomponent(graphics g) und zeichne Sie dort zunächst die Trennlinen für das 3 x 3-Feld. Zeichnen Sie ferner in das übergebene Graphics-Objekt g alle darzustellenden S. 8 / 14
9 Spielobjekte (aus der ArrayList). b) Erzeugen Sie schließlich (in einer Klasse games.examples.tictactoe.tictactoe) ein JFrame-Fenster, fügen Sie ein Objekt der Klasse TicPanel zu diesem JFrame hinzu und zeigen Sie das Fenster auf dem Bildschirm an. c) Erzeugen Sie zum Testen eine Liste von Spielobjekten (Kreuze und Kreise), welche Sie sich auf dem Panel darstellen lassen. Hinweis: Zum Neuzeichnen des Fensters können Sie die Methode frame.repaint() aufrufen. TicTacToe main(string[] args) { Jframe frame = TicPanel panel = new TicPanel( objliste); TicPanel objliste : ArrayList<GameObject> +paintcomponent(graphics g) GameObject +paintcomponent(graphics g) AbstractGameObject -pos: Positionable CrossGameObject -width, height: int -color: java.awt.color +paintcomponent(graphics g) CircularGameObject -radius: int -color: java.awt.color -filled: boolean +paintcomponent(graphics g) d) Nicht ausgelastet? Lassen Sie beim Zeichnen der Kreise und Kreuze einen Abstand zum Rand des jeweiligen Feldes, d.h. zu den Rahmenlinien des 3x3-Feldes. S. 9 / 14
10 games.examples.tictactoe.cross.java: package games.examples.tictactoe; import java.awt.color; import games.basic.gameobjects.crossgameobject; import games.basic.position.interfaces.positionable; import games.basic.position.position; public class Cross extends CrossGameObject { public static final Color CROSS_COLOR = Color.red; private static final int GAP = TicTacToe.GAP; public Cross(int x, int y, int size) { super(new Position(x+GAP, y+gap), size - GAP*2, size - GAP*2, CROSS_COLOR, false); games.examples.tictactoe.dot.java: package games.examples.tictactoe; import games.basic.gameobjects.circulargameobject; import games.basic.position.interfaces.positionable; import games.basic.position.position; import java.awt.color; import java.awt.graphics; public class Dot extends CircularGameObject { public static final Color CIRC_COLOR = Color.blue; private static final int GAP = TicTacToe.GAP; public Dot(int x, int y, int size) { super(new Position(x+GAP, y+gap), size - GAP*2, CIRC_COLOR, false); games.examples.tictactoe.ticpanel.java: package games.examples.tictactoe; import java.util.arraylist; import javax.swing.jpanel; S. 10 / 14
11 import java.awt.color; import java.awt.graphics; import games.basic.gameobjects.interfaces.*; class TicPanel extends JPanel { private ArrayList<GameObject> components; private int componentsize; public TicPanel(int componentsize, ArrayList<GameObject> components) { this.componentsize = componentsize; this.components = components; public void paintcomponent(graphics g) { // Zeichne Trennlinien für 3x3-Feld g.setcolor(color.black); g.drawline(componentsize, 0, componentsize, componentsize * 3); g.drawline(componentsize * 2, 0, componentsize * 2, componentsize * 3); g.drawline(0, componentsize, componentsize * 3, componentsize); g.drawline(0, componentsize * 2, componentsize * 3, componentsize * 2); // Zeichne Komponenten for (GameObject component : components) { component.paintcomponent(g); // class TicPanel games.examples.tictactoe.tictactoe.java: package games.examples.tictactoe; import games.basic.gameobjects.interfaces.gameobject; import java.awt.color; import java.awt.graphics; import java.util.arraylist; import java.util.scanner; import javax.swing.jframe; import javax.swing.jpanel; public class TicTacToe { public static final int GAP = 5; private ArrayList<GameObject> components = new ArrayList<GameObject>(); private int componentsize = 60; private int xframesize = componentsize*3 + 10; S. 11 / 14
12 private int yframesize = componentsize*3 + 30; JFrame frame; public static void main(string[] args) { TicTacToe prog = new TicTacToe(); prog.run(); public void run() { frame = new JFrame("Tic Tac Toe"); frame.setdefaultcloseoperation(jframe.exit_on_close); TicPanel panel = new TicPanel(); frame.add( panel ); frame.setsize(xframesize, yframesize); frame.setvisible(true); play(); public void play() { Dot meinzug1 = new Dot(0, 0, componentsize); Cross gegnerzug1 = new Cross(componentSize, componentsize, componentsize); components.add(meinzug1); components.add(gegnerzug1); frame.repaint(); Dot meinzug2 = new Dot(0, componentsize*2, componentsize); Cross gegnerzug2 = new Cross(componentSize*2, componentsize*2, componentsize); components.add(meinzug2); components.add(gegnerzug2); frame.repaint(); Scanner scanner = new Scanner(System.in); System.out.print("x = "); int x = scanner.nextint(); System.out.print("y = "); int y = scanner.nextint(); Dot meinzug = new Dot(componentSize * x, componentsize * y, componentsize); components.add(meinzug); frame.repaint(); class TicPanel extends JPanel { public void paintcomponent(graphics g) { // Zeichne Trennlinien für 3x3-Feld g.setcolor(color.black); S. 12 / 14
13 g.drawline(componentsize, 0, componentsize, componentsize * 3); g.drawline(componentsize * 2, 0, componentsize * 2, componentsize * 3); g.drawline(0, componentsize, componentsize * 3, componentsize); g.drawline(0, componentsize * 2, componentsize * 3, componentsize * 2); // Zeichne Komponenten for (GameObject component : components) { component.paintcomponent(g); // inner class TicPanel Zusatz-Aufgabe 3: Spielsteuerung für Tic Tac Toe Erweitern Sie die Klasse TicTacToe um die Spielsteuerung für das Spiel TicTacToe. Dazu können Sie von Tastatur jeweils das Feld einlesen und abwechselnd (für jeden Spieler) Kreuze bzw. Punkte in dieses Feld setzen. Wer alle Felder einer Zeile, Spalte oder Diagonale besetzt hat, hat das Spiel gewonnen. S. 13 / 14
14 Zusatz-Aufgabe 4 (für Java-Experten): Java-Rätsel Was gibt das folgende Java-Programm aus und warum verhält es sich so seltsam? package click; public class CodeTalk { public void doit() { printmessage(); void printmessage() { System.out.println("Click"); package hack; import click.codetalk; public class TypeIt { private static class ClickIt extends CodeTalk { void printmessage() { System.out.println("Hack"); public static void main(string[] args) { ClickIt clickit = new ClickIt(); clickit.doit(); Ausgabe: Click Lösung: Die Methode printmessage ist nicht public, sondern (ohne expliziten Sichtbarkeitsmodifizierer) nur innerhalb des jeweiligen Paketes sichtbar. Die Klassen CodeTalk und dessen Unterklasse ClickIt (als innere Klasse von TypeIt) liegen jedoch in verschiedenen Paketen (click bzw. hack). Folglich ist die Methode printmessage in der Klasse ClickIt nicht überschrieben (da die geerbte Methode nicht sichtbar ist, handelt es sich hier aus Sicht des Aufrufers um eine neue Methode!). Die Methode doit verwendet deshalb die Methode printmessage aus CodeTalk (mit der Ausgabe Click ) und nicht die Methode aus der Unterklasse ClickIt (mit der Ausgabe Hack ). Ausgabe: Click (und nicht wie vielleicht vermutet Hack) S. 14 / 14
Grafik-Programmierung
Grafik-Programmierung In dieser Übung beschäftigen wir uns zunächst mit elementaren Grundlagen der Grafikprogrammierung. In der nächsten Übung werden wir dies auf Spiele anwenden. Aufgabe 1: Einfache Grafik:
MehrAbstrakte Klassen, Interfaces und Pakete
Abstrakte Klassen, Interfaces und Pakete Vorbemerkung: Wir wollen allmählich die Basis für die Entwicklung (einfacher) Spiele in Java schaffen. Dazu erstellen wir in dieser Übung einige Schnittstellen
MehrEreignis-Bearbeitung und Threads
Bachelor Informatik SS 2015 Übung 8 Beispiellösung Ereignis-Bearbeitung und Threads Aufgabe 1: Ereignis-Bearbeitung und Layout-Manager a) Layouten Sie ein Fenster mit einem Zeichenpanel (für die Spieldarstellung)
MehrExceptions und Zugriffsmodifikatoren
Exceptions und Zugriffsmodifikatoren Aufgabe 1: Exceptions import java.awt.awtexception; public class ExceptionTest { public static void main(string[] args) { System.out.println("Anfang main"); ExceptionTest
MehrExceptions, Pakete und Zugriffsmodifikatoren
Exceptions, Pakete und Zugriffsmodifikatoren Aufgabe 1: Exceptions import java.awt.awtexception; public class ExceptionTest { public static void main(string[] args) { System.out.println("Anfang main");
MehrGrafik Programmierung
Grafik Programmierung In dieser Übung beschäftigen wir uns zunächst mit elementaren Grundlagen der Grafikprogrammierung. In der nächsten Übung werden wir dies auf Spiele anwenden. Aufgabe 1: Einfache Grafik:
MehrMusterübung 09: Vererbung und Dynamische Bindung
Musterübung 09: Vererbung und Dynamische Bindung Abgabetermin: TT.MM.JJJJ Name: Matrikelnummer: Gruppe: G1 (Prähofer) G2 (Prähofer) G3 (Hofer) G4 (Angerer) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben
MehrUniversität Karlsruhe (TH)
Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 Kapitel X Zeichnen mit Java2D SWT I Sommersemester 2009 Prof. Walter F. Tichy David Meder Literatur Informationen zu Java2D finden Sie in
MehrGrundlagen der Objektorientierung
Grundlagen der Objektorientierung Klassen, Attribute, Methoden Kapselung und Konstruktoren Vererbung Packages Interfaces und Adapterklassen 04.06.2008 Marcel Wieczorek 14 Klassen, Attribute, Methoden package
MehrKapitel X - Zeichnen mit Java2D
Kapitel X - Zeichnen mit Java2D SWT I Sommersemester 2010 Walter F. Tichy, Andreas Höfer, Korbinian Molitorisz IPD Tichy, Fakultät für Informatik KIT die Kooperation von Forschungszentrum Karlsruhe GmbH
Mehr12 Abstrakte Klassen, finale Klassen und Interfaces
12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,
MehrProgrammieren in Java
Einführung in die Objektorientierung Teil 4 Interfaces, innere Klassen und Polymorphie 2 Vererbung im Klassendiagram (Wiederholung) Vererbung repräsentiert eine ist ein Beziehung zwischen Klassen Ware
MehrObjektorientierte Programmierung
Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Übungsblatt 3 Lösungsvorschlag Objektorientierte Programmierung 08. 05. 2006 Lösung 8 (Java und UML-Klassendiagramm
Mehr16 Zeichnen in Swing-Komponenten , Prof. Dr. D. Ratz
16 Zeichnen in Swing-Komponenten 2009 2014, Prof. Dr. D. Ratz 16.1 Grafische Darstellung von Komponenten Der Repaint-Manager sorgt für die grafische Darstellung der Komponenten Aktivierung beim erstmaligen
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 10: Mehr zur Vererbung und abstrakte Klassen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Mehr zur Vererbung Methoden vererben und überschreiben
MehrÜbung 09: Vererbung und Dynamische Bindung
Übung 09: Vererbung und Dynamische Bindung Abgabetermin: TT.MM.JJJJ Name: Matrikelnummer: Gruppe: G1 (Prähofer) G2 (Prähofer) G3 (Wolfinger) G4 (Wolfinger) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben
MehrJava Schulung (Java 2 Java Development Kit 5 / 6)
2. Grundlagen der Objektorientierung 2.1 Klassen, Attribute, Methoden Klassen Eine Klasse beschreibt als Bauplan Gemeinsamkeiten einer Menge von Objekten ist also ein Modell, auf dessen Basis Objekte erstellt
Mehr11. GUI-Programmierung mit SWING Überblick
11. GUI-Programmierung mit SWING Überblick 11.1 Einführung 11.2 Einfache Swing Komponenten 11.3 Ereignisbehandlung und Adapterklassen 11.4 Zeichnen 11.5 Dialoge 11.6 Layout Manager 11.7 Komplexere Swing
MehrNeben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter
Kapitel 1 Der vierte Tag 1.1 Vererbung Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Sprachen. Unter Vererbung versteht man die Möglichkeit, Eigenschaften vorhandener
MehrDie abstrakte Klasse Expression:
Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const 501 Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const Leider (zum Glück?) lässt sich nicht die
Mehr!!!" # $ # %&' $ ' ( )
!!!" #$ #%&'$' () *)+)'& *',- import javax.swing.* ) import javax.swing.*; public class SimpleFrameTest { public static void main(string[] args) { SimpleFrame frame = new SimpleFrame(); )) )-)- ).'&-)
MehrKapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz
Kapitel 13 Abstrakte Methoden und Interfaces 13. Abstrakte Klassen und Interfaces 1. Abstrakte Klassen 2. Interfaces und Mehrfachvererbung Folie 12.2 Abstrakte Methoden und Klassen Manchmal macht es überhaupt
MehrInstitut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 17. Juli 2015 Hinweise: Klausurtermine: Programmieren II Übungsklausur Programmieren I: 7. September
Mehr4. Vererbung Die Klasse Object. Die Klasse Object
4. Vererbung Die Klasse Object Die Klasse Object Alle Klassen ohne explizit deklarierte Superklasse haben die Klasse Object als Superklasse. Object gehört zum Paket java.lang. Object verfügt über einige
Mehr'($)*'+ $, *$+*$'- $..$+/, 01.2$, 2*$0, - $'($)*'+ $, *$+*$
!"# $ % & # ... 4 "... 5 '($)*'+ $, *$+*$'- $..$+/, 01.2$, 2*$0, - $'($)*'+ $, *$+*$ 3+'0+1$+/, 0... 5 "" $0+4, - $*$2*'1/25 1.... 6 " 4$+26 *... 8 Objektorientierung... 8 Kontrollstrukturen... 9 Projekt...
Mehr1. Laboraufgabe. Grafische Nutzerschnittstellen. Studiengang I / IEA / SAT
1. Laboraufgabe Grafische Nutzerschnittstellen Studiengang I / IEA / SAT FB Automatisierung und Informatik: Grafische Nutzerschnittstellen 1 1. Laboraufgabe: Die Aufgabe lautet, ein Javaprogramm zu schreiben,
MehrProgrammieren in Java
Einführung in die Objektorientierung Teil 4 Interfaces, Polymorphie und innere Klassen 2 Vererbung im Klassendiagramm (Wiederholung) Vererbung repräsentiert eine ist ein Beziehung zwischen Klassen Object
Mehr// compiliert, aber Programmabbruch zur Laufzeit: einesuppe = ((EßbarerPilz)einPilz).kochen();
Typecast class Pilz void suchen() void sammeln() class EßbarerPilz extends Pilz Suppe kochen() Suppe einesuppe = new Suppe(); return einesuppe; class GiftPilz extends Pilz void entsorgen() class Suppe
MehrAlgorithmen und Datenstrukturen 07
(7. Juni 2012) 1 Besprechung Blatt 6 Fragen 2 Referenzen Referenzsemantik 3 Vererbung Allgemein abstract Interfaces Vererbung in UML 4 Vorbereitung Blatt 7 Anmerkungen Fragen Fragen zu Blatt 6? Referenzsemantik
MehrKonzepte objektorientierter Programmierung
Konzepte objektorientierter Programmierung Objekte Klassen Nachrichten Kapselung Einführung Vererbung heute! Konzepte objektorientierter Programmierung Was ist ein Objekt? Was ist eine Klasse? Was sind
MehrGraphische Nutzerschnittstellen
Graphische Nutzerschnittstellen Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm Hochschule Harz FB Automatisierung und Informatik mwilhelm@hs-harz.de Raum 2.202 Tel. 03943 / 659 338 1 Inhalt 1. Einführung,
MehrThreads In dieser Übung beschäftigen wir uns mit der Realisierung von Threads in Java.
Threads In dieser Übung beschäftigen wir uns mit der Realisierung von Threads in Java. Aufgabe 1: Erzeugen und Starten von Threads a) Sei BankKunde eine von einer Klasse Kunde abgeleitete Klasse. Erweitern
MehrObjektorientierte Programmierung Studiengang Medieninformatik
Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 5 12.04.2017 Was bisher geschah... Objektorientierte Programmierung Klassen und Objekte, Attribute
MehrInstitut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke
Institut für Programmierung und Reaktive Systeme Java 7 Markus Reschke 14.10.2014 Vererbung in Java Vererbung ermöglicht es, Klassen zu spezialisieren Wiederverwendung vorhandener Klassen Kindsklasse erhält
MehrGraphische Nutzerschnittstellen
Graphische Nutzerschnittstellen Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm Hochschule Harz FB Automatisierung und Informatik mwilhelm@hs-harz.de Raum 2.202 Tel. 03943 / 659 338 1 Inhalt 1. Einführung,
MehrInformatik II Übung 6
Informatik II Übung 6 Gruppe 2 Carina Fuss cfuss@student.ethz.ch 11.4.2018 Carina Fuss 11.4.2018 1 Übung 6 Nachbesprechung Übung 5 Objektorientierung Vererbung, Polymorphie, abstrakte Klassen, Interfaces,
MehrSchlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:
Musterlösung Übung 7 Aufgabe 1 Sehen wir uns zu allererst das gegebene Forth Programm an: 0 3 new - list constant list1 list1 5 new - list constant list2 list1 6 new - list constant list3 list2 2 new -
MehrPlotten von Kreisen ( nach Jack Bresenham ) (C) Ac bis
Plotten von Kreisen ( nach Jack Bresenham ) (C) Ac 3-1990 bis 2-2017 Wie zeichnet der Computer Kreise? Natürlich mithilfe von Pixels, picture elements, also kleinen Bildpunkten. Die beste Approximation
MehrII.4.2 Abstrakte Klassen und Interfaces - 1 -
1. Unterklassen und Vererbung 2. Abstrakte Klassen und Interfaces 3. Modularität und Pakete 4. Ausnahmen (Exceptions) 5. Generische Datentypen 6. Collections II.4.2 Abstrakte Klassen und Interfaces - 1
MehrObjektorientierte Programmierung Studiengang Medieninformatik
Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 2 22.03.2017 Was bisher geschah... Klassen und Objekte Attribute und Methoden Klasse Bruch
MehrProgrammieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik
Programmieren II Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz 9.6 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Abstrakte Klassen: Motivation Grundidee abstrakter Klassen:
MehrII.4.1 Unterklassen und Vererbung - 1 -
1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.4.1 Unterklassen und Vererbung
Mehr! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -
! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete II.4.2 Abstrakte Klassen und Interfaces - 1 - Ähnliche Programmteile public class Bruchelement { Bruch wert;
MehrKapitel 5: Interfaces
Liste P: Programmieren mit Java WS 2001/2002 Prof. Dr. V. Turau FH Wiesbaden Kapitel 5: Interfaces Folie 82 : Einleitung Betrachtet man die Programmierleistung für ein Produkt über einen längeren Zeitraum,
MehrSoftwaretechnik (Medieninformatik): GUIs mit Swing Überblick
Softwaretechnik (Medieninformatik): GUIs mit Swing Überblick 1 Einführung 2 Einfache Swing Komponenten 3 Ereignisbehandlung und Adapterklassen 4 Zeichnen 5 Layout Manager 6 Komplexere Swing Komponenten
MehrAufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen
Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen Aufgabenblatt 4 Aufgabe 1 1. Erläutern Sie in eigenen Worten die Begriffe Datenstruktur, Datentyp und abstrakter Datentyp. Nutzen Sie das Beispiel
Mehr1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)
Praktische Informatik (Software) Vorlesung Softwareentwicklung 1 Prof. Dr. A. Ferscha Hauptklausur am 01. 02. 2001 Zuname Vorname Matr. Nr. Stud. Kennz. Sitzplatz HS / / / Punkte Note korr. Fügen Sie fehlende
MehrProgrammieren II. Zeichnen in Swing-Komponenten. Heusch 18 Ratz Institut für Angewandte Informatik
Programmieren II Zeichnen in Swing-Komponenten Heusch 18 Ratz 16.1 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Zeichnen in Swing-Komponenten (1) Eine Swing-Komponente kann nicht
MehrProgrammierung Nachklausurtutorium
Programmierung Nachklausurtutorium Laryssa Horn, Tim Engelhardt 20 März 2018 Klassen Wofür wir Klassen brauchen: Definieren ein Bauplan eines Objektes Bauplan enthält Attribute und Methoden Klasse Beispiel
MehrObjektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)
Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester
MehrDie Klasse java.lang.object. Thorsten Treffer
Die Klasse java.lang.object Thorsten Treffer 6. Dezember 2003 1 java.lang.object Die Klassenhierarchie von Java kann als Baum aufgezeichnet werden, dessen Wurzel die Klasse Object ist. Mit anderen Worten:
MehrAufgabe11. Methode test1. import java.util.hashmap; import java.util.arraylist; public class Aufgabe11 {
Hochschule Harz Programmierung1 Aufgabe 10: FB Automatisierung und Informatik Dipl.-Inf. Dipl.-Ing. (FH) M. Wilhelm Programmierung 1 für MI / WI Thema: Hashing und Generische Klassen Versuchsziele Kenntnisse
MehrProgrammieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik
Programmieren II Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz 9.6 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Abstrakte Klassen: Motivation Prinzip der Vererbung: Aus
MehrEinführung in die Informatik. Lösung zu Übungsblatt 6
Prof. J. Wolff von Gudenberg Prof. R. Kolla Prof. F. Puppe Prof. D. Seipel Universität Würzburg Lehrstuhl für Informatik II Prof. Dr. J. Wolff von Gudenberg Am Hubland, 97074 Würzburg Dipl.-Inform. Gregor
MehrProgrammieren in Java
Programmieren in Java Einführung in die objektorientierte Programmierung Teil 2 2 Übersicht der heutigen Inhalte Vererbung Abstrakte Klassen Erweitern von Klassen Überladen von Methoden Überschreiben von
MehrKlausur: Java (Liste P)
Klausur: Java (Liste P) SS05 Erlaubte Hilfsmittel: Gebundene! Unterlagen (Skript mit Anmerkungen, eigene Mitschrift) und maximal ein Buch. Bitte keine losen Blätter. Lösung ist auf den Klausurbögen anzufertigen.
MehrJavakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren
MehrUniversität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 08. Oktober Klausur II
Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 08. Oktober 2001 Stefan Holland Informatik II Hinweise: Klausur II Verwenden Sie für Ihre Lösungen ausschließlich
MehrIT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1
IT I: Heute abstrakte Methoden und Klassen Interfaces Interfaces List, Set und Collection 22.11.2018 IT I - VO 7 1 Wissensüberprüfung Überschreiben von Methoden: Aufruf der Methode der Oberklasse ist oft
MehrInstitut für Programmierung und Reaktive Systeme. GUIs mit Swing. Markus Reschke
GUIs mit Swing Markus Reschke 28.08.2014 Beispiel: Ein einfaches GUI-Programm Siehe Painter.java Markus Reschke GUIs mit Swing 2 GUI Frameworks in Java AWT war das erste GUI-Framework, welches mit Java
MehrVererbung und Polymorphie
Vererbung und Polymorphie Aufgabe 1: Vererbungsbaum entwerfen a) Finden Sie sinnvolle Beziehungen. Füllen Sie die letzten Spalten aus. Hinweis: Es kann nicht alles mit etwas anderem verbunden werden. Klasse
MehrVererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus
Vererbung Generalisierung und Spezialisierung Vererbung und Polymorphismus Wir wollen in unserem Aquarium verschiedene Arten von Fischen schwimmen lassen. In einem ersten Ansatz definieren wir nicht nur
MehrProgrammieren in Java
Einführung in die Objektorientierung Vererbung 2 Packages Packages dienen zur Strukturierung von Klassen Computer.java package BEZEICHNER ; package vorlesung7; public class KLASSEN-BEZEICHNER { public
MehrObjektorientierte Programmierung Studiengang Medieninformatik
Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 1 15.03.2017 Objektorientierte Programmierung (Studiengang Medieninformatik) Form: Prüfung:
MehrEAD II Übung 5. Graphische Benutzungsoberfläche mit BlueJ
EAD II Übung 5 Graphische Benutzungsoberfläche mit BlueJ Graphische Benutzungsoberfläche (GUI) Fenster, das weitere Komponenten zur Darstellung und Interaktion enthält spezielle Standardbibliotheken erforderlich,
Mehr14. Java Objektorientierung. Klassen, Vererbung, Kapselung
427 14. Java Objektorientierung Klassen, Vererbung, Kapselung Objektorientierung: Verschiedene Aspekte 428 Daten Typhierarchie Objekte Code Vererbung Unter- und Oberklassen Methoden überschreiben Unterklassen
MehrII.4.1 Unterklassen und Vererbung - 1 -
n 1. Grundelemente der Programmierung n 2. Objekte, Klassen und Methoden n 3. Rekursion und dynamische Datenstrukturen n 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.4.1 Unterklassen und
MehrFakultät IV Elektrotechnik/Informatik
Fakultät IV Elektrotechnik/Informatik Probeklausur Einführung in die Informatik I Hinweis: Diese Probeklausur ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der Teilleistung TL 2 (Programmiertest)
MehrSilke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...
Methoden und Klassen Silke Trißl Wissensmanagement in der Bioinformatik Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: hat Farbe Hubraum Tank kann man Gas geben Bremsen Hoch
MehrEINFÜHRUNG IN DIE PROGRAMMIERUNG
EINFÜHRUNG IN DIE PROGRAMMIERUNG OBJEKTORIENTIERTES PROGRAMMIEREN Tobias Witt 25.03.2014 09:00-10:30 Täglich Übungen zur Vertiefung Laptop hier nicht erforderlich Linux, OS X Freitag: http://hhu-fscs.de/linux-install-party/
MehrHERZLICH WILLKOMMEN PROGRAMMIERKURS (JAVA) ZUM. Dr. Vera Weil Institut für Informatik Universität zu Köln. 9. Vorlesung (05.
HERZLICH WILLKOMMEN ZUM PROGRAMMIERKURS (JAVA) Dr. Vera Weil Institut für Informatik Universität zu Köln 9. Vorlesung (05. Dezember 2018) Letztes Mal Statische Methoden und Felder Zugriffsmechanismen Vererbung
Mehr14. Java Objektorientierung
Objektorientierung: Verschiedene Aspekte Daten Typhierarchie Objekte 14. Java Objektorientierung Code Vererbung Unter- und Oberklassen Klassen, Vererbung, Kapselung Methoden überschreiben Unterklassen
MehrVorkurs Informatik WiSe 15/16
Java 7 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 21.10.2015 Technische Universität Braunschweig, IPS Überblick OO in Java Vererbung Abstrakte Klassen und Interfaces 21.10.2015 Dr. Werner Struckmann
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 04: Variablenzugriff und Eingaben Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Zugriff auf Instanzvariablen Praktisches Beispiel: Student
Mehr14 Abstrakte Klassen, finale Klassen, Interfaces
Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt. Für eine abstrakte Klasse
MehrGraphische Benutzungsoberflächen
Graphische Benutzungsoberflächen Graphische Benutzungsoberflächen (graphical user interfaces, GUI) dienen zur interaktiven Bedienung von Programmen, Ein- und Ausgabe mit graphischen Techniken und visuellen
Mehr14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen
Auswertung von Ausdrücken Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt.
MehrII.4.1 Unterklassen und Vererbung - 1 -
1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.4.1 Unterklassen und Vererbung
Mehr14 Abstrakte Klassen, finale Klassen, Interfaces
Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt. Für eine abstrakte Klasse
Mehr6. Globalübung (zu Übungsblatt 8)
6. Globalübung (zu Übungsblatt 8) Inhalt: Klassenhierarchien Verdecken von Attributen Überschreiben von Methoden Codeanalyse Analyse von JAVA-Programmen Semestralklausur Klausurtermin: Mittwoch 11.01.2006
MehrJava Projekt: Tic Tac Toe + GUI
Java Projekt: Tic Tac Toe + GUI Rechnerpraktikum aus Programmierung im WS 2005/06 unter der Leitung von Dr. Michael Hahsler Tadeh Amirian (h0253821) 10.01.2006 1) Problemdefinition Beim TicTacToe Spiel
MehrAufgabenblatt Nr. 5 Generizität und TicTacToe
Aufgabenblatt Nr. 5 Generizität und TicTacToe 1 Generische Sortier-Methode 1.1 Aufgabe: Entwickeln einer generischen Sortiermethode für Objekte mit der Schnittstelle Comparable Ihnen ist aus der Vorlesung
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 11: Vererbung Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil Einführung in die Vererbung Motivation Das Schlüsselwort extends Einführendes
MehrObjektorientierte Programmierung
Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Übungsblatt 2 Objektorientierte Programmierung 24. 04. 2006 Aufgabe 5 (Vererbung - Trace (Klausur FT
MehrKapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen
Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18
MehrInterfaces und Generics
Algorithmen und Datenstrukturen Wintersemester 2012/13 21. Vorlesung Interfaces und Generics Jan-Henrik Haunert Lehrstuhl für Informatik I Übersicht Liste und InsertionSort für Punkte für Objekte beliebiger
MehrSoftware Entwicklung 1
Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Klassenattribute und -methoden Bieniusa Software Entwicklung 1 2/ 23 Beispiel: Klassenattribute I class Uebungsgruppe
MehrJava. Prof. Dr. Stefan Enderle NTA Isny
Java Prof. Dr. Stefan Enderle NTA Isny 7. Oberflächenprogrammierung JFrame Die Klasse JFrame bietet eine Basis für Programme mit graphischer Benutzeroberfläche. Das folgende Programm legt ein Objekt der
MehrUniversität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 16. Juli Klausur
Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 16. Juli 2001 Stefan Holland Informatik II Hinweise: Klausur Verwenden Sie für Ihre Lösungen ausschließlich den
MehrMusterlösung Stand: 5. Februar 2009
Fakultät IV Elektrotechnik/Informatik Probeklausur Einführung in die Informatik I Hinweis: Diese Probeklausur ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der Teilleistung TL 2 (Programmiertest)
Mehr