Programmierkurs I (HTML, Java) Wintersemester 2004/05

Größe: px
Ab Seite anzeigen:

Download "Programmierkurs I (HTML, Java) Wintersemester 2004/05"

Transkript

1 Programmierkurs I (HTML, Java) Wintersemester 2004/05 Programmierkurs I (HTML, CSS, Java) - 1

2 Programmierkurs I 1. Programmierkurs I 1.1. (HTML, Java) Wintersemester 2004/05 Dr. Heinz Kredel Rechenzentrum Universität Mannheim 2 Stunden Vorlesung und 2 Stunden Übungen Zwischenfragen sind willkommen URL Universität Mannheim, Rechenzentrum, Last modified: Sun Oct 24 13:57:24 CEST 2004 Programmierkurs I (HTML, CSS, Java) - 2

3 Programmierkurs I Inhaltsverzeichnis 1. Programmierkurs I 2. Hypertext Markup Language (HTML) 3. Extensible Hypertext Markup Language (XHTML) 4. Cascading Style Sheets (CSS) 5. Cascading Style Sheets 2 (CSS2) 6. Java, Einleitung 7. Java, Sprache 8. Java, Klassen 9. Java, Vererbung 10. Java, Packages 11. Java, Ströme 12. Java, Utilities 13. Java, Generik 14. Java Tools 15. Extensible Markup Language (XML) 16. Java API for XML Processing (JAXP) 17. Literatur Programmierkurs I (HTML, CSS, Java) - 3

4 Einleitung 2. Einleitung Abgrenzung zur Vorlesung Praktische Informatik (PI) PI1: Konzepte und Methoden der Informatik PI1: Beispiele mit verschiedenen Programmiersprachen: Scheme, Java, C/C++ PK1/2: Erlernen von Programmiersprachen PK1/2: Beispiele aus der Informatik, Wirtschaftsinformatik und anderen Bereichen PK1: die Programmiersprache Java PK2: die Programmiersprachen C und Assembler 2.1. Warum Programmieren? Handwerk / Grundfertigkeit in der Informatik wichtig für das Verständnis von Design und Konzepten nicht nur 'rum klicken', sondern erschaffen der Anwendungen wichtig ist das 'learning by doing' weil es Spass macht 2.2. Lernziele Einführung in die Programmierung mit Java. Kennenlernen von HTML und Java. Verstehen und Anwenden von HTML und Java. Übungen mit ausgewählter Software 2.3. Inhalt Einführung in die Entwicklung von Web-Seiten HTML, XHTML, CSS Einführung in die Programmierung mit Java Sprachkonstrukte, Klassen, Vererbung, Packages, Ströme und Dateien, nützliche Hilfsklassen (Utilities), Generische Datentypen 2.4. Organisatorisches Montags 2 Stunden Vorlesung bei Bedarf Montags 2 Stunden Übungen bei Dirk Stegemann in der Woche 2 Stunden Übungen bei zwei Tutoren Programmierkurs I (HTML, CSS, Java) - 4

5 Einleitung ein Übungsblatt mit Aufgaben pro Woche am Ende des Semesters müssen Sie eine Klausur schreiben und bestehen es gibt Web-Seiten zur Vorlesung und zur Übung Literatur heute im Anschluss Einführung in den Übungsbetrieb und die Benutzung des PC-Pools Universität Mannheim, Rechenzentrum, Last modified: Sun Oct 17 14:22:56 CEST 2004 Programmierkurs I (HTML, CSS, Java) - 5

6 Hypertext Markup Language (HTML) 3. Hypertext Markup Language (HTML) Einordnung Elementares HTML Volles HTML Ausblick Programmierkurs I (HTML, CSS, Java) - 6

7 Hypertext Markup Language (HTML) 3.1. Einordnung Standard Generalized Markup Language (SGML) Extended Markup Language (XML) WYSIWYG im Gegensatz zu Markup Orientierung am Bildschirm Problem: Drucken Entwicklung erster Ansatz von Tim Berners-Lee, 1989 erster Browser, und Server 1990/91 HTML 1.0, erster Entwurf 1992 Web-Technologie Public Domain, 1993 HTML 2.0, 1995, November HTML 3.2, 1997 Januar HTML 4.0, 1997 Dezember HTML 4.01, 1999 Dezember XHTML 1.0, 2000 Januar XHTML Basic, 2000 Dezember XHTML Module based XHTML, 2001 Mai XHTML 2.0, Working Draft, 2003 Januar Web-Zutaten 1. Identifikation von Objekten: URL, URI 2. Übertragung von Objekten: Protokolle, z.b. HTTP 3. Hypertext: Darstellung und Navigation, z.b. HTML HTML-Konzeption 1. Dokumentstruktur durch Markup 2. Dokument-Darstellung, Präsentation durch Browser 3. Interaktion 3.2. Elementares HTML HTML 4.0 ist eine SGML Anwendung Festlegung in der Document Type Definition (DTD) Programmierkurs I (HTML, CSS, Java) - 7

8 Hypertext Markup Language (HTML) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" " > Syntax Zeichensatz: ISO/IEC 10646, Universal Character Set (UCS), Unicode 2.0 Elemente: <name> Inhalt </name> Markup oder Textauszeichnungen: Tags werden in spitze Klammern eingeschloßen: <tag> bei einigen Elementen ist das Ende-Tag optional manchmal auch das Start-Tag, z.b. BODY einige Elemente sind ohne Inhalt, d.h. leer für XML auch kombinierte Beginn-Ende-Tags: <tag/> Attribute: attname="wert" <tag att1="wert1" att2="wert2" > Groß-Klein-Schreibung wird ignoriert Kommentare: <!-- ignorierter Text --> spezielle Zeichen: < (<) > (>) ä (ä) & (&) å (å) Dokumentstruktur Grammatik von HTML Schachtelung der Elemente Festlegung in der Content-Model Spezifikation Beispiel in EBNF: HTML = HEAD BODY UL = (LI)+ in SGML: <!ELEMENT HTML O O (HEAD BODY) > <!ELEMENT UL - - (LI)+ > <!ELEMENT IMG - O EMPTY > in XML: <!ELEMENT html (head body) > <!ELEMENT ul (li)+ > <!ELEMENT img EMPTY > Darstellung durch Browser Mosaic (April 1993), Netscape, MS Internet Explorer, W3C Amaya, Lynx, html2ps, Mobil-Telefone, Palm-Tops, Sprachausgabe, Blindenschrift unbekannte Elemente werden ignoriert nur der Inhaltsteil wird dargestellt unbekannte Attribute werden ignoriert bei unbekannten Attribut-Werten wird der Default genommen Uniform Resource Locator (URL) dienst://hostname/pfad/object.ext Programmierkurs I (HTML, CSS, Java) - 8

9 Hypertext Markup Language (HTML) Dienst-Selektor Hostname Pfad-Selektor Objekt im Dokument: doc.html#part_2 Relative URIs:../images/bild.gif oder adoc.html Elemente Element Bedeutung Content-Model html SGML Anwendung head body head Kopfinformationen title (script style meta link)+ body eigentlicher HTML Teil alles ohne Kopfelemente title Titel, Inhaltsbezeichnung Text h1,..., h6 Überschriften Text a Verweis, Link, Anker Linktext etc. p Paragraph alles ohne Block-Elemente ul, ol Listen: unnumeriert, numeriert li+ dl Definitionslisten (dt dd)+ li, dt, dd Listenelement, Definitionsterm, Definition alles mit Ausnahmen img Bild im Text empty pre vorformatierter Text Text br Zeilenumbruch EMPTY em, strong, code Betonung, Hervorhebung, Auszeichnung Text blockquote, q Einrückung Text unvollständige Auswahl Blanks und Zeilenumbrüche im Dokument werden (mit Ausnahmen) ignoriert Attribute Attribut Bedeutung Werte href Link URI in a Text name Ziel von einem Link in a Text src Bild URI in img Text alt Alternative Bezeichnung in img Text align Textausrichtung in p (left center right) value Nummer in ol li Zahl type Nummerstil in ul li (disk square circle) title zusätzliche Beschreibung Text bgcolor Hintergrundfarbe black, silver, gray, white, maroon, red, purple, fuchsia, green, lime, olive, Programmierkurs I (HTML, CSS, Java) - 9

10 Hypertext Markup Language (HTML) yellow, navy, blue, teal, aqua oder #rrggbb Beispiele 3.3. Volles HTML Erweiterungen Formulare Tabellen Frames Style Sheets, Darstellungsvorlagen Scripte, Eingebettete Programme Eingebettete Objekte, Applets Internationalization, I18N Unicode, Textrichtung Elemente Element Bedeutung Content-Model form Formulare (input select other)+ input Eingabefeld im Formular EMPTY select Auswahl-Menue (optgroup option)+ option Auswahl-Option Text der Option textarea Eingabebereich im Formular Anfangstext table 2-D Tabellen caption, tr+ tr Tabellen Zeile (th td)+ th, td Tabellen Element alles mit Ausnahmen map Bilder mit Links verknüpfen area+ other area Beschreibung der Bildkoordinaten EMPTY html SGML Anwendung head frameset frameset Aufteilung der Anzeigefläche frame+ noframes frame separate Anzeigefläche EMPTY noframes alternative ohne Frames alles link Verweise, mit Rollenangaben, z.b. auf Style Sheet EMPTY style Stilangabe Stil-Script script JavaScript Programm im Text Programm Programmierkurs I (HTML, CSS, Java) - 10

11 Hypertext Markup Language (HTML) applet Java Programm wie Bild param+ param Parameter für Java Programm EMPTY object Programm oder Bild param+ meta Information über die Seite EMPTY div Dokument-Abschnitt, Block alles span Text-Abschnitt, Inline alles ohne Block-El. del, ins Text Revisionen alles mit Ausnahmen Attribute Attribut Bedeutung Werte action URL eines (CGI-)Programms in form Zeichenkette method HTTP Methode in form (get post) type Typ eines Eingabefelds in input (text password radio checkbox submit reset file hidden image button) selected, value Option mit Wert in option selected, Wert border Rahmentyp ( solid none dashed n) height, width Grösse Pixel, Prozent, Meter cellpadding, cellspacing Abstand zwischen Text und Rand Abstand zwischen Zellen Pixel, Prozent, Meter usemap Verweis auf zugeordnete map in img Bezeichner shape Typ der area circle rect poly coords Koordinaten der area Liste rows, cols Spezifikation der Zeilen, Spalten in frameset Pixel, Prozent, Meter name Name in frame Bezeichner frameborder Rahmentyp eines Frames ( solid none dashed n) target Zielframe zur Anzeige der Seite in a Bezeichner rel, rev z.b. Stilverweis in link stylesheet next prev style Stilinformation fast überall CSS Text class CSS-Klassen-Identifikator, fast überall Bezeichner id Identifikator wie name, fast überall Bezeichner language Programmiersprache in script JavaScript VBScript other code, classid auszuführender Programmcode in applet, object Bezeichner Programmierkurs I (HTML, CSS, Java) - 11

12 Hypertext Markup Language (HTML) codetype Typ des Programmcodes in applet, object Bezeichner name Metainfo. Bezeichnung, in meta Text http-equiv Metainfo. HTTProtokol, in meta Text content Metainfo. Inhalt, in meta Text lang Sprache in einem Element z.b. en, de dir Textschreibrichtung z.b. ltr, rtl Script-Ereignisse Ereignis Bedeutung onload, onunload Aufruf beim Laden onchange Aufruf bei änderungen onclick Aufruf beim Anklicken onmouseover Maus über dem Element onmouseout Maus verläßt Element onselect bei Auswahl onsubmit beim Versenden Beispiele 3.4. Allgemeines zum Web-Design Web-Seiten bieten neue Möglichkeiten aber auch Unterschiede z.b. zur Buchproduktion. Welche Zielgruppe? auf jeder Seite: Namen, , evtl. Copyright, Datum. Konzept für dauerhafte URLs. klares, durchsichtiges Hypertext-Konzept, Navigation. prüfen Sie alle Links. Navigationshilfen: Home, Site-Map, Stichworte, Suchmöglichkeiten. gute, einheitliche Gestaltung, klare Farbkonzepte, Farbkontraste (==> CSS). benutzen Sie Stilvorlagen (CSS). achte auf Ladezeiten, 30-40KByte ok. vermeide zu grosse Graphiken, insbesondere auf der Start-Seite. verwende explizite Grössenangaben bei Tabellen und Graphiken (width, height). verwende Thumbnails (daumengrosse Mini-Graphiken) mit Link auf die "richtige" Graphik. beachte auch nicht-visuelle Browser: Lynx, Organizer (alt, summary). beachte geringere Bildschirmauflösung (640x480, 800x600). Testen Sie mit unterschiedlichen Browsern. Testen Sie mit unterschiedlichen Bildschirmauflösungen. Lassen Sie Ihre Seiten testen. Halten Sie die Seiten aktuell. Programmierkurs I (HTML, CSS, Java) - 12

13 Hypertext Markup Language (HTML) Denken Sie ans Drucken Ausblick Extensible HTML (XHTML) HTML-Editoren und Tools Cascading Style Sheets (CSS) JavaScript Document Object Model (DOM) Universität Mannheim, Rechenzentrum, Last modified: Wed May 26 23:42:49 CEST 2004 Programmierkurs I (HTML, CSS, Java) - 13

14 Extensible Hypertext Markup Language (XHTML) 4. Extensible Hypertext Markup Language (XHTML) HTML als XML Anwendung HTML Tidy XHTML Basic 1.0 XHTML HTML als XML Anwendung HTML (3.2, 4.0) ist eine SGML Anwendung XML ist der Standart für erweiterbares Markup HTML muss in XML reformuliert werden Version 1.0, W3C Proposed Recommendation August 1999 HTML 4.01 enthält die notwendigen Anpassungen im Januar 2000 als W3C Recommendation verabschiedet Warum XHTML? XHTML Dokumente sind XML konform. Sie können mit XML Tools bearbeitet werden. XHTML Dokumente können als text/html von HTML 4.0 Browsern verwendet werden. XHTML Dokumente können aber auch als text/xml oder als application/xml (mit geeigneten Style Sheets) verwendet werden. XHTML Dokumente können mit DOM bzw. XML-DOM verwendet werden, d.h. mit (Java)Scripts und Applets. XHTML Dokumente verschiedener Autoren (Systeme, Umgebungen) werden besser zusammenpassen als HTML Dokumente. Da XHTML eine XML Anwendung ist, können neue Markup-Elemente einfach hinzugefügt werden. XHTML ist nicht mehr nur auf Browser beschränkt. Viele andere User-Agents (Handys, Sprachausgabe, etc.) werden damit umgehen können (best effort content transformation). Bedingungen für XHTML konforme Dokumente Sie müssen entsprechend einer XHTML DTD gültige (valid) XML Dokumente sein. Das Root-Element muss <html> sein. Das Root-Element muss einen gültigen XHTML Namensraum bestimmen, der ein gültiger XML Namensraum sein muss. Es muss eine XML DOCTYPE Deklaration vor dem Root-Element verhanden sein. Die Internet Medien Typen (Mime Types) dürfen text/html, text/xml oder application/xml sein. Beispiel Programmierkurs I (HTML, CSS, Java) - 14

15 Extensible Hypertext Markup Language (XHTML) <?xml version="1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " <html xmlns=" <head> <title>browser Titel</title> </head> <body> <h1>dokument Titel</h1> <p> Ein Paragraph <br /> auf zwei Zeilen. </p> <math xmlns=" Text in MathML... </math> </body> </html> Verhalten von XML User Agents (Browser) XML-UAs müssen well-formedness feststellen. Validierende UAs müssen das Dokument gegen alle DTDs validieren. Bei unbekannten Elementen muss der Inhalt dargestellt werden (wie bei HTML, nicht bei XML). Unbekannte Attribute müssen ignoriert werden (wie bei HTML, nicht bei XML). Bei unbekannten Attribut-Werten muss der Defaultwert verwendet werden (wie bei HTML, nicht bei XML). Unbekannte Entities müssen als Zeichenkette (&xyz;) dargestellt werden (wie bei HTML, nicht bei XML). Unbekannte Zeichen (Characters) müssen so dargestellt werden, dass klar ist das sie nicht bekannt, aber erkennbar sind (nicht bei HTML, nicht bei XML). Whitespace direkt nach einem Start-Tag und unmittelbar vor einem End-Tag muss ignoriert werden (falls nicht per XML etwas anderes bestimmt wurde). Unterschiede zu HTML 4.0 XHTML Dokumente müssen well-formed sein, d.h. gültige Schachtelungsstruktur haben. <p>paragraph <em>hervorhebung</em></p> statt <p>paragraph <em>hervorhebung</p></em> Element- und Attribut-Namen müssen in Kleinbuchstaben geschrieben sein. <li> statt <LI> End-Tags müssen immer vorhanden sein (falls nicht per XML das Element als EMPTY deklariert wurde). <p>paragraph</p> <p> weiterer Paragraph</p> statt <p>paragraph <p> weiterer Paragraph Bei leeren Elementen ohne End-Tag muss das Start-Tag mit "/>" beendet werden. <br /> Attributwerte müssen in Anführungszeichen eingeschlossen werden. Auch bei Zahlenwerten. <img... width="300" /> statt <img... width=300 /> Programmierkurs I (HTML, CSS, Java) - 15

16 Extensible Hypertext Markup Language (XHTML) Attributwerte müssen immer angegeben werden. <dl compact="compact" > statt <dl compact > In Attributwerten wird Whitespace auf jeweils ein Blank verkürzt, bzw. am Beginn und Ende von Zeichenketten abgeschnitten. alt=" Beschreibung eines Bildes " wird zu alt="beschreibung eines Bildes" Script-Texte müssen als CDATA markiert werden, falls sie < oder & enthalten. <script> <![CDATA[... Inhalt des Scripts ]]> </script> SGML Ausschluss-Definitionen sind nur informell festgelegt. z.b. das a-element darf kein weiteres a-element enthalten. Das name Attribut von HTML muss als XML id Attribut angegeben werden. <a name="section1" id="section1"... > Diese Datei in XHTML und als XML. Tips und Hinweise Processing Instructions und Zeichensätze werden nicht von allen UAs erkannt <?... >, UTF-8, UTF-16. Benutze Blanks vor /> Benutze <br /> statt <br></br> Benutze <p></p> statt <p />. Benutze externe Scripte, falls "<", "&" oder "]]>" vorkommen. Verwende keine Zeilenumbrüche und mehrfache Leerzeichen in Attribut werten. Benutze lang und xml:lang gleichzeitig als Attribute. Benutze name="xyz" und id="xyz" gleichzeitig als Attribute für die Bezeichnung von Elementen. Benutze <?xml... encoding="iso "> und <meta http-equiv="content-type"... charset="iso "> gleichzeitig für die Bezeichnung von Zeichensätzen. Einige UAs haben Probleme mit Booleschen Attributen. Problem bei DOMs: HTML 4.0 DOM benutzt Grossbuchstaben, XHTML 1.0 DOM benutzt Kleinbuchstaben, XML 1.0 DOM benutzt Gross-/Klein-Buchstaben. Problem mit "&" in Attributwerten, z.b. href=".../script.pl?n1=w1&n2=w2" Probleme mit Style Sheets (CSS): Gross-/Klein-Schreibung von Elementen. Ausblick Modularisierung von XHTML, d.h. zuschneiden auf bestimmte UAs Programmierkurs I (HTML, CSS, Java) - 16

17 Extensible Hypertext Markup Language (XHTML) Formalisieren der Bildung von Teilmengen und Erweiterungen. Dokument Profile Stand im Mai 2003 XHTML Basic, 2000 Dezember XHTML Module based XHTML, 2001 Mai XHTML 2.0, Working Draft, 2003 Januar 4.2. HTML Tidy Tool zur Fehlersuche in HTML bietet auch Fehlerkorrektur kann Müll von HTML-Editoren entfernen kann HTML nach XHTML konvertieren offizielles Tool des W3C erkennt, prüft und korrigiert Dokumenttyp für fast alle Plattformen verfügbar Unterstützung von XML, ASP, PHP Beispiele für die Arbeitsweise von HTML Tidy Beispiel für schlechtes HTML bad.html und das Ergebnis nach Bearbeitung mit HTML Tidy good.html. Fehlermeldungen aus dem Beispiel > tidy Tidy line line line line line line line line line line line line line line line exam/bad.html >exam/good.html (vers 19th October 1999) Parsing "exam/bad.html" 3 column 1 - Warning: inserting missing 'title' element 5 column 2 - Warning: replacing unexpected <h2> by </h1> 5 column 37 - Warning: discarding unexpected </h3> 7 column 42 - Warning: replacing unexpected </i> by </b> 8 column 15 - Warning: replacing unexpected </b> by </i> 10 column 45 - Warning: missing </i> before </h2> 12 column 4 - Warning: inserting implicit <i> 14 column 2 - Warning: missing </i> before <p> 14 column 4 - Warning: inserting implicit <i> 14 column 43 - Warning: discarding unexpected <a> 16 column 2 - Warning: missing </a> before <li> 16 column 2 - Warning: missing </i> before <li> 16 column 2 - Warning: inserting implicit <ul> 24 column 1 - Warning: unknown attribute "tidy" 30 column 1 - Warning: <img> lacks "alt" attribute "exam/bad.html" appears to be HTML proprietary 15 warnings/errors were found! Programmierkurs I (HTML, CSS, Java) - 17

18 Extensible Hypertext Markup Language (XHTML) The alt attribute should be used to give a short description of an image; longer descriptions should be given with the longdesc attribute which takes a URL linked to the description. These measures are needed for people using non-graphical browsers. For further advice on how to make your pages accessible see " You may also want to try " which is a free Web-based service for checking URLs for accessibility. HTML & CSS specifications are available from To learn more about Tidy see Please send bug reports to Dave Raggett care of <html-tidy@w3.org> Lobby your company to join W3C, see Aufruf und Verwendung von HTML Tidy > tidy [[options] files]* tidy: file1 file2... Utility to clean up & pretty print html files see options for tidy released on 19th October config <file> set options from config file -indent or -i indent element content -omit or -o omit optional endtags -wrap 72 wrap text at column 72 (default is 68) -upper or -u force tags to upper case (default is lower) -clean or -c replace font, nobr & center tags by CSS -raw leave chars > 128 unchanged upon output -ascii use ASCII for output, Latin-1 for input -latin1 use Latin-1 for both input and output -iso2022 use ISO2022 for both input and output -utf8 use UTF-8 for both input and output -mac use the Apple MacRoman character set -numeric or -n output numeric rather than named entities -modify or -m to modify original files -errors or -e only show errors -quiet or -q suppress nonessential output -f <file> write errors to <file> -xml use this when input is wellformed xml -asxml to convert html to wellformed xml -slides to burst into slides on h2 elements -help or -h list command line options Input/Output default to stdin/stdout respectively Single letter options apart from -f may be combined as in: tidy -f errs.txt -imu foo.html For further info on HTML see Einige wichtige Optionen markup: yes, no Erzeugen des verbesserten Markups. wrap: number Zeilenumbruch bei angegebener Spalte. 0 = abgeschaltet. input-xml: yes, no Einlesen als XML. output-xml: yes, no Ausgabe von XML. output-xhtml: yes, no Ausgabe von XHTML. doctype: omit, auto, strict, loose or <fpi> Programmierkurs I (HTML, CSS, Java) - 18

19 Extensible Hypertext Markup Language (XHTML) Festlegen des DOCTYPE in der Ausgabe. char-encoding: raw, ascii, latin1, utf8 or iso2022 Festlegen des Zeichensatzes in der Ausgabe. fix-backslash: yes, no Wandelt "\" in URLs zu "/". word-2000: yes, no Versucht Müll, der von Word 2000 produziert wird zu entfernen. clean: yes, no Versucht überflüssigen Präsentations-Markup durch Stilregeln (CSS) oder Struktur-Markup zu ersetzen. logical-emphasis: yes, no Ersetzt i durch em, b durch strong, impliziert clean. enclose-text: yes, no Fasst Text auf Body-Level in Paragraphen. Wichtig für funktionierende Stilvorlagen. split: yes, no Teilt die Datei an h2 Elementen in einzelne "Folien". new-empty-tags: tag1, tag2, tag3 new-inline-tags: tag1, tag2, tag3 new-blocklevel-tags: tag1, tag2, tag3 new-pre-tags: tag1, tag2, tag3 Definition von neuen Tags der entsprechenden Art. Beispiel für ein Config-File /* HTML Tidy configuration file */ markup: yes wrap: 0 doctype: strict break-before-br: yes logical-emphasis: yes enclose-text: yes /* eof */ Was in Arbeit ist Validierung aller Attribute Verbesserter XML Support Verbesserung der Zeichensatz Unterstüzung Verbesserung der ASP und PHP Unterstüzung Verbesserte Folien Erzeugung 4.3. XHTML Basic 1.0 Reduktion von XHTML 1.0 auf die Elemente und Attribute, die auch auf kleinen Geräten angezeigt werden können. Zum Beispiel Handys Fernseher PDAs Verkaufsautomaten Pager Programmierkurs I (HTML, CSS, Java) - 19

