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
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:
- 011000012 = 6116 = 9710: Dieser Zahlenwert den Kleinbuchstaben "a" (ASCII 7bit)
- ü, ö, ä sind Sonderzeichen in Extended ASCI 8bit
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 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
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 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 Click: ActionEvent-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
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 Stage, Scene, Node 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