CS1005 Objektorientierte Programmierung -...

20
Seite 1 CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik) Th Letschert Einfache Programme: Programm-Argument, Bedingte Anweisungen, Switch, Enum Boolesche Werte und Ausdrücke © Th Letschert

Transcript of CS1005 Objektorientierte Programmierung -...

Page 1: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 1

CS1005Objektorientierte Programmierung Bachelor of Science (Informatik)

Th Letschert

Einfache Programme:Programm-Argument,Bedingte Anweisungen, Switch, EnumBoolesche Werte und Ausdrücke

© Th Letschert

Page 2: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 2

Beispiel: Umrechnen Grad Fahrenheit ~> Grad Celsius

Th Letschert

package mypackage;/** * Temperaturumrechnung. * Umrechnung einer Temperaturangabe von Grad Fahrenheit in Grad Celsius. * Eingabe ueber das erste Kommandozeilenargument. * @author Folklore */public final class Temperatur {

private Temperatur() { }

/** * @param args : Temperaturangabe in Grad Fahrenheit */ public static void main(final String[] args) {

double f = 0.0; // Variable, enthaelt Grad in Fahrenheitdouble c = 0.0; // Variable, enthaelt Grad in Celsius//Grad in Fahrenheit von der Kommandozeile einlesen: f = Double.parseDouble(args[0]);//Grad in Celsius berechnen:c = ((f - 32) * 5) / 9;//Grad in F. und C. ausgeben:System.out.println(f + " Grad Fahrenheit ist "

+ c + " Grad Celsius "); }}

Page 3: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 3

Beispiel: Umrechnen Grad Fahrenheit ~> Grad Celsius

Übersetzen und Ausführen / Programmargument

Th Letschert

~> javac mypackage/Temperatur.java

~> java mypackage.Temperatur 100.0

100.0 Grad Fahrenheit ist 37.77777777777778 Grad Celsius

~>

Programm-Argument

public static void main(final String[] args) {double f = 0.0; // Variable, enthaelt Grad in Fahrenheitdouble c = 0.0; // Variable, enthaelt Grad in Celsius//Grad in Fahrenheit von der Kommandozeile einlesen: f = Double.parseDouble(args[0]);//Grad in Celsius berechnen:c = ((f - 32) * 5) / 9;//Grad in F. und C. ausgeben:System.out.println(f + " Grad Fahrenheit ist "

+ c + " Grad Celsius "); }

Page 4: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 4

Beispiel: Umrechnen Grad Fahrenheit ~> Grad Celsius

Übersetzen und Ausführen

Th Letschert

Run ~> Run Configurations ...

Programm-Argument

Page 5: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 5

Beispiel: Umrechnen Grad Fahrenheit ~> Grad Celsius

Ausführen auf der Konsole

Als ausführbare Jar-Datei exportieren → temperatur.jar

➢ java ­cp temperatur.jar mypackage.Temperatur  100  oder➢ java ­jar temperatur.jar  100 

Th Letschert

Page 6: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 6

Programmiersprachen: Syntax und Semantik

SyntaxStruktur Gestalt eines Texts

Syntaxfehler: Fehlerhafter Text, wird vom Compiler abgewiesen

SemantikInhalt, Aussage eines Texts

(Semantischer) Fehler: Text formal korrekt, wird vom Compiler akzeptiert das Programm verhält sich nicht wie gewünscht.

Programmiersprache

Eine Programmiersprache ist festgelegt durch

Syntax : Welche Texte sind korrekte Programmtexte Penible Festlegung der erlaubten Zeichenfolgen, z.B. durch eine

Grammatik

Semantik: Was genau bedeuten die Programmtextez.B. durch Angabe der Aktionen einer realen oder gedachten

Maschine die die Anweisungen der Programme ausführt

Th Letschert

Page 7: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 7

Programmiersprachen: Syntax und Semantik

Th Letschert

package mypackage;

