Inhalt. SWP - Programmiersprachen. Datentypen. Datentypen (II) Datentypen Beispiele (II) Datentypen - Beispiele

Ähnliche Dokumente
SEP 114. Design by Contract

SOMA Reverse Engineering

Objektorientierte Programmierung

Design by Contract with JML

Vorkurs C++ Programmierung

Grundlagen von Python

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Erster Bug: eine Motte

Gebundene Typparameter

Javakurs zu Informatik I. Henning Heitkötter

Nathan Burgener. Design by Contract. Modul SWE

Java: Vererbung. Teil 3: super()

Große Übung Praktische Informatik 1

Prinzipien Objektorientierter Programmierung

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Einführung in Javadoc

Java Kurs für Anfänger Einheit 5 Methoden

Einführung in die Programmierung für Wirtschaftsinformatik

Übung: Verwendung von Java-Threads

Client-Server-Beziehungen

Objektorientierte Programmierung OOP

Software Engineering Klassendiagramme Assoziationen

VBA-Programmierung: Zusammenfassung

Java Einführung Packages

Innere Klassen in Java

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

3 Objektorientierte Konzepte in Java

Kontrollstrukturen - Universität Köln

Software Engineering Klassendiagramme Einführung

Programmieren in Java

Programmieren was ist das genau?

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Komponententest. Testen von Software Systemen. Übung 02 SS 2009 Version:

Gesicherte Prozeduren

Einführung in die Programmierung

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Übungen Programmieren 1 Felix Rohrer. Übungen

Whitebox-Tests: Allgemeines

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

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

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Javakurs 2013 Objektorientierung

Klassendefinitionen verstehen

Einführung in die Programmierung

Java Virtual Machine (JVM) Bytecode

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Programmieren Lernen mit BYOB. Gerald Futschek 5. November 2012

Algorithmen mit Python

Universität Stuttgart Abteilung Anwendersoftware Steht für Embedded SQL in Java. - Java-Methoden als SQL Stored-Procedures

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Vererbung & Schnittstellen in C#

Aspekt Orientierte Programmierung

Programmierkurs Java

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Was ist Logische Programmierung?

Klassenbeziehungen & Vererbung

C# im Vergleich zu Java

Typumwandlungen bei Referenztypen

Modellierung und Programmierung 1

Objektorientierte Programmierung. Kapitel 12: Interfaces

Programmierparadigmen. Programmierparadigmen. Imperatives vs. objektorientiertes Programmieren. Programmierparadigmen. Agenda für heute, 4.

Einführung in die Java- Programmierung

Java Einführung Abstrakte Klassen und Interfaces

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

WPF Steuerelemente Listbox, ComboBox, ListView,

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

2. Programmierung in C

Grundzüge der Programmierung. Konzepte der objektorientierten Programmierung (oop) OBJEKTE - KLASSEN

Übersicht Programmablaufsteuerung

Tutorium Rechnerorganisation

Selbststudium OOP4 Auftrag

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

am Beispiel von JUnit

Objektorientierte Programmierung

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Java Einführung Collections

Excel Funktionen durch eigene Funktionen erweitern.

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

Grundlagen der Programmierung (Vorlesung 14)

Copyright 2014 Delta Software Technology GmbH. All Rights reserved.

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Pragmatik von Programmiersprachen

KV Software Engineering Übungsaufgaben SS 2005

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich

Programmierkurs: Delphi: Einstieg

Das Model View Controller (MVC) Konzept

Delegatesund Ereignisse

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Einleitende Bemerkungen

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

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Objektorientierung: Klassen und Objekte

XML-Namensräume. Marc Monecke

Transkript:

