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.
Flashcards
148
Students
15
Language
German
Category
Computer Science
Level
University
Created / Updated
27.12.2013 / 29.01.2025

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

In welcher Reihenfolge wird der folgende Ausdruck abgearbeitet?

a = ( b + ~c++ +d ) * (double)e + f [ i ]

Die Auswertungsreihenfolge wird bestimmt durch den Vorrang der Operatoren (siehe Tabelle Script 3-4ff), Assoziativität und Klammerung.

Genaue Abarbeitungsreihenfolge Siehe Bild.

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.

Study