public final class Addit { private Addit() { }

public static void main(final String[] args) {double a = 0.0;dooble b = 0.0;

a = Double.parseDobble(args[0]),b = Double.parseDouble(args(0));

System.out.printline("Die Summe von " + a + + "und " + b + "ist: " + a * b);

}}

Syntaktische und semantische Fehler ?

Page 8: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 8

Programm und Algorithmus

AlgorithmusVerfahren zur Lösung eines Problems in Handlungsschritten

Beispiele: KochrezeptVerfahren zum schriftlichen MultiplizierenAktionsfolge um an eine Bahnfahrkarte zu kommen8Gebrauchsanleitung: Sammlung von Algorithmen....

Darstellung z.B. als (Programm-) Ablaufplan (Flussdiagramm)

Programm

Algorithmus dargestellt in einer Programmiersprache

Programmtext entspricht exakt der definierten Syntax

Definierte Aktionen folgen exakt der definierten Semantik

Th Letschert

Page 9: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 9

Bedingte Anweisung

Syntaxif ( Bedingung ) Anweisung

if ( Bedingung ) Anweisung-1 else Anweisung-2

SemantikAbhängig von der Bedingung wird die Anweisung ausgeführt oder nicht.Abhängig von der Bedingung wird eine von zwei Anweisungen ausgeführt

Th Letschert

Beding-ung

Anweisung 1

Anweisung 2

T

F

Beding-ung

Anweis-ung

Darstellung als Flussdiagramm

Page 10: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 10

Bedingte Anweisung : Beispiel

Th Letschert

package mypackage;

public final class Max {

private Max() { }

public static void main(final String[] args) {int a = Integer.parseInt(args[0]);int b = Integer.parseInt(args[1]);if (a > b) {

System.out.println("Die groessere Zahl ist " + a);} else {

System.out.println("Beide gleich oder " + b + " ist die groessere");

} }}

Die Formatierung ist prinzipiell frei: Den Compiler interessieren Layout-Fragen nicht. Aber:1. Die Text-Struktur soll immer die logische Struktur wiedergeben.2. Die Textstruktur soll immer gängigen Standards folgen.

Page 11: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 11

Bedingte Anweisung : Beispiel

Th Letschert

Maximum von drei WertenAlgorithmus dargestellt als Flussdiagramm

a > b

max = a

max = b

T

F

max > c

max ausgeben

max = c

T

F

Ist dieser Algorithmus korrekt?Wie kann man das feststellen?

Page 12: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 12

Bedingte Anweisung : Beispiel

Th Letschert

Maximum von drei WertenAlgorithmus dargestellt als FlussdiagrammTest mit repräsentativen Werten

a > b

max = a

max = b

T

F

max > c

max ausgeben

max = c

T

F

Repräsentative Testwerte, z.B.:1,1,1 alle gleich1,2,3 aufsteigend3,2,1 absteigend1,2,0 auf-, absteigend3,2,4 ab, aufsteigend...

Page 13: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 13

Bedingte Anweisung : Beispiel

Th Letschert

Maximum von drei WertenAlgorithmus durch Zusicherungen verifizieren

a > b

max = a

max = b

T

F

c > max

max ausgeben

max = c

F

T

a > b & max = a

a ≤ b & max = ba > b & max = a || a ≤ b & max = b=> max ≥ a & max ≥ b & (max =a || max = b)

max ≥ a & max ≥ b & c > max& (max =a || max = b)=>c ≥ a & c ≥ b

max ≥ a & max ≥ b & c ≤ max& (max =a || max = b)

in max ist die Größere der beiden ersten Werte!

max ≥ a & max ≥ b & max ≥ c (max =a || max = b || max = c)

in max ist die Größere der drei Werte!

Page 14: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 14

Bedingte Anweisung : Beispiel

Th Letschert

Maximum von drei Werten als Programm mit Zusicherungen

