Programmieren IV (Entwurf) SS 04
Total Page:16
File Type:pdf, Size:1020Kb
Programmieren IV (Entwurf) SS 04 Sven Eric Panitz TFH Berlin Version 24. Juni 2004 Die vorliegende Fassung des Skriptes ist ein roher Entwurf fur¨ die Vorlesung des kommenden Semesters und wird im Laufe der Vorlesung erst seine endgultige¨ Form finden. Kapitel k¨onnen dabei umgestellt, vollkommen revidiert werden oder gar ganz wegfallen. Dieses Skript entsteht begleitend zur Vorlesung des SS 04 vollkommen neu. Es stellt somit eine Mitschrift der Vorlesung dar. Naturgem¨aß ist es in Aufbau und Qualit¨at nicht mit einem Buch vergleichbar. Fluchtigkeits-¨ und Tippfehler wer- den sich im Eifer des Gefechtes nicht vermeiden lassen und wahrscheinlich in nicht geringem Maße auftreten. Ich bin naturlich¨ stets dankbar, wenn ich auf solche aufmerksam gemacht werde und diese korrigieren kann. Die Vorlesung setzt die Kerninhalte der Vorg¨angervorlesungen [Pan03a], [Pan03b] und [Pan03c] voraus. Der Quelltext dieses Skripts ist eine XML-Datei, die durch eine XQuery in ei- ne LATEX-Datei transformiert und fur¨ die schließlich eine pdf-Datei und eine postscript-Datei erzeugt wird. Der XML-Quelltext verweist direkt auf ein XSLT- Skript, das eine HTML-Darstellung erzeugt, so daß ein entsprechender Browser mit XSLT-Prozessor die XML-Datei direkt als HTML-Seite darstellen kann. Bei- spielprogramme werden direkt aus dem Skriptquelltext extrahiert und sind auf der Webseite herunterzuladen. Inhaltsverzeichnis 1 Erweiterungen in Java 1.5 1-1 1.1 Einfuhrung¨ ..................................... 1-1 1.2 Generische Typen . 1-2 1.2.1 Generische Klassen . 1-2 1.2.2 Generische Schnittstellen . 1-8 1.2.3 Kovarianz gegen Kontravarianz . 1-10 1.2.4 Sammlungsklassen . 1-12 1.2.5 Generische Methoden . 1-13 1.3 Iteration . 1-13 1.3.1 Die neuen Schnittstellen Iterable . 1-15 1.4 Automatisches Boxen . 1-17 1.5 Aufz¨ahlungstypen . 1-18 1.6 Statische Imports . 1-21 1.7 Variable Parameteranzahl . 1-22 1.8 Ein paar Beispielklassen . 1-23 1.9 Aufgaben . 1-26 2 Algebraische Typen und Besucher 2-1 2.1 Einfuhrung¨ ..................................... 2-1 2.1.1 Funktionale Programmierung . 2-2 2.1.2 Java . 2-4 2.2 Algebraische Typen . 2-5 2.2.1 Algebraische Typen in funktionalen Sprachen . 2-5 2.2.2 Implementierungen in Java . 2-6 2.3 Visitor . 2-10 2.3.1 Besucherobjekte als Funktionen uber¨ algebraische Typen . 2-10 2.3.2 Besucherobjekte und Sp¨ate-Bindung . 2-12 1 INHALTSVERZEICHNIS 2 2.4 Generierung von Klassen fur¨ algebraische Typen . 2-15 2.4.1 Eine Syntax fur¨ algebraische Typen . 2-16 2.4.2 Java Implementierung . 2-21 2.5 Beispiel: eine kleine imperative Programmiersprache . 2-32 2.5.1 Algebraischer Typ fur¨ Klip . 2-32 2.5.2 Besucher zur textuellen Darstellung . 2-32 2.5.3 Besucher zur Interpretation eines Klip Programms . 2-33 2.5.4 javacc Parser fur¨ Klip . 2-34 2.6 Javacc Definition fur¨ ATD Parser . 2-39 2.7 Aufgaben . 2-42 3 XML 3-1 3.1 XML-Format . 3-2 3.1.1 Elemente . 3-2 3.1.2 Attribute . 3-4 3.1.3 Kommentare . 3-5 3.1.4 Character Entities . 3-5 3.1.5 CDATA-Sections . 3-6 3.1.6 Processing Instructions . 3-6 3.1.7 Namensr¨aume . 3-6 3.2 Codierungen . 3-7 3.3 Dokumente als B¨aume in Java . 3-8 3.3.1 Ein algebraischer Typ fur¨ XML . 3-9 3.3.2 APIs furXML¨ ............................... 3-14 3.4 Transformationen und Queries . 3-27 3.4.1 XPath: Pfade in Dokumenten . 3-27 3.4.2 XSLT: Transformationen in Dokumenten . 3-52 3.4.3 XQuery: Anfragen . 3-57 3.5 Dokumenttypen . 3-59 3.5.1 DTD . 3-59 3.5.2 Schema . 3-61 3.5.3 Gel¨aufige Dokumenttypen . 3-61 3.6 Aufgaben . 3-61 INHALTSVERZEICHNIS 3 4 Parsing XML Document Type Structures 4-1 4.1 Introduction . 4-1 4.1.1 Functional Programming . 4-1 4.1.2 XML . 4-3 4.1.3 Java . 4-5 4.2 Tree Parser . 4-5 4.2.1 Parser Type . 4-5 4.2.2 Combinators . 4-6 4.2.3 Atomic Parsers . 4-12 4.2.4 Building parsers . 4-14 4.3 Building a Tree Structure . 4-18 4.3.1 Java types for DTDs . 4-18 4.3.2 An algebraic type for DTDs . 4-18 4.3.3 Generation of tree classes . 4-21 4.3.4 Generation of parser code . 4-23 4.3.5 Flattening of a DTD definition . 4-27 4.3.6 Main generation class . 4-31 4.3.7 Main generator class . 4-32 4.3.8 JaxB . 4-35 4.4 Conclusion . 4-36 4.5 Javacc input file for DTD parser . 4-36 5 Javas Trickkisten: Bibliotheken und Mechanismen 5-1 5.1 Webapplikationen mit Servlets . 5-1 5.1.1 Servlet Container . 5-1 5.1.2 Struktur einer Webapplikation . 5-1 5.1.3 Anwendungsdaten . 5-2 5.1.4 Anwendungslogik . 5-2 5.1.5 Servletkonfiguration . 5-5 5.1.6 Servletklassen . 5-7 5.1.7 Java Server Pages . 5-14 5.2 Reflektion . 5-15 5.2.1 Eigenschaften von Klassen erfragen . 5-15 5.2.2 Instanziieren dynamisch berechneter Klassen . 5-20 5.3 Klassen Laden . 22 5.4 RMI . 22 5.5 Persistenz . 22 INHALTSVERZEICHNIS 4 A Crempel A-1 A.1 Eingesetzte Werkzeuge . A-1 A.1.1 Java 1.5 . A-1 A.1.2 CVS . A-1 A.1.3 ANT . A-3 A.1.4 JavaCC . A-3 A.2 Crempel Architektur . A-3 A.2.1 Crempel Komponenten . A-4 B Grammatiken B-1 B.1 JavaCC Grammatik fur¨ einen rudiment¨aren XML Parser . B-1 B.2 Javacc Grammatik fur¨ abgekurzte¨ XPath Ausdrucke¨ . B-5 C Gesammelte Aufgaben C-1 Klassenverzeichnis . C-6 Einfuhrung¨ Ziel der Vorlesung Mit den Grundtechniken der Programmierung am Beispiel von Java wurde in der Vorg¨angervorlesungen vertraut gemacht. Im ersten Semester haben wir die Grundzuge¨ der Programmierung anhand von Java erlernt, im zweiten Semester den Umgang mit Javas Bi- bliotheken. Nach unserem Exkurs in die Welt von C++ im dritten Semester wenden wir uns jetzt wieder Java zu. Ziel ist es komplexe Anwendungsbeispiele zu entwerfen. Hierbei kummern¨ wir uns nicht um die softwaretechnische Modellierung einer solchen Anwendung, sondern werden algorithmische Tricks und Entwurfsmuster im Vordergrund stellen. Hierbei wird uns ab und an ein Blick uber¨ den Tellerrand zu anderen Programmiersprachen helfen. Als Beispielanwendungsfall wird im Zentrum die Programmierung von XML-Strukturen ste- hen, da an der baumartigen Struktur von XML sich viele allgemeine Konzepte der Informatik durchspielen lassen. 5 Kapitel 1 Erweiterungen in Java 1.5 1.1 Einfuhrung¨ Mit Java 1.5 werden einige neue Konzepte in Java eingefuhrt,¨ die viele Programmierer bisher schmerzlich vermisst haben. Obwohl die ursprunglichen¨ Designer uber¨.