Gruppenarbeit Klassenbibliotheken Der IQ einer Gruppe ist das Minimum der individuellen IQ der Gruppenmitglieder, geteilt durch die Anzahl der Gruppenmitglieder. 4.0 ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Was ist hier falsch? class NoteBook { private ArrayList<String> notes; Was ist hier falsch? class NoteBook { private ArrayList<String> notes; public NoteBook() { ArrayList<String> notes = new ArrayList<String>(); } public NoteBook() { notes = new ArrayList<String>(); } public vois addNote(String note) { notes.add(note); } public vois addNote(String note) { notes.add(note); } } } ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Letzte Woche: Random-Klasse • Die Bibliotheksklasse Random kann benutzt werden, um Zufallszahlen zu erzeugen import java.util.Random; ... Random randomGenerator = new Random(); ... int index1 = randomGenerator.nextInt(); int index2 = randomGenerator.nextInt(100); ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Letzte Woche: Zufällige Antworten public Responder() { randomGenerator = new Random(); responses = new ArrayList<String>(); fillResponses(); } public String generateResponse() { int index = randomGenerator.nextInt(responses.size()); return responses.get(index); } public void fillResponses() { ... } ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Inhalt • Mehr Bibliotheksklassen • Dokumentation schreiben Eingabe im Kundendienstsystem ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Mengen (Sets) benutzen import java.util.HashSet; Strings zerlegen public HashSet<String> getInput() { ... System.out.print("> "); HashSet<String> mySet = new HashSet<String>(); String inputLine = reader.nextLine().trim().toLowerCase(); mySet.add("one"); Vergleiche mit ArrayList code! mySet.add("two"); mySet.add("three"); String[] wordArray = inputLine.split(" "); HashSet<String> words = new HashSet<String>(); for(String element : mySet) { for(String word : wordArray) { do something with element words.add(word); } } return words; } ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Maps • Maps sind Sammlungen, die Paare von Objekten enthalten. • Paare bestehen aus einem Schlüssel (key) und einem Wert (value). • Zugriff erfolgt, indem man einen Schlüssel angibt, und einen Wert erhält. • Ein Beispiel: ein Telefonbuch. ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Maps benutzen • Ein Map-Objekt mit Strings als Schlüssel und Wert :HashMap "Peter Müller" "(030) 9392 4587" "Lisa Jones" "(047) 4536 4674" "Lola Schmidt" "(0421) 5488 0123" ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Maps benutzen HashMap <String, String> phoneBook = new HashMap<String, String>(); phoneBook.put("Peter Müller", "(030) 9392 4587"); phoneBook.put("Lisa Jones", "(047) 4536 4674"); phoneBook.put("Lola Schmidt", "(0421) 5488 0123"); String phoneNumber = phoneBook.get("Lisa Jones"); System.out.println(phoneNumber); Klassendokumentation schreiben • Ihre eigenen Klassen sollten so dokumentiert werden, wie es auch die Bibliotheksklassen sind.. • Andere Programmierer sollten Ihre Klasse benutzen können, ohne den Quelltext lesen zu müssen. • Machen Sie Ihre Klasse zu einer 'Bibliotheksklasse'! ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Elemente der Dokumentation Elemente der Dokumentation Die Dokumentation einer Klasse enthält: • den Klassennamen; • einen Kommentar, der den Zweck und die Eigenarten der Klasse beschreibt; • eine Versionsnummer • die Namen der Autoren • Dokumentation für jeden Konstruktor und jede Methode Die Dokumentation einer Methode/eines Konstruktors enthält: • den Namen der Methode; • den Ergebnistyp; • die Parameternamen und Typen; • eine Beschreibung des Zwecks und der Funktion der Methode; • eine Beschreibung jeden Parameters; • eine Beschreibung des Ergebniswertes. ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling javadoc Klassenkommentar: /** * The Responder class represents a response * generator object. It is used to generate an * automatic response. * * @author Michael Kölling and David J. Barnes * @version 1.0 (30.Mar.2010) */ ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling javadoc Methodenkommentar: /** * Read a line of text from standard input (the text * terminal), and return it as a set of words. * * @param prompt A prompt to print to screen. * @return A set of Strings, where each String is * one of the words typed by the user */ public HashSet<String> getInput(String prompt) { ... } ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Public / private • Öffentliche (public) Attribute (Felder, Konstruktoren, Methoden) sind für andere Klassen zugreifbar. • Felder sollten nicht öffentlich (public) sein. • Private Attribute sind nur in der eigenen Klasse zugreifbar. • Nur Methoden die für andere Klassen bestimmt sind sollten öffentlich (public) sein. ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Klassenvariablen Information hiding • Daten, die einem Objekt gehören, sind vor anderen Objekten versteckt. • Wissen was ein Objekt tun kann, nicht wie es dies tut. • Information hiding erhöht den Grad der Unabhängigkeit. • Unabhängigkeit der Module ist wichtig in großen Systemen, und für Softwarewartung. ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Konstanten private static final int GRAVITY = 3; •private: Sichtbarkeit, wie bekannt •static: Klassenvariable •final: Konstante ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Zusammenfassung • Java hat eine große Klassenbibliothek. • Eine gute Programmiererin muß sich damit auskennen. • Die Dokumentation zeigt uns, was wir wissen müssen, um die Klasse zu benutzen (Schnittstelle/Interface). • Die Implementierung is versteckt (Information hiding). • Wir dokumentieren unsere Klassen so, dass die Schnittstelle alleine gelesen werden kann (Klassenkommentar, Methodenkommentare). ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling