Pragmatik von Programmiersprachen



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

Innere Klassen in Java

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

Programmieren was ist das genau?

Typumwandlungen bei Referenztypen

Grundbegriffe der Informatik

Formale Sprachen und Grammatiken

Objektorientierte Programmierung

Objektorientierte Programmierung. Kapitel 12: Interfaces

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

Java: Vererbung. Teil 3: super()

Java Kurs für Anfänger Einheit 5 Methoden

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Einführung in die Java- Programmierung

Klausur zur Einführung in die objektorientierte Programmierung mit Java

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

Javakurs zu Informatik I. Henning Heitkötter

Prinzipien Objektorientierter Programmierung

Einführung in Javadoc

Java Einführung Abstrakte Klassen und Interfaces

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

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

Grundlagen von Python

5. Abstrakte Klassen

IT-Basics 2. DI Gerhard Fließ

Einführung in die Programmierung

Programmierkurs Java

Ohne Fehler geht es nicht Doch wie viele Fehler sind erlaubt?

Professionelle Seminare im Bereich MS-Office

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Programmieren in Java

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

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Das Pflichtenheft. Dipl.- Ing. Dipl.-Informatiker Dieter Klapproth Ains A-Systemhaus GmbH Berlin

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Portfolio: "Die Ratten" von Gerhart Hauptmann

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

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

Informatik I Debugging

Objektorientierte Programmierung

SWE1 / Übung 2 ( )

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

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

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

Software Engineering Klassendiagramme Assoziationen

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

Programmiersprachen und Übersetzer

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

WebService in Java SE und EE

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

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

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

3 Objektorientierte Konzepte in Java

Client-Server-Beziehungen

t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r )

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Repetitionsaufgaben Wurzelgleichungen

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Algorithmen mit Python

Erfahrungen mit Hartz IV- Empfängern

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Software Engineering Klassendiagramme Einführung

Oracle: Abstrakte Datentypen:

Lehrer: Einschreibemethoden

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

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

Algorithmen und Datenstrukturen

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

impact ordering Info Produktkonfigurator

Programmieren in Java

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.

Computeranwendung und Programmierung (CuP)

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Kapitel 6. Vererbung

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Test-Driven Design: Ein einfaches Beispiel

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Was ist Open Source Software und wem gehört sie?

Dr. Guido Schwarz Forschung, Schulung, Beratung; A Wien, Edelhofgasse 31/8; Tel: Mobil:

4. AuD Tafelübung T-C3

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

Programmiermethodik. Übung 13

Beispiel: DB-Mock (1/7)

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

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

IT-Strategie zum Einsatz von Open Source Software. SenInnSport IT-Kompetenzzentrum

teischl.com Software Design & Services e.u. office@teischl.com

Social Media Einsatz in saarländischen Unternehmen. Ergebnisse einer Umfrage im Mai 2014

Java Einführung Collections

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Semantik von Formeln und Sequenzen

Formale Spezialisierungstechniken. am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009

Erster Bug: eine Motte

Probeklausur Softwareengineering SS 15

Transkript:

Pragmatik von Programmiersprachen Im Kontext der Notation von Quelltexten Mike Becker, 11. Dezember 2014

Szenario: IT Dienstleister Unternehmen: Produkte: Kunden: IT Dienstleistung Beratung und Software möchten Spezialsoftware einsetzen 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 2

Fragestellung Früher oder später: 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 3

Lösungsansätze Mögliche Auswahlkriterien: Vorgabe des Kunden Best Practises Skillset der Mitarbeiter Vorlieben der Mitarbeiter 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 4

Lösungsansätze Mögliche Auswahlkriterien: Vorgabe des Kunden = alternativlos Best Practises Skillset der Mitarbeiter Vorlieben der Mitarbeiter 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 4

Lösungsansätze Mögliche Auswahlkriterien: Vorgabe des Kunden Best Practises = alternativlos Best Choice Skillset der Mitarbeiter Vorlieben der Mitarbeiter 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 4

Lösungsansätze Mögliche Auswahlkriterien: Vorgabe des Kunden Best Practises Skillset der Mitarbeiter = alternativlos Best Choice keine Weiterentwicklung Vorlieben der Mitarbeiter 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 4

