Was versteht man unter Programmiertechnik?
Methoden und Prinzipien zur Erstellung von Computerprogrammen.
Tags: Terminologie
Quelle: VL 1, Haase, Programmiertechnik 1, Einführung
Quelle: VL 1, Haase, Programmiertechnik 1, Einführung
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.
Tags: VL 09 GUI Event-Handling
Quelle:
Quelle:
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
- 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
Tags: VL09 GUI
Quelle:
Quelle:
Was ist ein Event?
Ein Event ist eine Aktion, die der Nutzer beim Arbeiten mitgrafischen Oberflächen auslösen kann.
Tags: VL 09 GUI Event-Handling
Quelle:
Quelle:
Was ist eine Ergebnisquelle?
Eine Ereignisquelle auch Event Source ist jede beliebige Komponente einer grafischen Oberfläche.
Tags: VL 09 GUI Event-Handling
Quelle:
Quelle:
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
2.Realisierung der Listener-Klasse als anonymeKlasse
3.Container-Klasse wird selbst zur Listener-Klasse
4.Realisierung der Listener-Klasse als separate Klasse
Tags: VL 09 GUI Event-Handling
Quelle:
Quelle:
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
2. Event : der Nutzer interagiert, z.b. durch klicken eines Taste/Buttons
3. Listener: Swing/AWT stellt Listener-Interfaces zur Verfügung
Tags: VL09 GUI
Quelle:
Quelle:
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
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
Tags: VL 09 GUI Event-Handling
Quelle:
Quelle:
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.
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.
Tags: VL 09 GUI Event-Handling
Quelle:
Quelle:
Was ist ein Getter(Get bzw. Gib-Methode)?
Ein Getter ist ein Zugriffsmethode, die eine Eigenschaft eines Objekts abfragt, auch Abfragemethode genannt.
Tags: VL 06 Einführung in die OOP
Quelle:
Quelle:
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.
Tags: VL 06 Einführung in die OOP
Quelle:
Quelle:
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
- Optimierung des Quelltextes
- Übersetzung von Java-Quelltext (Input) in Bytecode (Output)
- Liefert ein maschinennahes Zwischenformat
- ist plattformunabhängig und damit portabel
Tags:
Quelle: VL 1
Quelle: VL 1
Was ist ein Interpreter?
Ein Programm, das Quellcode während der Laufzeit einliest, analysiert und ausführt.
Tags:
Quelle: VL 1
Quelle: VL 1
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)
- 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)
Tags:
Quelle: VL 1, Prof. Dr. Maic Masuch, Einführung in die Programmierung SS2010, Einführung
Quelle: VL 1, Prof. Dr. Maic Masuch, Einführung in die Programmierung SS2010, Einführung
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.
Tags: Terminologie
Quelle: VL 1, Haase, Programmiertechnik 1, Einführung
Quelle: VL 1, Haase, Programmiertechnik 1, Einführung
Tags: Terminologie
Quelle: VL 1
Quelle: VL 1
Was ist ein Algorithmus?
Eine fest definierte Folge von (einfachen) Anweisungen zur Lösung eines konkreten Problems. (Vgl. Kochrezept)
Tags: Terminologie
Quelle: VL 1
Quelle: VL 1
Was sind die Eigenschaften bzw. Anforderungen an einen Algorithmus?
- Bestimmtheit
- Effektivität
- Input
- Output
- Endlichkeit
- Effektivität
- Input
- Output
- Endlichkeit
Tags: Terminologie
Quelle: VL 1, Schiedermeier
Quelle: VL 1, Schiedermeier
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
- legt Möglichkeiten für Zugriff und Verwaltung fest
- Beispiele: Graph, Liste, Baum
- legt fest WIE etwas gespeichert wird, nicht WAS
Tags: Terminologie
Quelle: VL 1
Quelle: VL 1
In welchen Punkten unterscheiden sich menschliche Sprache und Computersprache?
Tags: Terminologie
Quelle: VL 1, Prof. Dr. Maic Masuch, Einführung in die Programmierung SS2010, Einführung
Quelle: VL 1, Prof. Dr. Maic Masuch, Einführung in die Programmierung SS2010, Einführung
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.
- Das Übersetzen der menschlichen Sprache in Maschinensprache wäre zu komplex und nicht eindeutig.
Tags:
Quelle: VL 1
Quelle: VL 1
Tags:
Quelle: VL 1
Quelle: VL 1
Was zeichnet Assemblersprachen aus?
- hardwareabhängig
- wenig Abstraktion (d.h. nah an der Maschinensprache)
- wenig Abstraktion (d.h. nah an der Maschinensprache)
Tags:
Quelle: VL 1
Quelle: VL 1
Was ist Java?
a) Entwicklungsplattform
zur Entwicklung und Ausführung von Programmen
b) objektorientierte Programmiersprache
zur Entwicklung und Ausführung von Programmen
b) objektorientierte Programmiersprache
Tags:
Quelle: VL 1
Quelle: VL 1
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
- 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
Tags:
Quelle: VL 1, Prof. Dr. Maic Masuch, Einführung in die Programmierung SS2010, Einführung
Quelle: VL 1, Prof. Dr. Maic Masuch, Einführung in die Programmierung SS2010, Einführung
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
- 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
Tags:
Quelle: VL 1, Prof. Dr. Maic Masuch, Einführung in die Programmierung SS2010, Einführung
Quelle: VL 1, Prof. Dr. Maic Masuch, Einführung in die Programmierung SS2010, Einführung
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
-> Java Code
2. Übersetzung durch Compiler
-> Bytecode
3. Interpretation durch Interpreter
-> Ausführung
Tags:
Quelle: VL 1
Quelle: VL 1
Was ist ein Compiler?
=Übersetzer
Programm, das ein Quellprogramm in ein Zielprogramm (Assemblersprache, Bytecode oder Maschinensprache) übersetzt (Kompilierung).
Programm, das ein Quellprogramm in ein Zielprogramm (Assemblersprache, Bytecode oder Maschinensprache) übersetzt (Kompilierung).
Tags: Terminologie
Quelle:
Quelle:
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
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.
- besteht aus beliebig vielen Membern
- Member kann Methode oder Variable sein
Man kann sich eine Klasse als "Gerüst" oder "Schablone" vorstellen.
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
Was ist der Unterscheid zwischen Methoden und Variablen?
Methode = Verhalten einer Klasse (Was kann die Klasse?)
Variable = Daten einer Klasse (Was weiß die Klasse?)
Variable = Daten einer Klasse (Was weiß die Klasse?)
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
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
- Daten sind je Instanz variabel -> Variablen
- Verhalten ist für alle Instanzen einer Klasse gleich -> Methoden
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
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!)
- bestehen aus
- Buchstaben
- Ziffern
- '_' und '$'
- zu beachten:
- Erster Buchstabe muss Zeichen, Buchstabe, '_' oder '$' sein
- case-sensitive (Groß-/Kleinschreibung beachten!)
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
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
- 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
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
Nenne einige Java-Schlüsselwörter!
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
Wie ist eine Variable aufgebaut?
<TYP> <BEZEICHNER> = <WERT>
Die Wertzuweisung ist dabei optional.
Die Wertzuweisung ist dabei optional.
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
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.
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
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!
Eselsbrücke für die Reihenfolge der Zahlentypen:
Beiß kurz ins lange Floß - zweimal!
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
Was kennzeichnet Zeichen?
- Primitiver Typ char basiert auf Unicode
- wird mit einfachen Hochkommata '...' initialisiert
- zur Verwaltung einzelner Zeichen gedacht
- wird mit einfachen Hochkommata '...' initialisiert
- zur Verwaltung einzelner Zeichen gedacht
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
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).
- größere Fehlersicherheit
- höhere Laufzeiteffizienz
- geringere Flexibilität
- aufwendige Compiler
- Es gibt auch dynamisch typisierte Sprachen (Ruby, PHP).
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
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
- kein Java-Schlüsselwort verwenden
- Kann $, _ und Ziffern enthalten, sollte aber vermieden werden
- Immer mit einem Buchstaben beginnen
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
Was versteht man unter Variablendeklaration?
- Vorgang der Variable einen Typ zuzuordnen
- legt Wertebereich und Typ fest
- Aufbau:
- macht Variable im Programm bekannt
- legt Wertebereich und Typ fest
- Aufbau:
- macht Variable im Programm bekannt
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
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
- kann verwendet werden, um Variable zu initialisieren
- Wert, der einer Variablen zugewiesen wird
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
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 "..."
- Verwaltung nicht änderbarer Zeichenketten
Sammlung von Zeichen des Typs char
- Deklaration analog zu Variablen des primitiven Typs
- Initialisierung mit Anführungszeichen "..."
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
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
- 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
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
Welche Operatorengruppen gibt es in Java?
- arithmetische Operatoren
- Vergleichsoperatoren
- logische Operatoren
- bitweise Operatoren
- Zuweisungsoperatoren
- bedingte Operatoren
- New-Operator
- Vergleichsoperatoren
- logische Operatoren
- bitweise Operatoren
- Zuweisungsoperatoren
- bedingte Operatoren
- New-Operator
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
Von welchen Operatoren-Arten spricht man abhängig von der Anzahl der Operanden?
- unäre (Bsp.: Vorzeichenoperatoren)
- binäre
- ternäre
- binäre
- ternäre
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
Welche arithmetischen Operatoren gibt es?
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
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)
- entweder numerisch
(byte, short, int, long, float, double)
- oder (Ausnahmefall) char
Ergebisse:
- immer numerisch
(double, float, long, int)
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
Welche logischen Operatoren gibt es?
Was ist ihr Zweck?
Von welchem Typ sind Operanden und Ergebnis?
Was ist ihr Zweck?
Von welchem Typ sind Operanden und Ergebnis?
- zum Vergleich von Wahrheitswerten
- Operanden- + Ergebnistyp: boolean
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
Wodurch zeichnen sich Vorzeichenoperatoren aus?
Zeige ein Beispiel!
Zeige ein Beispiel!
- unäre Operatoren (beziehen sich auf einen Operator)
- wie in Mathematik (Plus/Minus-Zeichen)
Beispiel:
float hoehe = 1.25f; / / ist identisch mit...
float hoeheAlternativ=+1.25f / /...dieser Variante
int negativHohe=-hoehe; / /Operant ist hier eine Variable
int temperatur=-5; / /... 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
- wie in Mathematik (Plus/Minus-Zeichen)
Beispiel:
float hoehe = 1.25f; / / ist identisch mit...
float hoeheAlternativ=+1.25f / /...dieser Variante
int negativHohe=-hoehe; / /Operant ist hier eine Variable
int temperatur=-5; / /... 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
Was ist der Modulo-Operator?
Modulo-Operator (%) bestimmt ganzzahligen Divisionsrest
ACHTUNG: Modulo-Rechnung und Division können dasselbe Ergebnis erzielen, sind aber grundlegend verschieden!
ACHTUNG: Modulo-Rechnung und Division können dasselbe Ergebnis erzielen, sind aber grundlegend verschieden!
Tags: VL Programmelemente
Quelle:
Quelle:
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
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
Tags: VL Programmelemente
Quelle:
Quelle:
Welche Vergleichsoperatoren gibt es?
Was ist ihr Zweck?
Von welchem Typ sind Operanden und Ergebnis?
Was ist ihr Zweck?
Von welchem Typ sind Operanden und Ergebnis?
- binäre Operatoren
- zum Wertevergleich
- Operanden
entweder numerisch
oder char
- Ergebnis
immer boolean
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
Welche Zuweisungsoperatoren gibt es?
Was ist ihr Zweck?
Von welchem Typ sind Operanden und Ergebnis?
Was ist ihr Zweck?
Von welchem Typ sind Operanden und Ergebnis?
- binäre Operatoren
- Kurzschreibweise
- Operatoren sind
- numerisch
- char
- Objektreferenzen (nur einfache Zuweisung!)
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
Wie bestimmt sich die Auswertungsreihenfolge bei mehreren Operatoren?
- durch Assoziativität (bei Operatoren gleicher Priorität)
- durch Prioritäten:
- durch Prioritäten:
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
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.
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.
Tags: Programmelemente
Quelle: VL 2
Quelle: VL 2
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
- "Methoden-Böcke" können sich gegenseitig aufrufen
- "main" ruft den ersten Methoden-Block auf.
- Methoden = untergeordnete Struktureinheiten einer Klasse
Tags: VL 03 Kontrollstrukturen
Quelle:
Quelle:
Warum nutzen wir Methoden?
1) Wiederverwendbarkeit
2) Definition benutzerspezifischer Operationen
3) Strukturierung von Programmen
4) Lokalität
2) Definition benutzerspezifischer Operationen
3) Strukturierung von Programmen
4) Lokalität
Tags: VL03 Kontrollstrukturen
Quelle:
Quelle:
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.
Tags: VL 03 Kontrollstrukturen
Quelle:
Quelle:
Woraus bestehen Klassen?
Klassen bestehen aus verschiedenen Membern.
Diese Member können METHODEN (Verhalten) oder VARIABLEN (Daten) sein
Diese Member können METHODEN (Verhalten) oder VARIABLEN (Daten) sein
Tags: VL 03 Kontrollstrukturen S. 5
Quelle:
Quelle:
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" !!!
- 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" !!!
Tags: VL 03 Kontrollstrukturen
Quelle:
Quelle:
Wie ist eine Methode aufgebaut?
Was bedeuten die einzelnen Komponenten von Kopf u. Rumpf?
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
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
Tags: VL 03 Kontrollstrukturen
Quelle:
Quelle:
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
- sind zusammengesetzte Anweisungen, bestehend aus mehreren einfachen, untergeordneten Anweisungen
- gehören zu wichtigsten Bestandteilen der Programmierung
=> Basis für jede Programm
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")
welche Programmstrukturen werden ausgeführt ( "wenn-sonst")
Schleifen
Anweisungen werden wiederholt abgearbeitet ("solange-bis")
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
mächtiger als switch-case
switch-case- Anweisung:
performanter, in bestimmten Fällen eleganter
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!
<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!
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.
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.
Was passiert, mit Fällen ohne break?
switch-case hat "Durchfall"
-> Fall Through
d.h die nachfolgenden Fälle werden mit abgearbeitet
-> Fall Through
d.h die nachfolgenden Fälle werden mit abgearbeitet
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.
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.
Tags: VL 03 Kontrollstrukturen
Quelle:
Quelle:
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!
Anweisungen werden solange wiederhoilt, bis eine bestimmte Bedingung nicht mehr erfüllt ist
Alle Schleifen müssen eine Bedingung enthalten!
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)
do-while-Schleife (Post-Bedingung)
for-Schleife (Prä-Bedingung, zwei Varianten)
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 es ohne Schleife 900 Zeilen mehr zu schreiben ... mit einer Schleife nur 1 Zeichen ;)
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 es ohne Schleife 900 Zeilen mehr zu schreiben ... mit einer Schleife nur 1 Zeichen ;)
Tags: VL 03 Kontrollstrukturen
Quelle:
Quelle:
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
<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
Tags: VL 03 Kontrollstrukturen
Quelle:
Quelle:
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
<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
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
<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
Wozu benötigen wir Sprünge ?
Schleifen springen automatisch am Anweisungsende zur Bedingung.
Sprünge können aber auch erzwungen werden.
Sprünge können aber auch erzwungen werden.
Tags: VL 03 Kontrollstrukturen
Quelle:
Quelle:
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)
continue
- beides eigenständige Anweisungen
- dürfen nur im Schleifenrumpf verwendet werden (Ausnahmen in switch-case-Anweisungen)
Was bewirkt break?
die Schleife wird sofort verlassen
Programm beginnt mit der ersten Anweisung nach der Schleife
Schleifenabbruch mit break sollte möglichst vermieden werden, stattdessen lieber geeignete Abbruchsbedingungen
Programm beginnt mit der ersten Anweisung nach der Schleife
Schleifenabbruch mit break sollte möglichst vermieden werden, stattdessen lieber geeignete Abbruchsbedingungen
Wann ist break vertretbar?
bei Abbruch wegen Fehlern
bei mehreren Aussprüngen an verschiedenen Stellen der Schleife
bei echten Endlosschleifen ( zB in Echtzeitsystemen )
bei mehreren Aussprüngen an verschiedenen Stellen der Schleife
bei echten Endlosschleifen ( zB in Echtzeitsystemen )
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!
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!
Tags: Felder, VL04
Quelle:
Quelle:
Was ist die Kurzschreibweise für eine Schleife, die ein komplettes Array durchlaufen soll?
for (int zahl : lottoZahlen) {
...
}
...
}
Tags: Felder, VL04
Quelle:
Quelle:
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];
}
•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];
}
Tags: Felder, VL04
Quelle:
Quelle:
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];
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];
Tags: Felder, VL04
Quelle:
Quelle:
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");
}
/* ... 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");
}
Tags: Felder, VL04
Quelle:
Quelle:
Was ist Eclipse?
•Eclipse ist 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)
‐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)
Tags: Felder, VL04
Quelle:
Quelle:
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!)
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!)
Tags: Einführung in die OOP, VL 05
Quelle:
Quelle:
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).
Die Sichtbarkeit wird mit Minus & Plus dargestellt (minus=private, plus=public).
Tags: VL 05
Quelle:
Quelle:
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.
Die Assoziation funktioniert nur in eine Richtung, d.h. Daten fließen nur in eine Richtung.
Tags: Einführung in die OOP, VL 05
Quelle:
Quelle:
Was ist eine Aggregation?
“besteht aus”-Beziehung zwischen Ganzem( Raute) und seinen Teilen.
Tags: Einführung in die OOP, VL 05
Quelle:
Quelle:
Was ist eine Vererbung?
Vererbung ist eine Beziehung zwischen generellen und speziellen Klassen. Dabei zeigt der Pfeil von der Subklasse auf die Klasse.
Tags: Einführung in die OOP, VL 05
Quelle:
Quelle:
Was ist eine Realisierung?
Sie ist eine Beziehung zwischen Spezifikation und der Umsetzung.
Eine Klasse ist Interface, die andere die realte Umsetzung
Eine Klasse ist Interface, die andere die realte Umsetzung
Tags: Einführung in die OOP, VL 05
Quelle:
Quelle:
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.
‐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.
Tags: Einführung in die OOP, VL 05
Quelle:
Quelle:
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
‐Teilprobleme weiter unterteilen, usw.
-> klare Struktur
-> einfache Aufteilung der Arbeit
-> gute Pfleg- und Erweiterbarkeit
-> Teillösungen lassen sich wiederverwenden
Tags: Einführung in die OOP, VL 05
Quelle:
Quelle:
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();
Deklaration der Referenz
Wecker einfachGruen;
Definition mit new-Operator und Konstruktor-Aufruf
einfachGruen= newWecker();
Tags: Einführung in die OOP, VL 05
Quelle:
Quelle:
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)
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)
Tags: Einführung in die OOP, VL 05
Quelle:
Quelle:
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.
Es ist eine Referenz, welche auf das aktuelle Objekt (Exemplar) zeigt.
This wird benötigt, wenn die Instanzvariable von der lokalen Variable verdeckt wird.
Tags: Einführung in die OOP, VL 05
Quelle:
Quelle:
Wie lauten die 4 Säulen der objektorientierten Programmierung?
Tags: Einführung in die OOP, VL 05
Quelle:
Quelle:
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.
Durch öffentliche Member werden Schnittstellen vorgegeben, die den Zugriff erlauben.
Schnittstellen sind durchlässige Stellen der "Kapsel", die Kommunikation zwischen den Objekten erlauben.
Tags: VL 05
Quelle:
Quelle:
Wie sehen die Sichtbarkeiten von Membern aus?
Z. 2: package-private (Standardeinstellung)
Tags: Einführung in die OOP, VL 05
Quelle:
Quelle:
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
‐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
Tags: Einführung in die OOP, VL 05
Quelle:
Quelle:
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
sofortige Neuprüfung der Abbruchbedingungen
Ausführung von Anweisungen innerhalb einer Schleife kann teilweise ausgesetzt werden
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 ;)
Hier der nicht grünmarkierte Bereich ;)
Tags: VL 03 Kontrollstrukturen
Quelle:
Quelle:
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
- 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
Tags: Generalisierung und Vererbung, VL 07
Quelle:
Quelle:
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
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
Tags: Generalisierung und Vererbung, VL 07
Quelle:
Quelle:
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
- 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
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
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
Tags: Generalisierung und Vererbung, VL 07
Quelle:
Quelle:
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{
//...
}
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{
//...
}
Tags: Generalisierung und Vererbung, VL 07
Quelle:
Quelle:
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
Private und package-private (default) sind nicht aufgreifbar
Tags: Generalisierung und Vererbung, VL 07
Quelle:
Quelle:
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
}
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
}
Tags: Generalisierung und Vererbung, VL 07
Quelle:
Quelle:
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);
}
}
- 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);
}
}
Tags: Generalisierung und Vererbung, VL 07
Quelle:
Quelle:
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{
}
Manche Klassen sollten vor Vererbung geschützt werden
Syntax:
public final class SecuritySystem{
}
Tags: Generalisierung und Vererbung, VL 07
Quelle:
Quelle:
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
-> Wiederverwendbarkeirt
erleichert Fehlersuche und -korrektur - > kann zentral durchgeführt werden
reduziert Programmieraufwand und Coderedundanz
Tags: Generalisierung und Vererbung, VL 07
Quelle:
Quelle:
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
- 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
Tags: Generalisierung und Vererbung, VL 07
Quelle:
Quelle:
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
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
Tags: Generalisierung und Vererbung, VL 07
Quelle:
Quelle:
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
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
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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
- 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
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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.
- Klassen nehmen in vielen Details Bezug aufeinander
Problem: Änderungen an Basisklasse können Funktionalität von Subklasse beeinträchtigen.
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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 !!!
- Verzicht auf vererbte Funktionalität ermöglicht flexiblen Programmentwurf
- Implementierungen sind gezwungen, Interface-Methoden zu überschreiben, bleiben dabei aber austauschbar
- immer zu bevorzugen !!!
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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.
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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
Implementierungsvererbung mit bedacht einsetzen!
- bei wahrer Spezialisierung einer Klasse
- Wenn Programm nicht erweiterbar sein soll
- Wenn große Coderedundanzen vorhanden
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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
- "Klasse " ohne Daten und Implementierung
Sammlung abstrakter Methoden und (ggf.) Konstanten
enthält Keine Konstruktoren
-> keine Objekterzeugung möglich
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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
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
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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();
}
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();
}
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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;
}
}
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;
}
}
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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
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
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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)
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)
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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
}
- 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
}
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Was ist dynamischer Polymorphismus?
Polymorphismus im engeren Sinn
beruht auf 3 Prinzipien
- Überschreiben von Methoden
- Substitutionsprinzip
- späte Bindung/ dynamische Bindung
beruht auf 3 Prinzipien
- Überschreiben von Methoden
- Substitutionsprinzip
- späte Bindung/ dynamische Bindung
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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.
-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.
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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!
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!
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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!
‐ 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!
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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.
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.
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
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
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
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Kartensatzinfo:
Autor: P-H-I-L
Oberthema: Informatik
Thema: Java
Veröffentlicht: 13.04.2010
Schlagwörter Karten:
Alle Karten (135)
Felder (6)
Programmelemente (26)
Terminologie (8)
VL 05 (15)
VL 07 (11)
VL04 (6)
VL08 (20)
VL09 GUI (2)