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