Thema der Woche: MVC/MVP

Lies die Einträge

und skizziere kurz die Unterschiede zwischen den beiden Gui-Pattern MVC und MVP.

Skizziert http://www.c-sharpcorner.com/UploadFile/OVZh/Introducing_MVCSharp_framework03062008064516AM/Images/Untitled-2.gif den Unterschied? Was hat das allen mit Testen zu tun?

Das MVP ist weiterhin gültig, aber der Name hat sich etwas verändert. Erkläre das am Beispiel des Diagramms http://geekswithblogs.net/dchristiansen/archive/2007/12/07/microsoft-patterns-and-practices-team-release-the-model-view-presenter.aspx.

Schreibe ein Beispielprogramm.

  • Eine Maske soll nach dem Benutzernamen und Passwort fragen.
  • Ein Fake-Login-Service soll eine bekanntes Username/Passwort-Pärchen authentifizieren. Sind die Werte korrekt, soll eine einfache Meldung erscheinen und der Dialog geschlossen werden.
  • Schreibe einen JUnit-Testfall

Thema der Woche: Ladebalken über dem Textfeld

Mit JXLayer (https://jxlayer.dev.java.net/) lassen sich beliebige Swing-Komponenten mit anderen Swing-Komponenten (oder Zeichnungen) auf eine Ebene legen und somit interessante Effekte und Lösungen entwerfen.

  1. Schreibe eine kleine Swing-Anwendung mit einem Textfeld und einer Schaltfläche. Wird die Schaltfläche gedrückt soll ein Web-Server kontaktiert und die Daten von dort geladen und in das Textfeld gesetzt werden.
  2. Das Laden soll künstlich verzögert werden. Schreibe einen eigenen ThrottleReader, der den FilterReader erweitert und deine künstliche Verzögerung einführt.
  3. Beim Laden soll nun ein (indefinite) Fortschrittsbalken mit JXLayer über dem Textfeld erscheinen, der dann ausgeblendet wird, wenn der Text geladen wurde.
  4. Überlege, wie sich der Fortschnitt des Fortschrittsbalken bestmöglich an der Anzahl geladenen Zeichen festmachen lässt.

Thema der Woche: Checked Exception vs. Unchecked Exception

Java unterscheidet Checked von Unchecked Excecption.

Thema der Woche: Programmieren mit einem bisschen Geo

Schreibe eine Klasse Location, die longitude und latitude speichert. Die Attribute sind vom Type double. Gib Setter/Getter an und einen Standard- und parametrisieren Konstruktor. Die Klasse Location soll die Abstands-Utility-Funktionen aus http://www.tutego.de/blog/javainsel/2009/09/latitudelongitude-distance-in-java/ bekommen.

Die Klasse Locations soll beliebig viele Location-Objekte speichern können. Dazu ist eine addLocation()-Methode nötig, die einen Ort als String mit einer Location annimmt und in eine intern Datenstruktur übernimmt. addLocation() soll überladen sein, dass man einmal den Ort über ein Location-Objekt bestimmt und einmal über Longitude und Latitude. Eine toString()-Methode soll angeben, wie viele Orte enthalten sind. Eine Methode Location findLocation(String location) soll die Location für einen Ort zurückgeben. Schreibe eine Methode List within(Location loc, double radius) Methode, die alle Orte liefert, die nicht weiter als radius von dem Ort entfernt sind. Nutzt die passende statische Funktionen aus Location für den Abstand! Nimm eine überladene Methode within() hinzu, die eine maximale Anzahl Elemente in der Rückgabeliste bestimmt.

Schreibe eine Klasse LocationApplication mit einem main(). Füge einige Location-Objekte ein und teste die Bereichsabfrage.

Eine Klasse LocationRepository soll zwei statische Methoden enthalten: Locations loadLocations() und void saveLocations(Locations locations). Die Methoden sollen Locations aus einer Text-Datei lesen und schreiben können. Nutze dazu beliebige Geokoordinaten. Das Dateiformat kann frei bestimmt werden.

Passe die Methode within() an, so dass die Liste sortiert ist nach dem Abstand zum Anfrageort. Schreibe dazu einen DistanceComparator und nutze die Collections.sort()-Methode.

Modelliere mit NetBeans eine grafische Oberfläche, mit zwei Reitern (JTabbedPane). In dem ersten Reiter soll man drei Textboxen haben für Ort, Longitude, Latitude und einen „Hinzufügen“ Button. Damit sollen neue Orte dem Locations hinzugefügt werden. Auf dem zweiten Reiter soll der Anwender Abfragen vornehmen können. Eine Eingabezeile für ein Ort (oder Longitude, Latitude) und Radius soll zu max. 10 Ergebnissen führen.

Installiere Google Earth. Bei einer Bereichsabfrage erzeugte eine KML-Datei mit allen Ergebnissen. Diese Datei soll beim Start von Google Eath als Startparameter mitgegeben werden. Externe Programme startet man mit dem ProcessBuilder. Die Insel gibt ein Beispiel für diese Klasse. Überlegen, wie am einfachsten und effektivsten XML geschrieben werden kann.

Thema der Woche: Repository-Pattern in DDD und DAO

Zur Abstraktion von Zugriffen auf konkreten Datastores (oft eine relationale Datenbank) haben sich DAOs (http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html) etabliert. Im Domain Driven Design (DDD) gibt es etwas, das so aussieht wie ein DAO, und zu großer Diskussion in der Community führt.

Lassen sich hier schon Unterschiede herausstellen?

Verfolge den “Streit” über den Unterschied zwischen Repos/DAO in den Blogs

Fragen:

  • Was sagt Eric Evans zu der Diskussion? Kann ein Repo als DAO implementiert sein?
  • Stehen Repo und DAO beide auf der Ebene vom Domain-Model?
  • Warum sagen Kritiker, dass Repos eine zusätzliche (unnötige) Zwischenschicht sind?
  • Einige EJB-Advocates injizieren gerne bei Java EE 5 Anwendungen den Entity-Manager in den DAO bzw. sehen den EM als DAO selbst, den man dann in Session-Beans injiziert. Ist das ein Design im Sinne von DDD?

Optional. Wie sieht Paginierung aus? http://tech.groups.yahoo.com/group/domaindrivendesign/message/5795

Thema der Woche: Stripes, ein einfaches Web Presentation Framework

Die Listen http://java-source.net/open-source/web-frameworks und http://de.wikipedia.org/wiki/Liste_von_Webframeworks geben eine fast unendliche Aufzählung von Web-Frameworks an. Selbst bin ich ein Freund (je nach Anwendungsfall) von GWT, JSF 2.0 und Stripes.

Stripes is a presentation framework for building web applications using the latest Java technologies. The main driver behind Stripes is that web application development in Java is just too much work! It seems like every existing framework requires gobs of configuration. Struts is pretty feature-light and has some serious architectural issues (see Stripes vs. Struts for details). Others, like WebWork 2 and Spring-MVC are much better, but still require a lot of configuration, and seem to require you to learn a whole new language just to get started.

Stripes fällt die Kategorie der Action-orientierten Frameworks, wie Struts oder Spring MVC. Ein Front-Controller nimmt den Request entgegen und delegiert auf eine ActionBean-Klasse, die den Seitenfluss auf eine andere Zielseite steuert.

Aufgaben:

Trivia: Frederic Daoud ist der Autor vom Standard-Stripes Buch “Stripes: …and Java Web Development Is Fun Again”. Frederic und seine Frau Nadia haben ein zweites Kind bekommen und es Ruby genannt.

Thema der Woche: Pull-Parser/StAX

Nicht immer können und müssen Objektgraphen von XML-Dateien – entweder pur als XML-DOM, oder gemappt über etwa JAXB – im Speicher gehalten werden. Muss nur einmal eine XML-Datei abgelaufen werden (natürlich können in diesem einen Durchlauf dann der XML-DOM aufgebaut werden), kann gut ein Pull-Parser eingesetzt werden.

Aufgabe: Implementiere einen XHTML-Prüfer, der meldet, ob im img-Tag das Attribut alt gesetzt ist.

Thema der Woche: Speicherverwaltung, Memory-Leaks

Lies das online-Kapitle http://java.sun.com/developer/Books/javaprogramming/bitterjava/bitterjavach06.pdf über Speicherprobleme.

Lies http://java.sun.com/javase/6/docs/api/java/lang/ref/package-summary.html und insbesondere http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html.

Aufgaben: Suche aus http://www.koders.com/default.aspx?s=phantomreference&btn=&la=Java&li=* ein Beispiel für PhantomReference. Dokumentiere, warum hier PhantomReference eingesetzt wird und keine andere Lösung exisitiert.

Was für Ergänzungen bieten die Google Collections mit den folgenden Klassen?

Implementiere ein Beispiel mit den Klassen, wobei eine OutOfMemoryError provoziert werden soll und dann gezeigt werden soll, dass die schwache Referenz gelöst wurde.

Thema der Woche: Micro-Benchmarks

Lies zunächst die folgenden Artikel

Versuche dann mit http://jetm.void.fm/index.html die Frage zu klären, wie groß der Unterschied ist, wenn man Threads für eine Aufgabe per Hand startet oder aus einem Thread-Pool holt.

Thema der Woche: Gof-Pattern-Wiederholung

Theoretische Aufgaben:

  • Nenne zwei Nachteile, die Vererbung gegenüber Assoziation hat.
  • Gibt es seit Java 5 eine Alternative zu Marker-Interfaces? Wie sieht diese aus? Nenne Beispiele.

Praktische Aufgaben:

Thema der Woche: Matcher-Append-Replacement und Pig Latin

Die Pattern/Matcher erlauben nicht nur das Suchen und Ersetzen, sondern bieten noch weitere interessante Möglichkeiten.

Lösungen sind wieder gerne willkommen.

Thema der Woche: NIO-Buffer

Java nutzt für Objekte den Heap-Speicher, kann aber Bytes auch in sogenannten direkten Puffern speichern. Das kann sehr effizient sein, da Kopieroperationen zwischen dem Heap-Speicher und dem internen Speichern vermieden werden.

Thema der Woche: Java™ 6u10 – Java6u13

In der letzten Java™ 6 Updates sind einige Neuigkeiten hinzugekommen. Einige sind JavaFX geschuldet.

Java 6u14 ist noch nicht fertig. Es gibt nur ein „Java™ Platform, Standard Edition 6u14 Binary Snapshot Releases“. Die Anzahl der gefixten Bugs ist groß. Lese dazu  http://download.java.net/jdk6/ und http://tutorial.fyicenter.com/out.php?ID=3688.

Thema der Woche: Vernünftige Oberflächen, UI-Guidelines

Dass es unsinnige und schwer verständliche Gui-Oberflächen geht ist spätestens dann klar, wenn man sich folgendes Beispiel anschaut:

Besorge die UI-Guidelines und blättere

Lese anschließend

Thema der Woche: OSGi

Zentrale Merkmale der Java-basierten OSGi-Service-Plattform sind das dynamische Einführen, Aktualisieren und Entfernen von Service-Anwendungen zur Laufzeit. Lese das Tutorial http://www.theserverside.com/tt/articles/content/OSGiforBeginners/article.html und führe die Beispiele praktisch durch. (Das mit JSR 277: Java Module System bitte vergessen, denn das ist tot.) Lese anschließend http://en.wikipedia.org/wiki/OSGi#OSGi_Tutorial und finde einige Unterschieden zwischen http://en.wikipedia.org/wiki/Knopflerfish, http://en.wikipedia.org/wiki/Apache_Felix und http://en.wikipedia.org/wiki/Equinox_OSGi.

Thema der Woche: JUnit 4.x

Dass JUnit 4 auf Annotationen baut, ist bekannt (Kurzeinführung). Weniger bekannt sind die anderen Features, die es zu Erarbeiten geht:

  • Überfliege die Neuerungen http://junit.sourceforge.net/README.html
  • Was ergibt assertEquals( 1, new Long(1) );?
  • Was macht @RunWith?
  • Wie stellt man Filters und Sorters ein? Wozu sind sie nützlich und was steckt im Paket org.junit.runner.manipulation?
  • Was ist und wie setzt assumeThat() sie um? Was ist das Hamcrest-Projekt und was für Hamcrest Erweiterungen gibt es?
  • Was ist eine Theorie?
  • Wie schreibt man parametrisierte Tests?

Thema der Woche: Abdecker

Bei der Codeabdeckung geht es darum herauszufinden, wie viel Programmcode ein Test (etwa von JUnit) abläuft. Wirf einen Blick auf

Schreibe einen eigenen Testfall mit JUnit und suche eine Apache-Commons-Bibliothek mit Testfällen aus und lasse ein Coverage-Tool laufen.

http://www.atlassian.com/software/clover/ ist ein kommerziellen Tool. Finde heraus, was Clover im Gegensatz zu den freien Tools für Vorteile hat.