Fakultät für Wirtschaftswissenschaften Einführung in die Programmierung Wintersemester 2014 Uwe Lämmel www.wi.hs-wismar.de/~laemmel [email protected] Uwe Lämmel Einführung in die Programmierung Folie 1 Ablauf der LV Uwe Lämmel – – 1 Vorlesung + 1 Übung pro Woche (je 2 SWS) Abschluss: – Klausur 120 Minuten, bestanden 50% – – – Vorlesung Übung Zu Hause Probleme klären, Themen ansprechen Aufgaben bearbeiten mit Hilfe eigenständig Aufgaben bearbeiten Einführung in die Programmierung Folie 2 Motto Anstatt anzunehmen, unsere Aufgabe sei es, dem Computer zu lehren, was er zu tun hat, sollten wir uns lieber darauf konzentrieren, dem Menschen zu erklären, was wir vom Computer wollen. Knuth, 1984 Uwe Lämmel Einführung in die Programmierung Folie 3 Problem "When I wrote the software only God and I knew how the software worked. Now a year later only God knows how it works." ???? Uwe Lämmel Einführung in die Programmierung Folie 4 Barnes, Kölling: Java lernen mit BlueJ Pearson Studium 5. Auflage Objects First with Java, Pearson Education Teil 1: Grundlagen 1. 2. 3. 4. Objekte, Klassen und Klassendefinition Objekt-Interaktion und Objekt-Sammlungen Benutzen von Bibliotheksklassen Klassenentwurf Teil 2: Anwendungsstrukturen 1. Vererbung 2. Benutzungsoberflächen 3. Entwurf Uwe Lämmel + Container-Klassen + Suchen und Sortieren Einführung in die Programmierung Folie 5 Ergänzende Literatur – siehe Stud.IP Informatik allgemein – Duden Informatik, 4. Auflage, Mannheim 2006. – Herold, H.; Lurz, B.; Wohlrab, J.: Grundlagen der Informatik, Praktisch, technisch, theoretisch, Pearson Studium München 2006. Java-Programmier-Einsteiger – Louis, Dirk; Müller, Peter: Java, eine Einführung in die Programmierung, Hanser. 2014. – Rauh, Otto: Objektorientierte Programmierung in Java, 3. Auflage, Vieweg-Verlag, 2002. – Braun u.a.: Einführung in die Programmierung, Springer 2006. Java-Programmierung: – Eubanks, Brian D.: Echt cooles Java. Hanser, 2006. Uwe Lämmel Einführung in die Programmierung Folie 6 Wozu Programmieren? Semantische Lücke Unsere Weltsicht: Dinge + Handlungen Uwe Lämmel Begriffswelt der Informatik: Daten + Algorithmen Einführung in die Programmierung Folie 7 Semiotisches Dreieck Begriff Zeichen Kuh, cow, vaca, krowa, … Uwe Lämmel referenziert Kuh Objekt Einführung in die Programmierung Folie 8 Semiotisches Dreieck Begriff Zeichen referenziert Elke Objekt person = [(‘Anna‘,1982), (‘Bernd‘,1979), (‘Elke‘,1990), (‘Tom‘,1989) ] Uwe Lämmel Einführung in die Programmierung Folie 9 Semantische Lücke – unterschiedlicher Sprache von Mensch und Maschine – Komplexitätsabstand zwischen – Anforderungen einer Anwendung (Nutzer) – umsetzbare Möglichkeiten (Basismaschine) Beispiel: Lösung quadratischer Gleichung x² + 8x + 7 = 0 Uwe Lämmel Einführung in die Programmierung Folie 10 p x1, 2 2 Algorithmus 1 p2 q 4 1. Lies die Zahlen p und q 2. Berechne die Zahl d: 3. Berechne die Zahl x1: 4. Berechne die Zahl x2: d p2 q 4 p x1 d 2 p x2 d 2 5. Schreibe x1 und x2 auf Uwe Lämmel Einführung in die Programmierung Folie 11 Algorithmus 2 1. 2. 3. 4. 5. 6. 7. 8. 9. Uwe Lämmel Lies die Zahlen p und q Berechne p/2 und nenne das Berechne a² und nenne das Berechne b – q und nenne das Berechne c und nenne das Berechne –a und nenne das Berechne e + d und nenne das Berechne e – d und nenne das Schreibe x1 und x2 auf p x1, 2 2 Ergebnis Ergebnis Ergebnis Ergebnis Ergebnis Ergebnis Ergebnis p2 q 4 a b c d e x1 x2 Einführung in die Programmierung Folie 12 p x1, 2 2 Algorithmus 3 - Java 1. Lies die Zahlen p und q 2. 3. 4. 5. 6. 7. 8. 9. Berechne p/2 Berechne a² Berechne b – q Berechne c Berechne –a Berechne e + d Berechne e – d Schreibe x1 und Uwe Lämmel und nenne das und nenne das und nenne das und nenne das und nenne das und nenne das und nenne das x2 auf Ergebnis Ergebnis Ergebnis Ergebnis Ergebnis Ergebnis Ergebnis a b c d e x1 x2 p2 q 4 class Quadratische Gleichung { public static void main(String[ ] args){ int p = 8; // Schritt 1 int q = 7; double a = p/2.0; // Schritt 2 double b = a*a; // Schritt 3 double c = b – q; // Schritt 4 double d = Math.sqrt(c); // Schritt 5 double e = – a; // Schritt 6 double x1= e + d; // Schritt 7 double x2= e – d; // Schritt 8 System.out.println( // Schritt 9 "x1= "+x1+", x2= "+x2); } } Einführung in die Programmierung Folie 13 Algorithmus 3 - Java p x1, 2 2 p2 q 4 class Quadratische Gleichung { public static void main(String[ ] args){ int p = 8; // Schritt 1 int q = 7; double a = p/2.0; // Schritt 2 double b = a*a; // Schritt 3 double c = b – q; // Schritt 4 double d = Math.sqrt(c); // Schritt 5 double e = – a; // Schritt 6 double x1= e + d; // Schritt 7 double x2= e – d; // Schritt 8 System.out.println("x1= "+x1+", x2= "+x2); } } Uwe Lämmel Einführung in die Programmierung Folie 14 Algorithmus 4 - Java p x1, 2 2 p2 q 4 class QuadratischeGleichung { public static void main(String[ ] args){ int p = 8; int q = 7; double x1 = – p/2.0 + Math.sqrt( p * p / 4 – q); double x2 = – p/2.0 – Math.sqrt( p * p / 4 – q); System.out.println("x1= "+x1+", x2= "+x2); } } Uwe Lämmel Einführung in die Programmierung Folie 15 Berechnung der Nullstellen – Vier verschiedene Darstellungen des Algorithmus – Welche Variante verstehen Sie am besten? Uwe Lämmel Einführung in die Programmierung Folie 16 Programmiersprachen Maschinencode Compiler ? natürliche Sprache Programmierung Programm Programmiersprache Uwe Lämmel Einführung in die Programmierung Folie 17 Objektorientierte Programmierung – Objekte beschreiben (Klassen) – Objekte erzeugen (new) – Objekte manipulieren: – senden von Methoden (mit Parametern) an die Objekte! Beispiele: – Figuren / Zeichnung (BlueJ, cmd) Uwe Lämmel Einführung in die Programmierung Folie 18 Grundlegende Konzepte – – – – – – Uwe Lämmel Objekt Klasse Merkmale Methode Parameter Datentyp Einführung in die Programmierung Folie 19 Objekte und Klassen Objekt – repräsentiert ‘Dinge’ der realen Welt oder aus Problembereich (virtuelle Welt) Beispiel: “Dieser Computer hier auf dem Tisch.” Klasse – repräsentiert alle Objekte einer Bauart / eines Typs: Beispiel: “Computer” Uwe Lämmel Einführung in die Programmierung Folie 20 Beispiel Student class Student { // Merkmale von Studenten private String name; private int matrikel; private int ects; // String: Zeichenkette // int: ganze Zahl // Erzeugen eines Studenten public Student(String vollerName, int nummer){ … } // Zugriffsmethoden public String getName( ) { return name; } public int getMatrikel( ) { return matrikel;} public void setPunkte(int n){ ects=n;} … } //Student Uwe Lämmel Einführung in die Programmierung Folie 21 Methoden und Parameter – Objekte besitzen Operationen (in Java: Methoden) – mittels Methoden werden Objekte bearbeitet – Methoden können Parameter benötigen: – zusätzliche Information für die Bearbeitung – Methoden können Ergebnis liefern: return ergebnis; public String getName( ) { return name;} public void setAnzahlScheine (int n) … student1.setAnzahl(3); Uwe Lämmel Methoden-Kopf: • Ergebnis • Name • Parameter Signatur Einführung in die Programmierung Folie 22 Beobachtungen – mehre Instanzen/Objekte einer Klasse möglich – Objekt hat Attribute/Merkmale: Werte werden in Instanzen-Variablen gespeichert – Klasse definiert die Instanzen-Variablen ABER: jedes Objekt speichert seine eigene Menge von Werten (Zustand des Objekts) Uwe Lämmel Einführung in die Programmierung Folie 23 Zustand Uwe Lämmel Einführung in die Programmierung Folie 24 Zwei Student -Objekte Student name matrikel anzScheine String getName() int getMatrikel() setScheine(int n) Instanz von student1: Student Instanz von student2: Student name "Anna" name matrikel 122532 matrikel anzScheine Uwe Lämmel 0 "Paul" anzScheine 122891 0 Einführung in die Programmierung Folie 25 Quelltext / source code – Jede Klasse hat Quelltext (Java-Code) – definiert die Details: Merkmale und Methoden Uwe Lämmel Einführung in die Programmierung Folie 26 Quelltext – Kompilation – Ausführung Kuh.java Kuh.class class Kuh { private int milch; public Kuh() { milch=1; } public int gibMilch(){ return milch; } } Compilieren JDK / javac CA 00 63 00 69 08 00 75 06 61 00 00 00 00 00 00 AC 0A FE 03 68 03 6E 67 0A 68 01 6E 00 07 00 01 06 00 00 00 BA 00 01 28 65 69 53 2E 00 67 00 00 00 00 00 00 00 01 BE 10 00 29 4E 62 6F 6A 03 2F 01 08 0A 0A 09 1D 00 00 00 07 01 56 75 4D 75 61 4B 4F 00 00 2A 00 00 00 01 0D 00 00 49 01 6D 69 72 76 75 62 02 01 B7 00 07 01 00 00 00 11 01 00 62 6C 63 61 68 6A 00 00 00 00 00 00 0A 00 31 07 00 04 65 63 65 0C 01 65 05 09 01 0E 01 01 00 00 00 00 06 43 72 68 46 00 00 63 00 00 2A 00 00 00 00 02 13 12 3C 6F 54 01 69 07 10 74 06 00 04 03 0B 00 00 00 0A 01 69 64 61 00 6C 00 6A 00 00 00 B5 00 00 00 06 0E 00 00 6E 65 62 03 65 08 61 20 00 2A 00 00 0C 05 00 04 05 69 02 6C 28 01 0C 76 00 00 00 02 00 00 2A 01 00 6D 74 00 65 29 00 00 61 03 02 02 B1 05 01 B4 00 0F 69 3E 0F 01 49 08 05 2F 00 00 00 00 00 00 00 00 09 6C 01 4C 00 01 4B 00 6C 04 01 01 00 04 09 02 00 Ausführen: • JRE / java • NUR main-Methode einer Klasse • C:\Daten\Beispiel> java QuadratischeGleichung Uwe Lämmel Einführung in die Programmierung Folie 27 Wie lernt man das Programmieren? Wie lernt man schwimmen, Fahrrad fahren, Auto fahren? Uwe Lämmel – – – – – – – – Üben Üben Üben Üben Üben Üben Üben ... Einführung in die Programmierung Folie 28 Wie lernt man das Programmieren? Mitdenken! Kommunizieren – Untereinander – Stud.IP > Forum Vorlesung mitarbeiten – Beispiele implementieren – Buchabschnitte durcharbeiten Fragen! Übungsaufgaben bearbeiten – Durchdenken und versuchen zu lösen – Fragen formulieren weitere Aufgaben programmieren – Übungsdokument – Alltag Uwe Lämmel Probieren! Einführung in die Programmierung Folie 29 Aufgabe Java und BlueJ installieren Ausprobieren – Beispiel Quadratische Gleichung – Übung 1.1. bis 1.15. aus dem Buch Uwe Lämmel Einführung in die Programmierung Folie 30