• Keine Ergebnisse gefunden

Einführung in die Programmierung

N/A
N/A
Protected

Academic year: 2022

Aktie "Einführung in die Programmierung"

Copied!
34
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Einführung in die Programmierung

by André Karge

Übung - Probeklausur, Generics

(2)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Heute

Probeklausur

Polymorphie

Einführung in die Programmierung | WS19/20 | André Karge 2/21

(3)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Probeklausur

(4)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Probeklausur

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 0

5 10 15 20 25 30 35

40 max

50%

Einführung in die Programmierung | WS19/20 | André Karge 4/21

(5)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung MethodenHeader

[visibility] [static] [returnType] methodenBezeichner ([ParameterType] [parameterName], ...)

visibility:

▶ public

▶ private

▶ protected

▶ keine angegeben? Default (Sichtbar im Package)

static

▶ methode static? schreibe static

▶ methode nicht static? schreibe kein static

returnType:

▶ soll methode was zurückgeben? nein? schreibe void

▶ ja? primitive Type? schreibe den jeweiligen primitive Type (int, float, double, bool, ...)

▶ ja? komplex Type? schreibe den jeweiligen komplex Type (Fahrrad, Person, ...)

(6)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung MethodenHeader

[visibility] [static] [returnType] methodenBezeichner ([ParameterType] [parameterName], ...)

visibility:

▶ public

▶ private

▶ protected

▶ keine angegeben? Default (Sichtbar im Package)

static

▶ methode static? schreibe static

▶ methode nicht static? schreibe kein static

returnType:

▶ soll methode was zurückgeben? nein? schreibe void

▶ ja? primitive Type? schreibe den jeweiligen primitive Type (int, float, double, bool, ...)

▶ ja? komplex Type? schreibe den jeweiligen komplex Type (Fahrrad, Person, ...)

Einführung in die Programmierung | WS19/20 | André Karge 5/21

(7)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung MethodenHeader

[visibility] [static] [returnType] methodenBezeichner ([ParameterType] [parameterName], ...)

visibility:

▶ public

▶ private

▶ protected

▶ keine angegeben? Default (Sichtbar im Package)

static

▶ methode static? schreibe static

▶ methode nicht static? schreibe kein static

returnType:

▶ soll methode was zurückgeben? nein? schreibe void

▶ ja? primitive Type? schreibe den jeweiligen primitive Type (int, float, double, bool, ...)

▶ ja? komplex Type? schreibe den jeweiligen komplex Type (Fahrrad, Person, ...)

(8)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung MethodenHeader

[visibility] [static] [returnType] methodenBezeichner ([ParameterType] [parameterName], ...)

visibility:

▶ public

▶ private

▶ protected

▶ keine angegeben? Default (Sichtbar im Package)

static

▶ methode static? schreibe static

▶ methode nicht static? schreibe kein static

returnType:

▶ soll methode was zurückgeben? nein? schreibe void

▶ ja? primitive Type? schreibe den jeweiligen primitive Type (int, float, double, bool, ...)

▶ ja? komplex Type? schreibe den jeweiligen komplex Type (Fahrrad, Person, ...)

Einführung in die Programmierung | WS19/20 | André Karge 5/21

(9)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung MethodenHeader

[visibility] [static] [returnType] methodenBezeichner ([ParameterType] [parameterName], ...)

methodenBezeichner:

▶ methoden beginnen IMMER mit einem Kleinbuchstaben

▶ können im camelCase geschrieben werden

▶ müssen die Methode beschreiben

Parameterliste

▶ besteht aus beliebig vielen Typ + bezeichner Paaren = ein Parameter

▶ bei mehr als einem Paar: Separation mittels Komma

▶ sind die Platzhalten für Dinge, die in die Methode hinein gegeben werden

▶ wenn die Methode keine Parameter braucht: muss man trotzdem eine leere Liste angeben:

methodenBezeichner()

(10)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung MethodenHeader

[visibility] [static] [returnType] methodenBezeichner ([ParameterType] [parameterName], ...)

methodenBezeichner:

▶ methoden beginnen IMMER mit einem Kleinbuchstaben

▶ können im camelCase geschrieben werden

▶ müssen die Methode beschreiben

Parameterliste

▶ besteht aus beliebig vielen Typ + bezeichner Paaren = ein Parameter

▶ bei mehr als einem Paar: Separation mittels Komma

▶ sind die Platzhalten für Dinge, die in die Methode hinein gegeben werden

▶ wenn die Methode keine Parameter braucht: muss man trotzdem eine leere Liste angeben: methodenBezeichner()

Einführung in die Programmierung | WS19/20 | André Karge 6/21

