Dienstag, 25. September 2012
Aufgabe Regex (POS1: 3BHIF)
Abgabename: 2012_3bhif_aufgabe2_Name_Vorname.tgz
Schreiben Sie eine Java-Klasse
Ihre Klasse darf im Prinzip einen beliebigen Namen haben, nur nicht
Die Idee der Methode
Beispiele für Muster und das Ergebnis:
Beispiele für Muster und die passenden Methoden:
Die Hervorhebung der passenden Zeichen ist optional. Die Hilfe sollte natürlich etwas ausführlicher sein und muss Ihren Namen enthalten.
ClassFinder
Erstellen Sie ein Projekt class_finder und erzeugen Sie ein Mercurial Repository dafür.Schreiben Sie eine Java-Klasse
MyClassFinder
, welche folgendes Interface implementiert (Header wurde weggelassen):
package classfinder; import java.io.FileNotFoundException; import java.io.IOException; import java.util.LinkedList; public interface ClassFinder { /** * finds Classes using the Pattern. * * The pattern could be a simple String, i.e. "MyList" which matches all * classnames (java-filenames) containing "MyList" (i.e. "ThatMyList", * "Mylist", "MylistMaker",...) ignoring case, or it is a pattern like "SCM" * (all capital letters) which means names like "SimulateComputerModel", * "SCM", "StrCatMaker" and so on. * * @param pattern * @return List of filenames * @throws FileNotFoundException * @throws IOException */ public LinkedList<String> findClassFiles(String pattern) throws FileNotFoundException, IOException; /** * finds files containing methods using the Pattern. * * The pattern could be a simple String, i.e. "doThis" which matches all * classnames (filenames) containing method declarations "doThis" ignoring * case, or it is a pattern like "scm" (ignore case) which means methods * like "searchClassMembers", "scM", "strCatMerger" and so on. So pattern * should be interpreted in both ways. * * @param pattern * @return List of filenames * @throws FileNotFoundException * @throws IOException */ public LinkedList<String> findMethodFiles(String pattern) throws FileNotFoundException, IOException; }
Ihre Klasse darf im Prinzip einen beliebigen Namen haben, nur nicht
classfinder.ClassFinder
, denn das ist der Name des Interfaces, welches implementiert werden muss (in einem anderen Paket, darf die Klasse natürlich gleich heißen).
Die Idee der Methode
findClassFiles(String pattern)
ist es, das Aktuelle Verzeichnis und die Unterverzeichnisse nach Klassen (Java-Dateien) zu durchsuchen, die dem gegebenen Muster entsprechen.
Beispiele für Muster und das Ergebnis:
- MyList
- liefert folgende Dateien:
MyList.java myList.java ThatMyList.java MylistMaker.java
- CF
- liefert folgende Dateien:
CF.java ClassFinder.java CharacterFixer.java CharFinderFactory.java
findMethodFiles(String pattern)
liefert die Klassennamen (ohne .java), welche die gesuchten Methodendeklarationen enthalten.
Eine Methode passt, wenn der Name einfach den String pattern (Groß-/Kleinschreibung ignorierend) enthält oder einfach nur die Buchstaben in der gegebenen Reihenfolge enthält. In diesem Fall muss der Methodenname mit dem ersten Buchstaben beginnen.
Beispiele für Muster und die passenden Methoden:
- doThis
- passt zu folgenden Methodennamen:
doThis dothis tryToDoThis doTaskHelpings
- ScM
- passt zu folgenden Methodennamen:
scm doScm searchClassMembers setCornerMarker
classfinder.MyClassFinder
).
Testen
Schreiben Sie eine (JUnit-) TestklasseClassFinderTest
, welche die Methoden ausreichend testet.
Main
Schreiben Sie eine HauptklasseFinder
, welche ein passendes Konsoleninterface zu ClassFinder
bietet:
hh@knuth:~$ java Finder -c MyList MyList.java myList.java ThatMyList.java maker/MylistMaker.java hh@knuth:~$ java Finder -m ScM MyClass helpers.Helper gui.Main gui.Frame hh@knuth:~$ java Finder -h Finder, a java-tool for finding classes and methods. (c) 2012, Harald R. Haberstroh hh@knuth:~$
Hinweise
- Verwenden Sie reguläre Ausdrücke zum Suchen (Java ist eine Insel: Reguläre Ausdrücke).
- Testen Sie mit geeigneten Unit-Tests (JUnit 4 Tutorial).
Labels: Aufgabe, Informatik, Java, POS1-3
Abonnieren Posts [Atom]
Kommentar veröffentlichen