Eingeben, Ausgeben, Übergeben, Zurückgeben

Ähnliche Dokumente
Alternative. Programmierung 1. Stephan Kleuker 219

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Vorkurs Informatik WiSe 16/17

Konstruktor. Grundlagen der Programmierung. Stephan Kleuker 90

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

Objektmethoden. Grundlagen der Programmierung. Stephan Kleuker 121

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Vorkurs Informatik WiSe 17/18

1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster

System.out.println("TEXT");

Dies ist eine Probeklausur, die keine formalen Schlüsse auf die Form, die Struktur oder den Inhalt der endgültigen Klausur zulässt.

Algorithmen und ihre Programmierung

Angewandte Mathematik und Programmierung

Javakurs für Anfänger

Vererbung. Programmierung 1. Stephan Kleuker 423

Prüfung Softwareentwicklung II (IB)

Javakurs für Anfänger

Tag 8 Repetitorium Informatik (Java)

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

1 Klassen anlegen und Objekte erzeugen

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Klasse Object. Programmierung 1. Stephan Kleuker 469

JAVA-Datentypen und deren Wertebereich

Listing 1: Cowboy. Listing 2: Woody

Objektorientierung III

Programmieren Vorkurs

Schwerpunkte. 8. Ausdrücke, Operatoren (einfache Typen) Beispiel: Schaltjahr Test. Einführendes Beispiel: Grundprobleme

Kapitel 3: Variablen

1 Klassen anlegen und Objekte erzeugen

erste Befehle Grundlagen der Programmierung Stephan Kleuker 34

Intensivübung zu Algorithmen und Datenstrukturen

Die Klasse java.lang.object. Thorsten Treffer

Objektorientierung (OO)

Objektorientierte Programmierung

4. Vererbung Die Klasse Object. Die Klasse Object

Einführung in die Programmierung

Java Cheatsheet. Mehrzeiliger Kommentar (beginnt mit /* und endet mit */)

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Einige Methoden der Klasse ArrayList<Typ>

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Kleines Java-Glossar zum Praktikum Einführung in das Programmieren

iterativ inkrementelle Entwicklung

Name:... Matr.-Nr... Bearbeitungszeit: 120 Minuten

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Einführung in das Programmieren Probeklausur Lösungen

Programmieren 1 C Überblick

Kopieren und Vergleichen

Übungsblatt 1. Java Vorkurs (WS 2017)

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

Tagesprogramm

Programmiertechnik Klassenvariablen & Instantiierung

Beispielprüfung CuP WS 2015/2016

Klassen in Java. Grundlagen der Programmierung. Stephan Kleuker 68

4. Zahlendarstellungen

14. Java Objektorientierung. Klassen, Vererbung, Kapselung

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Kopieren und Vergleichen

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Ausdrücke der Programmiersprache Java

Leider gibt es in einigen Fällen keine wirklich einheitlichen Fachbegriffe im Deutschen, obwohl einige als "der Standard" bezeichnet werden.

Ausdrücke (1) Grundlegende Eigenschaften

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

14. Java Objektorientierung

8. Ausdrücke, Operatoren (einfache Typen)

II.4.2 Abstrakte Klassen und Interfaces - 1 -

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Kapitel 10. Verweise und Referenzen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Java Einführung Operatoren Kapitel 2 und 3

Umsetzung einer Klassenkarte in einer Programmiersprache

Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren.

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

C++ - Objektorientierte Programmierung Polymorphie

Kurzskript zur Veranstaltung Programmieren Prof. Dipl.-Ing. Jirka R. Dell'Oro-Friedl 2012

Vorkurs Informatik WiSe 15/16

Einstieg in die Informatik mit Java

Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

JAVA 05: Objektorientierte Konzepte

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Klasse Object. Grundlagen Programmierung. Stephan Kleuker 427

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

Programmierung für Mathematik HS11

Lernteam OOP3 SW Programmieren 1 - H1103 Felix Rohrer

Probeklausur Informatik 2 Sommersemester 2013

Methoden (fortgeschritten) in C# - 1

Ein String ist in Java eigentlich eine Klasse, wir können ihn aber zunächst als Datentyp betrachten, der zur Speicherung von Zeichenketten dient.

Anweisungen zur Ablaufsteuerung

14. Java Objektorientierung

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Wie entwerfe ich ein Programm?

Transkript:

Eingeben, Ausgeben, Übergeben, Zurückgeben eingeben: Werte werden vom Nutzer oder Eingabegeräten (z. B. Maus) eingelesen ausgeben: Werte werden auf der Konsole, in einem Display oder einer Datei ausgegeben übergeben: Werte, bei Objekten Referenzen, werden zur Nutzung an eine Methode übergeben; die Methode hat dazu eine Parameterliste zur Übernahme zurückgeben: Werte bzw. Objekte, werden innerhalb einer Methode berechnet oder ausgewählt und als Ergebnis mit return zurück gegeben, der Typ des Ergebnisses steht vor dem Methodennamen Stephan Kleuker 200