20 Extensible Hypertext Markup Language (XHTML) Fahrzeug Navigationssysteme Spielekonsolen Lesegeräte für digitale Bücher Uhren mit CPUs Die gemeinsame Fähigkeiten dieser einfachen UAs ermöglichen folgende XHTML Elemente. einfacher Text (mit Überschriften, Paragraphen und Listen) Hyperlinks (a und link) einfache Formulare einfache Tabellen Bilder Meta-Information Elemente und Attribute, die nur auf aktuellen grafischen (PC-) Systemen funktionieren sind weggelassen. keine Stilvorlagen (CSS) keine Scripte (JavaScript) und zugehörige Attribute nur einfache Fonts (Schreibmaschinenschriften) kein File-Upload und Bilder in Formularen keine geschachtelten Tabellen keine Frames Der Document Type ist <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" " Definierte Module Structure Module* body, head, html, title Text Module* abbr, acronym, address, blockquote, br, cite, code, dfn, div, em, h1, h2, h3, h4, h5, h6, kbd, p, pre, q, samp, span, strong, var Hypertext Module* a List Module* dl, dt, dd, ol, ul, li Basic Forms Module form, input, label, select, option, textarea Basic Tables Module caption, table, td, th, tr Image Module img Object Module object, param Metainformation Module meta Link Module Programmierkurs I (HTML, CSS, Java) - 20

21 Extensible Hypertext Markup Language (XHTML) link Base Module base (*) = diese Module müssen bei XHTML Basic 1.0 mindestens unterstützt werden. XHTML Basic 1.0 konformes Beispiel 4.4. XHTML Modul basiertes XHTML Neuordnung von striktem XHTML 1.0 mit Hilfe von Modulen. Der Dokumenttyp ist <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" " Definierte Module Structure Module* body, head, html, title Text Module* abbr, acronym, address, blockquote, br, cite, code, dfn, div, em, h1, h2, h3, h4, h5, h6, kbd, p, pre, q, samp, span, strong, var Hypertext Module* a List Module* dl, dt, dd, ol, ul, li Object Module object, param Presentation Module b, big, hr, i, small, sub, sup, tt Edit Module del, ins Bidirectional Text Module bdo Forms Module button, fieldset, form, input, label, legend, select, optgroup, option, textarea Table Module caption, col, colgroup, table, tbody, td, tfoot, th, thead, tr Image Module img Client-side Image Map Module area, map Server-side Image Map Module Attribut ismap von img Intrinsic Events Module Event Attribute Metainformation Module meta Programmierkurs I (HTML, CSS, Java) - 21

22 Extensible Hypertext Markup Language (XHTML) Scripting Module noscript, script Stylesheet Module style element Style Attribute Module Deprecated style attribute Link Module link Base Module base Ruby Annotation Module ruby, rbc, rtc, rb, rt, rp Weitere Änderungen gegenüber XHTML 1.0 Strict sind: lang wird ersetzt durch xml:lang und name wird ersetzt durch id. XHTML 1.1 konforme Beispiele: basic, alles. Universität Mannheim, Rechenzentrum, Last modified: Sat May 22 12:35:56 CEST 2004 Programmierkurs I (HTML, CSS, Java) - 22

23 Cascading Style Sheets (CSS) 5. Cascading Style Sheets (CSS) Einordnung Grundkonzepte von CSS Layout mit CSS1 Beispiele und Hinweise 5.1. Einordnung Layouts für Web-Publishing Trennung von Struktur und Präsentation wird möglich CSS1, CSS2 Cascading Style Sheets, Level 1 & Level 2 zu HTML DSSSL Document Style Semantics and Specification Language zu SGML XSL Extensible Style Language zu XML Stand der Entwicklung: CSS1: W3C Recommendation, Dezember 1996 CSS2: W3C Recommendation, Mai 1998 CSS3: W3C Proposed Recommendation, 1999 Browser wie die von Netscape oder Microsoft implementieren nur ca. 30% bis 80% der Spezifikation korrekt aber alle Hersteller haben sich zur Unterstützung von CSS1 verpflichtet Programmierkurs I (HTML, CSS, Java) - 23

