OOP in Java: Beispiel

Werbung
Fachschaft
Mathematik und Informatik
Vorkurs Praktische Informatik I
und Programmierpraktikum I
Freitag, 1. September 2017
Wirtschaftsinformatik Wirtschaftsmathematik Lehramt Mathematik
Lehramt Informatik
Vorstellungsrunde
• Sven Rosenzweig
– Master Wifo, 4. Fachsemester
– Fachschaftsmitglied
– [email protected]
• Daniel Flachs
– Master Wifo, 5. Fachsemester
– Fachschaftsmitglied
– [email protected]
• Und ihr?
– Studiengang?
– Woher?
– Programmiererfahrung? Informatik in der Schule?
2
Ziel dieser Veranstaltung
• Grober und schneller Überblick über die Vorlesungen
Praktische Informatik I und Programmierpraktikum I
• Fokus: Programmiersprache Java
• Keine Panik: Alle Inhalte werden ausführlich in den
Vorlesungen behandelt!
Fragen
Traut euch, jederzeit Fragen zu stellen. Die Erfahrung zeigt, dass
die meisten eurer Kommilitonen auch nicht mehr wissen als ihr.
3
Überblick
1.
2.
3.
4.
5.
Einführung
Imperative Sprachkonstrukte von Java
Objektorientierung
Weitere Bereiche der praktischen Informatik
Allgemeine Hinweise
4
1. Einführung
5
Wozu Computer?
• Computer sind Hilfsmittel, die Aufgaben für Menschen lösen.
– Schnell und effizient, besonders bei wiederkehrenden Aufgaben oder
großen Datenmengen, …
– … aber nicht eigenständig intelligent.
• Programmiersprache: für den Menschen verständliche
Sprache, mit der Computer Anweisungen gegeben werden.
• Computer „verstehen“ nur 1 und 0  Programme werden
mithilfe eines Compilers in Maschinencode übersetzt.
6
Warum programmieren können?
• Um eine Aufgabe, die wir erledigen müssen, zu
automatisieren.
– z.B. um Datensätze einer Umfrage zu verarbeiten.
• Um Software zu produzieren, die von anderen benutzt wird
und ihnen einen Mehrwert bringt.
• Um die Arbeit anderer Programmierer nachvollziehen und mit
ihnen zusammenarbeiten zu können.
 Kompetenz von (Wirtschafts-) Informatikern!