(11)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung MethodenHeader

[visibility] [static] [returnType] methodenBezeichner ([ParameterType] [parameterName], ...)

methodenBezeichner:

▶ methoden beginnen IMMER mit einem Kleinbuchstaben

▶ können im camelCase geschrieben werden

▶ müssen die Methode beschreiben

Parameterliste

▶ besteht aus beliebig vielen Typ + bezeichner Paaren = ein Parameter

▶ bei mehr als einem Paar: Separation mittels Komma

▶ sind die Platzhalten für Dinge, die in die Methode hinein gegeben werden

▶ wenn die Methode keine Parameter braucht: muss man trotzdem eine leere Liste angeben:

methodenBezeichner()

(12)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung MethodenHeader

[visibility] [static] [returnType] methodenBezeichner ([ParameterType] [parameterName], ...)

wir brauchen IMMER einen returnType, einen methodenBezeichner und eine ParameterListe

Bsp.:

▶ void querSumme(){...}

▶ public static int calcSum (int zahl1, int zahl2){...}

▶ private void interneMethode (Person person1){...}

▶ public static Car copyCar (Car car){...}

Einführung in die Programmierung | WS19/20 | André Karge 7/21

(13)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung MethodenHeader

[visibility] [static] [returnType] methodenBezeichner ([ParameterType] [parameterName], ...)

wir brauchen IMMER einen returnType, einen methodenBezeichner und eine ParameterListe

Bsp.:

▶ void querSumme(){...}

▶ public static int calcSum (int zahl1, int zahl2){...}

▶ private void interneMethode (Person person1){...}

▶ public static Car copyCar (Car car){...}

(14)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung MethodenHeader

[visibility] [static] [returnType] methodenBezeichner ([ParameterType] [parameterName], ...)

wir brauchen IMMER einen returnType, einen methodenBezeichner und eine ParameterListe

Bsp.:

▶ void querSumme(){...}

▶ public static int calcSum (int zahl1, int zahl2){...}

▶ private void interneMethode (Person person1){...}

▶ public static Car copyCar (Car car){...}

Einführung in die Programmierung | WS19/20 | André Karge 7/21

(15)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung MethodenHeader

[visibility] [static] [returnType] methodenBezeichner ([ParameterType] [parameterName], ...)

wir brauchen IMMER einen returnType, einen methodenBezeichner und eine ParameterListe

Bsp.:

▶ void querSumme(){...}

▶ public static int calcSum (int zahl1, int zahl2){...}

▶ private void interneMethode (Person person1){...}

▶ public static Car copyCar (Car car){...}

(16)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung MethodenHeader

[visibility] [static] [returnType] methodenBezeichner ([ParameterType] [parameterName], ...)

wir brauchen IMMER einen returnType, einen methodenBezeichner und eine ParameterListe

Bsp.:

▶ void querSumme(){...}

▶ public static int calcSum (int zahl1, int zahl2){...}

▶ private void interneMethode (Person person1){...}

▶ public static Car copyCar (Car car){...}

Einführung in die Programmierung | WS19/20 | André Karge 7/21

(17)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung MethodenHeader

[visibility] [static] [returnType] methodenBezeichner ([ParameterType] [parameterName], ...)

wir brauchen IMMER einen returnType, einen methodenBezeichner und eine ParameterListe

Bsp.:

▶ void querSumme(){...}

▶ public static int calcSum (int zahl1, int zahl2){...}

▶ private void interneMethode (Person person1){...}

▶ public static Car copyCar (Car car){...}

(18)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung Konstruktoren

Konstruktoren sind spezielle Methoden, die keinen Bezeichner haben und ein Objekt des Typen der Klasse, in der sie sich befinden zurück geben.

Das ganze sieht so aus:

[visibility] [ClassType] ([ParameterType] [parameterName], ...)

Wenn wir also eine Klasse Fahrrad schreiben, dann hat sie folgenden Standardkonstruktor public Fahrrad () {...}

Der Aufruf eines Konstruktors erfolgt mittels new Klassenname()

das erstellte Objekt muss jedoch in einer Variable abgelegt werden, was der linke Teil des Ausdrucks ist: Fahrrad meineVariable = new Fahrrad();

Konstruktoren können auch mittels Ad-hoc Polymorphie überladen werden.

Einführung in die Programmierung | WS19/20 | André Karge 8/21

(19)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung Konstruktoren

Konstruktoren sind spezielle Methoden, die keinen Bezeichner haben und ein Objekt des Typen der Klasse, in der sie sich befinden zurück geben.

Das ganze sieht so aus:

[visibility] [ClassType] ([ParameterType] [parameterName], ...)

Wenn wir also eine Klasse Fahrrad schreiben, dann hat sie folgenden Standardkonstruktor public Fahrrad () {...}

Der Aufruf eines Konstruktors erfolgt mittels new Klassenname()

das erstellte Objekt muss jedoch in einer Variable abgelegt werden, was der linke Teil des Ausdrucks ist: Fahrrad meineVariable = new Fahrrad();

Konstruktoren können auch mittels Ad-hoc Polymorphie überladen werden.

(20)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung Konstruktoren

Konstruktoren sind spezielle Methoden, die keinen Bezeichner haben und ein Objekt des Typen der Klasse, in der sie sich befinden zurück geben.

Das ganze sieht so aus:

[visibility] [ClassType] ([ParameterType] [parameterName], ...)

Wenn wir also eine Klasse Fahrrad schreiben, dann hat sie folgenden Standardkonstruktor public Fahrrad () {...}

Der Aufruf eines Konstruktors erfolgt mittels new Klassenname()

das erstellte Objekt muss jedoch in einer Variable abgelegt werden, was der linke Teil des Ausdrucks ist: Fahrrad meineVariable = new Fahrrad();

Konstruktoren können auch mittels Ad-hoc Polymorphie überladen werden.

Einführung in die Programmierung | WS19/20 | André Karge 8/21

(21)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung Konstruktoren

Konstruktoren sind spezielle Methoden, die keinen Bezeichner haben und ein Objekt des Typen der Klasse, in der sie sich befinden zurück geben.

Das ganze sieht so aus:

[visibility] [ClassType] ([ParameterType] [parameterName], ...)

Wenn wir also eine Klasse Fahrrad schreiben, dann hat sie folgenden Standardkonstruktor public Fahrrad () {...}

Der Aufruf eines Konstruktors erfolgt mittels new Klassenname()

das erstellte Objekt muss jedoch in einer Variable abgelegt werden, was der linke Teil des Ausdrucks ist: Fahrrad meineVariable = new Fahrrad();

Konstruktoren können auch mittels Ad-hoc Polymorphie überladen werden.

(22)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Wiederholung Polymorphie

Quelle: Vorlesungsscript 9 Slide 9

Einführung in die Programmierung | WS19/20 | André Karge 9/21

(23)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Sonstiges

Schreibt mit einem Kugelschreiber oder Füller - alles was mit Bleistift geschrieben ist, wird von uns ignoriert

Wenn ihr mehr als eine Lösung für eine Aufgabe abgebt, markiert die, welche von uns bewertet werden soll. Wenn das nicht der Fall ist, suchen wir uns eine aus!

Leserliches Schreiben ist von Vorteil - was wir nicht lesen können, können wir auch nicht bewerten.

Lest die Aufgabenstellung genau!

(24)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Polymorphie part 2

Einführung in die Programmierung | WS19/20 | André Karge 11/21

(25)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Inklusionspolymorphie (Vererbung) Insel 5.8

Vererbung

Grundprinzip der Objektorientierten Programmierung (OOP)

Klassen erben Attribute und Methoden von übergeordneten Klassen

Stichwort extends

in der Regel spricht man von Parent-classes und Child-classes (siehe Vorlesung)

(26)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Vererbung - Insel 5.8

Sichtbarkeit von Attributen und Methoden

Kennen wir schon aus früheren Übungen: public, protected, private

public = Attribut / Methode einer Klasse mit diesem Keyword sind von allen anderen Klassen aus direkt sicht- und aufrufbar

protected = Attribut / Methode einer Klasse mit diesem Keyword sind von allen anderen Klassen nicht sichtbar, außer von child-Klassen

private = Attribut / Methode einer Klasse mit diesem Keyword sind von allen anderen Klassen nicht sichtbar, einschließlich child-Klassen

Einführung in die Programmierung | WS19/20 | André Karge 13/21

(27)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Vererbung - Insel 5.8

Overriding

Methoden von Parent-classes können in Child-classes überschrieben werden

Stichwort: @Override

wird vor den Methodenheader geschrieben

Wenn mehrere Klassen ein und die selbe Funktion durchführen können sollen, aber der Ablauf der Funktion unterschiedlich ist, sollte man in der übergeordneten Instanz angeben, dass es diese Funktion gibt und dann in den untergeordneten Instanzen konkret definieren

Beispiel: alle 2D Körper haben eine Funktion berechneFläche, nur die Fläche eines

Quadrates wird anders berechnet als die eines Kreises

(28)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Vererbung - Insel 5.8

Beispiel - Parent Class

public class Koerper { protected String name;

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

}

