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