Vorlesung Programmieren. Programmiersprachen-Paradigmen. Programmierparadigmen. Eine Programmiersprache dient dem Aufschreiben von Algorithmen

Ähnliche Dokumente
Java I Vorlesung 1 Einführung in Java

Repetitorium Informatik (Java)

Probeklausur: Programmierung WS04/05

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

Java Einführung Methoden. Kapitel 6

Interaktionen zwischen Objekten durch Senden von Nachrichten und Reagieren auf empfangene Nachrichten

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

Einstieg in die Informatik mit Java

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Programmiersprachen. Organisation und Einführung. Berthold Hoffmann. Studiengang Informatik Universität Bremen

Die Programmiersprache C Eine Einführung

Grundlagen der Informatik für Ingenieure I

Prof. Dr.-Ing. Dietrich Schröder GIS und Programmiersprachen: Wohin geht die Reise?

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Java I Vorlesung Vererbung und Sichtbarkeit

5. Tutorium zu Programmieren

Grundlagen der Programmierung UE

Programmiersprachen und Programmierkonzepte

Tutorium Java Ein Überblick. Helge Janicke

Grundlagen der Programmierung UE

Programmieren in Haskell Einführung

1. Der Einstieg in Java. Was heißt Programmieren?

Programmierung. Programme, Compiler, virtuelle Maschinen, Java

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 1. Einführung und Grundbegriffe

Modellierung und Programmierung 1

Erste Schritte in Java

3. Grundlegende Sprachkonstruktionen imperativer Programme

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Objektorientierte Programmierung OOP Programmieren mit Java

Java: Vererbung. Teil 3: super()

C# im Vergleich zu Java

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Probeklausur: Programmierung WS04/05

Objektorientierte Programmierung

Programmierkurs Python I

Eine Einführung in C-Funktionen

Algorithmen und Datenstrukturen

Einführung in die Informatik

12. Rekursion Grundlagen der Programmierung 1 (Java)

1. Übung zu "Numerik partieller Differentialgleichungen"

1. Der Einstieg in Java

Programmierkurs C++ Grundlagen. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

5.5.8 Öffentliche und private Eigenschaften

1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Informatik Java-Programmierkurs im Rahmen der Berufs- u. Studienorientierung für Schüler. Joliot-Curie-Gymnasium GR 2010 Nico Steinbach

1. Java ist Stammbaum der Programmiersprachen 3. Die "Softwarekrise"

Objektorientierte Programmierung

Informationsverarbeitung im Bauwesen

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

AOP Day 07. eine Veranstaltung der SIG AspectJ. organisiert vom AOP-Komitee. und der guten Fee. powered by. Oliver Böhm Darko Palic Ludger Solbach

Einführung in die Java- Programmierung

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

J.5 Die Java Virtual Machine

Programmierkurs Java

Übersicht. Vorstellung des OO-Paradigmas

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11

Algorithmen und Programmieren II Einführung in Python

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. Hochschule Darmstadt -Fachbereich Informatik-

Modulare Programmierung und Bibliotheken

Kapitel 6. Vererbung

Programmiertechnik. Prof. Dr. Oliver Haase Raum G124 Tel: 07531/ Oliver Haase Hochschule Konstanz 1

5.4 Klassen und Objekte

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

Einführung in die Programmierung mit Java

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Ergebnisse der Untersuchung zur Eignung einer Programmiersprache für die schnelle Softwareentwicklung kann der Informatikunterricht davon profitieren?

Propädeutikum. Dipl.-Inf. Frank Güttler

Delegatesund Ereignisse

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Vererbung. Martin Wirsing. Ziele. Vererbung

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Organisatorisches. Einführung in die Programmierung in C Hochschule Regensburg Universitätsstraße 31, Regensburg

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Objekt-Orientierte Programmierung

Einführung in die Programmierung WS 2014/ Algorithmus, Berechenbarkeit und Programmiersprachen 2-1

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Vorlesung Objektorientierte Programmierung Probeklausur

Erste Schritte in Java

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen

Kapitel 6. Vererbung

wenige Konzepte, keine Adressen, Anlehnung an C++ -Syntax Vererbung, Polymorphie/dynamisches Binden, umfangreiche Klassenbibliotheken

Informatik ist viel mehr als Delphi-Programmierung!

Kapitel 1: Einführung

Programmierung mit C Zeiger

Programmiertechnik Klassenmethoden

Einführung in die Programmierung

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Kapitel 2. Methoden zur Beschreibung von Syntax

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

Angewandte Mathematik und Programmierung

Teil 2: OOP und JAVA (Vorlesung 11)

Musterlösungen zur Klausur Informatik 3

JAVA - Methoden

Transkript:

