Programmiertechnik I - HTWG Konstanz - Drachenfels
Stichworte der Lernzettel - Letzte Seite von jedem Skript...
Stichworte der Lernzettel - Letzte Seite von jedem Skript...
-
- 1 / 148
-
Cartes-fiches
Wie ist eine Signatur aufgebaut?
Name und Parameterliste bilden zusammen eine Signatur einer Klassenmethode.
Muss innerhalb einer Klasse eindeutig sein!
Werttyp
- Logischer Typ (boolean)
- Zahlentypen
- Zeichentyp
- ganzzahlige Typen
- Gleitkommatypen
Was ist eine Abstrackte Klassee?
Sind ausschließlich alsals Oberklasse verwendbar
public abstract class Oberklassenname {
... // alles wie zuvor erlaubt
//zusätzlich darf es abstrakte Methoden ohne Rumpf geben
zugriffsr. abstract Rückg. Methodenname (); <-- Semikolon statt Rumpf
- durch abstract statt final können keine Instanzen der abstrakten Klasse gebildet werden
- die nicht implementierte Methode MUSS in der abgeleiteten Klasse überschrieben werden! Sonst wird sie auch zur abstrakten Klass
Zugriffsrecht private ist bei abstract markierten Methoden nicht erlaubt!!
Was ist eine Lokale Variable und wo ist sie gültig?
Lokale Variablen werden innerhalb eines Anweisungsblocks { } definiert und sind nur dort nutzbar
- Lebensdauer: Ausführung des Anweisungsblocks
- Speicherort: Stack
- Anfangswert: undefiniert wenn ohne Initialisierung
Literal
Zeichenfolge, die zur direkten Darstellung der Werte von Basistypen definiert / zulässig ist.
Was ist Modulare Programmierung?
erzwungen durch immer größer werdende Programme
Kennzeichen:
- Module , Lokalitäts- Geheimnisprinzip (Information hiding)
Vorgehen:
- Gruppierung logisch zusammengehörender Funtkionen & Daten in getrennt Übersetzbaren Modulen
- Verbergung D. Implementierungsdetails, die für Benutzung eines Moduls unerheblich sind, hinter der Modul-Schnittstelle
Ziele:
- bessere Überschaubarkeit der Software imGroßen
- größere Änderungsfreundlichkeit d Software
verborgene Implementierung kann geändert werden
short
- Wert: ganze Zahlen mit Vorzeichen
- Platzbedarf: 2 byte
- Standartwert: 0
wird in arithmetischen Ausdrücken nach int Konvertiert.
Unterschied zu int: Kann nur Zahlen von ca. -32700 bis ca. 32700 Speichern
char
Wert: 1 Einzelzeichen
bsp. char aChar = "c";
Platzbedarf: 2 byte
Was ist Scope?
dt. Gültigkeitsbereich
Namen von Klassen, Methoden und Variablen müssen in ihrem Scope eindeutig sein!
- lokale Variablen ab Def. bis Ende des umschließenden Anwendungsblocks
- Parameter im Rumpf ihrer Methode
- Klassenvariable & klassenmethode inneralb der direkt umschließenden Klasse
- Klassen in ihrem Paket
Was ist Prozedurale Programmierung?
Ziel:
Berechnen, wozu Menschen zu langsam sind.
Kennzeichen:
Algorithmen und Funktionsbibliotheken
Gesamtaufgabe wird in Teilaufg. gelöst Funktionen können in andere Progr. eingebunden werden.
Vorgehen:
Programmierer denken in Abläufen, Algorithmen
Gesucht: Algorithmus mit größter Ressourcensparsamkeit der Problem
Wrapper-Klassen
Wrapper-Klassen Kapseln einen Konstanten Wert mit Grundtyp.
Für jeden primitiven Typ gibt es eine Wrapper-Klasse (in die man den Primitiven Typ entwickeln lann). Gehören zu java.lang → kein Import nötig.
- Wrapper-Klassen ermöglichen Referenzen auf Werte mit Grundtyp → siehe Boxing/Autoboxing. Der Wert im Wrapper-Objekt kann nach Initialisierung nicht mehr geändert werden!
- Wrapper-Klassen sind nützlich für Typumwandlungen
String a = "123";
Integer b = new Integer (a);
int Zahl = b.intValue(); // jede Wrapper-Klasse hat eine Value() Methode
oder Kürzer per Klassenmethode:
int Zahl = Integer.parseInt (a);
Welche Wrapper-Klassen gibt es?
Boolean, Character, Byte, Float, Short , Double, Integer,long
Fallunterscheidung
switch (Ausdruck) {
case wert1:
Anweisung1
break;
case wert2;
Anweisung2
break;
default:
Anweisung
}
Mehrfachverzeiwgung
Ausdruck muss ganzzahligen, enum ider Stringtyp haben
default wird ausgeführt wenn der Ausdruck keinen der Werte hat
Was ist Strukturierte Programmierung?
eingeführt durch höhere Programmiersprachen
Kennzeichen:
Kontrollstrukturen und Datentypen
Vorgehen:
Programmierer strukturieren Abläufe innerhalb der Funktionen nach vorgegebenen Mustern "goto-freie Programmierung"
strukturierung von Daten mithilfe von Datentypen
Ziel:
- bessere lesbarkeit d. Programme
textuelle Reihenfolge & Ausführungsreihenfolge stimmen weitgehend überein.
- mehr sicherheit beim Programmieren
Typisierung erlaubt Fehlerentdeckung schon zum Übersetzungszeitpunkt
Was sind Checked Exceptions?
auch "geprüfte Ausnahme"
Compiler prüft, ob alle Stellen, an der Ausnahme auftreten kann durch Code zum abfangen abgedeckt sind -> kann innerhalb d. Methode stehen oder in aufrufender Methode (i.d.F. muss Ausnahme in Methodensignatur deklariert sein: Methode()) Throws Ausnahmeliste {}
--> Absicht: der geregelte Progammierablauf soll wiederhergestellt werden!
java.lang.Throwable
= Oberklasse aller Ausnahmen
- nur Objekte der Klasse Throwable bzw. Objekte derer Unterklassen können als Ausnahmen mit throw geworfen und mit catch gefangen werden.
- Konstruktoren:
- public Throwable() → Ausnahme ohne Meldung/Ursache
- public Throwable (String message) → Fehlermeldung als String
- public Throwable (Throwable cause)
- public Throwable (String message, Throwable cause)
- Instanzmethoden:
- public Throwable getCause()
- public String getMessage()
- public void printStackTrace() // wird bei nicht gefangenen Ausnahmen vor Programmabbruch
aufgerufen. Listet Methoden auf, die aufgerufen waren als die Ausnahme auftrat.
java.lang.Comparable <T>
=generische Schnittstelle,die ein einheitliches vergleichen von Objekten ermöglicht. <T> T ist ein Typparameter und wird mit dem Namen der jeweiligen implementierungsklasse belegt.
- einzigste Schnittstellenmethode:
int compareTo(T obj) 0 = - < + >
- IMplementierungsklassen:
java.lang.String, wrapper-Klassen
Eine Klasse,die Comparable <T> implementiert, defeniert eine Totalordnung (lineare Ordnung) all ihrer Objekte.
Felder T [ ] können dann z.b mit java.util.Arrays.sort sortiert werden
Was sind Schnittstellen?
Schnittstellen sind abstrakte Oberklassen, die ausschließlich öffentliche, abstrakte Instanzmethoden und Konstanten enthalten.
Keine Instanzvariablen- und Methodenimplementierungen.
Schnitstellendefinition mit Schlüsselwort interface statt class:
public interface Schnitstellenname {
Rückgabetyp Schnittstellenmethode (...); // public abstract wird vom Compiler automatisch eränzt wenn es fehlt.
....
}
Static (dt Statisch)
Statische Methoden:
statische Methoden können ohne eine Instanz der Klasse ausgeführt werde, denn das Verhalten ist nicht von Instanzvariablen abhängig!
Keine Instanz/Objekt erforderlich! Nur die Klasse .
Statische Methoden werden mithilfe der Klasse aufgerufen
Bsp: Math.random( );
Statische Methoden können keine nicht statischen (instanz)variablen benutzen!!
Fehlermeldung: non-static variable xy cannot be referenced from a static context
Statische Methoden können keine nicht-statischen Methoden benutzen!!
da ihr verhalten vom Zustand der Instanzvariablen abhängt!
Merksatz: den Zustand von Instanzvariablen sieht nicht, wer statisch ist.
statische Variablen:
statische Var. haben 1 Wert pro klasse, nicht pro Instanz! --> Alle Instanzen der Klasse haben für die Var. den gleichen Wert!!
Sie wird nur initialisiert wenn die Klasse geladen wird, aber nicht jedesmal, wenn eine neue Instanz erzeugt wird!
Was macht der StringBuilder?
java.lang.StringBuilder
kapselt eine modifizierbare Zeichenkette:
- Konstruktoren:
- public StringBuilder () //leere Zeichenkette
- public StringBuilder (String s)
- Instanzmethoden:
- public StringBuilder append (Typ s)
- public StringBuilder insert (int offset, Typ s)
Compiler verwendet StringBuilder, um Konkatenationen von Konstanten Zeichenketten zu realisieren:
- Code: System.out.print (s + t);
- Compiler: new StringBuilder().append(s).append(t).toString();
Was macht der Comiler?
newStringBuilder(). → neues Objekt mit leerem String
append(s) → String s anhängen
append (t) → String t anhängen
toString() → neues String-Objekt mit verkettetem String
Was sind Oberklassen?
Oberklassen vererben alle Variablen und nicht-privaten Methoden an ihre UNterklassen --> Objekte einer Oberklasse können deshalb durch Objekte der Unterklasse ersetzt werden
- Klassen ohne final-Markierung sind optional als oberklasse verwendbar
- Methoden,die in der Oberklasse als final deklariert sind, sind endgültig und dürfen in der UNterklasse nicht ersetzt werden
- Zugriffsrechte in Oberklassen:
public aus allen Klassen zugreifbar
/*ohne*/ aus allen Klassen d. gleichen Pakets zugreifbar
protected aus allen UNterklassen der Oberklasse zugreifbar
private nur innerhalb der Oberklasse zugreifbar
Was versteht man unter Polymorphie?
Polymorphie (Vielgestaltigkeit) bedeutet, dass ein und dieselbe Variable zur Laufzeit Objekte unterschiedlicher Klassen referenzieren kann:
- auch Subtyp-Polymorphie oder Subtyping genannt
- in Java ist Polymorphie an Vererbung gekoppelt (eingeschränkte) → eine Variable kann nur Objekte referenzieren, deren Klasse genau ihrem Typ entspricht oder eine Unterklasse davon ist.
Number n; // polymorphe Variable, weil Number = Oberklasse
n = new Integer (1);
n = new Double (2.3); // Integer und Double sind Unterklassen von Number
Objekte möglichst nur Über Schnittstellen-Referenzen benutzen, denn Programmteile Funktionieren so ohne Änderung mit verschiedenen Klasen.
java.lang.Iterable<T>
= generische Schnittstelle, die Herationen mit der for-each-Schleife ermöglichen.
<T> ist ein Typparameter und wird mit dem Namen der jeweiligen Implementierungsklasse belegt.
- einzige Schnittstellenmethode:
Iterator <T> iterator () //gibt Iterator zurück
- Implementierungsklassen:
z.B. Listenklassen im Paket java.util
java.util.Iterator <T>
- Schnittstellenmethoden:
- boolean
- hasNext()
- T next()
- Implementierungsklassen:
z.B. java.util.Scanner, anonyme Klassen in java.util
Was ist Kapselung?
Klassen mit privaten Instanzvariablen
Durch Kapselung werden die Daten der Klasse geschützt!
für in Objekten gekapselte Daten können konsistente Werte garantiert werden. Kapselung durch Markierung der Instanzvariablen auf private!
public final class Time {
private int minutes; private Instanzvariablen sind gekapselt, weil sie
private int hours; nur in den Methoden d. Klasse zugreifbar sind
public Time (int m, int n) {...}
Konstruktoren garantieren Konsistente Initialisierung
public void setTime() {....} öffentliche Methoden lassen nur Konsistenz erhaltende Zugriffe zu!
public string toString() {...}
Was ist eine Dynamische Bindung?
auch Späte Bindung,Late Binding
bedeutet,dass sich erst zur Laufzeit entscheidet,welche Methodenimplementierung aufgerufen wird:
Number n;
if (...) {
n= new Integer (1);
} else {
n= new Double (2.3);
}
int i= n.intValue(); <-- zur Laufzeit muss die Klasse des Objekts n bestimmt werden, um entscheiden zu können, ob Integer.intValue/Double: int Value()
- Java verwendet statische Bindung, wenn die aufgerufene Methode static/final/private markiert ist -> in diesen Fällen kann es keine unterschiedlichen Implementierungen in UNterklassen geben