• Keine Ergebnisse gefunden

Objektorientierte Programmierung und Modellierung

N/A
N/A
Protected

Academic year: 2021

Aktie "Objektorientierte Programmierung und Modellierung"

Copied!
62
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Objektorientierte

Programmierung und Modellierung

Einführung

19.10.17 - WS17/18 Hakan Aksu

(2)

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%


(3)

Inhalt

Organisation

Wichtige Links

Veranstaltungen und Kontakt

Assignments

Klausur

Klausurzulassung

(4)

Wichtige Links

(5)

OOPM Link

http://softlang.wikidot.com/course:oopm1718

Alle Informationen zur Veranstaltung

Assignments

Materialien aus Vorlesung/Übung/Praktikum

(6)

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)

(7)

Autokorrektor

https://softlang-lab.uni-koblenz.de/

Abgabe der Hausaufgaben

Einsehen der Korrekturergebnisse

(8)

Weitere Links

weitere Links wie Facebook-Gruppe, Literatur etc.

unter http://softlang.wikidot.com/course:oopm1718

(9)

Veranstaltungszeiten und

Kontakte

(10)

Ü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

(11)

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.

(12)

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

(13)

Ü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

(14)

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

(15)

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

(16)

Assignments

(17)

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“

(18)

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)

(19)

Klausur

(20)

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

(21)

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

(22)

Klausurzulassung

(23)

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

(24)

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.

(25)

Fragen zur Organisation?

(26)

Agenda -

Java-Programmierung

Entwicklungsumgebung

Projekte, Packages und Klassen

Methoden und deren Aufrufe

Datentypen & Variablen

Nächstes mal:

Arrays

Bedingte Anweisung (IF)

Schleifen (WHILE / FOR)

(27)

Entwicklungsumgebung

(28)

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

(29)

Projekte, Packages und

Klassen

(30)

Java-Projekt (Kein) Package

Package Explorer

Klasse in

keinem Package Package

Klasse in einem Package

Geöffnete Klassen

Packagename Klassenname

Main-Methode

Konsole

Workspace

(31)

Methoden und

Methodenaufrufe

(32)

Main-Methode

Bei der Ausführung wird immer 
 nach der Main-Methode gesucht

public static void main(String[] args) { }

(33)

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

(34)

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:

(35)

LIVE-DEMO

Erstellen von Projekten, Packages und Klassen

Erstellen der Main-Methode

Methodenaufruf zum Ausgeben von Texten in der Console

Erstellen von weiteren Methoden

(36)

Variablen und Datentypen

(37)

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

(38)

int b = 4;

Datentyp der Variablen

Name der Variablen

Zuweisung

zugewiesener Wert

Verwendung von Variablen

in Java

(39)

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;

(40)

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

(41)

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

(42)

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

(43)

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

(44)

Boolesche Operatoren Beispiel

boolean istMensch = true;

boolean istTier = false;

boolean hatNochEssen = false;

boolean istHungrig = (istMensch || istTier) && !hatNochEssen;

Ist da jemand Hungrig?

(45)

Vergleichsoperatoren

Operator Beschreibung

== Gleichheit

!= Ungleichheit

> echt größer

< echt kleiner

>= größer gleich

<= kleiner gleich

(46)

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?

(47)

Der Datentyp -String-

Ein Datentyp für Zeichenketten

Beispiele:

String s = "Hallo Welt!";

String t = "123: EinHundertdreiundzwanzig";

(48)

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

(49)

„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

(50)

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

(51)

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!

(52)

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

(53)

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");

(54)

Live-Demo

Verwendung von Primitiven Datentypen und Wrapper Klassen

Verwendung von Operatoren

Verwendung von Casts

(55)

Quiz

Finde den Fehler

double doubleValue = 1,5;

(56)

Quiz

Finde den Fehler

int doubleValue == 42;

(57)

Quiz

Finde den Fehler

float f = 42f

(58)

Quiz

Finde den Fehler

float f = 42d;

double d = 42f;

(59)

Quiz

Finde den Fehler

double d = 1.3;

boolean b = (d>=0)==false;

(60)

int i = 5;

float f = 4.3f;

byte b = 88;

double d = "Hi" + i + f + b;

Quiz

Finde den Fehler

(61)

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

(62)

Zusammenfassung

Umgang mit der Entwicklungsumgebung Eclipse

Erstellen und verwalten von Projekten, Packages und Klassen

Erstellen und aufrufen von Methoden

Verwendung von Datentypen & Variablen

Referenzen

ÄHNLICHE DOKUMENTE

● Ziel: Entwurf eines Programmes zur Lösung einer Aufgabe.. ● concern:

Aufgabe 1 Schreiben Sie ein C-Programm suche.c, dass ein Feld von Ganzzahlen (int) linear nach einer bestimmten Zahl durchsucht.. Schreiben Sie dafür eine Funktion mit

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

 Viele wichtige Verwaltungstätigkeiten einer Universität werden über die Studienabteilung abgewickelt. Studenten können hier immatrikulieren und inskribieren, sowie sich aber

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

Wenn man über einen Container (z.B. Listen oder Arrays) iterieren will verwendet man FOR-EACH-Schleifen. for (TYPE name : variable)

Ein Problem ist algorithmisch lösbar, wenn ein Algorithmus existiert der für beliebige Eingaben die korrekte Ausgabe in endlicher Zeit liefert, vorausgesetzt man gibt dem Algorithmus

Die Bezeichnung der Variablen sollte eine eindeutige Beschreibung des Zustands (Aktion) für das „1“-Signal des Eingangs (Ausgangs) wiedergeben. Bsp: Endschalter Jalousie (Öffner,