• Keine Ergebnisse gefunden

Im Hinblick auf die Klausur...

N/A
N/A
Protected

Academic year: 2022

Aktie "Im Hinblick auf die Klausur..."

Copied!
23
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6

Algorithmen und Datenstrukturen 06

Stefan Ploner

29. November 2011

(2)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6

1 Besprechung Blatt 5 O-Kalk¨ul

Praxisaufgaben

2 Objektorientierte Programmierung Allgemein

Referenzen Sichtbarkeit Konstanten 3 Vorbereitung Blatt 6

Anmerkungen

(3)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 O-Kalk¨ul

Umgang mit Schleifen

for (int i = 0; i < n; i++) for (int j = 0; j < n; j*=2)

doSomethingSimple(); // O(1)

Bestimmung des O-Kalk¨uls hier trivial O(n·logn)

for (int i = 0; i < n; i++) for (int j = 0; j < i; j*=2)

doSomethingSimple(); // O(1)

Bestimmung des O-Kalk¨uls hier nicht trivial, sondern wie in der letzten ¨Ubung besprochen z.B. ¨uber die gaußsche Summenformel!

(4)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 O-Kalk¨ul

Im Hinblick auf die Klausur...

triviale Ausdr¨ucke durch “Hinschauen” auswerten (spart Zeit)

f¨ur komplizierte Gebilde sollte man vor allem die gaußsche Summenformel verstanden haben

wenn nicht explizit anders gefordert kann der am schnellsten ansteigende Teil einer Summe einfach abgelesen werden:

O(logn)∈O(n1a)∈O(n)∈O(na)∈O(an)∈O(n!)∈O(nn) mit a>1

(5)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 O-Kalk¨ul

Mysterious Sort war Radix Sort (F¨achersortierung)

im Beispiel wird in jedem Schleifendurchlauf nach dem i-ten Bit der Integer Zahlen sortiert

dabei beginnt man mit dem least significant Bit und arbeitet sich der Reihe nach zum highest significant Bit vor

(6)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Praxisaufgaben

Fibonacci Zahlen

fn= 1

√ 5

"

1 +√ 5 2

!n

− 1−√ 5 2

!n#

Generell empfiehlt es sich nicht, einen Term dieser Gr¨oße in eine einzelne Zeile zu schreiben!

Leicht entsch¨arfte Version: Zeilenumbr¨uche an sinnvollen Stellen return 1 / Math.sqrt(5) *

(Math.pow((1 + Math.sqrt(5)), n) - Math.pow((1 - Math.sqrt(5)), n));

(7)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Praxisaufgaben

Fibonacci Zahlen

fn= 1

√ 5

"

1 +√ 5 2

!n

− 1−√ 5 2

!n#

Alternativ kann man zun¨achst Teile berechnen und in Variablen speichern:

double front = 1 / Math.sqrt(5);

double left = Math.pow((1 - Math.sqrt(5)) / 2, n);

double right = Math.pow((1 - Math.sqrt(5)) / 2, n);

return front * (left - right);

(8)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Praxisaufgaben

Binomialkoeffizienten

n!

k!·(n−k)!

K¨urzen von n!k!

int result = 1;

for (int i = k + 1; i < n; i++) result *= i;

Um m¨oglichst viel zu k¨urzen und so weit wie m¨oglich rechnen zu k¨onnen, sollte man gegebenenfalls k durch (n-k) ersetzen.

(9)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Praxisaufgaben

Noch Fragen zu Blatt 5?

(10)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Allgemein

Warum Klassen?

umso mehr (unstrukturierter) Code, desto weniger ¨Uberblick

Projekte werden aus ¨uberschaubaren Klassen zusammengesetzt

beim Erstellen einer Klasse kann man externen Code ausblenden

beim Verwenden einer Klasse braucht man sich ¨uber die interne Umsetzung keine Gedanken machen

an abgeschlossenen Klassen k¨onnen sp¨ater einfacher Korrekturen vorgenommen werden, auch ohne den

Gesamtzusammenhang des Programms genau zu verstehen

(11)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Allgemein

Bestandteile einer Klasse

1 Variablen

2 Methoden

3 Konstruktoren

(12)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Allgemein

Zugeh¨ origkeit zu Klasse oder Instanz

static: Klassenvariable / -methode

sonst: Instanzvariable / -methode

Instanzmethoden k¨onnen auf statische Variablen und Methoden zugreifen. (eindeutig einer Klasse zugeordnet)

Aber nicht umgekehrt!Die Klasse kann nicht wissen, auf welche Instanz zugegriffen werden soll.

Statische Klassen k¨onnen sogar dann aufgerufen werden, wenn keine Instanz existiert (main-Methode, Math-Klasse, ...)

(13)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Allgemein

Das new-Schl¨ usselwort

Klassen werden mit ihren statischen Variablen beim Programmstart angelegt

Instanzen m¨ussen w¨ahrend der Ausf¨uhrung erstellt werden class Beispiel {

public static void main(String[] args) {

// Neue Instanz der Klasse Beispiel erstellen Beispiel b = new Beispiel();

} }

Mit demnew-Schl¨usselwort wird der Konstruktor aufgerufen.

(14)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Allgemein

Konstruktoren

Ist kein Konstruktor im Code vorhanden, ist automatisch ein public-zugreifbarer, parameterloser Konstruktor verf¨ugbar

Sobald irgendein Konstruktor geschrieben wird, ist der automatische nicht mehr verf¨ugbar! (Man kann ihn nat¨urlich wieder von Hand hinzuf¨ugen)

class Beispiel {

// so sieht der default-Konstruktor aus:

public Beispiel() { } }

(15)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Referenzen

Referenzen