24 Cascading Style Sheets (CSS) 5.2. Grundkonzepte von CSS CSS Regeln: element { property: value body { background-color: white Selektoren und Deklarationen Eigenschaften (properties) und Werte Regeln in eigener Datei oder in HTML eingebettet Gruppierung: h1, h2, h3 { font-family: helvetica h4 { color: red; font-size: 8pt; Kontext: h1 { color: red Programmierkurs I (HTML, CSS, Java) - 24

25 Cascading Style Sheets (CSS) h1 em { color: purple h1 em strong { color: fuchsia Vererbung: body { font-family: helvetica h1 { color: red; font-size: 14pt; z.b. Schriftfamilie wird auf enthaltene Elemente vererbt Cascadierung: em { font-style: italic p em { font-weight: bolder strong em { font-weight: bold h1 em { font-style: normal CSS ist "Fehlertolerant" wie HTML Gross-/Kleinschreibung wird ignoriert Elemente für die kein Stil definiert wird, werden mit dem Browser Default-Stil dargestellt. Verknüpfung mit HTML im link Element: <link rel="stylesheet" type="text/css" href=" im style Element: <style type="text/css"> h3 { color: lime </style> <style url( h1 { color: lime </style> als Attribut: <p style="color: red" > roter Text </p> dies sollte man nicht machen Element-Typen Block-Elemente blockquote, br, dd, dl, div, dt, hi, hr, html, li, object, ol, p, pre, ul Inline-Elemente a, em, i, img, span, strong, tt Unsichtbare Elemente Programmierkurs I (HTML, CSS, Java) - 25

26 Cascading Style Sheets (CSS) link, meta, style, title Auswahl mit Bezeichnern class, mehrfachverwendbare Bezeichner: h1.slide { color: lime p.slide { color: green.buch1 { color: yellow; background-color: black <h1 class="slide">blabla</h1> <h1 class="buch1">blublu</h1> id, eindeutige Bezeichner: #sp3 { color: aqua <h1 id="sp3">blabla</h1> Pseudo-Klassen: a:link a:visited a:active a:hover { { { { color: color: color: color: red /* unvisited */ blue red purple /* mouseover */ Pseudo-Elemente: p:first-line { color: fuchsia p:first-letter { color: red; background-color: lime Sehr wichtige Definition: h1.slide { color: fuchsia!important Algorithmus der Cascadierung Es wird die anzuwendende Element-Eigenschaft Kombination gesucht: 1. Element entsprechend dem Selektor oder Vererbung 2. entsprechend explizitem Gewicht:!important geht vor 3. entsprechend dem Ursprung: Autor vor Benutzer vor Browser 4. entsprechend dem Detail-Level (specificity): umgekehrt lexikographisch: (IDs, CLASSes, TAGnumber) li ul li ul ol li li.rum ul li.rum ul.uni li.rum #hpc { { { { { { { prop: prop: prop: prop: prop: prop: prop: > --> --> --> --> --> --> (0,0,1) (0,0,2) (0,0,3) (0,1,1) (0,1,2) (0,2,2) (1,0,0) <li id="hpc" >.7. gewinnt </li> <li class="rum">.4.,.5. oder.6. gewinnt </li> <li >.1.,.2. oder.3. gewinnt </li> 5. entsprechend der Reihenfolge Beispiel: Header von HTML 2.0 in CSS1 Programmierkurs I (HTML, CSS, Java) - 26

27 Cascading Style Sheets (CSS) h1, h2, h3, h4 { margin-top: 1em; margin-bottom: 1em h5, h6 { margin-top: 1em h1 { text-align: center h1, h2, h4, h6 { font-weight: bold h3, h5 { font-style: italic h1 { font-size: xx-large h2 { font-size: x-large h3 { font-size: large Algorithmus der Cascadierung in CSS2 Die Punkte 2 und 3 werden zu einem zusammengefasst. 1. entsprechend dem Ursprung: Autor vor Benutzer vor Browser aber bei Angabe von!important gilt: Benutzer vor Autor vor Browser 5.3. Layout mit CSS1 Schriften Liegen in verschiedenen Schnitten (Gestalt mit bestimmten Eigenschaften) vor. Die Schrift-Eigenschaften sind nicht einfach berechenbar (vergleiche TeX und Metafont). Schrift-Familie: font-family Helvetica, Times, Western, Courier sans-serif, serif, fantasy, monospace Schrift-Stil: font-style normal, italic Schrift-Variante: font-variant normal, small-caps Schrift-Gewicht: font-weight normal, bold, lighter, 100,..., 900 (sehr fett) Schrift-Grösse: font-size absolut: xx-small, x-small, small, medium, large, x-large, xx-large 12pt, 18pt, 10px, 1.0cm, 1.0in relativ: 150%, 0.5em (Höhe M), 0.7ex (Höhe x) Schrift: font: style variant weight size/height family zusammenfassende Deklaration Beispiel p { font-family: monospace; font-size: x-large; So siehts aus. Beispiele font-family: Times, Helvetica, Verdana, Western, Courier, Zapf Chancery, Programmierkurs I (HTML, CSS, Java) - 27

28 Cascading Style Sheets (CSS) serif, sans-serif, monospace, cursive, fantasy. Beispiele font-style: normal, oblique, italic. Beispiele font-variant: normal, Small-Caps. Beispiele font-weight: normal, bold, bolder, lighter, 100,..., 400,..., 900. Beispiele font-size: xx-small, x-small, small, medium, large, x-large, xx-large, 2.0cm, 1.0in, 14pt, 34pt, 30px, 120%, 2.0em, 1.5ex. Farben RGB-Farbmodell: Rot, Grün, Blau bei Computer Bildschirmen CMYK-Farbmodell: Cyan, Magenta, Yellow, Black bei Farbdruckern Farben: black, silver, gray, white, maroon, red, purple, fuchsia, green, lime, olive, yellow, navy, blue, teal, aqua rgb(rot,grün,blau), Werte: 0 <= rot, grün, blau <= 255, oder 0% <= rot, grün, blau <= 100% #rgb, oder #rrggbb, Werte: 0 <= r, g, b <= F Schriftfarbe: color Hintergrundfarbe: background-color Hintergrundbild: background-image url( p { color: blue Schwarz, Hellgrau, Grau, Weiß, Dunkelrot, Rot, Purpur, helles Purpur, Grün, Hellgrün, dunkles Grün, Gelb, Dunkelblau, Blau, Blaugrün, helles Grünblau (Cyan). weitere Eigenschaften Box-Eigenschaften: Füllung (padding), Rahmen (border), Rand (margin) Box mit was drin Programmierkurs I (HTML, CSS, Java) - 28

29 Cascading Style Sheets (CSS) Quelle: W3C, CSS2 Spezifikation Box-Eigenschaften: margin, margin-top, margin-right, margin-bottom, margin-left padding, border, border-color, border-style width, height Text-Eigenschaften: word-spacing, white-space: pre, nowrap, text-decoration: underline, blink, text-transform: capitalize, uppercase, lowercase Text-Ausrichtung: vertical-align, text-align, text-indent, line-height Hintergrundbilder: background-image: url(...) background-repeat, background-attachment, background-position 5.4. Beispiele und Hinweise Programmierkurs I (HTML, CSS, Java) - 29

30 Cascading Style Sheets (CSS) Beispiele vom W3C HTML 2.0 in CSS1: /* Copyright (c) 1998 W3C */ BODY { margin: 1em; font-family: serif; line-height: 1.1; background: white; color: black; H1, H2, H3, H4, H5, H6, P, UL, OL, DIR, MENU, DIV, DT, DD, ADDRESS, BLOCKQUOTE, PRE, BR, HR { display: block B, STRONG, I, EM, CITE, VAR, TT, CODE, KBD, SAMP, IMG, SPAN { display: inline LI { display: list-item H1, H2, H3, H4 { margin-top: 1em; margin-bottom: 1em H5, H6 { margin-top: 1em H1 { text-align: center H1, H2, H4, H6 { font-weight: bold H3, H5 { font-style: italic H1 { font-size: xx-large H2 { font-size: x-large H3 { font-size: large B, STRONG { font-weight: bolder /*relative to the parent*/ I, CITE, EM, VAR, ADDRESS, BLOCKQUOTE { font-style: italic PRE, TT, CODE, KBD, SAMP { font-family: monospace PRE { white-space: pre ADDRESS { margin-left: 3em BLOCKQUOTE { margin-left: 3em; margin-right: 3em UL, DIR { list-style: disc OL { list-style: decimal MENU { margin: 0 LI { margin-left: 3em /* tight formatting */ DT { margin-bottom: 0 DD { margin-top: 0; margin-left: 3em HR { border-top: solid A:link { color: blue A:visited { color: red A:active { color: lime /* unvisited link */ /* visited links */ /* active links */ /* setting the anchor border around IMG elements requires contextual selectors */ A:link IMG { border: 2px solid blue A:visited IMG { border: 2px solid red A:active IMG { border: 2px solid lime Beispiele für Basis-HTML Beispiel mit einfachen Hervorhebungen. Stile aus der W3C Style Gallery Alle Stile in einem Frameset: Multi Programmierkurs I (HTML, CSS, Java) - 30

31 Cascading Style Sheets (CSS) "Choclate" Stil: HTML, CSS. "Midnight" Stil: HTML, CSS. "Modernist" Stil: HTML, CSS. "Oldstyle" Stil: HTML, CSS. "Steely" Stil: HTML, CSS. "Swiss" Stil: HTML, CSS. "Traditional" Stil: HTML, CSS. "Ultramarine" Stil: HTML, CSS. Beispiele aus dem Web W3C Style Gallery: Genug ist Genug: by Stephen Traub Microsoft CSS Gallery: Entrance Hinweise zur effektiven Nutzung von CSS Alles was mit CSS1 machbar ist, ist in HTML 4.0 "deprecated", d.h. nicht mehr empfohlen, d.h. zur Nicht-Benutzung empfohlen. Benutze nur wenige zentrale Stile, am Besten ein Stil für alle Web-Seiten. Benutze nur gelinkte Stildateien. Benutze nur in Ausnahmefällen zusätzliche spezielle Stildateien. Lasse den Stil von einem Experten designen. Propagiere den Stil, biete gute Dokumentation. Beachte, dass die Web-Seiten auch noch gut aussehen, falls der Browser (UA) kein CSS kann. Benutze nicht mehr als zwei Fonts. Benutze relative Fontgrössen (200%,50%). Lasse!important für den Leser. Beschränkungen von CSS1 Eine Übersicht über den Grad der Unterstützung von CSS(1) befand sich bis 2003 zum Beispiel bei unter dem Punkt 'Master list'. Die Liste ist heute (2004) nicht mehr notwendig und auch nicht mehr auffindbar. keine freie Positionierung keine volle Autoren-Kontrolle keine mehrfachen Spalten keine mehreren Schichten (Layers) Drucken verbesserungsfähig keine Sprachausgabe-Layouts Universität Mannheim, Rechenzentrum, Last modified: Thu May 20 12:28:29 CEST 2004 Programmierkurs I (HTML, CSS, Java) - 31

32 Cascading Style Sheets (CSS) Programmierkurs I (HTML, CSS, Java) - 32

33 Cascading Style Sheets 2 (CSS2) 6. Cascading Style Sheets 2 (CSS2) CSS Level 2 Ausblick 6.1. CSS Level 2 Positionierung Medientypen: Sprache, Drucker, Folien Schriftauswahl, Download Auto-Numerierung Tabellen Beispiel: Style Sheet für HTML 4.0 in CSS2 Positionierung Ab Netscape 4.x, IE 4.0, 5.0 implementiert CSS-P = CSS1 + Positionierung Box-Position: position: static, relative, absolute, fixed static = normaler Elementfluss relative = zunächst wie static, dann relativ zu dieser Position absolute = unabhängig vom Elementfluss an einer festen Stelle im Dokument fixed = unabhängig vom Elementfluss an einer festen Stelle im Fenster left: length top: length height: length width: length z-index: integer visibility: hidden, visible Animation mit HTML, CSS, JavaScript und DOM Dateien: HTML, CSS, JavaScript. Medientypen Programmierkurs I (HTML, CSS, Java) - 33

34 Cascading Style Sheets 2 (CSS2) screen: Bildschirmausgabe print: Druckausgabe aural: Sprachausgabe braille: Blindenschrift embossed: Blindenschrift-Drucker handheld: Mobilfunk, Handy projection: Projektor, Video-Beamer tty: Text-Bildschirm tv: TV-Bildschirm print { body { font-size: screen { body { font-size: 12pt Mediengruppen continous oder paged visual oder aural oder tactile grid oder bitmap interactive oder static neue Selektoren für Attribute p[align] { font-style: italic; p[align="center"] { font-style: italic; align: center; p[align~="center"] { font-style: italic; align: center; für Kinder und nebeneinanderstehende Elemente p > em { font-style: italic; h1 + h2 { margin-top: -5mm; für Sprachauswahl p:lang(de) p:lang(fr) { font-family: sans-serif; { font-family: serif; neue Pseudo-Elemente h1:before p:after { content: counter(kapitel) ". "; { content: " BWL 1999"; neue Display-Typen Programmierkurs I (HTML, CSS, Java) - 34

35 Cascading Style Sheets 2 (CSS2) h3 dt tr { display: run-in; { display: compact; { display: table-row; Fliesstext img img.x p { float: left; { float: right; { clear: left; Erweiterungen bei Fonts font-stretch: Dehnungsverhalten normal, wider, narrower, condensed, expanded font-size-adjust: Angleichung der Zeichengrössen zwischen verschiedenen Fonts, Beschreibung und Auswahl von { font-family: "Robson Celtic"; src: url(" p.rc { font-family: "Robson Celtic"; Fontauswahl Auswahl per Fontname Problem: es gibt kein anerkanntes Namensschema Auswahl "ähnlicher" Fonts (intelligent font matching) Erzeugung von Fonts (font synthesis) Download von alle Eigenschaften von Fonts können verwendet werden font-family, font-style, font-variant, font-weight, font-stretch, font-size zusätzlich kommen neue Deskriptoren hinzu: uni-code-range: Bereich vorhandener Zeichen (glyphs) U+0-7FFFFFFF units-per-em: Anzahl der Einheiten per 'em' src: URL (zum Download) oder Bezeichnung für einen Font src: local("verdana"), url("../fonts/verdana") format("type-1") Deskriptoren für Fontauswahl panose-1: Panose-1 Nummer stemv: vertikaler Stem-Wert ("M", em, Höhe des grossen M) stemh: horizontaler Stem-Wert ("x", ex, Höhe des kleinen x) slope: Neigungswinkel cap-height: Grösse der Grossbuchstaben x-height: Grösse der Kleinbuchstaben ascent: Grösse der Buchstaben ohne Akzente descent: Grösse der Buchstaben ohne untere Akzente Programmierkurs I (HTML, CSS, Java) - 35

36 Cascading Style Sheets 2 (CSS2) Deskriptoren für Fontsynthese width: Breite von Buchstaben bbox: maximaler Umriss von Buchstaben definition-src: definiert wo die Spezifikation zu finden ist Deskriptoren für Ausrichtung von Fonts untereinander baseline: untere Basisline der Schrift centerline: Mittelline der Schrift mathline: Ausrichtung der mathematischen Zeichen topline: obere Basisline der Schrift die Auswahl geeigneter Fonts erfolgt durch einen (längeren) Algorithmus { font-family: "Swiss 721 Condensed"; src: url(" font-style: normal, italic; font-stretch: condensed; p.sc { font-family: "Swiss 721 Condensed"; Zähler und Textersetzungen Pseudo-Elemente :before, :after Textersetzungen content: "string", URL, counter(cnt), attr(x), open-quote, close-quote Initialisieren von Zählern counter-reset: cnt Weiterzählen counter-increment: cnt Zähler-Format counter( name, type ) disk, circle, square, upper-latin, hebrew, upper-roman Einrückungen für Zähler aural { blockquote { content: url("bq-music.wav"); h1:before { content: "Kapitel " counter(kapitel) ". "; counter-increment: kapitel; counter-reset: abschn; h2:before { content: counter(kapitel) "." counter(abschn) ". "; counter-increment: abschn; Stile für Drucker {... Seitengrösse size: Ränder margin: für linke und rechte Seiten :left, :right Seitenumbruch page-break-before: page-break-after: page-break-inside: auto, always, avoid, left, right Programmierkurs I (HTML, CSS, Java) - 36

37 Cascading Style Sheets 2 (CSS2) Seitenumbruch in Paragraphen Anzahl Zeilen am Fuss orphans: int Anzahl Zeilen am Kopf widows: print { size: auto; margin: :right { margin-left: :left { margin-left: margin-right: 10; 5; 5; 10; Stile für Tabellen zugeschnitten für das HTML 4.0 Tabellenmodell rechteckige Anordnung von Zellen zeilenweise Anordnung Beispiel für Tabelle Spalte 1 1 Spalte Spalte <table class="exam" border="1" cellpadding="10" cellspacing="10" summary="html Elemente"> <tr> <th>spalte 1</th><th>Spalte 2</th><th>Spalte 3</th> </tr> <tr> <td>1</td><td>2</td><td>3</td> </tr> <tr> <td>4</td><td></td><td>6</td> </tr> <caption>beispiel für Tabelle</caption> </table> mit folgendem Style Sheet table.exam { font-size: large; background-color: lime; table.exam td { text-align: center; color: red; table.exam caption { caption-side: right; color: blue; freidefinierbare Tabellen-Elemente Neue display: Werte ermöglichen Tabelleneigenschaften für beliebige Elemente, wichtig für XML (Auswahl). Programmierkurs I (HTML, CSS, Java) - 37

38 Cascading Style Sheets 2 (CSS2) table wie table in HTML 4.0 table-row wie tr table-column wie col table-cell wie td, th table-caption wie caption table tr th, td col caption { { { { { display: display: display: display: display: table table-row table-cell table-col table-caption weitere Tabellen-Eigenschaften Grundlayout table-layout: auto fixed Ausrichtung an bestimmten Zeichen text-align: "." Rand-Modelle border-collapse: collapse, separate Ränder border-spacing: len leere Zellen empty-cells: show, hide Randstil border-style: solid, dotted, groove, ridge Sprachausgabe speak-header: once, always td { text-align: "," td:before { content: " " table { empty-cells: show Stile für Sprachausgaben Eigenschaften: Umgebung-/Raumabhängigkeit, Zeitabhängigkeit, Sprachqualität. Lautstärke volume: soft loud x% Sprechart speak: normal spell-out Pausen pause-before: zeit pause-after: zeit pause: before after "Ton-Icons" = Cue cue-before: url(.) cue-after: url(.) cue: before after Gleichzeitiges Abspielen play-during: url(.) mix? repeat? Räumliche Eigenschaften azimuth: Raumseitenwinkel, behind, left, right elevation: Raumhöhenwinkel, below, above Programmierkurs I (HTML, CSS, Java) - 38

39 Cascading Style Sheets 2 (CSS2) weitere Eigenschaften speech-rate: slow fast, Worte pro Minute ( ), voice-family: male female 'speaker', pitch: freq, Frequenz (120Hz) pitch-range:, stress: int, Betonung richness: int, "Fülle" speak-punctuation: code none, speak-numeral: digits aural { h2 { pause: 30ms 40ms; a { cue-before: url("a-bell.wav"); em { play-during: url("em-sound.wav") mix repeat; p.note { azimuth: behind; p.dog { elevation: below; Weitere Änderungen gegenüber CSS1 Berücksichtigung der Text-Schreibrichtung direction: ltr rtl Behandlung von Text-Ausschnitten clip: shape, overflow: scroll Cursor Darstellung cursor: crosshair text wait url(.) Beispiele Beispiel mit CSS Level 2 Konstrukten Ausblick CSS3 Paged Media Support, z.b. WAP auf Handys DOM Level 2 Support Scalable Vector Graphics (SVG) User Interface, z.b. "Kiosk" Mode International Layout, z.b. Arabisch, Japanisch Multicolumn Layout XSL CSS und XML XSL XSLT Universität Mannheim, Rechenzentrum, Programmierkurs I (HTML, CSS, Java) - 39

40 Cascading Style Sheets 2 (CSS2) Last modified: Sat May 22 12:36:17 CEST 2004 Programmierkurs I (HTML, CSS, Java) - 40

41 Java, Einleitung 7. Java, Einleitung Einleitung "Hallo Welt" Software-Entwicklung 7.1. Einleitung Programmiersprache der Firma SUN vollständige objektorientierte Programmiersprache Syntaktisch an C++ angelehnt Objekte, Klassen, Kapselung Vererbung, Polymorphismus multi-threaded hierarchisches Modulkonzept package Interpreter Unterschiede zu anderen OO-Sprachen einfach, Verzicht auf wenig genutzte höhere Sprachkonzepte teilcompilierend, Byte-Code kann auf jeder Plattform mit einer Implementierung der zu Java gehörenden 'Virtual Machine' ablaufen dynamisches Laden von Klassen sehr sehr umfangreiche Bibliotheken als Teil der Sprachdefinition Sicherheit Konkurenzprodukt: C# mit CRI seit 2002 Java als "Web-Programmiersprache" Virtual Machine ist in vielen gängigen Web-Browsern verfügbar einfache Integration mit HTML Bibliotheken für graphische Oberflächenelemente (AWT und Swing) ist Teil der Laufzeit-Umgebung Bibliothek für Netzwerk-Programmierung ist Teil der Laufzeit-Umgebung dynamisches Laden von Klassen ermöglicht effiziente Nutzung von niedriger Netz-Bandbreite Mechanismen zur Unterscheidung zwischen "vertrauenswürdigem" und sogenannten "untrusted" Code sind Teil der Sprachdefinition und Laufzeitumgebung Programmierkurs I (HTML, CSS, Java) - 41

42 Java, Einleitung 7.2. "Hallo Welt" Ein erstes Java-Beispiel Das einfachste, immer wieder eingesetzte Programm zeigt nur "Hallo Welt!" an. import java.awt.*; import java.applet.*; public class HelloWorldApplet extends Applet { String msg = ""; public void init () { msg = "Hallo Welt!"; public void paint(graphics g) { g.drawstring(msg,10,75); Ein solches Java-Programm wird in einen sogenannten Byte-Code kompiliert und dann mit Hilfe eines Java-Interpreters, des Appletviewers oder der Web-Browsers ausgeführt. Die Kompilierung mit dem Byte-Code Compiler erfolgt durch javac. % javac HelloWorldApplet.java Die Ausführung erfolgt mit dem Appletviewer oder dem Web-Browser. % appletviewer helloworld.html Die zugehörige HTML Seite sieht wie folgt aus. <html> Programmierkurs I (HTML, CSS, Java) - 42

43 Java, Einleitung <head><title>simple Applet</title> </head> <body bgcolor="white"> <applet code="helloworldapplet.class" width="150" height="150"> </applet> </body> </html> Das Ergebnis ist wie erwartet. Swing Applet import javax.swing.*; import java.awt.*; public class HelloWorldAppletSwing extends JApplet { JTextPane anzeige; String msg = ""; public void init () { msg = "\nhallo Welt!\n"; anzeige = new JTextPane(); anzeige.settext(msg); Container c = getcontentpane(); c.add(anzeige,borderlayout.center); Das Ergebnis. Kommandozeilen Java public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World!"); Vor der Kompilation müssen bei älteren JDKs einige Umgebungsvariablen gesetzt werden. Dies sind die Variablen CLASSPATH und PATH, die unter Unix/Linux in den Shells sh oder bash, wie folgt gesetzt werden. % set CLASSPATH="/usr/local/jdk/java/lib:." % set PATH="$PATH:/usr/local/jdk/java/bin" % export CLASSPATH PATH Diese Zeilen können eingetippt oder in der Datei.bashrc dauerhaft eingetragen werden. Auf Windows-NT-Rechnern müssen diese Variablen im Systempanel entsprechend gesetzt werden. Dabei ist das Trennzeichen `:' durch `;' und das Pfadtrennzeichen `/' durch `\' zu ersetzen. In anderen Umgebungen müssen Sie die Umgebungsvariablen entsprechend anpassen, falls sie nicht schon durch die Installationsroutinen richtig eingestellt werden. Die Kompilierung mit dem Byte-Code Compiler erfolgt durch javac. % javac HelloWorld.java Die Ausführung erfolgt mit dem Interpreter java. % java HelloWorld Programmierkurs I (HTML, CSS, Java) - 43

44 Java, Einleitung Das Ergebnis ist wie erwartet. Hello World! Andere Programmiersprachen Scheme / LISP: (display "Hello World!") oder ((lambda (p) (begin (display "Hallo Welt von ") (display p) (display "!")) ) "Heinz" ) Hallo Welt von Heinz! oder (define (hallo p) (begin (display "Hallo Welt von ") (display p) (display "!")) ) (hallo "Anja") Hallo Welt von Anja! Pascal: program HelloWorld(output); begin writeln('hello world!'); end. C: #include <stdio.h> int main() { printf("hello world!"); return 0; C++: #include <cstdio> int main() { std::out<<"hello world!"; return 0; C++: Programmierkurs I (HTML, CSS, Java) - 44

45 Java, Einleitung #include <cstdio> using namespace std; int main() { out<<"hello world!"; return 0; Windows: #include <windows.h> int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { return MessageBox(0,"Hello world!","my first window",0); //1st 0 = HWND_DESKTOP, 2nd 0 = MB_OK Objektorientierte Varianten Verwendung als Objekt: public class Hallo { void sags(){ System.out.println("Hallo Welt!"); static void hallo(){ System.out.println("Hallo Welt!"); public static void main(string[] args) { hallo(); new Hallo().sags(); Verwendung als Objekt mit Konstruktor: import java.io.*; public class HalloObj { String bla = "Hallo Welt!"; PrintWriter pw; HalloObj(PrintStream ps){ pw = new PrintWriter(ps,true); void sags(){ pw.println(bla); public static void main(string[] args) { (new HalloObj(System.out)).sags(); Programmierkurs I (HTML, CSS, Java) - 45

46 Java, Einleitung 7.3. Software-Entwicklung Modellierung Entwurf Kodierung, Implementierung Testen Ausbildung Anwendung Wartung Programmieren Editieren: Schreiben von Programmen in einer bestimmten Programmiersprache Compilieren: Übersetzen der Programme in "Machinen"code Hinzufügen von anderen Programmteilen (Linken) Testen: Anwenden des Programms mit Beispieldaten Programm-Bibliotheken: erlernen, benutzen und aufbauen Universität Mannheim, Rechenzentrum, Programmierkurs I (HTML, CSS, Java) - 46

47 Java, Sprache 8. Java, Sprache 8.1. Sprachaufbau Lexikalische Elemente Kommentare Bezeichner reservierte Bezeichner und Zeichen Variablen Elementare Datentypen Operatoren Anweisungen Kontrollstrukturen Felder, Arrays Lexikalische Elemente Die elementaren Bestandteile von Java Programmen sind: White-Space: Leerraum, Tabs Kommentare Bezeichner Schlüsselwörter Literale Interpunktionszeichen Operatoren Kommentare Es gibt drei Arten von Kommentaren in Java: /* Kommentar */ Für längere Kommentare über mehrere Zeilen, praktisch auch zum vorübergehenden Herauskommentieren von Programmteilen // Kommentar Ab // werden die Zeichen bis zur nächsten Zeile ignoriert, gebräuchlich für Kommentare innerhalb der Programmzeilen selbst /** Kommentar */ Kommentar zur Programmdokumentation mit javadoc. Über bestimmte Tags, name Erläuterung lässt sich die Dokumenation sehr übersichtlich gestalten. Programmierkurs I (HTML, CSS, Java) - 47

48 Java, Sprache Bezeichner Namen von Variablen und Methoden etc. beginnen mit Buchstaben, dürfen "_" und "$" enthalten. reservierte Bezeichner und Zeichen Schlüsselwörter (key words) Eigene Objekte und Variablen kann man beliebig nennen, bis auf folgende, von Java reservierten Worte: abstract double assert ** boolean else break extends byte final case finally catch float char for class goto * const * if continue implements default import do instanceof null true int strictfp ** interface long native new package private protected public return short static false super switch synchronized this throw throws transient try void volatile while * z.zt unbenutzt, ** neu in Java 2 ( ) { [ ] = - + * / % < >!? & ~ ;,. Daneben gibt es eine Reihe von Methodennamen mit speziellen Bedeutungen (z.b. main() oder run()). Sie werden in der Regel durch Interfaces vorgeschrieben. Eine Ausnahme ist die Methode main(). Elementare Datentypen In Java sind die primitiven Datentypen architektur-unabhängig definiert. Eine Zusammenstellung befindet sich in Abbildung 1.3. Der Begriff `atomar' wird bei Mulit-threaded Programmen benötigt. Abbildung 1.3: Java-Datentypen Datentyp Inhalt boolean Größe atomar true oder false 1 bit ja char Unicode Zeichen 16 bits ja byte signed integer 8 bits ja short signed integer 16 bits ja int signed integer 32 bits ja long signed integer 64 bits nein float IEEE754 float 32 bits ja double IEEE754 double 64 bits nein String Zeichenkette beliebig nein Zeiger, Pointer null oder Referenz ja Objekt-Referenz Typ Art (Bereich) Programmierkurs I (HTML, CSS, Java) - 48

49 Java, Sprache ganze Zahlen, Zweierkomplement-Darstellung byte 8-bit Integer mit Vorzeichen (-128 bis 127) short 16-bit Integer mit Vorzeichen ( bis ) int 32-bit Integer mit Vorzeichen ( bis ) long 64-bit Integer mit Vorzeichen ( bis ) reele Zahlen float 32-bit IEEE 754 Fliesskomma ( e+38 bis e+38), 1 Bit Vorzeichen, 8 Bit Exponent, 23 Bit Mantisse double 64-bit IEEE 754 Fliesskomma ( e+308 bis e+308) 1 Bit Vorzeichen, 11 Bit Exponent, 52 Bit Mantisse andere Typen char 16-bit Unicode character (65536 Zeichen). boolean Boolscher Wert (wahr oder falsch) Die Größe der Datentypen ist unabhängig vom Rechnersystem und der Java-Implementierung! Zu allen elementaren Datentypen existieren sogenannte Hüllklassen Byte, Short, Integer, Long, Float, Double, Character und Boolean. Beispiel: public // // // class PrimitivTypen { lexikalische Typen sind int und double andere direkte Wertzuweisungen müssen "gecastet" werden z.b.: byte b = (byte)37; short s = (short)37; int i = 37; // dezimal int j = 012; // oktal -> 10 dez int k = 0x14; // hexadezimal -> 20 dez long l = 37L; float f = 0.37F; double d = 0.37; double e = 0.37e+10; char c = 'K'; boolean w = true; Variablen Abstraktion für Werte, Speicherstelle, Schublade Name: ein Bezeichner Typ: ein elementarer Typ oder Klassen-/Objekt-Typ Wert: Bitmuster im Speicher Programmierkurs I (HTML, CSS, Java) - 49

50 Java, Sprache Semantik: Bedeutung des Bitmusters entsprechend dem Typ Definition durch typ name; bzw. typ name = anfangswert; Ändern des Wertes durch Zuweisung name = neuerwert Definition von Konstanten durch final typ NAME = wert; Es gibt unter anderem folgende drei Arten von Variablen: lokale Variablen: werden lokal innerhalb eines {...-Blocks (z.b. Methode) definiert und sind nur dort verfügbar. Objekt-Variablen: werden in Klassen definiert und gehören zum erzeugten Objekt Klassen-Variablen: werden in Klassen definiert und sind ohne erzeugtes Objekt verwendbar Beispiel: public class Variablen { // Variablen haben // einen Namen, einen Wert und einen Typ int einevariablevomtypint; int i = 3; // bitmuster: long index = 0; Integer x = null; Integer y = new Integer( 3 ); String s = "Eine Zeichenkette"; String w = s + " mit Erweiterung"; java.util.date d = new java.util.date(); Operatoren Zur Verknüpfung von elementaren Datentypen: postfix operators []. (params) expr++ expr-unary operators ++expr --expr +expr -expr ~! creation or cast new (type)expr multiplicative * / % additive + shift << >> >>> relational < > <= >= instanceof equality ==!= bitwise AND & bitwise exclusive OR ^ bitwise inclusive OR bitwise NOT ~ logical AND && logical OR logical NOT! conditional? : assignment = += -= *= /= %= &= ^= = <<= >>= >>>= Beispiel: Programmierkurs I (HTML, CSS, Java) - 50

51 Java, Sprache public class Operatoren { public void numericalops() { int n = 43; n += 7; // ist eine Abkuerzung von n = n + 7; // dies funktioniert auch mit -, /, >>, etc. n = n * 2; // verdoppelt n n = n / 2; // teilt n ganzzahlig durch 2 n = n % 2; // Rest der ganzzahligen Division strictfp public void floatingpointops() { double d = 2.71; float one = 1.0f; float f = 1.0f / (float)2; // liefert das float// Divisionsergebnis double zero = 0.0; // 0.0 zero = 1/2; // 0.0 double p = d / zero; double n = -d / zero; // Double.POSITIVE_INFINITY // Double.NEGATIVE_INFINITY double z = zero / zero; // NaN = not a number z = d * zero + p; public void logicalops() { boolean bool = true && false; bool = true false; // bool bool = true == false; // bool bool = false!= true; // bool // bool ist false ist true ist false ist true bool =!bool; //! nimmt eine logische Negierung vor // bool ist jetzt gleich false bool = 4 >= 3; // bool ist true bool = 4!= 4; // bool ist false public void difficultops() { int var = 0; if (var++ < 0); // ist gleichbedeutend mit if (var < 0); var = var + 1; if (--var == 2); // ist gleichbedeutend mit var = var - 1; if ( var == 2 ); int a = 1; int conditional = ( a == 4? 3 : -2 ); // conditional ist jetzt -2 public void bitwiseops() { int i = 3; i = i << 1; // i ist jetzt 6 i = i & 7; // i ist jetzt 6 i = i 3; // i ist jetzt 7 Programmierkurs I (HTML, CSS, Java) - 51

52 Java, Sprache Anweisungen, Blöcke, Sichtbarkeit Zuweisung, Zusammenfassung von mehreren Anweisungen in Blöcken. Lebensdauer und Sichtbarkeit von Variablen in Blöcken. Anweisung: Zuweisung, Methodenaufruf, bestimmte Ausdrücke Zusammenfassung mehrerer Anweisungen in einem Block: {... Variablen, die in einem Block definiert werden, sind nach seinem Verlassen nicht mehr sichtbar in einem Block dürfen keine Variablen deklariert werden, in einem umgebenden Block schon deklariert sind statement; name = wert; name.methode(); name++; { statement1,..., statementn; Beispiel: public class Sichtbarkeit { void anweisung() { int x; x = 3; System.out.println("x = " + x); x++; void blocks() { int x = 1; int y; { int x = 2; // fehler x wird verdeckt y = x; y = x; void leben() { int x = 1; { int y = 2; x = y; // fehler y existiert nicht mehr Kontrollstrukturen Kontrollstrukturen dienen dem Ausführen von Programmteilen in Abhängigkeit von sich ändernden Bedingungen. Statement Keyword decision making loop if-else, switch-case for, while, do-while miscellaneous break, continue, label:, return Schleifen und bedingte Anweisungen Java hat die üblichen auch von C und C++ bekannten while-, do- und for-schleifen-konstrukte. Programmierkurs I (HTML, CSS, Java) - 52

53 Java, Sprache if (condition) { statements else { statements for (int i=0; i < end; i++) { statements while (condition) { statements do { statements while (condition); switch (var) { case a: statements; break; case b: statements; break;... default: statements; break und continue können analog zu C/C++ in einer Schleife benutzt werden, um die gesamte Schleife zu verlassen, bzw. um die aktuelle Schleife zu beenden. Beispiel: public class Kontrollstrukturen { public void decision() { int variable; variable = 2; if (variable > 1 && variable == 2) { variable = variable - 1; else { variable = variable + 1; switch (variable) { case 0: case 1: // variable ist 0 oder 1 break; case 2: variable = variable * 2; break; default: // variable ist nicht 0, 1 oder 2 public void loop() { // dreimal die selbe Schleife for (int index = 0; index < 4; index = index + 1) { // tue irgendwas 4 mal int index = 0; while (index < 4) { index = index + 1; Programmierkurs I (HTML, CSS, Java) - 53

54 Java, Sprache index = 0; do { index = index + 1; while (index < 4); public void miscellaneous() { int i = 0; while (1 > 0) { i = i + 2; if (i > 5) break; // verlaesst die while-schleife continue; // faengt sofort wieder am // Schleifen-Kopf an return; // beendet die Methode sofort weitere Beispiele zu Schleifen: for (int i = 0; i < args.length-1; i++ ) { for (int j = i+1; j < args.length; j++) { if ( args[i].equals( args[j] ) ) {... for ( Iterator it = verschiedeneargs.keyset().iterator(); it.hasnext(); /* fehlt */ ) { Object arg = it.next();... Iterator it = verschiedeneargs.keyset().iterator(); while ( it.hasnext() ) { Object arg = it.next();... Java Syntax aus der Sprachdefinition. Felder, Arrays, Reihungen Ein Array, d.h. einen Vektor oder eine Matrix, kann man ebenfalls durch new erzeugen. byte[] buffer = new byte[4096]; byte[] data = new byte[4096]; int[][] plot = new int[64][64];... Date[] ds = new Date[16]; Auf die Elemente eines Arrays kann über ihren Index zugegriffen werden. for (int i=0; i < buffer.length; i++) buffer[i] = data[i]; In der length Variablen eines Array Objekts steht die Information über die Länge bereit. Bemerkung: Java erlaubt (aus Gründen der Kompatibilität zu C/C++) auch die Notation byte buffer[] = new byte[4096]. Wir werden davon aber keinen Gebrauch machen. Beispiel: Programmierkurs I (HTML, CSS, Java) - 54

55 Java, Sprache import java.util.date; public class Reihungen { byte[] buffer = new byte[4096]; byte[] data = new byte[4096]; int[][] plot = new int[64][64]; float[] stat = { 1.0f, 2.0f, 3.14f, 2.71f, 1.99f ; Date[] ds = new Date[16]; public void initialisieren() { for (int i=0; i < buffer.length; i++) buffer[i] = (byte)i; for (int i=0; i < ds.length; i++) { ds[i] = new Date(); public void kopieren() { for (int i=0; i < buffer.length; i++) data[i] = buffer[i]; public int summieren() { int sum = 0; for (int i=0; i < buffer.length; i++) { sum += buffer[i]; return sum; Universität Mannheim, Rechenzentrum, Last modified: Sun Oct 24 13:31:57 CEST 2004 Programmierkurs I (HTML, CSS, Java) - 55

56 Java, Klassen 9. Java, Klassen 9.1. Klassen und Objekte Unterprogramme, Methoden Klassen und Objekte Parameterübergabe von Referenzen Kapselung und Zugriffskontrolle Konstruktoren Datentyp Complex Unterprogramme, Methoden Unterprogramme sind Prozeduren und Funktionen, in Java werden sie als Methoden bezeichnet. Unterprogramme bestehen aus einem Kopf (head) und einem Rumpf (body) der Rumpf ist eine Zusammenfassung von Anweisungen in dem Kopf wird der Name des Unterprogramms definiert, sowie die Parameter und der Ergebnistyp bei Prozeduren ist der Ergebnistyp void die Parameter (als formale Parameter bezeichnet) definieren im Rumpf lokale Variablen Aufruf einer Methode erfolgt durch Angabe des Namens, gefolgt von den aktuellen Parametern (getrennt durch Komma) in Klammern name( p1, p2, f(p3), p4+5 ) Signatur, Aufrufschnittstelle: Anzahl und Typen der Parameter sowie des Ergebnistyps (void, int, String[], Integer) Überladen: Methoden mit gleichem Namen, die sich in der Signatur unterschieden (in Java nur der formalen Parameter), bei der Auswahl muss die Eindeutigkeit gewährleistet werden (int, String[], Integer), (double, String[], Double) Parameterübergabe: Wertaufruf (call by value): der berechnete Wert der Ausdrucks wird verwendet (in Java für elementare Typen und Objektreferenzen) Referenzaufruf (call by reference): nur bei Variablen als Parameter, Ermöglicht Zuweisungen an die Variable im Rumpf (nicht in Java, aber Objekte sind Referenzen) Namensaufruf (call by name): textuelle Substitution wie bei LISP/Scheme (nicht in Java) die Prozedur public static void main(string[] args) { wird vom Java-Interpreter als erste ausgeführt bei rekursiven Prozeduren wird im Rumpf die Prozedur selbst wieder aufgerufen, void prozedur( parameter ) block; typ funktion( parameter ) {... return (typ) wert;... typ methode(... int x = int y = int z =... typ_1 name_1,..., typ_n name_n ) { (int)name_1; funktion( name_2, 4711 ); name_3 + name_n; Programmierkurs I (HTML, CSS, Java) - 56

57 Java, Klassen public static void main(string[] args) { // die Hauptprozedur, // d.h. die erste die ausgeführt wird Beispiele: public class Unterprogramme { void prozedur() { int funktion() { return 4711; int quadrat(int a) { return a*a; double quadrat(double a) { return a*a; int name(int a) { int b = quadrat( 2 ); return b+a; long fakultaet(long n) { if ( n <= 1l ) { return 1l; else { return n * fakultaet( n-1l); double summe(double[] a) { double sum = 0.0; for ( int i = 0; i < a.length; i++ ) { sum += a[i]; return sum; void main() { prozedur(); int n = funktion(); int i = quadrat(n); int j = name( 3 ); long k = fakultaet( 10 ); double[] z = { 1.0, 1.2, 3.2, 4.6, 9.2 ; double s = summe( z ); System.out.println("n System.out.println("i System.out.println("j System.out.println("k System.out.println("s = = = = = " " " " " n); i); j); k); s); public static void main(string[] args) { // die Hauptprozedur, (new Unterprogramme()).main(); public class Ueberladen { Programmierkurs I (HTML, CSS, Java) - 57

58 Java, Klassen void problem(int a, long b) { void problem(long a, long b) { void problem(long a, int b) { void ratemal() { problem( 1, 2L ); // ok problem( 1L, 2 ); // ok problem( 1, 2 ); // fehler long problem(long a, long b) { // fehler return a*b; public class Uebergabe { class Unter { int a = 0; int b = 1; void wert( int c ) { c = c + 55; void referenz( Unter u ) { int x = u.a * 3; u.b = x + 14; void unveraendert( Unter u ) { u = new Unter(); int x = u.a * 3; u.b = x + 14; void ratemal() { int w = 3; wert( w ); // w == 3 Unter u = referenz( // u.a == // u.b == new Unter(); u ); 0 14 unveraendert( u ); // u.a == 0 // u.b == 1 public class Rekursion { long fakultaet(int n) { if ( n <= 1 ) { return 1l; else { return n * fakultaet( n-1); double summe(double[] a) { double sum = 0.0; for ( int i = 0; i < a.length; i++ ) { Programmierkurs I (HTML, CSS, Java) - 58

59 Java, Klassen sum += a[i]; return sum; double reksumme(double[] a) { return reksumme(a,a.length); double reksumme(double[] a, int n) { if ( n == 0 ) return 0.0; return reksumme(a,n-1) + a[n-1]; long potenz(int b, int e) { // berechne b hoch e // if ( e < 0 ) { b = 1/b; e = -e; if ( e == 0 ) return 1l; if ( e == 1 ) return (long)b; return b * potenz( b, e-1 ); long quadrat(long b) { // berechne b*b return b*b; long potenzfast(int b, int e) { // berechne b hoch e // if ( e < 0 ) { b = 1/b; e = -e; if ( e == 0 ) return 1l; if ( e == 1 ) return (long)b; if ( e % 2 == 0 ) return quadrat( potenzfast( b, e/2 ) ); return b * potenzfast( b, e-1 ); void main() long k = double[] double s double r long p = long f = { fakultaet( 10 ); z = { 1.0, 1.2, 3.2, 4.6, 9.2 ; = summe( z ); = reksumme( z ); potenz( 10, 15 ); potenzfast( 10, 15 ); System.out.println("k System.out.println("s System.out.println("r System.out.println("p System.out.println("f = = = = = " " " " " k); s); r); p); f); public static void main(string[] args) { // die Hauptprozedur, (new Rekursion()).main(); public class Summe { static double[] betrag = null; static double summe() { double s = 0.0; for (int i = 0; i < betrag.length; i++ ) { s += betrag[i]; return s; public static void main(string[] args) { betrag = new double[args.length]; for (int i = 0; i < args.length; i++) { Programmierkurs I (HTML, CSS, Java) - 59

60 Java, Klassen betrag[i] = 0.0; try { betrag[i] = Double.parseDouble( args[i] ); // betrag[i] = Double.valueOf( args[i] ).doublevalue(); catch (NumberFormatException e) { System.out.println("Eingegeben wurden " + args.length + " Zahlen"); double s = summe(); System.out.println("Die Summe ist " + s); Java Syntax aus der Sprachdefinition. Klassen und Objekte Klassen bieten die Zusammenfassung von Funktionen, Prozeduren und Variablen zu einem bestimmten Zweck. (Abstraktion von einzelnen Methoden zu Modulen oder Gruppen.) Klassen sind zusammengesetzte Datentypen. die Klassendeklaration definiert die Bestandteile: Variablen, Datenfelder (Attribute, fields) Methoden (methods) Konstruktoren (Initialisierer) Ein Objekt ist ein Exemplar einer Klasse (auch als Instanz bezeichnet) Ein Objekt einer Klasse kann durch das Schlüsselwort new erzeugt werden. ein Objekt enthält die Bestandteile: Instanz-Variablen Klassen-Variablen (static) Instanz-Methoden Klassen-Methoden (static) Der Zugriff auf Objektbestandteile erfolgt mit dem Punktoperator '.' Variablen einer Klasse deklariert man durch den Namen der Klasse, gefolgt vom Namen der Variablen Klasse var (entspricht Klasse var = null). Der Variablen muss anschliessend ein (neues) Objekt zugewiesen werden. Konstruktoren sind spezielle Methoden mit dem Namen der Klasse ohne Rückgabeparameter. Bei der Erzeugung eines neuen Objekts wird entsprechend der aktuellen Parameter ein passender Konstruktor ausgewählt, der die Instanz-Variablen initialisieren kann. Diagramme für Klassen in der Unified Modeling Language (UML): Name Zustand, Attribute Funktionalität, Methoden public class Klassen { static int klassen = 0; int meinenummer = 0; Klassen() { meinenummer = klassen++; Programmierkurs I (HTML, CSS, Java) - 60

61 Java, Klassen static String statistik() { return "Erzeugte Objekte = " + klassen; public String tostring() { return "Meine Nummer = " + meinenummer + " von " + klassen; public static void main(string[] args) { System.out.println( Klassen.statistik() ); Klassen einz = new Klassen(); Klassen zwei = new Klassen(); Klassen drei = new Klassen(); Klassen vier = new Klassen(); Klassen fuenf = new Klassen(); System.out.println( statistik() ); System.out.println("einz: " + einz.tostring()); System.out.println("zwei: " + zwei); System.out.println("vier: " + vier); System.out.println("drei: " + drei); System.out.println("fuenf: " + fuenf); Klassen UML Diagramm Java-Programme werden mittels Klassen definiert. Jede öffentliche (d.h. als public deklarierte) Klasse muß in einer separaten Datei gespeichert werden. Der Name der Datei muß mit dem Namen der public-klasse übereinstimmen (z.b. muß die Klasse public class Test in der Datei Test.java gespeichert werden). Der Speicherbereich für das Objekt wird automatisch allokiert. Wenn das Objekt nicht mehr gebraucht wird (d.h. keine Variable referenziert mehr das Objekt), wird der Speicherbereich während eines Garbage-Collection-Vorganges wieder freigegeben (Speicherrecycling). Das heißt, daß im Gegensatz zu C/C++ kein expliziter `delete'-operator benötigt wird. In Java können Prozeduren nur innerhalb von Klassen definiert werden. Prozeduren können zu einer Klasse oder zu Objekten gehören. Es gibt in Java keine freien / globalen Variablen oder Methoden. public class Card { int number; static int base = 5; public static String version = "1.0"; public Card(int n) { number = n; Programmierkurs I (HTML, CSS, Java) - 61

62 Java, Klassen public int getnumber() { return number; public static int getbase() { return base; public int getdiff() { return number - base; public static void main(string[] args) { Card c = new Card(7); System.out.println(c.version+":"+ c.getnumber()+"-"+c.getdiff()+"="+ Card.getBase()); Die Ausgabe dieses Programms ist 1.0:7-2=5. Card UML Diagramm Parameterübergabe von Objektreferenzen Die Übergabe von Objektrefrenzen ermöglicht die Veränderung von übergebenen Objekten in der aufrufenden Methode. public class Confuse { static class Reference { int val; public int confuse( int a, int b ) { a = 1; a = b + a; Programmierkurs I (HTML, CSS, Java) - 62

63 Java, Klassen return a; public Integer confuse( Integer a, Integer b ) { a = new Integer(1); a = new Integer( b.intvalue() + a.intvalue() ); return a; public Reference confuse( Reference a, Reference b ) { a.val = 1; a.val = b.val + a.val; return a; public static void main(string[] args) { Confuse c = new Confuse(); int m = 4; int n = c.confuse( m, m ); System.out.println("m = " + m); System.out.println("n = " + n); Integer i = new Integer(4); Integer j = c.confuse( i, i ); System.out.println("i = " + i); System.out.println("j = " + j); Reference k = new Reference(); k.val = 4; Reference l = c.confuse( k, k ); System.out.println("k = " + k.val ); System.out.println("l = " + l.val ); Confuse UML Diagramm Das Problem kann durch Zugriffskontrolle gelöst oder beherscht werden. Kapselung und Zugriffskontrolle Klassen bzw. Objekte können ihre Variablen und Methoden in verschiedenen Abstufungen kapseln (einschliessen). Dabei werden Programmierkurs I (HTML, CSS, Java) - 63

64 Java, Klassen nur die Variablen oder Methoden nach aussen, d.h. für andere Objekte sichtbar gemacht, die notwendig sind. Man spricht auch vom Geheimnisprinzip. Die öffentlich zugänglichen Variablen und Methoden werden meist noch durch Interfaces (s.u.) definiert. Vorteil: die Interna können beliebig modifiziert werden solange die Schnittstelle und deren Semantik erhalten bleibt. Java unterschiedet public, private, protected und default Zugriffsrechte. public völlig öffentlich private nur in Objekten der eigenen Klasse sichtbar protected in Objekten der Klassenhierarchie sichtbar, d.h. in abgeleiteten Klassen nichts, d.h. default: nur im gleichen Package sichtbar Beispiele siehe Abschnitt "Sichtbarkeit". Der Kontrakt zwischen dem/der Entwicklerin einer Klasse und einem Anwender besteht aus der Syntax und Semantik der Aufrufschnittstelle. Konstruktoren Konstruktoren dienen der Initialisierung der Objekt-Variablen. Klassen-Variablen werden ein einziges mal vor der ersten Verwendung der Klasse initialisiert. der Name der Konstruktoren muss der Name der Klasse sein Konstruktoren sehen aus wie Methoden ohne Rückgabetyp Definition Konstruktoren können wie Methoden überladen werden für Konstruktoren gelten die üblichen Zugriffsspezifikationen Konstruktoren der Superklasse können explizit mit super(...) verwendet werden andere Konstruktoren der eigenen Klasse können explizit mit this(...) verwendet werden Beispiel für einen neuen Datentyp Wir entwickeln eine Klasse Complex, die für die Arithmetik komplexer Zahlen verwendet werden kann. Der Konstruktor soll aus einem Paar reeler Zahlen (a,b) eine komplexe Zahl a + i b machen. Methoden und Konstanten: Null ist 0 + i 0, Einz ist 1 + i 0, Feststellen des Real- und Imaginär-Teils, Anzeige mit tostring() von Object, Test auf Gleichheit, Addition: (a + i b) + (c + i d) = (a+c) + i (b+d), Subtraktion analog, negative Zahl, Multiplikation: (a + i b) * (c + i d) = (ac-bd) + i (ad+bc), Konjugation: con(a + i b) = a - i b, Betrag: abs(a + i b) = sqrt( a a + b b ), Inverses: inv(a + i b) = con(a + i b)/abs(a + i b), Division: (a + i b) / (c + i d) = (a + i b) * inv(c + i d), Programmierkurs I (HTML, CSS, Java) - 64

65 Java, Klassen Programmierkurs I (HTML, CSS, Java) - 65

66 Java, Klassen Complex UML Diagramm /** * Klasse zum Rechnen mit Komplexen Zahlen * hk, * **/ public class Complex { /* Die Datenstruktur */ private double re; private double im; // der Realteil // der Imaginärteil /* Die Konstruktoren erzeugen aus einem Paar von double Zahlen eine Komplexe Zahl */ public Complex(double r, double i) { re = r; im = i; public Complex(double r) { this(r,0.0); public Complex() { this(0.0); /* Konstanten: 1, 0 und i */ public static final Complex ZERO = new Complex(); public static final Complex ONE = new Complex(1.0); public static final Complex I = new Complex(0.0,1.0); /* Bestimmen des Real- und Imaginär-Teils */ public double reteil() { return re; public double imteil() { return im; /* Darstellung als Zeichenkette */ public String tostring() { String s = "" + re; if ( im < 0 ) s += " - " + (-im) + "i"; else s += " + " + im + "i"; return s; /* Vergleich zweier Komplexer Zahlen */ public boolean equals(complex b) { return ( re == b.reteil() && im == b.imteil() ); /* Arithmetische Operationen: +, -, - */ public Complex add(complex b) { return new Complex(re + b.reteil(), im + b.imteil()); Programmierkurs I (HTML, CSS, Java) - 66

67 Java, Klassen public Complex subtract(complex b) { return new Complex(re - b.reteil(), im - b.imteil()); public Complex negate() { return new Complex(-re,-im); /* Arithmetische Operationen: Konjugierte, Absolut Betrag */ public Complex conjugate() { return new Complex(re,-im); public double abs() { return ( Math.sqrt( re * re + im * im ) ); /* Arithmetische Operationen: *, Inverse, / */ public Complex multiply(complex b) { return new Complex(re * b.reteil() - im * b.imteil(), re * b.imteil() + im * b.reteil() ); public Complex inverse() { double a = re * re + im * im; return new Complex(re/a, -im/a); // Konjugierte public Complex divide (Complex b) { return this.multiply( b.inverse() ); Anwendungsbeispiel /** * Testen der Klasse zum Rechnen mit Komplexen Zahlen * hk, * **/ public class ComplexTest { public static void main(string[] args) { Complex a = new Complex(2.0,3.0); System.out.println("a(2,3) = " + a); System.out.println("Null(0,0) = " + Complex.ZERO); System.out.println("Eins(1,0) = " + Complex.ONE); Complex b = Complex.ONE; b = b.add(a); System.out.println("b(3,3) = " + b); Complex c = new Complex(3.0,3.0); System.out.println("c(3,3) = " + c); boolean t = c.equals(b); System.out.println("t(true) = " + t); Complex d = c.conjugate(); System.out.println("d(3,-3) = " + d); double e = c.abs(); System.out.println("e(18) = " + e); Complex f = c.multiply(d); Programmierkurs I (HTML, CSS, Java) - 67

68 Java, Klassen System.out.println("f(18,0) = " + f); // c*conjugate(c) = abs(c)^2 t = e == Math.sqrt( f.reteil() ); System.out.println("t(true) = " + t); // i*i = -1 Complex g = Complex.I.multiply(Complex.I); System.out.println("g(-1,0) = " + g); // 1/i = -i Complex h = Complex.ONE.divide(Complex.I); System.out.println("h(0,-i) = " + h); Universität Mannheim, Rechenzentrum, Programmierkurs I (HTML, CSS, Java) - 68

69 Java, Vererbung 10. Java, Vererbung Vererbung und Interfaces Vererbung Überschreiben Typanpassungen Interfaces abstrakte Klassen Vererbung Mit den Konzepten der Vererbung (inheritance) kommen wir zu höheren objektorientierten Konzepten. Modellierung einer "ist-ein"-beziehung zwischen Datentypen manchmal ist ein Datentyp A ein Untertyp eines Obertyps B die Klasse A ist dann eine Erweiterung der Klasse B, d.h. alles was B hat hat auch A um die Implementierung von B bei der Implementierung von A wiederzuverwenden (re-use) verwendet man in Java die Vererbung mit class A extends B B ist die sogenannte Basisklasse und A ist die abgeleitete Klasse, man sagt auch A ist eine Unterklasse (sub-class) und B ist die Oberklasse (super class) alle Methoden von B sind somit in A und über A-Objekte verwendbar A kann Methoden von B durch eigene (passendere) Methoden mit der gleichen Signatur überschreiben von einer Klasse B können beliebig viele Klassen abgeleitet werden eine Klasse A kann nur von einer Klasse erben (single inheritance) in einem Konstruktor von A wird implizit der argumentlose Konstruktor von B aufgerufen super() andere Konstruktoren können explizit mit super(...) (als erste Anweisung) angesprochen werden alle Klassen erben implizit von Object durch endgültige Klassen (final class) lässt sich die Vererbung / Ableitung verhindern Programmierkurs I (HTML, CSS, Java) - 69

70 Java, Vererbung Vererbung UML Diagramm public class Vererbung { public static void main(string[] args) { B1 b = new B1(); System.out.println("b = " + b); B1.method(); b.objmethod(); A1 a = new A1(); System.out.println("a = " + a); a.objmethod(); a.andere(); b = a; System.out.println("b = " + b); b.objmethod(); //b.andere(); // Fehler Programmierkurs I (HTML, CSS, Java) - 70

71 Java, Vererbung C1 c = new C1(); System.out.println("c = " + c); C1.method(); c.objmethod(); D1 d = new D1(); System.out.println("d = " + d); d.andere(); b = c; System.out.println("b = " + b); b = d; System.out.println("b = " + b); class B1 { static void method() { void objmethod() { public String tostring() { return "ich bin ein B1"; class A1 extends B1 { void andere() { public String tostring() { return "ich bin ein A1"; class C1 extends B1 { public String tostring() { return "ich bin ein C1"; class D1 extends A1 { public String tostring() { return "ich bin ein D1"; Überschreiben Eine Methode in A implementiert eine Methode mit gleicher Schnittstelle von B, aber mit anderer Bedeutung (Semantik) (overriding). Auch virtuelle Vererbung und virtuelle Methoden genannt im Gegensatz zu realer Vererbung (oben). es gelte class A extends B {... gleiche Schnittstelle: d.h. gleiche Signatur (Name, Anzahl und Typ der Parameter) das reale Objekt entscheidet über die Bedeutung der Methode, nicht der Typ der Objektvaraiblen die Auswahl der realen Methode erfolgt erst zur Laufzeit, nicht bei der Kompilierung (dynamische Bindung, dynamic/late binding) Programmierkurs I (HTML, CSS, Java) - 71

72 Java, Vererbung z.b. tostring() konvertiert immer das reale Objekt in eine Zeichenkette das Überschreiben lässt sich durch endgültige Methoden (final) verhindern,?? Klassenmethoden (static) lassen sich nicht Überschreiben?? durch das Ableiten einer Klasse wird implizit das Versprechen abgegeben (Kontrakt vereinbart), dass sich Objekte, die auf die Basisklasse reduziert werden genau so verhalten wie Objekte der Basisklasse Ueberschreiben UML Diagramm public class Ueberschreiben { public static void main(string[] args) { B2 b = new B2(); System.out.println("b = " + b); B2.method(); System.out.println("b.objmethod() = " + b.objmethod()); A2 a = new A2(); System.out.println("a = " + a); System.out.println("a.objmethod() = " + a.objmethod()); b = a; System.out.println("b = " + b); System.out.println("b.objmethod() = " + b.objmethod()); Programmierkurs I (HTML, CSS, Java) - 72

73 Java, Vererbung class B2 { static void method() { String objmethod() { return "von B2"; public String tostring() { return "ich bin ein B2"; class A2 extends B2 { static void method() { String objmethod() { return "von A2"; void andere() { public String tostring() { return "ich bin ein A2"; Typanpassungen es gelte wieder class A extends B {... Ausweitung (widening): von der abgeleiteten Klasse zur Basisklasse B b = new A(), auch Aufwärtsanpassung genannt Verengung (narrowing): von der Basisklasse zu einer abgeleiteten Klasse A a = (A) b nur mit explizitem Typecast, auch Abwärtsanpassung genannt falls die Verengung nicht möglich ist wird eine ClassCastException ausgelöst mit Hilfe von instanceof lässt sich testen ob ein Objekt zu einer bestimmten (abgeleiteten) Klasse gehört, if (b instanceof A) ((A) b).method(); Programmierkurs I (HTML, CSS, Java) - 73

74 Java, Vererbung Anpassung UML Diagramm public class Anpassung { public static void main(string[] args) { B3 b = new B3(); System.out.println("b = " + b); A3 a = new A3(); System.out.println("a = " + a); b = a; System.out.println("b = " + b); if (b instanceof A3) a = (A3) b; System.out.println("a = " + a); ((A3) b).andere(); class B3 { void objmethod() { public String tostring() { return "ich bin ein B3"; class A3 extends B3 { Programmierkurs I (HTML, CSS, Java) - 74

75 Java, Vererbung void andere() { public String tostring() { return "ich bin ein A3"; Beispiel Autos Wir definieren eine einfache Klasse für Autos (Car). Man kann mit dieser Klasse ein Auto mit den Parametern Modell (model), Baujahr (year) und (Neu-)Preis (price) definieren. Cars UML Diagramm Die Klassen-Methoden getmodel(), getyear() und getprice() dienen dem Zugriff auf die Objekt-Variablen. Programmierkurs I (HTML, CSS, Java) - 75

76 Java, Vererbung public class Car { String model; int year; int price; public Car(String m, int y, int p) { model = m; year = y; price = p; public String getname() { return model+" [year="+year+"]"; public int getprice() { return price; public static void main(string[] args) { Car ford = new Car("ford bronco", 1992, 35000); Car vw = new Car("vw golf", 1984, 25000); System.out.println( ford.getname()+" costs "+ford.getprice()); System.out.println( vw.getname()+" costs "+vw.getprice()); Mit dieser Klasse kann man zum Beispiel die Objekte ford und vw erzeugen. Dies ergibt dann folgende Ausgabe. ford bronco [year=1992] costs vw golf [year=1984] costs Mit dem Schlüsselwort extends kann man eine Klasse von einer anderen Klasse ableiten. Als Beispiel einer abgeleiteten Klasse von Car sei die Klasse Gebrauchtwagen (UsedCar) definiert, die den zusätzlichen Parameter `gefahrene Kilometer' (mileage) hat. public class UsedCar extends Car { int mileage; public UsedCar(String m, int y, int p, int k) { super(m, y, p); mileage = k; public String getname() { return super.getname()+" (mileage="+mileage+")"; public int getmileage() { return mileage; public int getprice() { return 10000*price/(mileage+10000); Die Methode getmilage() dient wieder dem Zugriff auf die Klassen-Parameter. Der Konstruktor für UsedCar ruft mit super(m, y, p) den Konstruktor der Basisklasse auf, dann wird der Parameter mileage gesetzt. Die Methode getprice() überschreibt die Methode mit dem gleichen Namen und der gleichen Signatur (d.h. der gleichen Art und Anzahl der Parameter) von der Basisklasse. getprice() berechnet in dieser Klasse den Gebrauchtwagenpreis in Abhängigkeit von der gefahrenen Kilometerzahl. Mit diesen Klassen kann man dann zum Beispiel in dem Hauptprogramm main die folgenden Beziehungen definieren und ausdrucken. Programmierkurs I (HTML, CSS, Java) - 76

77 Java, Vererbung public static void main(string[] args) { Car cars[] = new Car[4]; cars[0] = new Car("ford bronco", 1992, 35000); cars[1] = new UsedCar("ford bronco", 1992, 35000, 8000); cars[2] = new Car("vw golf", 1984, 25000); cars[3] = new UsedCar("vw golf", 1984, 25000, 20000); for (int i=0; i<4; i++) System.out.println(cars[i].getName() +" costs "+cars[i].getprice()); Als Ausgabe erhält man zum Beispiel. java UsedCar ford bronco [year=1992] costs ford bronco [year=1992] (mileage=8000) costs vw golf [year=1984] costs vw golf [year=1984] (mileage=20000) costs 8333 Interface Eine Java-Klasse ist nur von einer anderen Klasse ableitbar. Java kennt keine Mehrfachvererbung (multiple inheritance). Aber mit dem Sprachkonstrukt interface kann eine Klasse mehrere Methodensignaturen implementieren (erben). Ein Interface deklariert nur abstrakte Methoden. Zum Beispiel kann man ein Interface Rank definieren, das das Vergleichen zweier Objekte erlaubt. compare() gibt eine positive ganze Zahl zurück, falls dieses Objekt (this) in der implementierten Ordnung vor dem anderen Objekt (obj) steht. Programmierkurs I (HTML, CSS, Java) - 77

78 Java, Vererbung Ranks UML Diagramm public interface Rank { public int compare(rank obj) throws RankException; Ist die implementierte Ordnung nicht total, so wird für unvergleichbare Objekte eine RankException ausgelöst. public class RankException extends RuntimeException { Eine Subklasse von Rectangle (aus java.awt), die dieses Interface unterstützt, kann man wie folgt definieren. public class RankedRect extends Rect implements Rank { public RankedRect(int w, int h) { super(w,h); Programmierkurs I (HTML, CSS, Java) - 78

79 Java, Vererbung public int compare(rank obj) throws RankException { try { return area() - ((Rect)obj).area(); catch (ClassCastException e) { throw new RankException(); In einer ähnlichen Weise kann man eine Subklasse von Car definieren. public class RankedCar extends Car implements Rank { public RankedCar(String m, int y, int p) { super(m,y,p); public int compare(rank obj) { try { return getprice()-((car)obj).getprice(); catch (ClassCastException e) { throw new RankException(); Diese beiden Klassen können behandelt werden, als ob sie vom Typ Rank wären. Zum Beispiel als Argument in einer Methode foo(rank obj). Eine Klasse kann mehrere Interfaces implementieren. Bei der Erzeugung von Objekten von Klassen, die ein Interface implementieren, kann man die Struktur, die nicht von dem Interface stammt, ignorieren. Rank r = new RankedCar(model, year, price); Dann ist aber nur noch die Verwendung der Methode r.compare(.) möglich und nicht mehr r.getmodel(). Um dennoch getmodel() zu verwenden, muß erst ein Cast (eine Typenanpassung) auf RankedCar gemacht werden: ( (RankedCar) r ).getmodel() Abstrakte Klassen Man kann eine Klasse definieren, die keine vollständige Implementierung der deklarierten Methoden enthält. Diese kann man sich als Mischform zwischen einem Interface und einer richtigen Klasse vorstellen. Ein Teil der Methoden wird implementiert, und für einen anderen Teil der Methoden werden nur die Spezifikationen (das Interface) festgelegt. Cell UML Diagramm Eine solche Klasse wird als abstrakte Klasse bezeichnet und muß mit dem Schlüsselwort abstract gekennzeichnet werden. public abstract class Cell { Programmierkurs I (HTML, CSS, Java) - 79

80 Java, Vererbung int size; public int getsize() { return size; public abstract void interact(cell neighbor); Aus abstrakten Klassen können können keine Objekte erzeugt werden. Aus einer Subklasse, die die fehlenden Implementationen definiert, können Objekte erzeugt werden. Beispiel: BitString Programmierkurs I (HTML, CSS, Java) - 80

81 Java, Vererbung Programmierkurs I (HTML, CSS, Java) - 81

82 Java, Vererbung BitString UML Diagramm Interface: BitStringInterface Methoden: tostring() und tobitstring() liefern die entsprechende Darstellung als Binärfolge. public interface BitStringInterface { public String tostring(); public String tobitstring(); Abstrakte Klasse: AbstractBitString Methoden: tostring() wird mit Hilfe von tobitstring() implementiert. public abstract class AbstractBitString implements BitStringInterface { protected int art; final static int BYTE final static int SHORT final static int INT final static int LONG final final final final static static static static byte byte byte byte = = = = 1; 2; 3; 4; BYTEsize SHORTsize INTsize LONGsize = 7; = 15; = 31; = 63; protected long ls = 0; public String tostring() { return tobitstring(); public abstract String tobitstring(); Klasse: BitStringSign Darstellung von ganzen Zahlen als Binärfolge. Die Zahlen werden als Paare von Vorzeichen und positiven Zahlen dargestellt. Konstruktoren: für byte, short, int und long, Methoden: tobitstring() liefert Zeichenkette entsprechend dem Datentyp. bitstringsign() liefert Zeichenkette entsprechend der 'Vorzeichen, Grösse'-Darstellung. public class BitStringSign extends AbstractBitString { public BitStringSign(byte b) { art = BYTE; ls = b; public BitStringSign(short s) { art = SHORT; ls = s; public BitStringSign(int s) { art = INT; ls = s; Programmierkurs I (HTML, CSS, Java) - 82

83 Java, Vererbung public BitStringSign(long s) { art = LONG; ls = s; public String tobitstring() { switch (art) { case BYTE: return bitstringsign(bytesize,ls); case SHORT: return bitstringsign(shortsize,ls); case INT: return bitstringsign(intsize,ls); case LONG: return bitstringsign(longsize,ls); default: return ""+ls; protected static String bitstringsign(byte l, long b) { String e = ""; long x = 0; String s = ""; byte einz = (byte)1; if (b < 0L ) { x = (long)-b; s = "1"; else { x = (long)b; s = "0"; for (int i = 0; i < l; i++) { // (x % 2) == 0 if ( ( ((byte)x) & einz) == 0 ) { e = "0" + e; else { e = "1" + e; x = (long)(x >> 1); return s+e; Klasse: BitStringComplement Darstellung von ganzen Zahlen als Binärfolge. Die Zahlen werden im Zweier-Komplement dargestellt. Konstruktoren: für byte, short, int und long, Methoden: tobitstring() liefert Zeichenkette entsprechend dem Datentyp. bitstringcomplement() liefert Zeichenkette entsprechend der Komplement-Darstellung. public class BitStringComplement extends AbstractBitString { public BitStringComplement(byte b) { art = BYTE; ls = b; public BitStringComplement(short s) { art = SHORT; ls = s; public BitStringComplement(int s) { art = INT; ls = s; public BitStringComplement(long s) { art = LONG; ls = s; Programmierkurs I (HTML, CSS, Java) - 83

84 Java, Vererbung public String tobitstring() { switch (art) { case BYTE: return bitstringcomplement(bytesize,ls); case SHORT: return bitstringcomplement(shortsize,ls); case INT: return bitstringcomplement(intsize,ls); case LONG: return bitstringcomplement(longsize,ls); default: return ""+ls; protected static String bitstringcomplement(byte l, long b) { String e = ""; long x = b; byte einz = (byte)1; for (int i = 0; i < l+1; i++) { // (x % 2) == 0 if ( ( ((byte)x) & einz) == 0 ) { e = "0" + e; else { e = "1" + e; x = (long)(x >> 1); return e; Klasse: BitTest Testen der zwei Darstellungen. Es werden Objekte von BitStringSign und BitStringComplement erzeugt. Diese Objekte können in Variablen der entsprechenden Klassen abgespeichert werden, aber auch in Variablen vom Typ BitStringInterface als auch von Typ AbstractBitString. public class BitTest { public static void main(string[] args) { test1(); test2(); test3(); test4(); static void test1() { BitStringInterface a = new BitStringSign((int)7); System.out.println("sign( 7) = " + a); BitStringInterface b = new BitStringComplement((int)7); System.out.println("cmpl( 7) = " + b); BitStringInterface g = new BitStringSign((int)-7); System.out.println("sign( -7) = " + g); BitStringInterface h = new BitStringComplement((int)-7); System.out.println("cmpl( -7) = " + h); BitStringInterface d = new BitStringSign((short)32767); System.out.println("sign( 32767) = " + d); BitStringInterface c = new BitStringComplement((short)32767); System.out.println("cmpl( 32767) = " + c); AbstractBitString e = new BitStringSign((int)-32767); System.out.println("sign(-32767) = " + e); AbstractBitString f = new BitStringComplement((int)-32767); System.out.println("cmpl(-32767) = " + f); System.out.println(); static void test2() { Programmierkurs I (HTML, CSS, Java) - 84

85 Java, Vererbung short x = -1; for (byte l = 0; l <= 15; l++ ) { BitStringInterface g = new BitStringSign((short)x); System.out.println("sign( "+ x + ") = " + g); x *= (short)2; System.out.println(); static void test3() { short x = -1; for (byte l = 0; l <= 15; l++ ) { AbstractBitString h = new BitStringComplement((short)x); System.out.println("cmpl( "+ x + ") = " + h); x *= (short)2; System.out.println(); static void test4() { short x = -1; for (byte l = 0; l <= 15; l++ ) { System.out.println("Integer( "+ x + ") = " + Integer.toBinaryString(x)); x *= (short)2; System.out.println(); Im letzten Test erfolgt ein Vergleich mit der 'eingebauten' Funktion Integer.toBinaryString(x)) Ausgabe: sign( 7) cmpl( 7) sign( -7) cmpl( -7) sign( 32767) cmpl( 32767) sign(-32767) cmpl(-32767) = = = = = = = = sign( sign( sign( sign( sign( sign( sign( sign( sign( sign( sign( sign( sign( sign( sign( sign( -1) = ) = ) = ) = ) = ) = ) = ) = ) = ) = ) = ) = ) = ) = ) = ) = cmpl( cmpl( cmpl( cmpl( cmpl( cmpl( cmpl( cmpl( cmpl( cmpl( -1) = ) = ) = ) = ) = ) = ) = ) = ) = ) = Programmierkurs I (HTML, CSS, Java) - 85

86 Java, Vererbung cmpl( cmpl( cmpl( cmpl( cmpl( cmpl( -1024) = ) = ) = ) = ) = ) = Integer( Integer( Integer( Integer( Integer( Integer( Integer( Integer( Integer( Integer( Integer( Integer( Integer( Integer( Integer( Integer( -1) = ) = ) = ) = ) = ) = ) = ) = ) = ) = ) = ) = ) = ) = ) = ) = Vergleiche auch die Hüll-Klassen java.lang.integer und java.lang.long. Für die Klassen java.lang.byte und java.lang.short existieren keine vergleichbaren Methoden. Universität Mannheim, Rechenzentrum, Programmierkurs I (HTML, CSS, Java) - 86

87 Java, Packages 11. Java, Packages Packages und Ausnahmen Packages Umfang der JDKs Sichtbarkeit Ausnahmen Packages Ein Package (Paket) enthält eine oder mehrere Klassen, die sich einen Geltungsbereich (Namespace) für Klassen teilen. Klassennamen brauchen nur innerhalb eines Packages eindeutig zu sein. Dies vermeidet mögliche Namenskonflikte zwischen verschiedenen Klassen, die von der lokalen Festplatte oder über das Netz dynamisch geladen werden. Um eine Java-Datei einem Paket zuzuordnen, kann man an den Anfang der Datei eine package-anweisung schreiben. package game; Dies definiert das Package game, das die in der Datei definierten Klassen enthält. Falls die Datei keine package-anweisung enthält, werden die in der Datei definierten Klassen dem standardmäßigen namenlosen Package zugeordnet. Wenn man in einer Datei Klassen eines anderen Packages benutzen will, muß man den Klassennamen komplett mit Package-Namen angeben. Will man z.b. die Klasse Date im java.util-package benutzen, so wird dies wie im unten angeführten Beispiel getan. java.util.date d = new java.util.date(); System.out.println("today is: "+d); Die vollen Packagenamen können weggelassen werden, wenn die import-anweisung benutzt wird. import java.util.date;... Date d = new Date(); System.out.println("today is: "+d); Man kann auch mit * alle Klassennamen eines Packages oder alle Methoden und Variablen einer Klasse importieren. import java.util.*;... Date d = new Date(); System.out.println("today is: "+d);... Vector v = new Vector(); v.addelement("hello"); v.addelement("bye"); Das Package java.lang enthält die Basisklassen für Java und wird immer importiert. Deswegen kann man z.b. Object, System, Integer usw. ohne ihren Package-Namen java.lang benutzen. Umfang der JDKs Das Java-API (Application Programming Interface) (JDK-1.0) besteht aus den Klassen, die in den folgenden acht Packages Programmierkurs I (HTML, CSS, Java) - 87

88 Java, Packages definiert sind: java.applet java.awt java.awt.image java.awt.peer java.io java.lang java.net java.util Bei dem Java-1.1-API (JDK-1.1) haben sich die genannten Packages leicht geändert und es sind die folgenden Packages hinzu gekommen: java.beans java.event java.math java.rmi java.sql java.text java.util.zip Komponenten Bei dem Java-2-API (JDK-1.2) kommen neben vielen Erweiterungen und Verbesserungen vorhandener Pakete, unter anderem folgende Pakete hinzu: java.security java.awt.swing java.awt.accessability java.lang.ref interact with CG java.lang.reflect java.util.jar javax.swing javax.servlet org.omg.corba Bei dem Java-2-API (JDK-1.3) kommen neben Erweiterungen zum JDK-1.2 und Verbesserungen vorhandener Pakete, unter anderem folgende Pakete hinzu: java.geom javax.naming javax.sound org.omg.corba_2_3 2D Grafik JNDI Bei dem Java-2-API (JDK-1.4) kommen neben Erweiterungen zum JDK-1.3 und Verbesserungen vorhandener Pakete, unter anderem folgende Pakete hinzu: java.nio javax.xml org.w3c org.xml org.ietf.jgss javax.net.ssl javax.imageio new I/O XML W3C DOM SAX security Code-Umfang der JDKs Abbildung: Lines-of-Code der JDKs was \ JDK Version lines of Java code words in Java code bytes in src-dir 1.0 MB 7.0 MB 20.0 MB 24.0 MB 48.0 MB Programmierkurs I (HTML, CSS, Java) - 88

89 Java, Packages public class or interface directories / packages see for ( ) if ( ) while ( ) switch ( ) try { catch ( ) throw new boolean long float double public private protected abstract class int /** comments */, see 2 Bemerkungen: 1. ohne Namen zu normalisieren und nur die genannten 2. d.h. öffentliche mit javadoc dokumentierte Objekte Die Zahlen wurden im wesentlichen mit grep pattern cat.java wc ermittelt. Die Datei cat.java wurde mit find src-dir -name "*.java" xargs cat > cat.java erzeugt. Daneben gibt es in den jeweiligen JDKs noch viele class-dateien ohne java-dateien, wo also der Source-Code nicht bekannt ist. Zugriff und Sichtbarkeit Eine als public deklarierte Klasse ist in allen Packages zugreifbar. Auf eine nicht als public deklarierte Klasse kann nur innerhalb desselben Package zugegriffen werden. Zur Verdeutlichung der Konzepte betrachten wir folgende Beispiele: public class A public protected private /*default*/ { int int int int pb; pt; pv; df; public class B extends A { A a = new A(); /* 1 */ public class C { Programmierkurs I (HTML, CSS, Java) - 89

90 Java, Packages A a = new A(); /* 2 */ An der Stelle /* 1 */ gilt folgendes: falls A und B im gleichen Package sind, sind pb, pt, df sowie a.pb, a.pt, a.df sichtbar falls A und B in verschiedenen Packages sind, sind pb, pt und a.pb sichtbar An der Stelle /* 2 */ gilt: falls A und C im gleichen Package sind, sind a.pb, a.pt, a.df sichtbar falls A und C in verschiedenen Packages sind, ist nur a.pb sichtbar Abbildung 1.2: Java-Sichtbarkeit Sichtbarkeit public protected default package private Klasse/Objekt definierende Klasse ja ja ja ja gleiches Package ja ja ja nein anderes Package ja nein nein nein gleiches Package ja ja ja nein anderes Package ja ja nein nein Vererbung Auf public-felder (Variablen oder Methoden) kann in allen Packages und Subklassen zugegriffen werden, solange die Klasse selbst zugreifbar ist. Auf protected-felder kann in Subklassen der Klasse und in allen Klassen im gleichen Package zugegriffen werden. private-felder sind dagegen nur in derselben Klasse zugreifbar. Diese Beziehungen sind nochmal in Abbildung 1.2 zusammengefaßt. Konstanten Konstante Variablen können mit dem Schlüsselwort final deklariert werden. Diese können dann nicht mehr geändert werden. public final static String DEFAULT = "dpunkt"; Im Gegensatz zu C oder C++ gibt es keinen Preprozessor, der Konstanten substituieren kann (z.b. kein #define). Final-Klassen Von Klassen, die mit dem Schlüsselwort final deklariert sind, können keine Klassen abgeleitet werden. Dies dient zum einen dazu, unerwünschte Ableitungen zu verhindern, wie zum Beispiel bei system-nahen Klassen java.lang.system. Und sie dienen zum anderen dazu, dem Compiler Hinweise für die Optimierung zugeben, denn es müssen dann keine Vorkehrungen zum Überschreiben dieser Methoden getroffen werden. Ausnahmebehandlung Ein Ausnahmefehler (Exception) ist ein Signal, das irgendeinen Fehler andeutet. Man kann eine Exception durch throw auslösen und durch catch abfangen. Ein neues Exception-Objekt wird wie üblich mit new erzeugt. Java unterscheidet im Wesentlichen drei Arten von Ausnahmen, die alle von der Klasse java.lang.throwable abgeleitet sind: Exception: Für eine Anwendung wichtige Informationen, die für die weitere Verarbeitung entsprechend behandelt werden sollte. Der Programmierkurs I (HTML, CSS, Java) - 90

91 Java, Packages Compiler achtet darauf, dass Exceptions behandelt oder weitergereicht werden. RuntimeException Ebenfalls wichtige Information, die bei Bedarf der Anwendung behandelt werden kann oder zum Abbruch der Anwendung führen sollte. Sie werden vom Compiler nicht explizit beachtet. Error Unvorhergesehener Fehler, der in der Regel zum Abbruch der Anwendung führen sollte. Sie werden vom Compiler nicht explizit beachtet. Falls eine Exception nicht in der Methode abgefangen wird, wird sie in die Methode weitergeleitet, die diese Methode aufgerufen hat. Dies ermöglicht bessere und einfachere Fehlerbehandlung. Jede Methode in Java muß Exceptions entweder explizit abfangen oder weiterleiten. Zum Abfangen kann man try und catch wie folgt benutzen. try { // open a file... // read data... catch (IOException e) { System.out.println("Couldn't write"); // do the clean up, e.g. closing the file Die vollständige Syntax dieser Anweisungsfolge ist: try { // statements possibly generating // Exception_1 or Exception_2 catch (Exception_1 // statements catch (Exception_2 // statements... finally { // statements e) { handling Exception_1 e) { handling Exception_2 cleaning up for all the cases Der finally-block wird unabhängig vom Auftreten von Ausnahmen zum Schluß ausgeführt. Zum Weiterleiten von Ausnahmen kann man das throws-schlüsselwort benutzen. throws wird zwischen dem Methodenkopf und dem Methodenrumpf zusammen mit einer Aufzählung aller in Frage kommenden Ausnahmen eingefügt. Zum Auslösen von Ausnahmen verwendet man das throw-schlüsselwort. public void getinputdata() throws MyException {... if (notok) { throw new MyException();... Zur Definition einer Ausnahme wird eine Subklasse von java.lang.exception gebildet. class MyException extends Exception { public MyException() {...; public MyException(String msg) {...; java.lang.exception ist eine direkte Subklasse von java.lang.throwable: public class Exception Programmierkurs I (HTML, CSS, Java) - 91

92 Java, Packages extends Throwable implements Serializable Exception() Exception(String message) Exception(String message, Throwable cause) Exception(Throwable cause) Throwable getcause() Throwable initcause(throwable cause) String getmessage() void printstacktrace() Beispiele: public class Ausnahmen { public void exception() throws NumberFormatException { int n = 0; try { // versuche irgendwelche Methodenaufrufe, die // Ausnahmen produzieren koennen catch (IndexOutOfBoundsException e1) { // Fehlerbehandlung // meist Ausgabe einer Fehlermeldung // das Programm arbeitet dann weiter // nach dem letzten catch-block catch (Exception e2) { // hier werden alle Ausnahmen abgefangen // die nicht schon vorher behandelt // wurden finally { // dieser Block ist optional, er wird nach // jedem Verlassen des try-blocks ausgefuehrt if (n < 0) throw new NumberFormatException("Die Variable n enthaelt"+ " einen Wert kleiner als 0!"); Universität Mannheim, Rechenzentrum, Programmierkurs I (HTML, CSS, Java) - 92

93 Java, Ströme 12. Java, Ströme Ein- und Ausgabe Ströme String, StringBuffer Math Datenströme System Objekt-Ströme String, StringBuffer Zeichenketten mit der Klasse String. Diese Objekte sind 'immutable', d.h. sie werden nie modifiziert, sondern immer neu erzeugt. public final class String extends Object implements Serializable, Comparable String() String(String) String(StringBuffer) String(char[]) char charat(int) int compareto(string) // returns -1, 0, +1 String concat(string) boolean endswith(string) boolean equals(object) boolean equalsignorecase(string) void getchars(int srcb, int srce, char[] dst, int dstb) int indexof(string) int length() String replace(char alt, char neu) boolean startswith(string) String substring(int von) String substring(int von, int bis) char[] tochararray() String tolowercase(. ) String touppercase(. ) String trim() String valueof(. ) Programmierkurs I (HTML, CSS, Java) - 93

94 Java, Ströme String UML Diagramm Zeichenketten mit der Klasse StringBuffer. Diese Objekte sind veränderbar. public final class StringBuffer extends Object implements Serializable StringBuffer() StringBuffer(String) Programmierkurs I (HTML, CSS, Java) - 94

95 Java, Ströme StringBuffer(int) char charat(int) void getchars(int srcb, int srce, char[] dst, int dstb) int capacity() int length() void setcharat(int, char) void setlength(int) StringBuffer StringBuffer StringBuffer StringBuffer append(. ) insert(int,. ) delete(int, int) deletecharat(int) // // // // returns returns returns returns this this this this StringBuffer reverse() // returns this String substring(int von) String substring(int von, int bis) StringBuffer UML Diagramm Math Die Klasse Math stellt eine Reihe von nützlichen Konstanten und Methoden zur Verfügung. Programmierkurs I (HTML, CSS, Java) - 95

96 Java, Ströme public final class Math extends Object double E double Pi t abs( t ) t max( t, t ) t min( t, t ) acos, asin, atan, atan2, cos, exp, log, sin, sqrt, tan ceil, floor, double pow(double, double) double random() int round(float) long round(double) Hüllklassen: Byte, Short, Integer und Long, so wie Float und Double. Super-Klasse: Number Langzahl Arithmetik in java.lang.number: BigInteger und BigDecimal. Datenströme Programmierkurs I (HTML, CSS, Java) - 96

97 Java, Ströme Datenströme Sämtlicher expliziter Datenaustausch in und aus der JVM (Java Virtual Machine) ist in sogenannte Datenströme organisiert: Character Ströme Byte Ströme Object Ströme Character Ströme Programmierkurs I (HTML, CSS, Java) - 97

98 Java, Ströme Byte Ströme Typische verfügbare Methoden: read() (lesen vom Datenstrom), write() (schreiben in den Datenstrom), close() (Datenstrom schliessen) Beispiel: Lesen von der Tastatur, Schreiben auf den Bildschirm import java.io.printwriter; import java.io.outputstreamwriter; public class Screen extends PrintWriter { public Screen() { super(new OutputStreamWriter(System.out),true); import java.io.bufferedreader; import java.io.inputstreamreader; public class KeyBoard extends BufferedReader { public KeyBoard() { Programmierkurs I (HTML, CSS, Java) - 98

99 Java, Ströme super(new InputStreamReader(System.in)); Screen und KeyBoard import java.io.ioexception; public class Terminal { public static void main(string[] args) { KeyBoard kb = new KeyBoard(); Screen sc = new Screen(); String ea = ""; try { sc.println( "Beenden mit 'ende'"); do { sc.print( "Bitte um Eingabe: "); sc.flush(); ea = kb.readline(); sc.println("eingabe ist "+ea); if ( ea == null ) break; while (!ea.equals("ende") ); catch (IOException e) { e.printstacktrace(); Programmierkurs I (HTML, CSS, Java) - 99

100 Java, Ströme Beispiel: lesen und schreiben von Dateien import java.io.bufferedreader; import java.io.filereader; import java.io.filenotfoundexception; public class DateiEin extends BufferedReader { public DateiEin(String name) throws FileNotFoundException { super(new FileReader(name)); import java.io.printwriter; import java.io.filewriter; import java.io.ioexception; public class DateiAus extends PrintWriter { public DateiAus(String name) throws IOException { super(new FileWriter(name)); Datei Ein- und Ausgabe import java.io.ioexception; Programmierkurs I (HTML, CSS, Java) - 100

101 Java, Ströme import java.io.filenotfoundexception; public class Dateien { public static void main(string[] args) { Screen sc = new Screen(); if ( args.length < 1 ) { sc.println("usage: Dateien <eingabe datei> [<ausgabe datei>]"); return; DateiEin rein; DateiAus raus = null; try { rein = new DateiEin(args[0]); catch (FileNotFoundException e) { sc.println("die Datei " + args[0] + " existiert nicht."); return; if ( args.length >= 2 ) { try { raus = new DateiAus(args[1]); catch (IOException e) { sc.println("die Datei " + args[1] + " ist nicht beschreibbar."); String ea = ""; int ein = 0; int aus = 0; try { do { ea = rein.readline(); if ( ea == null ) break; ein++; if ( raus == null ) { sc.println(ea); else { raus.println(ea); aus++; while (!ea.equals("ende") ); catch (IOException e) { e.printstacktrace(); finally { if ( raus!= null ) raus.flush(); try { rein.close(); if ( raus!= null ) raus.close(); catch (IOException e) { e.printstacktrace(); sc.println(""+ein+" Zeilen von " + args[0] + " gelesen"); if ( args.length >= 2 ) sc.println(""+aus+" Zeilen auf " + args[1] + " geschrieben"); Benutzung: Programmierkurs I (HTML, CSS, Java) - 101

102 Java, Ströme java Dateien DateiA [DateiB] Beispiel: Anhängen an Dateien import java.io.printwriter; import java.io.filewriter; import java.io.ioexception; public class DateiDran extends PrintWriter { public DateiDran(String name) throws IOException { super(new FileWriter(name, true)); public DateiDran(String name, boolean append) throws IOException { super(new FileWriter(name, append)); import java.io.ioexception; import java.io.filenotfoundexception; public class Anhang { public static void main(string[] args) { Screen sc = new Screen(); if ( args.length < 2 ) { sc.println("usage: Anhang <eingabe datei> <ausgabe datei>"); return; DateiEin rein; DateiDran dran; try { rein = new DateiEin(args[0]); catch (FileNotFoundException e) { sc.println("die Datei " + args[0] + " existiert nicht."); return; try { dran = new DateiDran(args[1]); catch (IOException e) { sc.println("die Datei " + args[1] + " ist nicht beschreibbar."); return; String ea = ""; int ein = 0; int aus = 0; try { do { ea = rein.readline(); // sc.println("eingabe: "+ea); if ( ea == null ) break; ein++; dran.println(ea); aus++; while (!ea.equals("ende") ); catch (IOException e) { e.printstacktrace(); finally { Programmierkurs I (HTML, CSS, Java) - 102

103 Java, Ströme dran.flush(); try { rein.close(); dran.close(); catch (IOException e) { e.printstacktrace(); sc.println(""+ein+" Zeilen von " + args[0] + " gelesen"); sc.println(""+aus+" Zeilen auf " + args[1] + " geschrieben"); Benutzung: java Anhang DateiA DateiB Beispiel: Lesen im Netzwerk import import import import java.io.bufferedreader; java.io.inputstreamreader; java.io.ioexception; java.net.url; public class URLEin extends BufferedReader { public URLEin(String url) throws IOException { super(new InputStreamReader( (new URL(url)).openStream() ) ); import java.io.ioexception; public class URLs { public static void main(string[] args) { Screen sc = new Screen(); if ( args.length < 1 ) { sc.println("usage: Dateien <eingabe url> [<ausgabe datei>]"); return; URLEin rein; DateiAus raus = null; try { rein = new URLEin(args[0]); catch (IOException e) { sc.println("von URL " + args[0] + " kann nicht gelesen werden."); return; if ( args.length >= 2 ) { try { raus = new DateiAus(args[1]); catch (IOException e) { sc.println("die Datei " + args[1] + " ist nicht beschreibbar."); Programmierkurs I (HTML, CSS, Java) - 103

104 Java, Ströme return; String ea = ""; int ein = 0; int aus = 0; try { do { ea = rein.readline(); if ( ea == null ) break; ein++; if ( raus!= null ) { raus.println(ea); else { sc.println(ea); aus++; while (!ea.equals("ende") ); catch (IOException e) { e.printstacktrace(); finally { if ( raus!= null ) raus.flush(); try { rein.close(); if ( raus!= null ) raus.close(); catch (IOException e) { e.printstacktrace(); sc.println(""+ein+" Zeilen von " + args[0] + " gelesen"); sc.print(""+aus+" Zeilen"); if ( args.length >= 2 ) sc.print(" auf "+args[1]); sc.println(" geschrieben"); Benutzung: java URLs [Datei] System Die Klasse System stellt eine Reihe von Variablen und Klassen-Methoden zum plattform-unabhängigen Zugriff auf das Computersystem zur Verfügung. public final class System extends Object PrintStream err InputStream in PrintStream out void seterr(printstream) void setin(inputstream) void setout(printstream) void arraycopy(object, int, Object, int, int len) long currenttimemillis() // Zeit seit 1. Jan 1970 Programmierkurs I (HTML, CSS, Java) - 104

105 Java, Ströme void exit(int) void gc() Properties getproperties() String getproperty(string) String getproperty(string, String) void setproperties(properties) SecurityManager getsecuritymanager() void setsecuritymanager(securitymanager) System UML Diagramm Objekt-Ströme import java.io.objectinputstream; import java.io.fileinputstream; import java.io.ioexception; public class ObjectEin extends ObjectInputStream { public ObjectEin(String name) throws IOException { super(new FileInputStream(name)); Programmierkurs I (HTML, CSS, Java) - 105

106 Java, Ströme import java.io.objectoutputstream; import java.io.fileoutputstream; import java.io.ioexception; public class ObjectAus extends ObjectOutputStream { public ObjectAus(String name) throws IOException { super(new FileOutputStream(name)); ObjectStreams import java.io.ioexception; import java.io.filenotfoundexception; import java.io.optionaldataexception; public class Objekte { public static void main(string[] args) { Screen sc = new Screen(); KeyBoard kb = new KeyBoard(); final int MAX = 100; String[] data = null; if ( args.length < 1 ) { sc.println("usage: Dateien <speicher datei>"); return; Programmierkurs I (HTML, CSS, Java) - 106

107 Java, Ströme ObjectEin rein = null; ObjectAus raus; try { rein = new ObjectEin(args[0]); catch (FileNotFoundException e) { sc.println("die Datei " + args[0] + " existiert nicht."); catch (IOException e) { sc.println("die Datei " + args[0] + " nicht lesbar."); if ( rein!= null ) { try { data = (String[]) rein.readobject(); rein.close(); catch (OptionalDataException e) { sc.println("zuviel Daten in Datei " + args[0]); catch (ClassNotFoundException e) { sc.println("zu lesende Klasse nicht bekannt in Datei " + args[0]+ ": "+e); catch (IOException e) { sc.println("lesefehler von Datei " + args[0]); if ( data == null ) { data = new String[MAX]; try { raus = new ObjectAus(args[0]); catch (IOException e) { sc.println("die Datei " + args[0] + " ist nicht beschreibbar."); return; String ea int zeile int ein = int aus = = ""; = -1; // leer 0; 0; sc.println("aktueller Inhalt von " + args[0]); for ( zeile = 0; zeile < MAX; zeile++ ) { if ( data[zeile] == null ) break; sc.println("" + zeile + ": " + data[zeile] ); // zeile zeigt jetzt auf einen freien Platz in data zeile--; sc.println(""+(zeile+1)+" Zeilen in " + args[0] + " enthalten\n"); try { sc.println( "Beenden mit 'ende'"); do { sc.print( "Bitte um Eingabe: "); sc.flush(); ea = kb.readline(); if ( ea == null ) break; if ( ea.equals("ende") ) break; ein++; sc.println("eingabe: "+(zeile+1)+": " +ea); zeile++; if ( zeile < MAX ) data[zeile] = ea; aus++; while (true); Programmierkurs I (HTML, CSS, Java) - 107

108 Java, Ströme catch (IOException e) { e.printstacktrace(); finally { try { raus.writeobject(data); raus.close(); catch (IOException e) { sc.println("fehler beim Schreiben auf Die Datei " + args[0]); sc.println(); sc.println(""+ein+" Zeile(n) von der Tastatur gelesen"); sc.println(""+aus+" Zeile(n) auf den Bildschirm geschrieben"); sc.println(""+(zeile+1)+" Zeile(n) nach " + args[0] + " geschrieben"); Benutzung: java Objekte xx Aktueller Inhalt von xx 0: a 1: b 2: c 3: ddddddddddddddd 4: e 5: f 6 Zeilen in xx enthalten Beenden mit 'ende' Bitte um Eingabe: 1 Eingabe: 6: 1 Bitte um Eingabe: 2 Eingabe: 7: 2 Bitte um Eingabe: 3 Eingabe: 8: 3 Bitte um Eingabe: 3 Zeile(n) von der Tastatur gelesen 3 Zeile(n) auf den Bildschirm geschrieben 9 Zeile(n) nach xx geschrieben Persistenz Dauerhafte nicht flüchtige Objekte Speichern der Objekte auf externen Datenträgern import java.io.ioexception; import java.io.filenotfoundexception; import java.io.optionaldataexception; public class PersObjekt { public final int MAX = 100; private String[] data = null; private String filename = "PersObjekt.temp"; private ObjectEin rein = null; private ObjectAus raus; private Screen sc = new Screen(); public PersObjekt(String filename) throws IOException { Programmierkurs I (HTML, CSS, Java) - 108

109 Java, Ströme if ( filename!= null ) if (!filename.equals("") ) filename = filename; restore(); if ( data == null ) { data = new String[MAX]; raus = new ObjectAus(fileName); protected void restore() throws IOException { try { rein = new ObjectEin(fileName); catch (FileNotFoundException e) { throw new IOException("Die Datei " + filename + " existiert nicht " + e); if ( rein!= null ) { try { data = (String[]) rein.readobject(); rein.close(); catch (OptionalDataException e) { throw new IOException("Zuviel Daten in Datei " + filename + e); catch (ClassNotFoundException e) { throw new IOException("Zu lesende Klasse nicht bekannt in Datei " + filename + e); protected void store() throws IOException { raus.writeobject(data); raus.close(); sc.println(filename + " geschrieben"); public String[] getdata() { return data; public void setdata(string[] d) { data = d; protected void finalize() throws IOException { store(); import java.io.ioexception; import java.io.filenotfoundexception; import java.io.optionaldataexception; public class Persistenz { public static void main(string[] args) throws IOException { Screen sc = new Screen(); KeyBoard kb = new KeyBoard(); PersObjekt pers = null; String pname = "PersObjekt.temp"; if ( args.length > 0 ) { pname = args[0]; Programmierkurs I (HTML, CSS, Java) - 109

110 Java, Ströme pers = new PersObjekt(pname); String[] data = pers.getdata(); String ea int zeile int ein = int aus = = ""; = -1; // leer 0; 0; sc.println("aktueller Inhalt von " + pname); for ( zeile = 0; zeile < pers.max; zeile++ ) { if ( data[zeile] == null ) break; sc.println("" + zeile + ": " + data[zeile] ); // zeile zeigt jetzt auf einen freien Platz in data zeile--; sc.println(""+(zeile+1)+" Zeilen in " + pname + " enthalten\n"); try { sc.println( "Beenden mit 'ende'"); do { sc.print( "Bitte um Eingabe: "); sc.flush(); ea = kb.readline(); if ( ea == null ) break; if ( ea.equals("ende") ) break; ein++; sc.println("eingabe: "+(zeile+1)+": " +ea); zeile++; if ( zeile < pers.max ) data[zeile] = ea; aus++; while (true); catch (IOException e) { e.printstacktrace(); finally { pers.setdata(data); // unnötig pers.store(); // pers = null; // System.gc(); // call finalize sc.println(); sc.println(""+ein+" Zeile(n) von der Tastatur gelesen"); sc.println(""+aus+" Zeile(n) auf den Bildschirm geschrieben"); Benutzung: java Persistenz xx Aktueller Inhalt von xx 0: a 1: b 2: c 3: ddddddddddddddd 4: e 5: f 6: 1 7: 2 8: 3 9 Zeilen in xx enthalten Beenden mit 'ende' Bitte um Eingabe: I Eingabe: 9: I Bitte um Eingabe: II Programmierkurs I (HTML, CSS, Java) - 110

111 Java, Ströme Eingabe: 10: II Bitte um Eingabe: III Eingabe: 11: III Bitte um Eingabe: IV Eingabe: 12: IV Bitte um Eingabe: ende xx geschrieben 4 Zeile(n) von der Tastatur gelesen 4 Zeile(n) auf den Bildschirm geschrieben Universität Mannheim, Rechenzentrum, Last modified: Sat Oct 23 16:36:40 CEST 2004 Programmierkurs I (HTML, CSS, Java) - 111

112 Java, Utilities 13. Java, Utilities Collection-Klassen, I18N Collection, Set, List Map Date Calendar DateFormat Locale ResouceBundle Collections Interfaces: java.util.collection java.util.list java.util.set java.util.sortedset java.util.map java.util.sortedmap java.util.iterator Klassen: java.util.linkedlist java.util.vector java.util.arraylist java.util.hashmap java.util.hashtable java.util.treemap Programmierkurs I (HTML, CSS, Java) - 112

113 Java, Utilities Collection, Set, List Collection: public interface Collection Programmierkurs I (HTML, CSS, Java) - 113

114 Java, Utilities public public public public boolean add(object o) boolean remove(object o) boolean contains(object o) Iterator iterator() Iterator: public interface Iterator public boolean hasnext() public Object next() List: Duplikate sind zugelassen public interface List extends Collection public public public public public boolean add(object o) Object get() boolean remove(object o) boolean contains(object o) Iterator iterator() Set: keine Duplikate enthalten public interface Set extends Collection public public public public boolean add(object o) boolean remove(object o) boolean contains(object o) Iterator iterator() Comparator: Vergleichsmethode bei Sorted* public interface Comparator int compare(object o1, Object o2) boolean equals(object obj) Programmierkurs I (HTML, CSS, Java) - 114

115 Java, Utilities Programmierkurs I (HTML, CSS, Java) - 115

116 Java, Utilities Map, SortedMap Map: (Schlüssel,Wert)-Paare public interface Map public public public public public public boolean put(object key, Object value) Object get(object key) boolean remove(object key) boolean containskey(object key) boolean containsvalue(object value) Set keyset() Objekte, die als Schlüssel (key) verwendet werden, müssen folgende Bedingungen erfüllen: equals() sollte für inhaltlich gleiche Objekte true liefern, d.h. equals() von Object muss in der Regel überschrieben werden denn das von Object geerbte equals() liefert nur für das selbe Objekt true hashcode() muss für Objekte, für die equals() wahr ist, auch die gleiche Zahl liefern d.h. falls a.equals(b) == true muss a.hashcode() == b.hashcode() sein denn das von Object geerbte hashcode() liefert nur für das selbe Objekt die gleiche int-zahl Beispiel: Konten als HashMap import import import import java.util.hashmap; java.util.iterator; java.util.set; java.util.map.entry; public class Konten { private HashMap konten = null; public Konten() { konten = new HashMap(); public void buche(int nummer, double betrag) { Integer n = new Integer(nummer); Object v = konten.get(n); double s = 0.0; if (v instanceof Double) { s = ((Double)v).doubleValue(); konten.put(n, new Double(s+betrag)); public double stand(int nummer) { Integer n = new Integer(nummer); Object v = konten.get(n); Double s = null; if (v instanceof Double) { s = (Double) v; else { s = new Double(0.0); return s.doublevalue(); public String tostring(int nummer) { String s = ""; s += "<Konto"; s += " nummer='" + nummer + "'"; s += " stand='" + stand(nummer) + "'"; s += " />"; return s; Programmierkurs I (HTML, CSS, Java) - 116

117 Java, Utilities public String tostring() { String s = ""; s += "<Konten >\n"; for (Iterator i = (konten.keyset()).iterator(); i.hasnext(); ) { Object e = i.next(); Integer n = (Integer)e; int nummer = n.intvalue(); s += tostring(nummer) + "\n"; s += "</Konten>"; return s; Collections: statische Hilfsmethoden public class Collections extends Object static int binarysearch(list list, Object key) static int binarysearch(list list, Object key, Comparator c) static void copy(list dest, List src) static void fill(list list, Object obj) static int indexofsublist(list source, List target) static int lastindexofsublist(list source, List target) static Object max(collection coll) static Object max(collection coll, Comparator comp) static Object min(collection coll) static Object min(collection coll, Comparator comp) static List ncopies(int n, Object o) static boolean replaceall(list list, Object oldval, Object newval) static void reverse(list list) static Comparator reverseorder() static void rotate(list list, int distance) static void shuffle(list list) static void shuffle(list list, Random rnd) static void sort(list list) static void sort(list list, Comparator c) static void swap(list list, int i, int j) Date java.util.date stellt Datum und Uhrzeiten dar. Die Zeit wird als Millisekunden seit dem 1. Januar 1970, 0 Uhr gespeichert. Fast alle Methoden sind 'deprecated'. public class Date extends Object implements Serializable, Cloneable, Comparable public Date() public Date(long millis) public long gettime() public void settime(long millis) public boolean after(date a) Programmierkurs I (HTML, CSS, Java) - 117

118 Java, Utilities public boolean before(date a) public boolean equals(date a) Beispiel: Zeitstempel in einem Buchungssatz (vonkonto, nachkonto, Betrag, Zeitstempel) import java.util.date; public class BuchungDate implements BuchungInterface { final static int NO_KONTO = -1; protected int vonkonto = NO_KONTO; protected int nachkonto = NO_KONTO; protected double betrag = 0.0; protected Date zeitstempel = null; public BuchungDate(int von, int nach, double b) { vonkonto = von; nachkonto = nach; betrag = b; zeitstempel = new Date(); public int getvonkonto() { return vonkonto; public int getnachkonto() { return nachkonto; public double getbetrag() { return betrag; public Date getzeit() { return zeitstempel; public boolean vor(buchunginterface b) { return zeitstempel.before( b.getzeit() ); public boolean nach(buchunginterface b) { return zeitstempel.after( b.getzeit() ); public String tostring() { String s = "<BuchungDate"; s += " von='"+vonkonto+"'"; s += " nach='"+vonkonto+"'"; s += " betrag='"+betrag+"'"; s += " zeit='"+zeitstempel+"'"; s += " />"; return s; das verwendete Interface: import java.util.date; public interface BuchungInterface { public int getvonkonto(); public int getnachkonto(); public double getbetrag(); public Date getzeit(); public boolean vor(buchunginterface b); public boolean nach(buchunginterface b); Programmierkurs I (HTML, CSS, Java) - 118

119 Java, Utilities Test Programm static void testdate() { Screen sc = new Screen(); KeyBoard kb = new KeyBoard(); String s = ""; BuchungInterface a = new BuchungDate(1,9,50.0); try { sc.println("press enter to continue"); s = kb.readline(); catch(ioexception e) { BuchungInterface b = new BuchungDate(9,2,100.0); sc.println("a = " + a); sc.println("b = " + b); boolean t = a.vor(b); sc.println("t = " + t); t = a.nach(b); sc.println("t = " + t); sc.println(); Ausgabe press enter to continue a b t t = = = = <BuchungDate von='1' nach='9' betrag='50.0' zeit='sun Dec 16 17:02:49 CET 2001' /> <BuchungDate von='9' nach='2' betrag='100.0' zeit='sun Dec 16 17:02:50 CET 2001' /> true false Calendar und DateFormat java.util.calendar stellt Datum und Uhrzeit unabhängig von den o.g. Millisekunden dar. Objekte der abstrakten Klasse können nicht per Konstruktor erzeugt werden, sondern es gibt eine Methode getinstance() die ein Objekt der Klasse liefert. public abstract class Calendar extends Object implements Serializable, Cloneable public static Calendar getinstance() public static Calendar getinstance(timezone t, Locale l) public final Date gettime() public final void settime(date d) public final TimeZone gettimezone() public final void settimezone(timezone t) public public public public final final final final int get(int feld) void set(int feld, int wert) void add(int feld, int wert) void roll(int feld, int wert) public static final int YEAR, MONTH, DAY, HOUR, MINUTE, SECOND,..., DAY_OF_YEAR,... public final void set(int jahr, int monat, int tag) public final void set(int jahr, int monat, int tag, int stunde) public final void set(int jahr, int monat, int tag, int stunde, int minute) Programmierkurs I (HTML, CSS, Java) - 119

120 Java, Utilities public final void set(int jahr, int monat, int tag, int stunde, int minute, int sekunde) public boolean after(object a) public boolean before(object a) public boolean equals(object a) java.util.gregoriancalendar erweitert die Klasse Calendar. import java.util.date; import java.util.calendar; import java.text.dateformat; public class BuchungCalendar implements BuchungInterface { final static int NO_KONTO = -1; protected int vonkonto = NO_KONTO; protected int nachkonto = NO_KONTO; protected double betrag = 0.0; protected Calendar zeitstempel = null; protected DateFormat zeitformat = null; public BuchungCalendar(int von, int nach, double b) { vonkonto = von; nachkonto = nach; betrag = b; zeitstempel = Calendar.getInstance(); zeitstempel.settime( new Date() ); zeitformat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL); public int getvonkonto() { return vonkonto; public int getnachkonto() { return nachkonto; public double getbetrag() { return betrag; public Date getzeit() { return zeitstempel.gettime(); public boolean vor(buchunginterface b) { return zeitstempel.before( b.getzeit() ); public boolean nach(buchunginterface b) { return zeitstempel.after( b.getzeit() ); public String tostring() { String s = "<" + getclass().getname(); s += " von='"+vonkonto+"'"; s += " nach='"+nachkonto+"'"; s += " betrag='"+betrag+"'"; s += " zeit='"+zeitformat.format(zeitstempel.gettime())+"'"; s += " />"; return s; java.text.dateformat formatiert Datum und Uhrzeit entsprechend einer Sprach- und Landes-Einstellung java.util.locale. Auch die Objekte dieser abstrakten Klasse können nicht per Konstruktor erzeugt werden, sondern es gibt Methoden getinstance() die ein Objekt der Klasse liefern. public abstract class DateFormat extends Format Programmierkurs I (HTML, CSS, Java) - 120

121 Java, Utilities public static final DateFormat getinstance() public static final DateFormat getdateinstance() public static final DateFormat gettimeinstance() public static final DateFormat getdatetimeinstance() public static final DateFormat getdateinstance(int dstyle) public static final DateFormat gettimeinstance(int tstyle) public static final DateFormat getdatetimeinstance(int dstyle, int tstyle) public static final DateFormat getdateinstance(int dstyle, Locale l) public static final DateFormat gettimeinstance(int tstyle, Locale l) public static final DateFormat getdatetimeinstance(int dstyle, int tstyle, Locale l) public static final int DEFAULT, FULL, LONG, MEDIUM, SHORT public final String format(date d) public final StringBuffer format(object n_d, StrinBuffer to, FieldPosition f) public final Date parse(string s) public final Object parseobject(string s, ParsePosition p) Beispiele: Verwendung von Calender und DateFormat static void testcalendar() { Screen sc = new Screen(); KeyBoard kb = new KeyBoard(); String s = ""; BuchungInterface a = new BuchungCalendar(1,9,50.0); try { sc.println("press enter to continue"); s = kb.readline(); catch(ioexception e) { BuchungInterface b = new BuchungCalendar(9,2,100.0); sc.println("a = " + a); sc.println("b = " + b); boolean t = a.vor(b); sc.println("t = " + t); t = a.nach(b); sc.println("t = " + t); sc.println(); Ausgabe press enter to continue a b t t = = = = <BuchungCalendar von='1' nach='9' betrag='50.0' zeit='sonntag, 16. Dezember Uhr CET' /> <BuchungCalendar von='9' nach='2' betrag='100.0' zeit='sonntag, 16. Dezember Uhr CET' /> false false Locale java.util.locale stellt Sprache, Land und weitere Feinheiten dar. Es existieren eine ganze Reihe von vordefinierten Locale-Objekten. public final class Locale Programmierkurs I (HTML, CSS, Java) - 121

122 Java, Utilities extends Object implements Cloneable, Serializable public Locale(String sprace, String land) public Locale(String sprace, String land, String feinheit) public static final Locale GERMANY, US, FRANCE, JAPAN, CHINA,... public static final Locale GERMAN, ENGLISH, FRENCH, JAPANESE, CHINESE,... public static Locale getdefault() public static void setdefault(locale l) public public public public final final final final String String String String getdisplaycountry() getdisplaylanguage() getdisplayname() getdisplayvariant() import java.util.locale; import java.text.dateformat; public class BuchungCalendarFrance extends BuchungCalendar { public BuchungCalendarFrance(int von, int nach, double b) { super(von,nach,b); zeitformat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL, Locale.FRANCE); static void testcalendarfrance() { Screen sc = new Screen(); KeyBoard kb = new KeyBoard(); String s = ""; BuchungInterface a = new BuchungCalendarFrance(1,9,50.0); BuchungInterface b = new BuchungCalendarFrance(9,2,100.0); sc.println("a = " + a); sc.println("b = " + b); boolean t = a.vor(b); sc.println("t = " + t); sc.println(); import java.util.locale; import java.text.dateformat; public class BuchungCalendarItaly extends BuchungCalendar { public BuchungCalendarItaly(int von, int nach, double b) { super(von,nach,b); zeitformat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL, Locale.ITALY); import java.util.locale; import java.text.dateformat; public class BuchungCalendarJapan extends BuchungCalendar { Programmierkurs I (HTML, CSS, Java) - 122

123 Java, Utilities public BuchungCalendarJapan(int von, int nach, double b) { super(von,nach,b); zeitformat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL, Locale.JAPAN); import java.util.locale; import java.text.dateformat; public class BuchungCalendarUS extends BuchungCalendar { public BuchungCalendarUS(int von, int nach, double b) { super(von,nach,b); zeitformat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL, Locale.US); static void testcalendarus() { Screen sc = new Screen(); KeyBoard kb = new KeyBoard(); String s = ""; BuchungInterface a = new BuchungCalendarUS(1,9,50.0); BuchungInterface b = new BuchungCalendarUS(9,2,100.0); sc.println("a = " + a); sc.println("b = " + b); boolean t = a.vor(b); sc.println("t = " + t); sc.println(); Ausgabe a = <BuchungCalendarUS von='1' nach='9' betrag='50.0' zeit='sunday, December 16, :02:51 PM CET' /> b = <BuchungCalendarUS von='9' nach='2' betrag='100.0' zeit='sunday, December 16, :02:51 PM CET' /> t = false Beispiel: Mischen von Date und Calendar static void testerror() { Screen sc = new Screen(); KeyBoard kb = new KeyBoard(); String s = ""; BuchungInterface BuchungInterface BuchungInterface BuchungInterface BuchungInterface sc.println("a sc.println("b sc.println("c sc.println("d sc.println("e = = = = = a b c d e " " " " " = = = = = new new new new new BuchungDate(1,9,50.0); BuchungCalendar(9,2,100.0); BuchungCalendarFrance(2,3,50.0); BuchungCalendarUS(3,5,99.0); BuchungCalendarItaly(6,2,15.0); a); b); c); d); e); boolean t; Programmierkurs I (HTML, CSS, Java) - 123

124 Java, Utilities t = a.vor(b); sc.println("a.vor(b) t = a.vor(c); sc.println("a.vor(c) t = e.vor(c); sc.println("e.vor(c) t = d.vor(a); sc.println("d.vor(a) = " + t); = " + t); = " + t); = " + t); sc.println(); Ausgabe a = <BuchungDate von='1' nach='1' betrag='50.0' zeit='sun Dec 16 17:02:51 CET 2001' /> b = <BuchungCalendar von='9' nach='2' betrag='100.0' zeit='sonntag, 16. Dezember Uhr CET' /> c = <BuchungCalendarFrance von='2' nach='3' betrag='50.0' zeit='dimanche 16 décembre h 02 CET' /> d = <BuchungCalendarUS von='3' nach='5' betrag='99.0' zeit='sunday, December 16, :02:51 PM CET' /> e = <BuchungCalendarItaly von='6' nach='2' betrag='15.0' zeit='domenica 16 dicembre CET' /> a.vor(b) = false a.vor(c) = true e.vor(c) = false d.vor(a) = false ResourceBundle, ListResourceBundle java.util.resourcebundle dient zur Verknüpfung von Locale und den entsprechenden Texten/Objekten einer Anwendung. public abstract class ResourceBundle extends Object public static final ResourceBundle getbundle(string anwendung) public static final ResourceBundle getbundle(string anwendung, Locale l) public final String getstring(string key) public final Object getobject(string key) java.util.listresourcebundle public abstract class ListResourceBundle extends ResourceBundle protected abstract Object[][] getcontents() Aufbau der Resource Namen: baseclassname_language_country_variant BuchungResource, BuchungResource_en, BuchungResource_en_us Beispiel: Einsatz im Buchungssatz import java.util.listresourcebundle; public class BuchungResource extends ListResourceBundle { public Object[][] getcontents() { return texte; static final Object[][] texte = { { "von", "von", { "nach", "nach", { "betrag", "betrag", { "zeit", "zeit" ; Programmierkurs I (HTML, CSS, Java) - 124

125 Java, Utilities import java.util.listresourcebundle; public class BuchungResource_en extends ListResourceBundle { public Object[][] getcontents() { return texte; static final Object[][] texte = { { "von", "from", { "nach", "to", { "betrag", "amount", { "zeit", "time" ; import java.util.listresourcebundle; public class BuchungResource_fr extends ListResourceBundle { public Object[][] getcontents() { return texte; static final Object[][] texte = { { "von", "de", { "nach", "vers", { "betrag", "montant", { "zeit", "temps" ; import java.util.listresourcebundle; public class BuchungResource_it extends ListResourceBundle { public Object[][] getcontents() { return texte; static final Object[][] texte = { { "von", "di", { "nach", "a", { "betrag", "importo", { "zeit", "tempo" ; import java.util.resourcebundle; import java.util.locale; import java.text.dateformat; public class BuchungCalendarResource extends BuchungCalendar { public BuchungCalendarResource(int von, int nach, double b) { super(von,nach,b); zeitformat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL); public String tostring() { ResourceBundle b = ResourceBundle.getBundle("BuchungResource"); String s = "<" + getclass().getname(); s += " " + b.getstring("von") + "='" + vonkonto + "'"; s += " " + b.getstring("nach") + "='" + nachkonto + "'"; s += " " + b.getstring("betrag") + "='" + betrag + "'"; s += " " + b.getstring("zeit") + "='" + zeitformat.format(zeitstempel.gettime()) + "'"; s += " />"; return s; Programmierkurs I (HTML, CSS, Java) - 125

126 Java, Utilities Test Programm: static void testcalendarresource() { Screen sc = new Screen(); KeyBoard kb = new KeyBoard(); String s = ""; BuchungInterface a = new BuchungCalendarResource(1,9,50.0); sc.println("a = " + a); Locale.setDefault( Locale.FRANCE ); BuchungInterface b = new BuchungCalendarResource(9,2,100.0); sc.println("b = " + b); Locale.setDefault( Locale.US ); BuchungInterface c = new BuchungCalendarResource(3,4,99.0); sc.println("c = " + c); Locale.setDefault( Locale.ITALY ); BuchungInterface d = new BuchungCalendarResource(5,2,130.0); sc.println("d = " + d); Locale.setDefault( Locale.GERMANY ); BuchungInterface e = new BuchungCalendarResource(4,7,60.0); sc.println("e = " + e); boolean t; t = a.vor(b); sc.println("a.vor(b) t = a.vor(c); sc.println("a.vor(c) t = e.vor(c); sc.println("e.vor(c) t = d.vor(a); sc.println("d.vor(a) = " + t); = " + t); = " + t); = " + t); sc.println(); Ausgabe a = <BuchungCalendarResource b = <BuchungCalendarResource c = <BuchungCalendarResource d = <BuchungCalendarResource e = <BuchungCalendarResource a.vor(b) = false a.vor(c) = false e.vor(c) = false d.vor(a) = false von='1' nach='9' betrag='50.0' zeit='sonntag, 16. Dezember Uhr CET de='9' vers='2' montant='100.0' temps='dimanche 16 décembre h 02 CET' from='3' to='4' amount='99.0' time='sunday, December 16, :02:51 PM CET' di='5' a='2' importo='130.0' tempo='domenica 16 dicembre CET' / von='4' nach='7' betrag='60.0' zeit='sonntag, 16. Dezember Uhr CET Beispiel: Buchungen mit Konten und BuchungCalendarResource import java.util.vector; import java.util.iterator; public class KontenTest { public static void main(string[] args) { testbuchung(); static void testbuchung() { Screen sc = new Screen(); Programmierkurs I (HTML, CSS, Java) - 126

127 Java, Utilities Konten konten = new Konten(); sc.println("konten = \n" + konten); Vector buchliste = new Vector(); for (int i = 0; i < 10; i++) { int v = (new Double(Math.random()*100.0)).intValue() % 10; int n = (new Double(Math.random()*100.0)).intValue() % 10; if ( v!= n ) { double d = Math.floor((new Double(Math.random()*1000.0)).doubleValue()); BuchungInterface b = new BuchungCalendarResource(v,n,d); sc.println("" + b); buchliste.add( b ); for (Iterator i = buchliste.iterator(); i.hasnext(); ) { BuchungInterface b = (BuchungInterface) i.next(); int v = b.getvonkonto(); int n = b.getnachkonto(); double d = b.getbetrag(); konten.buche(v, -d); konten.buche(n, d); sc.println("konten = \n" + konten); Universität Mannheim, Rechenzentrum, Last modified: Sun Oct 24 13:37:09 CEST 2004 Programmierkurs I (HTML, CSS, Java) - 127

128 Java, Generik 14. Java, Generik Generisches Programmieren Funktionen höherer Ordnung Generische Datentypen Datentypen als Parameter Funktionen höherer Ordnung In der Mathematik Summe_{i=1,n f(i) oder auch Produkt_{i=1,n f(i) Zum Beispiel die Lisp-Funktion summe: (define (summe f a b) (if (> a b) 0 (+ (f a) (summe f (+ a 1) b) ) ) ) (define (id x) x) (define (sqr x) (* x x)) (summe id 1 4) 10 (summe sqr 1 4) 30 Lösung in Java Mit einem Interface und public interface SummenFunktion { public double f(int i); public class Summation { double summe( SummenFunktion sf, int a, int b ) { double sum = 0.0; for (int i = a; i <= b; i++) sum += sf.f(i); return sum; Programmierkurs I (HTML, CSS, Java) - 128

129 Java, Generik Summation UML Diagramm public class Identitaet implements SummenFunktion { public double f(int i) { return (double) i; public class Quadrat implements SummenFunktion { public double f(int i) { double d = (double) i; return d*d; public class SummenTest { public static void main(string[] args) { Screen out = new Screen(); Summation s = new Summation(); SummenFunktion sf = null; double sum = 0.0; sf = new Identitaet(); sum = s.summe( sf, 1, 4); Programmierkurs I (HTML, CSS, Java) - 129

130 Java, Generik out.println("summe von 0 bis? von f(i) = i ist " + sum); sf = new Quadrat(); sum = s.summe( sf, 1, 4); out.println("summe von 0 bis? von f(i) = i*i ist " + sum); Zum Beispiel die Lisp-Funktion operation: (define (operation op init f a b) (if (> a b) init (op (f a) (operation op init f (+ a 1) b) ) ) ) (operation + 0 id 1 4) 10 (operation + 0 sqr 1 4) 30 (operation * 1 id 1 4) 24 (operation * 1 sqr 1 4) 576 Lösung in Java public interface Operation { public double getinit(); public double operation( double x, double y); Programmierkurs I (HTML, CSS, Java) - 130

131 Java, Generik Operation UML Diagramm public class OperSum implements Operation { public double getinit() { return 0.0; public double operation( double x, double y) { return x + y; public class OperMult implements Operation { public double getinit() { return 1.0; public double operation( double x, double y) { return x * y; Programmierkurs I (HTML, CSS, Java) - 131

132 Java, Generik public interface OperationFunktion { public double f(int i); public class GeneralOperation { Operation oper = null; public GeneralOperation( Operation op ) { oper = op; public double applyoperation( OperationFunktion of, int a, int b ) { double res = oper.getinit(); for (int i = a; i <= b; i++) res = oper.operation( res, of.f(i)); return res; public class OperationTest { public static void main(string[] args) { Screen out = new Screen(); OperationFunktion of = null; double erg = 0.0; Operation sum = new OperSum(); GeneralOperation summe = new GeneralOperation( sum ); of = new Identitaet(); erg = summe.applyoperation( of, 1, 4); out.println("summe von 0 bis? von f(i) = i ist " + erg); of = new Quadrat(); erg = summe.applyoperation( of, 1, 4); out.println("summe von 0 bis? von f(i) = i*i ist " + erg); Operation prod = new OperMult(); GeneralOperation product = new GeneralOperation( prod ); of = new Identitaet(); erg = product.applyoperation( of, 1, 4); out.println("produkt von 0 bis? von f(i) = i ist " + erg); of = new Quadrat(); erg = product.applyoperation( of, 1, 4); out.println("produkt von 0 bis? von f(i) = i*i ist " + erg); Generische Datentypen Jede Klasse ist Unterklasse von Object. Datentypen, die ganz allgemein über (Basis-)Elementen vom Typ Object definiert sind, heissen generisch. Problem: bei der Verarbeitung muss ggf. zur Laufzeit mit instanceof geprüft werden welchen Datentyp die Objekte tatsächlich haben und mit einem entsprechenden Type-Cast angepasst werden. Programmierkurs I (HTML, CSS, Java) - 132

133 Java, Generik Zum Beispiel die Klassen in java.util oder die folgende Klasse List. Diese Klasse implementiert Listen ähnlich wie in Scheme/Lisp. public class List { private Object a; // allgemeine Daten private List d; // Referenz auf das nächste ELement /** * Der Konstruktor und alle Objekt-Methoden sind nicht * öffentlich. */ protected List(Object ap, List dp) { a = ap; d = dp; protected Object car() { return a; protected List cdr() { return d; /** * Nur die Klassen-Methoden sind öffentlich. */ public static List cons(object a, List d) { return new List(a,d); public static Object car(list n) { //if ( n == null ) return null; return n.car(); public static List cdr(list n) { //if ( n == null ) return null; return n.cdr(); /** * tostring ist auch öffentlich. */ public String tostring() { String s = "("; List t = this; Object a; for (;;) { a = t.car(); if ( a == null ) s += "null"; else s += a.tostring(); if ( t.cdr()!= null ) { s += " "; t = t.cdr(); else break; s += ")"; return s;... List l = List.cons(null,null); l = List.cons(l,l); l = List.cons(l,l); System.out.println("l = " + l); List x = new List(new Integer(2),null); System.out.println("x = " + x); List y = new List(new Double(3.0),null); System.out.println("y = " + y); Programmierkurs I (HTML, CSS, Java) - 133

134 Java, Generik y = List.cons( new Integer(4), y); System.out.println("y = " + y); List z = null; for (int i = 0; i < 10; i++) { z = List.cons( new Integer(i), z); System.out.println("z = " + z); l x y y z = = = = = (((null) null) (null) null) (2) (3.0) (4 3.0) ( ) Datentypen als Parameter Die Verwendung des allgemeinsten Datentypes Object hat den Nachteil, dass immer Typecasts zu den tatsächlich verwendeten Datentypen notwendig sind. Wird die Sprache so erweitert, dass Datentypen als Parameter möglich sind, können die Programme unter Verwendung Datentyp-Parameter formuliert werden. Bei der Instanziierung von Objekten wird für den Typparameter ein konkreter Datentyp eingesetzt. Die nachträglichen Typecasts entfallen damit. Für Datentypen als Parameter wird meist eine spezielle Syntax verwendet. Der Name des formalen Typparameters wird bei der Definition in spitze Klammern eingeschlossen: public class A<Typname> {... private Typname variable; public Typname methodname( Typname a,...) {... In C++ sind Datentyp Parameter durch Klassen-Templates realisiert. Templates wie in C++ sind in Java bis JDK 1.4 nicht vorgesehen, aber voraussichtlich ab JDK 1.5 wird es das geben. Neue Frage: Wie können Einschränkungen für die formalen Typparameter formuliert werden? public class A<Typname implementing Interfaces> { Ein Beispiel in GJ: public class List<EinTyp> { private EinTyp a; // Daten vom Typ 'EinTyp' private List<EinTyp> d; // Referenz auf das nächste ELement /** * Der Konstruktor und alle Objekt-Methoden sind nicht * öffentlich. */ protected List(EinTyp ap, List dp) { a = ap; d = dp; protected EinTyp car() { return a; protected List<EinTyp> cdr() { return d;... List<Integer> x = new List<Integer>(new Integer(2),null); System.out.println("x = " + x); List<Double> y = new List<Double>(new Double(3.0),null); System.out.println("y = " + y); // Fehler: kein Integer in Double Liste y = List<Double>.cons( new Integer(4), y); Programmierkurs I (HTML, CSS, Java) - 134

135 Java, Generik System.out.println("y = " + y); List<Integer> z = null; for (int i = 0; i < 10; i++) { z = List<Integer>.cons( new Integer(i), z); System.out.println("z = " + z); Universität Mannheim, Rechenzentrum, Last modified: Sun Oct 24 13:38:58 CEST 2004 Programmierkurs I (HTML, CSS, Java) - 135

136 Java Tools 15. Java Tools Java Konventionen Java Development Kit (JDK) Integrierte Entwicklungsumgebungen (IDE) andere Java Tools Das Ant Build Tool Java Konventionen Warum Konventionen? Lesbarkeit Wartbarkeit für den Author für Partner oder Nachfolger wenn Abweichung, dann Konsistent Namensgebung Namen für Wort Bezeichner beginnen mit Beispiele Variablen, Attribute Substantive, Adjektive mit Kleinbuchstaben done, length, rein, raus Konstanten Substantive, Adjektive nur Grossbusstaben ONE, ZERO, BLUE, RED, MIN_WIDTH Methoden Substantive, Adjektive, Verben mit Kleinbuchstaben tostring(), print(), multiply(), length Klassen, Interfaces Substantive mit Grossbuchstaben StringBuffer, PrintWriter Pakete Substantive nur Kleinbuchstaben, Worttrennung mit '.' edu.unima.kredel.pk1, edu.cmu.cs.author Schreiben Sie bei Bezeichnern, die aus mehreren Worten bestehen, die ersten Buchstaben der inneren Worte gross: tostring, tobyte, drawline, BitString, BigInteger. Benutze die Java Dokumentationskommentare. Benutze konsistente Einrückungen. Methoden: maximal eine Bildschirmseite Code. Dateien/Klassen: maximal 1000 Zeilen Code. Defensiv Programmieren Rechnen Sie mit Ihrer eigenen Dummheit / Beschränktheit Denken Sie an Testhilfen: if (debug) {... Plausibilitätsprüfungen: assert( a > 0 ) Sehen Sie eine Methode zum Auslesen des Objektzustands vor. Programmierkurs I (HTML, CSS, Java) - 136

137 Java Tools z.b. size(), empty(), full() Optimieren Sie Programme erst ganz zum Schluss (wenn überhaupt). Weitere Empfehlungen Minimieren Sie die *-Form in import Statements. Falls mehrere Implementierungen denkbar sind ist ein Interface angebracht. Objekt-Variablen sollten nie public deklariert werden. Initialisieren Sie Variablen immer selbst, verlassen Sie sich nicht auf die Defaults. public static Variablen sollen auch immer final sein. Verwenden Sie Logger anstatt System.out.println(): logger.debug("a = " + a), logger.info(.), logger.error(.). Schreiben Sie sich Unit-Tests. z.b. mit JUnit Java Development Kit (JDK) Basic Tools These tools are the foundation of the Java Development Kit. They are the tools you use to create and build applications. javac The compiler for the Java programming language. java The launcher for Java applications. In this release, a single launcher is used both for development and deployment. The old deployment launcher, jre, is no longer provided. javadoc API documentation generator. Also see Javadoc Enhancements for 1.2 appletviewer Run and debug applets without a web browser. jar Manage Java Archive (JAR) files. jdb The Java Debugger. javah C header and stub generator. Used to write native methods. javap Class file disassembler extcheck Utility to detect Jar conflicts. Remote Method Invocation (RMI) Tools These tools help to create apps that interact over the Web or other network. rmic Generate stubs and skeletons for remote objects. rmiregistry Remote object registry service. rmid RMI activation system daemon. serialver Return class serialversionuid. Internationalization Tools This tool helps to create localizable apps. Programmierkurs I (HTML, CSS, Java) - 137

138 Java Tools native2ascii Convert text to Unicode Latin-1. Security Tools These tools help you set security policies on your system and create apps that can work within the scope of security policies set at remote sites. keytool Manage keystores and certificates. jarsigner Generate and verify JAR signatures. policytool GUI tool for managing policy files. Java IDL Tools These tools are used when creating apps that use CORBA to access databases. tnameserv Provides access to the naming service. idltojava Generates.java files that map an OMG IDL interface and enable an application written in the Java programming language to use CORBA functionality. This tool is available for download from the Java IDL web site. Documentation for the idltojava compiler is included in the download Integrierte Entwicklungsumgebungen (IDE) Projektgenerierung mit Templates Visuelle GUI-Gestaltung Visuelle Interaktionsgestaltung Visuelle Verwaltung der Projektkomponenten (z.b. Klassenbrowser) Komfortables Debuggen Komfortable Schnürung von Endprodukten Code Generierung aus UML Diagrammen Beispiele Visual Cafe (Symantec) Visual Age for Java (IBM) ist jetzt Eclipse (ORG), JBuilder, Kylix (Inprise) Forte for Java, forte4j war Netbeans (Sun) JDE im Emacs Editor meist bei (X)Emacs dabei (JDE) Übersicht von JavaWorld ArgoUML, Poseidon (Argo, GentleWare) Symantecs Visual Cafe 4.0: Programmierkurs I (HTML, CSS, Java) - 138

139 Java Tools Eclipse 2.0: Programmierkurs I (HTML, CSS, Java) - 139

140 Java Tools Forte4Java, Netbeans 3.0: ArgoUML, Poseidon: Programmierkurs I (HTML, CSS, Java) - 140

141 Java Tools Programmierkurs I (HTML, CSS, Java) - 141

142 Java Tools andere Java Tools Neben den schon genannten Tools gibt es noch eine Reihe weiterer Java Compiler und Interpreter. Kaffe OpenVM komplette Implementierung von Java unter GPL kommerziell unter Transvirtual Japhar Open Source Java VM ohne Bibliotheken jikes Java Compiler in C++ geschrieben von IBM, aber OpenSource GNU Java gcj Java Compiler und VM von GNU, kann Binaries erzeugen, die ohne VM laufen Open Runtime Platform (ORP) Programmierkurs I (HTML, CSS, Java) - 142

143 Java Tools Open Source Implementierung der Java Laufzeitklassen Ant Build Tool Build: Vorbereiten, Compilieren, Ausführen, Archive erstellen, Installieren, Konfigurieren zur Automation des Build-Vorgangs kann Make (gnumake, nmake, make) ersetzen wie Java Plattform unabhängig Beschreibung als XML-Datei kennt die Java Sprache erweiterbar durch eigene Java Klassen build.xml für PK1 Definitionen in build.xml: <?xml version="1.0" encoding="iso "?> <project name="pk1" default="usage" basedir="." > <property <property <property <property name="src" name="build" name="doc" name="test" value="." /> value="." /> value="doc" /> value="test" /> <property name="libs" <property name="log4j" <property name="junit" value="/home/heinz/java/lib" /> value="${libs/log4j.jar" /> value="${libs/junit.jar" /> <property name="cp" <property name="version" value="${log4j:${junit:." /> value="0.1" /> <target name="vorher" > <!-- set properties DSTAMP, TSTAMP --> <tstamp /> <!-- mkdir dir="${test" /--> </target> <target name="usage" > <echo message="ant <name> cl='cmd'" <!--echoproperties /--> </target> /> <target name="compile" depends="vorher,depend" > <javac srcdir="${src" destdir="${build" Programmierkurs I (HTML, CSS, Java) - 143

CSS. Cascading Stylesheets

CSS. Cascading Stylesheets CSS Cascading Stylesheets Themen Was sind Cascading Stylesheets? Vorteile von CSS Nachteile von CSS CSS: Versionen Regelsyntax für Stylesheets Einem HTML-Dokument Styles hinzufügen und Numerische

Mehr

CASCADING STYLE SHEETS WEBSEITEN-GESTALTUNG MIT CSS

CASCADING STYLE SHEETS WEBSEITEN-GESTALTUNG MIT CSS CASCADING STYLE SHEETS WEBSEITEN-GESTALTUNG MIT CSS Sören Elvers, Julia Polner, Max Weller, Moritz Willig T-Doku, Werner-von-Siemens-Schule, Wetzlar 2010-2011 INHALT DIESES VORTRAGS 1. Kurze Einführung

Mehr

CSS Cascading Style Sheets

CSS Cascading Style Sheets XML light CSS Cascading Style Sheets Jörn Clausen joern@techfak.uni-bielefeld.de Übersicht Wieso Cascading Style Sheets? HTML und CSS XML und CSS Ausblick XML light CSS Cascading Style Sheets 2/24 Probleme,

Mehr

WEBSEITEN ENTWICKELN MIT ASP.NET

WEBSEITEN ENTWICKELN MIT ASP.NET jamal BAYDAOUI WEBSEITEN ENTWICKELN MIT ASP.NET EINE EINFÜHRUNG MIT UMFANGREICHEM BEISPIELPROJEKT ALLE CODES IN VISUAL BASIC UND C# 3.2 Installation 11 Bild 3.2 Der Webplattform-Installer Bild 3.3 IDE-Startbildschirm

Mehr

CSS. Cascading Style Sheets

CSS. Cascading Style Sheets CSS Cascading Style Sheets Was ist CSS? CSS... steht für Cascading Style Sheets... definiert die Darstellung (Farben, Fonts,... ) von (HTML) Dokumenten auf Web-Seiten.... spart viel Aufwand, da Format-Regeln

Mehr

Meine erste Homepage - Beispiele

Meine erste Homepage - Beispiele Meine erste - Beispiele 1. Beispiel meine Willkommen auf meiner Befehle nicht über Hier ist ein Senior, der noch fit für's Internet ist. Probieren wir

Mehr

HTML5. Wie funktioniert HTML5? Tags: Attribute:

HTML5. Wie funktioniert HTML5? Tags: Attribute: HTML5 HTML bedeutet Hypertext Markup Language und liegt aktuell in der fünften Fassung, also HTML5 vor. HTML5 ist eine Auszeichnungssprache mit der Webseiten geschrieben werden. In HTML5 wird festgelegt,

Mehr

Publizieren im Internet

Publizieren im Internet Publizieren im Internet Eine eigene Homepage erstellen Teil 2 Margarita Esponda esponda@inf.fu-berlin.de Ein Bild als Hintergrund Webseite mit einen Bild als Hintergrund

Mehr

XHTML und CSS. Marco Skulschus Daniel Winter Alexander Muß

XHTML und CSS. Marco Skulschus Daniel Winter Alexander Muß XHTML und CSS Marco Skulschus Daniel Winter Alexander Muß 1 2 XHTML und CSS Marco Skulschus Daniel Winter Alexander Muß Webseite zum Buch: www.comelio-medien.com/dedi3_568.php 2008 Comelio Medien 3 Alle

Mehr

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck Javadoc Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle

Mehr

Webdesign-Multimedia HTML und CSS

Webdesign-Multimedia HTML und CSS Webdesign-Multimedia HTML und CSS Thomas Mohr HTML Definition ˆ HTML (Hypertext Markup Language) ist eine textbasierte Auszeichnungssprache (engl. markup language) zur Strukturierung digitaler Dokumente

Mehr

Erste Schritte mit XHTML

Erste Schritte mit XHTML Sascha Frank SS 2005 www.saschafrank.de 3.3.05 Eigene Homepage Rechte am $HOME ändern Eigene Homepage Rechte am $HOME ändern chmod 701 /home/login Eigene Homepage Rechte am $HOME ändern chmod 701

Mehr

... MathML XHTML RDF

... MathML XHTML RDF RDF in wissenschaftlichen Bibliotheken (LQI KUXQJLQ;0/ Die extensible Markup Language [XML] ist eine Metasprache für die Definition von Markup Sprachen. Sie unterscheidet sich durch ihre Fähigkeit, Markup

Mehr

Online-Publishing mit HTML und CSS für Einsteigerinnen

Online-Publishing mit HTML und CSS für Einsteigerinnen Online-Publishing mit HTML und CSS für Einsteigerinnen Dipl. Math. Eva Dyllong, Universität Duisburg Dipl. Math. Maria Oelinger, spirito GmbH IF MYT 07 2002 CSS-Einführung Vorschau CSS Was ist das? Einbinden

Mehr

Allgemeine Technologien II Sommersemester Mai 2011 CSS

Allgemeine Technologien II Sommersemester Mai 2011 CSS Allgemeine Technologien II Sommersemester 2011 02. Mai 2011 CSS Kursthemen Designparadigmen Framesets Tabellenbasierte Layouts -basierte Layouts: CSS & Co. Cascading Style Sheets CSS CSS einbinden

Mehr

1 Definition der Selektoren Einbinden der CSS 3 Möglichkeiten Farbangaben Schriftformatierung Abstände...

1 Definition der Selektoren Einbinden der CSS 3 Möglichkeiten Farbangaben Schriftformatierung Abstände... CSS GRUNDLAGEN 1 Definition der Selektoren... 2 2 Einbinden der CSS 3 Möglichkeiten... 2 3 Farbangaben... 4 4 Schriftformatierung... 4 5 Abstände... 4 6 Box Modell... 5 7 Links... 5 8 Eigene Klasse definieren...

Mehr

Inhaltsverzeichnis. Florian Bauer CSS Seite 2 von 10

Inhaltsverzeichnis. Florian Bauer CSS Seite 2 von 10 CSS Inhaltsverzeichnis Gestaltung mit CSS... 3 CSS einbinden... 3 On the fly... 3 Im Header... 3 In einer externen Datei... 3 Aufbau einer CSS Anweisung... 4 Wichtige CSS Eigenschaften... 4 Pseudoelemente...

Mehr

Barrierefreie Webseiten erstellen mit TYPO3

Barrierefreie Webseiten erstellen mit TYPO3 Barrierefreie Webseiten erstellen mit TYPO3 Alternativtexte Für jedes Nicht-Text-Element ist ein äquivalenter Text bereitzustellen. Dies gilt insbesondere für Bilder. In der Liste der HTML 4-Attribute

Mehr

4. Briefing zur Übung IT-Systeme

4. Briefing zur Übung IT-Systeme 4. Briefing zur Übung IT-Systeme - Einführung in HTML, CSS und JavaScript Fragestunde,, PC Pool Stand und Ausblick Einführung: 18.10.2016, 12.00 Uhr (c.t.), HS 4/PC Pool Fragestunde: 09.11.2016, 12.00

Mehr

4. Briefing zur Übung IT-Systeme

4. Briefing zur Übung IT-Systeme 4. Briefing zur Übung IT-Systeme - Einführung in HTML, CSS und JavaScript Fragestunde, 18.12.2017, PC Pool Stand und Ausblick Einführung: 17.10.2017, 12.00 Uhr (c.t.), HS 4 Fragestunde: 06.11.2017, 10.15

Mehr

HTML Programmierung. Aufgaben

HTML Programmierung. Aufgaben HTML Programmierung Dr. Leander Brandl BRG Keplerstraße - A-8020 Graz Universität Graz - Institut für Experimentalphysik Fachdidaktik der Physik http://w4.brgkepler.asn-graz.ac.at 1. Die erste Web-Seite

Mehr

Design anpassen eine kurze Einführung

Design anpassen eine kurze Einführung Design anpassen eine kurze Einführung Das gesamte Layout von Papoo basiert auf modernen CSS Layouts die vollständig ohne Layout Tabellen funktionieren. Um schnell vorhandene Designs anpassen zu können

Mehr

Beschreibung Tags Schlüsselwort. Schriftart. Die Liste ist keineswegs erschöpfend. <p><h1...6 > <li><td> <body> 'Arial','Helvetica','Tahoma','Verdana'

Beschreibung Tags Schlüsselwort. Schriftart. Die Liste ist keineswegs erschöpfend. <p><h1...6 > <li><td> <body> 'Arial','Helvetica','Tahoma','Verdana' Die Liste ist keineswegs erschöpfend. Beschreibung Tags Schlüsselwort Werte Schriftart font-family: 'Arial','Helvetica','Tahoma','Verdana' serif = eine Schriftart mit Serifen,

Mehr

Online-Publishing mit HTML und CSS für Einsteigerinnen

Online-Publishing mit HTML und CSS für Einsteigerinnen mit HTML und CSS für Einsteigerinnen Dipl.-Math. Eva Dyllong Universität Duisburg Dipl.-Math. Maria Oelinger spirito GmbH IF MYT 07-2002 Web-Technologien Überblick HTML und CSS, XML und DTD, JavaScript

Mehr

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

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter Die Programmiersprache Java Dr. Wolfgang Süß Thorsten Schlachter Eigenschaften von Java Java ist eine von der Firma Sun Microsystems entwickelte objektorientierte Programmiersprache. Java ist......a simple,

Mehr

CSS Befehle. Geschrieben von: Administrator Sonntag, den 24. April 2011 um 15:30 Uhr -

CSS Befehle. Geschrieben von: Administrator Sonntag, den 24. April 2011 um 15:30 Uhr - // = 3) version = "n3"; if (browsername == "Netscape" && browserver >= 4) version = "n4"; if (browsername == "Microsoft Internet Explorer" && browserver >= 3.01 && browsermac!= -1) version = "ie3m"; if

Mehr

Frames oder Rahmen im Browserfenster

Frames oder Rahmen im Browserfenster In dieser Ausbildungseinheit zeigen wir Ihnen, wie Frames oder auch Rahmen im Browserfenster erstellt werden. Dabei möchten wir anmerken, dass zu Frames bereits sehr viel Gegensätzliches geschrieben wurde.

Mehr

Informationen zu den regionalen Startseiten

Informationen zu den regionalen Startseiten Informationen zu den regionalen Startseiten Inhaltsverzeichnis Informationen zu den regionalen Startseiten 1 1. Grundlegende Regeln 2 1.1. Was wird angezeigt? 2 1.2. Generelle Anzeigeregeln 2 2. Anpassbare

Mehr

Dokumentation für Popup (lightbox)

Dokumentation für Popup (lightbox) Dokumentation für Popup (lightbox) Für das Popup muss eine kleine Anpassung im wpshopgermany Plugin vorgenommen werden und zwar in der Datei../wp-content/plugins/wpshopgermany/controllers/WarenkorbController.class.php

Mehr

CSS - Cascading Stylesheets

CSS - Cascading Stylesheets CSS - Cascading Stylesheets Alfred Beringer HTBLVA für Textilindustrie und Datenverarbeitung Alfred Beringer 1 Überblick Kurze Einführung Deklarationen Selektoren Beispiele Alfred Beringer 2 CSS Formatierungssprache

Mehr

Schiller-Gymnasium Hof 20.12.2004

Schiller-Gymnasium Hof 20.12.2004 Erstellen eines HTML-Dokumentes Zum Erstellen einer Homepage benötigen wir lediglich einen Editor. Zum Ansehen der fertigen Site benötigen wir wir natürlich auch einen Browser, z.b. Firefox oder Netscape

Mehr

12. Jgst. 3. Kursarbeit Datum: Fach: Informationsverarbeitung (Leistungskurs) & )!!*+,!- -.!-

12. Jgst. 3. Kursarbeit Datum: Fach: Informationsverarbeitung (Leistungskurs) & )!!*+,!- -.!- 12. Jgst. 3. Kursarbeit Datum: 26.03.2007 Klasse: GY 05 c Fach: Informationsverarbeitung (Leistungskurs) Themen: XHTML; CSS Name: Bitte speichern Sie Ihre Ergebnisse regelmäßig. Punkte:!" # Note: 8 $ %!&'(

Mehr

Mini-Dokumentation zur Bearbeitung der Website massweiler.de

Mini-Dokumentation zur Bearbeitung der Website massweiler.de Mini-Dokumentation zur Bearbeitung der Website massweiler.de 10. März 2015 Die Website massweiler.de Die Website massweiler.de wird mit dem Content Management System (CMS) Joomla betrieben. Joomla ist

Mehr

GEONET Anleitung für Web-Autoren

GEONET Anleitung für Web-Autoren GEONET Anleitung für Web-Autoren Alfred Wassermann Universität Bayreuth Alfred.Wassermann@uni-bayreuth.de 5. Mai 1999 Inhaltsverzeichnis 1 Technische Voraussetzungen 1 2 JAVA-Programme in HTML-Seiten verwenden

Mehr

Das TYPOlight CSS-Framework

Das TYPOlight CSS-Framework Das TYPOlight CSS-Framework Aufgaben eines CSS-Frameworks CSS-Reset Vereinheitlichung der Darstellung in allen Browsern Zurücksetzen der proprietären Abstände und Formatierungen Cross-Browser-Formatierung

Mehr

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

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg. Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 Klausurteilnehmer Name: Matrikelnummer: Wichtige Hinweise Es sind keinerlei Hilfsmittel zugelassen auch keine Taschenrechner! Die Klausur dauert

Mehr

Crashkurs Webseitenerstellung mit HTML

Crashkurs Webseitenerstellung mit HTML Ziel Crashkurs Webseitenerstellung mit HTML Das Ziel dieser Einführung in die Webseitenerstellung ist das Kennenlernen der Seitenbeschreibungssprache HTML und die Nutzung für einfach strukturierte Seiten,

Mehr

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Seite erstellen Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Es öffnet sich die Eingabe Seite um eine neue Seite zu erstellen. Seiten Titel festlegen Den neuen

Mehr

Inhalt HTML 2. Applets Frames Formulare CSS cascading style sheets. Lehrveranstaltung Internet in AT Dr.-Ing. A. Braune TECHNISCHE UNIVERSITÄT DRESDEN

Inhalt HTML 2. Applets Frames Formulare CSS cascading style sheets. Lehrveranstaltung Internet in AT Dr.-Ing. A. Braune TECHNISCHE UNIVERSITÄT DRESDEN Inhalt HTML 2 Applets Frames Formulare CSS cascading style sheets SS 06 1 Applets Das Applet Java Applets sind kleine Java-Programme mit deren Hilfe aktive Webseiten erstellt werden können. werden mit

Mehr

2. XML 2.1 XML 1.0 und XML Schema. Jörg Schwenk Lehrstuhl für Netz- und Datensicherheit

2. XML 2.1 XML 1.0 und XML Schema. Jörg Schwenk Lehrstuhl für Netz- und Datensicherheit XML- und Webservice- Sicherheit 2. XML 2.1 XML 1.0 und XML Schema Gliederung 1. XML 1.0 2. XML Namespaces: URI, URL und URN 3. XML Schema Literatur: A. Tanenbaum, Computer Networks. E. R. Harold and W.

Mehr

Digitale Medien. Übung

Digitale Medien. Übung Digitale Medien Übung HTML Heute Hyper Text Markup Language Beschreibungssprache von WWW-Seiten: Enthält die Struktur eines Dokuments und teilweise die Darstellung. ich bin eine Überschrift

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Erstellen eines HTML-Templates mit externer CSS-Datei

Erstellen eines HTML-Templates mit externer CSS-Datei Erstellen eines HTML-Templates mit externer CSS-Datei Eigenschaften der Lösung Menü mit 2 Ebenen ohne Bilder, Menü besteht aus Text (Links) Durch CSS kann das Menü aber auch die Seite angepasst werden

Mehr

Klaus Schild, XML Clearinghouse 2003. Namensräume

Klaus Schild, XML Clearinghouse 2003. Namensräume Namensräume Lernziele Namenskonflikte Warum lösen im World Wide Web einfache Präfixe dieses Problem nicht? Wie lösen globale Namensräume das Problem? Wie werden sie in XML-Dokumenten benutzt? Was sind

Mehr

Java Einführung Programmcode

Java Einführung Programmcode Java Einführung Programmcode Inhalt dieser Einheit Programmelemente Der erste Programmcode Die Entwicklungsumgebung: Sun's Java Software Development Kit (SDK) Vom Code zum Ausführen des Programms 2 Wiederholung:

Mehr

HTML und CSS. Eine kurze Einführung

HTML und CSS. Eine kurze Einführung HTML und CSS Eine kurze Einführung Begriff Markup Begriff aus Druckindustrie: Layouter fügt Anmerkungen/Markierungen (Tags) hinzu Markup-Languge (ML) = Auszeichnungssprache Beispiele a) das Wort wird fett

Mehr

TIMERATE AG Tel 044 422 65 15 Falkenstrasse 26 timerate@timerate.ch 8008 Zürich www.timerate.ch. Joomla Templates Kursunterlagen

TIMERATE AG Tel 044 422 65 15 Falkenstrasse 26 timerate@timerate.ch 8008 Zürich www.timerate.ch. Joomla Templates Kursunterlagen TIMERATE AG Tel 044 422 65 15 Falkenstrasse 26 timerate@timerate.ch 8008 Zürich www.timerate.ch Joomla Templates Kursunterlagen Ordnerstruktur in Joomla Inhaltsverzeichnis Ordnerstruktur in Joomla... 3

Mehr

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

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

Mehr

Format- oder Stilvorlagen

Format- oder Stilvorlagen Vorraussetzung Sie sollten Grundkenntnisse der HTML-Sprache besitzen, um die Ausbildungseinheit Formatvorlagen, auch Stilvorlagen genannt, ohne Probleme verstehen zu können. Ist dies nicht der Fall, empfehlen

Mehr

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

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein. Schritt 1: Installation des Javacompilers JDK. Der erste Start mit Eclipse Bevor Sie den Java-Compiler installieren sollten Sie sich vergewissern, ob er eventuell schon installiert ist. Gehen sie wie folgt

Mehr

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Software-Engineering und Optimierungsanwendungen in der Thermodynamik Software-Engineering und Optimierungsanwendungen in der Thermodynamik Software-Engineering 5 Programmentwicklung und Debuggen mit IDE und CASE-Tools Übungen Prof. Dr. Rolf Dornberger OPTSWE_SWE: 5 Programmentwicklung

Mehr

Übungsblatt 3: Algorithmen in Java & Grammatiken

Übungsblatt 3: Algorithmen in Java & Grammatiken Humboldt-Universität zu Berlin Grundlagen der Programmierung (Vorlesung von Prof. Bothe) Institut für Informatik WS 15/16 Übungsblatt 3: Algorithmen in Java & Grammatiken Abgabe: bis 9:00 Uhr am 30.11.2015

Mehr

WhiteStarUML Tutorial

WhiteStarUML Tutorial WhiteStarUML Tutorial Autor: Simon Balázs, BME IIT, 2015. Übersetzung: Kovács Márton, 2015. Installation Herunterladen und installieren Sie das WhiteStarUML: http://sourceforge.net/projects/whitestaruml/

Mehr

Hypertext Markup Language HTML. Stefan Szalowski Internet-Technologien HTML

Hypertext Markup Language HTML. Stefan Szalowski Internet-Technologien HTML Hypertext Markup Language HTML Hypertext Markup Language HTML Cascading Style Sheets CSS Zwei Sprachen, mit denen Webseiten erstellt werden HTML: Strukturieren von Inhalten durch Elemente Überschriften,

Mehr

Scalable Vector Graphics (SVG)

Scalable Vector Graphics (SVG) Scalable Vector Graphics () Beschreibungssprache für Vektorgraphiken. Basiert auf XML, daher ähnlich zu (X)HTML, SMIL, VRML, RSS, etc.

Mehr

Applications Applets (eingeschränkte Rechte)

Applications Applets (eingeschränkte Rechte) 1 Arten von Java-Programmen Man unterscheidet 2 verschiedene Arten von Java-Programmen: Applications Applets (eingeschränkte Rechte) Erstere sind eigenständige Programme. Letztere sind "kleine" Programme,

Mehr

HTML-Grundlagen (X)HTML:

HTML-Grundlagen (X)HTML: HTML-Grundlagen (X)HTML: < > beginnender HTML Tag schließender HTML Tag < /> leere HTML Elemente Attribute und Werte &.; Sonderzeichen, HTML Entities Aufbau einer Datei Ein

Mehr

PHP Kurs Online Kurs Analysten Programmierer Web PHP

PHP Kurs Online Kurs Analysten Programmierer Web PHP PHP Kurs Online Kurs Analysten Programmierer Web PHP Akademie Domani info@akademiedomani.de Allgemeines Programm des Kurses PHP Modul 1 - Einführung und Installation PHP-Umgebung Erste Lerneinheit Introduzione

Mehr

SIZ Modul 221: Outlook und Internetdienste

SIZ Modul 221: Outlook und Internetdienste SIZ Modul 221: Outlook und Internetdienste Outlook Dateien importieren (PST, XLS usw.) 1. Menü Datei/Importieren/Exportieren... 2. Aus andern Programmen oder Dateien importieren Das ist bei den meisten

Mehr

Signatur mit Formatierung

Signatur mit Formatierung Bedienungstip: Signatur mit Formatierung Seite 1 Signatur mit Formatierung Es können Signaturen hinterlegt werden, die beim Erstellen von Nachrichten automatisch angehängt werden. Das ist sehr praktisch,

Mehr

Allgemeine Technologien II Wintersemester 2011 / November 2011 CSS

Allgemeine Technologien II Wintersemester 2011 / November 2011 CSS Allgemeine Technologien II Wintersemester 2011 / 2012 28. November 2011 CSS Themen 28.11.2011 Cascading Style Sheets CSS CSS einbinden Inline-Styles CSS im Dokumentkopf Externe Stylesheets Konzepte Typen-,

Mehr

MetaQuotes Empfehlungen zum Gebrauch von

MetaQuotes Empfehlungen zum Gebrauch von MetaQuotes Empfehlungen zum Gebrauch von MetaTrader 4 auf Mac OS Auch wenn viele kommerzielle Angebote im Internet existieren, so hat sich MetaQuotes, der Entwickler von MetaTrader 4, dazu entschieden

Mehr

XML-Namensräume. Marc Monecke monecke@informatik.uni-siegen.de

XML-Namensräume. Marc Monecke monecke@informatik.uni-siegen.de XML-Namensräume Marc Monecke monecke@informatik.uni-siegen.de Praktische Informatik Fachbereich Elektrotechnik und Informatik Universität Siegen, D-57068 Siegen 19. Mai 2003 Inhaltsverzeichnis 1 Motivation

Mehr

HTML Teil 2. So kann man HTML-Seiten mit <div> und CSS gestalten. So sehen einfache Formulare aus

HTML Teil 2. So kann man HTML-Seiten mit <div> und CSS gestalten. So sehen einfache Formulare aus HTML Teil 2 So kann man HTML-Seiten mit und CSS gestalten So sehen einfache Formulare aus Wie könnte ein komplexer Internetauftritt aussehen? Trennung Inhaltsbereich und Navigationsbereich 2 Beispiel:

Mehr

Textverarbeitung 1. 1. Textentwurf 2. Texterfassung 3. Textumformung 4. Textgestaltung 5. Textverwendung

Textverarbeitung 1. 1. Textentwurf 2. Texterfassung 3. Textumformung 4. Textgestaltung 5. Textverwendung Informatik - Text / HTML 1 Textverarbeitung 1 1. Textentwurf 2. Texterfassung 3. Textumformung 4. Textgestaltung 5. Textverwendung Leistungsmerkmale Textverarbeitung ist Standardsoftware - nutzerorientiert,

Mehr

Hier mal einige Tipps zum Einbau vom "Anfy" Applets. Hier die Seite von "Anfy" und zum Download des Programms: http://www.anfyteam.

Hier mal einige Tipps zum Einbau vom Anfy Applets. Hier die Seite von Anfy und zum Download des Programms: http://www.anfyteam. Hier mal einige Tipps zum Einbau vom "Anfy" Applets. Hier die Seite von "Anfy" und zum Download des Programms: http://www.anfyteam.com/... ich habe "Version 2.1" und zeige hier Bilder und Beschreibungen

Mehr

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

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

Anwendungsprotokolle: HTTP, POP, SMTP

Anwendungsprotokolle: HTTP, POP, SMTP Anwendungsprotokolle: HTTP, POP, SMTP TCP? UDP? Socket? eingesetzt, um Webseiten zu übertragen Zustandslos Nutzt TCP Client schickt Anfrage ( HTTP-Request ) an Server, Server schickt daraufhin Antwort

Mehr

Praktikum: Einstieg: Arbeitsplatz, JCreator

Praktikum: Einstieg: Arbeitsplatz, JCreator Modul OPR Praktikum: Einstieg: Arbeitsplatz, JCreator Aufgabe 1 Richten Sie Ihren OPR-Arbeitsplatz ein: Java-Tool JCreator (nur lauffähig machen!) ->Erklärungen kommen später! Wie funktioniert Java? Der

Mehr

Webentwicklung mit Mozilla Composer I.

Webentwicklung mit Mozilla Composer I. Tutorium Webentwicklung mit Mozilla Composer I. Präsentation der Sitzung vom 12. Mai 2004 Martin Stricker martin.stricker@rz.hu-berlin.de Programm Erstellen und Bearbeiten von Webseiten mit dem HTML-Editor

Mehr

Aufgaben der Klasse FTI33 HTML: 1. Durch welchen Befehl wird ein Hyperlink in einem Bestimmten Frame angezeigt?

Aufgaben der Klasse FTI33 HTML: 1. Durch welchen Befehl wird ein Hyperlink in einem Bestimmten Frame angezeigt? Hinweis: Verstehen Sie folgende Aufgaben als mögliche Bestandteile für die anstehende Klausur. Betrachten Sie die Lösungen nicht von vorne herein als richtig, sondern beantworten Sie nochmals die Fragen

Mehr

Webseiten sind keine Gemälde. Webstandards für ein besseres Web. Webstandards für ein besseres Web

Webseiten sind keine Gemälde. Webstandards für ein besseres Web. Webstandards für ein besseres Web Webseiten sind keine Gemälde Webkrauts Die Initiative für die Webkrauts ging von einem Blogeintrag im August 2005 aus. Nach dem Aufruf fanden sich innerhalb von etwa drei Tagen über 60 Interessierte zusammen.

Mehr

Internet und Webseiten-Gestaltung

Internet und Webseiten-Gestaltung Internet und Webseiten-Gestaltung Wirtschaftsinformatik 3 Vorlesung 28. April 2004 Dipl.-Inf. T. Mättig 2004-04-28 Internet und Webseiten-Gestaltung - T. Mättig 1 Vorbemerkungen Dipl.-Inf. T. Mättig E-Mail:

Mehr

http://www.therealgang.de/

http://www.therealgang.de/ http://www.therealgang.de/ Titel : Author : Kategorie : Vorlesung HTML und XML (Einführung) Dr. Pascal Rheinert Sonstige-Programmierung Vorlesung HTML / XML: Grundlegende Informationen zu HTML a.) Allgemeines:

Mehr

CGI Programmierung mit Ha. Markus Schwarz

CGI Programmierung mit Ha. Markus Schwarz CGI Programmierung mit Ha Markus Schwarz Überblick Was ist funktionale Programmierung Einführung in Haskell CGI-Programmierung mit Haskell Ein etwas größeres Beispiel Was ist funktionale Programm Ein Programm

Mehr

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

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java Objektorientierte Programmierung mit Java Eine praxisnahe Einführung mit BlueJ Klassenentwurf Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? 1.0 Zentrale Konzepte

Mehr

Anwendungsbeschreibung an einem Beispiel

Anwendungsbeschreibung an einem Beispiel Anwendungsbeschreibung an einem Beispiel Im folgenden soll anhand einer Beispiel-URL die Arbeitsweise des Programmes erläutert werden und die Anwendung beschrieben werden. Als Anwendungsbeispiel soll die

Mehr

Kapitel 3 Frames Seite 1

Kapitel 3 Frames Seite 1 Kapitel 3 Frames Seite 1 3 Frames 3.1 Allgemeines Mit Frames teilt man eine HTML-Seite in mehrere Bereiche ein. Eine Seite, die mit Frames aufgeteilt ist, besteht aus mehreren Einzelseiten, die sich den

Mehr

Einführung in HTML. Tutorium. Präsentation der Sitzung vom 2./9. Juni 2004 Martin Stricker

Einführung in HTML. Tutorium. Präsentation der Sitzung vom 2./9. Juni 2004 Martin Stricker Tutorium Einführung in HTML Präsentation der Sitzung vom 2./9. Juni 2004 Martin Stricker martin.stricker@rz.hu-berlin.de Programm Grundlagen von HTML Objekte, Elemente, Tags Grundaufbau eines HTML-Dokuments

Mehr

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

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

Hyperlinks, Navigation, Pfade

Hyperlinks, Navigation, Pfade Tutorium Hyperlinks, Navigation, Pfade 30. Juni 2004 Martin Stricker martin.stricker@rz.hu-berlin.de Hyperlinks Hyperlinks sind Verknüpfungen zu Adressen (URL's) im Internet Links (Menüpunkte), mit denen

Mehr

Einführung in Javadoc

Einführung in Javadoc Einführung in Javadoc Johannes Rinn http://java.sun.com/j2se/javadoc Was ist Javadoc? Javadoc ist ein Werkzeug, dass eine standardisierte Dokumentation für die Programmiersprache Java unterstützt. Vorteil:

Mehr

Für die Verwendung des Wikis wird dringend der Microsoft Internet Explorer Version 7.0 empfohlen!

Für die Verwendung des Wikis wird dringend der Microsoft Internet Explorer Version 7.0 empfohlen! Sie finden das FH-Wiki unter der folgenden Adresse: http://wiki.fh-kehl.de:9454 Falls Sie Anregungen, Fragen oder Hinweise haben wenden Sie sich bitte an Herrn Fetterer oder Frau Prof. Dr. Schenk. Für

Mehr

Robert R. Agular Thomas Kobert. 5. Auflage HTML. Inklusive CD-ROM

Robert R. Agular Thomas Kobert. 5. Auflage HTML. Inklusive CD-ROM Robert R. Agular Thomas Kobert 5. Auflage HTML Inklusive CD-ROM Vorwort 13 Einleitung 14 Arbeitsschritte 14 Wichtige Stellen im Buch 14 Buffi-Infokästen 14 Aufgaben 15 Wohin mit den Übungen? 15 HTML-Ordner

Mehr

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter 2 Inhaltsverzeichnis 1 Web-Kürzel 4 1.1 Einführung.......................................... 4 1.2 Web-Kürzel.........................................

Mehr

Klicken Sie auf den Reiter Newsfeed (1) in der oberen Menüleiste und wählen Sie dann links in der schmalen grauen Leiste Neuer Newsfeed (2) aus:

Klicken Sie auf den Reiter Newsfeed (1) in der oberen Menüleiste und wählen Sie dann links in der schmalen grauen Leiste Neuer Newsfeed (2) aus: Seite 1 Wenn Sie daran interessiert sind, aktuelle Informationen über Ihr Unternehmen auf Ihrer Internetpräsenz zu veröffentlichen, ist die Newsfeed-Funktion von meltwater news genau das richtige für Sie.

Mehr

XML Kurs 2005-8 LRZ 1

XML Kurs 2005-8 LRZ 1 XML Kurs 2005-8 LRZ 1 Inhalt 2005-8 LRZ 2 Werbung 1: XML steht für strukturierte Daten March 2008 2005-8 LRZ 3 Werbung 2: XML ist lizenzfrei, plattformunabhängig und gut unterstützt March 2008 2005-8 LRZ

Mehr

crm-now/ps Webforms Webdesigner Handbuch Erste Ausgabe

crm-now/ps Webforms Webdesigner Handbuch Erste Ausgabe crm-now/ps Webforms Webdesigner Handbuch Erste Ausgabe crm-now/ps Webforms: Webdesigner Handbuch Copyright 2006 crm-now Versionsgeschichte Version 01 2006-08-21 Release Version crm-now c/o im-netz Neue

Mehr

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

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen

Mehr

Proseminar: Website-Managment-System. NetObjects Fusion. von Christoph Feller

Proseminar: Website-Managment-System. NetObjects Fusion. von Christoph Feller Proseminar: Website-Managment-System NetObjects Fusion von Christoph Feller Netobjects Fusion - Übersicht Übersicht Einleitung Die Komponenten Übersicht über die Komponenten Beschreibung der einzelnen

Mehr

Applets I. Grundlagen der g Applet-Programmierung

Applets I. Grundlagen der g Applet-Programmierung Applets I Grundlagen der g Applet-Programmierung 2 Inhalt Applets Was sind Applets Entwicklung Grundlagen Zustandssteuerung eines Applets Methoden zum Nachrichtentransfer Soundausgabe Animation Einbindung

Mehr

Content Management System (CMS) Manual

Content Management System (CMS) Manual Content Management System (CMS) Manual Thema Seite Aufrufen des Content Management Systems (CMS) 2 Funktionen des CMS 3 Die Seitenverwaltung 4 Seite ändern/ Seite löschen Seiten hinzufügen 5 Seiten-Editor

Mehr

Softwaretechnik Teil Webprogrammierung (HTML, PHP) SS2011

Softwaretechnik Teil Webprogrammierung (HTML, PHP) SS2011 Softwaretechnik Teil Webprogrammierung (HTML, PHP) SS2011 Studiengang: Semester: 3. Gruppe: Wirtschaftsinformatik A & B Datum: 29.06.2011 Dozent: LfbA Dipl.-Hdl. Andreas Heß Hilfsmittel: alle Unterlagen/Bücher

Mehr

Bilder zum Upload verkleinern

Bilder zum Upload verkleinern Seite 1 von 9 Bilder zum Upload verkleinern Teil 1: Maße der Bilder verändern Um Bilder in ihren Abmessungen zu verkleinern benutze ich die Freeware Irfan View. Die Software biete zwar noch einiges mehr

Mehr

Innere Klassen in Java

Innere Klassen in Java Innere Klassen in Java SS 2012 Prof. Dr. Margarita Esponda Innere Klassen Klassen- oder Interfacedefinitionen können zur besseren Strukturierung von Programmen verschachtelt werden Eine "Inner Class" wird

Mehr

Multimedia im Netz Wintersemester 2011/12

Multimedia im Netz Wintersemester 2011/12 Multimedia im Netz Wintersemester 2011/12 Übung 01 Betreuer: Verantwortlicher Professor: Sebastian Löhmann Prof. Dr. Heinrich Hussmann Organisatorisches 26.10.2011 MMN Übung 01 2 Inhalte der Übungen Vertiefung

Mehr

ANWENDUNGSSOFTWARE CSS

ANWENDUNGSSOFTWARE CSS ANWENDUNGSSOFTWARE CSS NAVIGATION Bilder zur Navigation: als Anker für Verweise benutzen Text sollte nicht Bestandteil des Bildes sein (Bild als Hintergrund), siehe z-index Navigationslisten mit ,

Mehr

Da die Bedienung des Editors viele Möglichkeiten aufweist, aber auch etwas Übung voraussetzt, haben wir ihm ein eigenes Unterkapitel gewidmet.

Da die Bedienung des Editors viele Möglichkeiten aufweist, aber auch etwas Übung voraussetzt, haben wir ihm ein eigenes Unterkapitel gewidmet. 5.6. Der HTML-Editor Da die Bedienung des Editors viele Möglichkeiten aufweist, aber auch etwas Übung voraussetzt, haben wir ihm ein eigenes Unterkapitel gewidmet. Bild 33: Der Editor 5.6.1. Allgemeine

Mehr

Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG

Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG Um mit IOS2000/DIALOG arbeiten zu können, benötigen Sie einen Webbrowser. Zurzeit unterstützen wir ausschließlich

Mehr

Graphische Benutzungsoberflächen

Graphische Benutzungsoberflächen Graphische Benutzungsoberflächen Graphische Benutzungsoberflächen (graphical user interfaces, GUI) dienen zur interaktiven Bedienung von Programmen, Ein- und Ausgabe mit graphischen Techniken und visuellen

Mehr