Theorie zu Übung 8 Implementierung in Java



Ähnliche Dokumente
Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Programmieren in Java

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Einstieg in die Informatik mit Java

II.4.2 Abstrakte Klassen und Interfaces - 1 -

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Algorithmen und Datenstrukturen

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

12 Abstrakte Klassen, finale Klassen und Interfaces

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Programmierung Nachklausurtutorium

14 Abstrakte Klassen, finale Klassen, Interfaces

Philipp Güttler Objektorientierung und komplexe Datentypen

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Einstieg in die Informatik mit Java

3 Objektorientierte Konzepte in Java

Objektorientierte Programmierung Studiengang Medieninformatik

6. Globalübung (zu Übungsblatt 8)

Java für Bauingenieure

II.4.5 Generische Datentypen - 1 -

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

14. Java Objektorientierung. Klassen, Vererbung, Kapselung

Datenbankanwendungsprogrammierung Crashkurs Java

Programmieren 2 Java Überblick

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Propädeutikum Programmierung in der Bioinformatik

Informatik II Übung 6

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Objektorientierung. Marc Satkowski 20. November C# Kurs

AuD-Tafelübung T-B5b

Vorkurs Informatik WiSe 15/16

Grundelemente objektorientierter Sprachen (1)

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Grundelemente objektorientierter Sprachen (1)

Javakurs für Anfänger

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Einstieg in die Informatik mit Java

Vererbung, Polymorphie

Probeklausur: Programmierung WS04/05

Einführung in die Programmierung

Repetitorium Informatik (Java)

1 Abstrakte Klassen, finale Klassen und Interfaces

Kapitel 4: Klassen und Unterklassen

Klausur Grundlagen der Programmierung

Programmieren in Java

Ersetzbarkeit und Verhalten

Objektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern

Fakultät IV Elektrotechnik/Informatik

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Klassen und ihre Beziehungen III: Mehrfache Vererbung, Rollen, Schnittstellen und Pakete

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Probeklausur Java Einführung in die Informatik. Wintersemester 2016/2017

Programmieren in Java -Eingangstest-

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

Das Interface-Konzept am Beispiel der Sprache Java

Musterlösung Stand: 5. Februar 2009

Abgabe: keine Pflichtabgabe (vor 12 Uhr) Aufgabe 10.1 (P) Vererbung Gegeben seien folgende Java-Klassen:

4. Vererbung Die Klasse Object. Die Klasse Object

n 1. Grundzüge der Objektorientierung n 2. Methoden, Unterprogramme und Parameter n 3. Datenabstraktion n 4. Konstruktoren n 5. Vordefinierte Klassen

Einfache Datentypen in JAVA

Objektorientierung (OO)

Polymorphie. 15. Java Objektorientierung II

Client-Server-Beziehungen

C++ - Objektorientierte Programmierung Vererbung

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

Algorithmen und Datenstrukturen

Einstieg in die Informatik mit Java

Vererbung und Polymorphie

Polymorphie. 15. Java Objektorientierung II

