5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting / Universität Karlsruhe (TH)
Was machen wir heute? 1 Rückblick 2 Allgemeines / Aufgabenblatt 2 3 Kontrollstrukturen Ausdrücke und Anweisungen If- und Switch-Anweisung Schleifen: For, While, Do-While 4 Verwendung von static 5 Schluss Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 2 / 28
Übersicht Rückblick 1 Rückblick 2 Allgemeines / Aufgabenblatt 2 3 Kontrollstrukturen 4 Verwendung von static 5 Schluss Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 3 / 28
Rückblick Was haben wir letzte Woche gemacht? Lösung des Übungsblattes besprochen Java-Programmierumgebung Lokale Variablen, Packages Fragen dazu? Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 4 / 28
Übersicht Allgemeines / Aufgabenblatt 2 1 Rückblick 2 Allgemeines / Aufgabenblatt 2 3 Kontrollstrukturen 4 Verwendung von static 5 Schluss Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 5 / 28
Allgemeines / Aufgabenblatt 2 Allgemeines Newsgroups sind nun auch ohne VPN erreichbar Musterlösung zum 1. Übungsblatt findet ihr im Wiki ab 1.12. gibt es Betreuungsstunden: Di + Do 14:00-15:30 Uhr R -143 (vor der ATIS auf der rechten Seite) Vorlesung nächste Woche beinhaltet neuen Stoff für alle! Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 6 / 28
Allgemeines / Aufgabenblatt 2 Hinweise zum Aufgabenblatt 2 Beim Rechnen auf Datentyp achten! 1 ist vom Typ int 1.0 ist vom Typ double Erinnerung: Abgabe Deckblattgenerator oder Name, Matrikelnummer, Gruppennummer (wir sind Gruppe 6!), Programmieren jeweils spätestens bis Freitag um 10 Uhr getackert in den Kasten im Keller des InfoBaus Übungsblätter sind selbstständig zu bearbeiten Noch Fragen zum 2. Aufgabenblatt? Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 7 / 28
Allgemeines / Aufgabenblatt 2 Wie schreibe ich eine Methode? Soll die Methode einen Wert berechnen und zurückgeben? Dann: Datentyp des Rückgabewertes vor den Methodennamen schreiben, return muss vorkommen (und immer erreicht werden). Soll die Methode nur Klassenattribute verändern und keinen Wert zurückgeben? Dann: void vor den Methodennamen schreiben, kein return Welche Werte benötigt die Methode, die nicht Attribute der Klasse sind? Diese müssen übergeben werden: void shift(int dx, int dy) {... Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 8 / 28
Übersicht Kontrollstrukturen 1 Rückblick 2 Allgemeines / Aufgabenblatt 2 3 Kontrollstrukturen Ausdrücke und Anweisungen If- und Switch-Anweisung Schleifen: For, While, Do-While 4 Verwendung von static 5 Schluss Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 9 / 28
Kontrollstrukturen Ausdrücke und Anweisungen Ausdrücke und Anweisungen Ausdrücke haben immer einen Typ und liefern einen Wert. Sie werden z. B. auf der rechten Seite von Zuweisungen (int x = Ausdruck;) oder bei return verwendet (return Ausdruck;). Anweisungen veranlassen eine Zustandsänderung und haben keinen Typ, z. B. Prozeduraufrufe (p1.shift(1.0, 2.0);) oder Zuweisungen (int x = Ausdruck;). Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 10 / 28
Kontrollstrukturen If- und Switch-Anweisung If-Anweisung Code if (Bedingung1) { Anweisungen1 else if (Bedingung2) { Anweisungen2... else { Anweisungen0 Wenn die Bedingung1 wahr ist, wird der Anweisungsblock Anweisungen1 ausgeführt, ist sie falsch, wird weitergeschaut Der else-zweig wird weggelassen, wenn der Anweisungsblock dort ansonsten leer wäre Die Bedingung ist immer vom Typ boolean Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 11 / 28
Kontrollstrukturen If- und Switch-Anweisung Switch-Anweisung Code switch (Ausdruck) { case wert1: Anweisungen1 break; case wert2: Anweisungen2 break;... case wertn: AnweisungenN break; default: Anweisungen0 Nach case muss ein konkreter Wert (Konstante) stehen Steht nach den Anweisungen kein break, werden auch noch die anderen Fälle überprüft. Das führt zu Unübersichtlichkeit und möglicherweise zu unangenehmen Seiteneffekten switch funktioniert nicht über Strings! Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 12 / 28
Aufgabe Kontrollstrukturen If- und Switch-Anweisung Aufgabe Schreibe eine Kontrollstruktur, die für die Noten 1, 2, 3, 4 und 5 die Entsprechungen sehr gut, gut, befriedigend, ausreichend und durchgefallen ausgibt. Die Note sei dabei in der Variable note vom Typ int gegeben. Eine Bedingung könnte also so aussehen: note == 2 Eine Anweisung so: Terminal.print( gut ); Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 13 / 28
Kontrollstrukturen Schleifen: For, While, Do-While For-Schleife Code for (Initialisierung; Bedingung; Schritt) { Anweisungen Beispiel Initialisierung wird einmal am Anfang ausgeführt Bedingung wird vor jedem Schleifendurchlauf ausgeführt Schritt wird nach jedem Schleifendurchlauf ausgeführt for (int i = 0; i < 10; i++) { Terminal.println(i); Was macht diese Schleife? Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 14 / 28
Kontrollstrukturen Schleifen: For, While, Do-While While-Schleife Code while (Bedingung) { Anweisungen Vor Beginn jedes Durchlaufs wird geprüft, ob die Bedingung gültig ist. Beispiel int summe = 0; while (summe < 100) { summe = summe + 10; Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 15 / 28
Kontrollstrukturen Schleifen: For, While, Do-While Do-While-Schleife Code do { Anweisungen while (Bedingung); Nach jedem Durchlaufs wird geprüft, ob die Bedingung gültig ist. Beispiel int summe = 0; do{ summe = summe + 10; while (summe < 100) Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 16 / 28
Kontrollstrukturen Schleifen: For, While, Do-While Schleifen und Arrays Schleifen eignen sich besonders gut zur Verwendung mit Arrays: Beispiel int summe = 0; int[] zahlen = {15, 7, 32, 48, 75; for (int idx = 0; idx < zahlen.length; idx++) { summe = summe + zahlen[idx]; Terminal.println(summe); Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 17 / 28
Kontrollstrukturen Schleifen: For, While, Do-While Aufgabe Aufgabe Schreibt eine Methode int quadratsumme()..., die die Zahlen von 1 bis 25 quadriert und aufsummiert, also 1*1 + 2*2 +... + 25*25 berechnet. Team 1) Verwendet eine For-Schleife Team 2) Verwendet eine While-Schleife Team 3) Verwendet eine Do-While-Schleife Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 18 / 28
Übersicht Verwendung von static 1 Rückblick 2 Allgemeines / Aufgabenblatt 2 3 Kontrollstrukturen 4 Verwendung von static 5 Schluss Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 19 / 28
Verwendung von static main-methode ( 13.1) class C {... public static void main(string[] args) {...... main-methode: Ausführung, wenn noch keine Objekte vorhanden Kein Objekt-Kontext (kein this!) verfügbar Von überall ohne Bezugsobjekt aufrufbar static auch allgemein für Methoden und Attribute... Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 20 / 28
Verwendung von static static in Java ( 13.1) Statische Attribute: Einmal pro Klasse (nicht einmal pro Objekt) Zugreifbar aus statischem und Objekt-Kontext ( globale Variable) Statische Methoden: Kein Objekt-Kontext (kein this) Direkter Zugriff nur auf statische Felder Können aber jederzeit Objekte erzeugen ( main) class C { int x; static int y; void foo() { x = 3; // ok! y = 5; // ok! static void bar() { x = 4; // Fehler! y = 6; // ok! public static void main(string[] args) { foo(); // Fehler! bar(); // ok! C c1 = new C(); C c2 = new C(); c1.foo(); // ok! Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 21 / 28
Verwendung von static static in Java Beispiel class C { int x; static int y; void foo() { x = 3; y = 5; static void bar() { y = 6; public static void main(string[] args) { bar(); C c1 = new C(); C c2 = new C(); c1.foo(); c2 c1 C c1 C c2 x 3 x 0 Class C y 5 Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 22 / 28
Verwendung von static Verwendung von static Faustregeln: Konstanten Immer static final, da unveränderlich Methoden static, wenn kein Zugriff auf Attribute nötig Utility-Klassen Objekte ohne eigenen Zustand: alle Methoden static, Konstruktor private Klasse final (nicht vererbbar) Lokale Variablen static-attribute kein Ersatz für lokale Variablen Parameter static-methode mit Objekt der Klasse als Parameter: NEIN! OOP Keine Objektorientierung mit static Einschränkung der Anwendbarkeit einer Klasse Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 23 / 28
Verwendung von static Zusammenfassung static Eigenschaften: Statische Attribute nur einmal pro Programm vorhanden Statische Methoden ohne Objekt aufrufbar Kein direkter Zugriff auf nicht-statische Attribute/Methoden Anwendung: Konstanten Methoden ohne Zugriff auf Attribute Utility-Klassen ohne Objekt-Zustand Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 24 / 28
Beispiel Verwendung von static planet.java Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 25 / 28
Übersicht Schluss 1 Rückblick 2 Allgemeines / Aufgabenblatt 2 3 Kontrollstrukturen 4 Verwendung von static 5 Schluss Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 26 / 28
Schluss Ausblick Was machen wir nächste Woche? Besprechung des 2. Übungsblattes Wiederholung Praktomat Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 27 / 28
Schluss Dennis Ewert (Gruppe 6) Programmieren 5. Tutorium WS 2008/2009 28 / 28