Einführung in die Programmierung Anweisungen und Datentypen Fakultät für Wirtschaftswissenschaften Einführung in die Programmierung Anweisungen und Datentypen Uwe Lämmel www.wi.hs-wismar.de/~laemmel Uwe.Laemmel@hs-wismar.de
Methoden-Körper = Algorithmus Anweisungen und Daten Unsere Weltsicht: Dinge + Handlungen Begriffswelt der Informatik: Daten + Algorithmen Algorithmus = Handlungsanweisung public void taktsignalGeben( ) { minuten.erhoehen( ); if (minuten.gibWert( ) == 0) { // Limit wurde erreicht! stunden.erhoehen( ); } //if anzeigeAktualisieren(); } //taktsignalGeben Methoden-Körper = Algorithmus
Begriffswelt der Informatik: Anweisungen Unsere Weltsicht: Dinge + Handlungen Begriffswelt der Informatik: Daten + Algorithmen Anweisungen: einfache Anweisungen: Zuweisung: wert=0; name=neuName; ... return-Anweisung: return umsatz/anzahl; return name; ... Methodenaufruf: stunden.setzeWert(neu); ... strukturierte Anweisungen Sequenz (Klammerung): { name=neuName; wert=0; } Alternative (IF-Anweisung)
Alternative: if-Anweisung if (Bedingung) { Anweisungen // Dann-Fall, wenn Bedingung true ist } else { Anweisungen // Sonst-Fall, Bedingung ist false if ( z % 2 == 0) { System.out.println( "gerade Zahl") ; } else { System.out.println("ungerade Zahl");
if-Anweisung: Interpretation if (Bedingung) { Anweisungen } else { Anweisungen } Bedingung muss vom Typ boolean sein. Besteht Anweisungen nur aus einer Anweisung, können Klammern entfallen else-Teil kann entfallen Interpretation: Wenn Bedingung den Wert true liefert, wird (nur) nachfolgende Anweisung abgearbeitet; liefert Bedingung false, wird (nur) Anweisung des else-Teils abgearbeitet.
Bedingung einer if-Anweisung ist logischer Ausdruck: gleich == a == 0 ungleich != a != 0 größer > a > 10 größer gleich >= a >=0 kleiner < kleiner gleich <= und && 0<a && a<100 oder | | a>0 | | a==0 nicht ! ! (a==0) logische Variable/Konstante: boolean b1; b1 !b1
Entscheidungsbaum Rot? Röhren? ? nicht möglich Warnung essbar essbar?
Pilze class Pilz { private String name; private boolean rot; // Wahrheitswert: true / false private boolean roehren; public Pilz(String pname, boolean istRot, boolean hatRoehren){ name = pname; rot = istRot; roehren = hatRoehren; } //Pilz public String pilzIst() { String ergebnis; if (rot) { if (roehren) { ergebnis= "nicht moeglich"; } else { ergebnis= "giftig!"; } } else { if (roehren) { ergebnis= "essbar";} else { ergebnis= "vielleicht essbar";} } //if return ergebnis; } //pilzIst Pilze if (rot) { if (roehren) { ergebnis= "nicht moeglich"; } else { ergebnis= "giftig!"; } } else { if (roehren) { ergebnis= "essbar";} else { ergebnis= "vielleicht essbar";}
Entscheidungsbaum - Aufgabe Artikel Nummer MWSt in % Leitungswasser 1000 7 Brot 1010 Butter 1020 Bier 1100 19 Buch 2000 Fahrkarte-Nahverker 3100 Fahrkarte-Fernverkehr 3200 Miete 4100 Arzthonorar 4200 Bekleidung 5100 Geräte 5200 Nutzen Sie Vergleiche für die Entscheidungen!
Daten – Interpretation natürliche Sprache Maschinencode Programmierung Compiler Programm Programmiersprache
Daten class Person { //-- Datenfelder, Merkmale, Attribute private String name; private int geboren; //-- Geburtsjahr! public Person(String nachname, int jahr) { name = nachname; geboren = jahr; } //Person public int getAlter(int jahr ) { int alter = jahr – geboren; return alter; } //getAlter } // Person … Person p1 = new Person("Meier",1980); Instanz-Variablen formale Parameter lokale Variable aktuelle Parameter Referenz und Objekt
Variable: Name + Typ + Wert Name = Handgriff Typ liefert Interpretation des Wertes int a; Person p1; 435 a (Ein Person- Objekt) p1 A4CB890 Ein Person- Objekt new
Variable = Speicherplatz 2 Byte (26 A4 6B 30): 0101 0111 0100 1001 Interpreation als … short char = 5*163+7*16²+4*16+9 = 22.345 ASCII 87 ASCII 73 ‘W‘ ‘I‘ Angabe des Typs einer Variablen erforderlich
Variable und einfache Datentypen 435 a int a = 435; int b = a; a = 4711; 435 b 4711 a 435 b
Einfache Datentypen boolean logischer Wert: true/false 1 Byte char Zeichen 2 Byte byte Ganzzahl –128 .. +127 1 Byte short Ganzzahl 2 Byte int Ganzzahl 4 Byte long Ganzzahl 8 Byte float Fließpunktzahl 4 Byte double Fließpunktzahl 8 Byte
Objekte stets mittels Konstruktor erzeugen: new Objekt-Datentypen vordefiniert (siehe Java-API): String selbst entwickelt: TicketAutomat Nummernanzeige Uhrenanzeige Student Unternehmen … Objekte stets mittels Konstruktor erzeugen: new
Variable, die auf Objekte zeigen Person p1; p1 = new Person("Katz",1979); Person p2; p2 =p1; p2.setName(„Hund“); Was liefert p1.getName() ? p1 Person Objekt: "Katz" p1 Person Objekt: "Katz" p1 p2 // Was bewirkt: Person p3 = new Person(); p3 = p1; Vorsicht bei Objekt-Variablen!
Variable, die auf Objekte zeigen? String s = "Anton"; String s1 = new String("Anton"); Uhrenanzeige wecker = new Uhrenanzeige(); Datumsanzeige kalender; Kalender = new Datumsanzeige();
Instanzen-Variablen – privat Sicherheit Stabile Schnittstelle (Wartbarkeit) Geheimnisprinzip Schutz vor unerwünschter Veränderung class Person { private String name; … public String getName() { return name; } Zugriffsmethoden name geboren Programm-Entwicklung: Instanzen-Variablen: private Zugriff über public-Methoden
Daten und Anweisungen class TestPerson { public static void main(String[ ] args) { Person p1 = new Person("Berg", 1978); Person p2 = new Person("Tal", 1990); int limit = 18; int imJahr = 2007; if (p1.getAlter(imJahr)>=limit) { System.out.println("Kredit fuer "+p1.getName()+ ": JA"); } else System.out.println("Kredit fuer "+p1.getName()+ ": NEIN"); …
Zusammenfassung Dinge + Handlungen => Daten und Algorithmen Algorithmen = Folge von Anweisungen einfache <> strukturierte Anweisungen Zuweisung, return, Methoden-Aufruf Sequenz, Alternative (if-Anweisung) einfache Datentypen (int, double, boolean, …) Referenz-Datentypen (Objekt-Typen) Speicherverwendung und Datentypen
Ende
Entscheidungsbaum Neuer Monat