Programmierparadigmen Agenda für heute, 4. Mai, 2006 Imperative Programmiersprachen • Programmierparadigmen In Prozeduren zusammengefasste, sequentiell ausgeführte Anweisungen Die Prozeduren werden ausgeführt, wenn sie als Teil des Programmablaufs aufgerufen werden • Imperatives vs. objektorientiertes Programmieren • Ereignisse und Objekte • Delphi Objektorientierte Programmiersprachen • Datentypen: Real Imperative Prozeduren, die ausgeführt werden, wenn ein bestimmtes Ereignis eintritt Die Prozeduren sind Bestandteil von sog. Objekten Programmieren und Problemlösen 2/17 © Institut für Computational Science, ETH Zürich Programmierparadigmen Funktionale Sprachen • Berechnungen werden als Auswertung mathematischer Funktionen verstanden • Imperatives vs. objektorientiertes Programmieren Logikorientierte Sprachen Orientieren sich in der Beschreibung der Programme an der Prädikatenlogik Regelbasierte Sprachen Kommen in wissensbasierten Systemen (Expertensysteme) zur Anwendung Programmieren und Problemlösen 3/17 © Institut für Computational Science, ETH Zürich Programmierparadigmen • Ereignisse und Objekte • Delphi • Datentypen: Real Objektorientiertes Programmieren (OOP) Imperatives vs. objektorientiertes Programmieren Voraussetzungen für die objektorientierte Programmierung Ereignisse Ein Programm prüft ständig ob gewisse Ereignisse stattgefunden haben und reagiert darauf mit Nachrichten an Prozeduren Verwaltung von Objekten Durch einen Datentyp, in dem sowohl Eigenschaften der Speicherung als auch Prozeduren deklariert sind Imperativ: Wiederholte, sequentielle Verarbeitung. Objektorientiert: Ereignisgesteuerte Verarbeitung Bei Mausklick dividiere Menü Auswahl Aktion Wir befassen uns mit konzeptionellen Aspekten der OOP weil diese notwendig sind um die technischen Grundlagen von Delphi zu verstehen. Beispiel: zeilenweise Verarbeitung Programmieren und Problemlösen 4/17 © Institut für Computational Science, ETH Zürich Programmieren und Problemlösen Beispiel: grafische Verarbeitung 5/17 © Institut für Computational Science, ETH Zürich Typische Ereignisse bei Windows-Anwendungen • Programmierparadigmen • Imperatives vs. objektorientiertes Programmieren Befehlsereignisse Starten von Programmen, Speichern von Dateien, usw. • Ereignisse und Objekte • Delphi • Datentypen: Real Eingabeereignisse Drücken einer Tastaturtaste, Bewegen der Maus, usw. Fensterereignisse Öffnen, Schliessen, eines Fensters, Grösse verändern, usw. Programmieren und Problemlösen 6/17 © Institut für Computational Science, ETH Zürich Typische Ereignisse bei Windows-Anwendungen Typische Objekte bei Windows-Anwendungen Timer-Ereignisse Nachführen einer Uhr, Zeitpläne verwalten, usw. Systemereignisse Netzwerksteuerung, Interaktion mit Peripheriegeräten, usw. Programmieren und Problemlösen 7/17 © Institut für Computational Science, ETH Zürich Programmieren und Problemlösen 8/17 © Institut für Computational Science, ETH Zürich Delphi • Programmierparadigmen Grundlagen • Imperatives vs. objektorientiertes Programmieren Object-Pascal • Ereignisse und Objekte Erweiterung von Pascal durch Klassen und Objekte • Delphi • Datentypen: Real Grafische Programmierumgebung "Drag-and-drop"-Entwurf von Programmoberflächen "Visual Component Library" (VCL) Integrierte Entwicklungsumgebung (IDE) Verwaltung von Projekten, insb. Abhängigkeiten zwischen Units Regeln bez. Programmorganisation Programmieren und Problemlösen 9/17 © Institut für Computational Science, ETH Zürich Sichtbare Objekte in Delphi Unsichtbare Objekte in Delphi DateiöffnungsDialog DruckerDialog Timer SpeicherungsDialog Programmieren und Problemlösen 10/17 © Institut für Computational Science, ETH Zürich Ereignisse in Delphi Programmieren und Problemlösen HTTP-Transfer FTP-Transfer 11/17 © Institut für Computational Science, ETH Zürich Die Projektverwaltung in Delphi In Delphi wird ein Programm Projekt genannt. Am Beispiel der Komponente "Button": Ein Delphi-Projekt besteht aus mehreren Dateien von denen jede durch eine spezifische Erweiterung gekennzeichnet ist: .dpr Die Projektverwaltungs-Datei (wird von Delphi automatisch erzeugt und nachgeführt) .pas Quelltext-Datei (Objekt-Pascal-Code, in Units gegliedert) .dfm Binäre Datei für den Aufbau eines Formulars .res Datei mit vom Projekt beanspruchten Ressourcen .dof Projektoptionsdatei (Einstellungen für Compiler und Linker) .exe Ausführbares Programm Wichtiger Hinweis: Immer alle Dateien speichern!! Programmieren und Problemlösen 12/17 © Institut für Computational Science, ETH Zürich Programmieren und Problemlösen 13/24 © Institut für Computational Science, ETH Zürich Der Datentyp real Teilbereich der reellen Zahlen • Programmierparadigmen • Imperatives vs. objektorientiertes Programmieren • Ereignisse und Objekte 5.0 x 10 -324 .. 1.7 x 10 308 • Delphi Operationen: +, –, *, /, ROUND, TRUNC, ABS Der Wertebereich ist vom Prozessor abhängig. Beispiel: • Datentypen: Real Das Resultat eines Ausdrucks mit Integer-Werten kann sowohl an eine Integer-Variable als auch an eine Real-Variable zugewiesen werden. Programmieren und Problemlösen Reelle Typen in Delphi 6 Typ Real48 Bereich 2.9 x 10-39 .. 1.7 x 1038 Single 1.5 x 10-45 .. 3.4 x 1038 Double 5.0 x 10-324 .. 1.7 x 10308 14/17 © Institut für Computational Science, ETH Zürich Konsequenzen der endlichen Darstellung für real Signifikante Stellen Extended 3.6 x 10-4951 .. 1.1 x 104932 Comp 2-63+1 .. 263-1 Grösse in Byte 11-12 6 7-8 4 15-16 8 19-20 10 19-20 8 Currency 922337203685477.5808.. 922337203685477.5807 19-20 8 Der generische Typ Real ist in der aktuellen Implementation mit dem Typ Double identisch. Gegeben sind folgende Anweisungen: a:= 4 / 3 – 1; a:= 3 * a – 1; Welchen Wert erhält a? 3(4/3-1)-1 = 4-3-1 = 0 Angenommen, wir haben 4 Ziffern um eine relle Zahl darzustellen: 4 = 4. 0 0 0 3 = 3. 0 0 0 1 = 1. 0 0 0 das bedeutet: 4/3 = 1. 3 3 3 4/3-1 = 0. 3 3 3 Also: Programmieren und Problemlösen (8 Byte, 15-16 signifikante Stellen) 15/17 © Institut für Computational Science, ETH Zürich a = –0. 0 0 1 ≠ 0 Programmieren und Problemlösen deshalb: 3*(4/3-1) = 0. 9 9 9 3*(4/3-1)-1 = –0. 0 0 1 Lösung: 16/17 3 * 4 / 3 – 3 * 1 rechnen © Institut für Computational Science, ETH Zürich Automatische Typenkonversion In Ausdrücken können Integer- und Real-Werte gemeinsam vorkommen. Wenn für eine der Operationen +, – oder * ein Operand vom Typ Real ist, dann wird der andere Operand automatisch zu Real konvertiert bevor der Operator angewandt wird. Beispiel: (6 + 4) * (1 + 0.1) Die Faktoren in Klammern werden zuerst ausgewertet: 6 + 4 = 10 (Integer) Im zweiten Faktor ist 0.1 vom Typ Real, deshalb wird 1 zu Real konvertiert: 1 + 0.1 = 1.1 (Real) Der Multiplikationsoperator * hat einen Integer-Operanden (10) und einen Real-Operanden (1.1). Der Integer-Operand wird zu Real konvertiert: 10.0 * 1.1 = 11.0 (Real) Beachte: Das Resultat ist vom Typ "Real" obwohl es ein ganzzahliger Wert ist! Programmieren und Problemlösen 17/17 © Institut für Computational Science, ETH Zürich