Objektorientierte Programmierung



Ähnliche Dokumente
Objektorientierte Programmierung

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Übung 4. Musterlösungen

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Kapiteltests zum Leitprogramm Binäre Suchbäume

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

368 4 Algorithmen und Datenstrukturen

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

SWE5 Übungen zu Software-Engineering

Probeklausur Softwareengineering SS 15

Objektorientierte Programmierung

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Software Engineering Klassendiagramme Einführung

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Bedienungsanleitung HiTRAX GO Stoppuhr

Jede Zahl muss dabei einzeln umgerechnet werden. Beginnen wir also ganz am Anfang mit der Zahl,192.

Objektorientierte Programmierung

Software Engineering Klassendiagramme Assoziationen

Programmierkurs Java

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Bedienungsanleitungen

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

1 topologisches Sortieren

Professionelle Seminare im Bereich MS-Office

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Primzahlen und RSA-Verschlüsselung

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Dokumentation zum Spielserver der Software Challenge

Alle Schlüssel-Karten (blaue Rückseite) werden den Schlüssel-Farben nach sortiert und in vier getrennte Stapel mit der Bildseite nach oben gelegt.

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Bedienungsanleitung für das Tektronix Oszilloskop TDS 2002B

Klausur Software-Engineering SS 2005 Iwanowski

Große Übung Praktische Informatik 1

Das große ElterngeldPlus 1x1. Alles über das ElterngeldPlus. Wer kann ElterngeldPlus beantragen? ElterngeldPlus verstehen ein paar einleitende Fakten

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Anleitung über den Umgang mit Schildern

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Fotostammtisch-Schaumburg

Folge 18 - Vererbung

Dokumentation für das Spiel Pong

Funktionsbeschreibung. Lieferantenbewertung. von IT Consulting Kauka GmbH

Codex Newsletter. Allgemeines. Codex Newsletter

Prüfung Software Engineering I (IB)

4. BEZIEHUNGEN ZWISCHEN TABELLEN

Überprüfung der digital signierten E-Rechnung

Erklärung zum Internet-Bestellschein

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

Klassendiagramm. Kurzer Überblick über UML - Stand BlaBla


Bauteilattribute als Sachdaten anzeigen

Karten-Freischaltung mit dem UNLOCK MANAGER

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Quickreferenz V1.1. Frank Naumann

1 Mathematische Grundlagen

Partitionieren in Vista und Windows 7/8

Java: Vererbung. Teil 3: super()

Eine der Aktien hat immer einen höheren Gewinn als die andere Aktie. Ihre Aufgabe ist es diese auszuwählen.

Zahlen auf einen Blick

Einführung in die Programmierung

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Übungsbuch für den Grundkurs mit Tipps und Lösungen: Analysis

Fortbildung - Veranstaltungen - Anmeldung online

Adobe Photoshop. Lightroom 5 für Einsteiger Bilder verwalten und entwickeln. Sam Jost

Folgeanleitung für Fachlehrer

Software Engineering Interaktionsdiagramme

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung

trivum Multiroom System Konfigurations- Anleitung Erstellen eines RS232 Protokolls am Bespiel eines Marantz SR7005

Arbeiten mit UMLed und Delphi

«/Mehrere Umfragen in einer Umfrage durchführen» Anleitung

Mit dem Tool Stundenverwaltung von Hanno Kniebel erhalten Sie die Möglichkeit zur effizienten Verwaltung von Montagezeiten Ihrer Mitarbeiter.

Softwaretechnologie -Wintersemester 2013/ Dr. Günter Kniesel

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Das Modul ARTIKEL-BARCODE ermöglicht den Druck von Barcode-Etiketten der EAN-Codes 8 und 13.

Bedienungsanleitung für den Online-Shop

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

104 WebUntis -Dokumentation

Bearbeitungszeit: 120 Minuten. Kommentare kosten Zeit; kommentieren Sie ihr Programm nur da, wo der Code alleine nicht verständlich wäre.

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

ACDSee Pro 2. ACDSee Pro 2 Tutorials: Übertragung von Fotos (+ Datenbank) auf einen anderen Computer. Über Metadaten und die Datenbank

Objektorientierte Programmierung. Kapitel 12: Interfaces

Wiederkehrende Bestellungen. Tipps & Tricks