Vorlesung Programmieren Programmierparadigmen Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Programmiersprachen-Paradigmen Eine Programmiersprache dient dem Aufschreiben von Algorithmen Ein Compiler übersetzt in Maschinensprache Die Art und Weise des Aufschreibens unterscheidet sich je nach Programmiersprache sehr deutlich Verschiedene Paradigmen existieren Bisher: Imperative Programmierung Security - 04 Cryptology #2 Unterschiedliche Sprachenkonzepte Imperative Programmiersprachen Grundprinzip: Folge von Variablenzuweisungen Wesentlich: Prozedurale Programmierung Beispiele: Algol, Fortran, Cobol, Pascal, C, Basic Spezialfall: Objektorientierte Programmierung Grundprinzip: Interaktionen zwischen Objekten Beispiele: SmallTalk, Java, C++ Funktionale Programmiersprachen Grundprinzip: Term-Ersetzung Beispiele: Lisp, HOPE, Miranda, SML, Haskell Logikbasierte Programmiersprachen Grundprinzip: Prädikatenlogik Beispiel: Prolog 5-3

Motivation Security - 04 Cryptology #4 Beispiel: Mehrmals Leerzeichen zählen Aufgabe: Zähle Leerzeichen in beiden folgenden Sätzen und gebe beides aus Man muss die Welt nicht verstehen, man muss sich nur darin zurechtfinden. (Albert Einstein) Die besten Dinge im Leben sind nicht die, die man für Geld bekommt.(albert Einstein) Security - 04 Cryptology #5 Mögliches Programm public class Zeichenzaehlen { public static void main(string[] args){ char text[] = "Man muss [ ] darin zurechtfinden. (Albert Einstein)".toCharArray(); int anzahlleerzeichen = 0; for(int aktuelleszeichen = 0; aktuelleszeichen < text.length; aktuelleszeichen++) { if( text[aktuelleszeichen] == ' ' ) { anzahlleerzeichen++; System.out.print(anzahlLeerzeichen); char text2[] = "Die besten Dinge [ ] Geld bekommt. (Albert Einstein)".toCharArray(); int anzahlleerzeichen2 = 0; for(int aktuelleszeichen2 = 0; aktuelleszeichen2 < text2.length; aktuelleszeichen2++) { if( text2[aktuelleszeichen2] == ' ' ) { anzahlleerzeichen2++; System.out.print(anzahlLeerzeichen2); Bildquelle: http://www.konsumer.info/?p=15528, Programm: 08-Programmierparadigmen\1-Zeichenzaehlen\Zeichenzaehlen.java Security - 04 Cryptology #6

Ausgabe des Programms 2 x 13 Leerzeichen? Kann das stimmen? Zufällig gleich viele? Haben wir einen Fehler gemacht beim Anpassen des Programms? Security - 04 Cryptology #7 Beliebter Fehler public class Zeichenzaehlen { public static void main(string[] args){ char text[] = "Man muss [ ] darin zurechtfinden. (Albert Einstein)".toCharArray(); int anzahlleerzeichen = 0; for(int aktuelleszeichen = 0; aktuelleszeichen < text.length; aktuelleszeichen++) { if( text[aktuelleszeichen] == ' ' ) { anzahlleerzeichen++; System.out.print(anzahlLeerzeichen); char text2[] = "Die besten Dinge [ ] Geld bekommt. (Albert Einstein)".toCharArray(); int anzahlleerzeichen2 = 0; for(int aktuelleszeichen2 = 0; aktuelleszeichen2 < text2.length; aktuelleszeichen2++) { if( text[aktuelleszeichen2] == ' ' ) { anzahlleerzeichen2++; System.out.print(anzahlLeerzeichen); Copy/Paste-Fehler Bildquelle: http://www.konsumer.info/?p=15528, Programm: 08-Programmierparadigmen\1-Zeichenzaehlen\Zeichenzaehlen.java Security - 04 Cryptology #8 Motivation Bisher möglich: Lange Abfolge von Code Probleme Lesbarkeit Fehleranfälligkeit Viel Copy & Paste Keine zentrale Fehlerbehebung Große Programme nicht wartbar Betriebssystem Windows NT 3.1 Windows NT 4.0 Windows 2000 Windows XP Windows Server 2003 OpenSolaris FreeBSD Mac OS X 10.4 Linux Kernel 2.6.0 Linux Kernel 2.6.35 Codezeilen 4-5 Mio. 11-12 Mio. >29 Mio. 45 Mio. 50 Mio. 9.7 Mio. 8.8 Mio. 86 Mio. 5.2 Mio. 13.5 Mio. #9

Prozedurale Programmierung Prozedurale Programmierung Zerlegung von Programmen in kleinere, wiederverwendbare Einheiten sog. Prozeduren Vorteile Kapselung einzelner Funktionalitäten Monolithisches Programm Bessere Wiederverwendbarkeit Lesbarerer Code Was tut er? (z.b. Zeichen zählen) statt Wie tut er es? (die ganzen Instruktionen) Fehlerbehebung an einer Stelle #11 Prozedur (auch: Funktion) Eingabeparameter Übergabe von Werten an die Funktion Definiert als Menge von Variablen mit bestimmtem Datentyp Rückgabe Wert mit einem bestimmten Datentyp Spezieller Datentyp für keine Rückgabe: void Beispiele für Deklarationen (sog. Signatur) void main(string[] args); int zaehleleerzeichen(char[] text); char[] rueckwaerts(char[] text); boolean istleerzeichen(char zeichen); boolean istkontogedeckt(int konto, int blz); Eingabewerte Prozedur / Funktion (Black Box) Ausgabewert #12

