Java - Institut für Visualisierung und Interaktive Systeme

Werbung
Universität Stuttgart
Institut für Visualisierung
und Interaktive Systeme
Fachpraktikum Graphische Benutzungsoberflächen
Aufgabe 2: Notenrechner (Java)
Harald Bosch, Mark Giereth, Christiane Taras
In dieser Aufgabe werden Sie einen Notenrechner in Java* entwickeln. Dieser Notenrechner
soll aus den Noten einzelner Prüfungen eine
Gesamtnote errechnen können und aus einer
angestrebten Gesamtnote und zugehörigen
Teilnoten auch eine noch offene Teilnote berechnen können. Um die hierarchische Struktur
der Noten gut abbilden zu können wird ein
JXTreeTable verwendet. Die eingegebenen Prüfungsdaten sollen in XML-Dateien gespeichert
werden und wieder aus diesen Dateien gelesen
werden können. Dabei arbeiten Sie mit objektorientierten Entwurfsmustern, wie das ModelView-Controller (MVC) oder das Beobachter
Muster, die in Swing allgegenwärtig sind. Sie
implementieren
Routinen
zur
EventBehandlung, um beispielsweise auf Benutzereingaben mit der Maus zu reagieren.
Wichtige Lernziele sind unter anderem

Swing Event Handling

Objektorientierte Entwurfsmuster