7
Software? Programme?
Algorithmen? (1)
• Ein Programm ist eine gespeicherte Abfolge von
Anweisungen, die von einem Computer ausgeführt werden
können.
• Einem Programm liegt ein Algorithmus zugrunde:
eine eindeutige, unmissverständliche Anleitung, um eine
bestimmte, klar definierte Aufgabe zu erfüllen.
• Pseudo-Beispiele für Algorithmen aus dem täglichen Leben:
– IKEA-Anleitung
– Rezept aus dem Kochbuch
– …
8
Software? Programme?
Algorithmen? (2)
• Beispiele für Algorithmen in der Informatik:
– Gauß-Algorithmus (Schulmathematik)
– Quicksort (Sortieralgorithmus)
– …
• Entwurfsparadigma: Divide and Conquer (Teile und herrsche)
• Pseudocode ermöglicht es, einen Algorithmus formal und
standardisiert aufzuschreiben, ohne von den Eigenarten einer
speziellen Programmiersprache abhängig zu sein.
9
2. Imperative Sprachkonstrukte
der Sprache Java
10
Elemente von Java (informal)
In Anlehnung an natürliche Sprachen und deren Zweck:
• Worte/Vokabular: Variablen, Operatoren und Schlüsselwörter
• Satzstruktur: korrekte „Sätze“, definiert durch die Java-Syntax
• „Handlung“: logisch sinnvolle Aneinanderreihung korrekter Sätze
11
Sätze: Anweisungen
int x;
x = 2;
x = x + 5;
System.out.println(x);
Datentyp
Variable
Operator
Literal
Variablen-Deklaration
Wertzuweisung
Wertzuweisung mit Ausdruck
Ausgabe
• Eine Anweisung endet
immer mit einem
Semikolon.
12
Variablen
• Variablen „speichern“ Dinge (Daten) unter einem Namen ab,
zum Beispiel Zahlen oder Zeichenketten. Sie verweisen auf
den Bereich im Arbeitsspeicher, in dem die Daten liegen.
• Deklaration einer Variablen: Welcher Typ von Daten?
Datentyp
int x;
Variablenname
• Initialisierung einer Variablen: Belegung mit einem Wert.
x = 2;
• Kann auch gleichzeitig erfolgen:
int x = 2;
13
Variablen – Datentypen
Primitive Datentypen
• Ganzzahlen (Integer): int
• Fließkommazahlen: float und double
• Buchstaben (Character): char
• Zeichenketten: String (nicht wirklich primitiv)
• Wahrheitswert (wahr/falsch): boolean
Komplexe Datentypen
• Kommen später…
14
Variablen – Namen
Variablen müssen benannt werden.
Regeln: Ein Variablenname…
• besteht aus Buchstaben, Zahlen und Unterstrichen.
• beginnt mit einem Buchstaben (oder einem Unterstrich…).
• ist beliebig lang.
• ist case-sensitive (Groß-/Kleinschreibung relevant). Beispiel:
zahl, Zahl und ZAHL bezeichnen unterschiedliche Variablen.
15
Schlüsselwörter von Java
Reservierte Schlüsselwörter haben eine bestimmte Bedeutung
und dürfen nicht als Name für Variablen und Methoden
verwendet werden:
abstract, assert, boolean, break, byte, case, catch,
char, class, const, continue, default, do, double, else,
enum, extends, final, finally, float, for, goto, if,
implements, import, instanceof, int, interface, long,
native, new, package, private, protected, public, return,
short, static, strictfp, super, switch, synchronized,
this, throw, throws, transient, try, void, volatile,
while
16
Ablauf eines Java-Programms
• Ein Programm ist eine sequenzielle Abfolge von Anweisungen,
die in einer vorgegebenen Reihenfolge ausgeführt werden.
• Manche Anweisungen werden nur ausgeführt, wenn eine
Bedingung erfüllt ist.  if/else
• Manche Anweisungen werden wiederholt.  Schleifen
• Manche Anweisungen werden an verschiedenen Stellen des
Programms benötigt und können wiederverwendet werden.
 Methoden