Inhalt SWP - Programmiersprachen Datentypen Sichtbarkeit / Parameterübergabe Struktur / Programmorganisation Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at Parallelität Exceptions Verifikation Prog.sprachenkonzepte Aspects 2 Datentypen Datentypen (II) Jede Sprache verwendet implizit oder explizit Datentypen Unterscheidung: (strongly) typed languages weakly (un-) typed languages Zuordnung Datentypen zu Variablen Überprüfung der Datentypen Ableitung von Datentypen Anmerkung: Unterscheidung basiert auf Überprüfungen zur Compile-Time 3 4 Datentypen - Beispiele Datentypen Beispiele (II) SML (strongly typed) fun inc x = x + 1; Signature inc: int int Java (strongly typed) public int inc (x : int) { return x + 1; Smalltalk (untyped): Methode inc bei Klasse Integer inc ^self + 1; Andere untyped languages: Perl, Basic,.. Charakteristik: Meistens keine Variablendeklarationen! 5 6 1

Zusammenfassung Datentypen Sichtbarkeit Strongly-typed languages: Der zu einer Variablen zugeordnete Datentyp kann zur Compile-Time abgeleitet werden. Vorteil: Fehler können schon zur Compile- Time gefunden werden. Beispiel: 1. Der Aufruf abc inc in Smalltalk liefert einen Fehler zur Laufzeit, da die Funktion inc nicht für Strings definiert ist. 2. Der Java-Aufruf inc( abc ) liefert einen Fehler während der Compilierung. Welche Deklarationen sind wo sichtbar? Arten von Deklarationen: Variablen, Klassen, Funktionen, 7 8 Sichtbarkeit Beispiele (I) Sichtbarkeit Beispiele (II) main () { int a = 0; int b = 0; { int b = 1; { int a = 2; { int b = 3; Welche Deklaration ist in welchem Block gültig? program dynamic (input, output); var r: real; procedure show; begin write(r) end; procedure small; var r : real; begin r := 0.125; show end; begin r := 0.25; show; small; writeln; show; small; writeln; end Was liefert das Programm dynamic? 9 10 Parameterübergabe Call-by-Value Wie werden Parameter beim Aufruf übergeben? Beispiel: procedure exchange(i,j: integer); var x: integer; begin x := a[i]; a[i] := a[j]; a[j] := x end Alle aktuellen Parameter werden ausgewertet. Die Werte werden an die Parameter (Variablen) weitergegeben. Auch Pointer können als Wert übergeben werden. 11 12 2

Call-by-Reference Call-by-Name Anstelle der Werte wird ein Pointer auf die Speicherstelle des aktuellen Parameters übergeben. Anmerkungen: Eigene Keywords zur Unterscheidung von Call-by-Value und Call-by-References (z.b. PASCAL: var) Arrays werden normalerweise als Referenz übergeben. Die Prozedur wird als Makro betrachtet. Der Body der Prozedur wird anstelle des Prozeduraufrufs substituiert. Alle Parameter der Prozedur werden durch die aktuellen Parameter ersetzt. Problem: exchange(i,a[i]) wird zu x := i; i := a[i]; a[i] := x 13 14 Struktur von Programmen Implementierung vor der Strukturierten Programmierung Mikroebene 1. u := x; Statements, Blöcke, Funktionen, Prozeduren, Klassen, Makroebene Libraries, Components, Packages, 2. result := y; 3. if u = 0 goto 7; 4. result := result + 1; 5. u := u 1; 6. goto 3; 7. _ 15 16 Implementierung Strukturierter Code Implementierungsunterschiede Funktionenaufrufe 1. u := x; 2. result := y; 3. while u!= 0 do 4. result := result + 1; 5. u := u 1; 6. end; 7. _ write(inc(x)); public int inc (x:int) { return x+1; 1: z := x; 2: goto 123; 3: goto 200; 123: z := z+1; 124: goto 3; 200: System call 17 18 3

Funktionen, Prozeduren,.. Module, Klassen, Stellen eine Zusammenfassung von Funktionalität dar, die eine eindeutige Schnittstelle aufweist. Charakteristika Schnittstelle Implementierung Problem: Schnittstelle und Implementierung hängen zusammen! Modul: Schnittstelle Implementierung (getrennt von der Schnittstelle) Kommunikation nur über die Schnittstelle. Modul hat einen Zustand (wie eine Klasse). Im Prinzip mehrere Implementierung zu einer Schnittstelle möglich. 19 20 Implementierung in Prog.sprachen Parametrisierte Strukturen Modulkonzept in MODULA Klassen OO-Sprachen z.b. Java public class LPredicate extends LObject { public String identifier; Instanzvariablen. LPredicate() { Konstruktoren arguments = new Vector(); identifier = null; Methoden public String tostring(){. Problem: Für verschiedene Datentypen benötigt man unterschiedliche Implementierungen (aufgrund des Typsystems). z.b. Funktoren in SML oder Templates in C++ 21 22 Parametrisierte Strukturen - Beispiel Software Components Implementierung einer geordneten Liste Man braucht Ordnungsrelation, z.b., < für Zahlen. fun gt() Datentyp int mit > Relation > Ersetze jedes Vorkommnis von gt durch > 23 A component is a physical, replaceable part of a system that packages implementation, and confirms to and provides the realization of a set of interfaces. Unit of Reuse! Source File, ActiveX control, JavaBeans, Java servlets, Beinhalten viele Klassen und Interfaces 24 4

Software Components (II) Components SE-Aspekte <<designsubsystem>> design class interface <<trace>> {1:1 <<implementationsubsystem>> component Bereitstellung von Funktionalität durch Wohldefiniertes Interface Kapselung / Information Hiding Beschreibung (der Funktionalität) Ermöglicht Austausch von Komponenten Handel Automatische Erstellung von Programmen 25 26 Packages, Libraries Packages und Prog.Sprachen.. Verwendungen: Zusammenfassen von Elemente mit ähnlicher Semantik Abgrenzung Semantische Bereiche Einheiten für Configuration Management Einheiten für das parallele Arbeiten Trennung von Name-Spaces z.b. in Java: Zugriff auf ein Element package myprojekt-parta; eines Packages. import java.util.enumeration; import java.util.vector;. Name Space (=? Package) 27 28 Parallelität Wie können Tasks/Prozesse parallel gestartet und synchronisiert werden? In C: Kein Element der Sprache! In Java: Es gibt Teilaspekte (Keyword: synchronized bei Methoden), die in der Sprache sind. Sprachen, die Parallelität unterstützen sind z.b. Ada, VHDL, Beispiel - VHDL entity test is port(i : in bit, O: out bit); end test; behavior behav of test is signal S: bit; Prozesse arbeiten begin parallel! Synchronisierung p1: S <= not S after 10 ns; über Signale p2: O <= S xor I; end behav; 29 30 5

Exceptions Zweck von Exceptions Programm = Implementierung der gewünschten Eigenschaften (Funktionalitäten) 1. Schritt: Nur Berücksichtigung des gewünschten Verhaltens Aber: Fehlerhandling (z.b. falsche Benutzereingaben) muß ebenfalls berücksichtigt werden. Fehlerhandling kann bis zu 90 Prozent des Codes ausmachen (bei Steuerungsprogrammen)! Abfangen von unerwünschten Verhalten ohne (zu) großen Programmieraufwand. z.b.: Division durch 0 bei x = y / z; Falsche Benutzereingabe. Benutzer gibt keine Eingabe ein (= Leerstring) und läßt das Programm weiterlaufen. Funktion (z.b. I/O) liefert nicht immer das gewünschte Resultat. 31 32 Exceptions in Java Exceptions in Java (cont.) try-catch-finally Statement! Beispiel: try { Zusätzliches throw Statement um Exceptions durch Programme initiieren zu können. X = y / z catch (exception e) { System.err.println("Exception caught: " + e.getmessage()); Sollte NICHT als Ersatz für Control- Flow-Statements (if-then-else,) verwendet werden!!!! finally { /* Do nothing */ 33 34 Verification Assertions Wie kann man Überprüfen das ein Programm hinsichtlich seiner Spezifikation funktioniert? Testfälle Formale Methoden Beweismethoden Direkte Überprüfung von Bedingungen im Code Wird nur von wenigen Programmiersprachen direkt bereitgestellt. Statement im Code, das zur Laufzeit ausgeführt wird und Bedingungen überprüft. z.b.: ASSERT in VHDL Beispiel: Ein Wert einer Variable muß bestimmte Eigenschaften haben. ASSERT x < 10 REPORT x is smaller than 10 SEVERITY error; 35 36 6

Design-by-Contract Beyond OOP? Methoden muß bestimmte Eigenschaften aufweisen PRE- und POST-Conditions sowie Dateninvarianten z.b. In Eiffel: require z!= 0 do x := y / z ensure y = x * z Es gibt Sichtweisen auf Programme, die nur schwer unter ein Konzept zu bringen sind. Bei OO-Design werden nur manche Aspekte berücksichtigt. Die fehlenden Aspekte können nur schwer integriert werden. 37 38 Beispiel Klasse Figure Different Aspects. Figure Point getx() gety() setx(int) sety(int) FigureElement Line getp1 getp2 setp1(point) setp2(point) DisplayUpdating ALTERNATIVE SICHTWEISE Design Sichtweise hinsichtlich der Zerlegung in Klassen und Erstellung einer Klassenhierarchie Design hinsichtlich Graphischer Elemente vs. Design hinsichtlich dem Tracking von Bewegungen 39 40 AspectJ Vorteile von Aspects aspect SimpleTracing() { pointcut traced(): call(void Display.update()) call(void Display.repaint()); before(): traced() { println( Entering: + thisjoinpoint); void println (String str) {. Alternative Funktionalität wird zentral gespeichert, geschrieben, verändert,.. Es ist nicht notwendig zusätzlichen Code im Programm zu verteilen. Zusätzlicher Code kann einfach entfernt werden. Kann für Verifikation verwendet werden. Immer wenn eine Methode x aufgerufen wird, wird ein Überprüfung durchgeführt. 41 42 7

Literatur zu Aspect-Oriented- Programming Zusammenfassung der VU Special Issue on AOP, Communication of the ACM, Oct. 2001, Vol. 44, No. 10 43 44 Lehrziele Syntax vs. Semantik von Programmiersprachen Programmiersprachendesign Syntax: Grammatiken, LL(1) Parsing (Operationale) Semantik, Programmiersprachenkonzepte Funktionale Sprachen Imperative Sprachen / Assignment Sprachen OO Sprachen Logische Programmiersprachen Klassifikation von Programmiersprachen hinsichtlich Ausdrucksstärke, 45 8