public float getArea() { return 0;

}

public void printName() { System.out.println(this.name);

} }

Einführung in die Programmierung | WS19/20 | André Karge 15/21

(29)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Vererbung - Insel 5.8

Beispiel - Child Classes

public class Quadrat extends Koerper { // abgeleitet von Koerper (heißt: Zugriff auf name, private float laenge; // std. Konstr., getArea())

public Quadrat(String name, float l) {

super(name); // Aufruf des Konstruktors der parent-class this.laenge = l;

}

@Override // Überschreibung der vorhandenen Parent-Methode public float getArea() {

return this.laenge * this.laenge;

} }

public class Circle extends Koerper { private float radius;

public Circle(String name, float radius) { super(name);

this.radius = radius;

}

@Override

public float getArea() {

return (float)(Math.PI * Math.pow(this.radius, 2));

(30)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Vererbung - Insel 5.8

Beispiel Instanziierung

// Virtuelle Methoden

Quadrat q = new Quadrat("eins", 42); // neues Quadrat

Koerper k = new Quadrat("zwei", 5); // ein Quadrat ist automatisch auch ein Körper Circle c = new Circle("kreis1", 12);

Koerper ck = new Circle("kreis2", 42);

q.printName();

System.out.println(q.getArea()); // Methode wurde in Koerper definiert k.printName();

System.out.println(k.getArea());

c.printName();

System.out.println(c.getArea());

ck.printName();

System.out.println(ck.getArea());

Einführung in die Programmierung | WS19/20 | André Karge 17/21

(31)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Vererbung - Insel 5.8

Übungsaufgabe - 15min

1. Schreiben Sie ein Programm, das aus folgenden Klassen besteht: Koerper2d, Kreis, Quadrat, Rechteck, Dreieck

2. Nutzen Sie Koerper2d als Parent und den Rest als Child (möglicherweise gibt es auch eine Klasse die von einer anderen Klasse erben kann?)

3. Definieren sie die Funktionen für den Flächeninhalt und den Umfang der Koerper

4. Testen Sie ihr Programm in einer entsprechenden main-Methode

(32)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Interfaces

Einführung in die Programmierung | WS19/20 | André Karge 19/21

(33)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Interfaces - Insel 6.7

Beschreibung

Setzt eine Bedingung für die Instanziierung von Objekten (Methoden im Interface müssen implementiert werden)

Methoden können jedoch unterschiedlich realisiert sein

Stichwort: interface und implements

public interface IKoerper {

public float getArea(); // Was muss eine Klasse an Methoden Implementieren public void printName();

}

public class Circle implements IKoerper { // Implementation eines Interfaces public float getArea() { // konkrete Implementation des Interfaces

return (float)(Math.PI * Math.pow(this.radius, 2));

}

public void printName() { // Ebenso wie hier

System.out.println("Hallo! Ich bin " + this.name);

}

(34)

Einführung in die Programmierung: by André Karge,Übung - Probeklausur, Generics Bauhaus-Universität Weimar

Fragen?

Einführung in die Programmierung | WS19/20 | André Karge 21/21

Referenzen

ÄHNLICHE DOKUMENTE

• Man kann sich bei Generics merken: Man nutzt Platzhalter (<Typ>) an bestimmten Stellen im Code, den man für verschiedene Typen nutzen möchte. • Bei der Nutzung beschreibt

▶ eine Liste aus Variablen (mit Komma getrennt), die in die Methode gegeben werden (brauchen einen Typen und einen Bezeichner).. Einführung in die Programmierung: by André Karge,Übung

Deswegen fließt die Antwort von Aufgabe 3.a.iii) nicht mit in die Bewertung ein... Einführung in die Programmierung: by André Karge,Übung - Verzweigungen und

// Es wird kein Zustand von vorhandenen Objekten geändert - static public static final Complex add(Complex z1, Complex z2) {. return new Complex(z1.real + z2.real, z1.imag +

private Node front; // Referenz auf das erste Element in der Liste private Node rear; // Referenz auf das letzte Element in der Liste private int nodeCount; // Übersicht, wie

Schreiben Sie Ihre einfach verkettete Liste von letzter Woche um, dass sie anstelle von integer einen Generic Datentypen abspeichert. Testen sie diese generische Liste mit den

• protected = Attribut / Methode einer Klasse mit diesem Keyword sind von allen anderen Klassen nicht sichtbar, außer von child-Klassen.. • private = Attribut / Methode einer Klasse

public class Node <meinVariablerTyp> { // <...> gibt an, dass die Klasse einen generic verwendet private meinVariablerTyp data; // Inhalt von unserem noch nicht