Programmiertechnik I - HTWG Konstanz - Drachenfels

Stichworte der Lernzettel - Letzte Seite von jedem Skript...

Stichworte der Lernzettel - Letzte Seite von jedem Skript...


Konrad Grüner
Diese Lernkarten behandeln grundlegende Konzepte der Programmiertechnik auf Universitätsniveau, mit Fokus auf objektorientierte Programmierung in Java. Sie decken Themen wie Klassen, Objekte, Methoden, Vererbung, Polymorphie, Schnittstellen und Ausnahmen ab. Besonders hervorgehoben werden Konzepte wie Kapselung, dynamische Bindung und der Umgang mit Strings und Compilern. Die Karteikarten richten sich an Studierende der Informatik, die ihr Verständnis von Java und objektorientierter Programmierung vertiefen möchten.
Cartes-fiches
148
Utilisateurs
15
Langue
Allemand
Catégorie
Informatique
Niveau
Université
Créé / Mis à jour
27.12.2013 / 29.01.2025

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!

Klassenverebung (Inheritance)

Klassenverebung erlaubt die Definition ähnlicher Klassen, indem man die Gemeinsamkeiten in Oberklassen zusammengefasst und die Eigenheiten in davon abgeleiteten Unterklassen ergänzt.

 

Klassenverebung in UML siehe Bild.

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.

Schnittstellenvererbung

Schnittstellenverebung erlaubt die Definitioneinheitlich benutzbarer Klassen, indem man öffentliche Methoden in abgeleiteten Klassen unterschiedlich implementiert.

→ Schnittstellenvererbung und Klassenverebung können gemischt werden.

Grafische Darstellung mit UML: siehe Bild

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

Étudier