Fragen Antworten Java Programmierung

Fragen und Antworten Java Programmierung
1 Was versteht man unter Programmiertechnik?
Methoden und Prinzipien zur Erstellung von Computerprogrammen.
2 Warum wird Event-Handling beim Graphical User Interface verwendet?
Event Handling wird zur Interaktion zwischen Nutzer und Applikation verwendet. Der Computer muss auf die
Nutzereingaben wie das drücken der ESCAPEtaste reagieren können.
3 Wie sieht die Abrufabfolge beim Event-Handling aus?
- Während eine Oberfläche angezeigt wird, liegt Programmsteuerung bei Java-Fenstersystem
- Tritt das Event ein, informiert das Fenstersystem zuerst die Komponente (z.B. Button)
‐ die Komponente informiert anschließend alle ihre angemeldeten Listener
- Programmsteuerung wird an unseren Code abgegeben
‐ am Ende von actionPerformed kehrt Programmsteuerung zurück zum Fenstersystem
4 Was ist ein Event?
Ein Event ist eine Aktion, die der Nutzer beim Arbeiten mitgrafischen Oberflächen auslösen kann.
5 Was ist eine Ergebnisquelle?
Eine Ereignisquelle auch Event Source ist jede beliebige Komponente einer grafischen Oberfläche.
6 Welche Implementierungsmöglichkeiten gibt es beim Listener?
1.Realisierung der Listener-Klasse als innereKlasse
2.Realisierung der Listener-Klasse als anonymeKlasse
3.Container-Klasse wird selbst zur Listener-Klasse
4.Realisierung der Listener-Klasse als separate Klasse
7 Welche Komponenten sind am Event-Handling beteiligt?
1. Quelle das heißt GUI
2. Event : der Nutzer interagiert, z.b. durch klicken eines
Taste/Buttons
3. Listener: Swing/AWT stellt Listener-Interfaces zur Verfügung
8 Inwieweit hilft Swing bei der Unterstützung beim Event-Handling?
1. Schritt : Button wird vom Nutzer angeklickt
2. Schritt: nimmt das Event entgegen(=> Java Fenstersystem )
3. Schritt: leitet Event weiter
4. Schritt: die Komponente Button informiert dann den Listener
5. Schritt: der Listener implementiert
9 Welche Aufgaben gibt es beim Event-Handling?
Eine Aufgabe ist das ein passendes Listener-Interface implementiert werden muss.
Eine weitere Aufgabe ist das der Listener bei einer Komponente z.b. Button angemeldet werden muss.
Die Komponenten informieren alle angemeldeten Listener, wenn Event auftritt.
10 Was ist ein Getter(Get bzw. Gib-Methode)?
Ein Getter ist ein Zugriffsmethode, die eine Eigenschaft eines Objekts abfragt, auch Abfragemethode genannt.
11 Was ist ein Setter( Set bzw. Setze-Methode )?
Ein Setter ist eine Zugriffsmethode, die eine Eigenschaft eines Objekts(Werte von Instanzvariablen) ändert. Es liefert
keine Werte zurück.
12 Was sind die Aufgaben und Vorteile eines Java-Compilers?
- Hinweisen auf Syntaxfehler
- Optimierung des Quelltextes
- Übersetzung von Java-Quelltext (Input) in Bytecode (Output)
- Liefert ein maschinennahes Zwischenformat
- ist plattformunabhängig und damit portabel
13 Was ist ein Interpreter?
Ein Programm, das Quellcode während der Laufzeit einliest, analysiert und ausführt.
14 Was sind einige Vorteile von Java als Interpretersprache?
- Keine direkte Ausführung auf echter Maschine
- Interpretation auf virtueller Maschine bewirkt, die Unabhängigkeit von der Maschine
- Java-Bytecode-Interpreter = Java-Virtuelle-Maschine (JVM)
- Effizienzsteigerung durch Just-in-time-compilation (JIT)
15 Was ist ein Computerprogramm?
Folge von Anweisungen, die auf einem Computer zur Ausführung gebracht werden können, um eine bestimmte
Funktionalität zu erzeugen.
16 Was ist ein Programm?
Eine Folge von Anweisungen
17 Was ist ein Algorithmus?
Eine fest definierte Folge von (einfachen) Anweisungen zur Lösung eines konkreten Problems. (Vgl. Kochrezept)
18 Was sind die Eigenschaften bzw. Anforderungen an einen Algorithmus?
- Bestimmtheit
- Effektivität
- Input
- Output
- Endlichkeit
19 Was versteht man unter Datenstruktur? Nenne Beispiele!
Vorgegebener Aufbau zur Speicherung von Daten.
- legt Möglichkeiten für Zugriff und Verwaltung fest
- Beispiele: Graph, Liste, Baum
- legt fest WIE etwas gespeichert wird, nicht WAS
20 In welchen Punkten unterscheiden sich menschliche Sprache und Computersprache?
21 Warum nutzt man Programmiersprachen?
- Komplexe Befehle lassen sich nicht / schwer in Maschinensprache programmieren.
- Das Übersetzen der menschlichen Sprache in Maschinensprache wäre zu komplex und nicht eindeutig.
22 Wofür ist Ada Lovelace berühmt.
Schreiben des ersten Computeralgorithmus (1843).
23 Was zeichnet Assemblersprachen aus?
- hardwareabhängig
- wenig Abstraktion (d.h. nah an der Maschinensprache)
24 Was ist Java?
a) Entwicklungsplattform zur Entwicklung und Ausführung von Programmen
b) objektorientierte Programmiersprache
25 Was sind die Vorteile von Java?
- einfache, klare, objektorientierte Konzepte
- die Programmiersprache des Internets (Web-Services, E-Commerce, E-Banking, Applets, Servlets,...)
- große Auswahl an Programmbibliotheken für
- grafische Benutzeroberflächen
- Computerkommunikation
- verteilte Anwendungen
- Datenbanken
- hohe praktische Relevanz
- plattformunabhängig
26 Wofür eignet sich Java weniger?
- hohe Echtzeitperformance (Computerspiele,...)
- individuelle Benutzungsinterfaces
- Zugriff auf Hardware
- CD auswerfen
- Zugriff auf USB
- Bildschirm auf der Textkonsole löschen, Curser positionieren und Farben setzen
- Verknüpfungen löschen
27 Wie ist der Weg vom Programm zur Ausführung (unter Verwendung von Java)?
1. Programmierung
-> Java Code
2. Übersetzung durch Compiler
-> Bytecode
3. Interpretation durch Interpreter
-> Ausführung
28 Was ist ein Compiler?
=Übersetzer. Programm, das ein Quellprogramm in ein Zielprogramm (Assemblersprache, Bytecode oder
Maschinensprache) übersetzt (Kompilierung).
29 Woraus besteht ein Java-Programm?
aus einer oder mehreren Klassen
30 Wie ist eine Java-Klasse aufgebaut?
- als Block
- besteht aus beliebig vielen Membern
- Member kann Methode oder Variable sein
Man kann sich eine Klasse als "Gerüst" oder "Schablone" vorstellen.
31 Was ist der Unterscheid zwischen Methoden und Variablen?
Methode = Verhalten einer Klasse (Was kann die Klasse?)
Variable = Daten einer Klasse (Was weiß die Klasse?)
32 Was sind die Eigenschaften von Instanzen?
- Von einer Klasse können beliebig viele Instanzen erzeugt werden.
- Daten sind je Instanz variabel -> Variablen
- Verhalten ist für alle Instanzen einer Klasse gleich -> Methoden
33 Was bezeichnen NAMEN in einem Programm? Woraus bestehen sie? Was ist bei der Namensvergabe zu beachten?
- bezeichnen "Dinge", z.B. Variablen, Methoden, Typen
- bestehen aus Buchstaben, Ziffern, '_' und '$'
- zu beachten:
- Erster Buchstabe muss Zeichen, Buchstabe, '_' oder '$' sein
- case-sensitive (Groß-/Kleinschreibung beachten!)
34 Was sind Schlüsselwörter und was kennzeichnet sie?
- spezielle Namen
- sind von Java reserviert und dürfen nicht für eigene Namen genutzt werden
- werden zur Einleitung oder Hervorhebung von Programmteilen genutzt (int, class, new, void, for,...)
- werden in Java immer klein geschrieben
35 Nenne einige Java-Schlüsselwörter!
36 Wie ist eine Variable aufgebaut?
<TYP> <BEZEICHNER> = <WERT>
Die Wertzuweisung ist dabei optional.
37 Was ist die Aufgabe der Typ-Deklaration und welche Arten von Typen gibt es?
Legt fest, von welcher Art die Daten sein können, die eine Variable annimmt.
38 Was sind primitive Datentypen und welche gibt es?
in Java integrierte Schlüsselwörter.
Eselsbrücke für die Reihenfolge der Zahlentypen:
Beiß kurz ins lange Floß - zweimal!
39 Was kennzeichnet Zeichen?
- Primitiver Typ char basiert auf Unicode
- wird mit einfachen Hochkommata '...' initialisiert
- zur Verwaltung einzelner Zeichen gedacht
40 Was kennzeichnet eine statische Typisierung?
- Java ist statisch typisierte Sprache (mögliche Werte sind vorbestimmt)
- größere Fehlersicherheit
- höhere Laufzeiteffizienz
- geringere Flexibilität
- aufwendige Compiler
- Es gibt auch dynamisch typisierte Sprachen (Ruby, PHP).
41 Was ist bei der Wahl eines Bezeichners für eine Variable zu beachten?
- beliebiger, eindeutiger Name
- kein Java-Schlüsselwort verwenden
- Kann $, _ und Ziffern enthalten, sollte aber vermieden werden
- Immer mit einem Buchstaben beginnen
42 Was versteht man unter Variablendeklaration?
- Vorgang der Variable einen Typ zuzuordnen
- legt Wertebereich und Typ fest
- Aufbau:
- macht Variable im Programm bekannt
43 Was ist ein Literal? Nenne Beispiele für unterschiedliche Typen!
Konstanter Ausdruck
- kann verwendet werden, um Variable zu initialisieren
- Wert, der einer Variablen zugewiesen wird
44 Was kennzeichnet einen String?
- kein primitiver Typ, sondern Referenzdatentyp
- Verwaltung nicht änderbarer Zeichenketten
Sammlung von Zeichen des Typs char
- Deklaration analog zu Variablen des primitiven Typs
- Initialisierung mit Anführungszeichen "..."
45 Was sind Operatoren, Operanden und Operationen?
- Operatoren verknüpfen Operanden
- Operanden sind Variablen oder Literale
- Operation = Anwendung eines Operators auf mindestens einen Operanden
- jede Operation liefert einen Ergebniswert
- Operatoren sind typisiert, d.h. erwarten einen Operanden eines bestimmten Typs
46 Welche Operatorengruppen gibt es in Java?
- arithmetische Operatoren
- Vergleichsoperatoren
- logische Operatoren
- bitweise Operatoren
- Zuweisungsoperatoren
- bedingte Operatoren
- New-Operator
47 Von welchen Operatoren-Arten spricht man abhängig von der Anzahl der Operanden?
- unäre (Bsp.: Vorzeichenoperatoren)
- binäre (0, 1)
- ternäre (if, then, else)
48 Welche arithmetischen Operatoren gibt es?
49 Von welchem Datentyp sind Operanden und Ergebnis bei arithmetischen Operationen?
Operanden:
- entweder numerisch
(byte, short, int, long, float, double)
- oder (Ausnahmefall) char
Ergebisse:
- immer numerisch
(double, float, long, int)
50 Welche logischen Operatoren gibt es?
Was ist ihr Zweck?
Von welchem Typ sind Operanden und Ergebnis?
- zum Vergleich von Wahrheitswerten
- Operanden- + Ergebnistyp: boolean
51 Wodurch zeichnen sich Vorzeichenoperatoren aus?
Zeige ein Beispiel!
- unäre Operatoren (beziehen sich auf einen Operator)
- wie in Mathematik (Plus/Minus-Zeichen)
Beispiel:
float hoehe = 1.25f;
float hoeheAlternativ=+1.25f
int negativHohe=-hoehe;
int temperatur=-5;
/ / ist identisch mit...
/ /...dieser Variante
/ /Operant ist hier eine Variable
/ /... hier das Literal 5
-binäre Operatoren (zwei Operanden)
- Platzierung zwischen Operanden (wie in Mathe)
Beispiel:
int summe = 3 + 4; / / 3 + 4 wird berechnet und summe zugewiesen
int produt = summer * summe; / /operanden sind diesmal Variablen
52 Was ist der Modulo-Operator?
Modulo-Operator (%) bestimmt ganzzahligen Divisionsrest
ACHTUNG: Modulo-Rechnung und Division können dasselbe Ergebnis erzielen, sind aber grundlegend verschieden!
53 Was sind Inkrement/Dekrementoperatoren?
- implizite Wertveränderung einer Variablen
zb:
int zaehler = 0;
zaehler = zahler + 1; is das selbe wie zaehler++
- kann nicht auf Literale angewandt werden, nur auf Variablen!
- können vor und nach Operand platziert werden
- Verarbeitungsreihenfolge ist aber unterschiedlich!
- Preinkrement/dekrement ändert Wert nachdem Weiterverarbeitung
54 Welche Vergleichsoperatoren gibt es?
Was ist ihr Zweck?
Von welchem Typ sind Operanden und Ergebnis?
- binäre Operatoren
- zum Wertevergleich
- Operanden
entweder numerisch
oder char
- Ergebnis
immer boolean
55 Welche Zuweisungsoperatoren gibt es?
Was ist ihr Zweck?
Von welchem Typ sind Operanden und Ergebnis?
- binäre Operatoren
- Kurzschreibweise
- Operatoren sind
- numerisch
- char
- Objektreferenzen (nur einfache Zuweisung!)
56 Wie bestimmt sich die Auswertungsreihenfolge bei mehreren Operatoren?
- durch Assoziativität (bei Operatoren gleicher Priorität)
- durch Prioritäten:
57 Welche Arten von Typumwandlungen gibt es? Wie unterscheiden sie sich?
Implizite Typumwandlung
Werte kleineren Typs werden an Werte größeren Typs übergeben
-> automatische Konvertierung durch Java
Explizite Typumwandlung
- Konversion von Werten größeren Typs in kleineren Typ wird erzwungen.
- Kann zu Informationsverlust führen.
58 Wie sind Klassen und Methoden strukturiert?
- in Blöcken
- "Methoden-Böcke" können sich gegenseitig aufrufen
- "main" ruft den ersten Methoden-Block auf.
- Methoden = untergeordnete Struktureinheiten einer Klasse
59 Warum nutzen wir Methoden?
1) Wiederverwendbarkeit
2) Definition benutzerspezifischer Operationen
3) Strukturierung von Programmen
4) Lokalität
60 Wie heißt der Teil einer Methode, die auszuführende Anweisungen beinhaltet?
Die Anweisungen, die in einer Methode ausgeführt werden sollen, stehen im sog. Rumpf.
61 Woraus bestehen Klassen?
Klassen bestehen aus verschiedenen Membern.
Diese Member können METHODEN (Verhalten) oder VARIABLEN (Daten) sein
62 Was sind die wichtigsten Dinge, die man über MAIN-METHODEN wissen sollte?
- JVM startet ein Programm immer in der main-Methode
- main-Methode ist eine Ausnahme, da sie von der JVM aufgerufen wird
- Signatur (Aufbau) ist entscheidend, damit die JVM die Methode findet!
public static void main (String[ ] args) {
}
(Signatur ist hier alles vor der ersten geschweiften Klammer)
- main-Methode: immer innerhalb einer Klasse
- Klasse mit main-Methode = "Start-Klasse"
NUR Start-Klassen besitzen "main" !!!
63 Wie ist eine Methode aufgebaut?
Was bedeuten die einzelnen Komponenten von Kopf u. Rumpf?
Als Beispiel eine main-Methode:
public static void main (String[] args) {
// Inhalt
}
- Signatur der Methode ( auch Kopf genannt)
- Signatur indentifiziert Methode eindeutig
(gilt für alle Methoden in Java)
-Rumpf beinhaltet Anweisungen
(gilt auch für alle Methoden in Java)
public an erster Stelle
= Modifizierer (Schlüsselwort)
macht Methode öffentlich
d.h. können von anderen Klassen aufgerufen werden
main sollte ausschließlich von JVM aufgerufen werden
static an zweiter Stelle
= Modifizierer (Schlüsselwort)
macht Methode statisch verfügbar
d.h. Aufrufer (bei main-Methode: JVM) kann Methode aufrufen, ohne Objekt der Klasse erzeugen zu müssen
void an dritter Stelle
= spezieller primitiver Datentyp(Schlüsselwort)
Rückgabetyp der Methode
d.h Methode gibt einem Aufruf keine Antwort
Methoden können ihrem Aufrufer prinzipiell eine Antwort geben
Hier benötigt der Aufrufer (bei einer main-Methode ist der Aufrufer die JVM) keine Antwort; also ist der Rückgabetyp
"void".
(void = engl. = Lücke)
main an vierter Stelle
= Bezeichner der Methode (quasi reservierter Begriff)
- keine andere Methode darf main heißen !!!
Parameterliste in runden Klammern nach Methoden-Bezeichner
main hat einen Parameter namens args(argument string)
JVM kann bei Programmstart Informationen an Programm geben
64 Was sind Kontrollstrukturen bzw. was sind ihre Aufgaben?
- steuern Ablauf, d.h legen Ausführungsreihenfolge fest
- sind zusammengesetzte Anweisungen, bestehend aus mehreren einfachen, untergeordneten Anweisungen
- gehören zu wichtigsten Bestandteilen der Programmierung
=> Basis für jede Programm
65 Welche zwei Arten von Kontrollstrukturen gibt es und was unterscheidet sie?
Verzweigungen
welche Programmstrukturen werden ausgeführt ( "wenn-sonst")
Schleifen
Anweisungen werden wiederholt abgearbeitet ("solange-bis")
66 Welche zwei Arten von Verzweigungsanweisungen gibt es in Java und was unterscheidet sie?
if- Anweisung :
mächtiger als switch-case
switch-case- Anweisung:
performanter, in bestimmten Fällen eleganter
67 Aus welchen Elementen besteht eine if-Anweisung? Welche ergänzenden Konstrukte sind möglich?
if( <Bedingung> ) {
<Anweisung>
}
if-Schlüssel leitet if-Anweisung ein
<Bedingung> Ausdruck, der von Compiler ausgewertet wird
entweder "true" oder "false" -> "boolscher Ausdruck"
steht immer in runden Klammern
<Anweisung>: was soll gemacht werden, wenn Bedingung zutrifft?
in geschweiften Klammern als Block gekennzeichnet
Beispiel:
if( Kamin.temperatur <100) {
brennholz = neuesBrennholz();
Kamin.nachlegen(brennholz);
Kamin.Luftzufuhr.oeffnen();
}
if -Anweisung kann weitere Alternativzweige besitzen
else-if-Schlüsselwörter leiten weiteren Zweig ein
if-Anweisung kann am Ende Standardverhalten haben
else-Schlüsselwort leitet Standardverhalten-Zweig ein
keine Bedingung !!! Wird immer ausgeführt, wenn keine der vorherigen Bedingungen zutrifft.
<Anweisung>: Was soll gemacht werden, wenn Bedingung zutrifft?
If-Anweisung ist selbst auch eine Anweisung.
Schachtelung bei if-Anweisungen möglich!
68 Aus welchen Elementen besteht eine switch-case-Anweisung?
switch ( <Schalter> ) {
case <Konstante>:
<Anweisung>
}
switch-Schlüssel leitet Anweisung ein
Schalter-Ausdruck definiert den Schalter, der den Ablaufsteuert
in runden Klammern
muss immer Variable vom Typ int sein ( byte, short, char und enum auch möglich- werden vom Compiler in int
überführt)
case-Blöcke = einzelne Fallunterscheidungen
wird ausgeführt, wenn der Schlater den Wert der case-Konstante hat
in geschweiften Klammern
Standardfall (vgl. else-Zweig) durch default abgedeckt
Fälle müssen mit break ( Schlüsselwort) explizit beendet werden, ansonsten werden alle nachfolgenden Fälle mit
abgearbeitet.
69 Was passiert, mit Fällen ohne break?
switch-case hat "Durchfall"
-> Fall Through
d.h die nachfolgenden Fälle werden mit abgearbeitet
70 Ist es möglich switch-case-Anweisungen in if-Anweisungen zu überführen?
ja!
Jede switch-case-Anweisung kann in eine gleichbedeutenden if-Anweisung überführt werden.
Andersrum ist es jedoch nicht möglich, da eine if-Anweisung zu kompiliziert und verschachtelt agieren kann um sie auf
eine "einfache" switch-case-Anweisung runter zu brechen.
71 Was sind Schleifen ?
Kontrollstrukturen zur wiederholten Ausführung von Anweisungen
Anweisungen werden solange wiederhoilt, bis eine bestimmte Bedingung nicht mehr erfüllt ist
Alle Schleifen müssen eine Bedingung enthalten!
72 Welche 3 Möglichkeiten ginbt es in Java eine Schleife zu definieren?
while-Schleife (Prä-Bedingung)
do-while-Schleife (Post-Bedingung)
for-Schleife (Prä-Bedingung, zwei Varianten)
73 Wozu werden Schleifen benötigt?
zur kompakten Darstellung umfangreicher Aufgaben
Beispiel:
auflisten von Zahlen von 1 bis 100
was ist praktischer?
100 Befehle schreiben - oder - Verwendung einer Schleife
Bei einer Zählung von 1 bis 1000 wären ohne Schleife 900 Zeilen mehr zu schreiben ... mit einer Schleife nur 1 Zeichen ;)
74 Aus welchen 3 Elementen besteht die while-Schleife? Wie läuft die Schleife ab?
while ( <Bedingung> ) {
<Anweisung>
}
while-Schlüsselwort leitet while-Schleife ein
Bedingung: vom Compiler ausgewertet
entwerder true oder false
in runden Klammern
Anweisung
Was soll gemacht werden, wenn Bedingung zutrifft?
in geschweiften Klammern als Block gekennzeichnet
1) Schleife wird betreten
2) nach letzer Anweisung springt Schleife zurück zu Bedingung
3) Verlassen der Schleife, wenn Zustand des Progammes bezüglich der Bedingung irgendwann geändert wird
75 Aus welchen 3 Elementen besteht eine do-while Schleife?
do {
<Anweisung>
}
while ( <Bedingung> );
do-while-Schlüsselwort leitet Schleife ein
while steht hinter Anweisungsblock vor der Bedingung
Semikolon am Ende!!
Anweisung
Was soll gemacht werden, wenn Bedingung zutrifft?
in geschweiften Klammern als Block gekennzeichnet
Bedingung: vom Compiler ausgewertet
entweder true oder false
in runden Klammern
Bedingung wird am Ende der Schleife geprüft
-> jede do-while-Schleife wird mindestens ein mal durchlaufen
76 Aus welchen 5 Elementen besteht die for-Schleife?
for (<Initialisierung>; <Bedingung>; <Fortschaltung>) {
<Anweisung>
}
for-Schlüsselwort leitet for-Schleife ein
Initialisierung von Zähler-Variable
- immer nur einmal ausgeführt
- es können mehrere Initialisierungen vorgenommen werden
- Variablen müssen vom selben Typ sein
- nicht zwingend erforderlich!
Bedingung: boolscher Ausdruck
Fortschaltung Anweisung die nach Schleifeninhalt ausgeführt wird
- meist zur Fortschaltung der Zähler-Variable
- nicht zwingend erforderlich!
Anweisung: Was soll gemacht werden, wenn Bedingung zutrifft?
in geschweiften Klammern als Block
77 Wozu benötigen wir Sprünge ?
Schleifen springen automatisch am Anweisungsende zur Bedingung.
Sprünge können aber auch erzwungen werden.
78 Welche 2 Möglichekeiten von Sprüngen gibt es?
break, continue
- beides eigenständige Anweisungen
- dürfen nur im Schleifenrumpf verwendet werden (Ausnahmen in switch-case-Anweisungen)
79 Was bewirkt break?
die Schleife wird sofort verlassen, das Programm beginnt mit der ersten Anweisung nach der Schleife
Schleifenabbruch mit break sollte möglichst vermieden werden, stattdessen lieber geeignete Abbruchsbedingungen
80 Wann ist break vertretbar?
bei Abbruch wegen Fehlern, bei mehreren Aussprüngen an verschiedenen Stellen der Schleife, bei echten
Endlosschleifen ( zB in Echtzeitsystemen )
81 Was unterscheidet primitive von Referenzdatentypen?
primitive Typen (Werttypen, einfache Datentypen):
byte, short, int, long, float, double, char, boolean
Variable primitiven Typs enthält Wert direkt.
Referenzdatentypen
◦Felder
◦Klassen
->ermöglichen es, neue, komplexere Typen zu definieren
Variable eines Referenztyps,enthält Verweis auf ein Objekt.
• Definition
‐Werttypen haben feste Größe -> Definition erledigt Compiler
◦z.B.: int -> 4 Byte
‐Referenztypen müssen explizit mit new-Operator definiert werden!
◦Ausnahme: Direkte Feldinitialisierung!
82 Was ist die Kurzschreibweise für eine Schleife, die ein komplettes Array durchlaufen soll?
for (int zahl : lottoZahlen) {
...
}
83 Was sind die Unterschiede zwischen flacher Kopie und tiefer Kopie?
Flache Kopie:
•Zuweisungsoperator (=) kopiert lediglich Verweis auf Feld, nicht den Inhalt
•Beispiel:
char[] film = { 'a', 'v', 'a', 't', 'a', 'r'};
char[] spiel = film;
•Beide Referenzvariablen (film und spiel) verweisen auf selbes Objekt und den selben Speicherbereich
•Änderungen am Feld über eine Referenz beeinflussen Inhalt für beide Referenzen!
Tiefe Kopie:
•Um eine "echte" Kopie zu erstellen, muss elementweise kopiert werden.
•Dazu muss mit new-Operator neuer Speicherbereich reserviert werden!
•Änderungen an Original haben keine Auswirkungen auf Kopie.
•Beispiel:
char[] film = { 'a', 'v', 'a', 't', 'a', 'r'};
char[] spiel = new char[6];
for (int i = 0; i < spiel.length; i++) {
spiel[i] = film[i];
}
84 Wie legt man die Feldlänge durch direkte Initialisierung fest?
Beispiel:
boolean[][] konjunktion= { {false, false, false},
{false, true, false},
{true, false, false},
{true, true, true} };
‐Länge der Felder wird implizitdurch Anzahl der Elemente festgelegt.
‐In diesem Fall handelt es sich um eine 4x3 Matrix: 4 Zeilen, 3 Spalten.
entspricht:
boolean konjunktion= new boolean[4][3];
85 Wie durchläuft man ein mehrdimensionale Array?
boolean konjunktion= new boolean[4][3];
/* ... Initialisierung ... */
äußere Schleife zerlegt Matrix in Zeilen (-> Referenzen!)
for (boolean[] zeile : konjunktion) {
innere Schleife durchläuft jede Zeile elementweise
for (boolean element : zeile) {
GraphicIO.output(element+"\t");
}
Zeilenumbruch am Ende jeder Zeile
GraphicIO.output("\n");
}
86 Was ist Eclipse?
•Eclipse ist eine integrierte Entwicklungsumgebung
‐Programm, das bei der Entwicklung von Programmen hilft
•vereint Entwicklungskomponenten
‐Texteditor
‐Compiler
‐Interpreter
‐Debugger
•unterstützt Entwickler
‐visuell: Code-Highlighting
‐Tipparbeit: Code-Completion
•sehr mächtig, da modular (viele Funktionalitäten)
87 Was ist UML?
UML steht für Unified Modeling Language.
UML ist eine formale Beschreibungssprache zur Spezifikation, Visualisierung, Konstruktion und Dokumentation von
Modellen für Softwaresysteme.
Teile der UML sind z.B.
- Klassendiagramm
- Sequenzdiagramm: Laufzeitbeschreibung eines Programms (-> Objekte!)
88 Wie ist ein UML-Klassendiagramm aufgebaut?
Ein UML-Diagramm besteht aus einem Bezeichner (Name der Klasse), den Daten (Variablen der Klasse) und dem
Verhalten (Methoden der Klasse)
Die Sichtbarkeit wird mit Minus & Plus dargestellt (minus=private, plus=public).
89 Was ist eine gerichtete Assoziation?
Eine gerichtete Assoziation ist eine Klasse, die eine andere Klasse referenziert.
Die Assoziation funktioniert nur in eine Richtung, d.h. Daten fließen nur in eine Richtung.
90 Was ist eine Aggregation?
“besteht aus”-Beziehung zwischen Ganzem( Raute) und seinen Teilen.
91 Was ist eine Vererbung?
Vererbung ist eine Beziehung zwischen generellen und speziellen Klassen. Dabei zeigt der Pfeil von der Subklasse auf die
Klasse.
92 Was ist eine Realisierung?
Sie ist eine Beziehung zwischen
Spezifikation und der Umsetzung.
Eine Klasse ist Interface, die andere die realte Umsetzung
93 Was ist ein Objekt? Und was ist der Unterschied zu Klassen?
•Klasse gibt mögliche Daten und Verhalten vor
‐beschreibt statische Struktur einer "Sache"
‐statische Struktur ist Referenzdatentyp!
•Objekte sind Instanzen der Klasse
‐mit konkreten Daten (z.B. ist Farbe grün)
‐existieren nur während Programm läuft
‐beschreibt einen konkreten Gegenstand
‐das Objekt einfachGruen ist vom Typ Wecker
-Zugriff auf Objekte ist nur durch bestimmte interne Schnittstellen möglich.
94 Was sind der Grundgedanke und die Vorteile der OOP?
‐Unterteilung eines großen Problems in Teilprobleme (Objekte)
‐Teilprobleme weiter unterteilen, usw.
-> klare Struktur
-> einfache Aufteilung der Arbeit
-> gute Pfleg- und Erweiterbarkeit
-> Teillösungen lassen sich wiederverwenden
95 Wie werden neue Objekte erzeugt?
Die Definition der Objekte erfolgt durch eine Kombination aus new-Operator und Konstruktor-Aufruf
Deklaration der Referenz, Wecker einfachGruen;
Definition mit new-Operator und Konstruktor-Aufruf
einfachGruen= newWecker();
96 Was sind Konstruktoren?
Konstruktoren sind Methoden, die immer den Namen ihresTyps tragen. Wobei Rückgabetyp und Bezeichner ein und
dasselbe bzw. verschmolzen sind und die neuen Platz im Speicher für ein Objekt "ihres" Typs reservieren.
Die Besonderheit bei Standardkonstruktoren ist, dass sie leere Parameterlisten enthalten.
Außerdem erzeigt ein Konstruktur ein neues Objekt und der Konstruktor kann überladen werden (mehrere
Konstruktoren in einer Klasse)
97 Wofür benutzt man das Schlüsselwort this?
Das Schlüsselwort this wird immer verwendet, um Instanzmember anzusprechen.
Es ist eine Referenz, welche auf das aktuelle Objekt (Exemplar) zeigt.
This wird benötigt, wenn die Instanzvariable von der lokalen Variable verdeckt wird.
98 Wie lauten die 4 Säulen der objektorientierten Programmierung?
99 Wozu benötigen wir Kapselung und wie wird sie realisiert?
Kapselung wird als Schutz des inneren Zustands vor unerwünschtem Zugriff gebraucht. (durch private Member)
Durch öffentliche Member werden Schnittstellen vorgegeben, die den Zugriff erlauben.
Schnittstellen sind durchlässige Stellen der "Kapsel", die Kommunikation zwischen den Objekten erlauben.
100 Wie sehen die Sichtbarkeiten von Membern aus?
Z. 2: package-private (Standardeinstellung)
101 Welche Zugriffsmethoden gibt es bei der Kapselung?
•Akzessoren (auch: Get-bzw. Gib-Methoden): "Zugreifer"
‐fragen Informationen einer Klasse ab
‐lesender Zugriff
•Mutatoren (auch: Set- bzw. Setze-Methoden): "Veränderer“
‐verändern Werte von Instanzvariablen und somit Zustand eines Objekts
‐liefern keine Werte zurück (Rückgabetyp void)
‐erhalten zu setzenden Wert als Parameter
102 Was bewirkt continue?
der reguläre Ablauf der Schleife wird unterbrochen und der nächste Schleifendurchgang wird sofort gestartet
sofortige Neuprüfung der Abbruchbedingungen
Ausführung von Anweisungen innerhalb einer Schleife kann teilweise ausgesetzt werden
103 Wie nennt man den Kopf einer Methode?
Der Kopf der Methode heißt Signatur und identifiziert die Methode EINDEUTIG!
Hier der nicht grünmarkierte Bereich ;)
104 Was sind Super- und Subklassen?
Generalisierende, allgemeinere Klasse heißt Superklasse
- enthält alle gemeinsamen Attribute
untergeordnete Klasse heißt Subklasse
- enthält nur individuelle Attribute und Methoden
Pfeil kann als "ist-ein"-Beziehung gelesen werden
105 Wozu nutzen wir Generalisierungen?
Bilden gemeinsamer Schnittstellen
Effizienz - Gemeinsame Attribute und Methoden nicht mehrfach implementiert
hierarchische Struktur sorgt für mehr Übersicht
Lesbarkeit - trotz Auslagerung von Codeteilen in Superlassen ist Verteilung durch klare Beziehungen nachvollziehbar
Struktur erweiterbar: neue Klassen können einfach eingegliedert werden
106 Wo besteht der Unterschied zwischen Generalisierung und Spezialisierung?
Generalisierung
- vom Besonderen zum Allgemeinen
- Gemeinsamkeiten in Superklasse auslagern
- Subklassen von Superklassen ableiten (-> Vererbung)
Spezialisierung
vom Allgemeinen zum Besonderen
- neue Subklassen erzeugen
- von Superlasse erben lassen
107 Was ist Vererbung und welche Arten gibt es?
Weitergabe von Daten, Verhalten und Benutzbarkeit einer Superklasse an Subklasse
in OOP zwei Arten von Vererbung
°Implementierungsvererbung (-> Daten und Verhalten)
°Schnittstellenvererbung (-> Benutzbarkeit)
in Java zwei Arten von Vererbung
- Schlüsselwort extends => alles wird vererbt
° Daten
° Verhalten
° Benutzbarkeit
- Schlüsselwort implements
=> lediglich Schnittstellenvererbung
108 Wie funktioniert die Vererbung mit "extends"?
Subklasse erbt konkrete Implementierung der Superklasse
bindet Klassen dicht aneinander
- Änderung der Superklasse wirkt sich auf alle Subklassen aus
- Erweiterung der Superklasse muss für alle Subklassen auch gültig sein
Jede Klasse hat maximal eine Superklasse (Einfachvererbung), kann aber beliebig viele Subklassen haben
Syntax
Neu deklarierte Klasse erweitert durch Schlüsselwort extends andere Klassen und erbt von ihr
vererbte Eigenschafte müssen nicht neu deklariert werden
Beispiel
public class Banane extends Obst{
//...
}
109 Was wird mit extends vererbt? Gibt die verschiedenen Sichtbarkeiten an!
Subklasse hat Zugriff auf alle öffentlichen und geschützten Member
Private und package-private (default) sind nicht aufgreifbar
110 Was ist die Klasse "Object"?
der "big Daddy "
implizite Basisklasse aller Klassen in Java
ohne extends-Anweisung*+ hinter Klassenname erbt Klasse automatisch von Object
alle Klassen ** haben - direkt oder indirekt - Object als Basisklasse
- erben Reihe von Methoden, u.a toString()
Beispiel:
public class Lebensmittel {
// Klasse erbt von Object, da keine explizite extends-Anweisung
}
111 Was sind Superkonstruktoren?
Bei Objekterzeugung zunächst von oben nach unten ausgeführt
- notwendig, um alle Eigenschaften (auch die geerbten) zu initialisieren
Auch parametrisierte Konstruktoren rufen Standard-Konstruktor der Superklasse auf.
Wenn Superklasse keinen Standard-Konstruktor hat, muss expliziter Aufruf erfolgen
public class Obst {
....
public Obst(Color farbe, boolean istReif) {
...
}
}
public class Apfel extends Obst {
//...
public Apfel(boolean hatWurm) {
super(Color.green, true);
}
}
112 Was sind Finale Klassen?
Um Vererbung zu verhindern hat Java Schlüsselwort final
Manche Klassen sollten vor Vererbung geschützt werden
Syntax:
public final class SecuritySystem{
}
113 Was sind die Vorteile der Implementierungsvererbung?
Gemeinsame Eigenschaften müssen nur einmal modelliert werden
-> Wiederverwendbarkeirt
erleichert Fehlersuche und -korrektur - > kann zentral durchgeführt werden
reduziert Programmieraufwand und Coderedundanz
114 Welche Nachteile hat die Implementierungsvererbung?
kein Allheilnittel
- wahre Welt nicht immer hierarchisch
- Vererbung oft inflationär eingesetzt
starke Kopplung zwischen Super- und Subklassen
- Änderung an Super- wirkt sich auf Subklasse aus
- auch über viele Ebenen hinweg
viel Fehlerpotential
- falscher Featureeinsatz
- kaum Schutz vor Fehlverwendung
115 Was sind abstrakte Klassen und welche Eigenschaften haben sie?
Generalisierungen führen oft zu Klassen, die nie selbst initialisiert werden.
Schlüsselwort abstract verhindert Initialisierbarkeit
- können nicht mit new erzeugt werden
Abstrakte Klassen
- können nicht erzeugt werden
- können abstrakte Methoden beinhalten
- können konkrete Methoden beinhalten
Abstrakte Methoden
- haben keinen Rumpf
- müssen in Subklasse implementiert werden
- spielen bei Polymorphismus noch eine große Rolle
- können nicht in konkreten Klassen definiert werden
116 Was bedeutet "Program to Interfaces"?
Programmiere an eine Schnittstellen, nicht an eine Implementierung!
Programmteile (Modul) sollten nur die Schnittstellen voneinander kennen , nicht die Implementierung
"Baukastenprinzip"
Analogie:
USB-Schnittstelle an Computer
- alles mögliche kann angeschlossen werden
( Stcik. Drucker, Maus...)
- dem PC ist das egal ---> lose Kopplung
Gegenbeispiel:
Mikrofon-Eingang
- hier kann auch Lautsprecher angeschlossen werden -> Schnittstelle passt !
- Lautsprecher realisiert Schnittstelle "Aufnahme" aber nicht!
- so kann nichts aufgenommen werden !
Modul Computer ist von Implementierung des angeschlossenen Gerätes (Mikrofon) abhängig
=> Enge Kopplung
117 Wieso ist eine enge Kopplung schlecht?
- Software ist nie "fertig"
- Anforderungen können sich jeder Zeit ändern
- Software wird ständig erweitert/ verändert
- Enge Kopplung zwischen Klassen erschwert Erweiterbarkeit/ Veränderbarkeit
- kleine Änderung kann aufgrund enger Kopplung ganze Systeme lahm legen
- "Domino-Effekt"
- Lose Kopplung wünschenswert
-> Interfaces
118 Was ist eine Kopplung?
Grad der Abhängigkeit zwischen Teilen eines Programms
119 Was ist eine Vererbung mit "extends"
entspricht einer engen Kopplung
- Klassen nehmen in vielen Details Bezug aufeinander
Problem: Änderungen an Basisklasse können Funktionalität von Subklasse beeinträchtigen.
120 Was ist eine Vererbung mit "implements"?
- Klassen innerhalb einer Anwendung (fast) unabhängig voneinander
- Verzicht auf vererbte Funktionalität ermöglicht flexiblen Programmentwurf
- Implementierungen sind gezwungen, Interface-Methoden zu überschreiben, bleiben dabei aber austauschbar
- immer zu bevorzugen!!!
121 Welche Schwächen hat die Vererbung mit "extends"?
Objekte können oft mehr als einer Kategorie zugeordnet werden. Das ist mit extends nicht möglich, weil jede Klasse
maximal eine Superklasse hat.
122 Soll "extends" ganz gemieden werden?
NEIN
Implementierungsvererbung mit bedacht einsetzen!
- bei wahrer Spezialisierung einer Klasse
- Wenn Programm nicht erweiterbar sein soll
- Wenn große Coderedundanzen vorhanden
123 Was sind Interfaces?
- zusätzliche Sprachfeature in Java
- "Klasse " ohne Daten und Implementierung
-
Sammlung abstrakter Methoden und (ggf.) Konstanten
- enthält Keine Konstruktoren
-> keine Objekterzeugung möglich
124 Was sind die Eigenschaften von Interfaces?
Realisierung loser Kopplung
beinhalten ausschließlich öffentliche, abstrakte Methoden sowie Konstanten
können sich gegenseitig erweitern (extends)
können nicht erzeugt werden
Klassen können beliebig viele Interfaces implementieren
125 Wie werden Interfaces deklariert?
mit Schlüsselwort interface statt class
Konvention: Interface-Bezeichner beginnen immer mit Großem "I" gefolgt von weiterem Großbuchstaben
Methoden sind implizit abstrakt und öffentlich
( public abstract)
- Modifizierer können weggelassen werden
- deklariert nur Kopf einer Methode ohne Rumpf
- Am Ende abgeschlossen durch Semikolon
Interface für strombetriebene Geräte:
public interface IStrombetrieben{
<RÜCKGABETYP><BEZEICHNER> ( <PARAMETER>);
void einschlaten (int spannung);
void ausschalten();
}
126 Wie werden Interfaces implementiert?
mit Schlüsselwort "implements"
Beispiel:
Mixer hat (mind) selbe Schnittstelle wie IStrombetrieben
public class Mixer implements IStrombetrieben{
private boolean istAn = false;
private static final int
MAXIMALE_SPANNUNG = 240;
public void einschlaten(int spannung){
if(spannung <= MAXIMALE_SPANNUNG) {
this.istAn = true;
}
}
public void ausschalten(){
this. istAn = false;
}
}
127 Was ist bei der Nutzung von Interfaces zu beachten?
Interface kann als Vertrag betrachtet werden.
Interface-Entwickler legt einzuschaltende Schnittstelle fest
Interface-Nutzer ist verpflichtet, alle Methoden des Interfaces zu implementieren
- falls nicht, gibt Compiler Fehlermeldung aus
- Interface-Entwickler kann sich frühzeitig auf Schnittstelle verlassen -> Polymorphismus
128 Was ist Polymorphismus?
Objekt kann zu Laufzeit Verhalten ändern
Wir unterscheiden:
Überladen von Methoden (statischer Polymorphismus) z.B.
- beim Überladen von Konstruktoren (VL05)
- Überladene Funktionen in java-API oder GraphicIO
Überschreiben von Methoden (dynamischer Polymorphismus)
129 Was bedeutet "Überladen von Methoden"?
- Methoden eines Objektes tragen gleichen Namen und gleichen Rückgabetyp
- müssen unterschiedliche Parameterliste haben
- Methoden befinden sich in gleicher Klasse oder Subklasse.
- Methodensignatur unterscheidet sich lediglich in Parameterliste
-Compiler vergleicht bei Aufruf übergebene Parameter mit Methodensignatur und wählt die am besten passende
Methode
- Methoden können beliebig oft überladen werden
-GraphicIO setzt stark auf Überladen von Methoden!
=> Gute Quelle!
Beispiel für unterschiedliche Parameteranzahl:
Beispiel für unterschiedliche Parametertypen:
public void print(int intValue) {
...
}
public void print(String stringValue) {
...
}
public void printTest(){
print(137);
wählt erste "print"-Methode
print("TEST");
wählt zweite "print"-Methode
}
130 Was ist dynamischer Polymorphismus?
Polymorphismus im engeren Sinn
beruht auf 3 Prinzipien
- Überschreiben von Methoden
- Substitutionsprinzip
- späte Bindung/ dynamische Bindung
131 Was bedeutet "Überschreiben von Methoden"?
- Subklasse erbt Methoden der Superklasse
-Methode, welche in Superklasse definiert ist, wird in Subklasse überschrieben
- komplett gleiche Signatur (Name und Parameterliste), nur Rumpf wird geändert
- Subklasse blendet geerbtes Verhalten aus.
Verhalten kann so genauer an Subklasse angepasst werden.
Ausnahme :
Methoden nicht überschreibbar, wenn sie mit private, final, oder static definiert wurden.
132 Was ist das Substitutionsprinzip?
Objekttypen:
polymorphe Referenzen - können potentiell verschiedene Typen annehmen .
- den deklarierten Typ und alle seine Subtypen
Objekt von Typ kann also zur Laufzeit substituiert (ersetzt) werden
- Figur kann Kreis, Rechteck, Dreieck oder Kugel sein
- Figur kann sich also entsprechend unterschiedlich verhalten
Erlaubt, weil Subklasse das Verhalten der Superklasse erbt!
133 Wie unterscheiden sich statischer Typ und Laufzeittyp?
‐ statischer Typ legt Zugriffsmöglichkeiten auf Methoden fest
‐ Methode einer Klasse kann nur von Objekt mit statischem Typ dieser Klasse aufgerufen werden
Beispiel
Kugel kugel; Deklaration legt statischen Typ fest
kugel = new Kugel() ; Definition legt Laufzeittyp fest
‐ Kugel ist statischer Typ und Laufzeittyp
Figur andereKugel; statischer Typ ist Figur andereKugel
= new Kugel(); Laufzeittyp ist Kugel
andereKugel.rolle(); NEIN! Figur kennt "rolle" nicht!
134 Wie verläuft die dynamische Methodensuche?
Aufruf der Methode eines Objekts stößt Methodensuche an
Fall1
Klasse des Objektes hat KEINE Superklasse -> in Klassendefinition des Objekts beschriebene Methode wird ausgeführt.
Fall 2
Klasse des Objekts hat Superklasse
a) Klasse des Objekts hat gewünschte Methode überschrieben
-> überschriebene Methode (und nur diese!) wird aufgerufen
b) Klasse des Objekts hat gewünschte Methode NICHT überschrieben -> Methodensuche wird bei Superklasse
fortgeführt, usw.
135 Welche Vorteile hat Polymorphismus?
Bessere Abbildung der Wirklichkeit:
ermöglicht variable Anpassung des Verhaltens von Methoden an Kontext
ermöglicht hohe Wiederverwendbarkeit
lose Kopplung
Austausch von Objekten führt zu Verhaltensänderung
- ein und derselbe Code kann unterschiedliche Aufgaben abarbeiten
- für Entwurfsmuster sehr wichtig