class Beispiel { String name;

public Beispiel(String name) { this.name = name;

}

public static void main(String[] args) { Beispiel b = new Beispiel("test");

} }

Was wird der Variable b eigentlich zugewiesen?

Eine Referenz zu dem Ort im Speicher, an dem die Instanz angelegt wurde

(16)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Referenzen

Referenzsemantik

int i = 2;

int j = i; // kopieren des Variablenwerts Beispiel b = new Beispiel("test");

Beispiel c = b; // kopieren des Variablenwerts (?)

Es wird die Referenz / die Speicheradresse der Instanz kopiert!

c.name = "ein anderer Test";

System.out.println(b.name); // "ein anderer Test"

Da beide Referenzen auf die selbe Instanz zeigen, wirken sich Anderungen gegenseitig aus.¨

Das ¨Ubergeben einer Referenz in einem Funktionsaufruf hat die selbe Auswirkung

(17)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Referenzen

Referenzsemantik

Beispiel b = new Beispiel("test");

Beispiel c = b;

if (b == c)

System.out.println("gleich");

Ein Vergleich zweier Referenzen liefert dann true, wenn sie auf die selbe Instanz zeigen.

Der Vergleich von 2 verschiedenen Instanzen mit gleichem Inhalt liefert false!

(18)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Referenzen

Referenzsemantik

// String von der Konsole lesen

Scanner scanner = new Scanner(System.in);

String input = scanner.nextLine();

if (input == "test") // Immer false!

System.out.println("gleich");

Auch String ist eine Klasse / Strings sind Instanzen

Da die nextLine()-Methode eine neue String-Instanz erstellt, zeigt sie immer an einen anderen Speicherort als ”test”

Selbst wenn test eingegeben wird, ist die Bedingung false

(19)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Referenzen

NullPointer(-Exception)

int[][] matrix = new int[4][]; // 4 Zeilen

matrix[0] = new int[3]; // 3 Spalten in Zeile 0 System.out.println(matrix[0][1]); // 0

System.out.println(matrix[2][0]); // NullPointerException

Auch Arrays sind Referenzen

int[][] matrix ist ein Referenz-Array, das auf mehrere normale Integer-Arrays zeigt

Referenzen haben den Standardwert null (Zeiger ins nichts)

Auf eine nicht vorhandene Instanz kann nicht zugegriffen werden⇒ NullPointerException

(20)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Sichtbarkeit

Sichtbarkeitsmodifikatoren

Sch¨utzen Klassen vor ungewollten Eingriffen

Meist interessiert der innere Aufbau gar nicht Klasse Package Unterklassen alle

private + - - -

default + + - -

protected + + + -

public + + + +

Gesch¨utzte Variablen k¨onnen m¨oglicherweise ¨uber ¨offentliche Getter und Setter doch erreicht werden

Erm¨oglichen Schutz vor ¨Anderungen und Wertebereiche

(21)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Konstanten

Konstanten

Keywordfinal vor den Variablennamen

zum Sicherstellen (oder Klarstellen) der Unver¨anderlichkeit

nur einmal zuweisbar

final-Klassenvariablen m¨ussen am Ende jedes Konstruktors initialisiert sein (Bei der Deklaration oder im Konstruktor)

bei final-Referenzen ist nur die Referenz konstant, nicht das referenzierte Objekt!

unter Umst¨anden Performancegewinn

Anmerkung: Das Keywordfinal existiert auch bei Methoden und Klassen

(22)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Anmerkungen

Zips werden nicht auf unerlaubte Zeichen gepr¨uft!

Sofern nicht anders verlangt, d¨urfen Instanzvariablen verwendet werden!

Trotzdem bitte nur dann, wenn sie auch n¨otig sind

(23)

Besprechung Blatt 5 Objektorientierte Programmierung Vorbereitung Blatt 6 Anmerkungen

Java char

Nicht nur ASCII oder 255 Zeichen, sondern 16-Bit-Unicode.

Daher lassen sich auch gr¨oßere int Zahlen in char konvertieren und umgekehrt.

Nicht alle ASCII Codes repr¨asentieren “normale” Textzeichen!

Referenzen

ÄHNLICHE DOKUMENTE

Definition einer Klasse für komplexe Zahlen mit Methoden zum Setzen und zum Abfragen von Real- und Imaginärteil. Später können weitere Methoden zum Setzen und Abfragen von Betrag

Erstellen Sie eine Funktion fft() zur Berechnung der Fast Fourier Transformation eines Vektors aus komplexen Zahlen und testen Sie Ihre Funktion fft() mit einem

• Eine Klasse kann ein Interface auch dann implementieren, wenn sie nicht alle seine Methoden implementiert. • Die Klasse ist dann als abstrakte Klasse

Ziel: Entwicklung eines Tests für die Methode add() unter Verwendung von JUnit .... Automatische Tests mit JUnit Ein erstes

• extends: Interfaces können im –Gegensatz zu Klassen– von mehreren anderen Interfaces abge- leitet werden. [ public ] interface Interfacename [ extends Interface-Liste]

■ Eine Klasse enthält einen speziellen Repräsentanten, ein spezielles Objekt, ein Schablonenobjekt (Prototyp) für ihre Objekte. ■ Ein Objekt wird aus einer Klasse

Sie k¨onnen in dieser Aufgabe auf die folgende statische Methode der Klasse FacebookHelper zur¨uckgreifen, die den Namen eines Nutzers als Parameter erwartet und eine Liste der

Gegeben ist die Klasse WayPoint. Diese Klasse beschreibt einen Punkt auf einer zwei- dimensionalen Karte anhand einer x- und y-Koordinate. Die Methode bekommt einen Parameter vom