JAVA & Objektorientiertes Programmieren 2

Erweiterung der ersten Kartei

Erweiterung der ersten Kartei


Fichier Détails

Cartes-fiches 203
Langue Deutsch
Catégorie Informatique
Niveau Université
Crée / Actualisé 19.01.2017 / 09.01.2024
Lien de web
https://card2brain.ch/box/20170119_java_objektorientiertes_programmieren_2
Intégrer
<iframe src="https://card2brain.ch/box/20170119_java_objektorientiertes_programmieren_2/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

Was machen die Klassen Reader und Writer?

Unterstützen den I/O mit Unicode-Zeichen

Was machen die Klassen BufferedReader und BufferedWriter?

erhöhen die Performance durch Pufferung der Lese- und Schreibzugriffe

Was machen die Klassen InputStreamReader und OutputStreamWriter?

Sind Adapterklassen und ermöglichen die Kopplung von Byte-Datenströmen zu Zeichen-Datenströme

Was machen die Klassen FileReader und FileWriter?

Sie vereinfachen den Zugriff auf Text-Dateien, aber Achtung: Nutzen das Default-Encoding!

Was macht die Klasse PrintWriter?

Ermöglicht die Ausgabe von Unicode-Zeichen

Was macht dieser Quellcode?

Die folgende Methode schreibt zwei Zeilen in eine Datei (Zeichen-Datenströme)

Was macht dieser Quellcode?

Diese Methode liest alle Zeilen einer Datei und gibt sie auf der Konsole aus (Zeichen-Datenströme)

Sofern man (nur) das Default-Encoding des jeweilgen Betriebssystems verwenden will, kann man den Code vereinfachen. Wie sieht der Code dann aus für Schreiben?

(siehe Bild)

Sofern man (nur) das Default-Encoding des jeweilgen Betriebssystems verwenden will, kann man den Code vereinfachen. Wie sieht der Code dann aus für Lesen?

(siehe Bild)

Sofern man (nur) das Default-Encoding des jeweilgen Betriebssystems verwenden will, kann man den Code vereinfachen. Wo könnten hier aber Probleme auftauchen (siehe Bild)?

Bei plattformübergreifendem Einsatz kommt es damit aber zwangsläufig zu Encoding-Problemen! z.B. Schreiben mit Linux, Einlesen mit Windows 10! 

Darum verwenden wir für Quellcode auch immer UTF-8

Sobald wir auf einen Computer Texte darstellen, brauchen wir was?

Eine Zuordnung, welche Zahlenwerte (bytes) welches Zeichen repräsentieren sollen.
Beispiele:

- 01100001= 6116 = 9710: Dieser Zahlenwert den Kleinbuchstaben "a" (ASCII 7bit)
üöä sind Sonderzeichen in Extended ASCI 8bit

Wie funktioniert UTF-8?

(siehe Bild)

Was ist das Prinzip von WORA?

Write once, run anywhere:

Ohne Neukompilierung ist das Programm auf verschiedenen Betriebssystemen direkt lauffähig

Was für Unterschiede müssen berücksichtigt werden, um WORA einzuhalten?

- Dateisysteme mit unterschiedlichen Attributen
- Pfaddarstellung und Laufwerke (C:\ temp vs. /tmp)
- Unterschiedliche Byteorder (Little-Endian vs. Big-Endian)
- Zeilenumbrüche: CR+LF vs. LF+CR cs LF
- Zeichensätze/Encodings: ISO-8859-1, cp1252, UTF-8,...

Welche Hilfsklassen gibt es für Datei-Handling und wie sehen sie aus?

Die Klasse java.io.File (hat nicht direkt mit Ein- und Ausgabe von Streams zu tun)

File stellt plattformunabhängige BS-Funktionen im Zusammenhang mit Dateien und Verzeichnissen bereit
- Oft muss man aber auch plattformspezifische Unterschiede berücksichtigen, z.B. unterschiedliche Path-Separatoren: ; versus :

