26
Seite 1 CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik) Algorithmen und Programme Th Letschert

CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 1

CS1005Objektorientierte Programmierung Bachelor of Science (Informatik)

Algorithmen und Programme

Th Letschert

Page 2: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 2

I want You for Java !

Page 3: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 3

Allgemeines

Lernziel / InhaltEinführung in die objektorientierte Programmierung

Java

Grundbegriffe der Softwaretechnik

Literatur– Folien / Skript / Anleitungen

[Kurs A, B: http://homepages.thm.de/~hg51/Veranstaltungen/OOP_WS13_14/index.html , Moodle-Kurse, werden eingerichtet ]

Jedes beliebige neuere Java Buch

Oracle Dokumentation

[ http://www.oracle.com/technetwork/java/javase/documentation/index.html ]

SoftwareJava SE 7 – JDK !

[ http://www.oracle.com/technetwork/java/javase/downloads/index.html ]

Entwicklungsumgebung

Eclipse Eclipse IDE for Java Developers [http://www.eclipse.org/downloads/]

Page 4: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 4

Organisation

Kursaufteilung von OOP9 Kurse

Gleicher Lehrinhalt

Gleiche Anforderungen

Unterschiedliche Dozenten

Kurse A-J

Wahlfreiheit bei der Kurswahl außer:Medizin-informatik ~> Kurs H oder I (Dozenten Lidwin / Schwarz)Reserviert für MIBio-Informatik ~> Kurs K oder J (Dozent Schölzel)BI-Studierende werden bei der Platzvergabe hier bevorzugt bevorzugt, ansonsten benachteiligt.

Studierende dieser Studiengänge besuchen die entsprechenden Kurse

Alle anderen können einen Kurs frei wählen

Das bedeutet aber nicht, dass sie einen Platz in einem Kurs ihrer Wahl garantiert bekommen.

Feste Kurseinteilung erfolgt in der zweiten regulären Vorlesungswoche.

~> Weiteres zur Orgsanisation: Herr Schölzel

Page 5: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 5

OOP

Algorithmen und Programme

Page 6: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 6

Algorithmen und Programme

Informatik – zentrale IdeeTrenne Maschinen auf in Hardware und Software:

– Hardware: Ausführende Maschinerie– Software: Handlungsvorschrift

ENIAC: erster elektronischer Computer (1946) mitProgramm (Patch-Kabel und ca. 3000 Schalter in

bestimmter Konstellation),Programmierer (damals „Computer“ genannt) und

Hardware (27 Tonnen Elektronik)

Programm

Hardware Programmierer

Page 7: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 7

Algorithmen und Programme

Algorithmus – DefinitionEin Algorithmus ist eine detaillierte und explizite Vorschrift zur schrittweisen Lösung eines Problems, d. h. eine Vorschrift zur Lösung einer Aufgabe, die präzise formuliert, in endlicher Form dargestellt und effektiv ausführbar ist.

Beispiel: Euklidscher Algorithmus

– Lies zwei ganze Zahlen in die Variablen x und y ein

– Solange der Wert von x größer 0 ist wiederhole: Wenn x < y dann vertausche die Inhalte von x und y Setze x auf die Differenz x-y

– Gib den Wert von y (ist der gesuchte ggt) aus

Eingabe

Rechenaktionen

Ausgabe

Page 8: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 8

Algorithmen und Programme

Euklidscher Algorithmus zur Berechnung des GGT von 9 und 12

– x sei 9 und y und y sei 12

– Solange der Wert von x größer 0 ist wiederhole: Wenn x < y dann vertausche die Inhalte von x und y Setze x auf die Differenz x-y

– y ist der gesuchte ggt

ProgrammEin Programm ist ein Algorithmus, der in einer exakt festgelegten, maschinell ausführbaren Programmiersprache notiert wurde.

Beispiel: Programm zur Berechnung des GGT von 9 und 12:

int x = 9;int y = 12;while (x > 0) { if (x<y) { int t = y; y = x; x = t; } x = x-y;}

Programmiersprache C(sehr ähnlich so auch in: C++, C#, Java, ... )

„Programm“ und „Algorithmus“ werden heute i.A. nicht mehr streng unterschieden.

Page 9: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 9

Algorithmen und Programme

Programm zur Berechnung des GGT von eingegebenen Zahlen in Java

package ggt;

import javax.swing.JOptionPane;

public class Euklid {

public static void main(String[] args) {

String xS = JOptionPane.showInputDialog("Bitte 1-te Zahl eingeben");String yS = JOptionPane.showInputDialog("Bitte 2-te Zahl eingeben");

int x = Integer.parseInt(xS);int y = Integer.parseInt(yS);

while (x > 0) {if (y > x) {

int t = x;x = y; y = t;

}x = x-y;

}JOptionPane.showMessageDialog(null, "GGT: " + y);

}}

Page 10: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 10

Algorithmus und Programm

Programm – Wesentliche Bestandteile Variable

Ablageplatz für Werte

realisiert als Speicherstelle im Hauptspeicher Register in der CPU

AusdruckRechenvorschrift zu Bestimmung eines Wertes aus anderen Werten und/oder dem Inhalt von Variablen

ZuweisungTransfer von Werten

aus Variablen oder Ausdrücken in Variablen

VerzweigungProgramm-Fortsetzung abhängig von einer Bedingung

SchleifeWiederholung (meist) abhängig von einer Bedingung

Variable

Zuweisung

Ausdruck

Schleife

int a = 9;int i = 12;while (x > 0) { if (x<y) { int t = y; y = x; x = t; } x = x-y;}

Verzweigung

Page 11: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 11

Programmbestandteile

Algorithmus – Variable Variablen werden nicht wie in der Mathematik als Namen von Werten

verstanden sondern als Namen von Speicherplätzen

Variablen enthalten in der Regel eine in der Zeit wechselnde Folge von Werten

Die Werte werden oft mit indizierten mathematischen Variablen beschrieben. Die Indizes entsprechen Zeitpunkten im Ablauf (Beginn eines Schleifendurchlaufs sind übliche Zeitpunkte)

int x = 12;int y = 18;int t = 0;

while (x>0) { if (x<y) { t = x; x = y; y = t; } x = x-y;}

x y t

12 18 0 6 12 12 6 6 6 0 6 6

Zeit

Variablen und ihre Wertezu unterschiedlichen Zeiten

im Programmablauf

GGT-Algorithmus als Programm

x y t

x0 y

0 t

0

x1 y

1 t

1

x2 y

2 t

2

x3 y

3 t

3

Werte von Programm-Variablen werden oft mit mathematischen

Variablen beschrieben.

x hat am Anfang den Wert x0

x1 = y

0-x

0 falls y

0 > x

0

x1 = x

0-y

0 falls x

0 ≥ y

0

Zeit~ Index

Variable x

Page 12: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 12

Programmbestandteile

Algorithmus – Zuweisung und Ausdruck

AusdruckDer Wert eines Ausdrucks wird mit den aktuellen Werten der Variablen berechnet

ZuweisungDie Zuweisung überschreibt den Wert einer Variablen: Der Speicher ändert seinen Zustand

x = x - y;12

9

Speichermit Variablenwerten

vorher !

···

···

x

y

12 9

-3

3

9

···

···

x

y

Speichermit Variablenwerten

nachher !

Variable

Wert

Page 13: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 13

Programmbestandteile

Algorithmus – Verzweigung

VerzweigungDie nächste(n) Aktion(en) wird/werden abhängig von einer Bedingung bestimmt

BedingungAusdruck dessen Wert ein Wahrheitswert ist (wahr / falsch)

if (x>y) {

t = x;

x = y;

y = t;

}

Bedingung Nur wenn der aktuelle Wert der Variablen x größer ist als der aktuelle Wert der Variablen y dann führe die folgenden Aktionen aus.

Aktionen

Page 14: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 14

Programmbestandteile

Algorithmus – Schleife

SchleifeDie nächste(n) Aktion(en) wird/werden abhängig von einer Bedingung weiter ausgeführt.

BedingungAusdruck dessen Wert ein Wahrheitswert ist (wahr / falsch). Er regelt die Fortsetzung der Schleife.

Die Bedingung wird vor Eintritt und vor jedem Durchlauf geprüft.

while (x>0) { if (x<y) { t = x; x = y; y = t; } x = x-y;}

Bedingung Nur wenn der aktuelle Wert der Variablen x größer als 0 ist, dreht sich die Schleife weiter.

Aktionen

Page 15: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 15

Datentypen

Programm – Datentyp

Datentyp Im Speicher des Rechners werden alle Daten in Form von Bit-

Sequenzen (0/1-Folgen) abgelegt.

Um die Daten verarbeiten zu können muss bekannt sein welchen Typ sie haben (wie lang / wie viele Bits welche Codierung).

Die Information über Länge und Codierung einer Bit-Sequenz bzw. eines Bereichs im Speicher bezeichnet man als Datentyp oder kurz Typ.

Page 16: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 16

Datentypen

Beispiel: Bedeutung des Datentyps

01001010011110101010000101010010101001000010010000100100001001000010100010010

Beginn Speicherbereich von Variable a

a = a + 1;

Anweisung

Was ist der Wert der Variable a?- Ganze Zahl in einem Byte ~> 133- Zahl im 2-er Komplement in zwei Byte ~> -31414- Zeichen in Windows-1252 Code (ein Byte) ~> Zeichen '…' - Zeichen in ISO-8859-1 Code (ein Byte) ~> nicht definiert- Zeichen UTF-8 Codierung (zwei Byte) ~> Zeichen 蕉- · · ·

Ohne Wissen über den (Daten-) Typ von a kann die Anweisung nicht ausgeführt werden!

Wie viele Bits soll ich verarbeiten.

Welche Codierung haben sie?

Page 17: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 17

Datentypen

Information über Datentypen

Die Information über den Typ von Speicherstellen kann prinzipiell auf zwei Arten verwaltet werden:

Explizite Speicherung des Typs

Zu allen Daten wird eine Typ-Information in einem bestimmten verabredeten Code gespeichert.

Implizite Informationen über den TypJeder Verarbeiter muss (irgend-woher) wissen welchen Typ die Bits im Speicher haben.

Vorgehen bei (typisierten) ProgrammiersprachenDas Programm als Verarbeiter der Daten enthält die Informationen über die Typen:

aus Informationen des Programmierers / der Programmiererin durch abgeleitetes (berechnetes) Wissen über die Typen

Page 18: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 18

Datentypen

Information über Datentypen / Beispiel

int x = 12;int y = 18;int t = 0;

while (x>0) { if (x<y) { t = x; x = y; y = t; } x = x-y;}

Programm

Programmierer:

„die Variable x habe den Typ int“

=> Konventionen der verwendeten Programmiersprache: „Ganze Zahl im 2er-Komplement in 4 Bytes“

Aha, x und y sind ints, also ist mit „-“ die Subtraktion von 2 Werten im 2er-Komplement der Länge 4 Bytes gemeint!

Page 19: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 19

Datentypen

Datentypen im Programm

Information über den Typ von Speicherstellen werden auf verschiedene Arten in Programmen eingesetzt. Wichtige Beispiele sind:

– Werte-Bezeichnungen (Literale) Notationen (Bezeichnungen) für Werte, sogenannteLiterale, haben einen zugeordneten Typ.

– Variablendefinitionen mit Typ Variablen werden mit einem bestimmten Typ im Programm definiert.

– Explizite UmrechnungGelegentlich muss das Programm explizite Anweisungen enthalten mit denen von einer Codierung in die andere umgerechnet wird.

int x = 12;

int x = Integer.parseInt("12");

"12" 12 ≠

ein int-Literal ein String-Literal

Page 20: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 20

Datentypen

Literale – Wertebezeichnungen Für Werte verwendet man übliche Bezeichnungen

Diesen ist implizit ein bestimmter Typ (Speicherformat, Codierung) zugeordnet.

Th Letschert

12 Lieber Computer, ich meine die Zahl 12. Genau gesagt meine ich die Bitsequenz, die einer Ganzzahldarstellung im 2-er Komplement der Zahl 12 zugeordnet ist. Also die folgenden Bits im Speicher (Byte-weise gruppiert):

0000 0000 0000 00000000 00000000 1100

"12"  Lieber Computer, ich meine die Folge bestehend aus den Zeichen 1 und 2. Genau gesagt meine ich die Darstellung des Zeichens 1 in UTF-8 Code gefolgt von der Darstellung des Zeichens 2 in UTF-8 Code. Also ganz genau gesagt meine ich die folgenden Bits im Speicher (Byte-weise gruppiert):

0000 00000011 00010000 00000011 0011

Page 21: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 21

Datentypen

Variablendefinition

Variablen werden mit einem bestimmten Typ im Programm definiert.

Damit wird nicht der Speicherplatz markiert, sondern ein Hinweis gegeben für die Speicherung und Verarbeitung der dort abgelegten Daten.

Lieber Computer, ich möchte in meinem Programm eine Speicherstelle mit dem Namen x verwenden. Bitte suche dir einen passenden Platz im Speicher dafür. Alle Daten die dort abgelegt werden sollen ganze Zahlen sein die Du in der passenden Form und Codierung dort speichern sollst.

Speicher erst einem die Zahl 12 im 2-er Komplement dort.

Wenn ich eine Rechenoperation aufschreibe in der x vorkommt, dann nimm die Bits die du an der Speicherstelle findest und und interpretiere sie als ganze Zahl in dieser Codierung.

int x = 12;

String s = "hugo"; Lieber Computer, ich möchte in meinem Programm eine Speicherstelle mit dem Namen s für Zeichenfolgen verwenden. Bitte veranlasse alles notwendige und speichere dort erst einmal die Zeichen h u g o in UTF-8 Codierung!

Page 22: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 22

Datentypen

Explizite Umrechnung von einer Codierung in eine andere

In der Regel wird zwischen verschiedenen Codierungen / Speicherformaten eines Wertes automatisch hin und her gewechselt.

Gelegentlich muss der Programmierer / die Programmiererin mit expliziten Anweisungen dafür sorgen, dass von einer Darstellung / Codierung in die andere gewechselt wird.

Th Letschert

Lieber Computer, ich weiß ja dass "12" keine Zahl sondern eine zwei-einelementige Zeichenfolge ist. Sie in einer int-Variablen zu speichern ist Unsinn und das würdest Du auch nicht tun, sondern mir eine Fehlermeldung anzeigen.

Wir Menschen können aber aus den beiden Zeichen 1 und 2 eine Zahl berechnen. (1*10 + 2)

Ich weiß Du kannst das auch, tue es bitte!

Speichere diese Zahl dann (im Format einer ganzen Zahl im 2er-Komplement) an der Stelle die Du Dir als Platz für die Werte der Variablen x ausgedacht hast.

int x = Integer.parseInt("12");

"12"12

0000 00000011 00010000 00000011 0011

0000 0000 0000 00000000 00000000 1100 

Page 23: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 23

Hilfsroutinen

Hilfsroutinen

Für viele Standard-Aktionen gibt es vorgefertigte Hilfsroutinen mit denen sie ausgeführt werden können.

Beispielsweise kann das Einlesen oder die Ausgabe von Daten über ein Fenster mit einfachen Hilfsroutinen veranlasst werden:

Th Letschert

String xS = JOptionPane.showInputDialog("Bitte 1-te Zahl eingeben");

Lieber Computer. Öffne ein Dialogfenster in dem der Benutzer einen Text eintippen kann. Schreibe den Text Bitte 1-te Zahl eingeben hinein, damit der Benutzer eine Idee hat, was er tippen soll.

Den eingegeben Text speichere bitte in der Variablen xS.

Ich weiß dass Du die eingegebenen Zeichen dort im UTF-8 Format ablegen wirst und dass damit keine Rechnen möglich ist. Das stört mich aber nicht, denn ich kann Dich ja veranlassen aus den Zeichen die Zahl zu machen, die der Benutzer gemeint hat.

JOptionPane.showMessageDialog(null, "GGT: " + y);

Lieber Computer. Öffne ein Fenster und schreibe dort den aktuellen Wert der Variablen y hinein. Schreibe vor diesen Wert den Text GGT: hinein, damit der Benutzer eine Idee hat, was er da sieht.

Page 24: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 24

Softwaretechnisches „Gedöhns“

Paket-, und Import-Anweisungen sowie anderes Gedöhns

Moderne Programmiersprachen enthalten ausgefeilte Konstrukte die der Entwicklung sehr großer Programms-Systeme dienen. Sie wirken unverständlich und sind nicht einfach zu erklären.

Für den ersten Einstieg nimmt man sie am Besten erst einmal als vorgegeben Programmrahmen einfach hin.

package ggt;

import javax.swing.JOptionPane;

public class Euklid {

public static void main(String[] args) {

}}

Programm-Anweisungen hier !

frei wählbare Namen

vorgegebener Rahmen für Java-Programme

Paket-Anweisung Import-Anweisung

Page 25: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 25

Maschinen, real und gedacht

Implementierung : Von der hypothetischen zur realen Maschine

Hypothetische Maschine Programmierer schreiben Programme für eine hypothetische (gedachte)

Maschine, die die Programme versteht und direkt ausführen kann. Um gute Programme schreiben zu können ist es nicht notwendig zu wissen,

wie Programme tatsächlich ausgeführt werden. Es ist aber notwendig sehr genau über die hypothetische Maschine Bescheid zu wissen.

String xS = JOptionPane.showInputDialog("Bitte 1-te Zahl eingeben");String yS = JOptionPane.showInputDialog("Bitte 2-te Zahl eingeben");int x = Integer.parseInt(xS);int y = Integer.parseInt(yS);while (x > 0) { if (y > x) { int t = x; x = y; y = t; } x = x-y;}JOptionPane.showMessageDialog(null, "GGT: " + y);

3 5xy

main

Ausgabedaten

„3“ „5“xS yS

Eingabedaten

aktuelle Aktion

t

Page 26: CS1005 Objektorientierte Programmierunghg51/Veranstaltungen/OOP... · Seite 7 Algorithmen und Programme Algorithmus – Definition Ein Algorithmus ist eine detaillierte und explizite

Seite 26

Maschinen, real und gedacht

Implementierung : Von der hypothetischen zur realen Maschine

Hypothetische Maschine Programmierer schreiben Programme für eine hypothetische (gedachte)

Maschine, die die Programme versteht und direkt ausführen kann. Um gute Programme schreiben zu können ist es nicht notwendig zu wissen,

wie Programme tatsächlich ausgeführt werden. Es ist aber notwendig sehr genau über die hypothetische Maschine Bescheid zu wissen.

Ablauf auf einer realen Maschine Um Programme auf einer realen Maschine (Computer) zum Ablauf zu

bringen werden viele teilweise sehr komplexe Verfahren eingesetzt. Professionelle Programmierer sollten mit deren Ablauf zumindest grob

vertraut sein. Die Realisation der Programmausführung (Compiler, Interpreter,

Betriebssysteme, ...) ist etwas für Spezialisten in diesem Gebiet: für Informatiker.