Objektorientierte
Programmierung und Modellierung
Einführung
19.10.17 - WS17/18 Hakan Aksu
Die eigentliche Einführung in den OOPM Kurs erfolgt durch Prof. Lämmel in der dritten Vorlesung
In den ersten beiden Vorlesungen:
- Organisation (Termine, Hausaufgaben, Klausuren…) - Einführung in die Java-Programmierung
Durchfallquote Programmierklausur im WS16/17 —> 30%
Inhalt
Organisation
• Wichtige Links
• Veranstaltungen und Kontakt
• Assignments
• Klausur
• Klausurzulassung
Wichtige Links
OOPM Link
http://softlang.wikidot.com/course:oopm1718
• Alle Informationen zur Veranstaltung
• Assignments
• Materialien aus Vorlesung/Übung/Praktikum
KLIPS Links
Vorlesung:
https://klips.uni-koblenz-landau.de/v/96699 Übung:
https://klips.uni-koblenz-landau.de/v/96698 Praktikum:
https://klips.uni-koblenz-landau.de/v/96700
• Ausfalltermine
• Anmeldungen zur Veranstaltung
• (Klausuranmeldung erfolgt auch über KLIPS)
Autokorrektor
https://softlang-lab.uni-koblenz.de/
• Abgabe der Hausaufgaben
• Einsehen der Korrekturergebnisse
Weitere Links
weitere Links wie Facebook-Gruppe, Literatur etc.
unter http://softlang.wikidot.com/course:oopm1718
Veranstaltungszeiten und
Kontakte
Übersicht
Montag Dienstag Mittwoch Donnerstag Freitag
8-10 (Praktikum)
10-12 Übung
12-14 Übung Vorlesung Vorlesung 14-16 Übung Übung Praktikum 2 x
Praktikum
16-18 Praktikum Praktikum
Generelle Infos
• Fragen vor/während/nach den Veranstaltungen stellen, anstatt E-Mails zu verschicken.
• Nur bei dringenden oder individuellen Fällen E-Mail verwenden.
• Unabhängig von der Anmeldung in Klips können Übungsgruppen und Praktikumsgruppen auch während des Semesters getauscht werden.
Vorlesung
Di. 12:15 - 13:45 in D028 Do. 12:15 - 13:45 in D028 Prof. Dr. Ralf Lämmel
rlaemmel@uni-koblenz.de
http://www.softlang.org/rlaemmel:contact
Übung
1. Gruppe Mo. 12:15 - 13:45 in E414 2. Gruppe Mo. 14:15 - 15:45 in K101 3. Gruppe Di. 10:15 - 11:45 in K101 4. Gruppe Di. 14:15 - 15:45 in M001 Hakan Aksu, M. Sc., M. Ed.
hakanaksu@uni-koblenz.de
http://www.softlang.org/hakanaksu:home
Programmierpraktikum
Mi 14-16 c. t. F 113 Lukas Christmann Mi 16-18 c. t. F 113 Benjamin Becker Do 14-16 c. t. F 113 Michael Monschau Do 14-16 c. t. F 112 Kevin Klein
Do 16-18 c. t. F 113 Dennis Bartschat Mi. 8-10 fällt vorerst aus
Vorsicht:
Überfüllt Vorsicht:
Überfüllt
Lukas Christmann: lukaschristmann@uni-koblenz.de Benjamin Becker: benny1@uni-koblenz.de
Michael Monschau: mmonschau@uni-koblenz.de Kevin Klein: kklein@uni-koblenz.de
Dennis Bartschat: dbartschat@uni-koblenz.de Die fünf Tutoren sind gleichzeitig Korrektoren
Programmierpraktikum
Assignments
Zusammensetzung der Hausaufgaben
1. Theorieteil
• Lösung als Text oder Grafik
• Abgabe als EINE PDF-Datei über den Autokorrektor
2. Programmierteil
• Lösung als Java Code
• Abgabe nur .java-Dateien über den Autokorrektor
• Verwendung von UTF-8 Kodierung
• Verwendung des „Default Packages“
Punktesystem der Hausaufgaben
1. Theorieteil
• 1 Punkt für den Kern der Lösung
• 1 Punkt für Korrektheit / Vollständigkeit im Sinne der Aufgabenstellung
2. Programmierteil
• 1 Punkt für den Kern der Lösung
• 1 Punkt für Korrektheit / Vollständigkeit im Sinne der Aufgabenstellung
• 1 Punkt für Form (etwa Beachtung von Programmierregeln)
Klausur
Teilklausuren
1. Theorie-Klausur
• Evtl. Probeklausur gegen Semestermitte
• Aus den Inhalten Vorlesung & Übung
• Schriftliche Prüfung 60-90 Minuten
2. Programmier-Klausur
• Evtl. Probeklausur gegen Semestermitte
• Aus den Inhalten Vorlesung & Praktikum
• Prüfung am Laborrechner über etwa 45 Minuten
Klausurtermine
1. Theorie-Klausur
• Do. 08.02.18 ab 12:00 Uhr in D028
2. Programmier-Klausur
• Fr. 23.02.18 in F312, F313, F314
• [ab 8 Uhr (1. Gruppe) nur bei zu hoher Anmeldezahl]
• ab 10 Uhr (2. Gruppe)
• ab 12 Uhr (3. Gruppe) 3. Nachklausuren
Juli/August 2018
Klausurzulassung
Klausurzulassung
• Vererbung der Zulassung aus den Vorjahren ab WS09/10 (Ausnahme WS13/14) möglich,
vorbehaltlich der Machbarkeit aus Sicht der
Prüfungsordnung, des Prüfungsamtes und des Datenstandes
Klausurzulassung
1. Theorie-Klausur
• Für 2/3 der Hausaufgaben Theorieteil müssen 1 Punkt oder mehr erreicht werden.
• Für 1/3 der Hausaufgaben Theorieteil müssen 2 Punkte erreicht werden.
2. Programmier-Klausur
• Für 2/3 der Hausaufgaben Programmierteil müssen 2 oder mehr Punkte erreicht werden.
Fragen zur Organisation?
Agenda -
Java-Programmierung
• Entwicklungsumgebung
• Projekte, Packages und Klassen
• Methoden und deren Aufrufe
• Datentypen & Variablen
• Nächstes mal:
• Arrays
• Bedingte Anweisung (IF)
• Schleifen (WHILE / FOR)
Entwicklungsumgebung
Eclipse
• Es gibt viele Entwicklungsumgebungen für Java
• Wir nutzen Eclipse!
• Download Eclipse:
http://www.eclipse.org/downloads/packages/
eclipse-ide-java-developers/oxygen1a
• Falls noch kein JDK 7 oder 8 installiert wurde:
http://www.oracle.com/technetwork/java/javase/
downloads/jdk8-downloads-2133151.html
Projekte, Packages und
Klassen
Java-Projekt (Kein) Package
Package Explorer
Klasse in
keinem Package Package
Klasse in einem Package
Geöffnete Klassen
Packagename Klassenname
Main-Methode
Konsole
Workspace
Methoden und
Methodenaufrufe
Main-Methode
Bei der Ausführung wird immer nach der Main-Methode gesucht
public static void main(String[] args) { }
Methoden
public static void main(String[] args) { }
Name der Methode
Parametertyp Sichtbarkeit
statische Methode?
Rückgabetyp
Parametername
wir verwenden zu Beginn nur „public static“-Methoden
Methodenaufruf
System.out.println("Hello World!");
Klasse System
Methodenaufruf mit Argumenten
Standard Output-Stream
Argument
Die Java-Bibliothek stellt viele Klassen und Methoden bereit.
Z.B. die Ausgabe von Zeichenketten in der Konsole:
LIVE-DEMO
• Erstellen von Projekten, Packages und Klassen
• Erstellen der Main-Methode
• Methodenaufruf zum Ausgeben von Texten in der Console
• Erstellen von weiteren Methoden
Variablen und Datentypen
Primitive Datentypen
Typname Größe Wrapper-Klasse Wertebereich boolean java.lang.Boolean true / false
char 16 bit java.lang.Character 0 ... 65.535 (z. B. 'A')
byte 8 bit java.lang.Byte -128 ... 127
short 16 bit java.lang.Short -32.768 ... 32.767
int 32 bit java.lang.Integer -2.147.483.648 ... 2.147.483.647
long 64 bit java.lang.Long -263 … 263 - 1
float 32 bit java.lang.Float +/-1,4E-45 ... +/-3,4E+38
int b = 4;
Datentyp der Variablen
Name der Variablen
Zuweisung
zugewiesener Wert
Verwendung von Variablen
in Java
Deklarieren und Initialisieren von Variablen
• Deklarieren (Erste Erwähnung einer Variable)
int a;
• Initialisieren (Erste Zuweisung eines Wertes)
a = 8;
• Deklarieren + Initialisieren
int b = 4;
häufig verwendete Datentypen
• Für Ganze Zahlen:
int
long
• Für Gleitkommazahlen:
float
double
• Für Texte:
char (einzelne Zeichen) String (Zeichenketten)
• Für Wahrheitswerte:
boolean
Arithmetische Operatoren
anwendbar
String
Manipulationen anwendbar
Boolesche Arithmetische
Operatoren anwendbar
Arithmetische Operatoren
Operator Beschreibung
+ Addition
- Subtraktion
* Multiplikation
/ Division
% Teilerrest, Modulo-Operation, errechnet den Rest einer Division + positives Vorzeichen, in der Regel überflüssig
- negatives Vorzeichen
++ Inkrement, Addiert 1 zu einer numerischen Variable
-- Dekrement, Subtrahiert 1 von einer numerischen Variable
Arithmetische Operatoren Beispiel
int a = 8;
int b = 2;
int c = a + b;
c *= b;
int d = c - a / b;
d++;
Was kommt am Ende für c und d
heraus?
Beachte:
c *= b —> c=c*b
Boolesche Operatoren
Operator Beschreibung
! Negation, invertiert den Ausdruck
&& Und, true, genau dann wenn beide Argumente true sind
|| Oder, true, wenn mindestens ein Operand true ist
^ Xor, true wenn genau ein Operand true ist
Boolesche Operatoren Beispiel
boolean istMensch = true;
boolean istTier = false;
boolean hatNochEssen = false;
boolean istHungrig = (istMensch || istTier) && !hatNochEssen;
Ist da jemand Hungrig?
Vergleichsoperatoren
Operator Beschreibung
== Gleichheit
!= Ungleichheit
> echt größer
< echt kleiner
>= größer gleich
<= kleiner gleich
Vergleichsoperatoren Beispiele
5 > 3 —> true 5 < 3 —> false
10 >=10 —> true
double a = 42.0;
double b = ?
Es soll gelten a != b —> true Was darf b sein?
Der Datentyp -String-
• Ein Datentyp für Zeichenketten
• Beispiele:
String s = "Hallo Welt!";
String t = "123: EinHundertdreiundzwanzig";
String Manipulationen
• Konkatenieren von Strings
String s = "Hallo";
String t = "Welt!";
String r = s.concat(t); //r = "HalloWelt!"
Alternativ: r = s + " " + t; //r = "Hallo Welt!“
• Weitere Manipulationen vorhanden, wie:
• Substring
• Split
• Trim
• ToLowerCase
• ToUpperCase
• Replace
• …
Übung macht den Meister
„Casten“
= Umwandeln eines Datentyps in einen anderen
• Implizites Casten
Daten des „kleineren“ Datentyps werden automatisch dem „größeren“ angepasst
—> kein Datenverlust
• Explizites Casten
Gewünschter neuer Datentyp wird angegeben
—> Datenverlust wird in Kauf genommen
Implizites Casten
• automatisches Umwandeln von —> nach
byte —> short, int, long, float, double short —> int, long, float, double
int —> long, float, double long —> float, double
float —> double
• Beispiel:
byte byteValue = 5;
short shortValue = byteValue; //ohne Datenverlust möglich
Explizites Casten
• Mögliche explizite Casts mit eventuellem Datenverlust:
byte <— short, int, long, float, double short <— int, long, float, double
int <— long, float, double long <— float, double
float <— double
• Beispiel:
double doubleValue = 2.453;
int intValue = (int) doubleValue; //Datenverlust!
Wrapper Klassen
• Jeder Primitive Datentyp besitzt eine Wrapper Klasse
—> Wrapper-Klassen bieten statische Hilfsmethoden zur Konvertierung eines primitiven Datentyps in einen String (Formatierung) und vom String zurück in einen primitiven Datentyp (Parsen).
—>Die Datenstrukturen wie Listen und Mengen, die in Java Verwendung finden, können nur Referenzen
aufnehmen. So stellt sich das Problem, wie primitive Datentypen diesen Containern hinzugefügt werden können. Wrapper-Objekte kapseln einen einfachen
primitiven Wert in einem Objekt, sodass eine Referenz existiert, die etwa in einer vorgefertigten Datenstruktur gespeichert werden kann.
Die Aussage wird erst im
weiteren Verlauf der
Vorlesung verständlich
Beispiele und
Casts „von“ & „nach“ String
• Deklarieren und initialisieren
Double d = 1.5343;
oder
Double d = new Double(1.5343);
• Double zum String casten:
d.toString();
• String zum Double casten
Double.valueOf("1.2345");
Live-Demo
• Verwendung von Primitiven Datentypen und Wrapper Klassen
• Verwendung von Operatoren
• Verwendung von Casts
Quiz
Finde den Fehler
double doubleValue = 1,5;
Quiz
Finde den Fehler
int doubleValue == 42;
Quiz
Finde den Fehler
float f = 42f
Quiz
Finde den Fehler
float f = 42d;
double d = 42f;
Quiz
Finde den Fehler
double d = 1.3;
boolean b = (d>=0)==false;
int i = 5;
float f = 4.3f;
byte b = 88;
double d = "Hi" + i + f + b;
Quiz
Finde den Fehler
int i = 5;
float f = 4.3f;
byte b = 88;
String s1 = "Hi" + i + f + b;
String s2 = i + f + b + "Hi";
Quiz
Finde den Unterschied
Zusammenfassung
• Umgang mit der Entwicklungsumgebung Eclipse
• Erstellen und verwalten von Projekten, Packages und Klassen
• Erstellen und aufrufen von Methoden
• Verwendung von Datentypen & Variablen