Transcript
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