Home
Objektorientierte Softwareentwicklung
Contents
1. 154 6 3 Ein und Ausgabe 2 Bu 2a Me Bene Be Oe ee 157 6 3 1 Dateibasierte Ein Ausgabe 158 0 32 Textcodierungen 2 22 26 werds 161 6 3 3 Gepufferte Str me 2 25 rd tee rede Aid 164 6 3 4 Lesen von einem Webserver 2 2 22 2 2 nn nr 165 6 3 5 Str me f r Objekte ala Ka aa Mee a ae a 166 04 A snahmen lt 6 4 eeraa sf dig tesa Sd wee a SE Ovae gs Soe Se 168 6 4 1 Ausnahme und Fehlerklassen 168 6 4 2 Werfen von Ausnahmen 000 168 7 Zusammenfassung und Ausblick 173 7 1 Fragen und Antworten Mod oe Sate ks oS EDIT Eu Yes 173 Inhaltsverzeichnis Kapitel 1 Einf hrung in die Welt der Softwareentwicklung Sie haben sich fiir das Studium eines Informatikstudienganges entschieden Sie wer den damit u a in den verschiedenen Modulen verschiedene Aspekte zur Entwicklung von Software kennenlernen Dieses wird eines der zentralen Inhalte des Studiums sein Und in diesem Modul werden die Grundlagen hierftir gelegt Aufgabe 0 Bilden Sie Paare in der Praktikumsstunde Interviewen Sie sich gegen seitig paarweise Anschlie end stellen Sie ihren Interviewpartner der ganzen Praktikumsgruppe vor Bauen Sie bei der Vorstellung eine L ge ber die vorgestellte Person ein Lassen Sie das Plenum raten welches die L ge war Aufgabe 1 Chuck Norris wird Vieles nachgesagt Unter anderem auch dass er schon einmal bis unendlich gez hlt hat Wenn er tats chlich in der
2. Listing 6 11 GPair java Die Klasse GPair hat zwei Typvariablen Instanzen von GPair m ssen angeben von welchem Typ die beiden zu speichernden Objekte sein sollen class UsePair public static void main String _ GPair lt String Integer gt p new GPair lt String Integer gt hallo new Integer 40 System out println p System out printIn p contents toUpperCase System out println p snd int Value 2 Listing 6 12 UsePair java Wie man sieht kommen wir wieder ohne Typzusicherung aus Es gibt keinen dy namischen Typcheck der im Zweifelsfall zu einer Ausnahme f hren k nnte sep linux fh javal 5 examples classes gt java UsePair hallo 40 HALLO 42 sep linux fh javal 5 examples classes gt Wir k nnen auch eine Unterklasse bilden indem wir mehrere Typvariablen zusam menfassen Wenn wir uniforme Paare haben wollen die zwei Objekte gleichen Typs speichern k nnen wir hierf r eine spezielle Paarklasse definieren class UniPair lt A gt extends GPair lt A A gt UniPair A x A y super x y void swap final A z snd snd contents contents Z Listing 6 13 UniPair java 150 p j p e o 6 2 Generische Typen Da beide gespeicherten Objekte jeweils vom gleichen Typ sind konnten wir jetzt eine Methode schreiben in der diese beiden Objekte ihren Platz tauschen Wie man sieht sind Typvariablen ebenso wie unsere bisherigen T
3. j int getMatrikelNummer return matrikelNummer Listing 4 6 Student java 4 1 2 Uberschreiben bestehender Eigenschaften Unser zweites Ziel ist durch Vererbung eine Methode in ihrem Verhalten zu ver n dern In unserem Beispiel soll die Methode toString der Klasse Person f r Studen tenobjekte so ge ndert werden dass das Ergebnis auch die Matrikelnummer enth lt Hierzu k nnen wir die entsprechende Methode in der Klasse Student einfach neu schreiben Dieses ist z B in C m glich 79 r Kapitel 4 Weiterf hrende Konzepte der Objektorientierung public String toString return name address Matrikel Nr matrikelNummer Listing 4 7 Student java Obwohl Objekte der Klasse Student auch Objekte der Klasse Person sind benutzen sie nicht die Methode toString der Klasse Person sondern die neu definierte Ver sion aus der Klasse Student Um eine Methode zu tiberschreiben muss sie dieselbe Signatur bekommen die sie in der Oberklasse hat 4 1 3 Konstruktion Um f r eine Klasse konkrete Objekte zu konstruieren braucht die Klasse entsprechende Konstruktoren In unserem Beispiel soll jedes Objekt der Klasse Student auch ein Objekt der Klasse Person sein Daraus folgt dass um ein Ob jekt der Klasse Student zu erzeugen es auch notwendig ist ein Objekt der Klasse Person zu erzeugen Wenn wir also einen Konstruktor f r Student schreiben sol
4. 4 3 Schnittstellen Interfaces und abstrakte Klassen package de hsrm cs oosel3 2 import java awt Graphics public interface Paintable void paintMeTo Graphics g o n Ae W Listing 4 44 Paintable java r package de hsrm cs oosel3 2 public interface MoveAndPaintable extends Moveable Paintablef 3 Listing 4 45 MoveAndPaintable java Lassen Sie GeometricObject und allen Unterklassen auf adaquate Weise die Schnittstelle MoveAndPaintable implementieren Aufgabe 3 Testen Sie Beispielobjekte all Ihrer Klassen mit folgender Klasse package de hsrm cs oosel3 import javax swing import java awt event import java awt a e N H 6 public class ShowMoveable extends JPanel 7 MoveAndPaintable mvpt 8 Timer t o public ShowMoveable MoveAndPaintable mvpt 10 this mvpt mvpt 11 t new Timer 100 new ActionListener 12 public void actionPerformed ActionEvent ev 13 move 14 repaint 15 16 3 17 18 Override 19 public Dimension getPreferredSize 20 return new Dimension 800 600 21 22 Override 23 public void paintComponent Graphics g 24 super paintComponent g 25 mvpt paintMeTo g 27 public void move 28 mvpt move 30 public void show 31 JFrame f new JFrame 107 Kapitel 4 Weiterf hrende Konzepte der Objektorientierung add this pack setVisible true s
5. totale Korrektheit Das Programm ist partiell korrekt und terminiert f r jede Eingabe d h liefert immer nach endlich langer Zeit ein Ergebnis e Internationalisierung Die Welt ist insbesondere durch die Daten Kommunikationsnetze enger zusammen ger ckt Ein St ck Software wird nicht f r ein Land oder einen Kulturkreis allein geschrieben sondern wird potentiell weltweit eingesetzt Unter der Internationalisierung abgek rzt als I18N f r internationalization I 18 Buchstaben N versteht man dass die Soft ware in verschiedenen Kulturkreises eingesetzt werden kann Dieses beinhaltet z B dass alle Schriftzeichen in einer Textverarbeitung benutzt werden k n nen oder dass die Schreibrichtung in einem Texteingabefeld eingestellt werden kann da in einigen Schriften von rechts nach links in anderen von links nach rechts und teilweise auch von oben nach unten geschrieben wird e Lokalisierung Die Lokalisierung besch ftigt sich auch mit der globalen Ein setzbarkeit der Software Hier geht es zus tzlich darum dass die Benutzer f hrung in verschiedenen Sprachen vorliegt zum Beispiel die Men beschrif tungen in mehreren Sprachen vorliegen die Hilfetexte bersetzt worden Entsprechend I18N wird Lokalisierung auch als L12N abgek rzt Kurz gefasst kann man sagen in einer internationalisierten Software lassen sich auch chine sische Texte schreiben aber die Kn pfe und Men s sind weiterhin auf englisch beschriftet In einer lokalisie
6. 3 J3 System out println fac System out println fac ge eu 15 20 25 Listing 3 29 Fac java 69 Kapitel 3 Imperative und funktionale Konzepte Wir k nnen dieses Programm von Hand ausf hren indem wir den Methodenaufruf f r fac f r einen konkreten Parameter i durch die f r diesen Wert zutreffende Alternative der Bedingungsabfrage ersetzen Wir kennzeichnen einen solchen Erset zungsschritt durch einen Pfeil fac 4 4 fac 4 1 4xfac 3 4x 3x fac 3 1 4 3 fac 2 4x 3 2 fac 2 1 4x 3 2 fac 1 4 3 2 1 fac 1 1 4x 3 2 1 fac 0 gt 4 3 2 1 1 4 3 2 1 4 3 2 4x6 24 3 4 1 Rekursion und Schleifen Schleifen und Rekursion sind beide dazu geeignet um Code Teile wiederholt auszuf hren Man kann auch argumentieren dass Schleifen ein zus tzliches Kon strukt von Programmiersprachen sind mit denen sich Rekursion optimierter aus f hren lassen k nnen Betrachten wir die for Schleife so l sst sich diese eigentlich immer direkt in eine rekursive Methode umschreiben 70 j 14 15 16 3 4 Rekursion Statt der Schleifenvariablen ben tigt die rekursive Methode einen Parameter der f r die Steuerung der Rekursion in einer Abbruchbedingung verwendet wird Der n chste Durchlauf wird durch den rekursiven Aufruf get tigt Hierbei wird als neuer Wert der Parameter f r di
7. Versuchen Sie also Ihre erste Javaquelltextdatei mit dem vi zu schreiben Jede Javaquelltextdatei hat die Endung java In einer Javaquelltextdaei wird jeweils genau eine sogenannte Klasse definiert Folgendes ist die kleinste m gliche Klasse Sie hei t FirstProgram und ist entsprechend in eine Datei FirstProgramm java zu speichern class FirstProgramm Listing 1 1 FirstProgramm java Es gibt noch eine ganze Reihe weiterer Texteditoren die auf der Kommandozeile benutzt werden k nnen Ich pers nlich benutze wann immer m glich das Programm emacs welche mit einer Menuf hrung daherkommt aber auch einen Modus hat der ohne graphische Benutzeroberfl che auskommt Hierzu startet man den emacs mit dem Argument nw f r no window Ein weiteres solcher Texteditor ist das Programm joe Allerdings sind emacs oder joe nicht auf allen Systemen installiert wohingegen man eigentlich immer davon ausgehen kann dass vi existiert Quelltext kompilieren Nun brauchen wir den Kompilator der einen Quelltext in einen bin ren Maschi nencode berf hrt F r Java hei t das entsprechende Programm javac Durch den Aufruf des Programms javac kann man sich davon berzeugen dass die Java Entwicklerumgebung auf dem Rechner installiert ist Ruft man den Kompilator auf so macht er folgende Ausgabe die ber seine Benutzung informiert panitz ThinkPad T430 javac Usage javac lt options gt lt source files gt where possible o
8. xs add R mer xs add Landsleute xs add leiht xs add mir xs add Euer xs add Ohr xs add Landsleute xs add friends xs add Romans System out printin xs size System out printlin xs get 2 So besser nicht Iterieren denn get i kann teuer sein for int i 0 i lt xs size i System out println xs get i toUpperCase a die Liste Sortieren Collections sort xs System out println jetzt mit for Each lieber mit for each for String x xs System out println x i oder explizit mit dem Iterator System out println jetzt mit Iterator for Iterator lt String gt it xs iterator it hasNext String x it next System out println x toUpperCase oder mit forEach Methode und Lambda Ausdruck 156 6 3 Ein und Ausgabe System out println jetzt mit Lambda xs forEach x System out println x toUpperCase oder sogar parallelisiert System out println jetzt parallel xs parallelStream forEach x gt System out println x toUpperCase Listing 6 25 IterateList java Abbildungen Streams 6 3 Ein und Ausgabe Im Paket java io befinden sich eine Reihe von Klassen die Fin und Ausgabe von Daten auf externen Datenquellen erlauben In den h ufigsten F llen handelt es sich hierbei um Dateien Ein Ausgabeoperationen
9. yl y1 y2 y2 return g yl yl x 2 y2 3 static int g int xl int x2 int y System out println xl x1 x2 x2 y y if 0 y return xl return f x1 x2 1 y 4 static int g int x int y return g x x y public static void main String args System out println g 2 4 Listing 7 2 Aufgabe2b java 180 Berechnen Sie schrittweise das Ergebnis des Ausdrucks g 2 4 a F hren Sie die folgende Klasse von Hand aus Schreiben Sie dabei auf in welcher Reihenfolge die Zeilen durchlaufen werden und mit welchen Werten die einzelnen Variablen w hrend des Programmdurch laufs belegt sind Schreiben Sie auf was auf dem Bildschirm ausgegeben 7 1 Fragen und Antworten Aufgabe 3 SwingGUI L sen Sie auch diese Aufgabe auf einem Blatt Papier Gegeben Sei folgende Schnittstelle i linterface Function 2 int rechne int x int y Listing 7 3 Logik java a Schreiben Sie eine Klasse Rechner die von der Klasse JPanel erbt Sie enthalte f nf Felder ein Objekt des Typs Function ein JButton Objekt zwei JTextField Objekte und ein JLabel Objekt Die JTextField Objekte sind zwei f r Eingaben gedacht und das JLabel Objekt f r die Ausgabe Implementieren Sie die Klasse so dass bei Dr cken des Knopfes der Text der zwei Textfelder zur Eingabe gelesen wird getText und die Eingabetexte in ganze Zahlen umgewandelt werden Diese werden dann der Methode re
10. Java kennt auch einen Operator mit drei Operanden Er besteht aus zwei einzelnen Zeichen die als Trenner zwischen den Operanden stehen Zun chst kommt der erste Operand dann das Zeichen dann der zweite Operand gefolgt vom Zeichen dem der dritte Operand folgt Schematisch sehen die Ausdr cke dieses Operators wie folgt aus cond alt alto Das Ergebnis dieses Operators wird wie folgt berechnet Der erste Operand wird zu einem Wahrheitswert ausgewertet Wenn dieser wahr ist so wird der zweite Operand als Ergebnis ausgewertet wenn er falsch ist wird der dritte Operand als Ergebnis ausgewertet class SoOderSof public static void main String args System out println 17 4 2 42 tatsaechlich gleich unterschiedlich Listing 3 10 SoOderSo java Der Bedingungsoperator ist unser erstes Konstrukt um Verzweigungen auszudr ck en Da der Bedingungsoperator auch einen Wert errechnet k nnen wir diesen be nutzen um mit ihm weiterzurechenen Der Bedingungsoperator kann also tats ch lich ineinandergesteckt werden 56 3 3 Anweisungen ots class Signum public static void main String args System out println signum 42 42 gt 0 1 42 lt 0 1 0 Listing 3 11 Signuml java Hier wird zun chst geschaut ob die Zahl 42 gr er als 0 ist Ist dieses der Fall wird die Zahl 1 ausgegeben ansonsten wird weitergeschaut ob die Zahl 42 k
11. Statische Eigenschaften einer Klasse werden in Java dadurch angesprochen dass dem Namen der Klasse mit Punkt getrennt die gew nschte Eigenschaft folgt Wer den in einer Klasse sehr oft statische Eigenschaften einer anderen Klasse benutzt so ist der Code mit deren Klassennamen durchsetzt Die Javaentwickler haben mit Java 1 5 ein Einsehen Man kann jetzt f r eine Klasse alle ihre statischen Eigen schaften importieren so dass diese unqualifiziert benutzt werden kann Die import Anweisung sieht aus wie ein gewohntes Paktimport nur dass das Schl sselwort static eingef gt ist und erst dem klassennamen der Stern folgt der in diesen Fall f r alle statischen Eigenschaften steht Wir schreiben eine Hilfsklasse zum Arbeiten mit Strings in der wir eine Methode zum umdrehen eines Strings vorsehen package name panitz staticImport public class StringUtil static public String reverse String arg StringBuffer result new StringBuffer 96 4 2 Pakete 5 for char c arg toCharArray result insert 0 c 6 return result toString J O Listing 4 26 StringUtil java Die Methode reverse wollen wir in einer anderen Klasse benutzen Importieren wir die statischen Eigenschaften von StringUtil so k nnen wir auf die Qualifizierung des Namens der Methode reverse verzichten package name panitz staticImport import static name panitz staticImport StringUtil 3 public class UseStringUtil a static pu
12. int endX e getX int endY e getY startX startX mouseStartX zelle startY start Y mouseStartY zelle zelle zelle endX mouseStartX width repaint Listing 5 31 ApfelWithMouse java Auch f r diese Klasse sehen wir eine kleine Startmethode vor 129 e O Kapitel 5 Graphische Benutzeroberfl chen mit Swing public static void main String _ JFrame f new JFrame f getContentPane add new ApfelWithMouse f pack f setVisible true Listing 5 32 ApfelWithMouse java 5 4 5 Fensterereignisse Auch f r Fenster in einer graphischen Benutzeroberfl che existieren eine Rei he von Ereignissen Das Fenster kann minimiert oder maximiert werden es kann das aktive Fenster oder im Hintergrund sein und es kann schlie lich auch geschlossen werden Um die Reaktion auf solche Ereignisse zu spezifizieren existiert die Schnittstelle WindowListener mit entsprechender prototypischer Adapterklasse WindowAdapter Die Objekte der Fensterereignisbehandlung k nnen mit der Meth ode addWindowListener Fensterkomponenten hinzugef gt werden In den bisher vorgestellten Programmen wird Java nicht beendet wenn das einzige Fenster der Anwendung geschlossen wurde Man kann an der Konsole sehen dass der Javainterpreter weiterhin aktiv ist Das liegt daran dass wir bisher noch nicht spezifiziert haben wie die Fensterkomponenten auf das Ereignis des Schlie ens des Fensters reag
13. package name panitz simpleGui import javax swing import java awt event class LambdaCounter extends JIB private int counter 0 public LambdaCounter button addActionListener ev gt counter counter 1 textArea setText counter J public static void main String _ new LambdaCounter showInFrame Ost Listing 5 29 LambdaCounter java 5 4 4 Mausereignisse Die Schnittstelle ActionListener ist dazu geeignet die Reaktionen einfachsten Ereignisse zu programmieren den Dr cken eines Knopfes Ein in modernen graphischen Oberfl chen h ufigst benutztes Eingabemedium ist die Maus Zwei verschiedene Ereignisarten sind f r die Maus relevant e Mausereignisse die sich auf das Dr cken Freilassen oder Klicken auf einen der Mauskn pfe bezieht Hierf r gibt es eine Schnittstelle zur Behandlung solcher Ereignisse MouseListener e Mausereignisse die sich auf das Bewegen der Maus beziehen Die Behand lung solcher Ereignisse kann ber eine Implementierung der Schnittstelle MouseMotionListener spezifiziert werden Entsprechend gibt es f r graphische Komponenten Methoden um solche Mausereignisbehandler der Komponente hinzuzuf gen addMouseListener und addMouseMotionListener Um die Arbeit mit Ereignisbehandlern zu vereinfachen gibt es f r die entsprech nden Schnittstellen im Paket java awt event prototypische Implementierungen in denen die Methoden der Schnittstelle so implementie
14. sl is private and cannot be accessed System out println v sl s2 is package visible and cannot be accessed We are in a different package System out println v s2 s2 is protected and cannot be accessed We are not a subclass System out println v s3 System out println v s4 Listing 4 34 ProtectedTest java Java wird in seinem Sichtbarkeitskonzept oft kritisiert und das von zwei Seiten Einerseits ist es mit den vier Sichtbarkeiten schon relativ untibersichtlich die ver schiedenen Konzepte der Vererbung und der Pakete spielen bei Sichtbarkeiten eine Rolle Andererseits ist es nicht vollstandig genug und kann verschiedene denkbare Sichtbarkeiten nicht ausdriicken In der Praxis f llt die Entscheidung zwischen privaten und ffentlichen Eigen schaften leicht Gesch tzte Eigenschaften sind hingegen selten Das Gros der Eigen schaften hat die Standardsichtbarkeit der Paketsichtbarkeit Aufgabe 2 Nehmen Sie die Klassen Vertex und GeometricObject und stecken Sie diese in das Paket de hsrm cs oose13 Aufgabe 3 Schreiben Sie eine Unterklasse Ellipse der Klasse GeometricObject Weite und H he einer Ellipse sind die beiden Durchmesser der Ellipse ber laden Sie mehrere Konstruktoren berschreiben Sie die Methoden size und toString Aufgabe 4 Schreiben Sie eine Unterklasse Circle der Klasse Ellipse Dieses ist eine Ellipse in der beide Durchmesser also die Breite und die H he gleich gro si
15. F r die Division auf Ganzzahlen gibt es zwei Operatoren Den eigentlichen Division soperator und den Operator der den ganzzahligen Rest einer Division anzeigt der sogenannte Modulooperator class DivTest public static void main String args System out println 10 3 System out println 10 3 System out println 10 3 System out println 10 3 Listing 3 6 DivTest java 54 3 2 Ausdr cke 3 2 2 Vergleichsoperatoren Obige Operatoren rechnen jeweils auf zwei Zahlen und ergeben wieder eine Zahl als Ergebnis Vergleichsoperatoren vergleichen zwei Zahlen und geben einen bool schen Wert der angibt ob der Vergleich wahr oder falsch ist Java stellt die folgenden Vergleichsoperatoren zur Verf gung lt lt gt gt F r die Gleichheit ist in Java das doppelte Gleichheitszeichen zu schreiben denn das einfache Gleich heitszeichen ist bereits f r den Zuweisungsbefehl vergeben Die Ungleichheit wird mit bezeichnet Folgende Tests demonstrieren die Benutzung der Vergleichsoperatoren class Vergleich public static void main String args System out println 1 1 lt 42 System out println 1 l lt 42 System out println 1 l gt 42 System out println 1 l gt 42 System out println 1 l 42 System out println 14 l 42 j p Listing 3 7 Vergleich java 3 2 3 Logische Operatoren In der bool schen Logik gib
16. List lt String gt ois readObject ois close System out println i System out printin ys Listing 6 49 WriteReadObject java 6 4 Ausnahmen Es gibt w hrend des Ablaufs eines Programms Situationen die als Ausnahmen zum eigentlichen Programmablauf betrachtet werden k nnen Java h lt ein Konzept bereit das die Behandlung von Ausnahmen abseits der eigentlichen Programmlogik erlaubt 6 4 1 Ausnahme und Fehlerklassen Java stellt Standardklassen zur Verf gung deren Objekte einen bestimmten Ausnahme oder Fehlerfall ausdr cken Die gemeinsame Oberklasse aller Klassen die Fehler oder Ausnahmef lle ausdr cken ist java lang Throwable Diese Klasse hat zwei Unterklassen n mlich e java lang Error alle Objekte dieser Klasse dr cken aus dass ein ernsthafter Fehlerfall aufgetreten ist der in der Regel von dem Programm selbst nicht zu beheben ist e java lang Exception alle Objekte dieser Klasse stellen Ausnahmesituatio nen dar Im Programm kann eventuell beschrieben sein wie bei einer solchen Ausnahmesituation weiter zu verfahren ist Eine Unterklasse von Exception ist die Klasse java lang RuntimeException 6 4 2 Werfen von Ausnahmen Ein Objekt vom Typ Throwable allein zeigt noch nicht an dass ein Fehler aufge treten ist Hierzu gibt es einen speziellen Befehl der im Programmablauf dieses kennzeichnet der Befehl throw throw ist ein Schl sselwort dem ein Objekt des Typs Throwable folgt Bei ei
17. null result add line return result toArray new String 0 public static void main String args 137 Kapitel 5 Graphische Benutzeroberflachen mit Swing 27 for String l readTextLines test txt 28 System out println 1 29 30 31 Listing 5 53 FileUtil java Aufgabe 1 Projektaufgabe 20 Punkte Sie sollen in dieser abschlie enden Projektaufgabe eine kleine Spielapplikation entwickeln Die Applikation soll mit einem java swing Timer animiert sein Es soll auf den Klassen die im Laufe des Semesters erstellt wurden aufgebaut werden Das Spiel soll die grundlegende Spielidee von PacMan verfolgen Als Beispiel k nnen Sie PacMan auf folgender Webseite spielen Google Logo als Pacman www google com pacman Mindestanforderung e das Spielfeld ist ein Labyrinth das aus einer Datei eingelesen wird e es gibt eine Spielfigur die mit den Pfeiltasten gesteuert wird e die Spielfigur kann nicht durch W nde laufen e es gibt mehrere weitere Figuren Geister die sich selbstst ndig durch das Labyrinth bewegen e auch die Geister k nnen normaler Weise nicht durch W nde laufen e Ber hrungen von Geist und Spielfigur f hren dazu dass die Spielfigur stirbt e es gibt weitere Objekte die die Spielfigur einsammeln muss um Punkte zu bekommen e es gibt eine Anzeige wieviel Punkte gesammelt wurden und wieviel Leben die Spielfigur noch hat Ausbauanforderungen e D
18. public ConsoleDialogue ButtonLogic logic this logic logic 85 Kapitel 4 Weiterf hrende Konzepte der Objektorientierung uf public void run 12 BufferedReader in 13 new BufferedReader new InputStreamReader System in 14 do 15 try 16 System out println logic getDescription 17 n Ende mit good bye 18 String command in readLine ja if command equals good bye break System out println logic eval command catch IOException e System out println e N while true gt NNN N NY NY a wo 2 public static void main String args 27 new ConsoleDialogue new ButtonLogic run 283 20 Listing 4 16 ConsoleDialogue java Die Klasse Object Eine berechtigte Frage ist welche Klasse die Oberklasse fiir eine Klasse ist wenn es keine extends Klausel gibt Bisher haben wir nie eine entsprechende Oberklasse angegeben Java hat in diesem Fall eine Standardklasse Object Wenn nicht explizit eine Oberk lasse angegeben wird so ist die Klasse Object die direkte Oberklasse Weil die extends Relation transitiv ist ist schlieBlich jede Klasse eine Unterklasse der Klasse Object Insgesamt bilden alle Klassen die in Java existieren eine Baumstruktur deren Wurzel die Klasse Object ist Es bewahrheitet sich die Vermutung tiber objektorientierte Programmierung dass alles als Objekt betrachtet wird Es folgt insbeso
19. t new Timer 29 new ActionListener public void actionPerformed ActionEvent _ move repaint 134 ray O an fp N 00 11 5 5 Zeitgesteuerte Ereignisse Ha t start i Listing 5 44 AnimatedJPanel java Jetzt k nnen wir durch implementieren der Methode move und berschreiben der Methode paintComponent beliebige Animationen erzeugen Als erstes schreiben wir eine Klasse in der ein Kreis sich auf und ab bewegt import java awt Graphics j import javax swing JFrame package name panitz animation import java awt Dimension import java awt Color public class BouncingBall extends AnimatedJPanel Listing 5 45 BouncingBall java Die Gr e des Kreises und des Spielfeldes setzen wir in Konstanten fest final int width 100 final int height 200 final int ballSize 20 Listing 5 46 BouncingBall java Der Ball soll sich entlang der y Achse bewegen und zwar pro Bild um 4 Pixel int yDir 4 Listing 5 47 BouncingBall java Anfangs soll der Ball auf der H lfte der x Achse liegen und ganz oben im Bild liegen int ballX width 2 ballSize 2 int ballY 0 Listing 5 48 BouncingBall java Wir bewegen den Ball Wenn er oben oder unten am Spielfeldrand anst t so ndert er seine Richtung 135 m 1 J 19 Y N N wo gt A A Kapitel 5 Graphische Benutzeroberfl chen mit Sw
20. while true System out println young i i i l Listing 3 17 CountForever Young java Diese Variable kann nun dazu genutzt werden die Schleifen nach einer bestimmten Anzahl von Durchl ufen zu beenden in dem die Schleifenbedingung dieses aus dr ckt 61 p u e w p Kapitel 3 Imperative und funktionale Konzepte class NotForeverYoung public static void main String args int i 0 while i lt 20 System out println young i i i l Listing 3 18 NotForever Young java Wie man an den Beispielen sieht gibt es oft eine lokale Variable die zur Steuerung der Schleife benutzt wird Dieses ver ndert innerhalb des Schleifenrumpfes seinen Wert Abh ngig von diesem Wert wird die Schleifenbedingung beim n chsten Be dingungstest wieder wahr oder falsch Eine Variable von der die Schleifenbedingung abh ngt und die im Schleifenrumpf ver ndert wird bezeichnet man als Schleifen variable Nun kann man mit einer Schleife nach und nach ein Ergebnis in Abh ngigkeit von der Schleifenvariable errechnen Folgende Methode errechnet die Summe aller Zahlen in einem bestimmten Zahlenbereich class Summe public static int summe int n int erg 0 Ergebnisvariable int j n Schleifenvariable while j gt 0 j l uft von n bis 1 erg erg j akkumuliere das Ergebnis j j 1 verringere Laufz hler return erg
21. Man ist angehalten sofern man sich ftir eine Implementierung seines GUIs mit den Paket javax swing entschieden hat nur die graphischen Komponenten aus diesem Paket zu benutzen die Klassen leiten aber von Klassen des Pakets java awt ab Hinzu kommt dass die Ereignisklassen die die Funktionalit t graphischer Objekte bestimmen nur in java awt existieren und nicht noch einmal f r javax swing extra umgesetzt wurden Sind Sie verwirrt Sie werden es hoffentlich nicht mehr sein nachdem Sie die Beispiele dieses Kapitels durchgespielt haben Zur Programmierung eines GUIs m ssen drei fundamentale Fragestellungen gel st werden e Welche graphischen Komponenten stehen zur Verf gung Kn pfe Textfelder Baumdarstellugen Tabellen e Wie k nnen diese Komponenten angeordnet und gruppiert werden Was gibt es f r Layout M glichkeiten e Wie reagiert man auf Ereignisse zum Beispiel auf einen Mausklick Javas Swing Bibliothek kennt f r die Aufgaben e Komponenten wie JButton JTextField JLabel e Layout Manager und Komponenten um andere Komponenten zu gruppieren z B JPanel e Event Handler in denen implementiert wird wie auf ein Ereignis reagiert werden soll In den folgenden Abschnitten werden wir an ausgew hlten Beispielen Klassen f r diese drei wichtigen Schritte der GUI Programmierung kennenlernen 5 1 Swings GUI Komponenten Javas swing Paket kennt drei Arten von Komponenten e Top Level Komponenten e Zwische
22. die sich z B aus der Quadratwurzel von Zahlen ergeben die nicht das Quadrat einer rationalen Zahl sind e komplexe Zahlen C Die reellen Zahlen erweitert um imagin re Zahlen wie sie ben tigt werden um einen Wurzelwert f r negative Zahlen darzustellen Es gilt folgende Mengeninklusion zwischen diesen Mengen NCZCQCRCC Da bereits N nicht endlich ist ist keine dieser Mengen endlich 3 1 2 Zahlenmengen im Rechner Da wir nur von einer endlich gro en Speicherkapazit t ausgehen k nnen lassen sich f r keine der aus der Mathematik bekannten Zahlenmengen alle Werte in einem Rechner darstellen Wir k nnen also schon einmal nur Teilmengen der Zahlenmen gen darstellen Von der Hardwareseite stellt sich heute zumeist die folgende Situation dar Der Computer hat einen linearen Speicher der in Speicheradressen unterteilt ist Eine Speicheradresse bezeichnet einen Bereich von 32 Bit Wir bezeichnen diese als ein Wort Die Einheit von 8 Bit wird als Byte bezeichnet Heutige Rechner verwalten also in der Regel Dateneinheiten von 32 Bit Hieraus ergibt sich die Kardinalit t ein anderes selten gebrauchtes Wort aus dem Franz sischen ist Oktett 48 r 3 1 Primitive Typen der Zahlenmengen mit denen ein Rechner als primitive Typen rechnen kann Soll mit gr eren Zahlenmengen gerechnet werden so muss hierzu eine Softwarel sung genutzt werden Ganzzahlentypen in Java Java 4 Typen zur Darstellung ganzer Zahlen die sic
23. die switch Anweisung Die Idee dieser Anweisung ist eine Kette von mehreren if then Anweisungen zu vermeiden Leider ist die svitch Anweisung in seiner An wendungsbereite recht begrenzt und in Form und Semantik ziemlich veraltet Schematisch hat die switch Anweisung die folgende Form switch expr case const stats case const stats default stats case const stats case const stats Dem Schl sselwort switch folgt ein Ausdruck nach dessen Wert eine Fallunter scheidung getroffen werden soll In geschweiften Klammern folgen die verschiedenen F lle Ein Fall beginnt mit dem Sch sselwort case gefolgt von einer Konstante Diese Konstante ist von einem ganzzahligen Typ und darf kein Ausdruck sein der erst w hrend der Laufzeit berechnet wird Es muss hier eine Zahl stehen Die Konstante muss w hrend der bersetzungszeit des Programms feststehen Der Konstante folgt ein Doppelpunkt dem dann die Anweisungen f r diesen Fall folgen Ein besonderer Fall ist der default Fall Dieses ist der Standardfall Er wird immer ausgef hrt egal was f r einen Wert der Ausdruck nach dem die switch Anweisung unterschei det hat Ein kleines Beispiel soll die operationale Semantik dieser Anweisung verdeutlichen class Switch public static void main String args switch 4 new Integer args 0 intValue case 42 System out println 42 case 52 System out printin 52 case 32 System out println 32 case 22 Sys
24. her dass dem Befehl cat nicht nur eine sondern eine Liste von Dateien angegeben werden kann Es werden dann die Inhalte dieser Dateien nacheinander auf der Kom mandozeile ausgegeben panitz ThinkPad T430 neuesTestVerzeichnis cat neueTestdatei Hier steht nur ein kleiner Beispieltext panitz ThinkPad T430 neuesTestVerzeichnis Ist eine Textdatei sehr gro so flutscht die Ausgabe von cat sehr schnell auf der Kommandozeile vor unserem Auge Man will einen Dateiinhalt in der Regel durch lesen Hierzu gibt es die funktionsgleichen Programme more und less Auch mit diesen Befehlen wird der Dateiinhalt auf der Kommandozeile ausgegeben Allerd ings immer nur ein Seite die genau auf das Fenster der Kommandozeile passt Nun kann man mit Dr cken der Leertaste jeweils zur n chsten Seite gesprungen werden Mit Dr cken der Taste Q wird die Anzeige der Datei beendet 22 1 3 Arbeiten mit der Kommandozeile pwd Pfadangabe Man kann durch den Befehl pwd sich den absoluten Pfad zum Arbeitsverzeichnis anzeigen lassen panitz ThinkPad T430 neuesTestVerzeichnis pwd home panitz neuesTestVerzeichnis panitz ThinkPad T430 neuesTestVerzeichnis rm Dateien L schen Dateien lassen sich auch l schen Hierzu dient der Befehl rm der memotechnisch f r remove steht Auf der Kommandozeile f r Microsoft Betriebssysteme hei t der entsprechende Befehl del Dieser Befehl ist nichts f r Feiglinge denn die mit ihm gel schten Dateien sind u
25. nnen wir wie jede andere Komponente auch einem Fenster hinzuf gen so da sie auf dem Bildschirm angezeigt werden kann ao e U N Hr package name panitz gui graphicsTest import javax swing JFrame class UseSimpleGraphics public static void main String args JFrame frame new JFrame frame getContentPane add new SimpleGraphics frame pack frame set Visible true Listing 5 9 UseSimpleGraphics java Argerlich in unserem letzten Beispiel war da Java zun chst ein zu kleines Fenster f r unsere Komponente ge ffnet hat und wir dieses Fenster mit Maus erst gr er ziehen mu ten Die Klasse JComponent enth lt Methoden in denen die Objekte angeben k nnen welches ihre bevorzugte Gr e bei ihrere Darstellung ist Wenn wir diese Methode berschreiben so da sie eine Dimension zur ckgibt in der das ganze zu zeichnende Bild passt so wird von Java auch ein entsprechend gro es Fenster ge ffnet Wir f gen der Klasse SimpleGraphics folgende zus tzliche Methode hinzu public java awt Dimension getPreferredSize return new java awt Dimension 100 200 Jetzt ffnet Java ein Fenster in dem das ganze Bild dargestellt werden kann 118 5 3 Eigene GUI Komponenten 5 3 1 Fraktale Um noch ein wenig mit Farben zu spielen zeichnen wir in diesem Abschnitt die ber hmten Apfelm nnchen Apfelm nnchen werden definiert ber eine Funktion auf komplexen Zahlen
26. out print mkCross 11 System out print mkCross 5 System out print mkCross 1 args Js Listing 3 25 Cross java Aufgabe 1 Schreiben Sie eine Klasse Karo mit einer statischen Methode static String karo int columns int rows Es soll String der folgenden Form erzeugt werden Beispielaufruf mit karo 20 15 XOXOXOXOXOXOXOXOXOXO OXOXOXOXOXOXOXOXOXOX XOXOXOXOXOXOXOXOXOXO OXOXOXOXOXOXOXOXOXOX XOXOXOXOXOXOXOXOXOXO OXOXOXOXOXOXOXOXOXOX XOXOXOXOXOXOXOXOXOXO OXOXOXOXOXOXOXOXOXOX XOXOXOXOXOXOXOXOXOXO OXOXOXOXOXOXOXOXOXOX XOXOXOXOXOXOXOXOXOXO OXOXOXOXOXOXOXOXOXOX XOXOXOXOXOXOXOXOXOXO OXOXOXOXOXOXOXOXOXOX XOXOXOXOXOXOXOXOXOXO Aufgabe 2 Schreiben Sie eine Methode static int quersumme int n die die Quersumme einer ganzen Zahl berechnet Aufgabe 3 Erg nzen Sie die Klasse Datum um eine Methode 66 3 3 Anweisungen String monthToString Die Methode soll einen String erzeugen der zeilenweise den Monat des Da tums darstellt nach der folgenden Form Freitag der 1 11 2013 Sonnabend der 2 11 2013 Sonntag der 3 11 2013 Montag der 4 11 2013 Dienstag der 5 11 2013 Mittwoch der 6 11 2013 Donnerstag der 7 11 2013 Freitag der 8 11 2013 Sonnabend der 9 11 2013 Sonntag der 10 11 2013 Montag der 11 11 2013 Dienstag der 12 11 2013 Mittwoch der 13 11 2013 Donnerstag der 14 11 2013 Freitag der 15 11 2013 Sonnabend der 16 11 2013 Sonntag der 17 11 2013 Montag der 18 11 2013 Di
27. td gt lt td gt 26 lt td gt lt td gt 27 lt td gt lt td gt 28 lt td gt lt td gt 29 lt td gt lt td gt 30 lt td gt lt tr gt lt table gt 67 r p Kapitel 3 Imperative und funktionale Konzepte 3 4 Rekursion Sobald wir die Signatur einer Funktion oder Prozedur definiert haben d rfen wir sie benutzen sprich aufrufen Damit ergibt sich eine sehr m chtige M glichkeit der Programmierung Wir k nnen Funktionen bereits in ihren eigenen Rumpf aufrufen Solche Funktionen werden rekursivRekursion genannt Recurrere ist das lateinische Wort f r zur cklaufen Eine rekursive Funktion l uft w hrend ihrer Auswertung wieder zu sich selbst zur ck Damit lassen sich wiederholt Programmteile ausf hren Das folgende Programm wird z B nicht m de uns mit dem Wort young zu erfreuen class ForeverYoungRec static void foreverYoung System out println young forever Young public static void main String args forever Young Listing 3 26 Forever YoungRec java Die Funktion main ruft die Funktion foreverYoung auf Diese druckt einmal das Wort young auf die Konsole und ruft sich dann selbst wieder auf Dadurch wird wieder young auf die Konsole geschrieben und so weiter Wir haben ein endlos laufendes Programm Tats chlich endlos Lassen sie es mal m glichst lange auf Ihrem Rechner laufen Was zun chst wie eine Spielerei anmutet kann verfeinert werden indem mit Hilfe eines Argume
28. 3 return Mittwoch case 4 return Donnerstag case 5 return Freitag default return Sonnabend Schreiben Sie Testaufrufe f r die Wochentagsberechnung Aufgabe 3 Erg nzen Sie die Klasse Datum nun noch um eine Methode die f r ein bestimmtes Datumsobjekt berechnet an welchen Datum in dem entsprechen den Jahr Ostern liegt Datum getEasterDay Es soll fiir das Jahr des Datums der Ostersonntag errechnet werden Hierzu k nnen Sie die erg nzte Osterformel benutzen wie auf Wikipedia beschrieben de wikipedia org wiki Osterformel 53 pen j r Kapitel 3 Imperative und funktionale Konzepte 3 2 1 Arithmetische Operatoren Java stellt f r Zahlen die vier Grundrechenarten zur Verf gung Bei der Infixnotation gelten f r die vier Grundrechenarten die blichen Regeln der Bindung n mlich Punktrechnung vor Strichrechnung M chte man diese Regel durchbrechen so sind Unterausdr cke in Klammern zu setzen Folgende kleine Klasse demonstriert den Unterschied class PunktVorStrich public static void main String args System out println 17 4 2 System out printIn 17 4 2 Listing 3 4 Punkt VorStrich java Wir k nnen nun also Methoden schreiben die Rechnungen vornehmen In der fol genden Klasse definieren wir z B eine Methode zum Berechnen der Quadratzahl der Eingabe class Square static int square int i return i i Listing 3 5 Square java
29. 50 20 1000 Pixel in x Richtung und 30 20 600 Pixel in y Richtung 136 5 5 Zeitgesteuerte Ereignisse a ao e o Die Klasse Labyrinth habe einen Konstruktor in dem ein Dateiname einer Textdatei bergeben wird In der Textdatei werden mehrere Zeilen gleich er L nge angenommen Die Textdatei entspricht der Zeilen und Spalten des Labyrinths Wenn in der Textdatei an einer Position ein gro es W steht dann ist an dieser Position ein Quadrat zu setzen ansonsten nicht Beispiel WWWWWWWWWW W Ww W W WWW W WW WW W WWW W W W W WWWWWWWWWW Hier eine kleines Labyrinth mit 10 Spalten und 7 Zeilen und 42 Quadraten f r die W nde Folgende Klasse enth lt eine statische Methode um aus einer Textdatei die einzelnen Zeilen in einen Array zu sammeln Schreiben Sie eine Hauptmethode in der Labyrinthe aus Textdateien eingele sen und in einem JFrame Objekt angezeigt werden package de hsrm cs oosel3 util import java io import java util public class FileUtil public static String readTextLines String fileName try return readTextLines new FileReader fileName catch IOException e e printStackTrace throw new RuntimeException e public static String readTextLines Reader fileReader throws IOException List lt String gt result new LinkedList lt gt BufferedReader in new BufferedReader fileReader String line null while line in readLine
30. Complex java Soweit komplexe Zahlen wie wir sie f r Apfelm nnchen brauchen Grundlage zum Zeichnen von Apfelm nnchen ist folgende Iterationsgleichung auf komplexen Zahlen 2 11 22 c Wobei zu die komplexe Zahl 0 0i mit dem Real und Imagin rteil 0 ist Zum Zeichnen der Apfelm nnchen wird ein Koordinatensystem so interpretiert da die Achsen jeweils Real und Imagin rteil von komplexen Zahlen darstellen Jed er Punkt in diesem Koordinatensystem steht jetzt f r die Konstante c in obiger Gleichung Nun wir gepr ft ob und f r welches n die Norm von zn gr er eines bestimmten Schwellwertes ist Je nach der Gr e von n wird der Punkt im Koordi natensystem mit einer anderen Farbe eingef rbt Mit diesem Wissen k nnen wir nun versuchen die Apfelm nnchen zu zeichnen Wir m ssen nur geeignete Werte f r die einzelnen Parameter finden Wir schreiben eine eigene Klasse f r das graphische Objekt in dem ein Apfelm nnchen gezeichnet wird Wir deklarieren die Imports der ben tigten Klassen package name panitz crempel tool apfel sl import java awt Graphics import java awt Color import java awt Dimension import javax swing JFrame import javax swing JPanel public class Apfelmaennchen extends JPanel Listing 5 15 Apfelmaennchen java Als erstes deklarieren wir Konstanten f r die Gr e des Apfelm nnchens final int width 480 final int height 430 Listing 5 16 Apfelmaennchen
31. Dem Programm tar wird durch eine Folge vom Buchstaben beim Aufruf angegeben was es machen soll z B ob es ein neues Archiv erzeugen oder ob es ein bestehendes entpacken soll Dann folgen die Dateien mit de nen gearbeitet werden soll das Erzeugen eines neuen Archivs wird durch den Buch staben c f r create angegeben Mit dem Buchstaben f wird angegeben dass jetzt der Name der Archivdatei folgt Will man also alle Bilddateien im Arbeitsverze ichnis in eine Archivdatei bilder tar verpacken so geht das mit dem Befehl tar cf bilder tar jpg Zum Entpacken einer Archivdatei ben tzt man den Buchstaben x f r extract statt des Buchstabens c Die mit obigen Befehle erzeugte Archivdatei l sst sich also mit tar xf bilder tar wieder entpacken Will man sich nur eine Auflistung der Dateien die in einer Archivdatei verpackt wurden geben lassen so nimmt man den Buchstaben t f r table F gt man noch den Buchstaben v f r verbode hinzu so gibt das Programm etwas mehr Ausgaben Soll die Archivdatei komprimiert werden so f ge man noch den Buchstaben z hinzu Hier ein kleines Beispiel zum Verpacken Auflisten und Entpacken einer kleinen Archivdatei panitz ThinkPad T430 Bilder tar cvzf bilder tgz png Bildschirmfoto vom 2013 07 17 19 05 30 png Bildschirmfoto vom 2013 08 01 19 49 16 png Bildschirmfoto vom 2013 08 01 21 59 44 png Logo gross png 27 Kapitel 1 Einf hrung in die Welt der Softwareentwicklung tree png panitz ThinkPad
32. Die aus der Mathematik bekannten komplexen Zahlen sind Zahlen mit zwei reellen Zahlen als Bestandteil den sogenannten Imagin rteil und den sogenannten Realteil Wir schreiben zun chst eine rudiment re Klasse zur Darstellung von komplexen Zahlen package name panitz crempel tool apfel 3 public class Complex Listing 5 10 Complex java Diese Klasse braucht zwei Felder um Real und Imagin rteil zu speichern public double re public double im Listing 5 11 Complex java Ein naheliegender Konstruktor f r komplexe Zahlen f llt diese beiden Felder public Complex double re double im this re re this im im Listing 5 12 Complex java Im Mathematikbuch schauen wir nach wie Addition und Multiplikation f r kom plexe Zahlen definiert sind und schreiben entsprechende Methoden public Complex add Complex other return new Complex re other re im other im public Complex mult Complex other return new Complex re other re im other im re other im im other re Listing 5 13 Complex java Zusatzlich finden wir in Mathematik noch die Definition der Norm einer komplex en Zahl und setzen auch diese Definition in eine Methode um Zum Quadrat des Realteils wird das Quadrat des Imagin rteils addiert 119 r a N 1 Kapitel 5 Graphische Benutzeroberfl chen mit Swing public double norm return re re im im Listing 5 14
33. Klasse mit der Endung javat Auch hier werden wir Ausnahmen kennenlernen Jede Programmiersprache hat ein paar W rter die eine f r die Sprache beson dere Bedeutung haben Diese W rter sind festgelegt und werden als Schl sselw rter bezeichnet Die Zahl der Schl sselw rter ist meist recht klein gehalten Zu Beginn einer Klassendefinition steht in Java das Schl sselwort class gefolgt von dem Namen den man f r die Klasse gew hlt hat deklariert Der Name der Klasse ist frei w hlbar Wann immer der Programmierer in einer Programmiersprache einen Namen sei es f r eine Klasse eine Variable oder auch f r Felder und Methoden frei w hlen kann nennt man diese Namen auch Bezeichner engl identifier 38 N e 2 2 Klassen und Objekte Abbildung 2 4 Modellierung eines Ausleihvorgangs Nach dem Bezeichner f r den Klassennamen folgt in geschweiften Klammern der Inhalt der Klasse bestehend aus Felddefinitionen und Methodendefinitionen Die einfachste Klasse die in Java denkbar ist ist eine Klasse ohne Felder oder Methoden Minimal Listing 2 1 Minimal java Beachten Sie dass Gro und Kleinschreibung in Java relevant ist Alle Schl sselw rter wie class werden stets klein geschrieben Klassennamen starten per Konvention immer mit einem Gro buchstaben 2 2 1 Felder Zum Speichern von Daten k nnen Felder engl field f r eine Klasse definiert wer den In einem Feld k nnen Objekte f
34. Lage ist bis unendlich zu z hlen so wird er das sicher auch zweifach k nnen indem er einfach z hlt TD ids by ey 3322 Entsprechend kann er auch dreifach vierfach fiinfach etc bis Unendlich z hlen berlegen Sie eine Z hlweise mit der Chuck Norris dann auch un endlich oft bis Unendlich z hlen kann Aufgabe 2 Sie haben ein Navigationssystem f r die Schifffahrt entwickelt So ganz zufrieden sind Sie mit Ihrem System aber noch nicht denn es schl gt Ihnen eines Tages folgende Route vor Segeln Sie erst 100km nach Norden dann 100km nach Westen anschlie end 100km nach S den und dann 100km nach Osten Dann haben Sie Ihr Ziel erreicht K nnen Sie sich den Weg sparen Aufgabe 3 Sie nehmen bei einer Quizshow Teil Sie sind der letzte Kandidat Es gibt zwei T ren Hinter der einen T r steht f r Sie ein Eimer voll Gold hinter der anderen T r lauert ein gef hrliches Monster das Sie fressen will Vor den T ren steht jeweils ein W chter Einer der beiden W chter sagt immer die Wahrheit der andere l gt bei allem was er sagt Sie wissen aber nicht wer Kapitel 1 Einf hrung in die Welt der Softwareentwicklung von den beiden der L gner ist Sie d rfen einem Wachter genau eine Frage stellen die mit Ja oder Nein zu beantworten ist Was fiir eine Frage wiirden Sie stellen um heraus zu bekommen hinter welcher T r das Gold ist Aufgabe 4 Sie fahren in ein fremdes Land und erlernen die Sprache Das Land hat aber tei
35. Rekursion public static void main String args forRek gt System out printIn hallo forRek 5 9 gt System out println welt Listing 3 36 For8 java Die nderungen die mit Java 1 8 in die Sprache eingef gt werden sind gewaltig und erlauben einen vollkommen neuen Programmierstil und eine Methodik die st rker das funktionale Programmierparadigma verfolgt Wir werden in diesem Modul aber vorerst noch davon absehen uns mit die Sprachumfang von Java 1 8 zu besch ftigen und uns erst im zweiten Semester im Rahmen des Moduls Programmiermethoden und Techniken damit besch ftigen 3 4 2 Einsatz von Rekursion Wie wir gesehen haben lassen sich mit Rekursion die gleichen Probleme l sen wie mit der Iteration ber Schleifen Wann sind also besser Schleifen wann rekursive L sungen vorzuziehen Wer die beiden konkurrierenden Versionen von ForeverYoung gestartet hat wird festgestellt haben dass die rekursive Version relativ schnell ab st rzt w hrend die iterative Version anscheinend endlos l uft Tats chlich haben rekursive Methoden ein Problem bei jedem Methodenaufruf ist auf einem Speicher abzulegen von welcher Programmzeile mit was f r konkreten Argumenten die Methode aufgerufen wurde Diese Information w chst bei einer Rekursion schnell an bis nicht mehr gen gend Speicherplatz vorhanden ist diese zu speichern Dann st rzt das Programm ab Daher ist f r normal
36. Sie ein Objekt von der Klasse und lassen Sie es in einem JFrame anzeigen 133 r m S 00 Kapitel 5 Graphische Benutzeroberfl chen mit Swing 5 5 1 Animationen Mit dem Prinzip des Timers k nnen wir jetzt auf einfache Weise Animationen realisieren In einer Animation bewegt sich etwas Dieses dr cken wir durch eine entsprechende Schnittstelle aus package name panitz animation public interface Animation public void move Listing 5 41 Animation java Wir wollen einen besonderen JPanel realisieren in dem sich etwas bewegen kann Damit soll ein solcher JPanel auch eine Animation sein Es bietet sich an eine abstrakte Klasse zu schreiben in der die Methode move noch nicht implementiert ist package name panitz animation import javax swing JPanel import javax swing Timer import java awt event public abstract class AnimatedJPanel extends JPanel implements Animation Listing 5 42 AnimatedJPanel java Um zeitgesteuert das Szenario der Animation zu ver ndern brauchen wir einen Timer Timer t Listing 5 43 AnimatedJPanel java Im Konstruktor wird dieser initialisiert Als Ereignisbehandlung wird ein Ereignis behandlungsobjekt erzeugt das die Methode move aufruft also daf r sorgt dass die Szenerie sich weiterbewegt und das daf r sorgt dass die Szenerie neu gezeichnet wird Wir starten diesen Timer gleich public AnimatedJPanel super true
37. Skandinavien 789565 if p instanceof Student Student s Student p System out println s matrikelNummer Listing 4 18 CastTest java 88 m js 4 1 Vererbung Die Zeile s Student p sichert erst dem Objekt im Feld p zu dass es ein Objekt des Typs Student ist so dass es dann als Student benutzt werden kann Wir haben den Weg zur ck vom Allgemeinen ins Spezifischere gefunden Allerdings ist dieser Weg gef hrlich Eine Typzusicherung kann fehlschlagen class CastError public static void main String str Person2 p new Person2 Strindberg Skandinavien Student s Student p System out println s matrikelNr Dieses Programm macht eine Typzusicherung des Typs Student auf ein Objekt das nicht von diesem Typ ist Es kommt in diesem Fall zu einen Laufzeitfehler sep swe10 fh gt java CastError Exception in thread main java lang ClassCastException Person2 at CastError main CastError java 4 Die Fehlermeldung sagt dass wir in Zeile 4 des Programms eine Typzusicherung auf ein Objekt des Typs Person vornehmen die fehlschl gt Will man solche Laufzeit fehler verhindern so ist man auf der sicheren Seite wenn eine Typzusicherung nur dann gemacht wird nachdem man sich mit einem instanceof Ausdruck davon berzeugt hat dass das Objekt wirklich von dem Typ ist den man ihm zusichern will Mit den jetzt vorgestellten Konstrukten k nnen wir eine L sun
38. TestStudentl public static void main String args Person2 p new Student Martin M ller Hauptstra e 7463456 Listing 4 10 TestStudentl java Alle Studenten sind auch Personen Hingegen die andere Richtung ist nicht m glich nicht alle Personen sind Studenten Folgendes Programm wird von Java mit einem Fehler zur ckgewiesen class StudentErrorl public static void main String args Student s new Person2 Martin M ller Hauptstra e Die Kompilierung dieser Klasse f hrt zu folgender Fehlermeldung StudentErrori java 3 incompatible types found Person required Student Student s new Person2 Martin M ller Hauptstra e 1 error 81 Kapitel 4 Weiterf hrende Konzepte der Objektorientierung Java weist diese Klasse zur ck weil eine Person nicht ein Student ist Gleiches gilt f r den Typ von Methodenparametern Wenn die Methode einen Parameter vom Typ Person verlangt so kann man ihm auch Objekte eines spezielleren Typs geben in unserem Fall der Klasse Student class TestStudent2 static void printPerson Person2 p System out println p toString public static void main String args Student s new Student Martin M ller Hauptstra e 754545 printPerson s Listing 4 11 TestStudent2 java Der umgekehrte Fall ist wiederum nicht m glich Methoden die als Parameter Ob jekte der Klasse Studen
39. Um primitive Typna men von Klassennamen leicht textuell unterscheiden zu k nnen sind sie in Klein schreibung definiert worden Ansonsten werden primitive Typen genauso behandelt wie Klassen Felder k nnen primitive Typen als Typ haben und ebenso k nnen Parametertypen und R ckga betypen von Methoden primitive Typen sein Gerade in diesem Bereich wollten die Entwickler von Java einen leichten Umstieg von der C Programmierung nach Java erm glichen Leider hat Java in dieser Hinsicht auch ein C Erbe und ist nicht in allen Punkte so sauber entworfen wie es ohne diese Designvorgabe w re 47 Kapitel 3 Imperative und funktionale Konzepte Um Daten der primitiven Typen aufschreiben zu k nnen gibt es jeweils Literale f r die Werte dieser Typen 3 1 1 Zahlenmengen in der Mathematik In der Mathematik sind wir gewohnt mit verschiedenen Mengen von Zahlen zu arbeiten e nat rliche Zahlen N Eine induktiv definierbare Menge mit einer kleinsten Zahl so dass es f r jede Zahl eine eindeutige Nachfolgerzahl gibt ganze Zahlen Z Die nat rlichen Zahlen erweitert um die mit einem nega tiven Vorzeichen behafteten Zahlen die sich ergeben wenn man eine gr ere Zahl von einer nat rlichen Zahl abzieht e rationale Zahlen Q Die ganzen Zahlen erweitert um Br che die sich ergeben wenn man eine Zahl durch eine Zahl teilt von der sie kein Vielfaches ist reelle Zahlen R Die ganzen Zahlen erweitert um irrationale Zahlen
40. Wie Sie sehen gibt es einiges zu lernen in Ihrem Studium Auf jeden Fall wird Ihnen nicht langweilig werden Beginnen wir also mit den ersten Schritten zur Ausbildung zum Software Autor 1 2 Programmiersprachen Auch wenn der letzte Abschnitt gezeigt hat dass die eigentliche Codierung der Software nur ein kleiner Teil des Projektes ausmacht sind doch eine oder mehrere Programmiersprachen auszuw hlen in denen das Projekt realisiert wird Es gibt mittlerweile mehr Programmiersprachen als nat rliche Sprachen Die meis ten Sprachen f hren entsprechend nur ein Schattendasein und die Mehrzahl der Pro gramme konzentriert sich auf einige wenige Sprachen Programmiersprachen lassen sich nach den unterschiedlichsten Kriterien klassifizieren I Wer Interesse hat kann im Netz einmal suchen ob er eine Liste von Programmiersprachen findet 14 1 2 Programmiersprachen Im folgenden eine hilfreiche Klassifizierung in fiinf verschiedene Hauptklassen imperativ C Pascal Fortran Cobol das Hauptkonstrukt dieser Sprachen sind Befehle die den Speicher manipulieren objektorientiert Java C C Objective C Eiffel Smalltalk Daten werden in Form von Objekten organisiert Diese Objekte b ndeln mit den Daten auch die auf diesen Daten anwendbaren Methoden funktional Scala Lisp ML Haskell Scheme Erlang Clean F Pro gramme werden als mathematische Funktionen verstanden und auch Funk tionen k nnen Daten sein Dieses Pr
41. WriteReadObject java Diesen verwenden wir nun um eine in Strom in den Objekte verschickt werden k nnen zu erzeugen ObjectOutputStream oos new ObjectOutputStream fos Listing 6 44 WriteReadObject java Wir brauchen irgendein beliebiges Objekt dass wir nun speichern k nnen Hierzu legen wir beispielsweise eine Liste an List lt String gt xs new ArrayList lt String gt xs add the xs add world xs add is xs add my xs add oyster Listing 6 45 WriteReadObject java Und nun k nnen wir sowohl eine Zahl aber auch das ganze Listenobjekt in die Datei speichern oos writelnt 12345 oos writeObject xs oos close Listing 6 46 WriteReadObject java Nun k nnen wir die geschriebene Datei wieder lesen und das Objekt dadurch neu erhalten realistischer Weise w rde das nat rlich in einem anderen Programm passieren Hierzu brauchen wir einen EIngebaestrom FileInputStream fis new FileInputStream t tmp Listing 6 47 WriteReadObject java Diesen machen wir zu einem Strom aus dem Objekte gelesen werden k nnen ObjectInputStream ois new ObjectInputStream fis Listing 6 48 WriteReadObject java Jetzt k nnen wir daraus lesen Zun chst die gespeicherte Zahl dann das Listenob jekt 167 Kapitel 6 Weiterf hrende Konzepte int i ois readInt List lt String gt ys
42. Zeichenkette dargestellt ist eine ganze Zahl die das Monatsgehalt des Mitarbeiters in Cent ausdr ckt und eine ganze Zahl die die w chentliche Arbeitszeit des Mitarbeiters darstellt Schreiben Sie einen Konstruktor und berschreiben Sie die Meth ode equals auf adequate Weise berschreiben Sie auch die Methode toString auf sinnvolle Weise b Schreiben Sie eine Unterklasse Teamleiter der Klasse Mitarbeiter Teamleiter Objekte repr sentieren Mitarbeiter die ein Team leiten Diese enthalten zus tzlich ein Feld einer Standardliste von Mitarbeit erobjekten die das Team darstellen und ein String Feld f r den Team namen Die Methode toString soll berschrieben werden um die zus tzliche Information mit zu ber cksichtigen c Schreiben Sie in der Klasse Teamleiter eine Methode public int durchschnittsgehalt Sie soll das Durchschnittsgehalt der Teammitglieder des Teams das der Teamleiter leitet berechnen 179 Kapitel 7 Zusammenfassung und Ausblick Aufgabe 2 wird class Aufgabe2a public static void main String args int y 9 int x 39 while x gt 20 System out println x y switch x 3 case 2 x x l y 2 case 1 x x 1 y y 10 break default x x J if x lt 27 break Listing 7 1 Aufgabe2a java b N Betrachten Sie folgende Klasse class Aufgabe2b static int f int x int yl int y2 System out println x x
43. alles ber AWT vergessen insbesondere das Paket java awt Nein Swing benutzt gro e Teile aus AWT Insbesondere hat jede Swingkomponente eine Oberklasse aus AWT Aber auch die Ereignisbehand lungsklassen werden vollst ndig aus AWT benutzt Und woran erkenne ich jetzt wann ich Komponente aus AWT be nutzen muss obwohl ich in Swing programmiere Alle graphischen 7 1 Fragen und Antworten AWT Komponenten haben ein Swing Pendant das mit dem dem Buchstaben J beginnt z B javax swing JButton im Gegensatz zu java awt Button e Sonst noch paar Tipps zum benutzen von Swing Keine eigenen Threads schreiben Nicht die Methode paint sondern paintComponent ber schreiben e Toll wenn ich keine Threads schreiben soll wie mache ich dann z B zeitgesteuerte Ereignisse in Swing Da gibt es die Klasse javax swing Timer f r e Na ich wei nicht ob ich jetzt gen gend wei f r die Klausur Das wei ich auch nicht ber alles haben wir hier nicht gesprochen Ich denke aber es reicht an Wissen aus Aufgabe 1 Modellieren und Schreiben von Klassen L sen Sie diese Aufgabe auf dem Papier Sie sollen in dieser Aufgabe Klassen entwickeln die es erlauben Informationen ber die Personalstruktur einer Firma zu speichern a Entwickeln Sie eine Klasse Mitarbeiter Ein Mitarbeiter Objekt dieser Klasse repr sentiert einen Angestellten in einer Firma Es soll die fol genden Eigenschaften haben der Name des Mitarbeiters der durch eine
44. die Uhr in einem Fensterrahmen anzeigt is public static void main String _ 16 JFrame f new JFrame 17 f getContentPane add new Uhr 18 f pack 19 f setVisible true 20 21 Listing 5 39 Uhr java Aufgabe 1 Gegeben sei die folgende Schnittstelle p 3 import 5 public 6 void 7 void 8 void 120 package de hsrm cs oosel3 java awt Graphics interface CollisionScene collisions move paintAll Graphics g io int getWidth uj int getHeight Listing 5 40 CollisionScene java Schreiben Sie eine Klasse GeometricObjectsScene die dieses Schnittstelle implementiert Ein Objekt der Klasse GeometricObjectsScene soll eine Rei hung Array von GeometricObject Objekten im Konstruktor bergeben bekommen Die Methoden sollen folgende Funktionalitat haben 132 5 5 Zeitgesteuerte Ereignisse e in move soll jedes Objekt in der Reihung bewegt werden e in paintAll soll jedes Objekt der Reihung auf das Graphics Objekt gezeichnet werden e in collisions sollen zun chst alle Objekte der Reihung getestet werden ob sie au erhalb des Bereichs von 0 bis zu getWidth liegen Wenn ja soll die Bewegung in x Richtung f r das Objekt umgedreht werden Dasselbe soll f r die y Richtung und getHeight gemacht werden Desweiteren sollen paarweise alle Objekte der Reihung getestet werden ob sie sich ber hren Wenn sich zwei Objekte ber hren sol
45. eclipse_neu EI keller Ep c3 crempelcopy i erz Ei kellerorg c pi ci wss c fh c lib c ph c Desktop EI glas EMail ci pl Muster HSB RGB 4 Il Dateiname Vorschau Dateityp Alle Dateien oO Beispieltext Beispieltext Beispieitext Beispiehext ffnen Abbrechen E oO Beispieltext Beispieltext javaxswing JTable javaxswing JTree E JTree cJ colors c sports J food Abbildung 5 6 berblick ber komplexere Komponenten 142 r Kapitel 6 Weiterf hrende Konzepte 6 1 Reihungen Arrays Java kennt wie fast alle Programmiersprachen ein weiteres Konzept von Samm lungen Reihungen eng arrays Reihungen stellen im Gegensatz zu Listen oder Mengen eine Menge von Daten gleichen Typs mit fester Anzahl dar Jedes Element einer Reihung hat einen festen Index ber den es direkt angesprochen werden kann 6 1 1 Deklaration von Reihungen Eine Reihung hat einen festen Elementtyp Ein Reihungstyps wird deklariert indem dem Elementtyp ein eckiges Klammernpaar nachgestellt wird z B ist String eine Reihung von Stringelementen Die Elemente einer Reihung k nnen sowohl von einem Objekttyp als auch von einem primitiven Typ sein also gibt es auch den Typ int oder z B boolean Reihungen sind Objekte Sie sind zuweisungskompatibel f r Objektfelder es lassen sich Typzusicherunge
46. einen linearen Aufwand e LinkedList kann daf r im Vergleich effizienter Elemente hinzuf gen oder l schen Gerade beim L schen eines Elements m ssen in der ArrayList alle nachfolgenden Elemente in der internen Reihung umkopiert werden Bei einer LinkedList kann ein Kettenglied einfach ausgeh ngt werden Folgende Klasse zeigt wie eine Liste erzeugt wird und ihr nach und nach Elemente hinzugef gt werden import java util List import java util ArrayList class ListUsage public static void main String args List lt String gt xs new ArrayList lt String gt oder new LinkedList lt String gt xs add hallo xs oat we y xs add wie all a xs add es xs add dir System out printin xs Listing 6 24 ListUsage java Das Programm hat folgende Ausgabe sep swe10 fh beispiele gt java ListUsage hallo welt wie geht es dir sep swe10 fh beispiele gt Wie man sieht fiigt die Methode add Objekte am Ende einer Liste an 155 Kapitel 6 Weiterf hrende Konzepte Iterieren ber Sammlungen package name panitz util test import java util ArrayList import java util Collections import java util Iterator import java util LinkedList import java util List public class IterateList public static void main String args List lt String gt xs new LinkedList lt gt xs add hallo xs add Freunde
47. examples src gt java Use01dBoxError Exception in thread main java lang ClassCastException at Use0ldBoxError main Use0ldBoxError java 4 sep linux fh javal 5 examples src gt 147 a Kapitel 6 Weiterf hrende Konzepte Wie man sieht verlieren wir Typsicherheit sobald der Typ Object benutzt wird Bestimmte Typfehler k nnen nicht mehr statisch zur bersetzungszeit sondern erst dynamisch zur Laufzeit entdeckt werden Der Wunsch ist Klassen zu schreiben die genauso allgemein benutzbar sind wie die Klasse 01dBox oben aber trotzdem die statische Typsicherheit garantieren indem sie nicht mit dem allgemeinen Typ Object arbeiten Genau dieses leisten generische Klassen Hierzu ersetzen wir in der obigen Klasse jedes Auftreten des Typs Object durch einen Variablennamen Diese Variable ist eine Typvariable Sie steht f r einen beliebigen Typen Dem Klassennamen f gen wir zus tzlich in der Klassendefinition in spitzen Klammern eingeschlossen hinzu da diese Klasse eine Typvariable be nutzt Wir erhalten somit aus der obigen Klasse 01dBox folgende generische Klasse Box class Box lt ET gt ET contents Box ET contents this contents contents Listing 6 9 Box java Die Typvariable ET ist als allquantifiziert zu verstehen F r jeden Typ ET k nnen wir die Klasse Box benutzen Man kann sich unsere Klasse Box analog zu einer realen Schachtel vorstellen Beliebige Dinge k nnen in die Schachtel gelegt we
48. getClass getName 43 panel add p 44 Listing 5 61 ComponentOverview java Schlie lich wird noch das Hauptfester zusammengepackt 45 f getContentPane add panel 46 f pack AT f set Visible true Listing 5 62 ComponentOverview java Und um alles zu starten noch eine kleine Hauptmethode a public static void main String _ 50 new ComponentOverview 51 52 Listing 5 63 ComponentOverview java Wir erhalten einmal die bersicht von Komponenten wie in Abbildung 5 5 und einmal wie in Abbildung 5 6 dargestellt Womit wir uns noch nicht im einzelnen beschaftigt haben ist das Datenmodell das hinter den einzelnen komplexeren Komponenten steht 141 Kapitel 5 Graphische Benutzeroberflachen mit Swing javaxswing JCheckBox javaxswing JRadioButton C check mich dr ck mich javax swing JMenultem javaxswing JComboBox javax swing jList ins Menue mit mir friends romans contrymen javaxswing JSlider javax swing JSpinner Javax swing TextField iH javax swing JFormattedTextField javaxswing JLabel javax swing JProgressBar hallo einfach nur ein Label Abbildung 5 5 berblick ber einfache Komponenten javaxswing JColorChooser javaxswing JFileChooser suchen m sw Salsa ci bin EI diverses EI glasgowCvs jo c camera c downloads DI jarfiles bak amp or c cds J
49. gibt es ein einheitliches API zum Lesen von Information aus ganz unterschiedlichen Quellen Einstiegspunkt zum Lesen von einem Webserver ist die Klasse java net URL mit der die Adresse des Webservers angegeben werden kann Die Klasse hat einen Konstruktor der ein String Argument erh lt slimport java io Reader import java io InputStream import java io InputStreamReader import java net URL import java net URLConnection public class ReadFromServer public static void main String args throws Exception URL url new URL http www jarass com home index php Listing 6 38 ReadFromServer Die Klasse URL hat eine Methode openConnection die es erlaubt eine Verbindung ber das Netzwerk aufzubauen URLConnection con url openConnection Listing 6 39 ReadFromServer Von der damit erhaltenen Verbindung kann nun der Eingabestrom erfragt werden also das Objekt auf dem der Webserver uns Daten liefert InputStream in con getInputStream Listing 6 40 ReadFromServer Von nun an geht alles wie bereits bei dem Einlesen aus einer Datei 165 r Kapitel 6 Weiterf hrende Konzepte Reader read new InputStreamReader in utf 8 int i do i read read if i gt 0 char c char i System out print c while i gt 0 read close Listing 6 41 ReadFromServer 6 3 5 Str me f r Objekte Bisher haben
50. graphische Benutze roberfl chen wie Suns Solaris und HP UX Vor dieser Zeit war eine Benutzerinteraktion immer rein ber die Tastatur und fast immer ber eine Kommandozeile Bis heute stellen alle Betriebssysteme einen Und wer es wissen will f r eigene kleine Projekte benutze ich pers nlich Scala oder Haskell f r Webanwendungen GWT und f r mein Smartphone Java auf Android 16 1 3 Arbeiten mit der Kommandozeile direkten textuellen Zugang ber eine Kommandozeile zur Verf gung Eine Kom mandozeile ist ein Programm das Texteingaben erwartet und diese f r bestimmte Aktionen im Betriebssystem ausf hrt Hierzu geh rt zum Beispiel dass man ber die Kommandozeile beliebige Programme starten kann Auch Programme die selb st wieder eine graphische Benutzeroberfl che haben Alle Programme k nnen aber auch selbst textuelle Ausgaben auf die Kommandozeile schreiben und Texteingaben von der Kommandozeile lesen Die Kommandozeile ist also in der Regel nicht die direkte Interaktion mit dem Be triebssystem sondern selbst ein Programm das die Benutzereingaben interpretiert und in Betriebssystembefehle umsetzt Ein solches Terminalprogramm wird als shell bezeichnet Wir werden im Folgenden einen rudiment ren Umgang mit dem Pro gramm bash zeigen bash steht f r GNU Bourne Again SHell F r Linux steht die bash standardm ig als Kommandozeilenprogramm zur Verf gung Auf Windows Systemen gibt es Software Pakete die installier
51. im Masterstudiengang im Modul Formale Modelle vorgestellt Grundlage aller fast Spezifikationssprachen ist ein gewisses for males Handwerkszeug dass im Modul Diskrete Strukturen vermittelt wird e Sicherheit und Datenschutz Wer die Tagespresse verfolgt sieht dass die Sicherheit von Daten ein gro es und ernstes Thema ist Das Modul IT Security wird hierzu in Ihren Studium die theoretischen Grundlagen dieses Aspektes vermitteln e Ergonomie und Benutzerfreundlichkeit Jeder Anwender hat sich sicher Kapitel 1 Einf hrung in die Welt der Softwareentwicklung 10 schon einmal dar ber ge rgert dass Software nicht intuitiv oder folgerichtig zu bedienen war Das einfache Dinge nur kompliziert und durch viele Schritte realisiert werden konnten oder auch dass die Software die wichtigen Infor mationen nicht leicht zug nglich und bersichtlich dargestellt hat Auch eine in der Funktionalit t fehlerfreie Software kann unbrauchbar sein weil sie zu schwer zu bedienen ist Im Wahlbereich unseres Curriculums findet sich das Modul Usability Engineering dass sich mit diesen Fragen auseinander setzt Optimierung Ein wichtiger Aspekt einer Software ist dass sie nicht nur korrekt funktioniert sondern auch einen guten Durchsatz und schnelle Antwortzeiten hat Hierbei kann schnell aber auch ganz unterschiedliches bedeuten Von eine Handelsplattform f r B rsengesch fte wird eine extrem schnelle Abarbeitung der Anfrage erwartet e
52. instanziieren um sie dann einer Zwischenkomponenten ber deren Methode add als Unterkomponente hinzuzuf gen Sind alle gew nschten graphischen Objekte einer Zwischenkompo nente hinzugef gt worden so kann auf der zugeh rigen top level Komponenten die Methode pack aufgerufen wurden Diese berechnet die notwendige Gr e und das Layout des Fensters welches schlie lich sichtbar gemacht wird Das folgende Programm erzeugt ein Fenster mit einer Textfl che import javax swing sl class JT public static void main String _ JFrame frame new JFrame JTextArea textArea new JTextArea textArea setText hallo da drau en frame add textArea frame pack frame set Visible true Listing 5 3 JT In der Regel wird man die GUI Komponente die man schreibt nicht nacheinander in der Hauptmethode definieren sondern es wird ein eigenes Objekt definiert dass die GUI Komponente darstellt Hierzu leitet man eine spezifische GUI Klasse von der Klasse JPanel ab und f gt bereits im Konstruktor die entsprechenden Unterkom ponenten hinzu Die folgende Klasse definiert eine Komponente die einen Knopf und eine Textfl che enth lt In der Hauptmethode wird das Objekt instantiiert 112 5 2 Gruppierungen package name panitz simpleGui 2 import javax swing class JTB extends JPanel JTextArea textArea new JTextArea JButton button new JButton ein knopf publ
53. ist ein Objekt der Klasse ArrayList einem Ob jekt der Klasse Vector vorzuziehen Vector ist eine sehr alte Klasse Ihre Ob jekte sind synchronisiert die anderen Sammlungsklassen nicht es lassen sich von den anderen Sammlungsklassen allerdings synchronisierte Kopien machen Am besten Vector gar nie benutzen Was ist automatisches Boxing und Unboxing Die Konvertierung von Daten primitiver Typen in Objekte der korrespondierenden Klassen und umgekehrt wird automatisch vorgenommen Welche zusammengesetzten Befehle gibt es if while for switch Was hat es mit der besonderen for Schleife auf sich Es handelt sich um eine sogenannte for each Schleife Syntaktisch trennt hier ein Doppelpunkt die lokale Schleifenvariable das Sammlungsobjekt F r welche Objekte kann die for each Schleife benutzt werden F r alle Objekte die die Schnittstelle Iterable implementieren und f r Reihun gen Bedeutet das ich kann die for each Schleife auch f r meine Klassen benutzen Ja genau man mu nur die Schnittstelle Iterable hierzu imple mentieren K nnen Operatoren berladen oder neu definiert werden Nein Was sind Ausnahme Objekte von Unterklassen der Klasse Exception Zus tzlich gibt es die Klasse Error und die gemeinsame Klasse Throwable Wozu sind Ausnahmen gut Um in bestimmten Situationen mit einem throw Befehl den Programmflu abzubrechen um eine besondere Ausnahme situation zu signalisieren Was f r Objekte d rfen in eine t
54. koor diniert auf Fehlerf lle reagieren zu k nnen kennt Java das Konzept der Ausnahmen die auftreten k nnen und mit einer Fehlerbehandlung abgefangen werden k nnen Dieses Konzept werden wir erst im n chsten Kapitel kennenlernen So lange wir noch nicht wissen wie wir diese Ausnahmef lle behandeln k nnen wir jede Methode in der Ein Ausgabe Operationen stattfinden mit throws Exception markieren Damit geben wir an dass es bei Ausf hrung dieser Methode zu Fehlern kommen kann public static String leseDatei String dateiName throws Exception 2 String result Listing 6 27 TextLesen Wir wollen aus einer Datei lesen Somit erzeugen wir ein Objekt der Klasse FileReader und speichern dieses als einen Reader Reader read new FileReader dateiName Listing 6 28 TextLesen Anders als man zun chst erwarten w rde hat die Klasse Reader keine Methode read die ein einzelnes char Zeichen zur ck gibt sondern eine Methode read mit dem Ergebnistyp int Diese Zahl ist entweder die Unicode Nummer des gelesenen Zeichens oder ein negativer Wert Ist es ein negativer Wert wird damit angezeigt dass keine weiteres Zeichen mehr gelesen werden kann dass wir am Ende des Ze ichenstroms angelangt sind weil in unserem Fall die Datei kein weiteres Zeichen mehr enth lt Deshalb sehen wir zun chst eine lokale Variable vom Typ int vor 159 Kapitel 6 Weiterf hrende Konzepte int i Listi
55. meineApplikation Da fehlt doch der Bindestrich Der ist kein g ltiges Zeichen innerhalb eines Bezeichners in Java es ist ja der Minusoperator Bindestriche in We badressen sind eine recht deutsche Krankheit Mu ich imports machen um Klassen aus anderen Paketen zu be nutzen Nein Das macht die Sache nur bequemer weil sonst der Klassen name immer und berall komplett mit seinem Paket angegeben werden mu auch beim Konstruktoraufruf oder z B instanceof Machen Import Anweisungen das Programm langsamer oder gr er Nein Sie haben insbesondere nichts mit includes in C gemein Sie entsprechen eher dem using namespace aus C Da gibt es doch auch noch public private und protected Jaja die Sichtbarkeiten Hinzu kommt wenn man keine Sichtbarkeit hinschreibt public hei t von berall aufrufbar protected hei t in Unterklassen und gleichem Paket aufrufbar package das ist wenn man nichts hinschreibt hei t nur im gleichen Paket sichtbar und private nur in der Klasse Und dann war da noch das final Das hat zwei Bedeutungen bei Vari ablen und Feldern da sie nur einmal einen Wert zugewiesen bekommen bei Klassen da keine Unterklassen von der Klasse definiert werden Ich will GUIs programmieren Wunderbar da gibt es eine ganze Reihe Bibliotheken unter andere n auch Swing und AWT Na toll warum zwei Historisch Und welche sol ich jetzt benutzen Swing oder sich f r die Zukunft JavaFX anschauen Also kann ich
56. move Vertex v die den Punkt um die x und y Werte des Parameter v verschiebt c Schreiben Sie in der Klasse eine Methode void moveTo Vertex v die den Punkt auf die x und y Werte des Parameter v setzt d Testen Sie Ihre Klasse mit ein paar Aufrufen in einer Hauptmethode Aufgabe 4 Schreiben Sie eine Klasse GeometricObject Diese habe ein Feld corner des Typs Vertex ein Feld width des Typs double und eine Feld Der Ausdruck f r Methoden kommt speziell aus der objektorientierten Programmierung In der imperativen Programmierung spricht man von Prozeduren die funktionale Programmierung von Funktionen Weitere Begriffe die hnliches beschreiben sind Unterprogramme und Sub routinen 44 r je 2 2 Klassen und Objekte height ebenfalls des Typs double Versshen Sie die Klasse mit einem geeigneten Konstruktor und einer Methode toString Methodendeklaration In Java wird eine Methode deklariert durch den R ckgabetyp den Namen der Methode der in Klammern eingeschlossenen durch Kommas getrennten Parame terliste und den in geschweiften Klammern eingeschlossenen Programmrumpf Im Programmrumpf wird mit dem Schl sselwort return angegeben welches Ergeb nisobjekt die Methode liefert Als Beispiel definieren wir eine Klasse in der es eine Methode addString gibt die den Ergebnistyp String und zwei Parameter vom Typ String hat class StringUtilMethod String addStrings String leftText String rightText
57. nachname o Listing 2 10 Person java Jetzt lassen sich bei der Erzeugung von Objekten des Typs Person konkrete Werte fiir die Namen tibergeben Wir erzeugen ein Personenobjekt mit dem fiir die entsprechende Klasse geschriebe nen Konstruktor fen class TestePerson public static void main String _ 4 Person p new Person Nicolo Paganini 5 System out println p vorname I Listing 2 11 TestePerson1 java 2 2 3 Objekte der Klasse String Java kommt bereits mit einer gro en Anzahl zur Verf gung stehender Standard klassen Es m ssen also nicht alle Klassen neu vom Programmierer definiert werden Eine sehr h ufig benutzte Klasse ist die Klasse String Sie repr sentiert Objekte die eine Zeichenkette darstellen also einen Text wie wir ihn in unserer ersten Mod ellierung bereits vorausgesetzt haben F r die Klasse String gibt es eine besondere Art Objekte zu erzeugen Ein in Anf hrungsstrichen eingeschlossener Text erzeugt ein Objekt der Klasse String Aus zwei Objekten der Stringklasse l t sich ein neues Objekt erzeugen indem diese beiden Objekte mit einem Pluszeichen verbunden werden hallo welt r Hier werden die zwei Stringobjekte hallo und welt zum neuen Objekt hallo welt verkn pft Der Plus Operator hat f r Objekte der Stringklasse noch eine besondere Bedeutung und stellt damit eine Besonderheit innerhalb der P
58. new JTable 13 5 new JTree i Listing 5 56 ComponentOverview java Diese beiden Reihungen zeigen sollen mit einer Hilfsmethode in einem Fenster angezeigt werden displayComponents cs1 3 displayComponents cs2 2 Listing 5 57 ComponentOverview java F r die Listen und Auswahlkomponenten oben haben wir eine Reihung von Strings benutzt String combos friends romans contrymen Listing 5 58 ComponentOverview java Bleibt die Methode zu schreiben die die Reihungen von Komponenten anzeigen kann Als zweites Argument bekommt diese Methode tibergeben in wieviel Spalten die Komponenten angezeigt werden sollen public void displayComponents JComponent cs int col Listing 5 59 ComponentOverview java 140 5 6 Weitere Swing Komponenten Ein Fenster wird definiert fiir das eine Gridlayout Zwischenkomponente mit genii gend Zeilen erzeugt wird 34 JFrame f new JFrame JPanel panel new JPanel panel setLayout 37 new GridLayout cs length col cs length col 07 0 1 col Listing 5 60 ComponentOverview java F r jede Komponente wird ein Panel mit Rahmen und den Klassennamen der Komponente als Titel erzeugt und der Zwischenkomponente hinzugefiigt 38 for JComponent c cs 39 JPanel p new JPanel 40 p add c 41 p setBorder BorderFactory 42 createTitledBorder c
59. private Object store new Object 10 private int theSize 0 Listing 6 17 OurList java Die wichtigste Methode die wir f r eine Liste ben tigen soll ein Element in die Liste anf gen Hierzu schreiben wir die Methode add die ein Element am Ende der Liste hinzuf gen soll public boolean add A el Listing 6 18 OurList java Die Methode hat ein Problem wenn die Reihung die als Datenspeicher benutzt wird bereits komplett mit Listenelementen gef llt 152 6 2 Generische Typen if theSize gt store length Object newStore new Object store length 10 for int i 0 i lt store length i newStore i store i store newStore Listing 6 19 OurList java store theSize el theSize return trug Listing 6 20 OurList java public int size return theSize Listing 6 21 OurList java public A get int i return A store i Listing 6 22 OurList java public static void main String args OurList lt String gt xs new OurList lt gt xs add hallo xs add Freunde xs add R mer xs add Landsleute xs add leiht xs add mir xs add Euer xs add Ohr xs add Landsleute xs add friends xs add Romans System out printin xs size System out printin xs get 2 for int i 0 i lt xs
60. r Desktop und Server Anwendungen sowohl auf Windows Betriebssystemen als auf Linux Systemen sondern auch f r die Programmierung von Android Smartphones oder Weban wendungen mit Google Web Tool dieses spricht zum Beispiel gegen Sprachen wie Objective C oder C Man kann trefflich ber die Vor und Nachteile unterschiedlicherer Sprachen streit en sollte aber bei der Wahl der Programmiersprache stets pragmatisch sein und sich nicht zu sehr auf emotionale Diskussionen einlassen Streits ber unterschiedliche Programmiersprachen sind m ig Jeder hat aus unterschiedlichen Gr nden Fa voriten aber ein guter Informatiker sollte sich nach etwas Einarbeitung in jeder Sprache zurecht finden Insbesondere sollte man sich bei der Wahl der Program miersprache von dem Einsatzgebiet der Software leiten lassen 1 3 Arbeiten mit der Kommandozeile Wahrscheinlich ist das Hauptunterscheidungsmerkmal zwischen einem Endanwen der und einem Informatiker dass der Informatiker mit der Kommandozeile seines Betriebssystems umgehen kann Seit Anfang der 80er Jahre gibt es graphische Be nutzeroberfl chen die den Umgang mit dem Computer f r Endanwender verein facht hat Voreiter war hier sicher zum einem die Firma Apple mit ihren Macintosh Rechnern aber auch andere Systeme stellten in den 80er Jahren intuitive graphis che Benutzeroberfl chen zur Verf gung wie der Atari ST oder Commodore Amiga Ebenso bekamen in der Zeit Unix Betriebssysteme komfortable
61. r eine bestimmte Klasse gespeichert werden 39 m u e w p Kapitel 2 Grundkonzepte der Objektorientierung Bei der Felddeklaration wird angegeben welche Art von Objekten in einem Feld abgespeichert werden sollen Die Felder entsprechen dabei genau den Eigenschaften die wir auf unsere Karteikarten geschrieben haben Syntaktisch wird in Java der Klassenname des Typs von dem Objekte gespeichert werden sollen den frei zu w hlenden Feldnamen vorangestellt Eine Felddeklaration endet mit einem Semikolon Im Folgenden schreiben wir eine Klasse mit drei Feldern class Buch String autor String titel int preisInCent Listing 2 2 Buch java F r eine Zeichenkette steht in Java die Klasse String zur Verf gung F r ganze Zahlen existiert der Typ int Die Reihenfolge in der die Felder einer Klasse definiert werden ist mehr oder weniger irrelevant In der Literatur werden Felder auf deutsch auch als Attribute einer Klasse oder auch als Exemplarvariablen bezeichent 2 2 2 Objekte Im letzten Abschnitt haben wir eine erste Klasse geschrieben Sie implementiert die Modellierung von B chern Sie hat daher drei Felder die den Eigenschaften aus der Modellierung entsprechen Jetzt wollen wir diese Klasse benutzen um damit konkrete Buchobjekte zu erzeugen die konkrete Werte f r den Titel etc haben Hierzu brauchen wir eine Klasse mit einer Hauptmethode die ausgef hrt werden soll Innerhalb dieser Hauptm
62. staff panitz existierendeDatei existierendeDatei 100 0 0 0KB s 00 00 sftp gt get Main hs Fetching home staff panitz Main hs to Main hs sftp gt exit panitz ThinkPad T430 oose einNeuerOrdner Auch dieses Programm wird durch die Eingabe des Befehls exit wieder beendet 26 1 3 Arbeiten mit der Kommandozeile Dateityp erfragen mit file Eigentlich sollte der Typ einer Datei durch die Dateiendung korrekt angegeben sein Manchmal fehlt aus unerfindlichen Gr nden diese Endung oder aber Sie wurde falsch angegeben Das passiert immer wieder bei Abgaben von studentischen L sungen Oder aber man kennt die Endung nicht Dann ist das Programm file recht n tzlich denn es versucht herauszubekommen um was f r eine Datei es sich handelt panitz ThinkPad T430 file FKT_Programm_11_13_V1_Montageflaechen 1 FKT_Programm_11_13_V1_Montageflaechen 1 PDF document version 1 4 panitz ThinkPad T430 Dateien in ein Archiv verpacken mit tar Zur Archivierung oder dem Versand von einer gro en Menge von Dateien zum Beispiel aller Ihrer Urlaubsbilder empfiehlt es sich diese in einer einzigen Archiv datei zu b ndeln und am besten noch zu komprimieren Hierzu gibt es mehrere Programme und daraus resultierende Dateiformate wie zum Beispiel das Programm zip Ein Standardprogramm auf der Unix Welt ist hierzu das Programm tar Es steht f r type archive und deutet so im Namen auf die Zeiten hin als Daten auf Tonb ndern archiviert wurden
63. unter Verwendung der fertigen GUI Komponente aus der Swing Bibliothek zusammengesetzt Oft will man graphische Komponenten schreiben f r die es keine fertige GUI Komponente in der Swing Bibliothek gibt Wir m ssen wir eine entsprechende Komponente selbst schreiben Um eine eigene GUI Komponente zu schreiben schreibt man eine Klasse die von der GUI Klasse ableitet Dieses haben wir bereits in den letzten Beispielen getan indem wir von der Klasse JFrame abgelitten haben Die dort geschriebenen Un terklassen der Klasse JFrame zeichneten sich dadurch aus da sie eine Menge von graphischen Objekten Kn pfe Textfelder in einer Komponente zusammengefasst haben In diesem Abschnitt werden wir eine neue Komponente definieren die keine der bestehenden fertigen Komponenten benutzt sondern selbst alles zeichnet was zu ihrer Darstellung notwendig ist Hierzu betrachten wir eine der entscheidenen Methoden der Klasse JComponent die Methode paintComponent In dieser Methode wird festgelegt was zu zeichnen ist wenn die graphische Komponente darzustellen ist Die Methode paintComponent hat folgende Signatur public void paintComponent java awt Graphics g r Java ruft diese Methode immer auf wenn die graphische Komponente aus irgen deinen Grund zu zeichnen ist Dabei bekommt die Methode das Objekt bergeben auf dem gezeichnet wird Dieses Objekt ist vom Typ java awt Graphics Es stellt ein zweidimensionales Koordinatensystem
64. wir uns darauf beschr nkt Zeichenketten ber Str me zu lesen und zu schreiben Java bietet dar berhinaus die M glichkeit an beliebige Ob jekte ber Str me zu schreiben und zu lesen Hierzu k nnen mit den Klassen ObjectOutputStream und ObjectInputStream beliebige OutputStream bzw InputStream Objekte zu Str men f r Objekte gemacht werden In diesen Klassen stehen Methoden zum Lesen und Schreiben von Objekten zur Verf gung Allerd ings k nnen ber diese Str me nur Objekte von Klassen geschickt werden die die Schnittstelle java io Serializable implementieren Die meisten Standardklassen implementieren diese Schnittstelle Serializable enth lt keine Methoden es re icht also zum Implementieren aus die Klausel implements Serializable f r eine Klasse zu benutzen damit Objekte der Klasse ber Objektstr me geschickt werden k nnen Objektstr me haben zus tzlich Methoden zum Lesen und Schreiben von primitiven Typen Folgendes Testprogramm schreibt eine Zahl und ein Listenobjekt in eine Datei um diese anschlie end wieder aus der Datei auszulesen import java io 2 import java util List s3limport java util ArrayList public class WriteReadObject public static void main String args throws Exception Listing 6 42 WriteReadObject java Zunachst erzeugen wir einen Ausgabestrom 166 17 6 3 Ein und Ausgabe OutputStream fos new FileOutputStream t tmp Listing 6 43
65. 30 oose mv testdatei txt neuerName txt panitz ThinkPad T430 oose 1s neuerName txt panitz ThinkPad T430 oose mkdir einNeuerOrdner panitz ThinkPad T430 oose mv neuerName txt einNeuerOrdner panitz ThinkPad T430 oose 1s einNeuerOrdner 23 Kapitel 1 Einf hrung in die Welt der Softwareentwicklung panitz ThinkPad T430 oose cd einNeuerOrdner panitz ThinkPad T430 oose einNeuerOrdner 1s neuerName txt panitz ThinkPad T430 oose einNeuerOrdner Auch hier muss man ein wenig vorsicht walten lassen Existiert die Zieldatei bereits so wird sie mit der Quelldatei berschrieben und damit quasi gel scht Man kann den Befehl mv auch nutzen um mehrere Dateien in einen Ordner zu verschieben Dann erh lt der Befehl mehr als zwei Argumente Das letzte Argu ment bezeichnet dabei einen Ordner in den die vorherigen Argumente zu ver schieben sind Auch hier kann man sich wieder des Sterns bedienen So bewirkt mv jpg meineBilder dass alle Dateien des Arbeitsverzeichnisses mit der Ende ung jpg in den Unterordner meineBilder verschoben werden cp Dateien Kopieren Sehr hnlich wie der Befehl mv funktioniert der Befehl cp der dazu dient eine oder mehrere Dateien zu kopieren Es handelt sich dazu im Prinzip um den gleichen Befehl wie mv nur wird die Quelldatei in diesem Fall nicht gel scht Damit gibt es anschlie end also zwei unabh ngige Versionen der Quelldatei man Handbuchseiten Wie kann man sich alle die Bef
66. 4 15 TestDialogue java a bersetzen Sie die drei Klassen und starten Sie das Programm b Schreiben Sie eine Unterklasse der Klasse ButtonLogic Sie sollen dabei Y or i die Methoden getDescription und eval so berschreiben dass der Eingabestring in Kleinbuchstaben umgewandelt wird Schreiben Sie eine Hauptmethode in der Sie ein Objekt der Klasse Dialogue mit einem Objekt Ihrer Unterklasse von ButtonLogic erzeugen Schreiben Sie jetzt eine Unterklasse der Klasse ButtonLogic so dass Sie im Zusammenspiel mit der Guiklasse Dialogue ein Programm erhalten das f r den im Eingabefeld eingegebenen String die L nge im Ausgabefeld anzeigt Schreiben Sie jetzt eine Unterklasse der Klasse ButtonLogic so dass Sie im Zusammenspiel mit der Guiklasse Dialogue ein Programm erhalten das f r den im Eingabefeld eingegebenen String anzeigt ob dieser einen Teilstring depp enth lt Schreiben Sie jetzt eine Unterklasse der Klasse ButtonLogic so dass Sie im Zusammenspiel mit der Guiklasse Dialogue ein Programm er halten in dem man in dem Eingabefeld eine Jahreszahl eingibt und auf Knopfdruck im Ausgabefeld das Datum des Ostersonntag in diesem Jahr angezeigt wird Benutzen Sie jetzt die folgende Klasse um Ihre obigen Unterklassen von ButtonLogic mit einem Benutzerschnittstelle auf der Kommandozeile zu verwenden package name panitz oosel3 dialogue import java io public class ConsoleDialogue final ButtonLogic logic
67. FileWriter args 1 int c while e in read gt 0 out write c out close in close Listing 6 34 Copy java 6 3 2 Textcodierungen Reader und Writer sind praktische Klassen zur Verarbeitung von Zeichenstr men Prim r sind aber auch Textdateien lediglich eine Folge von Bytes Mit den Klassen InputStreamReader und OutputStreamWriter lassen sich Objekte vom Typ IntputStream bzw OutputStream zu Reader bzw Writer Objekten machen Statt die vorgefertigte Klasse FileWriter zum Schreiben einer Textdatei zu be nutzen erzeugt die folgende Version zum Kopieren von Dateien einen ber einen FileOutputStream erzeugten Writer bzw einen ber einen FileInputStream erzeugten Reader import java io class Copy2 static public void main String args throws Exception Reader reader new InputStreamReader new FileInputStream args 0 Writer writer new OutputStreamWriter new FileOutputStream args 1 int c while c reader read gt 0 writer write char c writer close reader close 161 Kapitel 6 Weiterf hrende Konzepte Listing 6 35 Copy2 java Java Strings sind Zeichenketten die nicht auf eine Kultur mit einer bestimmten Schrift beschr nkt sondern in der Lage sind alle im Unicode erfassten Zeichen darzustellen seien es Zeichen der lateinischen kyrillischen arabischen chinesis chen oder sonst einer Schrift bis hin zur keltischen Keils
68. Listing 3 19 Summe2 java Nachgepriifte Schleifen In der zweiten Variante der while Schleife steht die Schleifenbedingung syntaktisch nach dem Schleifenrumpf do body while pred Bei der Abarbeitung einer solchen Schleife wird entsprechend der Notation die Bedingung erst nach der Ausf hrung des Schleifenrumpfes gepr ft Am Ende wird 62 j or i w p 3 3 Anweisungen also gepr ft ob die Schleife ein weiteres Mal zu durchlaufen ist Das impliziert insbesondere dass der Rumpf mindestens einmal durchlaufen wird class DoTest public static void main String args int i 0 do System out println i i i 1 while i lt 10 Listing 3 20 DoTest java Man kann sich leicht davon vergewissern dass die nachgepriifte Schleife mindestens einmal durchlaufen wird class VorUndNach public static void main String args while falsch System out println vorgepriifte Schleife do System out println nachgepriifte Schleife while false public static boolean falsch return false Listing 3 21 VorUndNach java Schleifen mit for Das syntaktisch aufwendigste Schleifenkonstrukt in Java ist die for Schleife Wer sich die obigen Schleifen anschaut sieht dass sie an drei verschiedenen Stellen im Programmtext Code haben der kontrolliert wie oft die Schleife zu durchlaufen ist Oft legen wir ein spezielles Feld an dessen Wert die Sc
69. Objektorientierte Softwareentwicklung Sven Eric Panitz Hochschule RheinMain Version 813 Generiert von LectureNotes Teaching System 9 Oktober 2015 Diese Skriptversion entsteht f r das WS2013 14 neu Es basiert aber weiterhin in Teilen auf den Skripten die zwischen 2002 und 2012 f r unterschiedliche Vorlesungen im Bereich der Softwareentwicklung ent standen sind Inhaltsverzeichnis 1 Einf hrung in die Welt der Softwareentwicklung 1 1 Aspekte der Softwareentwicklung 1 2 Programmiersprachen 204 9 fees the Pan bw 1 3 Arbeiten mit der Kommandozeile 1 3 1 Basisbefehle 1 3 2 N tzliche Standardprogramme 1 3 3 Erste Java Programme auf der Kommandozeile 2 Grundkonzepte der Objektorientierung 2 1 Objektorientierte Modellierung 2 2 Klassen und Objekte 2 8 Pr area 22 4 Felder ers au fe ds fer aha eat 220 Objekte Sees Nr 2 2 3 Objekte der Klasse String 224 Methoden 2 2 2088 a a en 3 Imperative und funktionale Konzepte 3 1 Primitive Typen gt 24a N a ae est 3 1 1 Zahlenmengen in der Mathematik 3 1 2 Zahlenmengen im Rechner 32 M sdr cke ende then Re ded 3 2 1 Arithmetische Operatoren 3 2 2 Vergleichsoperatoren 3 2 3 Logische Operatoren 3 2 4 Der Bedingungsoperator 3 3 Anweisungen eier AYE Barren 3 3 1 Fallunterscheidungen 2 3 0 berat on e ao 2 ne ware 3 4 Re
70. Quelltextes ausgef hrt Hierzu muss stets der Interpreter zur Verf gung stehen um das Programm auszuf hren Interpretierte Programme sind langsamer in der Ausf hrung als bersetzte Programme abstrakte Maschine ber byte code Java Scala ML dieses ist quasi eine Mischform aus den obigen zwei Ausf hrungsmodellen Der Quelltext wird bersetzt in Befehle nicht f r einen konkreten Computer sondern f r eine ab strakte Maschine F r diese abstrakte Maschine steht dann ein Interpreter zur Verf gung Der Vorteil ist dass durch die zus tzliche Abstraktionsebene der bersetzer unabh ngig von einer konkreten Maschine Code erzeugen kann und 15 Kapitel 1 Einf hrung in die Welt der Softwareentwicklung das Programm auf auf allen Systemen laufen kann fiir die es einen Interpreter der abstrakten Maschine gibt Wir ben tzen in diesem Modul die Programmiersprache Java aus mehreren prag matischen Gr nden e Java ist objektorientiert und das objektorientierte Paradigma soll in diesem Modul vermittelt werden dieses spricht zum Beispiel gegen Sprachen wie C Pascal Haskell e Java ist im Vergleich relativ aufger umt und die Anzahl der Konzepte noch recht bersichtlich so dass Java didaktisch zum Unterrichten gut geeignet ist dieses spricht zum Beispiel gegen Sprachen wie C oder Scala e Java wird in der Praxis viel eingesetzt und ist f r alle g ngigen Plattformen geeignet Dabei findet sich heutzutage Java nicht nur f
71. T430 Bilder tar tvzf bilder tgz rw rw r panitz panitz 368235 2013 07 17 19 05 Bildschirmfoto vom 2013 07 17 19 05 30 png rw rw r panitz panitz 157235 2013 08 01 19 49 Bildschirmfoto vom 2013 08 01 19 49 16 png rw rw r panitz panitz 156051 2013 08 01 21 59 Bildschirmfoto vom 2013 08 01 21 59 44 png rw r r panitz panitz 14209 2009 01 03 14 47 Logo gross png rw rw r panitz panitz 3733 2013 05 14 15 25 tree png panitz ThinkPad T430 Bilder tar xvzf bilder tgz Bildschirmfoto vom 2013 07 17 19 05 30 png Bildschirmfoto vom 2013 08 01 19 49 16 png Bildschirmfoto vom 2013 08 01 21 59 44 png Logo gross png tree png panitz ThinkPad T430 Bilder Weitere Tipps und Tricks Den ersten und rudiment ren Umgang mit der Kommandozeile haben wir einge bt Arbeiten mit Vervollst ndigung und Befehlshistorie Die Kommandozeile merkt sich die bereits ausgef hrten Befehle Oft will man einen hnlichen oder den gleichen Befehl noch einmal ausf hren lassen Die Pfeiltasten liefern heute eine einfache M glichkeit durch die Befehlshistorie zu navigieren und zuvor bereits ausgef hrte Befehle wieder anzeigen zu lassen Auch die Tabulaturtaste vereinfacht die Arbeit mit der Kommandozeile und hilft dabei weniger eintippen zu m ssen Wenn von der Kommandozeile der Name einer Datei erwartet wird kann man die ersten Buchstaben der Datei tippen und dann mit Hilfe der Tabulatortaste sich den kompletten Dateinamen vervollst ndigen zu lasse
72. ThinkPad T430 fh pmt v270513 So wie es mit den zwei Punkten die M glichkeit gibt das bergeordnete Verzeich nis anzugeben kann man auch das aktuelle Verzeichnis angeben Hierzu dient der einfache Punkt ls mit Pfadangaben Nachdem wir nun die Pfadangaben fiir die Kommandozeile kennen gelernt haben k nnen wir diese auch f r den Befehl 1s anwenden Bisher haben wir uns von 1s immer nur eine Auflistung der Dateien des Arbeitsverzeichnisses geben lassen Wir k nnen aber durch Angabe eines Pfades der einen bestimmten Ordner bezeichnet 1s dazu bringen die Dateien in diesem Ordner anzuzeigen panitz ThinkPad T430 fh pmt v270513 ls home panitz fh oose vor130605 Counter class GUI 3 class Inner java Counter java GUI class KnopfAktion class Counter java GUI java KnopfAktion java 20 1 3 Arbeiten mit der Kommandozeile EverySecond class GUI java KnopfAktion java EverySecond java Inner 1 class MyGraphic class EverySecond java Inner 1InnerInner class MyGraphic java GUI 1 class Inner class MyGraphic java GUI 1KnopfAktion class Inner InnerInner class GUI 2 class Inner java panitz ThinkPad T430 fh pmt v270513 Sollte man nur an Informationen einer bestimmten Datei interessiert sein so l sst sich dieses durch einen Pfad auf diese Datei bestimmen panitz ThinkPad T430 ls 1 home panitz fh oose vor130605 GUI java rw r r 1 panitz panitz 1111 Okt 6 2010 home panitz fh oose vor130605 GUI java panitz Thin
73. alle Zeichen kodieren kann f r Texte in lateinischer Schrift aber nur ein Byte pro Zeichen ben tigt Es hat den Nachteil dass unterschiedliche Zeichen unterschiedlich viel Platz auf der Festplatte ben tigen Man kann also einer Datei nicht ansehen das wievielte Byte zum Beispiel das 1000 Zeichen des Textes ist 163 Kapitel 6 Weiterf hrende Konzepte 6 3 3 Gepufferte Str me Die bisher betrachteten Str me arbeiten immer exakt zeichenweise bzw byteweise Damit wird bei jedem read und bei jedem write direkt von der Quelle bzw an die Senke ein Zeichen bertragen F r Dateien hei t das es wird ber das Betriebssys tem auf die Datei auf der Festplatte zugegriffen Handelt es sich bei Quelle Senke um eine teure und aufw ndige Netzwerkverbindung so ist f r jedes einzelne Ze ichen ber diese Netzwerkverbindung zu kommunizieren Da in der Regel nicht nur einzelne Zeichen ber einen Strom bertragen werden sollen ist es effizienter wenn technisch gleich eine Menge von Zeichen bertragen wird Um dieses zu bewerkstel ligen bietet Java an Str me in gepufferte Str me umzuwandeln Ein gepufferter Strom hat einen internen Speicher Bei einer Daten bertragung wird f r schreibende Str me erst eine Anzahl von Zeichen in diesem Zwischenspeicher abgelegt bis dieser seine Kapazit t erreicht hat um dann alle Zeichen aus dem Zwischenspeicher en bloc zu bertragen F r lesende Str me wird entsprechend f r ein read gleich e
74. amen der aus Ihren Nachnamen gefolgt von Ihrem Vornamen besteht Verwenden sie keine Umlaute oder sonstigen Sonderzeichen in dem dateinamen also z B muellerMartin tar 5 6 Weitere Swing Komponenten Um einen kleinen berblick der vorhandenen Swing Komponenten zu bekommen k nnen wir ein kleines Programm schreiben da m glichst viele Komponenten ein mal instanziiert Hierzu schreiben wir eine kleine Testklasse package name panitz gui example rer slimport javax swing import java awt import java util a N public class ComponentOverview s public ComponentOverview Listing 5 54 ComponentOverview java Darin definieren wir eine Reihung von einfachen Swing Komponenten 9 JComponent csl 10 new JButton knopf 11 new JCheckBox check mich 139 YV N NY N e gt u Kapitel 5 Graphische Benutzeroberfl chen mit Swing new JRadioButton dr ck mich new JMenultem ins Menue mit mir new JComboBox combos new JList combos new JSlider 0 350 79 new JSpinner new SpinnerNumberModel 18 0 0 42 0 2 0 new JTextField 12 new JFormattedTextField hallo new JLabel einfach nur ein Label new JProgressBar 0 42 Listing 5 55 ComponentOverview java Sowie eine zweite Reihung von komplexeren Swing Komponenten JComponent cs2 new JColorChooser Color RED new JFileChooser
75. ansonsten Additionen Rechnen Sie folgende Aufgaben mit der vedischen Multiplikation a 999 999 b 87 101 c 101 102 1 1 Aspekte der Softwareentwicklung Ich schreibe Ich bin Software Autor Ich schreibe ab jetzt nur noch Software die was mit meinem Leben zu tun hat Autobi ographisch Kristof Magnusson M nnerhort 1 1 Aspekte der Softwareentwicklung Das obige Zitat aus der Kom die Mannerhort ist n her an der Realit t als man denken mag denn im Prinzip ist Software nichts weiter als ein Text den ein oder mehrere Autoren geschrieben haben Insofern ist es durchaus legitim bei Program mierern von Autoren zu sprechen Und je mehr sich die Autoren mit ihrer Software identifizieren desto besser ist meistens auch die Qualit t der Software Dieses gilt oftmals besonders f r quelltextoffene Software Hier steht immerhin der gute Ruf der Autoren auf dem Spiel Auf der einen Seite scheint die Entwicklung von Software einfach zu sein Es ist ein Text zu schreiben Hierzu wird eigentlich kein anderes Werkzeug als ein Texte ditor ben tigt Andererseits ist die Entwicklung von Software ein sehr komplexer Vorgang denn ein Softwaresystem ist oft sehr umfangreich und besteht aus vielen Einzelkomponenten Um dieser Komplexit t Herr zu werden hat die Informatik ber die letzten Jahrzehnte viele Techniken und Prozesse entworfen die bei der Entwicklung von Software helfen sollen Im Laufe eines Informatikstudiums werden Si
76. anzugeben 4 2 6 Importieren von Paketen und Klassen Importieren von Klassen Vollqualifizierte Namen k nnen sehr lang werden Wenn Klassen die in einem an deren Paket als die eigene Klasse liegen unqualifiziert benutzt werden sollen dann kann dieses zuvor angegeben werden Dieses geschieht zu Beginn einer Klasse in ein er Importanweisung Nur die Klassen aus dem Standardpaket java lang brauchen nicht explizit durch eine Importanweisung bekannt gemacht zu werden 6 ArrayList ist eine generische Klasse ein Konzept das wir erst in einem sp teren Kapitel ken nenlernen werden 94 16 17 18 19 4 2 Pakete Unsere Testklasse aus dem letzten Abschnitt kann mit Hilfe einer Importanweisung so geschrieben werden dass die Klasse ArrayList unqualifiziert benutzt werden kann s package name panitz utilTest import java util ArrayList class TestImport public static void main String args ArrayList lt String gt xs new ArrayList lt String gt xs add friends xs add romans xs add countrymen System out println xs Listing 4 23 TestImport java Es k nnen mehrere Importanweisungen in einer Klasse stehen So k nnen wir z B zus tzlich die Klasse Vector importieren package name panitz utilTest import java util ArrayList import java util Vector class TestImport2 public static void main String args ArrayList lt Strin
77. asses name panitz simpleGui gt 11 class EWoES r 1 sep users 1106 2004 03 29 11 59 AnonymousCounter 1 class EW E r 1 sep users 887 2004 03 29 11 59 AnonymousCounter class sep linux fh prog2 examples classes name panitz simpleGui gt 5 4 3 Lambda Ausdr cke Seit Java 8im Jahre 2014 gibt es eine noch kompaktere M glichkeit um einem Knopf die gew nschte Aktion hinzuzuf gen Die Schnittstelle ActionListener enth lt nur eine einzige Methode Solche Schnittstelle werden nun als funktionale Schnittstellen bezeichnet weil sie nur eine Funktion in Form einer Methode enthalten Mit Java 8 wurde eine neue Art von Ausdriicken eingeftihrt Diese nennen sich Lambda Ausdr cke Sie bestehen aus einer Parameterliste in runden Klammern gefolgt von einem Pfeil der durch das Minussymbol und das Gr ersymbol gebildet wird also gt Nach dem Pfeil folgt ein Methodenrumpf oder direkt ein Ausdruck der zu einem Ergebnis auswertet Ein solcher Lambda Ausdruck ist die Kurzschreibweise f r eine Implementierung einer funktionalen Schnittstelle Es wird also nicht mehr angegeben welche 127 pa w Kapitel 5 Graphische Benutzeroberfl chen mit Swing Schnittstelle implementiert wird auch nicht mehr wie die Methode hei t die im plementiert wird sondern nur noch die Parameterliste und der Methodenrumpf Alles andere erkennt der Java bersetzer aus dem Kontext Damit wird die kleine Counteranwendung noch kompakter ausgedr ckt
78. barkeiten deklariert werden F r Eigenschaften gibt es vier verschiedene Sichtbarkeiten public protected kein Attribut private Sichbarkeiten h ngen zum einem von den Paketen ab in denen sich die Klassen befinden dar berhinaus unterscheiden sich Sichtbarkeiten auch darin ob Klassen Unterklassen voneinander sind Folgende Tabelle gibt eine bersicht ber die vier verschiedenen Sichtbarkeiten Damit kann in einer Klasse auf Eigenschaften mit jeder dieser vier Sichtbarkeiten zugegriffen werden Wir k nnen die F lle einmal systematisch durchprobieren In einer ffentlichen Klasse eines Pakets p1 definieren wir hierzu vier Felder mit den vier unterschiedlichen Sichtbarkeiten package name panitz pl public class VisibilityOfFeatures private String sl private String s2 package protected String s3 protected public String s4 private public static void main String args VisibilityOfFeatures v new VisibilityOfFeatures System out println v sl System out printin v be System out println v s3 System out println v yes Listing 4 31 VisibilityOfFeatures java 99 N oT e U N Hr Kapitel 4 Weiterf hrende Konzepte der Objektorientierung In der Klasse selbst k nnen wir auf alle vier Felder zugreifen In einer anderen Klasse die im gleichen Paket ist k nnen private Eigenschaften nicht mehr benutzt werden package name panit
79. blic void main String args 5 for String arg args 6 System out println reverse arg Listing 4 27 UseStringUtil java Die Ausgabe dieses programms sep linux fh gt java classpath classes name panitz staticImport UseStringUtil hallo welt ollah tlew sep linux fh javal 5 examples gt 4 2 8 Sichtbarkeitsattribute ichtbarkeiten erlauben es zu kontrollieren wer auf Klassen und ihre Eigenschaften zugreifen kann Das wer bezieht sich hierbei auf andere Klassen und Pakete Sichtbarkeitsattribute fiir Klassen F r Klassen gibt es zwei M glichkeiten der Sichtbarkeit Entweder darf von berall aus eine Klasse benutzt werden oder nur von Klassen im gleichen Paket Syntaktisch wird dieses dadurch ausgedr ckt dass der Klassendefinition entweder das Schl s selwort public vorangestellt ist oder aber kein solches Attribut voransteht package name panitz pl public class MyPublicClass p Listing 4 28 MyPublicClass java 8Man findet in der Literatur auch den Ausdruck Erreichbarkeiten 97 r Kapitel 4 Weiterf hrende Konzepte der Objektorientierung package name panitz pl class MyNonPublicClass Listing 4 29 MyNonPublicClass java In einem anderen Paket d rfen wir nur die als ffentlich deklarierte Klasse benutzen Folgende Klasse bersetzt fehlerfrei package name panitz p2 s import name panitz pl class UsePublic pub
80. build properties rw r r 1 panitz panitz 16334 Okt 2010 build xml drwxr xr x 2010 docs 2010 src 2010 web panitz panitz 4096 Okt panitz panitz 4096 Okt drwxr xr x 3 panitz panitz 4096 Okt panitz ThinkPad T430 fh oose v250107 3 6 1 6 1 6 1 6 rw r r 1 panitz panitz 16336 Okt 6 2010 build xml drwxr xr x 3 panitz panitz 4096 Okt 6 2010 dist 2 6 2 6 6 drwxr xr x Zus tzlich werden jetzt zu jeder Datei eine ganze Reihe weiterer Informationen angezeigt F r jede Datei wird dazu eine Zeile ausgegeben Zus tzliche Informa tionen sind die Benutzerrechte der Datei die Dateigr e das Datum der letzten nderung und die Angabe ob es sich bei der Datei um einen Ordner handelt Es gibt Dateien die der Befehl 1s normaler Weise nicht anzeigt die sogenannten versteckten Dateien Eine Datei gilt als versteckt wenn ihr Name mit einem Punkt beginnt F gt man dem Befehl 1s den Paramter a hinzu werden alle auch die versteckten Dateien aufgelistet 18 1 3 Arbeiten mit der Kommandozeile panitz ThinkPad T430 oose 1s panitz ThinkPad T430 oose 1s a versteckt panitz ThinkPad T430 oose ls a 1 insgesamt 20 drwxrwxr x 2 panitz panitz 4096 Sep 18 11 27 drwxr xr x 286 panitz panitz 16384 Sep 16 14 16 rw rw r 1 panitz panitz O Sep 18 11 27 versteckt panitz ThinkPad T430 oose Wie man hier sieht wurde durch 1s keine Datei aufgelistet Der zus tzliche Param eter a bewirkt dass drei zu
81. c void main String args new HtmlDialogue new UpperConversion Listing 4 42 HtmlDialogueTest java Die Anwendung in voller Aktion kann in Abbildung bewundert werden Ein Gui Dialog mit Html Ausgabe Weitere Eigenschaften von Schnittstellen Es gibt einige semantische Einschr nkungen die ber die syntaktischen Ein schr nkungen hinausgehen Schnittstellen k nnen nur Schnittstellen nicht aber Klassen erweitern Jede Methode einer Schnittstelle muss ffentlich sein braucht also das At tribut public Wenn dieses f r eine Methode nicht deklariert ist so wird Ja va dieses von selbst hinzuf gen Trotzdem m ssen implementierende Klassen diese Methode dann als ffentlich deklarieren Daher ist es besser das Attribut public auch hinzuschreiben Es gibt keine statischen Methoden in Schnittstellen Jede Methode ist abstrakt d h hat keinen Rumpf Man kann dieses noch zus tzlich deutlich machen indem man das Attribut abstract f r die Meth ode mit angibt Allerdings werden mit Java 1 8 sogenannte default Methoden in Schnittstellen m glich Diese sind dann nicht mehr abstrakt und haben einen Methodenrumpf Felder einer Schnittstelle sind immer statisch brauchen also das Attribut static und zus tzlich noch das Attribut final Aufgabe 2 Gegeben Seien folgende Schnittstellen r 4 package de hsrm cs oosel3 public interface Moveable void move Listing 4 43 Moveable java 106
82. cherungen mehr vorzunehmen brauchen bekommen wir auch keine dynamischen Typfehler mehr Der Laufzeit fehler wie wir ihn ohne die generische Box hatten wird jetzt bereits zur berset zungszeit entdeckt Hierzu betrachte man das analoge Programm class UseBoxError public static void main String _ Box lt String gt b new Box lt String gt new Integer 42 String s b contents System out println s toUpperCase Die Ubersetzung dieses Programms fiihrt jetzt bereits zu einen statischen Typfehler sep linux fh javal 5 examples src gt javac UseBoxError java UseBoxError java 3 cannot find symbol symbol constructor Box java lang Integer location class Box lt java lang String gt Box lt String gt b new Box lt String gt new Integer 42 1 error sep linux fh javal 5 examples src gt 6 2 2 Vererbung Generische Typen sind ein Konzept das orthogonal zur Objektorientierung ist Von generischen Klassen lassen sich in gewohnter Weise Unterklassen definieren Diese Unterklassen k nnen aber m ssen nicht selbst generische Klassen sein So k nnen wir unsere einfache Schachtelklasse erweitern so dass wir zwei Objekte speichern k nnen class GPair lt A B gt extends Box lt A gt GPair A x B y super x snd y 149 or w N Po kb Hr Kapitel 6 Weiterf hrende Konzepte B snd public String toString return contents snd
83. chne des Function Objekts bergeben Das Ergebnis dieses Methodenaufrufs soll in das JLabel als Text geschrieben werden setText String s Der Kontruktor der Klasse soll genau einen Parameter des Typs Function haben Schreiben Sie eine Applikation mit einer main Methode in der ein Fen ster mit einem Rechner Objekt ge ffnet wird Bei Dr cken des Knopfes sollen die zwei eingegebenen Zahlen addiert werden und im Ausgabefeld erscheinen 181
84. chrift Jedes Zeichen eines Strings kann potentiell eines dieser mehreren zigtausend Zeichen einer der vielen Schriften sein In der Regel benutzt ein Dokument insbesondere im amerikanischen und europ ischen Bereich nur wenige kaum 100 unterschiedliche Zeichen Auch ein arabisches Dokument wird mit weniger als 100 verschiedenen Zeichen auskommen Wenn ein Dokument im Computer auf der Festplatte gespeichert wird so wer den auf der Festplatte keine Zeichen einer Schrift sondern Zahlen abgespeichert Diese Zahlen sind traditionell Zahlen die acht Bit im Speicher belegen ein soge nanntes Byte Ein Byte ist in der Lage 256 unterschiedliche Zahlen darzustellen Damit w rde ein Byte ausreichen alle Buchstaben eines normalen westlichen Doku ments in lateinischer Schrift oder eines arabischen Dokuments darzustellen F r ein chinesisches Dokument reicht es nicht aus die Zeichen durch ein Byte allein auszudr cken denn es gibt mehr als 10000 verschiedene chinesische Zeichen Es ist notwendig zwei Byte im Speicher zu benutzen um die vielen chinesischen Zeichen als Zahlen darzustellen Die Zeichencodierung englisch encoding eines Dokuments gibt nun an wie die Zahlen die der Computer auf der Festplatte gespeichert hat als Zeichen inter pretiert werden sollen Eine Codierung f r arabische Texte wird den Zahlen von 0 bis 255 bestimmte arabische Buchstaben zuordnen eine Codierung f r deutsche Dokumente wird den Zahlen 0 bis 255 lateinische B
85. d zur Schleifenkontrolle for j gt 0 j l uft von n bis 1 erg erg j akkumuliere das Ergebnis j j 1 verringere Laufz hler return erg Listing 3 24 Summe4 java Wie man jetzt sieht ist die while Schleife nur ein besonderer Fall der for Schleife Obiges Programm ist ein schlechter Programmierstil Hier wird ohne Not die Schleifensteuerung mit der eigentlichen Anwendungslogik vermischt Schleifen innerhalb von Schleifen Oft kommt man mit einer Schleife allein nicht aus Wann immer man einen 2 dimensionalen Raum durchlaufen will gibt es zwei Richtungen die x Richtung und die y Richtung Es ist dann durch alle x y Paare zu iterieren Hierzu sind zwei ineinander verschachtelte Schleifen notwendig Die u ere Schleife durchl uft dabei die ein Dimension die innere Schleife die zweite Folgendes Beispiel gibt ein kleines Viereck auf der Kommandozeile aus Hierf r gibt es eine u ere Schleife die daf r sorgt dass jede Zeile ausgegeben wird und eine innere Schleife die f r jede Zeile die einzelnen Zeichen ausgibt 65 p Kapitel 3 Imperative und funktionale Konzepte class Cross static String mkCross int width String result for int y 0 y lt width y y 1 for int x 0 x lt width x x 1 result result x y x y width 1 X O result result n return result public static void main String System
86. dar in dem zweidimensionale Graphiken gezeichnet werden k nnen Der Nullpunkt dieses Koordinatensystems ist oben links und nicht unten links wie wir es vielleicht aus der Mathematik erwartet h tten In der Klasse Graphics sind eine Reihe von Methoden definiert die es erlauben graphische Objekte zu zeichnen Es gibt Methoden zum Zeichnen von Geraden Vierecken Ovalen beliebigen Polygonz gen Texten etc Wollen wir eine eigene graphische Komponente definieren so k nnen wir die Meth ode paintComponent berschreiben und auf dem bergebenen Objekt des Typs Graphics entsprechende Methoden zum Zeichnen aufrufen Um eine eigene graphis che Komponente zu definieren wird empfohlen die Klasse JPanel zu erweitern und in ihr die Methode paintComponent zu berschreiben Folgende Klasse definiert eine neue graphische Komponente die zwei Linien einen Text ein Rechteck ein Oval und ein gef lltes Kreissegment enth lt lpackage name panitz gui graphicsTest slimport javax swing JPanel 117 Kapitel 5 Graphische Benutzeroberflachen mit Swing import javax swing JFrame import java awt Graphics class SimpleGraphics extends JPanel public void paintComponent Graphics g g drawLine 0 0 100 200 g drawLine 0 50 100 50 g drawString hallo 10 20 g drawRect 10 10 60 130 g drawOval 50 100 30 80 g fillArc 20 150 80 80 0 50 Listing 5 8 SimpleGraphics java Diese Komponente k
87. das Objekt erzeugt wird die entsprechende Klasse spezifizieren k nnte Genau hierzu dienen anonyme Klassen in Java Sie erm glichen Klassen ohne Namen zu instanziieren Hierzu ist nach dem Schl sselwort new anzugeben von welcher Oberk lasse namenlose Klasse ableiten soll oder welche Schnittstelle mit der namenlosen Klasse implementiert werden soll Dann folgt nach dem leeren Klammerpaar f r dem Konstruktoraufruf in geschweiften Klammern der Rumpf der namenlosen Klasse Wir schreiben ein drittes Mal die Klasse Counter Diesmal wird statt der nur ein mal instanziierten inneren Klasse eine anonyme Implementierung der Schnittstelle ActionListener Instanziiert 126 class 5 4 Reaktion auf Ereignisse package name panitz simpleGui import javax swing import java awt event PR U N Hr class AnonymousCounter extends JTB 6 private int counter 0 s public AnonymousCounter 9 button addActionListener 10 new ActionListener 11 public void actionPerformed ActionEvent _ 12 counter counter l1 13 textArea setText counter 14 5 H 16 is public static void main String _ new AnonymousCounter showInFrame 19 Listing 5 28 AnonymousCounter java Auch f r anonyme Klassen generiert der Java bersetzer eigene Klassendateien Mangels eines Names numeriert der Javatibersetzer hierbei die inneren Klassen einfach durch sep linux fh prog2 examples cl
88. den Javaver sion 1 5 sind viele Jahre vergangen Andere wichtige JSRs die in Java 1 5 integriert werden tragen bereits die Nummern 175 und 201 Hieran kann man schon erkennen wie lange es gedauert hat bis generische Typen in Java integriert wurden Interessierten Programmierern steht schon seit Mitte der 90er Jahre eine Javaer weiterung mit generischen Typen zur Verf gung Unter den Namen Pizza existiert eine Javaerweiterung die nicht nur generische Typen sondern auch algebraische Da tentypen mit pattern matching und Funktionsobjekten zu Java hinzuf gte Unter den Namen GJ f r Generic Java wurde eine allein auf generische Typen abgespeck te Version von Pizza publiziert GJ ist tats chlich der direkte Prototyp f r Javas generische Typen Die Expertenrunde des JSR014 hat GJ als Grundlage f r die Spezifikation genommen und an den grundlegenden Prinzipien auch nichts mehr ge ndert 6 2 1 Generische Klassen Die Idee f r generische Typen ist eine Klasse zu schreiben die f r verschiedene Typen als Inhalt zu benutzen ist Das geht bisher in Java allerdings mit einem kleinen Nachteil Versuchen wir einmal in traditionellem Java eine Klasse zu schreiben in der wir beliebige Objekte speichern k nnen Um beliebige Objekte 146 e U kb Hr e U N oe Tt e U Ne 6 2 Generische Typen speichern zu k nnen brauchen wir ein Feld in dem Objekte jeden Typs gespeichert werden k nnen Dieses Feld muss daher den Typ Object erhalt
89. die Methode setLayout 113 Kapitel 5 Graphische Benutzeroberflachen mit Swing 5 2 1 Flow Layout Der vielleicht einfachste Layout Manager nennt sich FlowLayout Hier werden die Unterkomponenten einfach der Reihe nach in einer Zeile angeordnet Erst wenn das Fenster zu schmal hierzu ist werden weitere Komponenten in eine neue Zeile gruppiert Die folgende Klasse definiert ein Fenster dessen Layout ber ein Objekt der Klasse FlowLayout gesteuert wird Dem Fenster werden f nf Kn pfe hinzugef gt lpackage name panitz gui layoutTest 3 import java awt 4 import javax swing class FlowLayoutTest extends JFrame s public FlowLayoutTest 9 JPanel pane new JPanel 10 pane setLayout new FlowLayout 11 pane add new JButton eins 12 pane add new JButton zwei 13 pane add new JButton drei ein langer Knopf 14 pane add new JButton vier 15 pane add new JButton fuenf 16 add pane 17 pack 18 set Visible true 19 20 21 public static void main String _ new FlowLayoutTest 22 Listing 5 5 FlowLayoutTest java Das Fenster hat die optische Auspr gung aus Abbildung 4 3 1 Abbildung 5 1 Anordnung durch das Flow Layout Ver ndert man mit der Maus die Fenstergr e macht es z B schmal und hoch so werden die Kn pfe nicht mehr nebeneinander sonder bereinander angeordnet 114 or w N 5 2 Gruppi
90. e Benutzeroberflachen mit Swing class InnerCounter extends JTB private int counter 0 class CounterListener implements ActionListener public void actionPerformed ActionEvent _ counter counter 1 textArea setText counter public InnerCounter button addActionListener new CounterListener public static void main String _ new InnerCounter showInFrame Qi Listing 5 27 InnerCounter java Tats chlich ist die Implementierung k rzer und etwas bersichtlicher geworden Beim bersetzen einer Klasse mit inneren Klassen erzeugt der Java bersetzer f r jede innere Klasse eine eigene Klassendatei sep linux fh ooseAl classes name panitz simpleGui gt 11 class rw r r 1 sep users 1082 2014 03 29 11 36 InnerCounter CounterListener rw r r 1 sep users 892 2014 03 29 11 36 InnerCounter class Der Javatibersetzer schreibt intern den Code um in eine Menge von Klassen ohne innere Klassendefinition und erzeugt f r diese den entsprechenden Code F r die innere Klasse generiert der Java bersetzer einen Namen der sich aus u eren und inneren Klassenamen durch ein Dollarzeichen getrennt zusammensetzt Anonyme Klassen Im letzten Abschnitt hatten wir bereits das Beispiel einer inneren Klasse f r die wir genau einmal ein Objekt erzeugen In diesem Fall w re es eigentlich unn tig f r eine solche Klasse einen Namen zu erfinden wenn man an genau dieser einen Stelle an der
91. e Dialogue nicht zu analysieren oder zu verstehen brauchen package name panitz oosel3 dialogue public class ButtonLogic 3 public String getDescription 4 return in Gro buchstaben umwandeln DH public String eval String x return x toUpperCase 7 Listing 4 13 ButtonLogic java r package name panitz oosel3 dialogue import javax swing import java awt event import java awt public class Dialogue extends JFrame 6 final JTextField inputField new JTextField 20 7 final JTextField outputField new JTextField 20 s final JPanel p new JPanel to A on 10 public Dialogue final ButtonLogic logic 11 final JButton button new JButton logic getDescription 12 button addActionListener 13 ev gt outputField setText logic eval inputField getText trim 14 15 p setLayout new BorderLayout 16 p add inputField BorderLayout NORTH 17 p add button BorderLayout CENTER 18 p add outputField BorderLayout SOUTH getContentPane add p pack set Visible true j N N N NNB 2 Achtung late binding funktioniert in Java nur bei Methoden nicht bei Feldern 84 4 1 Vererbung Listing 4 14 Dialogue java ra e package name panitz oosel3 dialogue class TestDialogue public static void main String _ new Dialogue new ButtonLogic Listing
92. e Eigenschaften hinzugef gt Im Beispiel der Studentenklasse soll das Feld matrikelNummer hinzugef gt werden e Ver ndern eine Eigenschaft der Oberklasse wird umdefiniert Im Beispiel der Studentenklasse soll die Methode toString der Oberklasse in ihrer Funktion alit t ver ndert werden 78 S 4 1 Vererbung Es gibt in Java f r eine Klasse immer nur genau eine direkte Oberklasse Eine sogenannte multiple Erbung ist in Java nicht m glich Es gibt immer maximal eine extends Klausel in einer Klassendefinition 4 1 1 Hinzufiigen neuer Eigenschaften Unser erstes Ziel der Vererbung war eine bestehende Klasse um neue Eigenschaften zu erweitern Hierzu k nnen wir jetzt einfach mit der extends Klausel angeben dass wir die Eigenschaften einer Klasse erben Die Eigenschaften die wir zus tzlich haben wollen lassen sich schlie lich wie gewohnt deklarieren int matrikelNummer Listing 4 4 Student java Hiermit haben wir eine Klasse geschrieben die drei Felder hat name und adresse die von der Klasse Person geerbt werden und zus tzlich das Feld matrikelNummer Diese drei Felder k nnen f r Objekte der Klasse Student in gleicher Weise benutzt werden s String writeAllFields Student s return s name s address s matrikelNummer Listing 4 5 Student java Ebenso so wie Felder lassen sich Methoden hinzuf gen Z B eine Methode die die Matrikelnummer als R ckgabewert hat
93. e Rekursion bergeben Eine if Bedingung sorgt daf r dass nur unter bestimmten Bedingungen ein weiterer rekursiver Aufruf kommt Eine Rekursion die wie eine for Schleife ber einen Zahlenbereich geht l sst sich damit wie folgt umsetzen class For static void forRek int from int to if from lt to System out println hallo from forRek from 1 to I Listing 3 30 ForRek java Wir nutzen aus dass in Java Methoden berladen werden k nnen Zwei Methoden sind berladen wenn sie denselben Methodennamen haben aber unterschiedliche Parameter Wir schreiben zun chst eine weitere berladene Version von forRek die nur einen Parameter hat der die obere Grenze der Rekursion angeben soll Diese berladene Methode ruft direkt die erste Version auf in dem der erste der beiden Parameter auf 1 gesetzt wird static void forRek int to forRek 1 to Listing 3 31 ForRek java das l sst sich auch noch ein zweites Mal machen Dieses Mal hat die berladene Version gar keinen Parameter static void forRek forRek 10 Listing 3 32 ForRek java Hier wird auch ein Standardwert genommen Ruft man die Version ohne Parameter auf so l uft die Rekursion 10 fach und es wird 10 Mal das Wort hallo auf der Kommandozeile ausgegeben public static void main String args forRek 71 fer Kapitel 3 Imperative und funktionale Konzepte Listing 3 33 Fo
94. e Wiederholungen immer die Schleife vorzuziehen Es sei denn man benutzt eine Programmiersprache deren Compiler Rekursionen optimiert bersetzt Wir werden aber in Laufe des Moduls Datentypen kennenlernen die in sich bereits rekursiv definiert sind und f r die rekursive L sungen ad quat sein k nnen Aufgabe 1 Im Bestseller Sakrileg der Da Vinci Code spielen die Fibonaccizahlen eine Rolle F r eine nat rliche Zahl n ist ihre Fibonaccizahl definiert durch n f rn lt 1 a l fib n 1 fib n 2 f rn gt 1 a Rechnen Sie von Hand den Aufruf fib 5 auf einem Papier aus b Programmieren Sie eine Methode static int fib int n die f r eine Zahl die entsprechende Fibonaccizahl zur ck gibt Aufgabe 2 Schreiben Sie jetzt eine Klasse Fib Objekte dieser Klasse sollen in der Lage sein nacheinander alle Fibonaccizahlen zu generieren Hierzu habe die 73 Kapitel 3 Imperative und funktionale Konzepte n e N Klasse zwei Felder vom Typ int ni und n2 Bei Erzeugung des Objektes sollen diese immer auf n2 0 und n1 1 gesetzt sein Die Klasse soll eine Methode int nextFib enthalten die jeweils die n chste Fibonaccizahl generiert Mehrfacher Aufruf der Methode soll also folgende Zahlenfolge erzeugen 1 1 2 3 5 8 13 21 34 Ein Beispielaufruf w re also Fib f new Fib System 3 System System System System out out out println out out println println println p
95. e gt Generate class files for specific VM version version Version information help Print a synopsis of standard options Akey value Options to pass to annotation processors X Print a synopsis of nonstandard options J lt flag gt Pass lt flag gt directly to the runtime system Werror Terminate compilation if warnings occur lt filename gt Read options and filenames from file panitz ThinkPad T430 Wie man dieser Ausgabe entnehmen kann gibt es das Argument version mit dem die Versionsnummer des Kompilators erfragt werden kann panitz ThinkPad T430 javac version javac 1 7 0_21 panitz ThinkPad T430 In diesem Fall handelt es sich also um den Java Kompilator fiir Java der Version 1 7 Jetzt k nnen wir f r die Java Quelltextdatei FirstProgram java durch den Kom pilator in eine bin re Datei bersetzen lassen Hierzu wird der Kompilator mit dem Dateinamen der Quelltextdatei als Argument aufgerufen Das Ergebnis ist im Er folgsfall eine neu generierte Datei die class Datei panitz ThinkPad T430 oose 1s FirstProgram java panitz ThinkPad T430 oose javac FirstProgram java panitz ThinkPad T430 oose 1s FirstProgram java FirstProgram class panitz ThinkPad T430 oose 31 w N Kapitel 1 Einf hrung in die Welt der Softwareentwicklung Wie man sieht wurde die Quelltextdatei erfolgreich bersetzt und eine Class Datei erzeugt Sehr oft ruft man den Kompilator auf doch statt den Quell
96. e in verschiedenen Modulen die vielen unterschiedlichen Aspekte der Software Entwickung kennenlernen In diesem Modul soll Ihnen hierzu ein Grund berblick und ein erstes Fundament in der Programmierung gelegt werden Die Fragestellungen der Softwareentwicklung reichen von technischen Aspekten wie die Programmierung von Betriebsmitteln bis hin zu Prozessen und Rollen beim Ar beiten im Team Es ist zu kl ren f r welche Hardware was f r Software mit welcher Funktionalit t auf welche Weise zu entwickeln ist wie die Qualit t der Software sicher gestellt werden kann wie die Kosten des Entwicklungsprozesses abgesch tzt werden k nnen und wie die Software zum Kunden gelangt und im laufenden Betrieb gewartet werden kann Wir geben eine ungeordnete und sicher nicht vollst ndige Liste verschiedenster As pekten der Programmierung Spezifikation Ein gro es Thema ist zun chst einmal festzuhalten was die zu erstellende Software berhaupt leisten soll Diesen Schritt der Softwa reentwicklung bezeichnet man allgemein als Spezifikation Spezifiziert wird auf den unterschiedlichsten Abstraktionsebenen Allgemein f r die komplette Software f r einzelne Komponenten oder auch f r kleinste Teileinheiten Es gibt verschiedene formale und semi formale Sprachen zur Spezifikation Im Bachelorstudiengang werden Sie die g ngigsten Spezifikationssprachen in dem Modul Softwaretechnik kennen lernen Weitere formale Spezifika tionssprachen werden
97. e main enth lt 5Der Punkt steht in den meisten Betriebssystemen f r den aktuellen Ordner in dem gerade ein Befehl ausgef hrt wird 93 fon Kapitel 4 Weiterf hrende Konzepte der Objektorientierung 4 2 4 Das Java Standardpaket Die mit Java mitgelieferten Klassen sind auch in Paketen gruppiert Die Standard klassen wie z B String und System und nat rlich auch Object liegen im Java Standardpaket java lang Java hat aber noch eine ganze Reihe weitere Pakete so z B java util in dem sich Listenklassen befinden java applet in dem Klassen zur Programmierung von Applets auf HTML Seiten liegen oder java io welches Klassen f r Eingaben und Ausgaben enth lt 4 2 5 Benutzung von Klassen in anderen Paketen Um Klassen benutzen zu k nnen die in anderen Paketen liegen m ssen diese ein deutig ber ihr Paket identifiziert werden Dieses kann dadurch geschehen dass die Klassen immer vollqualifiziert angegeben werden Im folgenden Beispiel benutzen wir die Standardklasse ArrayList aus dem Paket java util package name panitz utilTest 2 class TestArrayList public static void main String args java util ArrayList lt String gt xs new java util ArrayList lt String gt xs add friends xs add romans xs add countrymen System out println xs Listing 4 22 TestArrayList java Wie man sieht ist der Klassenname auch beim Aufruf des Konstruktors vollquali fiziert
98. ean bedingung if bedingung System out println Bedingung ist wahr else System out println Bedingung ist falsch a e OU N Be cl s public static void main String args 9 firstIf true false 10 12 Listing 3 13 FirstIf2 java Eine Folge von mehreren if Konstrukten l t sich auch direkt hintereinander schreiben so dass eine Kette von if und else Klauseln entsteht lclass Elself static String lessOrEq int i int j 4 if i lt 10 return i kleiner zehn 5 else if i gt 10 return i gr er zehn 6 else if j gt 10 return j gr er zehn 7 else if j lt 10 return j kleiner zehn 8 else return j i 10 of u public static void main String args 12 System out println lessOrEq 10 9 13 ia Listing 3 14 Elself java Wenn zuviele if Bedingungen in einem Programm einander folgen und ineinander verschachtelt sind dann wird das Programm schnell un bersichtlich Man spricht auch von Spaghetti code In der Regel empfiehlt es sich in solchen Fallen noch einmal ber das Design nachzudenken ob die abgefragten Bedingungen sich nicht durch verschiedene Klassen mit eigenen Methoden darstellen lassen Fallunterscheidungen mit switch Aus C erbt Java eine sehr spezielle zusammengesetzte Anweisung die switch Anweisung Es ist eine Anweisung fiir eine Fallunterscheidung mit mehreren Fallen 58 r rw 3 3 Anweisungen
99. ehle und ihre Benutzung merken Alle die kleinen Parameter Die Antwort ist RTFM Dieses steht f r den Satz read the fucking manual also eine etwas saloppe Aufforderung das Handbuch zu lesen Mit dem Befehl man k nnen die Handbucheintr ge aller Befehle aufgerufen werden Wer z B nicht mehr wei wie der Befehl 1s genau funktioniert kann das mit man 1s erfragen und bekommt folgende Ausgabe panitz ThinkPad T430 neuesTestVerzeichnis man ls LS 1 User Commands LS 1 NAME ls list directory contents SYNOPSIS ls OPTION FILE DESCRIPTION List information about the FILEs the current directory by default Sort entries alphabetically if none of cftuvSUX nor sort is speci fied Mandatory arguments to long options are mandatory for short options 24 1 3 Arbeiten mit der Kommandozeile too a all do not ignore entries starting with A almost all do not list implied and author Manual page 1s 1 line 1 press h for help or q to quit Wie sie sehen gibt es mehr Optionen f r diesen Befehl als in diesem Skript angegeben Das gilt f r alle der hier vorgestellten Befehle Es l sst sich auch die Hilfe f r die gesamte Kommandozeilenbenutzung anzeigen durch man bash 1 3 2 N tzliche Standardprogramme Im letzten Abschnitt haben wir die wichtigsten Befehle der Kommandozeile zum Umgang mit dem Dateisystem kennen gelernt Prinzipiell kann jedes Programm ber die Kommandozeile gestartet
100. ei die man editieren m chte Existiert keine Datei mit diesen Namen so wird die Datei dann neu angelegt Wenn wir also eine Javaquelltextdatei mit dem Dateinamen FirstProgra java editieren und erstellen m chten so starten wir den vi mit dem Befehl vi FirstProgram java Das Programm vi hat zwei Modi Den Befehlsmodus in dem jede Eingabe als Befehl f r den Editor interpretiert wird und den Einf gemodus in dem jede Eingabe als Text f r den Inhalt der Datei interpretiert wird Der Befehlsmodus ersetzt die Menus die aus den Texteditoren mit graphischer Benutzerf hrung bekannt sind 29 p Kapitel 1 Einf hrung in die Welt der Softwareentwicklung Vom Befehlsmodus kann man in den Einf gemodus durch Eingabe von if r insert oder a f r append wechseln Nach der Eingabe des Befehls i befindet man sich in Einf gemodus und alle folgenden Buchstaben werden vor der markierten Stelle des Dokuments eingef gt Nach dem Befehl a werden beim Einf gemodus alle folgenden Buchstaben nach der urspr nglich markierten Stelle eingef gt Vom Einf gemodus in den Befehlsmodus wechselt man durch Dr cken der ESC Taste Die wichtigsten Befehlsfolgen im Befehlsmodus betreffen nat rlich das Speichern der Datei und auch das Verlassen des Programms Diese Befehlsfolgen werden durch den Doppelpunkt eingeleitet Der Befehl wq bewirkt im Befehlsmodus dass die Datei gespeichert wird w f r write und das Programm vi verlassen wird q f r quit
101. ei einer kleinen Firma die in Deutschland angesiedelt ist und nur deutsche Mitarbeiter hat wei man nie was die Zukunft bringt Vielleicht wird die Firma von einer anderen in Korea angesiedelten Firma aufgekauft vielleicht wird es eine lose Zusammenarbeit mit einer franz sis chen Firma geben Auf jeden Fall sind solche Schritte weniger verbaut wenn der Programmtext auf Englisch dokumentiert und kommentiert ist Es emp fiehlt sich also sich fr hzeitig an zu gew hnen seinen Quelltext in seinem rudiment ren Englisch zu dokumentieren Wartung Wenn Sie in ihrem betriebspraktischen Modul in einer Firma sind die Software entwickelt werden sie vielleicht feststellen dass dort mehr Zeit damit verbracht wird bestehende Software zu Warten als neue Software zu schreiben Zur Wartung geh rt zun chst einmal dass Fehler die erst im Be trieb beim Kunden gefunden wurden korrigiert werden Es kann sich dabei um echte funktionale Fehlfunktionen die bis zum Programmabsturz f hren 1 1 Aspekte der Softwareentwicklung k nnen handeln aber auch um Probleme der Benutzerfreundlichkeit und der Ausf hrungsgeschwindigkeit Einen gro en Wartungsaufwand fordern oft neue Versionen des Systems auf dem die Software installiert ist Sei es das Betrieb ssystem ein Webserver oder auch die Datenbank Portieren Oft wird es n tig ein Programm auf eine andere Plattform zu portieren Ein unter Windows erstelltes Programm soll z B auch auf Unix Syste
102. einen Konstruktoraufruf mit new k nnen wir f r diesen Typ nicht machen srl package name panitz dialoguegui import java awt event import java awt import javax swing x import javax swing plaf basic limport javax swing text import javax swing text html public class HtmlDialogue extends JFrame final DialogueLogics logic final JButton button final JTextField inputField new JTextField 20 final JTextPane outputField new JTextPane final JPanel p new JPanel public HtmlDialogue DialogueLogics 1 outputField setEditorKit new HTMLEditorKit logic 1 button new JButton logic getDescription button addActionListener new ActionListener public void actionPerformed ActionEvent _ logic eval inputField getText trim outputField setText logic toHTMLString pack F setLayout new BorderLayout add inputField BorderLayout NORTH add button BorderLayout CENTER add outputField BorderLayout SOUTH getContentPane add p pack set Visible true Oo o us Listing 4 41 HtmlDialogue java 105 Kapitel 4 Weiterf hrende Konzepte der Objektorientierung Schlie lich k nnen wir ein Objekt der Klasse UpperConversion die die Schnittstelle DialogueLogics implementiert konstruieren und der Gui Anwendung bergeben package name panitz dialoguegui public class HtmlDialogueTest public stati
103. en class OldBox Object contents OldBox Object contents this contents contents Listing 6 6 OldBox java Der Typ Object ist ein sehr unsch ner Typ denn mit ihm verlieren wir jegliche statische Typinformation Wenn wir die Objekte der Klasse 01dBox benutzen wollen so verlieren wir s mtliche Typinformation ber das in dieser Klasse abgespeicherte Objekt Wenn wir auf das Feld contents zugreifen so haben wir ber das darin gespeicherte Objekte keine spezifische Information mehr Um das Objekt weiter sinnvoll nutzen zu k nnen ist eine dynamische Typzusicherung durchzuf hren class UseOldBox public static void main String _ OldBox b new OldBox hello String s String b contents System out println s toUpperCase System out println String s toUpperCase Listing 6 7 UseOldBox java Wann immer wir mit dem Inhalt des Felds contents arbeiten wollen ist die Typzu sicherung w hrend der Laufzeit durchzuf hren Die dynamische Typzusicherung kann zu einem Laufzeitfehler f hren So bersetzt das folgende Programm fehler frei ergibt aber einen Laufzeitfehler class UseOldBoxError public static void main String _ OldBox b new OldBox new Integer 42 String s String b contents System out printIn s toUpperCase i Listing 6 8 UseOldBoxError java sep linux fh javal 5 examples src gt javac Use0ldBoxError java sep linux fh javal 5
104. en auch Objektfelder Nein Nur Methoden und statische Felder Sind alle Daten in Java Objekte Nein es gibt 8 primitive Typen deren Daten keine Objekte sind Es gibt aber zu jeden dieser 8 primitiven Typen eine Klasse die die Daten entsprechend als Objekt speichern Welches sind die primitiven Typen byte short int long double float char boolean Sind Strings Objekte Ja die Klasse String ist eine Klasse wie Du und ich Sind Reihungen arrays Objekte Ja und sie haben sogar ein Attribut das ihre L nge speichert Was sind generische Typen Klassen oder Schnittstellen in denen ein oder mehrere Typen variabel gehalten sind Wie erzeugt man Objekte einer generischen Klasse Indem beim Konstruktoraufruf in spitzen Klammern konkrete Typen f r die Typvariablen angegeben werden Was passiert wenn ich f r generische Typen die spitzen Klammern bei der Benutzung weglasse Dann gibt der Compiler eine Warnung und nimmt den allgemeinsten Typ f r die Typvariablen an Meistens ist das der Typ Object Was sind generische Methoden Methoden in denen ein oder mehrere Parametertypen variabel gehalten sind Was sind typische Beispiel f r generische Typen Alle Samm lungsklassen und Abbildungsklassen im Paket java util zB die Klassen ArrayList LinkedList HashSet Vector oder die Schnittstellen List Map Set 7 1 Fragen und Antworten Wo wir gerade dabei sind Was sollte ich bei der Klasse Vector beachten In 90 der F lle
105. enstag der 19 11 2013 Mittwoch der 20 11 2013 Donnerstag der 21 11 2013 Freitag der 22 11 2013 Sonnabend der 23 11 2013 Sonntag der 24 11 2013 Montag der 25 11 2013 Dienstag der 26 11 2013 Mittwoch der 27 11 2013 Donnerstag der 28 11 2013 Freitag der 29 11 2013 Sonnabend der 30 11 2013 Aufgabe 4 freiwillige Zusatzaufgabe Schreiben Sie in der Klasse Datum eine Methode String monthAsHTML die f r den Monat in Form einer HTML Tabelle eine wochenweise Anzeige erzeugt wie im folgenden Beispiel f r November 2013 lt table gt lt tr gt lt th gt Mo lt th gt lt th gt Di lt th gt lt th gt Mi lt th gt lt th gt Do lt th gt lt th gt Fr lt th gt lt th gt Sb lt th gt lt th gt So lt th gt lt tr gt lt tr gt lt td gt lt td gt lt td gt lt td gt lt td gt lt td gt lt td gt lt td gt lt td gt 1 lt td gt lt td gt 2 lt td gt lt td gt 3 lt td gt lt tr gt lt tr gt lt td gt 4 lt td gt lt td gt 5 lt td gt lt td gt 6 lt td gt lt td gt 7 lt td gt lt td gt 8 lt td gt lt td gt 9 lt td gt lt td gt 10 lt td gt lt tr gt lt tr gt lt td gt 11 lt td gt lt td gt 12 lt td gt lt td gt 13 lt td gt lt td gt 14 lt td gt lt td gt 15 lt td gt lt td gt 16 lt td gt lt td gt 17 lt td gt lt tr gt lt tr gt lt td gt 18 lt td gt lt td gt 19 lt td gt lt td gt 20 lt td gt lt td gt lt b gt 21 lt b gt lt td gt lt td gt 22 lt td gt lt td gt 23 lt td gt lt td gt 24 lt td gt lt tr lt tr gt lt td gt 25 lt
106. enten aao rn a 112 5 2 t ppier ngen serii a cas Aes ret Beg irl ance Wh ee td wigs ee ed Oe 113 5 2 5 Flow Layout ghee 8 22 2 4 ea rend 114 5 2 2 Border Layout or aa so ea ee re Dee 115 SPs mame Grid Layouts u a ns a a I a G 115 5 3 Eigene GUl Komponenten en 4 2 sats Kara ware are 117 Sek Fraktal u ae u ke Brad era er ie 119 5 4 Reaktion auf Ereignisse 2 2 2 runs 123 54L Der ACttonListener siii ar ee Oe Y 124 5 4 2 Innere und Anonyme Klassen 125 5 4 3 Lambda Ausdrucke 4 55 2 FE FI ET ee 127 5 4 4 Mausereignisse oh 255 Sos tev ke SE we a 128 5 4 5 Fensterereignisse 4 gers 2 nn Oe ae Be dae Rede 130 5 5 Zeitsestellerte Ereignisse sa sehr ar BIT SEES RS 131 I Animationen s se gt ee ora ee me ma 134 5 6 Weitere Swing Komponenten a 139 6 Weiterf hrende Konzepte 143 6 1 Reihungen Arrays aa a a ah 143 6 1 1 Deklaration von Reihungen 143 6 1 2 Erzeugen von Reihungen 2 2 ee 2 ee 20 144 6 1 3 Zugriff auf Elemente sso ha 3s eu Baer er as 144 6 1 4 ndern von Elementen 2 2 2 2m nn 145 6 1 5 Die For Each Schleife 3 2 2 2 2 See 2a ee A S SS 145 6 2 Generische Typen Sa 95 wie hole ts et et ra ees oe 146 Inhaltsverzeichnis 6 2 1 Generische Klassen 0 0 0 0 0 0 0 0 00084 146 0 22 gt NeTeR DUN D agai nr kt Bas ee fa Soe a a BSE as 149 6 2 3 Beispiel einer eigenen Listenklasse 152 6 2 4 Standard Sammlungsklassen
107. erden Wir k nnen also drei Eigenschaften auf die Karteikarte schreiben Was sind die Typen dieser drei Eigen schaften Diesmal sind es keine Zahlen oder Zeichenketten sondern Objekte der anderen drei bereits modellierten Objektarten Wenn wir n mlich eine Karteikarte schreiben dann erfinden wir gerade einen neuen Typ den wir f r die Eigenschaften anderer Karteikarten benutzen k nnen Somit erstellen wir eine Karteikarte f r den Objekttyp Ausleihe wie sie in Abbildung 2 4 zu sehen ist 2 2 Klassen und Objekte Wir haben in einem Modellierungsschritt im letzten Abschnitt verschiedene Ob jektarten identifiziert und ihre Eigenschaften spezifiziert Dazu haben wir vier Karteikarten geschrieben Jetzt k nnen wir versuchen diese Modellierung in Java umzusetzen In Java beschreibt eine Klasse eine Menge von Objekten gleicher Art Damit entspricht eine Klasse einer der Karteikarten in unserer Modellierung Die 37 Kapitel 2 Grundkonzepte der Objektorientierung Abbildung 2 3 Modellierung eines Datums Klassendefinition ist eine Beschreibung der m glichen Objekte In ihr ist definiert was f r Daten zu den Objekten geh ren Zus tzlich k nnen wir in einer Klasse noch schreiben welche Operationen auf diesen Daten angewendet werden k nnen Klassendefinitionen sind die eigentlichen Programmtexte die der Programmierer schreibt In Java steht genau eine Klassendefinition in genau einer Datei Die Datei hat dabei den Namen der
108. ern die Methode equals f r eine Klasse nicht berschrieben wird wird die entsprechende Methode aus der Klasse Object benutzt Diese berpr ft aber keine inhaltliche Gleichheit Es ist also zu empfehlen die Methode equals f r alle eigenen Klassen die zur Datenhaltung geschrieben wurden zu berschreiben Dabei sollte die Methode immer folgender Spezifikation gen gen e Reflexivitat es sollte immer gelten x equals x e Symmetrie wenn x equals y dann auch y equals x e Transitivitat wenn x equals y und y equals z dann gilt auch x equals z e Konsistenz wiederholte Aufrufe von equals auf dieselben Objekte liefern dasselbe Ergebnis sofern die Objekte nicht ver ndert wurden e nichts gleicht null x equals null ist immer falsch Aufgabe 1 berschreiben Sie f r die Klassen Vertex GeometricObject und alle Unterklassen von GeometricObject die Methode equals berlegen Sie ob Sie damit dann tats chlich eine quivalenzrelation realisiert haben Wenn nicht geben Sie ein Gegenbeispiel von Objekten f r die die equals Methoden gegen eines der Gesetze f r quivalenzrelationen verst t 4 2 Pakete Java bietet die M glichkeit Klassen in Paketen zu sammeln Die Klassen eines Paketes bilden zumeist eine funktional logische Einheit Pakete sind hierarchisch strukturiert d h Pakete k nnen Unterpakete haben Damit entsprechen Pakete Ordnern im Dateisystem Pakete erm glichen verschiedene Klassen gleichen Na mens die un
109. erungen 5 2 2 Border Layout Die Klasse BorderLayout definiert einen Layout Manager der f nf feste Positio nen kennt eine Zentralposition und jeweils links rechts und oberhalb unterhalb der Zentralposition eine Position f r Unterkomponenten Die Methode add kann in diesem Layout auch noch mit einem zweitem Argument aufgerufen werden das eine dieser f nf Positionen angibt Hierzu bedient man sich der konstanten Felder der Klasse BorderLayout In dieser Klasse wird die Klasse BorderLayout zur Steuerung des Layoout benutzt Die f nf Kn pfe werden an jeweils eine der f nf Positionen hinzugef gt 3 package name panitz gui layoutTest import java awt import javax swing j class BorderLayoutTest extends JFrame public BorderLayoutTest JPanel pane new JPanel pane setLayout new BorderLayout pane add new JButton eins BorderLayout NORTH pane add new JButton zwei BorderLayout SOUTH pane add new JButton drei ein langer Knopf BorderLayout CENTER pane add new JButton vier BorderLayout WEST pane add new JButton fuenf BorderLayout EAST add pane pack set Visible true I public static void main String _ new BorderLayoutTest Listing 5 6 BorderLayoutTest java Die Klasse erzeugt das Fenster aus Abbildung 4 3 1 Das Layout ndert sich nicht wenn man mit der Maus die Gr e und das Format des Fe
110. es Objekt noch keine konkreten Werte f r die Felder zugewiesen Der Titel der Autor und auch der Preis f r dieses Buchobjekt wurde noch nicht gesetzt Auf die Felder eines Objektes kann mit einem Punkt zugegriff en werden Links von dem Punkt steht ein Objekt rechts davon ein Feldname So k nnen wir in unserem Beispiel mit b1 titel auf den Titel des Buchobjektes b1 zugreifen Um einen Titel zu setzen kann wieder der Zuweisungsbefehl genutzt wer den Wir k nnen alle drei Felder mit folgenden Zuweisungen mit konkreten Werten belegen bl titel Geschiittelt nicht ger hrt bl autor Matthias Oheim Sven Eric Panitz bl preisInCent 750 Listing 2 5 TestBuch java Wie man sieht lassen sich Zeichenketten in Java direkt in doppelten Anf hrungsze ichen eingeschlossen hinschreiben Dabei ist zu beachten das diese so notierten Stringobjekte nicht ber ein Zeilenende hinaus gehen d rfen Konstante Zahlen lassen sich in Java wie eigentlich in allen Programmiersprachen direkt hinschreiben Nach den obigen Zuweisungen hat das Objekt b1 konkrete Werte Mit dem Aus gabebefehl den wir im vorherigen Kapitel vorgestellt haben lassen sich die einzelnen Daten der Felder eines Objektes auf der Kommandozeile ausgeben 41 Kapitel 2 Grundkonzepte der Objektorientierung System out printlin bl autor Listing 2 6 TestBuch java Klassen werden geschrieben um nicht nur ein Objekt sondern zumei
111. es Programm erzeugt ein leeres Fenster und gibt das auf dem Bildschirm aus Die Klasse JFrame hat einen zweiten Konstruktor der noch ein Stringargument hat Der bergebene String wird als Fenstertiteltext benutzt Ein Programm kann auch mehrere Fensterobjekte erzeugen und sichtbar machen package name panitz oose swing example import javax swing class JF2 public static void main String _ new JFrame erster Rahmen setVisible true new JFrame zweiter Rahmen setVisible true Listing 5 2 JF2 java 5 1 2 Zwischenkomponenten Graphische Zwischenkomponenten haben prim r die Aufgabe andere Komponenten als Unterkomponenten zu haben und diese in einer bestimmten Weise anzuordnen 111 pi oo e Kapitel 5 Graphische Benutzeroberfl chen mit Swing Zwischenkomponenten haben oft keine eigene visuelle Auspr gung Sie sind dann unsichtbare Komponenten die als Beh lter weiterer Komponenten dienen Die gebr uchlichste Zwischenkomponenten ist von der Klasse JPanel Weitere Zwis chenkomponenten sind JScrollPane und JTabbedPane Diese haben auch eine eigene visuelle Auspr gung 5 1 3 Atomare Komponenten Die atomaren Komponenten sind schlie lich Komponenten die ein konkretes graphisches Objekt darstellen das keine weiteren Unterkomponenten enthalten kann Solche Komponenten sind z B JButton JTextField JTable und JComBox Diese Komponenten lassen sich ber ihre Konstruktoren
112. et basieren besch ftigt sich das Modul Webbasierte Anwendungen Datenhaltung Kaum ein Softwareprojekt kommt ohne eine Komponente zur Speicherung umfangreicher Daten aus man spricht dabei von Persistenz Dat en bleiben erhalten auch wenn das Programm nicht mehr l uft Eine ein fache Form der Datenpersistenz ist eine Datei in der die Daten in irgendeiner Form geschrieben werden In der Regel haben Daten eine Struktur und wer den in einer strukturierten Form abgespeichert um in dieser Struktur effizient suchen zu k nnen Hierzu gibt Datenbanken Bereits in zweitem Semester wer den Sie entsprechenden Modul die Grundlagen der Datenbanktechnologie zur Software Entwicklung kennen lernen Algorithmen In der Regel erhalten Unterprogramme bestimmte Eingaben f r die eine Ausgabe zu berechnen ist Der Weg aus den Einzelschritten wie diese Ausgabe erzeugt wird wird als Algorithmus bezeichnet F r viele typ ische immer wieder ben tigte Aufgaben wie zum Beispiel dem Sortieren ein 13 Kapitel 1 Einf hrung in die Welt der Softwareentwicklung er Liste von Daten gibt es Standardalgorithmen auf die in der Software Entwicklung zur ck gegriffen werden kann Im zweiten Semester im Modul Algorithmen und Datenstrukturen werden die elementarsten Standardal gorithmen vermittelt sowie grundlegende Gedanken tiber die Komplexitat bestimmter Algorithmen e Codierung Die eigentliche Codierung ist in der Regel der einzige Schritt der d
113. ethode soll dann ein Buchobjekt erzeugt werden Wir beginnen eine entsprechende Klasse zum ersten Testen von Buchobjekten class TestBuch public static void main String args Listing 2 3 TestBuch java Erzeugen von Objekten mit new Innerhalb dieser Hauptmethoden k nnen wir jetzt konkrete Objekte der Klasse Buch erzeugen Hierzu gibt es in Java das Schl sselwort new Mit diesem wird angezeigt 40 2 2 Klassen und Objekte dass ein neues Objekt erzeugt werden soll Dem Schliisselwort folgt der Name der Klasse fiir die ein neues Objekt zu erzeugen ist In unserem Fall also Buch An schlie end folgt noch ein rundes Klammernpaar also indsgesamt new Buch Wurde so ein Objekt erzeugt ist dieses irgendwo abzuspeichern Hierzu dienen lokale Variablen Diese haben einen Bezeichner Uber diesen Bezeichner wird die Variable angesprochen Zus tzlich ist noch durch einen Typnamen anzugeben welche Art von Daten in dieser Variable gespeichert werden sollen In unserem Fall ist dieses der Typ Buch denn es sollen Buchobjekte in der Variablen abgelegt werden Buch bl new Buch Listing 2 4 TestBuch java Das Gleichheitszeichen in dieser Zeile steht f r die sogenannte Zuweisung eng assignment Der Variablen b1 wird hiermit ein konkretes Objekt zugewiesen Zugriff auf die Felder von Objekten Von nun an bezeichnet die Variable b1 ein konkretes Objekt der Klasse Buch Allerdings haben wir f r dies
114. f r generische Typen sind sogenannte Container oder Samm lungsklassen d h Klassen wie die erste generische Klasse Box die als Beh lter f r ein oder mehrere Elemente eines variabel gehaltenen Typs dienen Die Klassen Box und Pair sind in dieser Hinsicht recht langweilig da sie nur ein bzw zwei Elemente beinhalten Eine h ufig ben tigte Funktionalit t ist die Sammlung von potentiell beliebig vielen Elementen in einer bestimmten Reihenfolge Eine solche Sammlung von Elementen wird als Liste bezeichnet Mit Hilfe der generischen Typen k nnen wir eine eigene generische Listenklasse implementieren Der Trick dabei ist sich der Reihungen als internen Speicher zu bedienen Reihun gen sind ja in der Lage sind Elemente in einer festen Reihenfolge abzuspeichern Das Problem der Reihungen ist aber dass sie im Vorfeld beim Erzeugen nur f r eine maximale Anzahl von Elementen erzeugt werden k nnen Eine Reihung kann dynamisch nicht nachtr glich vergr ert werden In der Implementierung einer Listenklasse mit Hilfe einer Reihung geht man so vor dass es eine interne Reihung gibt Ist diese Reihung zu klein geworden wird eine neue gr ere Reihung erzeugt und alle Elemente in diese umkopiert Unsere Listenklasse ben tigt also zwei interne Felder e eines das die Reihung als Datenspeicher enth lt e eines das notiert wie viele Elemente in der Liste bereits enthalten sind package name panitz util public class OurList lt A gt
115. false x equals x gt true x equals y gt true sep swe10 fh beispiele gt Obwohl die beiden Objekte x und y die gleichen Texte darstellen sind es zwei unabh ngige Objekte sie sind nicht identisch aber gleich Auch in der deutschen Sprache gibt es die subtile Unterscheidung zwischen der Iden tit t und einer Gleichheit Meinen wir eine Gleichheit ben tzen wir den Ausdruck ydas Gleiche lt wollen wir die Identit t von einem Objekt ausdr cken so sprechen wir von gt dasselbe lt Man kann sich das an einer Alltagssituation gut verdeutlichen Wenn Sie in einem Restaurant dem Kellner sagen Sie wollen das gleiche Gericht wie die Dame am Nebentisch so wird der Kellner in die K che gehen und dort einen frischen Teller mit eben den Gericht dass die Dame am Nebentisch bekommen hat zubereiten lassen Es gibt also zwei Teller mit zweimal dem gleichen Gericht Ver langen Sie hingegen dasselbe wie die Dame am Nebentisch so muss der Kellner 90 4 2 Pakete streng genommen der Dame den Teller wegnehmen und Ihnen hinstellen Es gibt also nur ein einziges Objekt das Gleiche hei t in Java equals dasselbe bedeutet in Java Nur bei primitiven Typen gibt es keinen Unterschied Dort stellen die Daten n mlich gar keine Objekte dar Die Klasse String hingegen ist kein primi tiver Typ und deshalb ist in der Regel zum Vergleichen von zwei String Objekten die Methode equals aufzurufen und nicht der Operator zu verwenden Sof
116. for Schleife durchlaufen werden wirkt erst etwas verwirrend ergibt sich aber nat rlich aus der Herleitung der for Schleife aus der vorgepr ften while Schleife Als erstes wird genau einmal die Initialisierung der Schleifenvariablen ausgef hrt Anschlie end wird die Bedingung gepr ft Abh ngig davon wird der Schleifenrumpf ausgef hrt Als letztes wird die Weiterschaltung ausgef hrt bevor wieder die Be dingung gepr ft wird Die nun schon hinl nglich bekannte Methode summe stellt sich in der Version mit der for Schleife wie folgt dar class Summe3 public static int summe int n int erg 0 Feld f r Ergebnis for int j n j gt 0 j j 1 j l uft von n bis 1 erg erg j akkumuliere das Ergebnis 64 10 11 12 3 3 Anweisungen return erg Listing 3 23 Summe3 java Beim Vergleich mit der while Version erkennt man wie sich die Schleifensteuerung im Kopf der for Schleife nun gebiindelt an einer syntaktischen Stelle befindet Die drei Teile des Kopfes einer for Schleife k nnen auch leer sein Dann wird in der Regel an einer anderen Stelle der Schleife entsprechender Code zu finden sein So k nnen wir die Summe auch mit Hilfe der for Schleife so schreiben dass die Schleifeninitialisierung und Weiterschaltung vor der Schleife bzw im Rumpf durchgef hrt wird class Summe4 public static int summe int n int erg 0 Feld f r Ergebnis int j n Fel
117. g der Methode equals f r die Klasse Person2 mit der erwarteten Funktionalit t schreiben public boolean equals Object other if other instanceof Person2 Person2 p Person other return this name equals p name amp amp this adresse equals p adresse return false Nur wenn das zu vergleichende Objekt auch vom Typ Person ist und den gleichen Namen und die gleiche Adresse hat dann sind zwei Personen gleich 89 Kapitel 4 Weiterf hrende Konzepte der Objektorientierung Mehr ber die Gleicheit public boolean equals Object obj ist die Methode zum Testen auf die Gle ichheit von zwei Objekten Dabei ist die Gleichheit nicht zu verwechseln mit der Identit t die mit dem Operator getestet wird Der Unterschied zwischen Iden tit t und Gleichheit l t sich sehr sch n an Strings demonstrieren class EqualVslIdentical public static void main String args String x hallo toUpperCase String y hallo toUpperCase System out println x x System out println y y System out println x x 4 x x System out println x y 4 x y System out println x equals x x equals x System out println x equals y x equals y Listing 4 19 EqualVsIdentical java Die Ausgabe dieses Tests ist sep swe10 fh beispiele gt java EqualVsIdentical x HALLO y HALLO X X gt true x y gt
118. g gt xs new ArrayList lt String gt xs add friends xs add romans xs add countrymen System out println xs Vector lt String gt ys new Vector lt String gt ys add friends ys add romans ys add countrymen System out println ys Listing 4 24 TestImport2 java T Aus historischen Gr nden wird in diesem Kapitel als Beispiel bereits mit den generischen Klassen ArrayList und Vector ein Konzept benutzt das erst im n chsten Kapitel erkl rt wird 95 Kapitel 4 Weiterf hrende Konzepte der Objektorientierung Importieren von Paketen Wenn in einem Programm viele Klassen eines Paketes benutzt werden so k nnen mit einer Importanweisung auch alle Klassen dieses Paketes importiert werden Hierzu gibt man in der Importanweisung einfach statt des Klassennamens ein an N package name panitz utilTest 3 import java util class TestImport3 public static void main String args List lt String gt xs new ArrayList lt String gt xs add friends System out println xs Vector lt String gt ys new Vector lt String gt ys add romans System out println ys Bw Nd Hr Listing 4 25 TestImport3 java Ebenso wie mehrere Klassen k nnen auch mehrere komplette Pakete importiert werden Es k nnen auch gemischt einzelne Klassen und ganze Pakete importiert werden 4 2 7 Statische Imports
119. ge Methoden weisen konkrete Objekte den Feldern des Objektes zu 46 Kapitel 3 Imperative und funktionale Konzepte Im letzten Abschnitt wurde ein erster Einstieg in die objektorientierte Program mierung gegeben Wie zu sehen war erm glicht die objektorientierte Program mierung das zu l sende Problem in logische Untereinheiten zu unterteilen die direkt mit den Teilen der zu modellierenden Problemwelt korrespondieren Die Methodenr mpfe die die eigentlichen Befehle enthalten in denen etwas berech net werden soll waren bisher recht kurz In diesem Kapitel werden wir Konstrukte kennenlernen die es erm glichen in den Methodenr mpfen komplexe Berechnungen vorzunehmen Die in diesem Abschnitt vorgestellten Konstrukte sind herk mmliche Konstrukte der imperativen Programmierung und in hnlicher Weise auch in Pro grammiersprachen wie C zu finden 3 1 Primitive Typen Bisher haben wir noch berhaupt keine Berechnungen im klassischen Sinne als das Rechnen mit Zahlen kennengelernt Java stellt Typen zur Repr sentation von Zahlen zur Verf gung Leider sind diese Typen keine Klassen d h insbesondere dass auf diesen Typen keine Felder und Methoden existieren auf die mit einem Punkt zugegriffen werden kann Die im Folgenden vorgestellten Typen nennt man primitive Typen Sie sind fest von Java vorgegeben Im Gegensatz zu Klassen die der Programmierer selbst definieren kann k nnen keine neuen primitiven Typen definiert werden
120. gram public static void main String args System out println Hallo Ilja System out println Hallo Welt Listing 1 3 ThirdProgram java Kompilieren wir diese Klasse und interpretieren sie so haben wir folgendes Verhal ten panitz ThinkPad T430 oose javac ThirdProgram java panitz ThinkPad T430 oose java ThirdProgram Hallo Ilja Hallo Welt panitz ThinkPad T430 oose Aufgabe 1 Entwickeln Sie Ihre erste minimale Javaklasse nur mit Hilfe der Kom mandozeile Benutzen Sie einen einfachen Editor zum Editieren den Javakom pilator zum bersetzen und die virtuelle Maschine von Java zum Ausf hren 33 Kapitel 1 Einf hrung in die Welt der Softwareentwicklung 34 Kapitel 2 Grundkonzepte der Objektorientierung Die Grundidee der objektorientierten Programmierung ist Daten die zusammen ein gr eres zusammenh ngendes Objekt beschreiben zusammenzufassen Zus t zlich fassen wir mit diesen Daten noch die Programmteile zusammen die diese Daten manipulieren Ein Objekt enth lt also nicht nur die reinen Daten die es repr sentiert sondern auch Programmteile die Operationen auf diesen Daten durch f hren Insofern w re vielleicht subjektorientierte Programmierung ein passenderer Ausdruck denn die Objekte sind nicht passive Daten die von au en manipuliert werden sondern enthalten selbst als integralen Bestandteil Methoden die ihre Dat en manipulieren k nnen 2 1 Objektorient
121. h gt java TestLateBinding Martin M ller Hauptstra e Matrikel Nr 756456 Harald Schmidt Marktplatz Martin M ller Hauptstra e Matrikel Nr 756456 Die ersten beiden Ausgaben entsprechen sicherlich den Erwartungen es wird eine Student und anschlie end eine Person ausgegeben Die dritte Ausgabe ist interes sant Obwohl der Befehl System out println p2 toString die Methode toString auf einem Feld vom Typ Person ausf hrt wird die Meth ode toString aus der Klasse Student ausgef hrt Dieser Effekt entsteht weil das Objekt das im Feld p2 gespeichert wurde als Student und nicht als Person erzeugt wurde Die Idee der Objektorientierung ist dass die Objekte die Methoden in sich enthalten In unserem Fall enth lt das Objekt im Feld p2 seine eigene toString Methode Diese wird ausgef hrt 83 Kapitel 4 Weiterf hrende Konzepte der Objektorientierung Der Ausdruck p2 toString ist also zu lesen als Objekt das in Feld p2 gespeichert ist f hre bitte deine Methode toString aus Da dieses Objekt auch wenn wir es dem Feld nicht ansehen ein Objekt der Klasse Student ist f hrt es die entsprechende Methode der Klasse Student und nicht der Klasse Person aus Dieses in Java realisierte Prinzip wird als late binding bezeichnet Aufgabe 1 In dieser Aufgabe sollen Sie eine Gui Klasse benutzen und ihr eine eigene Anwendungslogik bergeben Gegeben seien die folgenden Javaklassen wobei Sie die Klass
122. h lediglich in der Anzahl der Ziffern unterscheiden Die Zahlen werden intern als Zweierkomplement dargestellt In der Programmiersprache Java sind die konkreten Wertebereiche f r die einzelnen primitiven Typen in der Spezifikation festgelegt In anderen Programmiersprachen wie z B ist dies nicht der Fall Hier h ngt es vom Compiler und dem konkreten Rechner ab welchen Wertebereich die entsprechenden Typen haben Es gibt Programmiersprachen wie z B Haskell in denen es einen Typ gibt der potentiell ganze Zahlen von beliebiger Gr e darstellen kann Starten Sie folgendes Javaprogramm class TestInteger public static void main String _ System out println 2147483647 1 System out println 2147483648 1 Listing 3 1 TestInteger java Erklaren Sie die Ausgabe FlieBkommazahlen in Java Eine Alternative zu der Festkommadarstellung von Zahlen ist die Flie kom madarstellung Wahrend die Festkommadarstellung einen Zahlenbereich der ratio nalen Zahlen in einem festen Intervall durch diskrete quidistant verteilte Werte darstellen kann sind die diskreten Werte in der Flie kommadarstellung nicht gleich verteilt In der Flie kommadarstellung wird eine Zahl durch zwei Zahlen charakterisiert und ist bez glich einer Basis b e die Mantisse f r die darstellbaren Ziffern Die Mantisse charakterisiert die Genauigkeit der Flie kommazahl e der Exponent der angibt wie weit die Mantisse hin
123. hen werden Die Felder haben keine eigenen Namen sondern werden ber den Namen der Reihung zusammen mit ihrem Index angesprochen Mit diesem Bild ergibt sich automatisch wie nun einzelnen Reihungselementen neue Objekte zugewiesen werden k nnen String stra hello world stra 0 hallo 3 stra 1 welt 6 1 5 Die For Each Schleife Eine h ufige Aufgabe ist f r alle Elemente einer Reihung eine bestimmte Aktion durchzuf hren Wir haben schon die typische for Schleife ber den Index der Ele mente gesehen Java bietet aber f r den Zweck um ber alle Elemente eines Array 145 gs u gt w Kapitel 6 Weiterf hrende Konzepte oder sonstigen Sammlung zu iterieren eine spezielle Variante der for Schleife an die sogenannte for each Schleife package name panitz oose public class ForEachArray public static void main String args int xs 17 4 42 18 6 for int x xs System out println x x Listing 6 5 ForEachArray java 6 2 Generische Typen Generische Typen wurden im JSRO14 definiert In der Expertengruppe des JSRO14 war der Autor dieses Skripts zeitweilig als Stellvertreter der Software AG Mitglied Die Software AG hatte mit der Programmiersprache Bolero bereits einen Compiler f r generische Typen implementiert Der Bolero Compiler generiert auch Java Byte Code Von dem ersten Wunsch nach Generizit t bis zur nun vorliegen
124. hleife kontrollieren soll Dann gibt es im Schleifenrumpf einen Zuweisungsbefehl der den Wert dieses Feldes ver ndert Schlie lich wird der Wert dieses Feldes in der Schleifenbedingung abge fragt Die Idee der for Schleife ist diesen Code der kontrolliert wie oft die Schleife durch laufen werden soll im Kopf der Schleife zu b ndeln Solche Daten sind oft Z hler 3Der Java bersetzer macht kleine Pr fungen auf konstanten Werten ob Schleifen jeweils durch laufen werden oder nicht terminieren Deshalb brauchen wir die Hilfsmethode falsch 63 or gt w iw Kapitel 3 Imperative und funktionale Konzepte vom Typ int die bis zu einem bestimmten Wert herunter oder hoch gez hlt wer den Sp ter werden wir noch die Standardklasse Iterator kennenlernen die benutzt wird um durch Listenelemente durchzuiterieren Eine for Schleife hat im Kopf e eine Initialisierung der relevanten Schleifensteuerungsvariablen init e ein Pr dikat als Schleifenbedingung pred e und einen Befehl der die Schleifensteuerungsvariable weiterschaltet step for init pred step body Entsprechend sieht unsere jeweilige erste Schleife die Ausgabe der Zahlen von 0 bis 9 in der for Schleifenversion wie folgt aus class ForTest public static void main String args for int i 0 i lt 10 i i 1 System out println i Listing 3 22 ForTest java Die Reihenfolge in der die verschiedenen Teile der
125. hrow geworfen werden Nur Objekte einer Unterklasse von Throwable Wie werden geworfene Ausnahme behandelt Indem man sie innerhalb eines try catch Konstruktes wieder abf ngt Kann man auf unterschiedliche Ausnahmen in einem catch unter schiedlich reagieren Ja einfach mehrere catch untereinanderschreiben Das als erstes zutreffende catch ist dann aktiv Was ist das mit dem finally beim try catch Hier kann Code angegeben werden der immer ausgef hrt werden soll egal ob und welche Aus nahme aufgetreten ist Dieses ist sinnvoll um eventuell externe Verbindungen und hnliches immer sauber zu schlie en Darf man beliebig Ausnahmen werfen Ausnahmen die nicht in einem catch abgefangen werden m ssen in der throws Klausel einer Methode deklar iert werden 177 Kapitel 7 Zusammenfassung und Ausblick 178 Alle Nein Ausnahmeobjekte von RuntimeException diirfen auch geworfen werden wenn sie nicht in der throws Klausel einer Methode stehen Wozu sind Pakete da Unter anderen damit man nicht Milliarden von Klassen in einem Ordner hat und dabei die Ubersicht verliert Ist mir egal Pakete sind mir zu umst ndlich Das ist aber dumm wenn man Klassen gleichen Namens aus verschiedenen Bibliotheken benutzen will Die kann man nur unterscheiden wenn sie in verschiedenen Paketen sind OK ich sehs ein Wie nenne ich mein Paket Am besten die eigene Webdomain r ckw rsts nehmen also f r uns an der FH de hsrm informatik panitz
126. ht entwickelt habe In diesem Modul werden wir erste Testszenarien f r Entwicklertests kennenlernen Ein umfassender berblick wird in dem Modul Softwaretechnik gegeben Logging Besonders f r Server Anwendungen die ber einen langen Zeitraum laufen ist es wichtig dass ein Administrator nachverfolgen kann was ber einen bestimmten Zeitraum mit der Anwendung vorgefallen ist Wie viele An fragen bedient wurden ob es Fehlerf lle gab oder auch wie gut der Durchsatz der Anwendung war Hierzu ist es unerl sslich dass eine Anwendung ein Log buch f hrt in dem alle wichtigen Schritte des Prorammablaufs dokumentiert sind Dieses Logbuch ist insbesondere wichtig wenn es zu Fehlern kam und die Fehlerursache ermittelt werden muss 1 1 Aspekte der Softwareentwicklung e Verifikation Klar Software soll fehlerfrei laufen Aber nicht immer gen gen Tests um das fehlerfreie Verhalten eines Programms zu zeigen Tests k nnen immer nur endlich viele Eingaben eines Programms checken Ein Programm hat aber potentiell unendlich viele Zust nde und Eingaben Mit formalen Ver ifikationsmethoden versucht man f r besonders kritische Software die vielle icht eine gef hrliche Anlage steuert mathematisch zu beweisen dass sie f r alle Eingaben immer das gew nschte Verhalten zeigt Man unterscheidet partielle Korrektheit wenn das Programm f r eine bestimmte Eingabe ein Ergebnis liefert dann ist dieses bez glich der Spezifikation korrekt
127. ht monolithisch sondern besteht aus einzelnen Komponenten die in unterschiedlichen Softwareprojekten wiederverwendet werden k nnen F r diese Komponenten ist die Programmierschnittstelle das sogenannte API application programmers interface zu beschreiben Es ist zu doku mentieren welche Funktionalit t die Komponente anbietet und wie diese von einem Programmierer zu benutzen ist Welche Vorbedingungen gel ten m ssen und welche Nachbedingungen nach Aufruf einer Schnittstelle gelten Interna der Umsetzung sind hierbei nicht dokumentiert Entwickler der Software selbst Sie werden schon in K rze feststellen dass Sie Ihre eigenen Programme schon nach wenigen Wochen manch mal gar Tagen nicht mehr verstehen Sie werden sich frage Was habe ich mir da nur gedacht Deshalb ist es sinnvoll seinen Programmtext zu kommentieren Innerhalb des Programmtextes sind Kommentarzeilen eingef gt die erkl ren wie ein bestimmter Teil des Codes funktioniert Diese Kommentare sollen helfen dass die Kollegen im Team oder man selber oder Kollegen die irgendwann in der Zukunft die Software weit erentwickeln den Programmtext besser verstehen In vielen Firmen verlangt wird das API auf Englisch zu dokumentieren und auch Kommentare im Programmtext auf Englisch zu schreiben Dieses soll erleichtern dass auch internationale Kollegen mit ins Team aufgenommen werden k nnen oder die Software ins Ausland zur Weiterentwicklung verkauft werden kann Auch b
128. ic JTB textArea setText hallo da drau en add textArea add button public void showInFrame JFrame f new JFrame f add this f pack f set Visible true public static void main String _ new JTB showInFrame Listing 5 4 JTB java 5 2 Gruppierungen Bisher haben wir Unterkomponenten weitere Komponenten mit der Methode add hinzugef gt ohne uns Gedanken ber die Plazierung der Komponenten zu machen Wir haben einfach auf das Standardverhalten zur Plazierung von Komponenten ver traut Ob die Komponenten schlie lich nebeneinander bereinander oder irgendwie anders Gruppiert im Fenster erschienen haben wir nicht spezifiziert Um das Layout von graphischen Komponenten zu steuern steht das Konzept der so genannten Layout Manager zur Verf gung Ein Layout Manager ist ein Objekt das einer Komponente hinzugef gt wird Der Layout Manager steuert dann in welcher Weise die Unterkomponenten gruppiert werden LayoutManager ist eine Schnittstelle Es gibt mehrere Implementierungen dieser Schnittstelle Wir werden in den n chsten Abschnitten drei davon kennenlernen Es steht einem nat rlich frei eigene Layout Manager durch Implementierung dieser Schnittstelle zu schreiben Es wird aber davon abgeraten weil dieses notorisch schwierig ist und die in Java bereits vorhandenen Layout Manager bereits sehr m chtig und ausdrucksstark sind Zum Hinzuf gen eines Layout Manager gibt es
129. ie Spielfigur kann Kraftpillen aufsammeln mit der sie immun gegen Geister ist und diese zerst ren kann anstatt von ihnen zerst rt zu wer den e alle GeometricObject Objekte werden durch Bilddateien dargestellt e es gibt mehrere Level die sich in Form des Labyrinth unterscheiden Profiaubaustufe e es gibt ein Menu in dem Einstellungen gesetzt werden k nnen e es gibt Sound w hrend des Spiels Abgabe 138 5 6 Weitere Swing Komponenten e das Spiel ist in der letzten Praktikumsstunde letzte Januarwoche in einem 5 mintitigen Vortrag vorzustellen unbedingt Lange einhalten und daf r sorgen dass es keine Verz gerung gibt das eigene Spiel am Beamer zu zeigen Wir wollen und k nnen die 90 Minuten der Praktikumsstunde nicht berziehen e letzte Abgabem glichkeit ist am Sonntag 2 Februar 20 15Uhr per Mail an den Lehrbeauftragten der Praktikumsstunde e die Abgabe beinhaltet einen eclipse Projektordner mit alles Resourcen eine kleine PDF Datei die die Besonderheiten der eigenen L sung zeigen In diesem Dokument sind alle zus tzlichen Quellen und Hil fen die benutzt worden genannt Insbesondere die Urheber der Bilddateien falls welche verwendet wurden Es ist darin zu unter schreiben dass die Aufgabe eigenst ndig gel st wurde und keine an deren als die angegebenen Hilfen verwendet wurden der Eclispe Projektordner und das PDF Dokument sind in einer tar Datei zu verpacken Die tar Datei hat den N
130. ien mit der Endung class erzeugt Im Gegensatz zu Klassen haben Schnittstellen keinen Konstruktor Das bedeutet insbesondere dass mit einer Schnittstelle kein Objekt erzeugt werden kann Was h tte ein solches Objekt auch f r ein Verhalten Die Methoden haben ja gar keinen Code den sie ausf hren k nnten Eine Schnittstelle ist vielmehr ein Versprechen dass Objekte Methoden mit den in der Schnittstelle definierten Signaturen enthal ten Objekte k nnen aber immer nur ber Klassen erzeugt werden 102 rer Fan u e w 4 3 Schnittstellen Interfaces und abstrakte Klassen Implementierung von Schnittstellen Objekte die die Funktionalit t einer Schnittstelle enthalten k nnen nur mit Klassen erzeugt werden die diese Schnittstelle implementieren Hierzu gibt es zus tzlich zur extends Klausel in Klassen auch noch die M glichkeit eine implements Klausel anzugeben Eine m gliche Implementierung der obigen Schnittstelle ist package name panitz dialoguegui 3 public class ToUpperCase implements DialogueLogic protected String result public String getDescription return convert into upper cases public String eval String input result input toUpperCase return result Listing 4 36 ToUpperCase java Die Klausel implements DialogueLogic verspricht dass in dieser Klasse f r alle Methoden aus der Schnittstelle eine Implementierung existiert In un serem Beispiel waren z
131. ieren sollen Dieses kann mit einem Objekt das WindowListener im plementiert in der Methode windowClosing spezifiziert werden Wir schreiben hier eine Version des Apfelm nnchenprogramms in dem das Schlie en des Fensters den Abbruch des gesamten Programms bewirkt package name panitz crempel tool apfel import javax swing JFrame import java awt event j public class ClosingApfelFrame public static void main String args JFrame f new JFrame f add new ApfelWithMouse f addWindowListener new WindowAdapter public void windowClosing WindowEvent e System exit 0 f pack f setVisible true 130 r oo e 5 5 Zeitgesteuerte Ereignisse Listing 5 33 ClosingApfelFrame java 5 5 Zeitgesteuerte Ereignisse Um zeitlich immer wiederkehrende Ereignisse in GUIs zu programmieren gibt in Swing eine Hilfsklasse Timer Objekte dieser Klasse k nnen so instanziiert werden dass sie in bestimmten Zeitabst nden Ereignisse ausl sen Der Timer ist also so etwas wie ein Ereignisgenerator Zus tzlich gibt man einem Timer Objekt auch einen ActionListener mit der spezifiziert wie auf diese in Zeitintervallen auftretenden Ereignisse reagiert werden soll Folgende Klasse implementiert eine simple Uhr In einem JLabel wird die aktuelle Zeit angegeben Die Komponente wird einem Timer bergeben der jede Sekunde eine neues Ereignis erzeugt Diese Ereignisse sorgen daf r dass die Zeit i
132. ierte Modellierung Bevor wir etwas in Code gie en wollen wir erst einmal eine informelle Model lierung der Welt f r die ein Programm geschrieben werden soll vornehmen Hierzu empfiehlt es sich durchaus in einem Team zusammenzusitzen und auf Karteikarten aufzuschreiben was es denn f r Objekte in der Welt gibt die wir modellieren wollen Stellen wir uns hierzu einmal vor wir sollen ein Programm zur Bibliotheksverwal tung schreiben Jetzt berlegen wir einmal was gibt es denn f r Objektarten die alle zu den Vorg ngen in einer Bibliothek geh ren Hierzu f llt uns vielleicht folgende Liste ein e Personen die B cher ausleihen wollen e B cher die ausgeliehen werden k nnen e Tats chliche Ausleihvorg nge die ausdr cken dass ein Buch bis zu einem bestimmten Zeitpunkt von jemanden ausgeliehen wurde e Termine also Objekte die ein bestimmtes Datum kennzeichnen Nachdem wir uns auf diese vier f r unsere Anwendung wichtigen Objektarten geeinigt haben nehmen wir vier Karteikarten und schreiben jeweils eine der Objek tarten als berschrift auf diese Karteikarten 35 Kapitel 2 Grundkonzepte der Objektorientierung Jetzt haben wir also Objektarten identifiziert Im n chsten Schritt ist zu berlegen was f r Eigenschaften diese Objekte haben Beginnen wir f r die Karteikarte auf der wir als berschrift Person geschrieben haben Was interessiert uns an Eigen schaften einer Person Wahrscheinlich ihr Name mit V
133. igenschaft ist nicht an spezielle Objekte gebunden Sie hat daher auch kein this Objekt Eine statische Eigenschaft existiert nur einmal f r alle Objekte einer Klasse Nicht statische Methoden werden auch als Objektmethoden bezeichnet Gibt es auch statische Konstruktoren Ja pro Klasse genau einen der keine Parameter hat Kann ich den statischen Konstruktor auch selbst definieren Ja mit dem Schl ssenwort static gefolgt von in geschweiften Klammern eingeschlossenen Code Was bedeutet berschreiben von Methoden Methoden die es in der Oberklasse bereits gibt in einer Unterklasse neu zu definieren Kann ich auch Konstruktoren berschreiben Nein Was bezeichnet man als Polymorphie Wenn eine Methode in verschiede nen Unterklassen einer Klasse berschrieben wird Kann ich in einer berschreibenen Methode die berschriebene Methode aufrufen Ja indem man das Schl sselwort super benutzt und mit einem Punkt abgetrennt den eigentlichen Methodenaufruf folgen l sst 7 1 Fragen und Antworten Kann ich Konstruktoren der Oberklasse aufrufen Ja aber nur im Konstruktor als erste Anweisung Hier muss sogar der Aufruf eines Konstruk tors der Oberklasse stehen Dieser Aufruf wird durch das Schl sselwort super gefolgt von der Parameterliste gemacht Was ist wenn ich im Konstruktor keinen Aufruf an einen Kon struktor der Oberklasse schreiben Dann generiert Java den Aufruf eines Konstruktors der Oberklasse ohne Parameter als er
134. in Tue Oct 1 12 10 22 2013 from vpn501 hotsplots net panitz fozzie Jetzt arbeiten Sie auf dem Server Dieses erkennen Sie zum Beispiel wenn Sie jetzt den Befehl 1s eintippen denn dann stellen Sie fest dass Sie die Dateien an der Hochschule und nicht auf Ihrem Rechner daheim sehen Wollen Sie die Verbindung mit dem fremden Rechner beenden so k nnen Sie das durch den Befehl exit panitz fozzie exit Abgemeldet Connection to logini cs hs rm de closed panitz ThinkPad T430 oose Transfer von Dateien mit sftp Mit ssh k nnen Sie auf die Kommandozeile eines Rechners ber ein Netzwerk zu greifen Manchmal will man aber eine oder mehrere Dateien von einem anderen Rechner holen oder auf einen anderen Rechner hoch laden Hierzu dient das Pro gramm sftp secure file transfer program Auch dieses wird mit ihrem Benutzerna men gefolgt von der Adresse des Servers gestartet Wenn Sie in den Server eingeloggt sind sind sie in einer Umgebung in der Sie Befehle zum Dateitransfer abschicken k nnen Die Befehle hei en put um Dateien auf den Server hoch zu laden und get um Dateien von dem Server herunter zu laden Mit dem aus der Kommandozeile bekannten Befehl cd k nnen Sie durch das Dateisystem des Servers navigieren panitz ThinkPad T430 oose einNeuerOrdner sftp panitz logini cs hs rm de panitz logini cs hs rm de s password Connected to logini cs hs rm de sftp gt put existierendeDatei Uploading existierendeDatei to home
135. in System das ein dreidimen sionalen Film rendered darf durchaus manchmal Stunden brauchen Egal in welchem Gebiet die Software eingesetzt wird sie soll m glichst effizient laufen Hierbei wird es unter Umst nden n tig korrekt laufende Programme zu Op timieren Optimierungen k nnen den verwendeten Algorithmus betreffen der in einer hohen Komplexit tsklasse liegt und durch einen effizienteren ersetzt werden kann Es kann das Zwischenspeichern von Teilergebnissen beinhalten so dass mehrfaches Errechnen gleicher Zwischenergebnisse entf llt Es kann aber auch auf einer mikroskopischen Ebene passieren indem besonders h ufig benutze Programmteile schon in kleinsten Teilen auf Assemblerebene opti miert werden Mit der Komplexit t bestimmter Algorithmen besch ftigt sich in unserem Curriculum unter Anderem das Modu Algorithmen und Daten strukturen Tests Beim Theater sagt man Alles was nicht geprobt ist geht schief hnliches gilt f r Software Alles was nicht getestet wurde hat eine hohe Wahrscheinlichkeit dass es nicht funktioniert Doch wie testet man Soft ware besten Reicht es ein paar Anwender das Programm ausprobieren zu lassen Welche Komponenten lassen sich automatisch reproduzierbar testen Welche Granularit t k nnen die Tests haben Wird in Kenntnis des Quell codes getestet oder ohne diese Kenntnis das ein Ausgabeverhalten der Soft ware Und wer testet Die Entwickler selbst oder Personen die die Software nic
136. in weiteres Mal schreiben TT ra Kapitel 4 Weiterf hrende Konzepte der Objektorientierung class StudentOhneVererbung String name String address int matrikelNummer StudentOhneVererbung String name String address int nr this name name this address address matrikelNummer nr public String toString return name address Matrikel Nr matrikelNummer Listing 4 2 StudentOhneVererbung java Mit dem Prinzip der Vererbung wird es erm glicht diese Verdoppelung des Codes der bereits f r die Klasse Person geschrieben wurde zu umgehen Wir werden in diesem Kapitel schrittweise eine Klasse Student entwickeln die die Eigenschaften erbt die wir in der Klasse Person bereits definiert haben Zun chst schreibt man in der Klassendeklaration der Klasse Student dass deren Objekte alle Eigenschaften der Klasse Person erben Hierzu wird das Schl sselwort extends verwendet class Student extends Person2 Listing 4 3 Student java Mit dieser extends Klausel wird angegeben dass die Klasse von einer anderen Klasse abgeleitet wird und damit deren Eigenschaften erbt Jetzt brauchen die Eigenschaften die schon in der Klasse Person definiert wurden nicht mehr neu definiert zu werden Mit der Vererbung steht ein Mechanismus zur Verf gung der zwei prim re Anwen dungen hat e Erweitern zu den Eigenschaften der Oberklasse werden weiter
137. inFile String outFile String inEnc String outEnc throws Exception Es soll eine Textdatei f r eine bestimmte Zeichencodierung eingelesen und der gelesene Inhalt in andere andere Textdatei in einer bestimmten Zeichen codierung wieder abgespeichert werden Die Datei wird also kopiert und dabei eventuell die Zeichencodierung ge ndert 6 3 1 Dateibasierte Ein Ausgabe Die vier obigen Grundklassen sind abstrakt d h es k nnen keine Objekte dieser Klassen mit einem Konstruktor erzeugt werden Wir ben tigen Unterklassen dieser 158 ry no p 6 3 Ein und Ausgabe vier Klassen die die abstrakten Methoden implementieren Eine der blichsten Ein Ausgabe Operation bezieht sich auf Dateien F r alle f r der Grundklassen gibt es im API eine Klasse die die entsprechende Operation f r Dateien realisiert Diese Unterklassen haben im Namen einfach das Wort File voran gestellt Die einfachste Art der Eingabe d rfte somit das Lesen aus einer Textdatei sein Hierzu eine einfache Methoden zum Lesen einer Textdatei import java io package name panitz oose io 3 public class Textlesen Listing 6 26 TextLesen Das Problem mit s mtlichen Ein Ausgabe Operationen ist dass die Kommunika tion potentiell schief gehen kann Die Datei kann nicht lesbar sein gar nicht ex istieren oder das externe Betriebsmittel in diesem Falle die Festplatte es k n nte aber auch eine Netzwerkverbindung sein nicht mehr antworten Um
138. ine ganze Anzahl von Zeichen von der Datenquelle geholt und im Zwischenspeicher abgelegt Weitere read Operationen holen dann die Zeichen nicht mehr direkt aus der Datenquelle sondern aus dem Zwischenspeicher bis dieser komplett ausgelesen wurde und von der Datenquelle wieder zu f llen ist Die entsprechenden Klassen die Str me in gepufferte Str me verpacken hei en BufferedInputStream BufferedOutputStream und entsprechend BufferedReader BufferedWriter Jetzt erg nzen wir zur Effizienzsteigerung noch das Kopierprogramm so da der benutzte Writer gepuffert ist import java io import java nio charset Charset class BufferedCopy static public void main String args throws Exception Reader reader new BufferedReader new FileReader args 0 Writer writer new BufferedWriter new OutputStream Writer new FileOutputStream args 1 Charset forName UTF 16 int c while c reader read 1 writer write c writer close reader close 164 ono p 6 3 Ein und Ausgabe Listing 6 37 BufferedCopy java 6 3 4 Lesen von einem Webserver Bisher haben wir nur aus Dateien gelesen und damit den Vorteil der Abstraktion der Str me dass die Quelle aus der gelesen wird recht unterschiedlich sein kann noch nicht demonstriert In diesem Abschnitt zeigen wir wie man statt aus einer Datei von einem Webserver Dokumente lesen kann Auch dabei werden Str me verwendet Damit
139. ing public void move if ballY gt height ballSize ballY lt 0 yDir yDir ballY ballY yDir Listing 5 49 BouncingBall java Zum Zeichnen wird ein roter Hintergrund gezeichnet und der Kreis an seiner ak tuellen Position public void paintComponent Graphics g g setColor Color RED g fillRect 0 0 width height g setColor Color YELLOW g fillOval ballX ballY ballSize ballSize Listing 5 50 BouncingBall java Unsere Gr e wird verwendet als bevorzugte Gr e der Komponente public Dimension getPreferredSize return new Dimension width heigh f t Listing 5 51 BouncingBall java Und schlie lich folgt eine kleine Hauptmethode zum Starten der Animation public static void main String _ JFrame f new JFrame f add new BouncingBall f pack f setVisible true Listing 5 52 BouncingBall java Aufgabe 1 Schreiben Sie eine Klasse Labyrinth Ein Labyrinth sei eine Unterklasse von JPanel Ein Labyrinth enthalte einen Array von geometrischen Objekten Diese geometrischen Objekte sind Quadrate Die Kantenl nge der Quadrate ist in einem Feld der Klasse Labyrinth festgelegt Das Labyrinth soll die Gr e so gesetzt haben dass f r eine bestimmte Anzahl von Zeilen und Spalten der Quadrate Platz ist Beispiel sei die Kantenl nge der Quadrate 20 Das Labyrinth habe 30 Zeilen und 50 Spalten Dann ist das Labyrinth
140. ing 6 36 EncodedCopy java Betrachtet man die Gr e der geschriebenen Datei so wird man feststellen da sie mehr als doppelt so gro ist wie die Ursprungsdatei sep linux fh prog1 gt java EncodedCopy EncodedCopy java EncodedCopyUTF16 java sep linux fh prog1 gt ls 1 EncodedCopy java SEWCrA r 1 sep users 443 2004 01 07 19 12 EncodedCopy java sep linux fh progi gt ls 1 EncodedCopyUTF16 java rw r r 1 sep users 888 2004 01 07 19 13 EncodedCopyUTF16 java sep linux fh prog1 gt G ngige Zeichencodierung sind e iso 8859 1 Damit lassen sich westeurop ische Texte mit den entsprechenden Sonderzeichen und Akzenten wie in westeurop ischen Sprechen ben tigt ab speichern Jedes Zeichen wird mit einem Byte abgespeiechert Andere Zeichen sei es arabisch chinesisch oder auch t rkische Sonderzeichen sind in dieser Zeichencodierung nicht abspeicherbar e utf 16 Hierbei hat jedes Zeichen genau zwei Byte in der Darstellung Diese beiden Byte codieren exakt die Unicode Nummer des Zeichens Somit lassen sich in dieser Zeichencodierung alle Unicode Zeichen abspeichern Allerdings wenn man nur lateinische Schrift in einem Text hat hat eines dieser beiden Bytes immer den Wert 0 Es wird also viel Platz verschwendet e utf 8 Hier werden g ngigen lateinische Zeichen als ein Byte codiert Alle an deren Sonderzeichen oder Zeichen aus anderen Schriften werden mit mehreren Bytes codiert Dieses hat den Vorteil dass man
141. ing charAt String java 516 at name panitz exceptions ThrowIndex main ThrowIndex java 5 swel0 gt Wie man an diesem Beispiel sieht gibt Java nicht nur die Klasse der Ausnahme die geworfen wurde aus java lang StringIndexOutOfBoundsException sondern auch noch eine zus tzliche Erkl rung Die Objekte der Unterklassen von Throwable haben in der Regel einen Konstruktor der erlaubt noch eine zus tzliche Information die den Fehler erkl rt mit anzugeben Das k nnen wir auch in unserem Beispiel programm nutzen package name panitz exceptions public class SecondThrow public static int fakult t int n if n 0 return 1 if n lt 0 throw new RuntimeException negative Zahl f r Fakult tsberechnung return n fakultat n 1 171 Kapitel 6 Weiterf hrende Konzepte public static void main String System out println fakultat 5 System out println fakultat 3 System out println fakultat 4 args j Listing 6 53 SecondThrow java Damit erhalten wir folgende Ausgabe swel0 gt java name panitz exceptions SecondThrow 120 Exception in thread main java lang RuntimeException negative Zahl f r Fakult tsberechnung at name panitz exceptions SecondThrow fakult t SecondThrow java 6 at name panitz exceptions SecondThrow main SecondThrow java 12 swel0 gt 172 Kapitel 7 Zusammenfassung und Ausblick 7 1 Fragen und Antworten Is
142. irekt Code in der gew nschten Programmiersprache von Hand erzeugt Alle anderen Schritte der Programmierung sind mehr oder weniger unabh ngig von der zugrunde liegenden Programmiersprache F r die Codierung empfiehlt es sich Konventionen zu verabreden wie der Code geschrieben wird was f r Bezeichner benutzt werden in welcher Weise der Programmtext einger ckt wird Entwicklungsabteilungen haben zumeist schriftlich verbindlich festgeschriebene Richtlinien f r den Programmierstil Dieses erleichtert den Code der Kollegen im Projekt schnell zu verstehen e Refaktorierung Man sagt zwar gerne Never change a running system oder auch If it works don not fix it doch k nnen wir das in der Software Entwicklung so nicht stehen lassen Funktionierende L sungen k nnen unn tig komplex und un bersichtlich sein so dass sie auf lange Sicht schwer zu warten sind und auch nicht leicht m weitere Funktionalit t erweitert werden kann Hier ist es oft sinnvoll den Code zu refaktorieren d h umzuschreiben so dass er durch eine einfachere und bersichtlichere L sung ersetzt werden kann Dieses kann man nur sicher machen wenn es eine ausreichende Testabdeckung gibt so dass man zeigen kann dass die neue L sung sich ebenso wie die alte Verh lt Oft ist die Refaktorierung das Resultat eines Reviews zum Beispiel in Form eines code walk through bei dem der Entwickler seinen Programmtext zeilenweise zusammen mit anderen Entwicklern durch geht
143. isten implementieren sind ArrayList LinkedList und Vector Dabei ist ArrayList die gebr uchlichste Implementierung Vector ist eine ltere Implementierung die als Nachteil hat dass sie stets eine Syn chronisation f r nebenl ufige Steuerf den vornimmt die in der Regel nicht unbed ingt ben tigt wird Die Klasse ArrayList entspricht der Klasse OurList die im letzten Abschnitt en twickelt wurde Es wird also intern eine Reihung benutzt um die Elemente der Liste abzuspeichern Wenn diese Reihung zu klein geworden ist um alle Elemente 154 or w N 6 2 Generische Typen der Liste hinzuzuf gen dann wird intern eine gr ere Reihung angelegt und die Elemente in diesen kopiert Die Klasse LinkedList hingegen realisiert die Liste auf eine g nzlich andere Art Hier wird f r jedes Element der Liste ein eigenes Listenkettenobjekt erzeugt Diese Kettenglieder sind dann miteinander verbunden Es entsteht eine rekursive Struktur Dieses werden wir im zweiten Semester selbst programmieren Warum gibt es zwei verschiedene Listenklassen Beide realisieren dieselbe Funktion alit t Jedoch haben sie beide sehr unterschiedliches Laufzeitverhalten e die ArrayList kann effizient auf beliebige Elemente in der Liste zugreifen Die Methode get i hat einen konstanten Aufwand Bei der LinkedList hingegen kann man ber das Durchlaufen aller Elemente vom ersten Element an an das i te Element gelangen Hier hat die Methode get i
144. java Eine weitere wichtige Konstante ist der Faktor der angibt welcher reellen Zahl ein Pixel entspricht double zelle 0 00625 Listing 5 17 Apfelmaennchen java 120 17 5 3 Eigene GUI Komponenten Eine weitere Konstanten legt die Farbe fest mit der die Punkte die nicht ber einen bestimmten Schwellwert konvergieren eingef rbt werden sollen final Color colAppleman new Color 0 129 190 Listing 5 18 Apfelmaennchen java Weitere Konstanten legen fest welche komplexe Zahl der Nullpunkt unseres Graphics Objekts darstellt double startX 2 double startY 1 35 Listing 5 19 Apfelmaennchen java Weitere Konstanten sind der Schwellwert und die maximale Rekursionstiefe n f r die wir jeweils zn berechnen final int recDepth 50 final int schwellwert 4 Listing 5 20 Apfelmaennchen java Die wichtigste Methode berechnet die Werte f r die Gleichung 2 41 z2 c Der Eingabeparameter ist die komplexe Zahl c Das Ergebnis dieser Methode ist das n f r das z gr er als der Schwellwert ist C Werte checken nach zn 1 zn zn c public int checkC Complex c Complex zn new Complex 0 0 for int n 0 n lt recDepth n n 1 final Complex znpl zn mult zn add c if znpl norm gt schwellwert return n zn znpl return recDepth Listing 5 21 Apfelmaennchen java Jetzt gehen wir zum Zeichnen jedes Pixel unseres Gra
145. kPad T430 Innerhalb von Dateinamen hat der Stern noch eine besondere Bedeutung Er steht fiir eine beliebige Folge von beliebigen Buchstaben So bedeutet z B jpg alle Dateinamen mit der Endung jpg So lassen sich Mengen von Dateien ansprechen Im folgenden Beispiel werden alle Dateien deren Name mit GUI beginnt und die die Endung class haben panitz ThinkPad T430 ls 1 home panitz GUI class rw r r 1 panitz panitz 875 Okt 2010 home panitz GUI 1 class rw r r 1 panitz panitz 624 Okt 2010 home panitz GUI 1KnopfAktion class rw r r 1 panitz panitz 875 Okt 2010 home panitz GUI 2 class rw r r 1 panitz panitz 585 Okt 2010 home panitz GUI 3 class rw r r 1 panitz panitz 1655 Okt 2010 home panitz GUI class panitz ThinkPad T430 DAAAD MY mkdir Neue Verzeichnisse Anlegen Es lassen sich mit dem Befehl mkdir neue Verzeichnisse anlegen Hierzu schriebt man hinter den Befehl als Pfadangabe den Namen des anzulegenden Verzeichnisses Dieses kann wieder relativ zu dem Arbeitsverzeichnis sein oder auch eine absolute Pfadangabe panitzCThinkPad T430 mkdir neuesTestVerzeichnis panitz ThinkPad T430 cd neuesTestVerzeichnis panitzCThinkPad T430 neuesTestVerzeichnis Mit dem Befehl rmdir lassen sich Verzeichnisse wieder l schen Hierzu muss das Verzeichnis allerdings leer sein Es darf keine Unterverzeichnisse oder Dateien mehr enthalten panitz ThinkPad T430 neuesTestVerzeichnis cd panitz Thi
146. ket name panitz testPackages schreibt Paket und Klassenname zusammen durch einen Punkt getrennt werden der vollqualifizierte Name der Klasse genannt im obigen Beispiel ist entsprechend der vollqualifizierte Name name panitz testPackages Test Der Name einer Klasse ohne die Paketnennung hei t unqualifiziert 4 2 2 bersetzen von Paketen Bei gr eren Projekten ist es zu empfehlen die Quelltexte der Javaklassen in Dateien zu speichern die im Dateisystem in einer Ordnerstruktur die der Paketstruk tur entspricht liegen Dieses ist allerdings nicht unbedingt zwingend notwendig Hingegen zwingend notwendig ist es die erzeugten Klassendateien in Ordnern entsprechend der Paketstruktur zu speichern Leider ist es in Deutschland weit verbreitet einen Bindestrich in Webadressen zu verwenden Der Bindestrich ist leider eines der wenigen Zeichen die Java in Klassen und Paketnamen nicht zul t 92 4 2 Pakete Der Javainterpreter java sucht nach Klassen in den Ordnern entsprechend ihrer Paketstruktur java erwartet also dass die obige Klasse Test in einem Ordner testPackages steht der ein Unterordner des Ordners panitz ist der ein Unterord ner des Ordners tfhberlin ist usw java sucht diese Ordnerstruktur von einem oder mehreren Startordnern ausgehend Die Startordner werden in einer Umge bungsvariablen CLASSPATH des Betriebssystems und ber den Kommandozeilenpa rameter classpath festgelegt Der Java bersetze
147. kursion a 2 near let 3 4 1 Rekursion und Schleifen 3 4 2 Einsatz von Rekursion 4 Weiterf hrende Konzepte der Objektorientierung 4 1 Vererbung wants ae ne 4 1 1 Hinzuf gen neuer Eigenschaften 4 1 2 Uberschreiben bestehender Eigenschaften 14 16 17 25 29 35 35 37 39 40 43 44 47 47 48 48 ol 54 59 59 56 57 57 61 68 70 73 77 TT 79 79 Inhaltsverzeichnis Aes Konstruktion arris ted sc BO Bin Bae a ge ae ae Se 80 4 1 4 Zuweisungskompatibilit t 81 4 1 5 Sp te Bindung late binding coe ye 2 22 tra 83 4 2 Paketes se A ee ind be Mens OIG eu nee ee ease te 91 4 21 Rakerdekhralion 47 244 oe uP a Ae So Oe ewe eS 91 4 2 2 bersetzen von Paketen 0000 00004 92 4 2 3 Starten von Klassen in Paketen 93 4 2 4 Das Java Standardpaket 0 94 4 2 5 Benutzung von Klassen in anderen Paketen 94 4 2 6 Importieren von Paketen und Klassen 94 4 2 7 Statische Imperts 2 0 4 2 2 8 2 20 ka Zu len 96 4 2 8 Sichtbarkeitsattribute 4 2 42 Sara amp OSHS amp agra 97 4 3 Schnittstellen Interfaces und abstrakte Klassen 102 Aal Schnittstellen A b gt sis lee 102 5 Graphische Benutzeroberfl chen mit Swing 109 5 1 Swings GUI Komponenten 2 2 2 2 a a 110 5 1 1 Top Level Komponenten 2 004 111 5 1 2 Zwischenkomp nenten es 42 Is er it das tr A eS 111 5 1 3 Atomare Kompon
148. l ten wir sicherstellen dass mit diesem auch ein g ltiges Objekt der Klasse Person erzeugt wird Hierzu kann man den Konstruktor der Oberklasse aufrufen Dieses geschieht mit dem Schl sselwort super super ruft den Konstruktor der Oberklasse auf Student String name String adresse int nr super name adresse matrikelNummer nr Listing 4 8 Student java In unserem Beispiel bekommt der Konstruktor der Klasse Student alle Daten die ben tigt werden um ein Personenobjekt und ein Studentenobjekt zu erzeugen Als erstes wird im Rumpf des Studentenkonstruktors der Konstruktor der Klasse Person aufgerufen Anschlie end wird das zus tzliche Feld der Klasse Student mit entsprechenden Daten initialisiert Ein Objekt der Klasse Student kann wie gewohnt konstruiert werden class TestStudent public static void main String _ Student s new Student Martin M ller Hauptstra e 2 755423 80 5 6 4 1 Vererbung System out println s r Tt U N e r Listing 4 9 TestStudent java 4 1 4 Zuweisungskompatibilit t Objekte einer Klasse sind auch ebenso Objekte ihrer Oberklasse Daher k nnen sie benutzt werden wie die Objekte ihrer Oberklasse insbesondere bei einer Zuweisung Da in unserem Beispiel die Objekte der Klasse Student auch Objekte der Klasse Person sind d rfen diese auch Feldern des Typs Person zugewiesen werden class
149. lbe Adresse haben Mit unseren derzeitigen Mitteln l t sich dieses leider nicht ausdr cken Wir w rden gerne die equals Methode wie folgt berschreiben public boolean equals Object other return this name equals other name amp amp this adresse equals other adresse Dieses ist aber nicht m glich weil f r das Objekt other von dem wir nur wissen dass es vom Typ Object ist keine Felder name und adresse existieren Um dieses Problem zu umgehen sind Konstrukte notwendig die von allgemeineren Typen wieder zu spezielleren Typen f hren Ein solches Konstrukt lernen wir in den folgenden Abschnitten kennen Test auf Klasse mit instanceof Wie wir oben gesehen haben k nnen wir zu wenige Informationen ber den Typen eines Objektes haben Objekte wissen aber selbst von welcher Klasse sie einmal erzeugt wurden Java stellt einen bin ren Operator zur Verf gung der erlaubt abzufragen ob ein Objekt zu einer Klasse geh rt Dieser Operator hei t instanceof Er hat links ein Objekt und rechts einen Klassennamen Das Ergebnis ist ein bool scher Wert der genau dann wahr ist wenn das Objekt eine Instanz der Klasse ist class InstanceOfTest public static void main String str Person2 pl new Person2 Strindberg Skandinavien Person2 p2 new Student Ibsen Skandinavien 789565 87 oT PF U NB Kapitel 4 Weiterf hrende Konzepte der Objektorientierung if
150. le x 325e200 double y 325e 200 System out println x System out println y System out println x y System out println x 100000 Listing 3 2 DoubleTest java Wie man an der Ausgabe erkennen kann selbst die Addition der Zahl 100000 be wirkt keine Ver nderung auf einer gro en Flie kommazahl sep linux fh prog3 examples src gt java DoubleTest 3 25E202 3 25E 198 3 25E202 3 25E202 sep linux fh prog3 examples src gt 50 3 2 Ausdr cke Das folgende kleine Beispiel zeigt inwieweit und f r den Benutzer oft auf ber raschende Weise die Flie kommadarstellung zu Rundungen f hrt class Rounded public static void main String args System out println 8f System out println 88f System out println 8888f System out println 88888f System out println 888888f System out println 8888888 f System out println 88888888 f System out println 888888888f System out println 8888888888f System out println 88888888888 f System out println 888888888888 f System out println 8888888888888 f System out println 1f 1000000000000f 1000000000000 fF Listing 3 3 Rounded java Das Programm hat die folgende Ausgabe Insbesondere in der letzten Zeile fallt auf dass Addition und anschlie ende Subtraktion ein und derselben Zahl nicht die Identit t ist F r Flie kommazahlen gilt nicht x y y z sep
151. leiner 1 ist Hier wird im Erfolgsfall die Zahl 1 ausgegeben Wenn beides nicht der Fall war wird die Zahl 0 ausgegeben Zugegebener Ma en ist dieser Ausdruck schon schwer zu lesen Wir werden sp ter bessere Konstrukte kennenlernen um verschiedene F lle zu unterscheiden 3 3 Anweisungen 3 3 1 Fallunterscheidungen Bedingungsabfrage mit if Ein h ufig ben tigtes Konstrukt ist dass ein Programm abh ngig von einer bool schen Bedingung sich verschieden verh lt Hierzu stellt Java die if Bedingung zur Verf gung Dem Schl sselwort if folgt in Klammern eine bool sche Bedingung anschlie end kommen in geschweiften Klammern die Befehle die auszuf hren sind wenn die Bedingung wahr ist Anschlie end kann optional das Schl sselwort else folgen mit den Befehlen die andernfalls auszuf hren sind class Firstlf static void firstIf boolean bedingung if bedingung System out println Bedingung ist wahr else System out println Bedingung ist falsch public static void main String args firstIf true false Listing 3 12 FirstIf java 57 Kapitel 3 Imperative und funktionale Konzepte Das if Konstrukt erlaubt es uns also Fallunterscheidungen zu treffen Wenn in den Alternativen nur ein Befehl steht so k nnen die geschweiften Klammern auch fortgelassen werden Unser Beispiel l t sich also auch schreiben als class FirstIf2 static void firstIf bool
152. len ihre Be wegung in x und y Richtung umgedreht werden Aufgabe 2 Schreiben Sie eine Klasse ScenePanel die eine Unterklasse von JPanel ist Die Klasse soll ein Objekt der Schnittstelle CollisionScene im Konstruk tor bergeben bekommen berschreiben Sie die folgenden Methoden von JPanel e public Dimension getPreferredSize es soll die Dimension aus Weite und H he des CollisionScene Objekts zur ck gegeben werden e protected void paintComponent Graphics g es soll erst paintComponentder Oberklasse und dann f r das CollisionScene Objekt die Methode paintAll aufgerufen werden Die Klasse soll ein Feld vom Typ javax swing Timer haben Dieses soll mit einem Timer Objekt initialisiert werden das 36 mal in der Sekunde ausl st Die dabei ausgef hrte Aktion soll f r das CollisionScene Objekt nacheinan der die Methoden move und collisions und schlie lich f r den JPanel die Methode repaint aufrufen Erstellen Sie ein Objekt von der Klasse starten Sie das Timer Objekt und lasse Sie es in einem JFrame anzeigen Aufgabe 3 Schreiben Sie schlie lich eine weitere Unterklasse von JPanel Die Klasse soll StartStopScenePanel hei en Auch hier wird im Konstruktor ein CollisionScene Objekt bergeben Die Klasse soll zwei GUI Komponenten enthalten e ein Knopfobjekt der Klasse JButton e ein Objekt Ihrer Klasse ScenePanel Durch Knopfdruck soll der Timer des ScenePanel Objekts gestartet oder wieder angehalten werden Erstellen
153. lic static void main String args System out println new MyPublicClass Listing 4 30 UsePublic java Der Versuch eine nicht ffentliche Klasse aus einem anderen Paket heraus zu be nutzen gibt hingegen einen Ubersetzungsfehler package name panitz p2 3 import name panitz pl class UseNonPublic public static void main String args System out println new MyNonPublicClass i Java gibt bei der bersetzung eine entsprechende gut verst ndliche Fehlermeldung sep swel0 gt javac d UseNonPublic java UseNonPublic java 7 name panitz p1 MyNonPublicClass is not public in name panitz pantitz pi cannot be accessed from outside package System out println new MyNonPublicClass UseNonPublic java 7 MyNonPublicClass is not public in name panitz p1 MyNonPublicClass cannot be accessed from outside package System out printin new MyNonPublicClass 2 errors sep swe10 gt 98 4 2 Pakete Damit stellt Java eine Technik zur Verf gung die es erlaubt bestimmte Klassen eines Softwarepaketes als rein interne Klassen zu schreiben die von au erhalb des Pakets nicht benutzt werden k nnen Sichtbarkeitsattribute f r Eigenschaften Java stellt in Punkto Sichtbarkeiten eine noch feinere Granularit t zur Verf gung Es k nnen nicht nur ganze Klassen als nicht ffentlich deklariert sondern f r einzelne Eigenschaften von Klassen unterschiedliche Sicht
154. linux fh prog3 examples src gt java Rounded 8 0 88 0 8888 0 88888 0 888888 0 8888888 0 8888888E7 888889E38 8888893E9 8888885E10 8888889E11 8888889E12 0 sep linux fh prog3 examples src gt OO m 00 00 3 2 Ausdr cke Wir haben jetzt gesehen was Java uns f r Typen zur Darstellung von Zahlen zur Verf gung stellt Jetzt wollen wir mit diesen Zahlen nach M glichkeit auch noch 51 Kapitel 3 Imperative und funktionale Konzepte rechnen k nnen Hierzu stellt Java eine feste Anzahl von Operatoren wie etc zur Verf gung Prinzipell gibt es in der Informatik f r Operatoren drei m gliche Schreibweisen e Pr fix Der Operator wird vor den Operanden geschrieben also z B 2 21 Im urspr nglichen Lisp gab es die Prefixnotation f r Operatoren e Postfix Der Operator folgt den Operanden also z B 21 2 Forth und Postscript sind Beispiele von Sprachen mit Postfixnotation e Infix Der Operator steht zwischen den Operanden Dieses ist die g ngige Schreibweise in der Mathematik und f r das Auge die gewohnteste Aus diesem Grunde bedient sich Java der Infixnotation 42 2 Aufgabe 1 Nehmen Sie die Klasse Datum aus dem letzten bungsblatt und erg nzen Sie diese um folgende Eigenschaften a Schreiben Sie eine Methode boolean isEarlierThan Datum that die testet ob das Datumsobjekt im Kalender vor einem anderen Datum liegt b Schreiben Sie eine Methode boolean i
155. lweise f r Sie ungewohnte Begriffe So gibt es die beiden Begriffe grot und r n die Farben bezeichnen Als grot werden alle Dinge bezeichnet die bis zum 1 6 2047 gr n sind und dann die Farbe nach rot wechseln Als r n werden alle Dinge bezeichnet die bis zum 1 6 2047 rot sind und dann die Farbe nach gr n wechseln Das erscheint Ihnen vollkommen unlogisch und irritierend und sie versuchen den Bewohnern des Landes zu erkl ren dass diese Begriffe bl dsinnig sind Die Bewohner kontern aber damit dass die Begriffe rot und gr n vollkommen willk rlich und unlogisch sind Dabei erkl ren Sie die Begriffe rot und gr n mit dem Begriffen grot und r n Wie sieht diese Begriffserkl rung aus Aufgabe 5 Es gibt ein Rechenverfahren f r die Multiplikation die sogenannte vedische Multiplikation die f r bestimmte Produkte besonders einfach ist Die Idee basiert auf der Tatsache dass wir mit Zehnerpotenzen besonders einfach rechnen k nnen Rechenverfahren werden in der Informatik als Algorithmus bezeichnet Vedische Multiplikation Zur Multiplikation zweier Zahlen ax b w hle eine Zehnerpotenz 10 so dass die Summe der Betr ge von a 10 und b 10 besonders klein ist Es sei a a 10 und b b 10 F r das Produkt rechne a b b x 10 x b Dieser Rechenweg wird besonders einfach wenn und b betragsm ig kleine Zahlen sind denn dann ist nur noch eine sehr simple Multiplikation durchzuf hren und
156. m Label aktualisiert wird package name panitz oose swing examples import javax swing import java util Date import java awt event Listing 5 34 Uhr java Die Klasse Uhr ist nicht nur ein JPanel in dem ein JLabel benutzt wird Datum und Uhrzeit anzuzeigen sondern implementiert gleichfalls auch einen ActionListener public class Uhr extends JPanel implements ActionListener Listing 5 35 Uhr java Zunachst sehen wir das Datumsfeld fiir diese Komponente vor JLabel 1 new JLabel new Date Listing 5 36 Uhr java Im Konstruktor erzeugen wir ein Objekt vom Typ Timer Dieses Objekt soll alle Sekunde alle 1000 Millisekunden ein Ereignis erzeugen Dem Timer wird das ger ade im Konstruktor erzeugte Objekt vom Typ Uhr tibergeben das da es ja einen ActionListener implementiert auf diese Ereignisse reagieren soll 131 Kapitel 5 Graphische Benutzeroberflachen mit Swing 10 add 1 11 sl public Uhr 9 new Timer 1000 this start Listing 5 37 Uhr java Um die Schnittstelle ActionListener korrekt zu implementieren muss die Methode actionPerformed implementiert werden In dieser setzen wir jeweils Datum und Uhrzeit mit dem aktuellen Wert neu ins Label 14 public void actionPerformed ActionEvent _ 13 1 setText new Date Listing 5 38 Uhr java Und nat rlich sehen wir zum Testen eine kleine Hauptmethode vor die
157. men zur Verf gung stehen Einsatz eines Debuggers Bei einem Programm ist immer damit zu rech nen dass es Fehler enth lt Diese Fehler werden im besten Fall von der Qual it tssicherung entdeckt im schlechteren Fall treten sie beim Kunden auf Um Fehler im Programmtext zu finden gibt es Werkzeuge die ein schrittweis es Ausf hren des Programms erm glichen debugger Dabei lassen sich die Werte die in bestimmten Speicherzellen stehen auslesen und auf diese Weise der Fehler finden Architektur Eine Software besteht aus vielen Einzelkomponenten die un terschiedliche Teilaufgaben bernehmen und im besten Falle f r verschiedene Softwareprojekte wiederverwendbar sind Die Aufteilung der Software in einzelnen Komponenten wird als Architektur bezeichnet Es gibt bestimmte Standardarchitekturmuster die bei hnlichen Aufgabenstellungen Anwen dung finden k nnen Elementare Programmiermuster werden im Modul Soft waretechnik vorgestellt Kommunikation Es gibt heute kaum noch Software die nicht auf irgendeine Art und Weise ber ein Netzwerk kommuniziert Insofern ist ein wichtiger As pekt der Softwareentwicklung wie diese Kommunikation gemacht wird Ins besondere auch wie eine sichere Kommunikation erreicht wird und wie sich die Software bei Ausfall der Kommunikationswege verhalten soll Die Grundlagen zur Datenkommunikation werden im Modul Rechnernetze und Telekommu nikation vermittelt Mit Anwendungen die stark auf dem Intern
158. mplementiert worden Eine weitere Methode zur Erzeugung von Reihungen ist noch nicht die einzelnen Elemente der Reihung anzugeben sondern nur die Anzahl der Elemente class SecondArray static int zahlenReihung new int 10 public static void main String args System out println zahlenReihung Listing 6 3 SecondArray java 6 1 3 Zugriff auf Elemente Die einzelnen Elemente einer Reihung k nnen ber einen Index angesprochen wer den Das erste Element einer Reihung hat den Index 0 das letzte Element den Index length 1 Als Syntax benutzt Java die auch aus anderen Programmiersprachen bekannte Schreibweise mit eckigen Klammern 144 r r 6 1 Reihungen Arrays String stra hallo welt String str stra 1 e Typischer Weise wird mit einer for Schleife ber den Index einer Reihung iteriert So l t sich z B eine Methode die eine Stringdarstellung f r Reihungen erzeugt wie folgt schreiben public class ArrayToString static public String arrayToString Object obja StringBuffer result new StringBuffer for int i 0 i lt obja length i i 1 if i gt 0 result append result append obja i toString result append return result toString Listing 6 4 ArrayToString java 6 1 4 Andern von Elementen Eine Reihung kann als ein Komplex von vielen einzelnen Feldern gese
159. n So m ssen lange Dateinamen nicht komplett eingetippt werden Umleiten der Ausgabe in eine Datei Wenn man einen Befehl startet der eine ausf hrliche Ausgabe auf der Kommandozeile macht dann kann man diese auf ein fache Weise von der Kommandozeile in eine Datei schreiben lassen Hierzu bedient man sich des Gr er Zeichens Nach dem Befehl wird das Gr er Zeichen und der Dateiname geschrieben Dieses bewirkt dass die Ausgabe des Befehls nicht mehr auf der Kommandozeile angezeigt wird sondern in die angegebene Datei geschrieben wird Zwei Programme verbinden Ein besonders eleganter Trick ist es die Ausgabe eines Befehls direkt wieder als Eingabe f r einen weiteren Befehl zu ben tzen Hierzu dient die sogenannte pipe die durch einen vertikalen Strich bezeichnet wird Ist das Arbeitsverzeichnis zum Beispiel ein Ordner in dem sehr viele Dateien liegen dann f hrt der Befehl Is 1 zu einer umfangreichen Ausgabe auf der Komman dozeile die schnell auf dem Bildschirm vorbei rauscht Jetzt kann man die Ausgabe 28 1 3 Arbeiten mit der Kommandozeile von 1s 1 direkt an das Programm less weiterleiten indem man die Ausgabe von ls dem Befehl less ber eine pipe direkt als Eingabe gibt Der gesamte Aufruf lautet dann 1s 1 less 1 3 3 Erste Java Programme auf der Kommandozeile In diesem Abschnitt soll gezeigt werden wie prinzipiell Programme auf der Kom mandozeile entwickelt werden Wir erinnern uns dass ein Programm zun chs
160. n auf Reihungen durchf hren und Reihungen haben ein Feld lengthvom Typ int das die feste L nge einer Reihung angibt class ObjectArray public static void main String args Object as args System out println String as length Listing 6 1 ObjectArray java In der deutschen Literatur findet man oft den Ausdruck Datenfeld f r Reihungen Wir haben uns gegen diesen Ausdruck entschieden um nicht mit Feldern einer Klasse durcheinander zu kommen 143 p r Kapitel 6 Weiterf hrende Konzepte 6 1 2 Erzeugen von Reihungen Es gibt zwei Verfahren um Reihungen zu erzeugen indem die Elemente der Rei hung aufgez hlt werden oder indem die L nge der Reihung angegeben wird Eine Mischform in der sowohl L nge als auch die einzelnen Elemente angegeben werden gibt es nicht Die einfachste Art um eine Reihung zu erzeugen ist die Elemente aufzuz hlen Hi erzu sind die Elemente in geschweiften Klammern mit Komma getrennt aufzuz hlen class FirstArray static String komponisten carcassi carulli giuliani molino monzino paganini sor public static void main String args System out println komponisten length System out println komponisten toString Listing 6 2 FirstArray java Wie man beim Starten dieser kleinen Klasse erkennen kann ist f r Reihungen keine eigene Methode toString in Java i
161. nd 101 ra or w Kapitel 4 Weiterf hrende Konzepte der Objektorientierung 4 3 Schnittstellen Interfaces und abstrakte Klassen Wir haben schon Situationen kennengelernt in denen wir eine Klasse geschrieben haben von der nie ein Objekt konstruiert werden sollte sondern f r die wir nur Unterklassen definiert und instanziiert haben Die Methoden in diesen Klassen hat ten eine m glichst einfache Implementierung sie sollten ja nie benutzt werden sondern die berschreibenden Methoden in den Unterklassen Ein Beispiel f r eine solche Klassen war die Klasse ButtonLogic mit der die Funktionalit t eines GUIs definiert wurde Java bietet ein weiteres Konzept an mit dem Methoden ohne eigentliche Implemen tierung deklariert werden k nnen die Schnittstellen 4 3 1 Schnittstellen Schnittstellendeklaration Eine Schnittstelle sieht einer Klasse sehr hnlich Die syntaktischen Unterschiede sind e statt des Schl sselworts class steht das Schl sselwort interface e die Methoden haben keine R mpfe sondern nur eine Signatur So l t sich f r unsere Klasse ButtonLogic eine entsprechende Schnittstelle schreiben package name panitz dialoguegui public interface DialogueLogic public String getDescription public String eval String input Listing 4 35 DialogueLogic java Schnittstellen sind ebenso wie Klassen mit dem Java bersetzer zu bersetzen F r Schnittstellen werden auch Klassendate
162. ndere dass jedes Objekt die Eigen schaften hat die in der Klasse Object definiert wurden Ein Blick in die Java API Documentation zeigt dass zu diesen Eigenschaften auch die Methode toString geh rt wie wir sie bereits einige mal geschrieben haben Jetzt erkennen wir dass wir diese Methode dann berschrieben haben Auch wenn wir f r eine selbstgeschriebene Klasse die Methode toString nicht definiert haben existiert eine solche Methode Allerdings ist deren Verhalten selten ein f r unsere Zwecke geeignetes Die Eigenschaften die alle Objekte haben weil sie in der Klasse Object definiert 3 Java kennt acht eingebaute primitive Typen f r Zahlen Wahrheitswerte und Buchstaben Diese sind zwar keine Objekte werden notfalls von Java aber in entsprechende Objektklassen au tomatisch konvertiert 86 m r 1 4 1 Vererbung sind sind u erst allgemein Sobald wir von einem Object nur noch wissen dass es vom Typ Object ist k nnen wir kaum noch spezifische Dinge mit ihm anfangen Die Methode equals Eine weitere Methode die in der Klasse Object definiert ist ist die Methode equals Sie hat folgende Signatur public boolean equals Object other Wenn man diese Methode berschreibt so kann definiert werden wann zwei Objekte einer Klasse als gleich angesehen werden sollen F r Personen w rden wir gerne definieren dass zwei Objekte dieser Klasse gleich sind wenn sie ein und denselben Namen und ein und diese
163. nem throw Befehl verl t Java die eigentliche Ausf hrungsreihenfolge des Programms und unterrichtet die virtuelle Maschine davon dass eine Ausnahme aufgetreten ist 168 or w N 6 4 Ausnahmen Z B k nnen wir f r die Fakult tsmethoden bei einem Aufruf mit einer negativen Zahl eine Ausnahme werfen 5 package name panitz exceptions public class FirstThrow public static int fakult t int n if n 0 return 1 if n lt 0 throw new RuntimeException return n fakultat n 1 public static void main String System out println fakultat 5 System out println fakultat System out println fakultat 4 args oF 3 is Listing 6 50 First Throw java Wenn wir dieses Programm starten dann sehen wir dass zun chst die Fakult t fiir die Zahl 5 korrekt berechnet und ausgegeben wird dann der Fehlerfall auftritt was dazu f hrt dass der Fehler auf der Kommandozeile ausgegeben wird und das Programm sofort beendet wird Die Berechnung der Fakult t von 4 wird nicht mehr durchgef hrt Es kommt zu folgender Ausgabe swel0 gt java name panitz exceptions FirstThrow 120 Exception in thread main java lang RuntimeException at name panitz exceptions FirstThrow fakult t FirstThrow java 6 at name panitz exceptions FirstThrow main FirstThrow java 12 swel0 gt Wie man sieht unterrichtet uns Java in der ersten Zeile davon dass eine Ausnahme des Typs RuntimeException gew
164. ng 6 29 TextLesen Nun k nnen wir nacheinander die Zeichen aus der Datei lesen Mindestens einmal m ssen wir lesen um zu schauen ob es berhaupt Zeichen in der Datei gibt Dann lesen wir so lange bis das Ergebnis des Lesens eine negative Zahl ist Hierzu bietet sich die do while Schleife an die mindestens einmal durchlaufen wird do i read read Listing 6 30 TextLesen Wenn wir ein Zeichen gelesen haben und dieses Zeichen eine Unicode Nummer ist k nnen wir diese Zahl als char Wert interpretieren if i gt 0 char c char i result result c while i gt 0 Listing 6 31 TextLesen Wenn wir mit dem Lesen der Datei fertig sind ist es sinnvoll f r das Reader Objekt die Methode close aufzurufen um dem Betriebssystem mitzuteilen dass wir diese Ressource nicht weiter verwenden wollen read close Listing 6 32 TextLesen Somit haben wir eine sehr simple Methode die den kompletten Inhalt einer Datei einliest return result Listing 6 33 TextLesen Ganz analog geht das Schreiben von Textdateien so dass sich mit beiden zusammen recht einfach ein kleines Programm zum Kopieren von Textdateien schreiben l sst 160 6 3 Ein und Ausgabe package name panitz oose io 2 import java io public class Copy public static void main String args throws Exception Reader in new FileReader args 0 Writer out new
165. nittstellen k nnen auch einander erweitern Dieses geschieht dadurch dass Schnittstellen auch eine extends Klausel haben Wir k nnen also auch eine Schnittstelle definieren die die beiden obigen Schnittstellen zusammenfa t package name panitz dialoguegui 3 import name panitz html public interface DialogueLogics extends ToHTMLString DialogueLogic Listing 4 39 DialogueLogics java Ebenso k nnen wir jetzt eine Klasse ableiten die diese Schnittstelle implementiert package name panitz dialoguegui 3 class UpperConversion extends ToUpper implements DialogueLogics Listing 4 40 UpperConversion java Benutzung von Schnittstellen Schnittstellen sind genauso Typen wie Klassen Wir kennen jetzt also drei Arten von Typen e primitive Typen e Klassen 104 4 3 Schnittstellen Interfaces und abstrakte Klassen e Schnittstellen Parameter k nnen vom Typ einer Schnittstellen sein ebenso wie Felder oder R ck gabetypen von Methoden Die Zuweisungkompatibilit t nutzt nicht nur die Un terklassenbeziehung sondern auch die Implementierungsbeziehung Ein Objekt der Klasse C darf einem Feld des Typs der Schnittstelle I zugewiesen werden wenn C die Schnittstelle I implementiert Im Folgenden eine kleine Gui Anwendung die wir im einzelnen noch nicht ver stehen m ssen Man beachte dass der Typ DialogueLogics an mehreren Stellen benutzt wird wie ein ganz normaler Klassentyp Nur
166. nkPad T430 rmdir neuesTestVerzeichnis panitz ThinkPad T430 21 Kapitel 1 Einf hrung in die Welt der Softwareentwicklung touch Neue Dateien Anlegen oder Dateien Aktualisieren Es lassen sich auch neue leere Dateien von der Kommandozeile anlegen Hierzu kann der Befehl touch benutzt werden Ihm gibt man an welche Datei neu angelegt werden soll panitz ThinkPad T430 neuesTestVerzeichnis ls 1 insgesamt 0 panitz ThinkPad T430 neuesTestVerzeichnis touch neueTestdatei panitz ThinkPad T430 neuesTestVerzeichnis ls 1 insgesamt 0 rw rw r 1 panitz panitz 0 Sep 19 10 33 neueTestdatei panitz ThinkPad T430 neuesTestVerzeichnis Sollte der Befehl f r eine Datei aufgerufen werden die bereits existiert so wird der Dateiinhalt nicht ver ndert aber das Datum der letzten nderung aktualisiert panitz ThinkPad T430 neuesTestVerzeichnis ls 1 insgesamt 0 rw rw r 1 panitz panitz 0 Sep 19 10 33 neueTestdatei panitz ThinkPad T430 neuesTestVerzeichnis touch neueTestdatei panitz ThinkPad T430 neuesTestVerzeichnis ls 1 insgesamt 0 rw rw r 1 panitz panitz 0 Sep 19 10 34 neueTestdatei panitz ThinkPad T430 neuesTestVerzeichnis cat more und less Dateiinhalte Anzeigen Auch der Inhalt einer Textdatei l sst sich auf der Kommandozeile anzeigen Hierzu kann der Befehl cat ben tzt werden cat steht dabei f r concatenate also zum Konkatenieren dem Aneinanderh ngen von Dateiinhalten Der Name kommt da
167. nkomponenten e Atomare Komponenten Leider spiegelt sich diese Unterscheidung nicht in der Ableitungshierarchie wider Alle Komponenten leiten schlie lich von der Klasse java awt Component ab Es gibt keine Schnittmengen die Beschreiben dass bestimmte Komponenten atomar oder top level sind Komponenten k nnen Unterkomponenten enthalten ein Fenster kann z B ver schiedene Kn pfe und Textfl chen als Unterkomponenten enthalten 110 a e O N e ae 5 1 Swings GUI Komponenten 5 1 1 Top Level Komponenten Eine top level Komponenten ist ein GUI Objekt das weitere graphische Objekte enthalten kann selbst aber kein graphisches Objekt hat in dem es enthalten ist Somit sind top level Komponenten in der Regel Fenster die weitere Komponenten als Fensterinhalt haben Swing top level Komponenten sind Fenster und Dialogfen ster Hierf r stellt Swing entsprechende Klassen zur Verf gung JFrame JDialog Eine weitere top level Komponente steht f r Applets zur Verf gung JApplet Graphische Komponenten haben Konstruktoren mit denen sie erzeugt werden Fiir die Klasse JFrame existiert ein parameterloser Konstruktor Das minimalste GUI Programm ist wahrscheinlich folgendes Programm das ein Fensterobjekt erzeugt und dieses sichtbar macht package name panitz oose swing example import javax swing class JF public static void main String _ new JFrame setVisible true Listing 5 1 JF java Dies
168. nsters ver ndert 5 2 3 Grid Layout Die Klasse GridLayout ordnet die Unterkomponenten tabellarisch an Jede Kom ponente wird dabei gleich gro ausgerichtet Die Gr e richtet sich also nach dem gr ten Element Folgende Klasse benutzt ein Grid Layout mit zwei Zeilen zu je drei Spalten 115 Kapitel 5 Graphische Benutzeroberflachen mit Swing xl lels la vier drei in langer Knopf Abbildung 5 2 Anordnung ber das Border Layout package name panitz gui layoutTest Y e import java awt import javax swing n e w 6 class GridLayoutTest extends JFrame 7 public GridLayoutTest 8 JPanel pane new JPanel 9 pane setLayout new GridLayout 2 3 10 pane add new JButton eins 11 pane add new JButton zwei 12 pane add new JButton drei ein langer Knopf 13 pane add new JButton vier 14 pane add new JButton f nf 15 add pane 16 pack 17 set Visible true 18 19 20 public static void main String _ new GridLayoutTest 21 Listing 5 7 GridLayoutTest java Folgendes Fensters wird durch dieses Programm ge ffnet EN ol a ee i a Abbildung 5 3 Anordnung im Grid Layout Auch hier ndert sich das Layout nicht wenn man mit der Maus die Gr e und das Format des Fensters ver ndert 116 5 3 Eigene GUI Komponenten 5 3 Eigene GUI Komponenten Bisher graphische Komponenten
169. nts mitgez hlt wird wie oft die Prozedur bereits rekursiv aufgerufen wurde class HalloZaehler static void halloZaehler int i System out println hallo i halloZaehler i 1 i public static void main String args halloZaehler 1 i Listing 3 27 HalloZaehler java Auch dieses Programm l uft endlos 68 3 4 Rekursion Wie auch bereits bei Schleifen k nnen wir ber eine Bedingung daf r sorgen dass der rekursive Aufruf nur unter bestimmten Umst nden ausgef hrt werden soll und damit daf r sorgen dass die Rekursion irgend einmal terminiert class Rek static void hallo System out println hallo static void nMalHallo int n if n gt 0 hallo nMalHallo n 1 public static void main String args nMalHallo 5 Listing 3 28 Rek java Nach soviel esoterisch anmutenden Ausfl gen in die Theorie wollen wir nun auch eine rekursive Funktion schreiben die etwas interessantes berechnet Hierzu schreiben wir einmal die Fakult tsfunktion die mathematisch definiert ist als 1 f rn lt 0 nx facn 1 firn gt 0 fan Diese Definition l sst sich direkt in ein Java Programm umsetzen class Factorial static long fac long n if n lt 0 return 1 return n fac n 1l public static void main String args System out println fac 5 System out println fac 10 System out println fac Fi
170. nwiederbringlich weg Sie sind nicht in einem Pa pierkorb zwischengelagert aus dem sie wieder reaktiviert werden k nnen Besonders gef hrlich kann es sein wenn dieser Befehl mit einer Dateiangabe aufgerufen wird die ber das Sternsymbol mehrere Dateien bezeichnet rm jpg gif png l scht zum Beispiel alle Bilddateien im Arbeitsverzeichnis rm l scht alle Dateien im Ar beitsverzeichnis Der Befehl kennt dann noch den Parameter r Er steht daf r dass im Falle eines Ordners zun chst alle Dateien und Unterordner dieses Ordners zu l schen sind und dann der Ordner selbst So l scht also rm r alle Dateien und alle Ordner komplett aus dem Arbeitsverzeichnis In Ihrem Heimatverzeichnis aufgerufen l schen Sie damit also alle Ihre Dateien Also Vorsicht mv Dateien Umbenennen und Verschieben Der Befehl mv steht memotechnisch f r move Er dient dazu eine Datei an einen anderen Ort also in einen anderen Ordner zu verschieben Er hat aber auch eine zweite verwandte Funktionalit t Er dient auch dazu eine Datei umzubenennen Mindestens zwei Parameter sind diesem Befehl anzugeben Die Datei die verschoben oder umbenannt werden soll und das Ziel wohin diese verschoben werden soll Ist das Ziel ein existierender Ordner im Dateisystem so wird die Datei dahin verschoben Ist es ein Dateiname eventuell einer noch nicht existierenden Datei dann wird die Datei umbenannt panitz ThinkPad T430 oose 1s testdatei txt panitz ThinkPad T4
171. ogrammierparadigma versucht sich m glichst weit von der Architektur des Computers zu l sen Ver nderbare Speicherzellen gibt es in rein funktionalen Sprachen nicht und erst recht keine Zuweisungsbefehle Skriptsprachen Javascript Perl AWK solche Sprachen sind dazu entworfen einfache kleine Programme schnell zu erzeugen Sie haben meist kein statisches Typsystem und nur eine begrenzte Zahl an Struk turierungsm glichkeiten oft aber eine m chtige Bibliothek um Zeichenketten zu manipulieren logisch Prolog aus der KI k nstlichen Intelligenz stammen logische Pro grammiersprachen Hier wird ein Programm als logische Formel f r die ein Beweis gesucht wird verstanden Eine weitere Unterscheidung von Programmiersprachen kann in der Art des Aus f hrungsmodells getroffen werden Der Programmierer schreibt den lesbaren Quell text seines Programms Um ein Programm auf einem Computer laufen zu lassen muss es erst in einen Programmcode bersetzt werden den der Computer versteht F r diesen Schritt gibt es auch unterschiedliche Modelle kompiliert C C Cobol Fortran in einem bersetzungsschritt wird aus dem Quelltext direkt das ausfiihrbare Programm erzeugt das dann unab hangig von irgendwelchen Hilfen der Programmiersprache ausgef hrt werden kann interpretiert Lisp Scheme Javascript der Programmtext wird nicht in eine ausf hrbare Datei bersetzt sondern durch einen Interpreter St ck f r St ck anhand des
172. oren e Was ist das this Objekt Damit wird das Objekt bezeichnet in dem sich eine Eigenschaft befindet 173 Kapitel 7 Zusammenfassung und Ausblick 174 Was bedeutet der this Bezeichner wenn ihm Parameter in Klam mern folgen Dann bedeutet es den Aufruf eines weiteren Konstruktors aus derselben Klasse Hierzu mtissen Konstruktoren tiberladen sein Dieser Aufruf kann nur als erster Befehl in einem Konstruktor stehen Was ist Vererbung Jede Klasse hat genau eine Oberklasse die in der extends Klausel angegeben wird Objekte k nnen alle Eigenschaften die in ihrer Oberklasse zur Verf gung stehen benutzen Was ist wenn ich keine Oberklasse angebe Dann ist automatisch die Klasse Object die Oberklasse Was sind Konstruktoren Konstruktoren sind der Code einer Klasse der beim Erzeugen von neuen Objekten ausgef hrt wird und in der Regel die Felder des Objektes initialisiert Konstruktoren wir mit dem new Befehl beim Erzeugen von Objekten aufgerufen Wie werden Konstruktoren definiert hnlich wie Methoden Sie haben den Namen der Klasse und keinen R ckgabetyp Wie werden Konstuktoren aufgerufen Durch das Schl sselwort new gefolgt von dem Klassennamen Hat jede Klasse einen Konstruktor Ja Und wenn ich keinen Konstruktor f r meine Klasse schreibe Dann f gt Java einen leeren Konstruktor ohne Parameter ein Was ist der Unterschied zwischen statischen und nicht statis chen Eigenschaften einer Klasse Eine statische E
173. orfen wurde In der zweiten Zeile erfahren wir dass dieses bei der Ausf hrung der Methode fakult t in Zeile 6 der Klasse FirstThrow geschehen ist Anschlie end in den Zeilen weiter unten gibt Java jeweils an in welcher Methode der Aufruf der in der dr ber liegenden Methode stattfand Die Ausgabe gibt also an durch welchen verschachtelten Methodenaufruf es an die Stelle kam in der die Ausnahme geworfen wurde Diese Aufrufstruktur wird als Aufrufkeller stack trace bezeichnet Das Erzeugen eines Ausnahmeobjekts allein bedeutet noch keinen Fehlerfall Wenn wir das obige Programm minimal ndern so dass wir das Schl sselwort throw we glassen so wird der Sonderfall f r negative Eingaben nicht gesondert behandelt 169 Kapitel 6 Weiterf hrende Konzepte package name panitz exceptions public class NonThrow public static int fakult t int n if n 0 return 1 if n lt 0 new RuntimeException 7 return n fakultat n 1 Or e w bo r args r s 10 public static void main String 11 System out println fakultat 5 12 System out println fakultat 3 13 System out println fakultat 4 14 Listing 6 51 NonThrow java Wenn wir dieses Programm starten so wird es nicht terminieren und je nach be nutzter Javamaschine schlie lich abbrechen swel0 gt java name panitz exceptions NonThrow 120 An irrecoverable stack overflow has occurred Es reicht also nich
174. orname Stra e und Ort sowie Postleitzahl Das sollten die Eigenschaften einer Person sein die f r ein Bibliothek sprogramm notwendig sind Andere m gliche Eigenschaften wie Geschlecht Alter Beruf oder hnliches interessieren uns in diesem Kontext nicht Jetzt schreiben wir die Eigenschaften die uns von einer Person interessieren auf die Karteikarte mit der berschrift Person Schlie lich m ssen wir uns Gedanken dar ber machen was diese Eigenschaften eigentlich f r Daten sind Name Vorname Stra e und Wohnort sind sicherlich als Texte abzuspeichern oder wie der Informatiker gerne sagt als Zeichenketten Die Postleitzahl ist hingegen als eine Zahl abzuspeichern Diese Art von der die einzel nen Eigenschaften sind nennen wir ihren Typ Wir schreiben auf die Karteikarte f r die Objektart Person hinter jede der Eigenschaften noch den Typ den diese Eigenschaft hat Damit erhalten wir f r die Objektart Person die in Abbildung 2 1 gezeigte Karteikarte Abbildung 2 1 Modellierung einer Person Gleiches k nnen wir f r die Objektart Buch und f r die Objektart Datum machen Wir erhalten dann die Karteikarten aus Abbildung und 2 3 36 2 2 Klassen und Objekte Abbildung 2 2 Modellierung eines Buches Wir m ssen uns schlie lich nur noch um die Objektart einer Buchausleihe k mmern Hier sind drei Eigenschaften interessant wer hat das Buch geliehen welches Buch wurde verliehen und wann muss es zur ckgegeben w
175. pfelmaennchen java Das Programm ergibt das Bild aus Abbildung 5 4 122 5 4 Reaktion auf Ereignisse Abbildung 5 4 Das ber hmte Apfelm nnchen 5 4 Reaktion auf Ereignisse Um den graphischen Komponenten eine Funktionalit t hinzuzuf gen kennt Java das Konzept der Ereignisbehandlung Graphische Objekte sollen in der Regel auf bestimmte Ereignisse auf eine definierte Weise reagieren Solche Ereignisse k nne Mausbewegungen Mausklicks Ereignisse an einem Fenster wie das Schlie en des Fensters oder etwa Eingaben auf der Tastatur sein F r die verschiedenen Arten von Ereignissen sind im Paket java awt event Schnittstellen definiert In diesen 123 r ao Ae w w Kapitel 5 Graphische Benutzeroberfl chen mit Swing Schnittstellen stehen Methoden in denen die Reaktion auf bestimmte Ereignisse definiert werden kann So gibt es z B eine Schnittstelle Mouselistener in der Methoden f r verschiedene Ereignisse auf den Mauskn pfen bereitstehen Soll einer bestimmten graphischen Komponente eine bestimmte Reaktion auf bes timmte Ereignisse zugef gt werden so ist die entsprechende Schnittstelle mit Meth oden f r das anvisierte Ereignis ausgeguckt und implementiert werden Ein Ob jekt dieser Implementierung kann dann der graphischen Komponente mit einer entsprechenden Methode hinzugef gt werden 5 4 1 Der ActionListener Das allgemeinste Freignis ist ein ActionEvent Die entsprechende Schnittstelle Ac
176. phics Objekts durch berech nen welche komplexe Zahl an dieser Stelle steht und benutzen dann die Methode checkC um zu berechnen ob und nach wieviel Iterationen die Norm von z gr er als der Schwellwert wird Abh ngig von dieser Zahl f rben wir den Punkt mit einer Farbe ein 121 Kapitel 5 Graphische Benutzeroberflachen mit Swing public void paint Graphics g for int y 0 y lt height y y 1 for int x 0 x lt width x x 1 final Complex current new Complex startX x zelle startY y zelle final int iterationenC checkC current paintColorPoint x y iterationenC g Listing 5 22 Apfelmaennchen java Zur Auswahl der Farbe benutzen wir folgende kleine Methode die Abh ngig von ihrem Parameter it an der Stelle x y einen Punkt in einer bestimmten Farbe zeichnet private void paintColorPoint int x int y int it Graphics g final Color col it recDepth colAppleman new Color 255 5 it 1 255 it 5 30 255 it 5 50 g setColor col g drawLine x y x y Listing 5 23 Apfelmaennchen java Schlie lich k nnen wir noch die Gr e festlegen und das Ganze in einer Hauptmeth ode starten public Dimension getPreferredSize return new Dimension width heigh It t public static void main String args JFrame f new JFrame f getContentPane add new Apfelmaennchen f pack f set Visible true Listing 5 24 A
177. pl instanceof Student System out println pl ist ein Student if p2 instanceof Student System out println p2 ist einStudent if pl instanceof Person2 System out println pl ist eine Person if p2 instanceof Person2 System out println p2 ist eine Person Listing 4 17 InstanceOfTest java An der Ausgabe dieses Programms kann man erkennen dass ein instanceof Ausdruck wahr wird wenn das Objekt ein Objekt der Klasse oder aber einer Un terklasse der Klasse des zweiten Operanden ist sep swe10 fh gt java Instance0fTest p2 ist einStudent pi ist eine Person p2 ist eine Person Die Typzusicherung Im letzten Abschnitt haben wir eine M glichkeit kennengelernt zu fragen ob ein Objekt zu einer bestimmten Klasse geh rt Um ein Objekt dann auch wieder so be nutzen zu k nnen dass es zu dieser Klasse geh rt m ssen wir diesem Objekt diesen Typ erst wieder zusichern Im obigen Beispiel haben wir zwar erfragen k nnen dass das in Feld p2 gespeicherte Objekt nicht nur eine Person sondern ein Student ist trotzdem k nnen wir noch nicht p2 nach seiner Matrikelnummer fragen Hierzu m ssen wir erst zusichern dass das Objekt den Typ Student hat Eine Typzusicherung in Java wird gemacht indem dem entsprechenden Objekt in Klammer der Typ vorangestellt wird den wir ihm zusichern wollen class CastTest public static void main String str Person2 p new Student Ibsen
178. ptions include g Generate all debugging info 30 1 3 Arbeiten mit der Kommandozeile g none Generate no debugging info g lines vars source Generate only some debugging info nowarn Generate no warnings verbose Output messages about what the compiler is doing deprecation Output source locations where deprecated APIs are used classpath lt path gt Specify where to find user class files and annotation processors cp lt path gt Specify where to find user class files and annotation processors sourcepath lt path gt Specify where to find input source files bootclasspath lt path gt Override location of bootstrap class files extdirs lt dirs gt Override location of installed extensions endorseddirs lt dirs gt Override location of endorsed standards path proc none only Control whether annotation processing and or compilation is done processor lt class1 gt lt class2 gt lt class3 gt Names of the annotation processors to run bypasses defaul processorpath lt path gt Specify where to find annotation processors d lt directory gt Specify where to place generated class files s lt directory gt Specify where to place generated source files implicit none class Specify whether or not to generate class files for implicitly referenced fil encoding lt encoding gt Specify character encoding used by source files source lt release gt Provide source compatibility with specified release target lt releas
179. r Er wird auch als Arbeitsverzeichnis bezeichnet ls Dateien Auflisten Der erste Befehl den wir vorstellen dient dazu die Dateien des Arbeitsverzeichnisses aufzulisten Er besteht nur aus zwei Buchstaben 1s 1s wird als list gesprochen 17 Kapitel 1 Einf hrung in die Welt der Softwareentwicklung Geben wir den Befehl in der Kommandozeile aus so bekommen wir eine Auflistung aller Dateien des Arbeitsverzeichnisses panitz ThinkPad T430 oose 1s panitz ThinkPad T430 oose In diesem Fall war die Auflistung etwas entt uschend denn es befindet sich keine Datei im Arbeitsverzeichnis Wird der Befehl in einem anderen Arbeitsverzeichnis aufgerufen in dem sich Dateien befinden so werden diese tats chlich aufgelistet panitz ThinkPad T430 fh oose v250107 1s build build properties build xml docs web build properties build xml dist src panitz ThinkPad T430 fh oose v250107 Es werden in diesem Fall 9 Dateien aufgelistet Wenn wir mehr Informationen tiber diese Dateien erhalten wollen so k nnen wir dem Befehl 1s einen zus tzlichen Be fehlsparameter mitgeben Solche beginnen in der Regel mit einem Minuszeichen 1s kennt den Parameter 1 der f r long steht und eine ausf hrliche Auflistung der Dateien bewirkt panitz ThinkPad T430 fh oose v250107 1s 1 insgesamt 60 drwxr xr x 3 panitz panitz 4096 Okt 2010 build rw r r 1 panitz panitz 253 Okt 2010 build properties rw r r 1 panitz panitz 246 Okt 2010
180. r abstrakte Klassen sind die Grundlagen der strombasierten Ein Ausgabe in Java Die Klassen Reader und Writer zum Lesen bzw Schreiben von Textdaten und die Klassen InputStreamReader und OutputStreamReader zum Lesen und Schreiben von Bin rdaten Folgende kleine Tabelle stellt dieses noch einmal dar Eingabe Ausgabe bin r InputStream OutputStream Texte Reader Writer Alle vier Klassen haben entsprechend ihrer Funktion Methoden read und write die sich auf die enstprechenden Daten beziehen sprich ob byte Werte gelesen und geschrieben werden oder char Werte Aufgabe 1 Schreiben Sie eine mehrfach berladene statische Methode die es er laubt einer Liste aller Dateien Unterdateien und Ordner sowie wiederum deren Unterdateien und Unterordmer ausgehend von einem Startverzeichnis in einer Liste zu sammeln Wird kein Startverzeichnis angegeben so ist das aktuelle Arbeitsverzeichnis als Ausgangspunkt zu verwenden Die Methoden sollen folgende Signaturen haben static public List lt File gt getFileList public static List lt File gt getFileList String fileName public static List lt File gt getFileList File startFile public static List lt File gt getFileList File startFile List lt File gt result Hinweis l sen sie diese Aufgabe rekursiv Alle Methode d rfen mit throws Exception markiert werden und somit beliebig Ausnahmen werden Aufgabe 2 Schreiben Sie folgende Methode static void convert String
181. r abstrakten Klassen erzeugen und wozu haben die dann Konstruktoren Indem Objekte einer nicht abstrak ten Unterklasse mit new erzeugt werden Im Konstruktor der Unterklasse wird ein Konstruktor der abstrakten Oberklasse aufgerufen Kann eine Klasse mehrere abstrakte Oberklassen haben Nein auch abstrakte Klassen sind Klassen und es gilt die Regel jede Klasse hat genau eine Oberklasse Kann ich in einer abstrakten Klasse abstrakte Methoden aufrufen Ja im Rumpf einer nicht abstrakten Methode k nnen bereits abstrakte Klassen aufgerufen werden 175 Kapitel 7 Zusammenfassung und Ausblick 176 Was sind Schnittstellen Man kann Schnittstellen als abstrakte Klassen ansehen in denen jeder Methode abstrakt ist Warum gibt es dann Schnittstellen Schnittstellen gelten nicht als Klassen Eine Klasse kann nur eine Oberklasse haben aber zus tzlich mehrere Schnittstellen implementieren Wie wird deklariert da eine Klasse eine Schnitstelle implemen tiert Durch die implements Klausel in der Klassendeklaration In ihr k nnen mehrere Komma getrennte Schnittstellen angegeben werden Kann eine Schnittstelle eine Oberklasse haben Nein Kann eine Schnittstelle weitere Oberschnittstellen haben Ja diese werden in der extends Klausel angegeben Muss eine Klasse die eine Schnittstelle implementiert alle Methoden der Schnittstelle implementieren Im Prinzip ja jedoch nicht wenn die Klasse selbst abstrakt ist Haben Schnittstell
182. r javac hat eine Option mit der gesteuert wird dass javac f r seine class Dateien die notwendige Ordnerstruktur erzeugt und die Klassen in die ihren Paketen entsprechenden Ordner schreibt Die Option hei t d Dem d ist nachgestellt von welchem Startordner aus die Paketordner erzeugt werden sollen Memotechnisch steht das d f r destination Wir k nnen die obige Klasse z B bersetzen mit folgendem Befehl auf der Kom mandozeile javac d Test java Damit wird ausgehend vom aktuellem Verzeichnis ein Ordner de mit Unterordner tfhberlin etc erzeugt 4 2 3 Starten von Klassen in Paketen Um Klassen vom Javainterpreter zu starten reicht es nicht ihren Namen anzugeben sondern der vollqualifizierte Name ist anzugeben Unsere obige kleine Testklasse wird also wie folgt gestartet sep swe10 gt java name panitz testPackages Test hello from package testpackages sep swe10 gt Jetzt erkennt man auch warum dem Javainterpreter nicht die Dateiendung class mit angegeben wird Der Punkt separiert Paket und Klassennamen Aufmerksame Leser werden bemerkt haben dass der Punkt in Java durchaus konsistent mit einer Bedeutung verwendet wird hierzu lese man ihn als enth lt ein Der Ausdruck name panitz testPackages Test main args liest sich so als das Paket de enthalt ein Unterpaket tfhberlin das ein Unterpaket panitz enthalt das ein Unterpaket testpackages enthalt das eine Klasse Test enth lt die eine Method
183. rRek java Codebl cke als Parameter in Java 8 Die rekursive Methode im obigen Abschnitt die eine for Schleife auf rekursive Weise simuliert ist nicht sehr allgemein Sie ist nur in der Lage f r eine bestimmte Anzahl den Befehl System out println hallo auszuf hren Mit der Version 1 8 von Java die f r das Jahr 2014 angek ndigt ist und derzeit als Prototyp existiert wird es m glich sein Code Fragmente als Parameter zu bergeben F r solche Code Fragmente wird dann ein Typ benutzt der Typ Runnable Wir k nnen dann die Methoden um einen weiteren Parameter erweitern Dieser ist dann vom typ Runnable class For8 static void forRek Runnable c forRek 1 c static void forRek int from Runnable c forRek from 10 c static void forRek int from int to Runnable c Listing 3 34 For8 java Statt nun im eigentlichen Rumpf der rekursiven Methode den Befehl System out println hallo auszuf hren wird nun f r das bergebene Objekt des Typs Runnable die Methode run aufgerufen if from lt to c run forRek from 1 to c 4 Listing 3 35 For8 java Dann wird es in Java 1 8 eine Syntax geben um Code Fragmente als Bl cke an Methoden als Parameter zu tibergeben Diese ist in diesem Fall gt gefolgt von einem in geschweiften Klammern eingeschlossenen Code Block Damit kann jetzt die rekursive Methode genutzt werden um verschiedene Befehle mehrfach auszuf hren 72 3 4
184. rammierung in Java sein Es gibt aber auch externe GUI Bibliotheken Hier ist insbesondere http www eclipse org swt http www eclipse org swt zu nennen Auch das google web toolkit das zur Entwicklung von Webapplikationen von der Fir ma Google zur Verf gung gestellt wird enth lt eine GUI Bibliothek Dort wird die entwickelte Benutzerschnittstelle so bersetzt dass sie in einem Browser l uft Wir werden uns in diesem Kapitel als Beispiel der Swing Bibliothek widmen Leider kommt man bei der Swing Programmierung nicht darum herum auch Klassen aus der AWT Bibliothek zu verwenden Die beiden Pakete berschneiden sich in der Funktionalit t e java awt Dieses ist das ltere Paket zur GUI Programmierung Es enth lt Klassen f r viele graphische Objekte z B eine Klasse Button und Unter pakete zur Programmierung der Funktionalit t der einzelnen Komponenten e javax swing Dieses neuere Paket ist noch universeller und platformunab h ngiger als das java awt Paket Auch hier finden sich Klassen f r unter schiedliche GUI Komponenten Sie entsprechen den Klassen aus dem Paket java awt Die Klassen haben oft den gleichen Klassennamen wie in java awt jedoch mit einem J vorangestellt So gib es z B eine Klasse JButton GUI ist die Abk rzung f r graphical user interface Entsprechend w re GRABO eine Abk rzung f r das deutsche graphische Benutzeroberfl che 109 Kapitel 5 Graphische Benutzeroberfl chen mit Swing
185. rden Betrachten wir dann allein die Schachtel von au en k nnen wir nicht mehr wis sen was f r ein Objekt darin enthalten ist Wenn wir viele Dinge in Schachteln packen dann schreiben wir auf die Schachtel jeweils drauf was in der entsprechen den Schachtel enthalten ist Ansonsten w rden wir schnell die bersicht verlieren Und genau das erm glichen generische Klassen Sobald wir ein konkretes Objekt der Klasse Box erzeugen wollen m ssen wir entscheiden f r welchen Inhalt wir eine Box brauchen Dieses geschieht indem in spitzen Klammern dem Klassennamen Box ein entsprechender Typ f r den Inhalt angeh ngt wird Wir erhalten dann z B den Typ Box lt String gt um Strings in der Schachtel zu speichern oder Box lt Integer gt um Integerobjekte darin zu speichern class UseBox public static void main String _ Box lt String gt bl new Box lt String gt hello String s bl contents System out println s toUpperCase System out println bl contents toUpperCase Box lt Integer gt b2 new Box lt Integer gt new Integer 42 System out println b2 contents intValue 148 ja 6 2 Generische Typen Listing 6 10 UseBox java Wie man im obigen Beispiel sieht fallen jetzt die dynamischen Typzusicherungen weg Die Variablen b1 und b2 sind jetzt nicht einfach vom Typ Box sondern vom Typ Box lt String gt respektive Box lt Integer gt Da wir mit generischen Typen keine Typzusi
186. return leftText rightText Listing 2 13 StringUtilMethod java Methoden und Parameternamen werden per Konvention immer klein geschrieben Zugriff auf Felder im Methodenrumpf In einer Methode stehen die Felder der Klasse zur Verf gung Wir k nnen mit den bisherigen Mitteln eine kleine Klasse definieren die es erlaubt Personen zu repr sentieren so dass die Objekte dieser Klasse eine Methode haben um den vollen Namen der Person anzugeben class PersonExamplel String vorname String nachname String getFullName return vorname nachname Listing 2 14 PersonExamplel java 2Das ist wiederum nicht die volle Wahrheit wie in K rze zu sehen sein wird 45 Kapitel 2 Grundkonzepte der Objektorientierung Methoden ohne Riickgabewert Es lassen sich auch Methoden schreiben die keinen eigentlichen Wert berechnen den sie als Ergebnis zur ckgeben Solche Methoden haben keinen R ckgabetyp In Java wird dieses gekennzeichnet indem das Schl sselwort void statt eines Typnamens in der Deklaration steht Solche Methoden haben keine return Anweisung Folgende kleine Beispielklasse enth lt zwei Methoden zum Setzen neuer Werte f r ihre Felder class PersonExample2 String vorname String nachname void setVorname String newName vorname newName void setNachname String newName nachname newName Listing 2 15 PersonExample2 java Obi
187. rintln Aufgabe 3 Erg nzen Sie die Klasse GeometricObject aus dem zweiten bungs blatt um folgende Methoden 74 a double size Es soll das Produkt aus H he und Weite errechnet werden b boolean isLargerThan GeometricObject that Soll ausdr cken dass die Gr e von this gr er ist als vom that Objekt c boolean isAbove GeometricObject that das Ergebnis soll wahr sein wenn das bergebene Objekt eine y Position hat die gr er ist als die Summe aus der y Position des this Objektes und dessen Hohe d boolean isUnderneath GeometricObject that das Ergebnis soll wahr sein wenn die Summer aus y Position und H he des bergebenen Objekt kleiner ist als die y Position des this Objektes e boolean isLeftOf GeometricObject that 3 4 Rekursion das Ergebnis soll wahr sein wenn das this Objekt auf der x Achse kom plett weiter links als das that Objekt liegt f boolean isRightOf GeometricObject that das Ergebnis soll wahr sein wenn das this Objekt auf der x Achse kom plett weiter rechts als das that Objekt liegt g boolean touches GeometricObject that Soll genau dann wahr sein wenn die beiden Objekte sich in irgendeiner Weise auf dem Koordinatensystem tiberschneiden Aufgabe 4 Erg nzen Sie die Klasse GeometricObject um ein weiteres Feld des Typs Vertex Dieses soll die Bewegung des Objektes darstellen a berladen Sie den Konstruktor der Klasse GeometricObject Wenn es nur einen Parame
188. rogrammiersprache Java dar 43 Kapitel 2 Grundkonzepte der Objektorientierung class SimpleStringTests public static void main String args String sl hallo String s2 welt int i 42 String s3 sl s2 42 System out println s2 System out println i 1 System out println i 1 Listing 2 12 SimpleStringTests java 2 2 4 Methoden Methoden sind die Programmteile die in einer Klasse definiert sind und f r jedes Objekt dieser Klasse zur Verf gung stehen Die Ausf hrung einer Methode liefert meist ein Ergebnisobjekt Methoden haben eine Liste von Eingabeparame tern Ein Eingabeparameter ist durch den gew nschten Klassennamen und einen frei w hlbaren Parameternamen spezifiziert Aufgabe 2 Implementieren Sie die Klassen Person Buch Datum und Ausleihe entsprechend der Modellierung in diesem Kapitel Versehen Sie die Klassen mit einem ad quaten Konstruktor und einer Methode toString Schreiben Sie eine Hauptmethode in der f r jede Klasse mindestens ein Objekt erzeugt wird Aufgabe 3 Schreiben Sie eine Klasse Vertex die Punkte in einem zweidimension alen Raum repr sentiert Es soll hierzu eine x und eine y Koordinate geben Diese haben als Typ eine Flie kommazahl des eingebauten Javatyps double a Versehen Sie die Klasse mit einem ad quaten Konstruktor und einer Methode toString b Schreiben Sie in der Klasse eine Methode void
189. rt sind da ohne Aktion 128 vr U N m 5 4 Reaktion auf Ereignisse auf die entsprechenden Ereignisse reagiert wird Diese prototypischen Implemen tierung sind Klassen deren Namen mit Adapter enden So gibt es zur Schnittstelle MouseListener die implementierende Klasse MouseAdapter Will man eine bes timmte Mausbehandlung programmieren reicht es aus diesen Adapter zu erweit ern und nur die Methoden zu tiberschreiben ftir die bestimmte Aktionen vorgesehen sind Es er brigt sich dann f r alle sechs Methoden der Schnittstelle MouseListener Implementierungen vorzusehen Wir erweitern die Klasse Apfelmaennchen um eine Mausbehandlung Der mit gedr ckter Maus markierte Bereich soll vergr ert in dem Fenster dargestellt wer den package name panitz crempel tool apfel import java awt Graphics import java awt event import javax swing JFrame public class ApfelWithMouse extends Apfelmaennchen public ApfelWithMouse Listing 5 30 ApfelWithMouse java Im Konstruktor fiigen wir der Komponente eine Mausbehandlung hinzu Der Maus behandler merkt sich die Koordinaten an denen die Maus gedriickt wird und berech net beim Loslassen des Mausknopfes den neuen darzustellenden Zahlenbereich addMouseListener new MouseAdapter int mouseStartX 0 int mouseStart Y 0 public void mousePressed MouseEvent e mouseStartX e getX mouseStart Y e getY public void mouseReleased MouseEvent e
190. rten Software gibt es auch Beschriftungen Hilfe texte etc auf chinesisch e Vorgehensmodell Wie schreibt man eine Software Einfach los tippen bis man fertig ist w re ein Vorgehensmodell Ein Vorgehensmodell legt fest in welchen Schritten mit welchen Zwischenergebnissen eine Software im Team erstellt wird Dabei kann das Team auch aus einer Person bestehen wie es in der Regel bei einer Bachelorarbeit der Fall ist Es wurden in der Infor matik eine Reihe unterschiedlicher Vorgehensmodelle entwickelt Auf theo retischer Ebene werden diese Ihnen im Modul Softwaretechnik vorgestellt Praktisch werden Sie sp testens im Wahlprojekt des f nften Semesters nach einem Vorgehensmodell arbeiten e Dokumentation Sch n w re es wenn der Quelltext einer Software selbsterk l rend w re Dieses ist leider selten der Fall auch wenn es auch eine Bestre bung in der Entwicklung neuer Programmiersprachen ist dass Programme 11 Kapitel 1 Einf hrung in die Welt der Softwareentwicklung 12 verst ndlicher und selbsterklarender sind Daher ist es unumg nglich dass zu einer Software eine Dokumentation existiert Wobei man drei Adressaten der Dokumentation identifizieren kann Endanwender fiir die Endanwender wird ein Benutzerhandbuch geschrieben Hier sind keinerlei Interna der Software beschrieben son dern lediglich die Funktionalitat der Benutzerschnittstelle Entwickler die Komponenten benutzen die meiste Software ist nic
191. s tzliche Dateien aufgelistet werden die jeweils mit einem Punkt im Namen beginnen a 1 zeigt dass zwei dieser versteckten Dateien Ordner sind Auf der urspr nglich aus DOS stammenden Kommandozeile der Microsoft Betrieb ssysteme hei t der analoge Befehl zum Auflisten der Dateien dir cd Wechseln des Arbeitsverzeichnisses Wir haben festgestellt dass sich alle Befehle der Kommandozeile auf das Ar beitsverzeichnis beziehen Da man nat rlich nicht immer mit den Dateien eines festen Arbeitsverzeichnisses arbeiten m chte gibt es einen Befehl zum Wechseln des Arbeitsverzeichnisses Dieses ist der Befehl cd der f r change directory steht Er bekommt als Argument den Ordner angegeben in den man wechseln m chte panitz ThinkPad T430 panitz ThinkPad T430 cd oose panitz ThinkPad T430 oose In diesen Beispiel wird in den Unterordner oose des aktuellen Arbeitsverzeichnisses gewechselt Anschlie end ist dieser das neue Arbeitsverzeichnis Im Prompt der Kommandozeile das ist die Meldung mit der eine Eingabe erwartet wird wird angezeigt welches das aktuelle Arbeitsverzeichnis ist Es ist nat rlich nicht nur m glich in einen bestimmten Unterordner zu wechseln sondern man kann auch weiter in den bergeordneten Ordner wechseln Dieser Ord ner hat einen reservierten Namen aus zwei Punkten panitz ThinkPad T430 oose cd panitz ThinkPad T430 Es gibt einen weiteren besonderen Ordner Dieses ist das Heimatverzeichni
192. s des Benutzers In diesem Heimatverzeichnis startet auch standardm ig die Komman dozeile Dieses ist das Startverzeichnis in dem der Benutzer seine eigenen Dateien speichert Es wird mit dem Tildesymbol bezeichnet 19 Kapitel 1 Einf hrung in die Welt der Softwareentwicklung panitz ThinkPad T430 oose cd panitz ThinkPad T430 In dieses Verzeichnis wechselt der Befehl cd auch wenn kein Ordner angegeben wird in dem gewechselt werden soll panitz ThinkPad T430 oose cd panitz ThinkPad T430 Es ist nicht nur m glich relativ vom aktuellen Arbeitsverzeichnis in ein Unter verzeichnis oder das Elternverzeichnis zu wechseln sondern man kann auch absolut von der Wurzel des Dateisystems aus einen Pfad in ein bestimmtes Verzeichnis angeben Dann ist vollkommen egal in welchen Arbeitsverzeichnis sich die Kom mandozeile bei Ausf hrung des Befehls befindet Ein absoluter Pfad beginnt mit einem Schr gstrich der die Wurzel des Gesamten Dateisystems bezeichnet Aus gehend von dieser kann nun eine Folge von Ordner die durch einen Schr gstrich getrennt werden panitz ThinkPad T430 cd home panitz fh oose v250107 panitz ThinkPad T430 fh oose v250107 Ein Pfad muss aber wiederum nicht absolut von der Wurzel des Dateisystems be ginnen sondern kann auch relativ vom Arbeitsverzeichnis beginnen Hierzu ist der erste Schragstrich wegzulassen panitz ThinkPad T430 fh oose v250107 cd pmt v270513 panitz
193. sLaterThan Datum that die testet ob das Datumsobjekt im Kalender nach einem anderen Datum liegt c Schreiben Sie eine Methode boolean sameDay Datum that die testet ob zwei Datumsobjekte den gleichen Tag bezeichnen d Schreiben Sie eine Methode boolean isLeapYear die testet ob das Datum in einem Schaltjahr liegt e Schreiben Sie eine Methode int getAbsoluteDaysInYear 52 3 2 Ausdrticke die zur ck gibt wie viel Tage das Jahr des Datums hat f Schreiben Sie eine Methode int getDaysInMonth die zur ck gibt wie viel Tage der Monat des Datums hat Aufgabe 2 Sie sollen in dieser Aufgabe berechnen was ftir einen Wochen tag ein bestimmtes Datum hat Erg nzen Sie die Klasse Datum um Methoden die helfen den Wochentag zu berechnen Ein Algo rithmus zur Wochentagsberechnung finden Sie z B auf Wikipedia http de wikipedia org wiki Wochentagsberechnung Gehen Sie schrittweise vor und schreiben Methoden zur Berechnung der Tagesziffer der Monatsziffer der Jahresziffer der Jahrhundertziffer und der Schaltjahrskorrektur wie in dem Algorithmus spezifiziert Dann k nnen Sie mit folgenden Methoden den Wochentag berechnen int wochentag return tagesziffer monatsziffer jahresziffer jahrhundertZiffer schaltjahrKorrektur h T String wochenTagAlsString int wtag wochentag switch wtag case 0 return Sonntag case 1 return Montag case 2 return Dienstag case
194. size i System out println xs get i toUpperCase 153 Kapitel 6 Weiterf hrende Konzepte m 46 Listing 6 23 OurList java 6 2 4 Standard Sammlungsklassen Java stellt im Paket java util Implementierungen von Sammlungsklassen zur Ver f gung Dabei handelt ich sich um Klassen f r Listen Mengen und Abbildungen Dieses sind Paradeanwendungen f r generische Typen denn es lassen sich ber den Typparameter angeben welchen Type die Elemente einer Sammlung im speziellen Fall haben Die Sammlungsklassen sind ber verschiedene Schnittstellen definiert Die Ober schnittstelle f r Sammlungsklassen ist java util Collection Ihre Hauptunter schnittstellen sind List und Set f r die Darstellung von Listen bzw Mengen Listen Javas Standardlisten sind durch die Schnittstelle jva util List definiert In dieser Schnittstelle finden sich eine Reihe von Methoden Zum einen Methoden um Eigenschaften eines Listenobjekts zu erfragen wie z B e get int index zum Erfragen eines Objektes an einem bestimmten Index der Liste e size um die L nge zu erfragen e contains Object o um zu testen ob ein bestimmtes Element in der Liste enthalten ist Desweiteren Methoden die den Inhalt eines Listenobjektes ver ndern wie z B e add zum Hinzuf gen von Elementen e clear zum L schen aller Elemente e remove zum L schen einzelner Elemente Die eigentlichen konkreten Klassen die L
195. st sehr viele Objekte einer Klasse zu erzeugen Somit k nnen wir jetzt ein zweites Buchobjekt erzeugen und diesem konkrete Werte f r die Felder zuweisen Buch b2 new Buch b2 titel Ger ttelt nicht gesch rt b2 autor Matthias Oheim Sven Eric Panitz b2 preisInCent 980 Listing 2 7 TestBuch java Die Objekte einer Klasse sind voneinander unabh ngig Beide Objekte haben ihre eigenen Werte Davon k nnen wir uns durch die Ausgabe der Titel beider Objekte berzeugen System out println bl titel System out println b2 titel Listing 2 8 TestBuch java Soweit unsere erste Klasse die mit Buchobjekten arbeitet Es fehlen noch die zwei schlie enden geschweiften Klammern Einmal um anzuzeigen dass die Hauptmeth ode beendet wird und einmal um das Ende des Klassendefinition anzuzeigen I Listing 2 9 TestBuch java Konstruktoren Wir haben oben gesehen wie prinzipiell Objekte einer Klasse mit dem new Konstrukt erzeugt werden In unserem obigen Beispiel w rden wir gerne bei der Erzeugung eines Objektes gleich konkrete Werte f r die Felder mit angeben um direkt eine Person mit konkreten Namen erzeugen zu k nnen Hierzu k nnen Kon struktoren f r eine Klasse definiert werden class Person String vorname String nachname Person String derVorname String derNachname 42 2 2 Klassen und Objekte der Vorname derNachname 6 vorname 7
196. ste Anweisung in den Kon struktor Sollte so ein parameterloser Konstruktor nicht existieren dann gibt es allerdings einen Folgefehler Was ist sp te Bindung late binding Beim Aufruf von Objektmethod en wird immer der Methodencode ausgef hrt der in der Klasse implementiert wurde von der das Objekt auf dem diese Methode aufgerufen wurde erzeugt wurde Es wird also immer die berschreibende Version einer Methode be nutzt Funktioniert sp te Bindung auch f r Felder Nein Funktioniert sp te Bindung auch f r statische Methoden Nein Funktioniert sp te Bindung auch f r Konstruktoren Nein Was sind berladene Methoden Methoden gleichen Namens in einer Klasse die sich in Typ Anzahl der Parameter unterscheiden K nnen auch Konstruktoren berladen werden Ja Gibt es das Prinzip von sp ter Bindung auch f r die verschiedenen berladenen Versionen einer Methode Nein Die Aufl sung welche der berladenen Versionen einer Methode ausgef hrt wird wird bereits statisch vom Compiler vorgenommen und nicht dynamisch w hrend der Laufzeit Was sind abstrakte Klassen Klassen die als abstract deklariert sind Nur abstrakte Klassen k nnen abstrakte Eigenschaften enthalten Und was sind abstrakte Eigenschaften Das sind Methoden die keinen Methodenrumpf haben K nnen abstrakte Klassen Konstruktoren haben Ja allerdings k nnen von abstrakten Klassen keine Objekte mit new erzeugt werden Wie kann ich dann Objekte eine
197. t Java eine kompilierte oder interpretierte Sprache Im Prinzip bei des Ein Compiler tibersetzt den Quelltext in class Dateien die Code fiir eine virtuelle Maschine enthalten Ein Interpreter ist in der Lage diesen Code auszuf hren e Wie ist ein Javaprogramm strukturiert Pro Datei eine Klasse oder Schnittstelle oder Aufz hlung die den Namen der Datei tr gt e Welche Namenskonventionen gibt es Klassennamen beginnen mit einem Gro buchstaben globale Konstanten sind komplett in Gro buchstaben geschrieben Pakete Parameter Variablen beginnen mit einem Kleinbuch staben Bei Bezeichnern aus mehreren W rter f ngt das n chste Wort immer mit einem Gro buchstaben an Ist Java statisch getypt Ja der Compiler berpr ft ob das Programm korrekt getypt ist e Gibt es auch dynamische Typ berpr fung zur Laufzeit Ja zum einem verifiziert die virtuelle Maschine noch einmal den Code zum anderen bewirkt eine Typzusicherung cast eine Laufzeittyp berpr fung e Kann ich sicherstellen da die Typzusicherung w hrend der Laufzeit nicht fehlschl gt Ja indem vor der Typzusicherung der Test mit instanceof gemacht wird e Wie schreibt man Unterprogramme oder Funktionen Immer inner halb einer Klasse Sie werden als Methoden bezeichnet e Was sind die Eigenschaften einer Klasse Zum einen die Felder auch als Attribute bezeichnet in denen Referenzen auf Objekte abgelegt werden k nnen Zum anderen die Methoden und Konstrukt
198. t aus ein Fehlerobjekt zu erzeugen sondern es muss dieses auch mit einem throw Befehl geworfen werden Geworfen werden k nnen alle Objekte einer Unterklasse von Throwable Versucht man hingegen andere Objekte zu wer fen so f hrt dies schon zu einem bersetzungsfehler Folgende Klasse package name panitz exceptions public class NotThrowable public static void main String args throw i am not throwable oJ 7 f hrt zu einem bersetzungsfehler swe10 gt javac d NotThrowable java NotThrowable java 5 incompatible types found java lang String 170 wn e gt N 9 10 6 4 Ausnahmen required java lang Throwable throw i am not throwable 1 error swel0 gt Ausnahmen k nnen nat rlich nicht nur auftreten wenn wir sie selbst explizit gewor fen haben sondern auch von Methoden aus Klassen die wir selbst benutzen gewor fen werden So kann z B die Benutzung der Methode charAt aus der Klasse String dazu f hren dass eine Ausnahme geworfen wird package name panitz exceptions public class ThrowIndex public static void main String args i am too short charAt 120 Listing 6 52 ThrowIndex java Starten wir dieses Programm so wird auch eine Ausnahme geworfen swel0 gt java name panitz exceptions ThrowIndex Exception in thread main java lang StringIndexOutOfBoundsException String index out of range 120 at java lang Str
199. t ein mal nichts weiter als ein Text ist Wir m ssen also einen Text schreiben Dieser Text ist dann von einem besonderen Programm in eine Maschinensprache zu bersetzen Ein solche Programm hei t Kompilator eng compiler Der Kompilator untersucht den Quelltext und bersetzt diesen sofern das m glich ist in eine oder mehrere bin re Dateien die Befehle f r eine Maschine codieren Schlie lich m ssen diese bin ren Dateien zur Ausf hrung auf einer Maschine gebracht werden Quelltext editieren Wir ben tigen ein Programm dass uns erlaubt eine Quelltextdatei zu erstellen Ein solches Programm nennt man einen Texteditor Dieser ist nicht zu verwechseln mit einem Textverarbeitungsprogramm in dem nicht nur Text sondern auch ein Layout mit Schriftarten Schriftgr en etc erstellt wird Es gibt tats chlich Programme die dieses alleine auf der Kommandozeile erlauben Der Standardeditor f r die Kom mandozeile hei t vi Es gibt sogar auch heute noch Leute die nur mit Hilfe des vi ihre Programme schreiben Aber ger chteweise sollen das nur noch fusselige b rtige nuschelnde selbstdrehende Systemadministratoren sein trotzdem sollt jeder Informatiker den rudiment ren Umgang mit dem Programm vi kennen denn irgendwann in seiner Laufbahn wird der Moment kommen an dem er schnell eine Konfigurationsdatei ndern muss aber nur einen Kommandozeilen zugang zu dem Rechner hat Das Programm vi kann gestartet werden mit dem Namen der Dat
200. t es eine ganze Reihe von bin ren Operatoren f r logische Ausdr cke F r zwei davon stellt Java auch Operatoren bereit amp amp f r das logische Und und f r das logische Oder V Zus tzlich kennt Java noch den un ren Operator der logischen Negation Er wird in Java mit bezeichnet Wie man im folgenden Test sehen kann gibt es auch unter den bool schen Op eratoren eine Bindungspr zedenz hnlich wie bei der Regel Punktrechnung vor Strichrechnung Der Operator amp amp bindet st rker als der Operator class TestboolOperator public static void main String args System out println true amp amp false System out println true false System out println true false System out println true true amp amp false Listing 3 8 TestboolOperator java 55 p p Kapitel 3 Imperative und funktionale Konzepte In der formalen Logik kennt man noch weitere Operatoren z B die Implikation Diese Operatoren lassen sich aber durch die in Java zur Verf gung stehenden Operatoren ausdr cken A B entspricht A V B Wir k nnen somit eine Methode schreiben die die logische Implikation testet class TestboolOperator2 static boolean implication boolean a boolean b return a b public static void main String args System out println implication true false Listing 3 9 TestboolOperator2 java 3 2 4 Der Bedingungsoperator
201. t verlangen d rfen nicht mit Objekten einer allgemeineren Klasse aufgerufen werden class StudentError2 static void printStudent Student s System out println s toString public static void main String args Person2 p new Person2 Martin M ller Hauptstra e printStudent p Auch hier f hrt die Kompilierung zu einer entsprechenden Fehlermeldung StudentError2 java 9 printStudent Student in StudentError2 cannot be applied to Person2 printStudent p 1 error 82 j r 4 1 Vererbung 4 1 5 Sp te Bindung late binding Wir haben gesehen dass wir Methoden berschreiben k nnen Interessant ist wann welche Methode ausgef hrt wird In unserem Beispiel gibt es je eine Methode toString in der Oberklasse Person als auch in der Unterklasse Student Welche dieser zwei Methoden wird wann ausgef hrt Wir k nnen dieser Frage ex perimentell nachgehen class TestLateBinding public static void main String args Student s new Student Martin M ller Hauptstra e 756456 Person2 pl new Person2 Harald Schmidt Marktplatz System out println s toString System out println pl toString Person2 p2 new Student Martin M ller Hauptstra e 756456 System out println p2 toString Listing 4 12 TestLateBinding java Dieses Programm erzeugt folgende Ausgabe sep swe10 f
202. t werden k nnen so dass genauso auf Windows mit bash gearbeitet werden kann wie auf Linux zum Beispiel mit www cygwin com http www cygwin com Der Vorteil des Umgangs mit der Kommandozeile ist vielf ltig Es lassen sich zum einen hier viele Aufgaben unabh ngig von anderen graphischen Programmen durch Eingabe weniger Befehle bewerkstelligen Der Zugang zum Betriebssystem ist direk ter Dinge die einem graphische Programme nicht zeigen sondern verstecken k n nen eingesehen werden Es lassen sich leicht Arbeitsschritte durch Skripte automa tisieren was bei graphischen Programmen so nicht m glich ist Und vor allem Din gen selbst wenn keine graphische Benutzeroberfl che mehr vorliegt lassen sich mit der Kommandozeile alle Funktionen des Systems kontrollieren Besonders schnell erkennt man den Nutzen der Kommandozeilen wenn man einen Server ber das Internet administrieren muss Ein Zugang zu einem Server steht ber eine Kom mandozeile immer zur Verf gung eine graphische Benutzeroberfl che jedoch so gut wie nie Also gibt es Gr nde genug den Umgang mit Kommandozeilenbefehlen einzu ben und diesen Umgang im Laufe des Studiums immer weiter zu verbessern Zum Gl ck ist es gar nicht so schwer und die wichtigsten Befehle sind schnell erlernt 1 3 1 Basisbefehle Wenn man die Kommandozeile ge ffnet hat befindet diese sich immer in einem Ordner des Dateisystems Alle Befehle die eingegeben werden beziehen sich auf diesem Ordne
203. tart t meh eh e 36 37 Listing 4 46 ShowMoveable java Hierzu m ssen Sie den Konstruktor aufrufen new ShowMoveable und fiir das so erzeugte Objekt die Methode show aufrufen Aufgabe 4 Schreiben Sie eine weitere Unterklasse von GeometricObject Diese soll einen Stern darstellen Ein Stern lasst sich durch folgende Eigenschaften beschreiben e einen inneren Radius f r die Einbuchtungen des Strahlen e einen u eren Radius f r die Spitzen der Strahlen e die Anzahl der Strahlen des Sterns Benutzen Sie beide der Implementierung der Methode paintMeTo die Meth ode fillPolygon des Graphics Objekts und die Klasse Polygon des Standard API 108 Kapitel 5 Graphische Benutzeroberflachen mit Swing Die meisten Programme auf heutigen Rechnersystemen haben eine graphische Be nutzeroberfl che GUI Java stellt Klassen zur Verf gung mit denen graphische Objekte erzeugt und in ihrem Verhalten instrumentalisiert werden k nnen Es gibt mehrere Bibliotheken in Java die Klassen bereit stellen um GUIs zu implementieren Ganz urspr nglich gab es in Java die AWT Bibliothek Deren Klassen liegen im Paket java awt Doch schon nach wenigen Jahren wurde eine neue Bibliothek entwickelt die sogenan nte Swing GUI Bibliothek Deren Klassen befinden sich im Paket javax swing Mittlerweile soll langfristig Swing nicht mehr weiter entwickelt werden sondern in Zukunft die Bibliothek Java FX der Standard zur GUI Prog
204. tem out println 22 case 12 System out printin 12 default System out println default Listing 3 15 Switch java Starten wir das Programm mit dem Wert 13 so dass der Ausdruck nach dem wir die Fallunterscheidung durchf hren zu 52 auswertet so bekommen wir folgende Ausgabe 59 Kapitel 3 Imperative und funktionale Konzepte sep swe10 fh internal beispiele gt java Switch 13 52 32 22 12 default sep swe10 fh internal beispiele gt Wie man sieht springt die switch Anweisung zum Fall f r den Wert 52 f hrt aber nicht nur dessen Anweisungen aus sondern alle folgenden Anweisungen Das oben beobachtete Verhalten ist verwirrend Zumeist will man in einer Fal lunterscheidung dass nur die entsprechenden Anweisung fiir den vorliegenden Fall ausgef hrt werden und nicht auch f r alle folgenden F lle Um dieses zu erreichen gibt es die break Anweisung wie wir sie auch schon von den Schleifenanweisun gen kennen Endet man jeden Fall mit der break Anweisung dann erh lz man das meistens erw nschte Verhalten Das obige Beispiel l t sich durch Hinzuf gen der break Anweisung so ndern dass immer nur ein Fall ausgef hrt wird class Switch2 public static void main String args switch 4 new Integer args O intValue case 42 System out println 42 break case 52 System out println 52 break case 32 System out println 32 break case 22 Sys
205. tem out println 22 break case 12 System out printlin 12 break default System out println default An der Ausgabe sehen wir dass zu einem Fall gesprungen wird und am Ende dieses Falls die Anweisung verlassen wird sep swe10 fh internal beispiele gt java Switch2 13 52 sep swe10 fh internal beispiele gt 60 r 3 3 Anweisungen 3 3 2 Iteration Schleifen mit while Vorgepr fte Schleifen Die vorgepr ften Schleifen haben folgendes Schema in Ja va while pred body pred ist hierbei ein Ausdruck der zu einem bool schen Wert auswertet body ist eine Folge von Befehlen Java arbeitet die vorgepr fte Schleife ab indem erst die Bedingung pred ausgewertet wird Ist das Ergebnis true dann wird der Rumpf body der Schleife durchlaufen Anschlie end wird wieder die Bedingung gepr ft Dieses wiederholt sich so lange bis die Bedingung zu false auswertet Ein einfaches Beispiel ist eine Schleife deren Bedingung nie zu false ausgewertet wird Eine solche Schleife wird unendlich oft durchlaufen class ForeverYoung public static void main String args while true System out printIn young Listing 3 16 Forever Young java Wir k nnen eine Variable einf hren die bei jedem Schleifendurchlauf um eins erh ht wird Somit z hlt die Variable wie oft die Schleife durchlaufen wird class CountForeverYoung public static void main String args int i 0
206. ter bzw vor dem Komma liegt 49 Kapitel 3 Imperative und funktionale Konzepte Aus Mantisse m Basis b und Exponent exp ergibt sich die dargestellte Zahl durch folgende Formel z m x bP Damit lassen sich mit Flie kommazahlen sehr gro e und sehr kleine Zahlen darstellen Je gr er jedoch die Zahlen werden desto weiter liegen sie von der n ch sten Zahl entfernt F r die Flie kommadarstellung gibt es in Java zwei Zahlentypen die nach der Spez ifikation des IEEE 754 1985 gebildet werden e float 32 Bit Flie kommazahl nach IEEE 754 Kleinste positive Zahl 271 Gr te positive Zahl 1 274 x 2128 double 64 Bit Flie kommazahl nach IEEE 754 Kleinste positive Zahl 2710 Gr te positive Zahl 1 2753 x 21024 Im Format f r double steht das erste Bit f r das Vorzeichen die n chsten 11 Bit markieren den Exponenten und die restlichen 52 Bit kodieren die Mantisse Im Format f r float steht das erste Bit f r das Vorzeichen die n chsten 8 Bit markieren den Exponenten und die restlichen 23 Bit kodieren die Mantisse Bestimmte Bitmuster charakterisieren einen Wert f r negative und positive unbeschr nkte Werte unendlich sowie Zahlen Bitmuster die charakterisieren dass es sich nicht mehr um eine Zahl handelt Der folgende Test zeigt dass bei einer Addition von zwei Flie kommazahlen die kleinere Zahl das Nachsehen hat class DoubleTest public static void main String args doub
207. ter des Typs Vertex hat soll dieses die Ecke des Objek tes werden Die Bewegung sei dann in beiden Dimensionen auf 0 gesetzt b Erg nzen Sie GeometricObject um eine Methode void move Wird sie aufgerufen soll die Ecke um den Vertex der die Bewegung ausdr ckt verschoben werden 75 Kapitel 3 Imperative und funktionale Konzepte 76 Kapitel 4 Weiterf hrende Konzepte der Objektorientierung 4 1 Vererbung Eines der grundlegendsten Ziele der objektorientierten Programmierung ist die M glichkeit bestehende Programme um neue Funktionalit t erweitern zu k nnen Hierzu bedient man sich der Vererbung Bei der Definition einer neuen Klassen hat man die M glichkeit anzugeben dass diese Klasse alle Eigenschaften von einer bestehenden Klasse erbt Wir haben in einer fr heren bungsaufgabe die Klasse Person geschrieben class Person2 String name String address Person2 String name String address this name name this address address public String toString return name address Listing 4 1 Person2 java Wenn wir zus tzlich eine Klasse schreiben wollen die nicht beliebige Personen spe ichern kann sondern Studenten die als zus tzliche Information noch eine Matrikel nummer haben so stellen wir fest dass wir wieder Felder f r den Namen und die Adresse anlegen m ssen d h wir m ssen die bereits in der Klasse Person zur Ver f gung gestellte Funktionalit t e
208. terschiedlichen Paketen zugeordnet sind 4 2 1 Paketdeklaration Zu Beginn einer Klassendefinition kann eine Paketzugeh rigkeit f r die Klasse definiert werden Dieses geschieht mit dem Schl sselwort package gefolgt von dem gew nschten Paket Die Paketdeklaration schlie t mit einem Semikolon Folgende Klasse definiert sie dem Paket testPackage zugeh rig 91 v e ps Kapitel 4 Weiterf hrende Konzepte der Objektorientierung package testPackage class MyClass Listing 4 20 MyClass java Unterpakete werden von Paketen mit Punkten abgetrennt Folgende Klasse wird dem Paket testPackages zugeordnet das ein Unterpaket des Pakets panitz ist welches wiederum ein Unterpaket des Pakets name ist package name panitz testPackages class TestPaket public static void main String args System out println hello from package testpackages Listing 4 21 TestPaket java Paketnamen werden per Konvention in lateinischer Schrift immer mit Kleinbuch staben als erstem Buchstaben geschrieben Wie man sieht kann man eine weltweite Eindeutigkeit seiner Paketnamen erreichen wenn man die eigene Webadresse hierzu benutzt Dabei wird die Webadresse r ck w rts verwendet Paketname und Klassenname zusammen identifizieren eine Klasse eindeutig Jeder Programmierer schreibt sicherlich eine Vielzahl von Klassen Test es gibt aber in der Regel nur einen Programmierer der diese f r das Pa
209. text zu ber setzen bricht er mit einer Fehlermeldung ab Dieses ist der Fall wenn in der Quell textdatei kein g ltiges Java Programm geschrieben ist In unseren Fall war aber der bersetzungsvorgang erfolgreich Programme ausf hren Schlie lich soll die bin re Datei mit den Maschinenbefehlen ausgef hrt werden Im Falle von Java handelt es sich dabei nicht um eine real als Hardware ex istierende Maschine sondern um eine gedachte eine sogenannte virtuelle Maschine Dieses wird durch ein Programm realisiert Daher braucht man zum Ausf hren von Javaprogrammen das Programm das die virtuelle Maschine realisiert Dieses Pro gramm hei t sinniger Weise java Auch in diesem Fall kann man sich durch den Befehl java auf der Kommandozeile davon berzeugen dass die virtuelle Maschine auf dem Rechner installiert ist Das Programm java wird auch als Javainterpreter bezeichnet Der Javainterpreter wird aufgerufen mit dem Namen der Klasse die ausgef hrt wer den soll Hierbei wird kein Dateiname angegeben auch keine Dateiendung sondern nur der Name der Klasse in unserem Fall FirstProgram Somit ist der Befehl zum Ausf hren der Klasse java FirstProgram Rufen wir dieses auf so stellen wir fest dass der Javainterpreter eine Fehlermeldung ausgibt panitz ThinkPad T430 oose java FirstProgram Fehler Hauptmethode in Klasse FirstProgram nicht gefunden Definieren Sie die Hauptmethode als public static void main String args pani
210. textArea 16 pack 17 19 public static void main String _ 20 JFrame f new Count 1 f set Visible true 3 Listing 5 26 Count Wir erhalten ein Fenster in dem die Anzahl der Mausklicks auf dem Knopf im Textfeld angezeigt wird 5 4 2 Innere und Anonyme Klassen Innere Klassen Eine innere Klasse wird geschrieben wie jede andere Klasse auch nur dass sie eben im Rumpf einer u eren Klasse auftauchen kann Die innere Klasse hat das Priv ileg auf die Eigenschaften der u eren Klasse zuzugreifen sogar auf die als privat markierten Eigenschaften Das Attribut privat soll lediglich verhindern dass eine Eigenschaft von au erhalb der Klasse benutzt wird Innere Klasse befinden sich aber innerhalb der Klasse Unser erstes GUI mit einer Funktionalit t l sst sich jetzt mit Hilfe einer inneren Klasse in einer Quelltext Datei schreiben Das Feld counter das wir in der vorheri gen Implementierung als privates Feld der Klass CounterListener definiert hat ten haben wir hier als Feld der GUI Klasse modelliert Trotzdem kann die Klasse CounterListener weiterhin darauf zugreifen Ebenso brauch die Textfl che nicht der Klasse CounterListener im Konstruktor bergeben werden Als innere Klasse kann in CounterListener auf dieses Feld der u eren Klasse zugegriffen werden lpackage name panitz simpleGui 2 import javax swing 3 import java awt event 4 125 20 Kapitel 5 Graphisch
211. tionListener enth lt nur eine Methode die auszuf hren ist wenn eine Aktion aufgetreten ist Dieses Ereignis wird von einem Knopf Objekt der Klasse JButton ausgel st wenn ein benutzer auf den Knopf mit der Maus klickt Wir implementieren die Schnittstelle ActionListener so dass in einem internen Z hler vermerkt wird wie oft ein Freignis aufgetreten ist Bei jedem Auftreten des Ereignisses wird die entsprechende Zahl auf einer Textfl che gesetzt import java awt event gt import javax swing text class CountActionListener implements ActionListener JTextComponent textArea int count CountActionListener JTextComponent textArea this textArea textArea public void actionPerformed ActionEvent e count count 1 textArea setText count Listing 5 25 CountActionListener In einer zweiten Klasse definieren wir eine Fensterkomponente mit zwei atomaren Komponenten einen Knopf und eine Textflache Dem Knopf f gen wir die oben geschriebene Ereignisbehandlung hinzu import java awt import javax swing import javax swing text 124 5 4 Reaktion auf Ereignisse 5 class Count extends JFrame 7 public Count 8 JTextComponent textArea new JTextField 8 9 JButton button new JButton click 10 JPanel pane new JPanel 11 pane add button 12 pane add textArea 14 add pane button addActionListener new CountActionListerner
212. tz ThinkPad T430 oose In diesem Falll ist die Meldung sogar auf Deutsch Sie besagt dass der Klasse etwas fehlt n mlich eine sogenannte Hauptmethode in der die Javabefehle stehen die ausgef hrt werden sollen Die Fehlermeldung gibt sogar an wie eine solche Hauptmethode auszusehen hat Schreiben wir jetzt einmal eine zweite Klasse die eine solche Hauptmethode beinhaltet class SecondProgram public static void main String args Listing 1 2 SecondProgram java bersetzen wir diese Klasse mit dem Kompilator und interpretieren sie mit dem Javainterpreter so gibt es keine Fehlermeldung mehr Allerdings passiert auch 32 ja 1 3 Arbeiten mit der Kommandozeile nichts weil der innerhalb der Hauptmethode keine Befehle stehen die ausgef hrt werden sollen panitz ThinkPad T430 oose javac SecondProgram java panitz ThinkPad T430 oose java SecondProgram panitz ThinkPad T430 oose Der erste und einfachste Befehl mit dem man ein Programm dazu bringen kann eine R ckmeldung an den Anwender zu geben ist die Ausgabe eines Textes auf der Kommandozeile In Java ist dieser Befehl System out print1n In die runden Klammern ist der text zu schreiben der ausgegeben werden soll Text wird dabei in Java in doppelten Anf hrungszeichen gesetzt Die folgende Javaklasse hat eine Hauptmethode innerhalb derer zweimal eine Zeile mit Text auf die Kommandozeile ausgegeben wird class ThirdPro
213. uchstaben inklusive deutscher Umlaute und dem 8 zuordnen F r ein chinesisches Dokument wird eine Codierung ben tigt die den 65536 mit zwei Byte darstellbaren Zahlen jeweils chinesische Ze ichen zuordnet Man sieht dass es Codierungen geben muss die f r ein Zeichen ein Byte im Speicher belegen und solche die zwei Byte im Speicher belegen Es gibt dar berhinaus auch eine Reihe Mischformen manche Zeichen werden durch ein Byte andere durch zwei oder sogar durch drei Byte dargestellt Die Klasse OutputStreamWriter sieht einen Konstruktor vor dem man zus tzlich zum OutputStream in den geschrieben werden soll als zweites Element auch die Codierung angeben kann in der die Buchstaben abgespeichert werden sollen Wenn diese Codierung nicht explizit angegeben wird so benutzt Java die standardm ig auf dem Betriebssystem benutzte Codierung In dieser Version der Kopierung einer Textdatei wird f r den Writer ein Objekt der Klasse OutputStreamWriter benutzt in der als Zeichenkodierung utf 16 benutzt wird import java nio charset Charset 162 6 3 Ein und Ausgabe import java io class EncodedCopy static public void main String args throws Exception Reader reader new FileReader args 0 Writer writer new OutputStream Writer new FileOutputStream args 1 Charset forName UTF 16 int c while c reader read 1 writer write c writer close List
214. wei Methoden zu implementieren die Methode eval und getDescription Im Gegensatz zur extends Klausel von Klassen k nnen in einer implements Klausel auch mehrere Schnittstellen angegeben werden die implementiert werden Definieren wir zum Beispiel ein zweite Schnittstelle package name panitz html public interface ToHTMLString public String toHTMLString Listing 4 37 TOHTMLString java Diese Schnittstelle verlangt dass implementierende Klassen eine Methode haben die f r das Objekt eine Darstellung als HTML erzeugen k nnen Jetzt k nnen wir eine Klasse schreiben die die beiden Schnittstellen implementiert package name panitz dialoguegui 3 import name panitz html 103 Kapitel 4 Weiterf hrende Konzepte der Objektorientierung public class ToUpper extends ToUpperCase implements ToHTMLString DialogueLogic public String toHTMLString return lt html gt lt head gt lt title gt get Description lt title gt lt head gt lt body gt lt b gt Small Gui application lt b gt for convertion of a lt b gt String lt b gt into lt em gt upper lt em gt case letters lt br gt lt br gt The result of your query was lt p gt lt span style font family monospace gt result lt span gt lt p gt lt body gt lt html gt Listing 4 38 ToUpper java Sch
215. werden Viele Programme haben selbst gar keine graphische Benutzerschnittstelle sondern sind zur Benutzung ber die Kom mandozeile vorgesehen oder werden von anderen Programmen aus gestartet In diesem Abschnitt sollen ein paar elementare Programme die sehr n tzlich sind kurz vorgestellt werden Sicheres Einloggen auf anderen Rechner mit ssh Das Programm ssh dient dazu um sich auf einem Rechner ber ein Netzwerk einzuloggen und quasi die dortige Kommandozeile zu ben tzen Dieses ist nat rlich besonders n tzlich wenn man einen Webserver warten m chte Hierzu ist Beim Aufruf von ssh der Rechnername des Rechners auf den man sich einloggen m chte als Argument anzugeben Wir haben bei uns im Studienbereich den Rechner mit der Adresse logini cs hs rm de auf dem sie sich mit ihrem Passwort einloggen k nnen Um anzugeben als welcher Benutzer Sie sich auf dem Rechner einloggen wollen k nnen Sie Ihren Benutzernamen mit dem Klammeraffensymbol getrennt dem Rechnernamen voranstellen panitz ThinkPad T430 oose ssh panitz login1 cs hs rm de panitz logini cs hs rm de s password The programs included with the Debian GNU Linux system are free software the exact distribution terms for each program are described in the individual files in usr share doc copyright 25 Kapitel 1 Einf hrung in die Welt der Softwareentwicklung Debian GNU Linux comes with ABSOLUTELY NO WARRANTY to the extent permitted by applicable law Last log
216. werden in Java auf sogenannten Datenstr men aus gef hrt Datenstr me verbinden das Programm mit einer externen Datenquelle bzw Senke Auf diesen Str men stehen Methoden zum Senden Schreiben von Dat en an die Senke bzw Empfangen Lesen von Daten aus der Quelle Typischer Weise wird ein Datenstrom angelegt ge ffnet dann werden darauf Daten gelesen und geschrieben und schlie lich der Strom wieder geschlossen Ein Datenstrom charakterisiert sich dadurch dass er streng sequentiell arbeit et Daten werden also auf Str men immer von vorne nach hinten gelesen und geschrieben Java unterscheidet zwei fundamentale unterschiedliche Arten von Datenstr men e Zeichenenstr me Die Grundeinheit der Datenkommunikation sind Buch staben und andere Schriftzeichen Hierbei kann es sich um beliebige Zeichen aus dem Unicode handeln also Buchstaben so gut wie jeder bekannten Schrift von lateinischer ber kyrillische griechische arabische chinesische bis hin zu exotischen Schriften wie der keltischen Keilschrift Dabei ist entscheidend in welcher Codierurung die Buchstaben in der Datenquelle vorliegen Die Codierung wird in der Regel beim Konstruieren eines Datenstroms festgelegt Geschieht dieses nicht so wird die Standardcodierung des Systems auf dem das Programm l uft benutzt Bytestr me Oktettstr me Hierbei ist die Grundeinheit immer ein Byte das als Zahl verstanden wird 157 Kapitel 6 Weiterf hrende Konzepte Vie
217. ypen zu benutzen Sie k nnen als Typ f r lokale Variablen oder Parameter genutzt werden class UseUniPair public static void main String _ UniPair lt String gt p new UniPair lt String gt welt hallo System out println p p swap System out println p Listing 6 14 UseUniPair java Wie man bei der Benutzung der uniformen Paare sieht gibt man jetzt nat rlich nur noch einen konkreten Typ f r die Typvariablen an Die Klasse UniPair hat ja nur eine Typvariable sep linux fh javal 5 examples classes gt java UseUniPair welt hallo hallo welt sep linux fh javal 5 examples classes gt Wir k nnen aber auch Unterklassen einer generischen Klasse bilden die nicht mehr generisch ist Dann leiten wir fiir eine ganz spezifische Instanz der Oberklasse ab So l t sich z B die Klasse Box zu einer Klasse erweitern in der nur noch Stringobjekte verpackt werden k nnen E class StringBox extends Box lt String gt StringBox String x super x Listing 6 15 StringBox java Diese Klasse kann nun vollkommen ohne spitze Klammern benutzt werden class UseStringBox public static void main String _ StringBox b new StringBox hallo System out println b contents length Listing 6 16 UseStringBox java 151 or i w Kapitel 6 Weiterf hrende Konzepte 6 2 3 Beispiel einer eigenen Listenklasse Die Paradeanwendung
218. z pl public class PrivateTest public static void main String args VisibilityOfFeatures v new VisibilityOfFeatures sl is private and cannot be accessed we are in a different class System out printin v sl System out println v s2 System out println v s3 System out println v s4 Listing 4 32 PrivateTest java Von einer Unterklasse k nnen unabh ngig von ihrem Paket die gesch tzten Eigen schaften benutzt werden Ist die Unterklasse in einem anderen Paket k nnen Eigen schaften mit der Sichtbarkeit package nicht mehr benutzt werden J package name panitz p2 import name panitz pl VisibilityOfFeatures public class PackageTest extends VisibilityOfFeatures public static void main String args PackageTest v new PackageTest sl is private and cannot be accessed System out println v s1l s2 is package visible and cannot be accessed we are in a different package System out println v s2 System out println v s3 System out println v s4 Listing 4 33 PackageTest java Von einer Klasse die weder im gleichen Paket noch eine Unterklasse ist k nnen nur noch ffentliche Eigenschaften benutzt werden 100 4 2 Pakete package name panitz p2 2 import name panitz pl VisibilityOfFeatures public class ProtectedTest public static void main String args VisibilityOfFeatures v new VisibilityOfFeatures
Download Pdf Manuals
Related Search
Related Contents
Cables Direct Mini Display Port - VGA m/f APC 5M/APC 5M-12 取扱説明書 HYTEC INTER Co., Ltd. 第 1 版 User ManUal - Pyramyd Air Copyright © All rights reserved.
Failed to retrieve file