Programmiertechnik I - HTWG Konstanz - Drachenfels
Stichworte der Lernzettel - Letzte Seite von jedem Skript...
Stichworte der Lernzettel - Letzte Seite von jedem Skript...
-
- 1 / 148
-
Flashcards
Was ist der Quellcode?
"Source Code"
Programmtext in einer höheren Programmiersprache
Was ist UTF und welche unterschidlichen Formate gibt es?
Unicode Transformation Format
Methode Unicode Zeichen auf Folgen von Bytes abzubilden.
Format unterscheidet sich hinsichtlich der Speichereffizienz, des Laufzeitverhaltens sowie der Kompatibilität
UTF-8: Wird von Internetdiensten oder in E-Mails verwendet.
UTF-16: Windows, Java
Mit welchen Zeilen beginnt ein jedes Programm? (Ohne Checkstyle-Regeln)
public final class Name {
private Name () { }
public static void main (String [ ] args) {
...
}
}
Was steht im java.lang Unterpaket?
fundamentale Sprachunterstützung (z.B. String)
Was kann man unter java.io finden?
Unterpaket für Input und Output
Enthält beispielsweise Streams
Was ist im Java unterpaket java.text zu finden?
In java.text ist die Unterstützung der verschiedenen Landessprache zu finden.
Was ist im Unterpaket java.util zusammengefasst
Darin sind viele wichtige und wichtigeElemente, wie z.B. der Scanner oder die List zu finden
Was ist ein Crosscast?
Es gibt 3 Verschiedene Typanpassungen zwischen Referenzvariablen welche erlaubt sind. Eine Davon ist Crosscast.
Crosscast: Von Referenz auf Oberklasse zu Referenz auf andere Oberklasse.
Muss explizip angegeben werden (gegebenefalls zur Laufzeit ClassCastException)
Beispiel:
public final class C implements A, B { ... }
...
B b = (B) a; //Crosscast von A nach B
Was ist ein Downcast?
Es gibt 3 Verschiedene Typanpassungen zwischen Referenzvariablen welche erlaubt sind. Eine Davon ist Downcast.
Downcast: Von Referenz auf Oberklasse zu Referenz auf Unterklasse
muss explizit angegeben werden (gegebenenfalls zur Laufzeit ClassCastException)
Beispiel:
public final class C implements A, B { ... }
C c = (C) b; //Downcast von B nach C
Was ist ein Upcast?
Es gibt 3 Verschiedene Typanpassungen zwischen Referenzvariablen welche erlaubt sind. Eine Davon ist Upcast.
Upcast: Von Referenz auf Unterklasse zu Referenz auf Oberklasse.
findet bei Bedarf implizit statt (gegebenenfalls Fehlermeldung des Compilers)
Beispiel:
public final class C implements A, B { ... }
A a = new C(); //Upcast von C nach A
Was ist eine Lokale Klasse?
Lokale Klassen sind innere Klassen, die innerhalb einer Methode definiert werden. Sie haben Zugriff auf das erzeugende Objekt sowie auf konstante Parameter und konstante lokale Variablender erzeugenden Methode.
Was ist eine anonyme Implementierungsklasse?
Dies ist eine lokale klasse ohne Namen, die eine Schnittstelle implementiert.
Beispiel:
Methodenkopf {
.... Schnittstellenname = new Schnittstellenname () {
@Override
public Rückgabetyp Schnittstellenmethode (...) {
...
}
}
}
Wofür steht die this Instanzvariable?
this ist eine spezielle Instanzvariable, die der Compiler automatisch anlegt und die immer auf das Objekt verweist, auf das etwas aufgerufen wird.
Die Parameterliste enthält als heimliches erstes Element den Parameter this:
final Kl.Name this nur bei Instanzmethoden
das Objekt ist das Argument für Aufruf
Objektreferenz.Name(Args) this = Objektreferenz
Klasse
- enthält Definitionen einiger logisch zusammengehöriger Methoden und Variablen
- Beinhaltet Daten und Methoden, die diese bearbeiten
- haben mit der Implementierung von Objekten zu tun
→ Bauplan: die Klasse eines Objekts bestimmt, welche Instanzvariablen das Objekt enthält, wie sie initialisiert werden und wie sich das Objekt bei Methodenaufrufen verhält.
Typ
haben mit der Benutzung von Objekten zu tun:
- Der Typ einer Variablen bestimmt Objekte welcher Klasse referenziert werden können und welche Methoden bei Objekten aufgerufen werden können
- Typ eines Objekts = Variablen dieses Typs können das Objekt referenzieren.
Was ist eine Instanzvariable?
Instanzvariablen werden pro Objekt einer Klasse angelegt.
Lebensdauer: wie Objekt, in der sie enthalten sind.
Speicherort: Heap
Anfangswert: Standartwert des Typs, wenn Klasse keine explizite Initialisierung enthält
- Variablendefinition wie Klassenvariable, nur ohne static
- Variablenzugriff: Objektreferenz.Name
- innerhalb Instanzmethode: this.Name
Was ist eine Instanzmethode?
Methoden einer Klass, die nur bei Objekten aufrufbar sind.
- Methodendefinition wie Klassenmethoden, nur ohne Zusatz static
- Parameterliste enthält heimliches 1. Element: Parameter this → Referenz auf das Objekt
- Objekt des Methodenaufrufs ist Argument für den Parameter this:
Objektreferenz.Name(...) this=Objektreferenz
Was ist eine Klassenvariable?
Klassenvariablen werden auf oberster Ebene (d.h. außerhalb jeder Methode) in einer Klasse definiert.
→in allen Methoden der Klasse nutzbar
Lebensdauer: wie die Klasse, in der sie definiert sind.
Speicherort: heap
Anfangswert: Standartwert des Typs wenn keine explizite Initialisierung
Wie wird eine Klassenvariable deklariert und was ist zu beachten?
Eine Klassenvariable ist nach möglichkeit als final zu deklarierenm sollten aber nach möglichkeit ganz vermieden werden.
Syntax:
public final class Klassenname {
Zugriffsrecht static typ name = Wert;
Zugriffsrecht static typ AndererName;
}
Zugriffsrecht: public → von Überall zugreifbar
private → inerhalb der Klasse
Zugriff von außerhalb: Klassenname.Name
Pakete
Konvention: Paketnamen (der obersten Ebene) sollten nur aus Kleinbuchstaben bestehen.
- logisch zusammengehörige Klassen werden in Paketen zusammengefasst
- Klassennamen mussen nur innerhalb ihres Pakets eindeutig sein!!
- Klassen ihne explizite Paketzuordnung liegen in einem unbenannten Standartpaket → !Namenskonflikte!
Paketdeklaration: package Paketname;
Overloading
Überladen von Methoden: Mehrere Funktionen dürfen den selben Namen haben, wenn sich die Parameterliste unterscheidet.
- Compiler sucht dann die entsprechende Methode aus, welche zu den Argumenten passt → passen mehrere gut, meldet der Compiler einen Fehle!
! gleiche Signaturen mit lediglich verschiedenen Rückgabetypen sind nicht erlaubt !
Beispiel:
public static int max ( int a, int b) { ... }
public static int max (int a, int b, int c) {...}
public static double max (double a, double b) { ... }
Aufruf überladener Methoden:
max (1, 2); //ruft max (int, int) auf
max (1, 2, 3); //ruft (int, int, int) auf
max (1, 2.3); //ruft max (double, double) auf
Was ist unter einem Parameter zu verstehen?
Spezielle lokale Variablen einer Methode, die mit den Argumenten des Methodenaufrufs initialisiert werden.
- dienen der Übergabe zu verarbeitenden Daten
- bilden mit Name der Methode die Signatur
Lebensdauer: Ausführung des Methodenrumpfs
Speicherort: Stack
Der letzte Parameter kann beliebig viele Argumente aufnehmen,wenn nach dem Typ 3 Punkte folgen:
public staic in max (int a, int ...b) { ... }
...b realisiert der Compiler als int [ ] {b}
Aufzählungen (enum)
= Datentypen, die vom Programmierer durch aufzählung ihrer Werte definiert werden. (z.B. Wochentage, Jahreszahlen,...)
Typ Definition: In einer Datei Typname.java
public enum Typname {Wert1, Wert2, ... };
Variablen Definition
Typname aReference = Typname.Wert2;
Wert: Referenz auf einen der in der Typ-Definition aufgezählten Werte (Standart null)
Bild
Typname [ ] allvalues = Typname.values( ); // Referenz auf ein Feld, das die Referenz auf alle Were enthält.
String s = String.valueOf (Typname.Wert2) //"Wert2"
Typname t = Typname.valueOf("Wert2) //Aufzählungsw.
java.lang.Exception
Unterklasse von Throwable
Exception und alle Unterklassen, die nicht von RuntimeException abgeleitet sind, sind CheckedExceptions. → sie müssen in der Methode behandelt werden (try-catch) oder im Methodenkopf deklariert werden, wenn sie zum Aufrufer weitergeleitet werden soll.
Methodenname (...) throws Exceptionxy {...}
import wenn nicht mit throw geworfen.
Was ist ein Modul?
Ein modul ist eine abgeschlossene, funktionale Einheit einer Software. Inhalt eines Moduls ist häufig eine wiederkehrende Berechnung oder Verarbeitung von Daten. → Wiederholung des gleichen Codes wird vermieden.
- Module können in Form von Progrannbibliotheken bereitgestellt werden.
- Ein Modul wird als Funktion oder Unterprogramm aufgerufen.
Was ist ein Objekt?
Objekte sind Instanzen einer Klasse.
Klassen können aus Bauplan für Objekte dienen.
- Instanzvariablen der Klasse definieren den Zustand der Objekte
- Instanzmethoden der klasse definieren das Verhalten der Objekte
- Konstruktoren der Klasse initialisieren den Zustand der Objekte
Objekterzeugung mit dem new-Operator:
new Klassenname (...);
Objektbenutzung über Referenzvariablen und den Punkt-Operator:
Klassenname Objektreferenz = new Klassenname(...);
Objektreferenz.Variablenname = Wert;
Objektreferenz.Methodenname(...);
wenn Objekt von keiner Referenzvariable referenziert → Garbage Collector!
Was ist der Garbage Collector und wo wird er eingesetzt?
Garbage Collectible Heap:
Speicherbereich des Arbeisspeichers, in dem alle erzeugten Objekte gespeichert werden. Wenn ein Objekt erzeugt wird, wird Speicher auf dem Heap reserviert.
Bild
Wenn JVM "erkennt", dass ein Objekt nicht mehr verwendet wird(das Objekt nicht mehr erreichbar ist) wird es zur Garbage Collection frei gegeben:
Wenn Speicherplatz ausgeht, gibt der Garbage Collector den Speicher dieser Objekte wieder frei.
Was ist die Festkommadarstellung?
Bei einer Festkommazahl sitzt das Komma immer fest hinter der Ziffer mit dem Stellenwert 1. Rechner verwenden keine Festkomma-Darstellung!
Bsp.
(11,11)2 = 1*21+1*20+1*2-1+1*2-2 =2+1+0,5+0,25 =(3,75)10
Was ist Information Hiding?
Ein Objekt ist nach außen hin nur durch seine offen gelegten Methoden + Attribute definiert.
--> Durch Kapselung wird die innere Struktur von anderen Objekten versteckt.
Vorteil: Ein Objekt kann sich im innern vollständig verändern, während es sich nach außen hin unverändert zeigt
--> hohe Wiederverwendbarkeit
Wie muss vorgegangen werden um eine Ausnahmebahandlung (Exception Handling) einzufügen? (Programcode)
try {
Anweisung 1
} catch (Ausnahmedeklaration) {
Anweisung 2
} catch ( ...) {
...
} finally {
Anweisung 3
}
- mehrere catch-Blöcke möglich
- finally Block darf fehlen
- wenn finally Block vorhanden wird er immer (als letztes) ausgeführt
- import Exceptions
Was ist eine Instanzmethode toString?
jede Klasse hat implizit oder explizit eine Istanzmethode toString, mit der sich obj. der Klasse in ein String-Objekt wandeln lassen :
- implizite Implementierung:
liefert String-Obj mit Wert Klassenname+ganze Zahlen@hashcode
- explizite Implementierung:
public String toString() { return String -obj mit gewünschtem wert }
- String.valueof (...) ist mit toString() implementiert
Objektorientierte Programmierung
--> gegenwärtiger Stand d. Technik
Kennzeichen:
- Kapselung (Encapsulation)
- Polymorphie (Polymorphism)
- Vererbung (Inheritance)
- Dynamische Bindung (Dynamic / Late Binding)
Ziel:
bessere Wiederverwendbarkeit d. Software
Vorgehen:
- Programmierer denken in objekten +objektbeziehungen statt in Abläufen
- Obj. haben Zustände, Verhalten; gleichartige obj. gehören zur selben Klasse ähnliche Kl. haben gemeinsame Oberklasse
- Gesucht ist ein System von Klassen ( Domänenmodell) das Struktur einer geg. Problemdomäne angemessen wiederspiegelt
UTF-8
Die 1.Code Unit eines Zeichens zeigt am Anfang die Länge der Bytesequenz an, evtl. Folgebytes beginnen immer mit 10.
1-Byte-zeichen 0XXXXXXX 7Bit
2-Byte-Seq. 110XXXXX 10XXXXXX 11Bit
3-Byte-Seq. 1110XXXX 10XXXXXX 10XXXXXX 16Bit
4-Byte-Seq. 11110xx 10XXXXXX .... 21Bit
Beispiele:
Zeichen UTF16 UTF-8
A U+0041 0100001
Ä U+00C4 11000011 10000100
€ U+20AC 11100010 1000010 10101100
UTF-16
Zeichen außerhalb der BMP werden in ein High-Surrogate und ein Low-Surrogate mit je 16-Bit (4 Byte) aufgeteilt:
110110XX XXXXXXXX 110111XX XXXXXXXX
High-Surrogate Low-Surrogate
in der BMP sind die Zeichen der Surrogates nicht mit Zeichen belegt!
Beispiel:
- Zeichen: Violinschlüssel
- Unicode: U+1D11E
- UTF-16 Hex: D834 DDIE
- UTF-16 Binär: 11011000 01100100 11011101...
Was geschieht beim Auto-Boxing?
Verpacken eines primitiven Werts in ein Objekt. Auto-Boxing, wenn der Compiler das Wrapper-Objekt automatisch erzeugt → verwischt Grenze zwischen primitiven Datentypen und Objekten.
ArrayList <Integer> liste = new ArrayList <Integer> ();
liste.add(3); // int-Wert 3 wird automatisch vom Compiler verpackt.
Was ist ein Statischer Initalisierungsblock?
erlaubt Initialisierungen von Klassenvar. , die nicht mit Initialisierungsausdrücken in variablen definitionen ausdrückbar sind.
Syntax:
public final class Klassenname {
....
static {
..... // Anweisungen
}
--> Klassenmethode ohne Zugriffsrecht,
Rückgabetyp, Name und Parameter.
- eine Klasse kann mehrere statische Initialisierungsblöcke haben.
- Ausführungszeitpunkt ist das Laden der klasse in die VM (noch vor main)
Rückgabewert
Eine Klassenmethode kann einen Rückgabewert haben => Ergebniss des Methodenaufrufs
Rückgabetyp muss in Methodenkopf deklariert sein!!!
Was bedeutet Annotation?
Annotationen beginnen mit einer @- Zeichen.
Der Compiler kann Annotationen beim Kompilieren auswerten, um damit Warnungen & Fehlermeldungen zu unterdrücken oder auszulösen
Zugriffsrecht
Methoden: public: von überall aufrufbar
private: nur innerhalb der Klasse
Klassenvariabeln: public: von Überall zugreifbar
private: nur innerhalb ihrer Klasse
Klassen ohne public nur in ihrem Paket sichtbar
Klassenmethoden und Klassenvariablen (ohne Zugriffsrecht) können nur in Klassen des gleichen Pakets verwendet werden.