Was sind grundsätzliche Überlegungen bei der Auswahl zwischen Byte- oder Zeichenstrom?

Byte-Datenströme: Effizient und kompakt, aber binär.
Zeichen-Datenströme: Für Menschen lesbar.

Bei Zeichen-Datenströme das Encoding beachten. Bei Multi-Plattform-Anwendungen sollte unbedingt ein explizites Encoding eingesetzt werden.

Sauberes Exceptionhandling ist speziell bei I/0-Streams wichtig.

GUI-Komponenten passen hervorragend in die objektorientierte Programmierung. Erkläre.

Sie haben einen Zustand und ein Verhalten, lassen sich sehr gut wiederverwenden

Was sind elementare GUI-Komponente?

- Frame/Window
- Label
- TextField
- Button
- List
- Checkbox
- Radiobutton
- Slider

Was sind Beispiele für Container?

Container können eine beliebige Anzahl Komponente enthalten (Composite Pattern, GoF)

- Window (Frame) - die Grundfläche einer GUI-Applikation
- Panels - eine (nicht zwingend visuelle) Hilfsfläche zur Zusammenfassung von Einzelkomponenten

Wie sieht das Objektdiagramm aus (GUI)?

(siehe Bild)

Reduziertes Diagramm, zur Illustration der hierarchischen Beziehungen.

Wie sieht das Klassendiagramm aus (GUI)?

(siehe Bild)

Composite-Pattern (Kompositum) nach GoF:
Ein Container kann Komponenten oder aber wiederum Container enthalten.

Fenstersysteme haben sehr unterschiedliche Desktop-Auflösungen, Schriftgrössen und -arten, Abstände, Ränder, usw.

Pixelgenaue Positionierung und Dimensionierung der Komponenten ist längst keine adäquate Lösung mehr! Was ist die Lösung?

Konzept der Layouts mit Constraints

Was ist das Konzept der Layout-Manager?

Man beschreibt die Anordnung der einzelnen Elemente durch die Organisation mittels sogenannter Layouts

Nenne drei Layouts

(siehe Bild)

Nenne Beispiele von Eigenschaften, welche im Layout-Manager definiert werden

- Die verschiedenen Layout-Manager werden häufig mit- und ineinander (hierarchisch) verknüpft.
- Können mit Bedingungen (Constraints) konfiguriert werden, welche Abstände und Ränder für und um Komponenten festlegen.
- Jedes Element hat eine minimale, optimale und maximale Grösse, abhängig von verwendeten Schriften und Auflösungen.
- Die Elemente organisieren sich innerhalb des Layouts selber und adaptieren ihre Grösse bei einem Resize (Grössenveränderung z.B. eines Dialoges/Fensters)
- Herausforderung: Benötigt einiges an Planung und Erfahrung!
- Kein schnelles «pinseln» von Dialogen!

Was ist rein sequenzielle Programmierung?

Sequenzielle Aneinanderreihung von einzelnen Anweisungen (Start und Ende in der main()-Methode)

Laufen in einer vorgesehen Abfolge dennoch immer genau gleich der Reihe nach ab.
Entspricht häufig dem klassischen EVA-Prinzip (Eingabe, Verarbeitung und Ausgabe)

Was ist ereignisgesteuerte Programmierung?

Sehr typische Technik für GUI-Programmierung
- Die meiste Zeit wartet das Programm
- Erst wenn ein Ereignis (Event) eintritt, geschieht etwas (Tastenklick, Maus, Touch, etc)
- Ereignis löst dann eine (vor-)bestimmte Aktion aus

Die GUI-Programmierung funktioniert in Java massgeblich mit dem Observer-Pattern per Event/Listener-Modell. Dadurch erreich man eine möglichst lose Kopplung zwischen was?

Dem Auslöser einer Aktion und der Aktion selbst