Transkript:

Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept realisiert Keine Trennung von Spezifikation und Implementierung der Klasse Klasse ist (abstrakter) Datentyp class Zaehler{ int Zaehlerstand; void inkrementieren() {... void initialisieren() {... int getzaehlerstand() {... Objekt in Java Klassen werden wie Datentypen verwendet Objekte können nur dynamisch erzeugt werden Zaehler einzaehler; //Objektvariable einzaehler = new Zaehler(); //einzaehler verweist auf neues //Objekt der Klasse Zaehler einzaehler = null; //Referenz auf Objekt löschen, //keine Speicherfreigabe erforderlich Abstrakte Klasse in Java Kennzeichnung mit abstract Sobald eine Klasse eine abstrakte Operation besitzt muss sie als abstract deklariert werden

Grundlagen der Softwaretechnik Übung 8: Implementierung in Java 52 abstract class Abstract1{ public void operation1() {... public void operation2() {... abstract class Abstract2{ public abstract void operation1();... Attribute und Operationen in Java Sichtbarkeit: public sichtbar für alle protected im selben Paket für alle sichtbar, außerhalb nur für Unterklassen sichtbar private sichtbar innerhalb der Klasse Voreinstellung: im Paket für alle sichtbar, außerhalb unsichtbar für alle Parameterkonzept bei Operationen in Java: Primitive Typen: call by value, Ausgabe erfolgt nur über den Ergebnistyp Objekttypen: call by reference Konstruktoren in Java: Dienen zur Initialisierung von Objekten Mehrere Konstruktoren pro Klasse möglich o Unterschiedliche Parameterlisten => overloading Keine Destruktoren in Java o Speicherplatz-Freigabe durch garbage collector

Grundlagen der Softwaretechnik Übung 8: Implementierung in Java 53 class Kreis { protected Punkt Mittelpunkt = new Punkt(1,1); //Initialisierung protected int Radius; protected static int Anzahl; //Klassenattribut public Kreis(){ //Konstruktor 1 public Kreis (int x, int y){ //Konstruktor 2 Mittelpunkt.setX(x); Mittelpunkt.setY(y); public void zeichnen() {... public static int getanzahl() {... //Klassenoperation Schnittstelle in Java Kann Konstanten und abstrakte Operationen enthalten Wird mit dem Schlüsselwort interface deklariert Wird von Klassen mit dem Schlüsselwort implements realisiert interface ClassInfo { public abstract String getclassname(); class MyClass implements ClassInfo{ public String getclassname(){ return "MyClass";...

Grundlagen der Softwaretechnik Übung 8: Implementierung in Java 54 Beispiel: public class VersicherungGUI { Versicherung eineversicherung; public void init() { // Es wird die Implementierung der // Klasse Lebensversicherung verwendet eineversicherung = new Lebensversicherung();... public void ermittlepraemie() { double VSumme =...; double Praemie = eineversicherung.berechnepraemie(vsumme);... public interface Versicherung { //abstrakte Operation public abstract double berechnepraemie (double VSumme); VersicherungGUI init() ermittlepraemie() Aufruf «interface» Versicherung berechnepraemie (double VSumme) Lebensversicherung berechnepraemie (double VSumme) berechnesonderpraemie(double VSumme) Unfallversicherung berechnepraemie (double VSumme) class Lebensversicherung implements Versicherung { //Impl. der (abstrakten) Operation mit switch public double berechnepraemie(double VSumme) { double praemie = 0.0; int Schalter = (int)((vsumme-1.0/100.0) / 5000.0); switch (Schalter) { case 0: praemie = VSumme * 16.8 / 1000.0; break; case 1: praemie = VSumme * 12.6 / 1000.0; break; default:...; break; return praemie; Assoziationen in Java Abhängig von: Obergrenzen der Kardinalitäten (maximal 1 oder größer 1) Navigierbarkeit (unidirektional oder bidirektional) class Unfallversicherung implements Versicherung { // Impl. der (abstrakten) Operation mit if public double berechnepraemie(double VSumme) { double praemie = 0.0; if(vsumme > 10000.0) praemie = VSumme * 8.4 / 1000.0; else if (VSumme <= 5000.0) praemie = VSumme * 16.8 / 1000.0; else praemie = VSumme * 12.6 / 1000.0; return praemie; Beispiel: Verwaltung einer unidirektionalen Assoziation mit Kardinalität <= 1

Grundlagen der Softwaretechnik Übung 8: Implementierung in Java 55 KlasseA einerolleb: KlasseB setrolleb(klasseb einobjektb) getrolleb() : KlasseB removerolleb() 0..1 RolleB KlasseB class KlasseA { KlasseB einerolleb; //Referenz-Attribut //Verwaltungsoperationen public void setrolleb(klasseb einobjektb) { einerolleb = einobjektb; public KlasseB getrolleb() {return einerolleb public removerolleb() {einerolleb = null Bei bidirektionalen Assoziationen Verwaltung in beiden Klassen erforderlich! Beispiel: Verwaltung einer unidirektionalen Assoziation mit Kardinalität >1 Verwendung der Java-Containerklasse Vector mit Operationen z.b. addelement(), removeelement() und elementat() Abteilung class Abteilung { protected Vector Mitarbeiter; * Mitarbeiter Angestellter public void setmitarbeiter (Angestellter ang){ Mitarbeiter.addElement (ang); Angestellter getmitarbeiter (int pos) { ang =(Angestellter)Mitarbeiter.elementAt(pos); return ang; void removemitarbeiter (Angestellter ang) { Mitarbeiter.removeElement (ang);

Grundlagen der Softwaretechnik Übung 8: Implementierung in Java 56 Polymorphismus Operationen sind automatisch polymorph Nicht-polymorphe Operation muss explizit als final deklariert werden Dann kann diese Operation nicht überschrieben werden class Grafikobjekt { public void zeichnen() {... class Kreis extends Grafikobjekt { public void zeichnen() {... class Rechteck extends Grafikobjekt { public void zeichnen() {... Grafikobjekt einegrafik; einegrafik = new Kreis(); einegrafik.zeichnen(); einegrafik = new Rechteck(); einegrafik.zeichnen(); //zeichnet Kreis //zeichnet Rechteck Mehrfachverebung In Java ist Mehrfachvererbung für Klassen nicht realisiert. Statt dessen Schnittstellenkonzept o Schnittstelle kann nur abstrakte Operationen und Konstanten weitergeben o Keine Attribute und Implementierungen von Operationen Mehrfachvererbung und Schnittstellen sind nicht gleichzusetzen! class B1 {... interface B2 {... interface B3 {... class D extends B1 implements B2, B3 {...

Grundlagen der Softwaretechnik Übung 8: Implementierung in Java 57 Zustandsautomat in Java Verschiedene Implementierungen möglich: 1. Implementierung mit Zustandsattribut (Aufzählungstyp) In Java existiert kein benutzerdefinierbarer Aufzählungstyp Lösung z.b. mit Integer Konstanten class Schublade { private int classstate; // mögliche Zustände final static int OFFEN = 1; final static int ZU_UNVERSCHLOSSEN= 2; final static int ZU_VERSCHLOSSEN= 3; // Zustandsattribut speichert // aktuellen Zustand public void oeffnen() { // Jede Operation muss Zustandsattribut abfragen if (classstate == ZU_UNVERSCHLOSSEN { classstate = OFFEN; // Aktualisierung des //Zustandsattributs, wenn mit //der Operation ein //Zustandswechsel verbunden ist... 2. Überführung in Zustandsmuster => siehe Kapitel 6 3. Implementierung mit switch-case-anweisung Switch / While Idiom für Zustandsdiagramme Implementierungsmuster (Idiom) für Zustandsdiagramme Bildet Zustandsdiagramm in strukturierten Code nach einem generischen Codemuster ab Gleiche Struktur im Zustandsdiagramm und Code Abbildung von entry, do und exit-aktionen Abbildung hierarchischer Zustände Nachteil: Ereignisbasiert - keine Ausnutzung objektorientierter Konzepte

Grundlagen der Softwaretechnik Übung 8: Implementierung in Java 58 Zustandsdiagramm: Time Mode entry: do: display time exit: button pushed button pushed Date Mode entry: do: display date exit: Strukturiertes Programm in Pseudocode:

Grundlagen der Softwaretechnik Übung 8: Implementierung in Java 59 START WHILE TRUE SWITCH currentstate CASE time mode: WHILE NOT button pushed display time currentstate:= date mode BREAK CASE date mode: WHILE NOT button pushed display date currentstate:= time mode BREAK ENDSWITCH END Regeln des Idioms: Abbildung Zustandsdiagramm in o currentstate variable o While-Schleife mit switch-case Grundgerüst, das alle Zustände als einzelne Anweisungen enthält Die Zustände, die Aktionen in einem Zustand werden durch weitere while- Schleife implementiert. Bei Verlassen eines Zustandes durch einen Zustandsübergang wird die Variable current State aktualisiert. Realisierung hierarchischer Zustände o Erzeugen eines switch / while Blocks für jeden flachen Zustand o Schachtelung Zustandshierachie gemäß START WHILE TRUE SWITCH currentstate CASE time mode: WHILE NOT button pushed display time currentstate := date BREAK CASE date mode: WHILE NOT button pushed display date currentstate := time BREAK ENDSWITCH END Zusammenfassung Statisches Modell ist direkt in Java implementierbar

Grundlagen der Softwaretechnik Übung 8: Implementierung in Java 60 Bidirektionale Assoziationen benötigen Verwaltung in beiden Klassen Zustandsautomaten können mit verschiedenen Implementierungsstrategien implementiert werden o Mit Zustandsattribut o Mit Zustandsmuster o Mit Switch-Case Anweisungen (Hilfsmittel: Switch/While Idiom)