Lösungsansätze Mögliche Auswahlkriterien: Vorgabe des Kunden Best Practises Skillset der Mitarbeiter Vorlieben der Mitarbeiter = alternativlos Best Choice keine Weiterentwicklung noch weniger Weiterentwicklung 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 4

Lösungsansätze Mögliche Auswahlkriterien: Vorgabe des Kunden Best Practises Skillset der Mitarbeiter Vorlieben der Mitarbeiter = alternativlos Best Choice keine Weiterentwicklung noch weniger Weiterentwicklung Spracheigenschaften 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 4

Aspekte einer Programmiersprache Notation Formale Sprache mit Alphabet und Grammatik Lexik und Syntax Bedeutung Was tut der notierte Algorithmus? Semantik Einsetzbarkeit Wie gut lässt sich der Lösungsweg ausdrücken? Pragmatik 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 5

Pragmatik Szenario Pragmatik Lesbarkeit und Kompaktheit Eindeutigkeit Compilerunterstützung Funktionale Programmierung Fazit Bei natürlichen Sprachen: Was man mit Sprache bewirken kann (Wagenknecht, Hielscher) Ironie, Satire Höflichkeit, Provokation Überzeugen (rhetorische Tricks) Änderung der Bedeutung durch externe Einflüsse Beispiel: Wo bist du? Hier. 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 6

Pragmatik Übertragen auf Programmiersprachen: Fachliche Einsatzbereiche Technisches Umfeld Beziehungen zwischen Mensch und Maschine 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 7

Mögliche Betrachtungen 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 8

Mögliche Betrachtungen 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 8

Notation des Quellcodes Mögliche Kriterien für die Untersuchung: Lesbarkeit Eindeutigkeit Kompaktheit Compilerunterstützung 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 9

Notation des Quellcodes Wichtige Bemerkungen um unsachliche Diskussionen zu vermeiden: Lesbarkeit: Eindeutigkeit: Kompaktheit: Compilerunterstützung: 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 10

Notation des Quellcodes Wichtige Bemerkungen um unsachliche Diskussionen zu vermeiden: Lesbarkeit: ist allgemein subjektiv vergleichend und von außen bewerten Eindeutigkeit: Kompaktheit: Compilerunterstützung: 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 10

Notation des Quellcodes Wichtige Bemerkungen um unsachliche Diskussionen zu vermeiden: Lesbarkeit: ist allgemein subjektiv vergleichend und von außen bewerten Eindeutigkeit: der Mensch gewöhnt sich schnell Bedeutung für Software? Kompaktheit: Compilerunterstützung: 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 10

Notation des Quellcodes Wichtige Bemerkungen um unsachliche Diskussionen zu vermeiden: Lesbarkeit: ist allgemein subjektiv vergleichend und von außen bewerten Eindeutigkeit: der Mensch gewöhnt sich schnell Bedeutung für Software? Kompaktheit: Optik versus Metrik Compilerunterstützung: 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 10

Notation des Quellcodes Wichtige Bemerkungen um unsachliche Diskussionen zu vermeiden: Lesbarkeit: ist allgemein subjektiv vergleichend und von außen bewerten Eindeutigkeit: der Mensch gewöhnt sich schnell Bedeutung für Software? Kompaktheit: Optik versus Metrik Compilerunterstützung: Nicht nur mit VI programmieren 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 10

Lesbarkeit und Kompaktheit Lesbarkeit Wie gut ist der Quelltext für Sprachneulinge verständlich? Kompaktheit Wie viele Instruktionen werden für die Problemlösung benötigt? 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 11

Beispiel - Zeilen zählen mit Haskell main = print. length. lines =<< readfile "linecount.hs" 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 12

Beispiel - Zeilen zählen mit Python with open("linecount.py") as f: for i, l in enumerate(f): pass print i + 1 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 13

Beispiel - Zeilen zählen mit Java import java.io. ; public class LineCount { public static void main(string args[]) throws IOException { try (BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream("LineCount.java")))) { int n = 0; while(reader.readline()!= null) n++; System.out.printf("%d\n", n); } } } 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 14