Was meinen die Leute eigentlich mit: Grexit?

Diagnoseaufgaben. egative Zahlen. Ganz In mit Ganztag mehr Zukunft. Das neue Ganztagsgymnasium NRW. TU Dortmund

SEP 114. Design by Contract

Übungen zur Softwaretechnik

Registrierung am Elterninformationssysytem: ClaXss Infoline

Treckerverein Monschauer Land e.v.

Woche 1: Was ist NLP? Die Geschichte des NLP.

Folgeanleitung für Klassenlehrer

Sehr geehrte Fortbildungsteilnehmende!

11. Das RSA Verfahren und andere Verfahren

Benutzeranleitung Superadmin Tool

Beschreibung Regeln z.b. Abwesenheitsmeldung und Weiterleitung

Programmieren für Ingenieure Sommer Ein Rechner. Rechner sind überall. Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet.

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

BEISPIELKLAUSUR Softwareentwicklung:

myfactory.go! - Verkauf

Transkript:

Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Objektorientierte Programmierung Aufgabe 22 (Java und UML-Klassendiagramm) An der Uni von Musterland gibt es an Lehrveranstaltungen nur Seminare und Vorlesungen. Beide werden mit ganzzahligen Noten zwischen 1 und 5 bewertet. Bei einem Seminar ist zusätzlich der Titel des gehaltenen Vortrags von Bedeutung, bei einer Vorlesung die Anzahl der vom Studenten tatsächlich wahrgenommenen Übungstermine. Lehrveranstaltungen sind durch eine 8-stellige Veranstaltungsnummer (einen String) eindeutig gekennzeichnet. Eine Teilmenge der Studenten sind Gasthörer, die im Unterschied zu regulären Studenten für die absolvierten Lehrveranstaltungen Prüfungsgebühren zahlen müssen: 50.- EUR je Seminar, 30.- EUR je Vorlesung und 10.- EUR pro besuchtem Übungstermin. Alle Studenten haben eine 6-stellige, eindeutige Matrikelnummer (auch ein String). Die Univerwaltung führt mit Hilfe eines Javaprogramms Notenlisten, in denen die Daten des laufenden akademischen Jahres verzeichnet werden. Auf der Grundlage dieser Daten werden in regelmäßigen Abständen folgende Auswertungen vorgenommen: Halbjährlich sind die angefallenen Gebühren je Student zu bestimmen und in Rechnung zu stellen. (Methode gebuehren()) Am Ende jeden Studienjahres wird der fleißigste Student geehrt (der mit den meisten Wertungspunkten, wobei es für jede besuchte Übung einen und für einen Seminarvortrag vier Wertungspunkte gibt). Gehen Sie für die Implementierung davon aus, dass nie mehr als ein Student die meisten Wertungspunkte hat. (Methode findeprimus()) Die Jahresstatistik weist für jede Lehrveranstaltung den Notendurchschnitt (arithmetisches Mittel) und die Gesamthörerzahl aus. (Methode statistik()) Programmiertechnisch ist das Javaprogramm für die Notenlisten wie folgt aufgebaut: Es gibt ein Set-Datenobjekt namens Veranstaltungen, in dem alle Lehrveranstaltungen des laufenden Jahres gespeichert sind. Die Hauptdatenstruktur ist eine geschachtelte Map: In der äußeren Map namens studentendaten ist jeder Student unter seiner Matrikelnummer als Schlüssel zu finden. Jeder Student wiederum enthält eine innere Map namens teilnahmedaten; darin sind unter der Lehrveranstaltungsnummer als Schlüssel Teilnahme-Objekte mit den teilnahmespezifischen Daten zu finden: Jede Teilnahme enthält die erzielte Note und (einen Verweis auf) die zugehörige Lehrveranstaltung. Eine SeminarTeilnahme enthält zusätzlich den Vortragstitel, eine VorlesungsTeilnahme die Anzahl der besuchten Übungen. Lösen Sie nun folgende Teilaufgaben: a) Zeichnen Sie das UML-Klassendiagramm zu den Klassen Verwaltung, Student, Lehrveranstaltung und Teilnahme nebst ihren Unterklassen sowie ihre Assoziationen untereinander. Es handele sich um ein Analysediagramm: Tragen Sie die notwendigen Attribute und die bis jetzt erwähnten Methoden ein. Typen und Zugriffsrechte müssen nicht eingezeichnet werden. b) Auf dem Beiblatt finden Sie eine fast vollständige Implementierung der Gebührenberechnung. 1