XML-Behandlung in Java
Bearbeitungszeit: 3 Wochen
Java
Im Gegensatz zu herkömmlichen kompilierten Programmiersprachen, erzeugt der JavaCompiler so genannten Bytecode. Damit dieser ausgeführt werden kann, führt nach der
Übersetzungsphase ein Java Laufzeitumgebung, die Java Virtual Machine (JVM), den
Bytecode aus.
Mit dem Java Development Kit (JDK) lassen
sich Java Programme entwickeln. Dem JDK
sind Hilfsprogramme beigelegt, die für die
Java-Entwicklung nötig sind, z.B. der Java
Compiler javac, ein Programm zum Testen
von Java Applets, appletviewer, oder ein
Tool zum Generieren von HTML Seiten aus
Programmkommentaren, javadoc.
Beim Java Runtime Environment (JRE) ist nur
die JVM zusammen mit den nötigen Bibliotheken gebündelt, für alle diejenigen, die JavaProgramme nur laufen lassen möchten und
keine Entwicklungstools benötigen.
Eclipse
Die Entwicklungsumgebung Eclipse unterstützt einige Aufgaben im Entwicklungsprozess und bietet eine graphische Oberfläche
hierfür. Eclipse ist selbst zum größten Teil in
Java programmiert und benötigt mindestes
eine JRE in der Version 1.4. Weiter Informationen zu Eclipse erhalten Sie unter
http://www.eclipse.org
Abb. 1 Oberfläche des Notenrechners
*
Ein Beispiel-Projekt in Eclipse
Um mit Eclipse arbeiten zu können, müssen
Sie zunächst ein neues Java Projekt anlegen
(File|New|Java Project). Geben Sie ihrem Projekt im nachfolgend angezeigten Dialog einen
Namen und bestätigen Sie mit Finish. Es wird
ein neues Verzeichnis in ihrem Workspace
eingerichtet, das aller Dateien zum Projekt
enthält.
http://java.sun.com/
1
*
*/
public class Main {
/**
* @param args
*/
public static void main(String[]
args) {
// TODO Auto-generated method
stub
}
}
Abb. 2 New Project Wizard
Als Ergebnis sehen Sie im Package Explorer
Tab folgenden Eintrag (Test ist hier der Name
des Projekts):
Legen Sie nun ihr erstes Java Programm an.
Erzeugen Sie eine neue Klasse, indem Sie im
Kontextmenü (Rechtsklick auf src Eintrag)
New|Class auswählen. Es erscheint folgender
Dialog:
Fügen Sie in der main-Methode folgende Zeile
ein: System.out.println("Hallo FaPra"); und
speichern Sie. Speichern löst automatisch eine
Neukompilierung aus (sofern der Menüpunkt
Project|Build Automatically aktiviert ist).
Starten Sie nun das Programm, indem Sie im
Kontextmenü (Rechtsklick auf Main.java) Run
As| Java Application auswählen. Es sollte eine
Ausgabe („Hallo FaPra“) in einem Tab erfolgen, das den Namen Console hat.
Sofern Sie noch keine Erfahrung mit der Programmierung in Java haben, sollten Sie sich
per Tutorien und Bücher in das Thema einlesen. Gute Ausgangspunkte sind [1], [2] und [3].
Dokumentation zu allen Klassen die Teil der
Java-API sind können unter [4] eingesehen
werden.
Java Swing
Abb. 3 New Class Wizard
Geben Sie als Package fapra.diagram an und
als Name der Klasse Main. Bitte stellen Sie alle
weiteren von Ihnen entwickelten Klassen in
dieses Package. Die Main Klasse dient Ihnen
später zum Starten der Anwendung. Selektieren Sie die Optionen wie oben ersichtilich.
Das Ergebnis ist der folgender Java Code:
package fapra.diagram;
/**
* @author
In Java existieren zwei Toolkits zur Realisierung von Benutzungsoberflächen. Einerseits
das schwergewichtige* AWT und das leichtgewichtige Swing. In dieser Aufgabe wird vor
allem Swing [3] eingesetzt. Swing verwendet
den Window Manager des Betriebssystems
nur zur Realisierung der Top-Level Fenster
und verwaltet den gesamten Grafikkontext
eines Fensters selbst. Dokumentationen zu
allen Klassen können leicht im Web gefunden
werden (z.B. „Java Swing Jtree“ suchen).
Baum-Ansichten in Java Swing
Ein zentrales Element des Notenrechners ist
die Baum-Ansicht, in der die verschiedenen
Prüfungen hierarchisch dargestellt und verwaltet werden.
Java Swing stellt zwar eine Komponente zur
Darstellung eines Baums zur Verfügung
*
schwergewichtig im Sinne der GIS-Vorlesung
2
(JTree), diese kann aber nicht wie die
QTreeView in QT weitere Eigenschaften der
Knoten in einer Tabelle darstellen. Für diese
Aufgabe
verwenden
wir
daher
die
*
†
JXTreeTable aus der SwingX-Bibliothek von
Swinglabs. Die Anzeige des Baums kann direkt genutzt werden, während die Datenstruktur dahinter an die Anforderungen der Anwendung angepasst werden sollte. Die Kommunikation zwischen der Ansicht und dem
Datenmodel ist im Programmskelet bereits
vollständig implementiert. Lediglich die Methoden zum Einfügen, Löschen und Verändern von Knoten müssen im Datenmodel
noch erstellt oder erweitert werden.
Allgemein
Das Programmskelett für diese Aufgabe steht
in Form eines Eclipse Projects zur Verfügung.
Importieren Sie zunächst dieses Projekt in
ihren Eclipse Workspace. Im Skelet enthalten
sind insbesondere folgende Dateien:

Main.java enthält die main()Methode zum Starten des Notenrechners.

VisJMarkCalc.java realisiert das
Hauptfenster. Hier sind das Aussehen
und das Verhalten beschrieben. Es verwendet ein JXTreeTable um die Daten
anzuzeigen, ein MarkTreeModel um die
Daten zu verwalten und Actions um das
Verhalten zu definieren.
Die im Notenrechner eingetragenen Daten
sollen in XML-Dateien gespeichert werden,
die die Prüfungen genauso hierarchisch verwalten können, wie die Baum-Ansicht.

MarkTreeModel.java: verwaltet die
Knoten, und ihre Attribute, des Prüfungsrechners. Das Model im Sinne von
MVC.
Falls Sie XML noch nicht kennen, dann informieren Sie sich darüber, z.B. auf der Seite
http://de.selfhtml.org/xml/intro.htm.
Im Hauptverzeichnis für diese Aufgabe finden
Sie die Datei „MarkCalc.xsd“. Diese Datei beschreibt den Aufbau der XML-Dateien, die
vom Notenrechner geschrieben und gelesen
werden können sollen.

MarkNode.java ist ein Element des
MarTreeModels. Diese Klasse muss
nicht verändert werden.
XML‡ und XSD§
Machen Sie sich mit Hilfe der Seite
http://www.usegroup.de/software/xmltutorial
/schema.html mit den Elementen in der XSDDatei vertraut.
Die Qt-Entwicklungsumgebung bringt schon
sehr viele nützliche Klassen zur Verarbeitung
von XML-Daten mit. Lesen Sie hierzu den
Abschnitt „QtXml Module“ im Qt Assistant.
Entwicklung des Notenrechners
In diesem Abschnitt sollen Sie den Notenrechner, dessen Skelett Ihnen bereits vorgegeben ist, fertig implementieren.
*
http://download.java.net/javadesktop/
swinglabs/releases/0.8/docs/api/org/jdesktop/
swingx/JXTreeTable.html
†
Der Diagramm-Editor soll eine Menüleiste
(JMenuBar), eine Werkzeugleiste (JToolBar)
und einen Inhaltsbereich – eine von Ihnen
entwickelte und von JComponent abgeleitete
Komponente – innerhalb eines Hauptfensters
(JFrame) besitzen und wie folgt aussehen:
Das Hauptfenster
Das Hauptfenster einer Swing Anwendung ist
ein
JFrame.
Die
gegebene
Klasse
VisJMarkCalc erbt von JFrame und wird
bereits von der Main-Klasse instanziiert. Nach
der Initialisierung wird angegeben welche
Aktion ausgeführt werden soll, wenn das
Fenster geschlossen wird (unter Windows das
rote X rechts oben). In unserem Fall soll zunächst die Anwendung beendet werden. Dieses Verhalten kann später abgefangen werden,
um ein versehentliches Beenden der Anwendung zu vermeiden. Es wird anschließend die
Fenstergröße auf den Inhalt angepasst und
das Fenster angezeigt, indem der Status auf
visible=true gesetzt wird.
Swing Fenster sind hierarchisch angeordnet
wie folgende Abbildung zeigt:
https://swingx.dev.java.net/
‡
XML = Extensible Markup Language
§
XSD = XML Schema Definition
3
Abb. 4 Fensterhierarchie (Quelle: [3])
Fügen Sie das bereits vorhandene, rudimentäre Menü (createMenuBar())und die Toolbar(createToolbar()) in den Frame ein.
Achten Sie dabei darauf, dass Sie dem
LayoutManager mitteilen wie er die Toolbar
zu platzieren hat, und dass das Menü, wie in
Abb. 4 zu sehen, außerhalb der Content Pane
liegt. Als nächstes sollten Sie in der
createButtons() Methode zwei Köpfe erstellen und entsprechen Abb. 1 platzieren.
ActionListener und Action
Die Ereignisbehandlung von Buttons und davon abgeleiteten Kombonenten wie Menu
Items,
etc.
wird
in
Swing
durch
ActionListener realisiert. Jede von Abstract Button abgeleitete Komponente,
besitzt die Möglichkeit ActionListener Instanzen zu registrieren.
Im
folgenden
Beispiel
wird
ein
ActionListener für einen Button registiert
(wie hier i.d.R. implementiert als anonyme
Klasse). Wird der Button geklickt, so wird
"clicked" ausgegeben.
JButton b = new JButton("click me");
b.addActionListener(new ActionListener() {
public void actionPerformed(
ActionEvent e) {
System.out.println("clicked");
}
});
Im unserer Anwendung soll zur Implementierung der Ereignisbehandlung das Action Interface verwendet werden. Dieses Interface
erweitert das ActionListener Interface, indem es das Setzen und Auslesen von Eigenschaften wie Name, Icon, Tooltip, etc. bereitstellt. Als Erweiterung von ActionListener
muss auch die actionPerformed(Action
Event) Metode implementiert werden. Im
Skelett sind bereits die Aktionen für „New“
und „About“ als Beispiel unter Verwendung
der abstrakten Klasse AbstractAction angegeben.
Die Verwendung von Action ist insbesondere
dann hilfreich, wenn mehrere unterschiedliche Möglichkeiten zum Triggern einer Funktion bereitgestellt werden, wie dies beispielsweise in Hauptmenü, Werkzeugleiste, Kontextmenü oder durch Tastaturkürzel der Fall
ist. Unterschiedliche Komponenten (wie
JButton, JMenuItem, etc.) können dieselbe
Action referenzieren. Die Eventbehandlung
kann dadurch an zentraler Stelle erfolgen und
Beschreibung, Icon, Tooltip etc. müssen nicht
jedes Mal angegeben werden, sondern werden
aus der gemeinsamen Action-Instanz gelesen.
Hinweise:

Bitte informieren Sie sich über die
Verwendung anonymer Klassen zur
Implementierung von Eventhandlern
Menü- und Werkzeugleiste
Im Kommentar zu createMenuBar() sind
alle möglichen Aktionen aufgelistet. Erweitern
Sie createActions() um entsprechende ActionInstanzen (noch ohne Funktionalität). Verwenden Sie dabei bitte sinnvolle, im Programmskelett mitgelieferten, Icons. Füllen Sie
mit diesen Actions das Menü und die Toolbar,
und passen Sie ihre Buttons an, damit diese
um ebenfalls auf denselben Aktionen arbeiten.
Da die beiden Aktionen zum Hinzufügen und
Löschen von Einträgen sehr wichtig für das
Programm sind, sollen diese in der Toolbar
und dem Menü leichter zu finden sein. Fügen
Sie dazu einen Trenner (Separator) vor den
beiden Aktionen ein.
Funktionalität hinzufügen
Das bisher Beschriebene behandelte im Wesentlichen das Beschreiben des Aussehens. Im
Folgenden wird nun die Funktionalität des
von Ihnen zu entwickelnden Noten-Rechners
beschrieben. Dazu werden Sie vor allem die
actionPerformed()-Methoden der Actions
und die Methoden im MarkTreeModel anpassen müssen.
Prüfungen einfügen, bearbeiten und löschen
Vervollständigen
Sie
die
Methoden
„addNode“, „deleteNode“, und „setValueAt“ in
MarkTreeModel so, dass die folgenden Anforderungen erfüllt sind:
4
Die Prüfungen sollen vom Benutzer des Notenrechners selbst angelegt und auch wieder
gelöscht werden können. Die Prüfungen sollen in beliebiger Tiefe geschachtelt werden
können, so dass die Notenberechnung über
mehre Ebenen stattfinden kann. Neue Prüfungen sollen jeweils als Kindknoten der aktuell ausgewählten Prüfung angelegt werden. Ist
keine Prüfung ausgewählt, so soll die neue
Prüfung als Kindknoten die Baum-Wurzel
angelegt werden.
Zu jeder Prüfung sollen der Prüfungsname, die
in der Prüfung erreichte Note und die Wertigkeit der Prüfung erfasst werden können. Der
Prüfungsname kann ein beliebiger Text sein.
Die Note soll als positive, reelle Zahl erfasst
werden und zwischen MIN_MARK und
MAX_MARK liegen. Noten wie 2+, 2-, B und
„gut“ können außer Acht gelassen werden. Die
Wertigkeit einer Prüfung gibt an, mit welchem Anteil die Prüfungsnote in die Note der
übergeordneten Prüfung einfließt. Die Eingabe der Wertigkeit soll möglichst frei gestaltet
sein, so dass z.B. bei drei Prüfungen, die laut
Prüfungsordnung im Verhältnis 1:1:4 zu einer
Note zusammengerechnet werden, dies auch
so eingegeben werden kann (also: Wertigkeit
für Prüfung 1 = 1, Wertigkeit für Prüfung 2 = 1,
Wertigkeit für Prüfung 3 = 4). Allerdings
brauchen auch für die Wertigkeit nur positive,
reelle Zahlen in Betracht gezogen werden.
Eingabe und Änderung von Prüfungsnamen,
Noten und Wertigkeiten soll direkt in der
Baum-Ansicht möglich sein. Wird ein ungültiger Wert eingegeben, so soll eine passende
Benutzerinformation erscheinen und der Wert
auf den vorherigen zurückgesetzt werden.
Bevor eine Prüfung wirklich gelöscht wird, soll
eine aussagekräftige Sicherheitsabfrage angezeigt werden, sodass der Benutzer die Möglichkeit hat, das Löschen der Prüfung noch
abzubrechen. Die Wurzel des Baumes darf
natürlich in keinem Fall gelöscht werden.
Wurde vor Anstoßen der Löschen-Aktion
keine Prüfung ausgewählt, soll eine passende
Benutzerinformation erscheinen.
Wichtiger Hinweis: Das MarkTreeModel hat
keine Möglichkeit die aktuell ausgewählte
Prüfung zu identifizieren. Sie sollten also in
der actionPerformed() Methode bereits den
JXTreeTable nutzen um den selektierten Knoten aus der Hierarchie-Spalte zu holen.
Noten berechnen
Der Notenrechner soll zwei mögliche Notenberechnungen erlauben:
1.
Berechnung einer Gesamtnote aus den
Noten und Gewichtungen der untergeordneten Noten
2. Berechnung einer Teilnote anhand der
(gewünschten) Gesamtnote (nur direkter
Vaterknoten) und der Noten und Gewichte der schon gesetzten Teilnoten.
Um die Verwaltung von unbenoteten Scheinen zu ermöglichen, soll der Notenrechner
Teilnoten mit der Gewichtung 0 (oder ohne
gesetzte Gewichtung) bei der Notenberechnung ignorieren.
Die Berechnung soll auch über Hierarchiestufen hinweg funktionieren. Das heißt, wenn alle Noten in der untersten Hierarchiestufe und
alle Gewichtungen gesetzt sind, soll durch
einen einzigen Klick die Gesamtnote in der
obersten Hierarchiestufe (und dadurch alle
untergeordneten Noten) berechnet werden
können. Genauso soll im Szenario 2 bei nicht
gesetzten Teilnoten, zu denen allerdings eine
Gewichtung angegeben wurde, versucht werden, diese aus ihren untergeordneten Prüfungen zu berechnen (sofern solche existieren).
Treten während den Berechnungen Fehler auf,
z.B. wenn im 1. Berechnungsszenario für keine
der Kindprüfungen sowohl Note als auch Gewichtung definiert wurden oder im 2. Berechnungsszenario keine Gesamtnote angegeben
ist, so soll dies dem Benutzer mitgeteilt werden. Falls im 2. Berechnungsszenario die gewünschte Gesamtnote nicht mehr erreichbar
ist, so soll dem Benutzer die schlechteste und
beste noch erreichbare Note mitgeteilt werden.
Prüfungen ohne Noten oder Gewichtungen
sollen bei den Berechnungen ignoriert werden.
Vervollständigen sie die öffentlichen und privaten
Methoden
„calculateMarkFromChildren“
und
„calculateMarkFromParent“ entsprechend den
oben beschriebenen Anforderungen.
Datei speichern und laden
Die im Notenrechner eingetragenen Prüfungen sollen über die DOM-Schnittstelle in
XML-Dateien gespeichert und aus diesen wieder gelesen werden können. Der Pfad der
XML-Datei soll vom Benutzer selbst bestimmt
5
werden können (JFileChooser). Damit die
aktuellen Daten aus der Baum-Ansicht über
ein DOM in die XML-Datei gespeichert werden können, müssen Sie die Methode
„writeDOM“ erweitern um die Prüfungen zu
traversieren und in einem DOM zu speichern.
Anschließend serialisieren Sie den DOM in
eine
XML
Datei
(z.B.
mit
dem
LSSerializer). Zum Parsen einer zuvor gespeicherten
Datei
können
Sie
den
DocumentBuilder nutzen und anschließend
das
DOM
traversieren
um
das
MarkTreeModel aufzubauen. Erweitern Sie
dafür die Methode „readDom“.
Denken Sie dabei auch an passende Benutzerhinweise. Fügen Sie in die verwendeten DateiAuswahl-Dialoge jeweils einen Filter für XMLDateien ein.
Programm-Information
Ein Programm sollte immer Hinweise über
den Entwickler bzw. Hersteller geben. Im Notenrechner gibt es dafür einen Menüpunkt
„Info“ unter dem man einen „About-Dialog“
öffnen kann. In diesem steht allerdings noch
nicht viel drin.
Gestalten Sie den About-Dialog mit Hilfe von
HTML-Tags so, wie in Abbildung 3.
Informationen über die verwendbaren HTMLTags finden Sie im Qt Assistant im Abschnitt
„Supported HTML Subset“.
möglichen Sie die Angabe einer Sprache
(Locale) als Argument beim Programmstart.
Literatur
[1] Christian Ullenboom: „Java ist auch eine
Insel“, Aufl. 6, Galileo Computing, 2007,
erhältlich
als
eBook
unter:
http://www.galileocomputing.de/
openbook/javainsel6/
[2] Sharon Zakhour et al.: „The Java Tutorial“,
Prentice Hall, 2006, erhältlich als eBook
unter: http://java.sun.com/docs/books/
tutorial/
[3] The Swing Tutorial:
http://java.sun.com/docs/books/tutorial/
uiswing/index.html
[4] Java Platform Standard Edition 6 API:
http://java.sun.com/javase/6/docs/api/
[5] Java Internationalisierungs-Tutorial von
Sun:
http://java.sun.com/docs/books/tutorial/i
18n/index.html
Programmierrichtlinien
Bitte halten Sie sich beim Programmieren an
die nachstehenden Richtlinien – die Richtlinienkonformität geht in die Bewertung Ihrer
Lösung mit ein! Bitte halten Sie sich an die
Java Code Conventions! Sie finden sie unter diesem Link:
http://java.sun.com/docs/codeconv/
Sprache
Kommentare und sämtliche Bezeichner sind
in Englisch verfassen.
Zeilenlänge und Einrückung
Abb. 5 About-Dialog des Notenrechners
Internationalisierung
Internationalisierung ist heutzutage ein wichtiger Schritt bei der Programmentwicklung. In
Java werden lokalisierte Ressourcen, wie Zeichenketten, über sogenannte Property Dateien
bereitgestellt. Machen Sie von den Internationalisierungs-Mechanismen[5] in Java Gebrauch. Externalisieren Sie GUI-relevante
Strings in ein ResourceBundle (Eclipse bietet
hierfür einen Wizard an), übersetzen sie das
Property-File in eine andere Sprache und er-
Die Zeilenlänge darf 80 Zeichen nicht überschreiten.
Die Einrückungstiefe beträgt vier Leerzeichen.
Kurze Kommentare
Kurze Kommentare dienen zur Verbesserung
der Lesbarkeit des Codes:
if (a == 2) {
return TRUE; // special case
} else {
return isPrime(a); /* works
only for odd 'a' */
}
6
Der ersten Kommentar sollte beispielsweise
nicht lauten: /* if a=2 then return
true */.
Klassen-, Methoden- und Attributkommentare
Verwenden Sie die Javadoc Kommentare für
Klassen, Attribute und Methoden. Wenn Sie
über einer Deklaration „/**“ eingeben, erzeugt
Eclipse ein Dokumentationsskelett automatisch. Bei Methoden sind die Parameter zu
erklären (vorausgehende @param Anweisung). Weitere Informationen zu Javadoc finden Sie unter:
http://java.sun.com/j2se/javadoc/writingdocc
omments/index.html
/**
* Adds a new method to this model.
* @param modifiers values are +,#,* @param name name of the method
* @param params method parameters
* @param returnType type of the object returned by the method
* @return the new String
*/
public String addMethod(String modifiers, String name, String[] params,
String returnType) {...
Namenskonventionen

Generell: Bitte „CamelCase“ verwenden,
zum Beispiel CamelCaseLooksLikeThis.

Klassen und Interfaces: Einfache Substantive in UpperCamelCase.

Methoden und Attribute: Einfache Verben oder sprechende Bezeichnungen, in
lowerCamelCase.

Variablen: Möglichst kurze „sprechende“
Bezeichnungen
in
lowerCamelCase.

Konstanten: Großbuchstaben mit „_“ als
Worttrennzeichen wie zum Beispiel
static readonly int MAX_WIDTH =
100;
7
Fragenkatalog
Sie müssen mindestens die Hälfte der folgenden Fragen richtig beantworten, um das
Fachprktikum erfolgreich abzuschließen. Eine
Frage gilt dann als richtig beantwortet, wenn
genau die richtigen Antworten markiert sind.
Es können beliebig viele Antworten pro Frage
richtig sein, also auch keine oder alle.
Java
1.
Bei welchen der folgenden Swing-Klassen
handelt es sich um „top-level container“?
 javax.swing.JPanel
 javax.swing.JDialog
 javax.swing.Jframe
2. Wie heißt diejenige abstrakte Klasse, die
alle Klassen, welche graphisch auf dem
Bildschirm repräsentiert werden können,
erweitern?
 java.awt.Container
 java.awt.Window
 javax.swing.JComponent
 java.awt.Component
3. Wie wird das Layout von graphischen
Objekten, die wiederum weitere graphische Objekte enthalten können, in Java
festgelegt?
 Mit Hilfe sogenannter „Layout Manager“.
 Per Konvention.
 Indem für jede graphische Komponente die anderen hinzugefügt wird direkt
die Position in Pixelkoordinaten relativ zum entsprechenden Container
angegeben wird.
4. Welche Bedeutung hat die Angabe des
sogenannten „Classpath“ für die Java Virtual Machine?
 Er legt fest wo der „Class Loader“ nach
Klassen und Paketen suchen soll.
 Über den Classpath wird angegeben
wohin Klassen per default serialisiert
werden sollen.
 Der Classpath klassifiziert JavaBiliotheken nach den ihnen zugewiesenen Sicherheitsrichtlinien.
5. Durch Implementierung welcher Schnittstelle (Interface) lässt sich Funktionlität
die in Folge unterschiedlicher Benutzer-
interaktionen ausgelöst und in verschiedenen Controls zur Verfügung gestellt
werden soll, einheitlich zusammenführen?
 java.awt.event.ActionListener
 java.awt.event.ActionEvent
 javax.swing.Action
 java.awt.event.KeyEvent
Eclipse
6. Über welche Tastatenkombination lassen
sich in Eclipse markierte Code-Zeilen einbzw auskommentieren (Ctrl = Strg)?
 Ctrl-Shift-7
 Ctrl-Shift-c
 Ctrl-Shift-*
7. Über welche Tastatenkombination lassen
sich in Eclipse die Import-Statements
„aufräumen“ (Ctrl = Strg)?
 Ctrl-Shift-i
 Ctrl-Shift-o
 Ctrl-Shift-!
8. Über welche Menüs/Controls lässt sich in
Eclipse die „Java Perspective“ laden
 Window/OpenPerspective/(other/)Java
 „Open perspective“-Button auf der
Toolbar
 Shortcut Button für die „JavaPerspective“, wenn diese bereits zufor
geöffnet war.
Allgemeines
9. MVC steht im Kontext dieser Aufgabe für:
 Model-view-controller
 Multi-view-coordinator
 Multi-variant-connector
XML und XSD
10. Wie lautet die Adresse der offiziellen
Webseite für XML?
 http://www.w3.org/XML/
 http://de.selfhtml.org/xml/intro.htm
 http://de.wikipedia.org/wiki/Extensibl
e_Markup_Language
11. Welches XSD-Konstrukt definiert eine
Auswahl möglicher untergeordneter
Tags?
 maxOccurs="unbounded"
 <xsd:choice>
 <xsd:complexType>
8
Bewertungskriterien
Punkte
Der komplette Quellcode ist standardkonform und objektorientiert. Er enthält keine
offensichtlichen Speicher- und Ressourcenlecks oder offensichtlich semantisch falsch
verwendete Sprachkonstrukte.
1
Das Programm ist in sinnvoller Weise dokumentiert, insbesondere existieren Javadoc
Kommentare für alle Klassen, Methoden und Attribute.
1
Das Programm lässt sich ohne Speicherschutzverletzungen, Exceptions oder andere
Laufzeitfehler im VISGS-Pool ausführen. Das Programm befolgt die Programmierrichtlinien. Es lässt sich im VISGS-Pool mit den vorgegebenen Compiler-Einstellungen fehler- und warnungsfrei übersetzen.
1
Javadoc HTML Seiten wurden erstellt.
1
Es gibt ein Menü, eine Toolbar und zwei Buttons die alle Programmfunktionen anbieten. Auswählbare Funktionen in Menü, Toolbar und Kontextmenü haben dieselben
Namen, Icons, und Tooltips und beruhen auf Action Objekten.
4
Die Aktionen „New“, „Open“ und „Save“ lassen sich über die Short-Cuts „Strg+N“,
„Strg+O“ bzw. „Strg+S“ aufrufen. Alle Aktionen haben Access-Keys (Mnemonics)
1
Über die Aktion „Add“ können hierarchisch verschachtelte Prüfungen angelegt werden. Eine neu angelegte Prüfung erscheint als Kindknoten der aktuell ausgewählten
Prüfung bzw. als Kindknoten der Wurzel (wenn keine Prüfung ausgewählt wurde).
2
Die angelegten Prüfungen lassen sich direkt in der Baum-Ansicht editieren, dabei finden Wertprüfungen statt. D.h. für Noten werden nur reelle Zahlen zwischen
MIN_MARK und MAX_MARK akzeptiert, für Gewichtungen nur positive reelle Zahlen.
Bei Eingabe eines falschen Wertes erfolgt eine aussagekräftige Meldung und der ursprüngliche Wert wird wiederhergestellt.
3
Angelegte Prüfungen können über die Aktion „Delete Node“ gelöscht werden. Vor dem
Löschen erfolgt eine sinnvolle Sicherheitsabfrage, über die der Benutzer die Aktion
bestätigen oder abbrechen kann. Ist keine Prüfung zum Löschen ausgewählt, erscheint
eine passende Meldung. Der Wurzelknoten kann nicht gelöscht werden. Beim Versuch
das zu tun, erscheint eine aussagekräftige Meldung.
2
Beide Möglichkeiten der Notenberechnung ermitteln die richtigen Werte und funktionieren über Hierarchie-Ebenen hinweg. Prüfungen ohne Gewichtungen oder Noten
werden ignoriert. Im Szenario 2 erscheint eine Fehlermeldung wenn keine Note für die
übergeordnete Prüfung angegeben wurde. Im Szenario 1 erscheint eine Meldung, wenn
für keine der Kindprüfungen sowohl Gewichtung als auch Note definiert wurden.
4
Die eingegebenen Daten können an einer vom Benutzer gewählten Stelle gespeichert
werden. Die gespeicherten Dateien enthalten die richtigen Werte.
3
Wurde eine Datei an eine Stelle gespeichert, so können Änderungen durch die Aktion
Speichern wieder in dieselbe Datei geschrieben werden (ohne erneute Pfadauswahl).
0.5
Wird die Aktion Speichern gewählt wenn noch kein Dateipfad festgelegt wurde, erscheint ein Datei-Auswahl-Dialog.
0,5
Die gespeicherten Dateien können wieder geladen werden.
1,5
In den Datei-Auswahl-Dialogen ist ein Filter für XML-Dateien voreingestellt.
0,5
Sind Dateien, die geladen werden sollen, nicht lesbar oder Dateien, die geschrieben
werden sollen, nicht schreibbar, erscheinen sinnvolle Benutzerinformationen. Benut-
1
9
zerinformationen erscheinen auch, wenn die zu ladende Datei nicht als DOM geladen
werden konnte oder das root-Element nicht den Namen „MarkCalc“ hat.
Der Pfad von dem der aktuelle Baum geladen wurde bzw. wohin er zuletzt gespeichert
wurde, wird im Wurzelelement angezeigt.
0,5
Der About-Dialog ist ähnlich dem gezeigten Bild gestaltet.
0,5
Die gesamte Anwendung ist in mindestens 2 Sprachen verfügbar (alle Namen, Tooltips,
Dialoge, etc.). Die Sprache kann über ein Programmargument umgestellt werden. Die
Realisierung beruht auf Resource Bundles.
2
Gesamtpunktzahl
30
10
Herunterladen