package mypackage;public final class Max { private Max() { } public static void main(final String[] args) {

int a = Integer.parseInt(args[0]);int b = Integer.parseInt(args[1]);int c = Integer.parseInt(args[2]);int max;

if (a > b) { max = a;assert a > b && max == a;

} else {max = b;assert a <= b && max == b;

}assert (max >= a && max >= b)

&& (max == a || max == b);if (c > max) {

max = c;}assert (max >= a && max >= b && max >= c) && (max == a || max == b || max == c);

}}

Auswertung von Zusicherungen aktivieren: java -ea ···in Eclipse über run ~> run Configurations ~> Arguments VM-Arguments: -ea

Programm-Idee: max enthält das Maximumum von zunehmend vielen Werten.

Page 15: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 15

Switch-Anweisung

Th Letschert

Switch-AnweisungVerallgemeinerung der bedingten AnweisungBeispiel:

int z = ···

switch(z) {

case 0:

System.out.println("Das muss ich einen Mathe-Prof fragen");

break;

case 2: case 3: case 5: case 7:

System.out.println(z + " ist Primzahl");

break;

case 4: case 6: case 8: case 9: case 10:

System.out.println(z + " ist keine Primzahl");

break;

default:

System.out.println("Das muss ich noch mal nachdenken");

break;

}

switch ist nur auf „einfachen, diskreten“ Werten erlaubt:int, ··· und Enum-Typen

Page 16: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 16

Enum und Switch

Th Letschert

Beispiel Definition Enum-Typ

package mypackage;import java.util.Scanner;

public final class SmallPrim { private SmallPrim() { }

private enum Tag { Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag };

public static void main(final String[] args) {Scanner scan = new Scanner(System.in);int z = scan.nextInt();Tag tag = null;switch(z) { ··· }if (tag != null) System.out.println(tag.name());

}}

Page 17: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 17

Enum und Switch

Th Letschert

Beispiel:

Verwendung

Scanner scan = new Scanner(System.in);int z = scan.nextInt();Tag tag = null;switch(z) {case 1:

tag = Tag.Montag; break;case 2:

tag = Tag.Dienstag; break;case 3:

tag = Tag.Mittwoch; break;case 4:

tag = Tag.Mittwoch; break;case 5:

tag = Tag.Freitag; break;case 6:

tag = Tag.Samstag; break;case 7:

tag = Tag.Sonntag; break;default:

System.out.println("Fehlerhafte Eingabe!");break;}if (tag != null)

System.out.println(tag.name());

Page 18: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 18

Boolesche Werte und Ausdrücke

Th Letschert

Boolescher Werte und AusdrückeBoolescher Wert: WahrheitswertBoolescher Ausdruck: Ausdruck der wahr oder falsch ist.

boolean w = true;

w = 4 > 5;

System.out.println(w);

w = (4 > 5) || (5 > 4);

if (w)

System.out.println(w);

else

System.out.println(!w);

! : Negation|| : Oder&& : Und

Ausgabe ?

Page 19: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 19

Bedingte Ausdrücke

Th Letschert

Bedingter Ausdruck: Wertberechnung abhängig von einer Bedingung

Bedingte Anweisung (if): Bedingung steuert Ausführung von Anweisungen

Bedingter Ausdruck:Bedingung steuert Auswertung von Ausdrücken

int a = ···

int b = ···

int max = (a > b) ? a : b;

Wenn a>b giltdann ist der Wert asonst ist der Wert b

Page 20: CS1005 Objektorientierte Programmierung - Proteus-Infoproteus.mni.fh-giessen.de/~hg51/WWW/Praesentationen/OOP-1/oop-0… · Seite 1 CS1005 Objektorientierte Programmierung Bachelor

Seite 20

Bedingte Ausdrücke

Th Letschert

Bedingter Ausdruck:

Oft Kompaktere Darstellung eines Algorithmus als mit if

int a = ···int b = ···int c = ···System.out.println("Maximum:"

+ (a>b ? ( a>c ? a : c) : (b>c ? b : c) ) );

Einsatz des Bedingungsoperators nicht übertreiben: Keine zu komplexen Ausdrücke konstruieren.