Was ist der ActionListener?

Ein populärer (GUI-)Event in Java, der für unmittelbare Aktionen wie z.B. das Drücken eines Buttons genutzt wird:
- Event-Quelle: z.B. Button-Objekt
- Event ClickActionEvent-Objekt wird gefeuert
- Event-Verarbeitung: Beliebiges Objekt, welches das ActionListener-Interface implementiert hat, und in der Methode actionPerformed(...) auf Ereignis reagieren kann

Bei der GUI-Programmierung kommen viele Dinge zusammen:
Man steuert, welche Daten, auf welche Art wo und wann dargestellt werden.

Gemäss SRP versucht man mind. diese 3 Teile möglichst voneinander zu trennen.

Wie?

Mit MVC (Model-View-Control)
- Model: eigentliche Datenobjekte, z.B. Person
View: GUI-Komp. welche Daten anzeigt
Control: Steuerung, welche das Ganze koordiniert

Was ist die Grundidee von MVC?

Model: ist völlig unabhängig und wird nur verwendet
View: verschiedene Varianten für dasselbe Model möglich
Control: Verbindet Modell und View, steuert und koordiniert

Was ist MVP?

Model, View, Presenter (GUI-Konzept)
Model: völlig unabhängig und wird nur verwendet
View: verschiedene Varianten für dasselbe Model möglich
Presenter: Vermittelt zwischen Modell und View

Welche drei GUI-Frameworks kennt Java?

AWT (Seit Java 1.0)
Swing (Seit Java 1.2), Weiterentwicklung eingestellt, aber grösste Verbreitung
JavaFX (Seit 1.8), Entwicklung seit 2008, modernstes Framework

Was macht AWT und was ist ihr Hauptproblem?

Abstract Window Toolkit, wrapped die nativen GUI-Komponenten des jeweiligen BS!
- dadurch schlank, einfach und effizient
- Look&Feel entspricht voll der Zielplattform

Hauptproblem: Weil Java-Programme auf allen Plattformen laufen müssen, wird nur die kleinste gemeinsame Menge der auf allen Plattformen verfügbaren GUI-Komponenten unterstützt!

- Eingeschränkte Möglichkeiten
- auf einzeln. Plattformen fehlen evtl. für typische essentielle Komponenten

Was ist anders in Swing als in AWT?

Java implementiert für Swing ein eigenes Set von umfangreichen leichtgewichtigen GUI-Komponenten. Quasi eine eigene Oberfläche mit eigenem Look&Feel
- Java-Applikationen sahen nun auf allen Plattformen identisch aus

Was ist in JavaFX anders als in Swing?

Implementiert wie Swing eigenständige Komponenten, wurden aber stark erweitert und die API ist mehr "Nutzergetrieben"
- Vereinfachtes, stark modernisiertes Programmiermodell (Stage und Scenes)
- Möglichkeit GUIs per FXML zu definieren
- Möglichkeit Darstellung mittels Stylesheets (CSS) anzupassen (ohne Codeänderung oder Neukompilierung)

Weshalb ist JavaFX im Vergleich zu Swing ein echtes Framework?

Weil es den Aufbau eines GUIs deutlich mehr abstrahiert, vereinfacht und automatisiert!

In JavaFX wurde das Konzept durch StageSceneNode und Scene Graph, stark vereinfacht. Inwiefern?

Stage ist eine Analogie zum Frame (Window)
Scene ist eine Analogie zum (Root-)Panel (Content)
Node ist eine Basisklasse für alle GUI-Elemente / Komponenten
Scene Graph ist eine logische hierarchische Datenstruktur welche alle Nodes enthält

Was erlaubt FXML?

Es erlaubt (mit JavaFX) das Design der Visualisierung (GUI) vollständig von der eigentlichen Programmierung zu trennen

Was ist FXML?

FXML ist eine auf XML basierende Definition für User-Interfaces