Eingeben und zurückgeben eines Punktes Interaktionsbrett ib = new Interaktionsbrett(); EinUndAusgabe io = new EinUndAusgabe(); Punkt punkteingeben(){ this.io.ausgeben("x-wert: "); int x = this.io.leseinteger(); this.io.ausgeben("y-wert: "); ausgeben übergeben eingeben int y = this.io.leseinteger(); return new Punkt(x,y); zurück geben Stephan Kleuker 201

Ausgeben und Übergeben eines Punktes void markieren(punkt pkt){ this.ib.neuerpunkt(pkt.getx(), pkt.gety()); this.ib.neuerkreis(pkt.getx()-3, pkt.gety()-3,3); this.ib.neuerkreis(pkt.getx()-6, pkt.gety()-6,6); void benutzen(){ Punkt p1; p1 = punkteingeben(); markieren(p1); Punkt p2 = punkteingeben(); markieren(p2); ausgeben übergeben Stephan Kleuker 202

Boolescher Ausdruck benannt nach George Boole (1815-1864), Mathematiker wird nach false (falsch) oder true (wahr) ausgewertet kann Methode mit Booleschem Ergebnis sein kann einfacher Vergleich von Zahlen sein geburtsjahr < 1900 1900 > geburtsjahr geburtsjahr.equals(matrikelnummer) für Gleichheit Operator == prüft Identität, nicht zum inhaltlichen Vergleich nutzbar auch <= >= negierbar, Negation mit Ausrufungszeichen! (geburtsjahr < 1900) Boolesche Variable boolean jaja = false;! jaja Stephan Kleuker 203

Zusammengesetzter Boolescher Ausdruck (1/2) Boolesche Ausdrücke können mit den Booleschen Operatoren "und" (&&) sowie "oder" ( ) verknüpft werden Boolesche Ausdrücke können in runden Klammern stehen Auswertungsreihenfolge: Klammern binden mehr als Negation, diese bindet mehr als Und, das bindet mehr als Oder (einfacher Ansatz: immer Klammern setzen) Wahrheitstafeln && true false true true false false false false true false true true true false true false! true false false true Stephan Kleuker 204

Zusammengesetzter Boolescher Ausdruck (2/2) Beispiele mit Variablen int alter=23 und int iq=42 alter > 20 && iq > alter true && true ergibt true alter > 20 iq < alter true false ergibt true alter > 20 iq < 10 && iq >99 true false && false ergibt true false, ergibt true (alter > 20 iq < 10) && iq >99 (true false) && false ergibt true && false, ergibt false!(alter>23) alter<24 (!false true) ergibt (true true), ergibt true!(alter>23 alter<24)!(false true) ergibt!(true), ergibt false! alter>23 gibt Fehler, da int-wert nicht negiert werden kann Stephan Kleuker 205

Analyse von Booleschen Ausdrücken in Code Pad zur Auswertung bei Ausdrücken kein Semikolon am Zeilenende Stephan Kleuker 206

Wahrheitstabellen boolean a; boolean b; boolean c; a b c a b && c (a b) && c false false false false false false false true false false false true false false false false true true true true true false false true false true false true true true true true false true false true true true true true Stephan Kleuker 207

Rechenregeln für Boolesche Ausdrücke nutzt Aussagenlogik heißt "logisch äquivalent", bedeutet dass beide Ausdrücke immer den gleichen Wahrheitswert liefern a && (b c) (a && b) (a && c) a (b && c) (a b) && (a c)! (a && b)!a!b a && b b && a! (a b)!a &&!b a b b a a &&!a false a && a a a!a true a a = a a && true a a && false false a false a a true true Stephan Kleuker 208

equals Stephan Kleuker 209

Was ist gleich (1/3) Erinnerung: Java nutzt elementare Datentypen und Klassen Vergleich von elementaren Datentypen mit == auch in Code Pad ausprobierbar (Eingabe von Befehlen über mehrere Zeilen mit Shift+Return) Stephan Kleuker 210

Was ist gleich (2/3) Objekte werden mit == (dasselbe) oder equals (das Gleiche) verglichen s1 s2 s3 Hallo" Hallo" Stephan Kleuker 211

Was ist gleich (3/3) Objekte: inhaltlicher Vergleich immer mit Methode equals Klassen aus der Java-Klassenbibliothek haben immer eine sinnvoll programmierte equals-methode bei selbstgeschriebenen Klassen muss die Methode equals selbst geschrieben werden, um sinnvolle Realisierung zu bekommen public boolean equals (Object obj) { Stephan Kleuker 212

Hintergrund: Klasse Object Automatisch erweitert jede Klasse (auch die, die wir schreiben) die Klasse Object erweitern bedeutet, dass alle Methoden aus der Klasse Object auch in den erweiterten Klassen genutzt werden können man sagt auch die neuen Klassen beerben die Klasse Object ( -> Thema Vererbung) aber: Methoden in Object verhalten sich vielleicht nicht, wie gewünscht deshalb: man kann Methoden überschreiben, genauer einfach in eigener Klasse neu schreiben Stephan Kleuker 213

Hintergrund: geerbte Methoden (1/2) von Object geerbte Methoden Stephan Kleuker 214

Hintergrund: geerbte Methoden (2/2) blassere Methoden stammen aus Object Stephan Kleuker 215

Nutzung des equals() von Object class Analyse{ EinUndAusgabe io = new EinUndAusgabe(); void probieren(){ Punkt p1 = new Punkt(2,3); Punkt p2 = new Punkt(2,3); Punkt p3 = p1; if(p1.equals(p2)){ io.ausgeben("p1 eq p2\n"); if(p1.equals(p3)){ io.ausgeben("p1 eq p3\n"); if(p2.equals(p3)){ io.ausgeben("p2 eq p3\n"); Stephan Kleuker 216

Analyse von equals() Vorherige Folie zeigt, dass das equals() von Object nicht das gewünschte Verhalten hat Implementierung in Object prüft nur Identität public boolean equals (Object obj) { return this == obj; Fazit: Für selbstgeschriebene Klassen muss equals() selbst implementiert werden typisch: vergleiche die Inhalte aller Objektvariablen beachten: Variablen mit Klassen als Typen können null-wert haben, auf null keine Methodenaufrufe möglich Stephan Kleuker 217

equals() in Klasse Punkt class Punkt { int x; int y; public boolean equals(object o){ if (o == null o.getclass()!= this.getclass()){ return false;... Punkt other = (Punkt) o; if ( this.x!= other.getx() this.y!= other.gety()){ return false; return true; feststellen, ob übergebenes Objekt den Typ unseres Objekts hat umwandeln eines Objekts in anderen Typ (casten) bei elementaren Typen == bzw.!= verwenden Stephan Kleuker 218

Nutzung des equals() von Punkt class Analyse{ EinUndAusgabe io = new EinUndAusgabe(); void probieren(){ Punkt p1 = new Punkt(2,3); Punkt p2 = new Punkt(2,3); Punkt p3 = p1; if(p1.equals(p2)){ io.ausgeben("p1 eq p2\n"); if(p1.equals(p3)){ io.ausgeben("p1 eq p3\n"); if(p2.equals(p3)){ io.ausgeben("p2 eq p3\n"); Stephan Kleuker 219

equals() in Klasse Linie erster Versuch class Linie { Punkt start; Punkt ende; public boolean equals(object o){ if (o == null o.getclass()!= this.getclass()){ return false; Linie other = (Linie) o; if (!this.start.equals(other.getstart())!this.ende.equals(other.getende())){ return false; return true; bei Klassen als Typen equals() bzw.!...equals() verwenden Stephan Kleuker 220

Nutzung des ersten equals() void linieprobieren(){ // in Klasse Analyse Linie l1 = new Linie(new Punkt(1,2), new Punkt(2,3)); Linie l2 = new Linie(new Punkt(1,2), new Punkt(2,3)); if(l1.equals(l2)){ io.ausgeben("l1 eq l2\n"); Linie l3 = new Linie(null, new Punkt(2,3)); if(l3.equals(l2)){ io.ausgeben("l3 eq l2\n"); Stephan Kleuker 221

equals() in Klasse Linie korrekt public boolean equals(object o){ if (o == null o.getclass()!= this.getclass()){ return false; Linie other = (Linie) o; if (ende == null) { if (other.getende()!= null) { return false; else if (!ende.equals(other.getende())) { return false; if (start == null) { if (other.getstart()!= null) { return false; else if (!start.equals(other.getstart())){ return false; return true; Stephan Kleuker 222

Ausdrücke mit ganzen Zahlen int-variablen a, b, und c, es gibt folgende Operatoren a + b (Addition) a b (Subtraktion) a * b (Multiplikation) a / b (ganzzahlige Division 7/4 == 1) a % b (ganzzahliger Rest der Division (modulo) 7%4 == 3) Boolesche Ausdrücke der Form a + b < a * b möglich Ausdrücke können Variablen auf der linken Seite zugewiesen werden int oha = (7/4)*4 + (7%4); man beachte unglückliche Nutzung des Gleichheitszeichens oha = oha + 1; Stephan Kleuker 223

Analyse von ganzzahligen Ausdrücken in Code Pad es gilt: erst Klammern, dann *, / und %, dann + und mathematische Operatoren binden stärker (werden zuerst ausgewertet) als Boolesche Operatoren Division durch Null nicht erlaubt, man erhält in weiterem Fenster: Stephan Kleuker 224

Ausdrücke mit Fließkomma-Zahlen double-variablen a, b, und c, es gibt folgende Operatoren a + b (Addition) a b (Subtraktion) a * b (Multiplikation) a / b (Division 7.0/4.0 == 1.75) a % b (Rest nach ganzzahliger Division 7.0%3.4 == 0.2) Boolesche Ausdrücke der Form a + b < a * b möglich Erinnerung: Ausdrücke können Variablen auf der linken Seite zugewiesen werden double oha = (7.0/4.0)*4.0; Stephan Kleuker 225

Analyse von Fließkommazahl-Ausdrücken es gilt, erst Klammern, dann * und /, dann + und mathematische Operatoren binden stärker (werden zuerst ausgewertet) als Boolesche Operatoren Division durch Null führt zu neuen double-werten (später mehr): -Infinity Infinity NaN Rechengenauigkeit beachten Stephan Kleuker 226

Grundregel für Alternativen Müssen zur Ausführung mehrere Bedingungen berücksichtigt werden müssen die Booleschen Ausdrücke zunächst einzeln formuliert werden muss überlegt werden, ob ein Ausdruck wichtiger als ein anderer ist; falls es den gibt: if(<bed.>) { return müssen die zusammengesetzten Booleschen Ausdrücke formuliert und in eine sinnvolle Sequenz von if-else-befehlen, oder Verschachtelung von if-else-befehlen gebracht werden Stephan Kleuker 227

Erinnerung: Lebensspannen class Klasse{ String objektvar; void methode1(){ String lokalvar = "41"; //... methode2(lokalvar); void methode2(string param){ String lokalvar; // nicht verwechseln //... if(param.equals("42")){ String lokalvar2; //... objektvar lokalvar lokalvar lokalvar2 Stephan Kleuker 228

Sichtbarkeiten beim Auslagern von Methoden gab es folgendes Ergebnis: String genauerepersoenlichkeit3(){... String jungepersoenlichkeit() {... Problem: Objekt-Nutzer können auch Methode jungepersoenlichkeit() aufrufen, obwohl dies vielleicht nicht gewünscht ist Lösung: Klassen, Objektvariablen und Methoden können mit Sichtbarkeiten markiert werden, hier zunächst public: alle können darauf zugreifen private: nur innerhalb des Objektes kann darauf zugegriffen werden Grundregel der Objektorientierung: Information-Hiding; nur über Methoden kann auf Objektvariablen zugegriffen werden Stephan Kleuker 229

Sichtbarkeiten in der Klasse Student public class Student{ private String vorname ="Eva"; private String nachname ="Mustermann"; private int geburtsjahr = 1990; private String studiengang = "IMI"; private int matrikelnummer = 232323; public Student(String vorname, public Student(){ public void vertauschenamen(){ public String genauerepersoenlichkeit3(){ private String jungepersoenlichkeit() { public boolean equals(student other){ public String getvorname() { public String getnachname() { public void setvorname(string vorname) { public void setnachname(string nachname) { Stephan Kleuker 230

Kommentare - Einstieg Kommentare sollen das Lesen von Programmen für Andere und sich selbst (!!!) einfacher machen zwei Kommentar-Arten Kurzkommentar nach //, Kommentar endet mit Zeile Langkommentar, beginnt mit /* und endet mit */ Anfänger sollten intensiver kommentieren typische Kommentare Kurzbeschreibung: wozu gibt es Objektvariable Methode: wozu ist sie da, welche Parameter mit welchem Sinn gibt es, wie sieht das berechnete Ergebnis aus meist wenig/keine Kommentare in Methoden, da durch Namen, ihre Kürze und sprechende Variablen selbsterklärend systematische Kommentierung ( JavaDoc) später Stephan Kleuker 231

Kommentare: Beispiel /** Klasse zur Verwaltung des aktuellen Chefs. */ public class Chef { private String name; // Name des Chefs private Integer level = 23; // erreichte Stufe /* Konstruktor fuer neues Chef-Objekt * Parameter name: neuer Name des Chefs */ public Chef(String name){ this.name = name; /* Methode zur Pruefung, ob Chef Andreas heisst Ergebnis: heisst Chef Andreas */ public Boolean issesandreas(){ if("andreas".equals(this.name)){ // geht auch so return true; return false; Stephan Kleuker 232