Beispiel - Zeilen zählen mit Assembler 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 15

Lesbarkeit und Kompaktheit Feststellung Lesbarkeit und Kompaktheit sind in der Theorie unabhängig, aber unterliegen in der Praxis den gleichen Einflüssen. 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 16

Lesbarkeit und Kompaktheit Feststellung Lesbarkeit und Kompaktheit sind in der Theorie unabhängig, aber unterliegen in der Praxis den gleichen Einflüssen. Merksatz Verbosität und Granularität erhöhen die Lesbarkeit auf Kosten der Kompaktheit. 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 16

Lesbarkeit und Kompaktheit Feststellung Lesbarkeit und Kompaktheit sind in der Theorie unabhängig, aber unterliegen in der Praxis den gleichen Einflüssen. Merksatz Verbosität und Granularität erhöhen die Lesbarkeit auf Kosten der Kompaktheit. Beispiel (Java): synchronized 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 16

Schlüsselwort-Eindeutigkeit Beispiel (Java): class Foo implements Bar //... List<? extends Bar> list = new ArrayList<Foo>(); Beispiel (Python): for e in l: # <Block> else # <Block> 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 17

Symbol-Eindeutigkeit Beispiel (C#): G(F < A, B > (-7)) Beispiel (C++): typedef sometype<t1, T2<T1, T3> > 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 18

Symbol-Eindeutigkeit Beispiel (C#): G(F < A, B > (-7)) Beispiel (C++): typedef sometype<t1, T2<T1, T3> > 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 18

Symbol-Eindeutigkeit Beispiel (C#): G(F < A, B > (-7)) Beispiel (C++): typedef sometype<t1, T2<T1, T3> > 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 18

Eindeutigkeit Feststellung Wiederverwendung von Schlüsselwörtern und Symbolen stellen nicht nur Programmierer, sondern auch Programe vor Herausforderungen. 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 19

Eindeutigkeit Feststellung Wiederverwendung von Schlüsselwörtern und Symbolen stellen nicht nur Programmierer, sondern auch Programe vor Herausforderungen. Merksatz Je mehr Symbole und Schlüsselwörter eine eindeutige Bedeutung haben, desto kleiner sind die Lernkurve des Programmierers und der Umfang eines Parsers. 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 19

Compilerunterstützung 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 20

NullPointerException-Vermeidung NullPointerException-Vermeidung in Ceylon: null ist keine Instanz von Object, sondern von Null Null ist nicht instanzierbar, sondern ein Enumerationstyp null ist die einzige Instanz von Null über Union-Types kann jeder beliebige Typ optional werden Beispiel: String Null (in Kurzschreibweise: String?) 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 21

NullPointerException-Vermeidung NullPointerException-Vermeidung in Ceylon: null ist keine Instanz von Object, sondern von Null Null ist nicht instanzierbar, sondern ein Enumerationstyp null ist die einzige Instanz von Null über Union-Types kann jeder beliebige Typ optional werden Beispiel: String Null (in Kurzschreibweise: String?) Das Typsystem wird zur Vermeidung von NPE ausgenutzt 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 21

Vollständige Pfadabdeckung Beispiel (Ceylon): switch (cmpresult) case (smaller) { //... } case (equal) { //... } case (larger) { //... } 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 22

Compilerunterstützung Feststellung Strengere Regeln ermöglichen es dem Compiler bei der Vermeidung von Fehlern zu unterstützen, aber erzwingen auch einen bestimmten Stil. 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 23

Compilerunterstützung Feststellung Strengere Regeln ermöglichen es dem Compiler bei der Vermeidung von Fehlern zu unterstützen, aber erzwingen auch einen bestimmten Stil. Merksatz Die möglichen Kosten von Fehleranalyse und -behebung sind gegen die möglichen Kosten eines zu restriktiven Compilers abzuwägen. 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 23

Fazit Soweit zur Theorie! Praxis? 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 24

Fazit Soweit zur Theorie! Praxis selbst! 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 24

Fazit Soweit zur Theorie! Praxis selbst! Hinweis: strategische Schokoladenreserven bereithalten. 11. Dezember 2014 Mike Becker Pragmatik von Programmiersprachen Seite 24