1. Schreiben Sie die fehlende Methode gebuehren in der Klasse VorlesungsTeilnahme. 2. Die gezeigten Programmstücke enthalten weder if- noch case-anweisungen. Wie wird dennoch zwischen regulären Studenten und Gasthörern unterschieden sowie zwischen den verschiedenen Arten von Lehrveranstaltungen? c) Implementieren Sie analog zur Gebührenberechnung die Bestimmung des fleißigsten Studenten. d) Implementieren Sie in der Klasse Verwaltung einen neuen Iterator, der alle Teilnahmen einer Lehrveranstaltung aufzählt. Für ein Lehrveranstaltungsobjekt lv liefere der Aufruf iterator(lv) den passenden Iterator. (Hinweis: Standard-Iterator und Methode containskey() verwenden!) Beiblatt Fast vollständige Implementierung der Gebührenberechnung: In der Klasse Verwaltung: public void gebuehren() { Iterator keyit = studentendaten.keyset().iterator(); while(keyit.hasnext()) { ((Student)studentenDaten.get(keyIt.next())).druckeGebuehren(); In der Klasse Student: public void druckegebuehren() { // keine Gebühren faellig! In der Klasse Gasthoerer: public void druckegebuehren() { Iterator keyit = teilnahmedaten.keyset().iterator(); int summe = 0; while (keyit.hasnext()) { summe += ((Teilnahme)teilnahmeDaten.get(keyIt.next())).gebuehren(); System.out.println(matrikelnummer + ": " + summe + ".- EUR"); In der Klasse SeminarTeilnahme: public int gebuehren() { return 50; // feste Seminarkosten 2

Aufgabe 23 (UML Klassendiagramm - Fakultät) Über die Organisation einer Fakultät sei u.a. bekannt: Zur Fakultät gehören die Studenten und das Stammpersonal. Das Personal der Fakultät zerfällt in Professoren, Wissenschaftliche Mitarbeiter und technisches Personal. Jeder Professor gehört genau einem der fünf Institute an, aus denen die Fakultät besteht. Der Dekan leitet die Geschäfte der Fakultät. Er steht dem Fakultätsrat vor. Sein Vertreter ist der Prodekan. Neben dem Dekan und dem Prodekan sitzen im Fakultätsrat sechs weitere Professoren, zwei Wissenschaftliche Mitarbeiter, zwei Vertreter des technischen Personals und drei Studenten. Der Fakultätsrat fasst Beschlüsse und setzt Ausschüsse ein. Der Studiendekan kümmert sich um die Studienordnung, entwirft das Vorlesungsangebot und berät die Studenten. Der Dekan, der Prodekan, der Studiendekan und die Vorsitzenden von Auschüssen sind Professoren und werden vom Fakultätsrat gewählt. Beschreiben Sie diese Fakten vollständig in einem UML-Klassendiagramm, in dem als Klassen ausschließlich Personen vorkommen sowie Institutionen, die aus Personen zusammengesetzt sind. Vermeiden Sie in Klassennamen den Plural: Schreiben Sie also Student und nicht Studenten (diese Regel ist generell zu empfehlen). Modellieren Sie möglichst viel über Assoziationen (mit Beschriftung, Leserichtung und Multiplizitäten). Was sich so nicht beschreiben lässt, drücken Sie als Methoden aus; Attribute dürfen nicht verwendet werden. Aufgabe 24 (Bäume als Datenstrukturen und UML-Diagramme) Der Großhändler MoneyPenny führt eine Preisliste, die jedem Artikel seinen Preis zuordnet. Dabei ist der Artikel durch seine Artikelnummer (vom Typ int) eindeutig gekennzeichnet. Der Preis wird in Cent angegeben (ist also ebenfalls ein Wert vom Typ int). Als Praktikant in der EDV-Abteilung von MoneyPenny erhalten Sie den Auftrag, die Preisliste unter Beachtung folgender Vorgaben des Projektleiters in Java zu implementieren: Die Preisliste soll durch eine neu zu entwickelnde Binärbaumstruktur abgebildet werden. Die Binärbaumstruktur besteht aus ArtikelBaum-Objekten. Die Klasse ArtikelBaum ist abstrakt und hat zwei konkrete Unterklassen: Jedes WurzelBaum-Objekt hat vier private Attribute: Die Attribute schluessel und wert (vom Typ int) dienen zur Speicherung von Artikelnummer und Preis eines Artikels; die Attribute links und rechts (vom Typ ArtikelBaum) enthalten die beiden Unterbäume. Ein LeererBaum-Objekt repräsentiert einen leeren Unterbaum. Um die Gefahr von Exceptions zu verringern, stellen wir leere Unterbäume also nicht durch null dar! LeererBaum-Objekte haben keine Attribute. In der Klasse ArtikelBaum sind folgende Methoden als abstrakt und öffentlich definiert (die Bedeutung ergibt sich jeweils aus dem Namen der Methode): boolean istleer(); WurzelBaum einfuege(int schluessel, int wert); ArtikelBaum loesche(int schluessel) throws NoSuchElementException; // ergibt bei Einfuegen/Loeschen neuen (!) Baum boolean enthaelt(int schluessel); 3

int finde(int schluessel) throws NoSuchElementException; //gibt Wert java.util.iterator iterator(); // Zum Iteratortyp unten mehr Die konkreten Unterklassen von ArtikelBaum enthalten Implementierungen dieser Methoden (also Redefinitionen) und zu jedem privaten Attribut eine öffentliche get-methode. Der Konstruktor von Leerer- Baum hat keine Parameter, der Konstruktor von WurzelBaum hat zu jedem Attribut einen gleichnamigen Parameter gleichen Typs. Zu den Klassen LeererBaum und WurzelBaum gibt die passenden Iteratorklassen LeererBaum- Iterator und WurzelBaumIterator, die beide von java.util.iterator abgeleitet sind. Wie bekannt muss ein Iterator drei Methoden implementieren: public boolean hasnext(); public Object next(); public void remove(); Durch next() sollen sämtliche im Gesamtbaum enthaltenen Wurzelbäume von links nach rechts (d.h. immer zuerst die im linken Teilbaum, dann der zur Wurzel und danach die im rechten Teilbaum) aufgezählt werden. remove() braucht nichts zu leisten und kann einfach eine UnsupportedOperationException werfen. Objekte der Klasse LeererBaumIterator haben keine Attribute. Ein WurzelBaumIterator-Objekt kennt über das private Attribut baum seinen Wurzelbaum; ein privates Attribut it enthält den Iterator des gerade durchlaufenen Unterbaums; weitere Attribute können verwendet werden. Gehen Sie wie folgt vor: a) Zeichnen Sie ein grobes UML-Klassen-Diagramm (Analyse-Diagramm), das alle oben erwähnten Klassen mit ihren Beziehungen, ihren Attributen und Methoden darstellt. Detailinformationen wie Typen, Parameter und Zugriffsrechte sind nur (!) bei den Konstruktoren anzugeben. b) Geben Sie für die Klassen LeererBaum und WurzelBaum die Implementierungen der Konstruktoren und der Methode istleer an! c) Wie sind in den gleichen Klassen die Methoden enthaelt und finde zu implementieren? Gehen Sie davon aus, dass der ArtikelBaum bezüglich der Schlüssel als Suchbaum organisiert ist (d.h. in jedem Teilbaum ist der Schlüssel der Wurzel größer als die im linken Unterbaum und kleiner als die im rechten Unterbaum). Falls der angegebene Schlüssel im angesprochenen ArtikelBaum nicht vorkommt, soll finde eine NoSuchElementException auslösen (hier keine (!) Iteratoren verwenden). d) Implementieren Sie die Klasse LeererBaum die Methoden einfuege und loesche. e) Geben Sie die Klasse LeererBaumIterator an. f) Implementieren Sie die Klasse WurzelBaumIterator. 4

Aufgabe 25 (Eieruhr) Michael hat bei Botschi eine digitale Stopp- und Eieruhr gekauft. Die Anzeige ist vierstellig: Die ersten beiden Stellen zeigen die Minuten (00 bis 99) an, die hinteren beiden Stellen die Sekunden (00 bis 59). Bedient wird die Uhr über fünf Tasten, drei Umschalttasten: AnAus StoppWeiter StellenMessen und zwei weitere Tasten: Plus Minus Der etwas konfusen Bedienungsanleitung entnimmt Michael folgende Erklärungen: Nach jedem Anschalten zeigt die Uhr 0000 an (also 0 Minuten und 0 Sekunden) und befindet sich im Stellmodus; alle Register (s.u.) stehen auf 0. Im Stellmodus kann die gerade angezeigte Zeit mit den Tasten Plus und Minus minutenweise erhöht bzw. erniedrigt werden. Drückt man im Stellmodus die Taste StellenMessen, dann wechselt die Uhr entweder in den Stoppuhrmodus oder in den Eieruhrmodus: in den Stoppuhrmodus, wenn die Stellzeit 0000 ist, in den Eieruhrmodus sonst. Von beiden Modi führt erneutes Drücken der Taste StellenMessen zurück in den Stellmodus, wo die zuletzt eingestellte Stellzeit wieder angezeigt wird. Im Stoppuhrmodus wird die Zeitanzeige jede Sekunde um eine Sekunde erhöht. Die Stoppuhr läuft im Prinzip unbegrenzt lange, wobei auf 9959 die Zeitanzeige 0000 folgt - also Zeitmessung modulo 100 Minuten. Die Zeitmessung kann mit der Taste StoppWeiter unterbrochen und durch erneutes Drücken dieser Taste wieder aufgenommen werden. Im Eieruhrmodus wird ausgehend von der eingestellten Zeit die Zeitanzeige jede Sekunde um eine Sekunde verringert. Beim Erreichen von 0000 endet die Zeitmessung: die Uhr läutet eine Minute lang (sofern nicht auf StellenMessen oder AnAus gedrückt wird) und wechselt dann automatisch in den Stellmodus, wo wieder die zuletzt eingestellte Stellzeit angezeigt wird. Wie beim Stoppuhrmodus kann die Zeitmessung mit der Taste StoppWeiter unterbrochen bzw. wieder aufgenommen werden. Als Informatiker beschließt Michael, sich die Abläufe zwischen An- und Ausschalten des Geräts durch ein UML-Zustandsdiagramm zu veranschaulichen. Ihm ist bekannt, dass die Uhr intern drei Register besitzt, eines (StellMin) für die Stellzeit und zwei (AnzMin, AnzSek) für die Anzeigezeit, die automatisch (!) laufend im Display angezeigt wird. Michael ist klar, dass während des Stellens die Stellzeit irgendwie sichtbar gemacht werden muss. Als mögliche Ereignisse verwendet er die fünf Tastenbeschriftungen sowie after 1 Sek after 1 Min und als spezielle Aktionen: Alarm ein Alarm aus (letztere schalten die Klingel des Weckers an bzw. aus). Auf der nächsten Seite finden Sie das von Michael begonnene Diagramm, das Sie nun vervollständigen sollen! 5

6

Aufgabe 26 (Zustandsdiagramm einer Digitaluhr) Das Verhalten einer einfachen Digitaluhr mit drei Einstelltastknöpfen A, B und C und einer Digitalanzeige soll modelliert werden. Die Digitalanzeige zeigt entweder die Zeit (Stunden, Minuten) oder das Datum (Tag, Monat) an. Mit der Taste C kann man zwischen Zeit- und Datumsanzeige hin- und herschalten. Nach Betätigung der Taste C befindet sich die Uhr im Anzeigemodus. Bei der Zeitanzeige kann mit der Taste A zwischen den drei Modi (Zeit anzeigen, Stunden stellen, Minuten stellen) gewählt werden, entsprechend bei der Datumsanzeige zwischen den Modi (Datum anzeigen, Monat stellen, Tag stellen). In jedem der Stellmodi kann der betreffende Wert mit der Taste B um 1(mod 24), bzw. 1(mod 60), bzw. 1(mod 31), bzw. 1(mod 12) erhöht werden. Beschreiben Sie das Verhalten der Uhr durch ein hierarchisches Zustandsübergangsdiagramm mit sequentiellen Unterzuständen. Das Einstecken eines Elektrokabels aktiviert die Zeitanzeige. In jedem Zustand kann der Wecker durch Ausstecken des Kabels abgeschaltet werden. 7