17
Sequenzieller Programmablauf
int x = 2
print(x)
x = x + 2
print(x)
int y = 2*x + 1
print(y)
int x = 2;
System.out.println(x);
x = x + 2;
System.out.println(x);
int y = 2 * x + 1;
System.out.println(y);
2
4
9
• System.out.println() gibt
eine Zeichenfolge auf der
Konsole aus.
18
Bedingte Anweisungen: if
int x = 5;
int x = 5
if (x < 10) {
x < 10?
Nein
x > 20?
Nein
print("Fertig")
System.out.println("Klein");
Ja
}
print("Klein")
if (x > 20) {
System.out.println("Groß");
Ja
}
print("Groß")
System.out.println("Fertig");
Klein
Fertig
19
Bedingte Anweisungen: if/else
int x = 5;
Klein
Fertig
if (x < 10) {
System.out.println("Klein");
} else {
System.out.println("Groß");
}
int x = 5
System.out.println("Fertig");
Ja
x < 10?
Nein
print
("Groß")
print
("Klein")
print("Fertig")
20
Schleifen: while
int x = 5;
int x = 5
while (x > 0) {
System.out.println(x);
x = x – 1;
Nein
x > 0?
Ja
print(x)
}
System.out.println("Fertig");
x = x - 1
5
4
3
Laufvariable der
Schleife
print("Fertig")
2
1
Fertig
21
Operatoren (1)
• Mithilfe von Operatoren können Daten verändert und
Berechnungen durchgeführt werden.
• Arithmetische Operatoren
–
–
–
–
Addition: +
Subtraktion: Multiplikation: *
Division: /
• Zuweisungsoperator für Wertzuweisungen an Variablen: =
22
Operatoren (2)
• Vergleichsoperatoren dienen dem Vergleich zweier Werte,
z.B. in if-Anweisungen oder Schleifen.
–
–
–
–
–
Gleichheit: ==
Ungleichheit: !=
Kleiner: <
Größer: >
Kleiner-/größer-gleich: <=, >=
• Logische Junktoren
– Logisches Nicht: !
– Logisches Und: &&
– Logisches Oder: ||
23
Operatoren | Übungsaufgabe
Welchen Wert haben die Variablen nach Ende des Programms?
int a;
int b;
int c;
a
b
c
a
b
=
=
=
=
=
0;
a +
2 *
a –
a *
Lösung:
a = -7
b = -14
c = 2
1;
b;
7;
c;
24
Arrays
• Ein Array (dt. auch Feld) speichert eine Menge von Daten
gleichen Datentyps hintereinander und adressiert sie über
einen Index.
• Der Index beginnt bei 0!
• Die Anzahl der Elemente, die ein Array aufnehmen kann,
(seine Größe) wird einmal festgelegt und kann danach nicht
mehr verändert werden.
25
Arrays: Syntax
Beispiel: Repräsentiere einen Vektor in Java:
1
𝑎Ԧ ≔ 5
3
int[] vektor; //Deklaration: Array des Typs ’int’
vektor = new int[3];
//Initialisierung: Leeres Array mit 3 Elementen
vektor[0] = 1; //Belege Array mit Werten
vektor[1] = 5;
vektor[2] = 3;
26
Arrays: Beispiel Zahlenliste (1)
Beispiel: Liste von Ganzzahlen: 13, 9, 1, 5, 7, 21, 49, 3, 12, 42
int[] liste; //Deklaration: Array des Typs ’int’
liste = new int[10]; //Initialisierung
liste[9]
liste[1]
liste[2]
liste[5]
liste[8]
liste[0]
liste[3]
liste[6]
liste[7]
liste[4]
=
=
=
=
=
=
=
=
=
=
42; //Belege Array mit Werten
9;
1;
21;
0
1
2
3
4
5
6
12;
13 9 1 5 7 21 49
13;
5;
49;
3;
7;
7
3
8
9
12 42
27
Arrays: Beispiel Zahlenliste (2)
Beispiel: Liste von Ganzzahlen: 13, 9, 1, 5, 7, 21, 49, 3, 12, 42
// Alle Zahlen mit einer Schleife ausgeben.
13
9
int index = 0;
1
5
while (index < 10) {
System.out.println(liste[index]);
index = index + 1;
}
7
21
49
3
3
12
42
28
Methoden (1)
• Methoden sind quasi Unterprogramme, die Daten
entgegennehmen, sie mittels eines Algorithmus modifizieren
und ein Ergebnis zurückliefern.
• Vgl. mathematische Funktion.
• Sind Konzept der objektorienterten Programmierung, gehören
daher immer zu einer Klasse (siehe später).
• Eingabedaten: Parameter
• Ergebnis: Rückgabewert
29
Methoden (2)
Beispiel: Deklaration einer Methode zum Addieren zweier Zahlen
Rückgabetyp Methodenname
Parameterliste
int addiere(int a, int b) {
int ergebnis = a + b;
return ergebnis;
}
Rückgabe-Anweisung und -Wert
Aufruf: int x = addiere(3, 5);
30
Methoden (3)
• Der Rückgabetyp kann ein beliebiger primitiver oder
komplexer Datentyp sein.
• Außerdem gibt es Methoden, die keine Werte zurückgeben.
– Spezifiziere Rückgabetyp als void
– System.out.println() ist eine solche Methode. Sie gibt
Zeichenfolgen auf der Konsole aus, liefert aber keinen Wert zurück.
31
Methoden: Die main-Methode
Jedes Java-Programm hat eine spezielle Methode: main()
• Sie wird immer als erstes beim Start des Programms
aufgerufen.
• In ihr platziert man den Code, den man ausführen will, wenn
das Programm gestartet wird.
• Von dort aus kann man dann andere Methoden aufrufen.
public static void main (String[] args) {
System.out.println("Hallo Welt!");
}
32
Methoden | Übungsaufgabe
Schreibe eine Methode, die eine Zahl als int-Wert entgegennimmt und den
Betrag der Zahl zurückgibt.
Mögliche Lösung:
int betrag (int zahl) {
int betr = 0;
if (zahl >= 0) {
betr = zahl;
}
else {
betr = -1 * zahl;
}
return betr;
}
33
3. Objektorientierung
34
Objektorientierte Programmierung
• Idee der objektorientierten Programmierung (OOP):
Objekte und Konzepte der realen Welt
werden in Software nachgebildet
• Klassen bilden Eigenschaften und Verhaltensweisen realer
Dinge in Software ab und dienen dabei als „Bauplan“.
– Beispiele: Klasse der Menschen, Klasse der Studierenden, Klasse der
Autos, Klasse der Bücher…  „Typen von Dingen“
– Klassen besitzen Attribute (Eigenschaften) und Methoden (Aktionen).
• Objekte sind konkrete Ausprägungen einer Klasse.
– Beispiele: Paul und Anna sind Objekte der Klasse der Menschen.
„Einführung in die Informatik“ ist ein Objekt der Klasse der Bücher…
35
Wozu Objektorientierung?
• Ermöglicht es, leichter Dinge der realen Welt abzubilden.
• Programme werden flexibel und erweiterbar gehalten.
• Ermöglicht leichtere Wiederverwendung von Code.
• Vererbung
• uvm.
36
OOP in Java
• In Java stellen Klassen abstrakte Datentypen dar.
Objekte werden in Variablen gespeichert.
• Beispiel im Folgenden: Klasse „Studierender“
– Welche Eigenschaften hat eine Studentin/ein Student?
– Welche Methoden benötigt ein Objekt der Klasse „Studierender“?
37
OOP in Java: Beispiel (1)
class Studierender {
// Attribute -> Eigenschaften
String vorname;
String nachname;
String studienfach;
int fachsemester;
int matrNr;
double ecumKontostand;
Hier wird der
„Bauplan“ festgelegt.
}
38
OOP in Java: Beispiel (2)
class Studierender {
// ...
// Methoden (Aktionen)
void aendereStudienfach(String neuesFach) {
studienfach = neuesFach;
fachsemester = 1; // Fachsemester zurücksetzen
}
void naechstesSemester() {
fachsemester = fachsemester + 1;
}
// ...
}
39
OOP in Java: Beispiel (3)
public static void main (String[] args) {
Studierender hans = new Studierender();
// Erstellen eines Objekts vom Typ “Studierender”
hans.nachname = "Mueller";
hans.vorname = "Hans";
hans.studienfach = "B. Sc. Wirtschaftsinformatik";
hans.fachsemester = 1;
// Hans stellt fest, dass Lehramt viel cooler ist.
hans.aendereStudienfach("B. Ed. Informatik");
}
40
4. Weitere Bereiche der
praktischen Informatik
41
Was ist Softwareentwicklung?
Softwareentwicklung ist viel mehr als „nur“ Code schreiben:
•
•
•
•
Aufbau von Software planen: UML
Programme flexibel und erweiterbar halten: Modularität
Fehler in Software finden: Korrektheit, Verifikation und Tests
Performance der Software analysieren: Komplexität
Auch diese Aspekte sind Inhalte von PI1 und PP1.
42
Unified Modeling Language (UML)
• Aufbau von Software grafisch modellieren und darstellen.
• Verschiedene Diagramme für verschiedene Anwendungsfälle.
• Häufig eingesetzt: UML-Klassendiagramm
– Stellt die Software-Klassen, deren Attribute, Methoden und
Beziehungen untereinander dar.
– Beispiel:
Klassenname
Studierender
vorname : String
nachname : String
studienfach : String
fachsemester : int
matrNr : int
Attribute der Klasse
aendereFach() : void
naechstesSemester() : void
Methoden der Klasse
43
Modularität
• Programme flexibler und übersichtlicher gestalten…
• … indem man sie in einzelne, möglichst abgeschlossene Teile
zerlegt (vgl. „Divide and Conquer“).
• Kapselung z.B. durch Klassen, Methoden
• Beispiel: zerlege Methode „kochen“ in
– Zutaten vorbereiten
– Zubereiten
– Servieren
44
Korrektheit, Verifikation, Tests
• Grundregel: Jedes (komplexere) Programm enthält Fehler!
• Ein korrektes Programm erfüllt die Spezifikationen,
d.h. „es tut, was es soll“.
• Zwei Möglichkeiten zum Suchen von Fehlern
– Verifikation: mathematischer Beweis der Fehlerfreiheit eines
Programms
– Testen: Fehlerüberprüfung z.B. anhand von Test-Eingabedaten (keine
beweisbare Fehlerfreiheit!)
45
Komplexität: Laufzeit und Speicher
• Zum Lösen einer Aufgabe gibt es oftmals mehrere
verschiedene Algorithmen.
• Qualitätsmerkmale eines Algorithmus
– Wie schnell arbeitet der Algorithmus?  Zeitkomplexität
– Wie viel Speicher verbraucht er?  Speicherkomplexität
• Zeit- und Speicherkomplexität werden in Abhängigkeit der
Menge der Eingabedaten angegeben.
• Diese Themen sind unter anderem Inhalt der Vorlesung
„Algorithmen und Datenstrukturen“ (3. Fachsemester).
46
5. Allgemeine Hinweise
47
Wie lerne ich programmieren?
• Programmieren ist eine praktische Tätigkeit, die man nur
durch Übung und selbst Ausprobieren lernt!
• Hat man einmal gelernt, wie man programmiert, dann ist die
konkrete Programmiersprache später zweitrangig.
• In PI1 und PP1 gibt es wöchentliche Übungsblätter, die
eigenständig bearbeitet und abgegeben werden müssen.
• Auch wenn am Anfang vieles leicht und langsam zu sein
scheint: Am Ball bleiben, sonst verpasst ihr vielleicht den
Anschluss!
48
Programmierstil (1)
Negativbeispiel aus der Programmiersprache C
49
Programmierstil (2)
Konventionen, die man einhalten sollte, um den Code lesen und
auch in Zukunft noch verstehen zu können:
• Code einrücken.
• Code ausführlich kommentieren.
• Konventionen für Groß- und Kleinschreibung
–
–
–
–
Klassennamen: erster Buchstabe groß
Methoden- und Variablennamen: klein
Konstanten: komplett in Großbuchstaben
CamelCase verwenden, Bsp.: ageOfCurrentPerson
• In der Regel englische Namen und Kommentare.
50
Programmierstil (3)
• Gleich von Anfang an richtig angewöhnen!
• Manche Tutoren in PI1/PP1 ziehen Punkte für das
Nichteinhalten der Code-Konventionen ab!
51
Literatur
• Folien aus Vorlesung, Übung und Tutorium werden euch i.d.R.
zur Verfügung gestellt.
• Bücher (z.B. aus der Lehrbuchsammlung der UB oder online)
– „Java ist auch eine Insel“ (Galileo, Online-Openbook)
– Head First Java (O‘Reilly, Online-Openbook)
• Sonstige Internetquellen
– „Geheimtipp“ Wikipedia
– StackOverflow (stackoverflow.com)
– Diverse Online-Kurse und -Tutorials
Sich selbst Bücher zu kaufen ist normalerweise nicht notwendig,
da alle obigen Ressourcen frei verfügbar sind.
52
Veranstaltungskonzept PI1/PP1
• In beiden Veranstaltungen gibt es jeweils Vorlesungen, große
Übungen und Tutorien.
• Der komplette Lehrstoff wird dort vermittelt.
• Außer dem Verstehen, Lernen, Wiederholen und Üben des
dort Gelernten müsst ihr normalerweise nichts nebenher
machen (solange ihr den Lehrstoff versteht).
• Praktische Informatik I: Prof. Dr. Frederik Armknecht
• Programmierpraktikum I: Dr. Ursula Rost
53
Zeit für eure Fragen
Source: http://en.hdyo.org/assets/ask-question-1-ff9bc6fa5eaa0d7667ae7a5a4c61330c.jpg
54
Fachschaft
Mathematik und Informatik
Das war‘s!
Vielen Dank für eure Aufmerksamkeit
und viel Erfolg bei PI1 und PP1!
Wirtschaftsinformatik Wirtschaftsmathematik Lehramt Mathematik
Lehramt Informatik
Herunterladen