Signatur und Implementierung Signatur (auch: Deklaration) int zaehleleerzeichen(char[] text) { // Hier steht die Implementierung der Funktion // (in einer Blockanweisung) Implementierung (auch: Body oder Definition) #13 Signatur und Implementierung int zaehleleerzeichen(char[] text) { int anzahlleerzeichen = 0; for(int i = 0; i < text.length; ++i) if ( text[i] == ' ' ) anzahlleerzeichen++; return anzahlleerzeichen; Rückgabe der Funktion (wichtig: Datentyp) #14 Exkurs: Blockanweisung Blockanweisungen definieren einen eigenen Scope (Bereich) Beispiele class MeinProgramm Prozedur main Security - 04 Cryptology #15

Exkurs: Blockanweisung Begrenzen Sichtbarkeit bzw. Lebensdauer von Elementen (z.b. Variablen) Beispiele Variable i (Zeile 3) gehört zur Klasse Blockanweisung (globale Variable) Variable i (Z. 6) gehört zu main (lokale Variable) Variable i2 lebt nur innerhalb der Blockanweisung (Z. 9-11) Variable i3 von Z. 15-22 Variable i4 in Z. 19 Security - 04 Cryptology #16 Implementierung einer Funktion Wie eine Erweiterung der Blockanweisung Es gibt ein paar weitere lokale Variablen Stellen die Parameter einer Funktion dar Parameter werden wie normale lokale Variablen verwendet werden Werte der Parameter werden beim Aufruf festgelegt Security - 04 Cryptology #17 Aufruf von Funktionen Aufruf über Namen (Identifier) der Funktion Übergabe von Parametern an die Funktion Richtige Anzahl Richtiger Datentyp Security - 04 Cryptology #18

Ausgabe des Programms Programm verhält sich identisch zu dem Copy & Paste-Programm Es unterscheidet sich daher nicht im Ergebnis Aber das Programm ist lesbarer, einfacher, wartbarer, wiederverwendbarer,... Security - 04 Cryptology #19 Weiteres Beispiel: Inverter Security - 04 Cryptology #20 Mit Prozeduren Zerlegen in einzelne Operationen Zeichen lesen Auf Enter prüfen Prüfen, ob noch Platz im Puffer ist Invers ausgeben Aufrufen im Hauptprogramm Security - 04 Cryptology #21

Prozedurale Programmierung Zerlegen des Programms in Prozeduren / Funktionen Wesentlich: Übergabe von Parametern an Funktionen Programm besteht aus Sequenz von Funktionsaufrufen Erste Funktion: main Prozeduren können auch globale Variablen verändern Zustand über mehrere Aufrufe hinweg Security - 04 Cryptology #22 Beispiel: Bankkonto Bankkonto hat einen Zustand... Kontostand...und Operationen Einzahlen, Auszahlen, Kontostand erfragen Mögliche Implementierung? Security - 04 Cryptology #23 Problem: Vergessen der Zuweisung erzeugt falsche Semantik #24

Ausgabe des Programms #25 Etwas besser: Verwendung einer statischen Variable #26 Ausgabe des Programms #27

#28 Ausgabe des Programms #29 Probleme prozeduraler Programmierung Bisher Aufteilung des Programms in Prozeduren mit bestimmten Aufgaben Hauptprogramm steuert Programmfluss über Funktionsaufrufe Übergabe von Daten über Parameter oder globale Variablen Probleme Verwendung globaler Variablen ist problematisch Ausführung einer Funktion abhängig vom Zustand (Inhalt) der globalen Variable Man nennt dies auch Seiteneffekt Alternatives Konzept: Funktionale Programmierung Security - 04 Cryptology #30

Funktionale Programmierung Funktionale Programmierung Inspiriert von mathematischen Funktionen Wir besprechen hier nur die Grundidee Funktionale Programmierung ist viel mehr Es gibt auch funktionale Programmiersprachen Security - 04 Cryptology #32 Funktionale Programmierung Mathematische Funktionen sind wie eine große Tabelle Abhängig von den Parametern, findet man das (immer konstante) Ergebnis in einer Tabelle Wichtiges Prinzip: Termersetzung f(2) 4 f(4) 16 Security - 04 Cryptology #33

Funktionale Programmierung Vereinfacht dargestellt ist funktionale wie prozedural ohne globale Variablen Denkweise ist sehr wichtig für gut testbare und wartbare Programme Security - 04 Cryptology #34 Zusammenfassung und Ausblick Prozedurale und funktionale Programmierung hilft, Programme besser wartbar, fehlerfreier, etc. zu machen Bringt keine weitere Mächtigkeit der Programmiersprache Mittel, um den Quelltext für Menschen besser verständlich zu machen Prozedural: Aufteilen von Programmen in kleine, handliche Prozeduren Dürfen auch globale Variablen verändern Funktional: Wie prozedural, nur ohne globale Variablen #35