Das Notes Forum

Lotus Notes / Domino Sonstiges => Java und .NET mit Notes/Domino => Thema gestartet von: Axel_Janssen am 05.12.03 - 23:54:46

Titel: Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 05.12.03 - 23:54:46
Hi,

ich labere zuviel rum  ;D

Deshalb mein Vorschlag hier etwas Praktisches zu machen.
Obwohl ich eigentlich keine Zeit habe.

Also:
TMC & Mitstreiter sammeln zur Zeit LotusScript Funktionen. Ich möchte nun ein hippes Programm dafür basteln, das
a) diese Funktionen in einer xml-Datei speichert.
b) eine SWING-GUI besitzt, welche die Suche nach den Funktionen erleichtert und zwar mittels Baumnavigation und Volltextsuche.
c) Im Persistenz-Layer kann zwischen unterschiedlichen "Datenbanken" gewechselt werden (xml, RDBMS, LotusNotes).
d) P2P Features enthält. Das heisst jeder User kann über die GUI in sein xml-Repository neue Funktionen einstellen, bestehende ändern und im Extremfall löschen. Diese Änderungen können dann zwischen den Beteiligten ausgetauscht werden (quasi eine Replikation zwischen verschiedenen Datenbeständen im Eigenbau).

Die Punkte a) und b) sind relativ Standard, dh nix ist ja wirklich einfach.
c) ist schon mehr eine Herausforderung. Ich kann das durch einen halbautomatisierten Prozess mit Austausch von emails abkürzen. Richtig cool wäre aber wirkliches P2P. Hierzu gibt es Frameworks/APIs + Dokumentation. Nur weiss ich nicht wie kompliziert und stabil das ist.  

Das ganze will ich in einem hier dokumentierten transparenten UML-gestützten (Rational) Unified Process durchführen.
Sinn und Zweck ist, dass ich durch die öffentliche Selbstblamage inkorrekt angewandten UP+UML in genau diesen Punkten besser werde. Dies auch als praktische Umsetzung meiner IBM-UML certi Vorbereitung. Ich merke nämlich durch das Theorie-Lesen, dass ich viel falsch mache und das Gelesene trotzdem immer wieder vergesse.

Ich glaube, dass über intelligente Prozesse Arbeit effizienter werden kann. (Rational) Unified Process lässt sich nur teilweise auf LotusDomino Entwicklung übertragen, eben weil es stark mit Objekt Orientierter Analyse/Design gekoppelt ist. Teile (z.B. Anwendungsfälle) können aber sehr wohl auch in einer reinen Domino Umgebung eingesetzt werden.

Ich werde hier den Fortlauf mit Dokumenten und Source-code posten. Fragen, Kritik, etc. sind herzlich willkommen und es gibt wirklich keine dooven Fragen.
Ich will u.a. auch zeigen, dass Java keine hoffnungsvolle Zukunft hat sondern mehr eine effektive Gegenwart.

Gruß Axel
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 06.12.03 - 10:54:30
In einer legendären Urzeit lag die Welt noch im Gleichgewicht:
- Programmierer schrieben ihre Treiber selber.
- Anwender wussten bei Projektbeginn, was sie wollten.
- ein Herr Cray sagte so Dinge wie 2 starke Ochsen sind besser als 220 Hühner, um ein Feld zu pflügen.
- Wenn ein Treiber sein Endgerät in attack-mode schaltete hatte der Anwender immer Biberfellmütze und Bärentöter griffbereit in Bürostuhl nähe und wusste sich zu verteidigen.

Danach kam die Verwirrung in die Welt.
- Programmierer schrieben ihren code basierend auf irgendwelchen mehr oder weniger funktionierenden "Plattformen".
- User wurde erst gegen Projektende wirklich klar, was sie wollten.
- Ein Herr Gates behauptete, man könne ein Feld doch besser mit 220 Hühnern als mit 2 Ochsen pflügen und alle glaubten ihm.
Unter diesesn Bedingungen konnte das altbewährte Modell des Projektmanagements (Wasserfallmodell) nicht mehr funktionieren.
Das Wasserfallmodell begreift ein Projekt als linearen Prozess:
Zunächst gibt es eine vollständige Anforderungsanalyse
dann eine vollständiges Design/Planung der Anwendung
dann schrieben die Programmierer die Treiber, sonstigen Dinge und testeten diese code-Einheiten.
dann wurden die Einheiten zu Subsystemen zusammengeschweisst und Subsystemtests durchgeführt.
dann wurde aus den Subsystemen ein Gesamtsystem gebaut, das dann auch getetestet wurde.

Was aber, wenn bei einem solchen Vorgehen beim Systemtest am Ende festgestellt wird, dass der Programmierer seine Plattform doch nicht richtig verstanden hat? oder den Anwender stehen vor dem fertigen System und sie mäkeln, dass sie ja eigentlich was anderes wollten? Es muß dann in das komplexe, fertige System Änderungen eingefügt werden und das ist kompliziert und teuer.

Es geht nicht. Unter diesen Bedingungen braucht man ein anderes Vorgehen. Ganz logisch ist da ein iteratives und inkrementelles Projektmanagement.
Es gibt eine Vorplanung. Danach wird eine Anforderungsanalyse durchgeführt. Diese erhebt aber im Gegensatz zum Wasserfallmodell keinen Anspruch auf Vollständigkeit. Die Programmierer überschätzen sowieso ihre Fähigkeiten sowie die ihrer Plattformen und den Anwendern wird erst langsam im Laufe des Systems klar, was sie eigentlich wollen.

Anstatt alles richtig zu machen, werden besonders risikoreiche Elemente des Systems und die Grundlinien des Systems identifiziert und mit lustigen Diagrammen und Texten designt. Das sieht dann so ähnlich aus wie im Bastellbogen des Yps-Hefts. Es ist nicht nur Text sondern auch bildlich und entspricht so unseren Sehgewohnheiten. Man nennt das Analyse und Design.
 
Ohne das Analyse/Design fertig ist, implementieren (=coden) die Programmierer die als risikoreich identifizierten Teile und die Grundlinien des Systems.

Die Anwender können dieses unfertige Ursystem dann testen. Anstatt feature-Listen zu lesen, spielen sie ein bischen mit dem unfertigen Computer-Programm rum. Sie sehen dann, wo sie von den arroganten Schlippsträgern und chaotischen Programmierern falsch verstanden wurden. Dies gibt ihnen die Möglichkeit ihre Anforderungen so formulieren, dass auch diese Idioten offensichtliche Dinge erkennen.

Aus den gewonnenen Erfahrungen können dann in der nächsten Iteration die Anforderungen, die Analyse, die Implementierung (=coding) verfeinert werden. Es gibt dann wieder Akzeptanztests usw.

So. Das sieht jetzt wie ein Kreis aus. Das geht aber auch nicht. Schliesslich sind wir in der Wirtschaft und nicht bei einem Seminar zu süd/ostasiatischer Religionsphilosophie. Irgendwie muss es ja nach vorne gehen und das tut es auch. Der Wasserfallprozess ist eine Linie. Das hier ist eine Spirale, die sich nach oben in ihrem Radius immer mehr verjüngt.
Die Iterationen laufen in größeren Zeiteinheiten (Phasen genannt), in denen sich dem seine Aufgabe erfüllenden Gesamtsystem angenähert wird.
In der Konzeptualisierungsphase dominiert die Anforderungsanalyse. Trotzdem findet in diesen anfänglichen Iterationen schon ein bischen Analyse/Design und sogar Implementierung statt. Und zwar zielgerichtet auf den Aufbaus von durch Anwender testbare Grundlinien des Systems sowie besonders risikoreiche Aspekte.
Danach folgt die Entwurfsphase. Es dominiert Analyse und Design sowie eine Ausgestaltung der Anforderungsanalyse. Das Grundliniensystem wird immer umfangreicher und es werden Lösungen für die risikoreichen Aspekte gefunden (wenn nicht kann man das Projekt frühzeitig abbrechen).
In der nächsten Phase, Konstruktion genannt, ist die Anforderungsanalyse bereits ziemlich stabil. Für Analyse und Design sind auch nur noch Verfeinerungen notwendeig. Es dominiert die Implementierung (=coding) sowie ständige Tests der Teile und die Gesamtheit des Systems.
In der abschliessenden Übergangs-Phase nehmen die Tests und die Verteilung der Software die meiste Zeit in Anspruch.

Für Anforderungsanalyse sowie für Analyse und Design stellt der (Rational) Unified Prozess verschiedene textliche und graphische Formate zur Verfügung. Diese dienen den Team-Mitgliedern als Kommunikationsmittel. Einige dieser Formate entstammen der Unified Modelling Language (UML). Andere nicht.

Werde noch heute mit der Anforderungsanalyse des Systems beginnen.  
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 06.12.03 - 11:17:20
Ich habe schon eine Weile dieses iterative Vorgehen im Kopf. Die Gefahr am Anfang ist, dass man das als Entschuldigung dafür nimmt, Dinge nicht zu Ende zu machen. Also Funktionen programmieren und sich dann mit Halbheiten zufriedengeben. Man kann das ja in der nächsten Iteration machen.
Da ist die Gefahr groß, dass man den Überblick verliert. Die Selbstdisziplin Gedankenansätze zu Komponenten, Klassen, Subsysteme, etc. auch durchzuprogrammieren halte ich inzwischen für absolut wichtig.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: animate am 06.12.03 - 11:40:26
Wichtig dabei ist (für mich zumindest), dass du dir für jede Iteration konkrete Ziele und einen Zeitraum zum Erreichen der Ziele setzt.
Aber das is eh klar, oder?

Zum Thema OO-SW-Entwicklungsprozess und Lotus Notes: Inwiefern ist das ein Problem bei deinem Projekt? Wenn ich das richtig verstanden habe, willst du ein Tool entwickeln, das die Verwaltung von Code-Schnipseln unterstützt. Für die Umsetzung hast du bereits Java gewählt. Was ich vermute ist, dass das Tool eine Schnittstelle für andere Anwendungen bietet, um auf die vorhandenen Code-Schnipsel zuzugreifen (ich denke, du willst die Code-Schnipsel nicht auf LS beschränken, dadurch wird das Tool vielleicht auch für andere Anwendungen interessant).
Dann ist die einzige Stelle, wo LotusNotes auftaucht, der Zugriff auf die Schnipsel über die Schnittstelle deines Tools. Und schwups hast du kein Lotus Notes mehr in deinen Systemgrenzen, das dir bei  OOA(da weniger weils ja technologieneutral ist)/OOD (da schon mehr) Schwierigkeiten bereitet.


Edit:
Ach übrigens, kannst du dich noch daran erinnern:
Beispielprojekt:
- Code Schnippsel, die bei der täglichen Arbeit mit Notes benötigt werden, werden kategorisiert in einer RDBMS wie z.B. my-sql abgelegt (später kann dann auf Lotus-Domino als Daten-Layer gewechselt werden).
z.B. Cat.LotusScript-->Cat.String-Handling-->String gemäss eines Trennzeichens in ein Array aus Strings konvertieren
z.B. Cat.LotusScript-->Cat.View-Handling--> Ein View-Objekt besorgen und durch die Elemente iterieren.
etc.

Aus einer einfachen Java-Swing-Gui kann durch die Kategorieren explorer-mässig navigiert werden. Hat man das entsprechende code-snippet gefunden, wird es per Knopf-Druck in die Zwischenablage kopiert und kann über Str-V oder sonstwie in den Domino-Designer kopiert.      
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 06.12.03 - 15:59:13
Hi
Wichtig dabei ist (für mich zumindest), dass du dir für jede Iteration konkrete Ziele und einen Zeitraum zum Erreichen der Ziele setzt.
Aber das is eh klar, oder?
ja.  

Zum Thema OO-SW-Entwicklungsprozess und Lotus Notes: Inwiefern ist das ein Problem bei deinem Projekt?
Es geht mir zunächst einmal darum einen möglichst reinen Prozess durchzuführen. Ich bezweifele gar nicht, dass man dieses Projekt schnell mit LotusNotes durchprogrammmieren könnte. Dies bietet sich nur als ein einfaches Beispielaufgabe an.
 
Wenn ich das richtig verstanden habe, willst du ein Tool entwickeln, das die Verwaltung von Code-Schnipseln unterstützt. Für die Umsetzung hast du bereits Java gewählt. Was ich vermute ist, dass das Tool eine Schnittstelle für andere Anwendungen bietet, um auf die vorhandenen Code-Schnipsel zuzugreifen (ich denke, du willst die Code-Schnipsel nicht auf LS beschränken, dadurch wird das Tool vielleicht auch für andere Anwendungen interessant).
Ich möchte die Aufgabe einfach halten. Deshalb zunächst eine Datenbasis rein bezogen auf LotusScript.
Dann ist die einzige Stelle, wo LotusNotes auftaucht, der Zugriff auf die Schnipsel über die Schnittstelle deines Tools. Und schwups hast du kein Lotus Notes mehr in deinen Systemgrenzen, das dir bei  OOA(da weniger weils ja technologieneutral ist)/OOD (da schon mehr) Schwierigkeiten bereitet.
Bisher taucht LotusNotes rein als Datenbank vor. Neben xml und rdbms. Beide sind auch nicht objektorientiert. Aber die Datenbank ist innerhalb der Systemgrenzen. Systzemgrenzen ist ein gutes Stichwort zum Übergang auf die Use Cases (Anwendungsfälle), wo es ua darum geht die Systemgrenzen auszuloten. Der Prozess ist für Java ausführlich dokumkentiert (was mir die Arbeit extrem erleichtert). Diskussion inwieweit Teile für LotusNotes anwendbar sind, fände ich interessant.


Edit:
Ach übrigens, kannst du dich noch daran erinnern:
Beispielprojekt:
- Code Schnippsel, die bei der täglichen Arbeit mit Notes benötigt werden, werden kategorisiert in einer RDBMS wie z.B. my-sql abgelegt (später kann dann auf Lotus-Domino als Daten-Layer gewechselt werden).
z.B. Cat.LotusScript-->Cat.String-Handling-->String gemäss eines Trennzeichens in ein Array aus Strings konvertieren
z.B. Cat.LotusScript-->Cat.View-Handling--> Ein View-Objekt besorgen und durch die Elemente iterieren.
etc.

Aus einer einfachen Java-Swing-Gui kann durch die Kategorieren explorer-mässig navigiert werden. Hat man das entsprechende code-snippet gefunden, wird es per Knopf-Druck in die Zwischenablage kopiert und kann über Str-V oder sonstwie in den Domino-Designer kopiert.      
ja. Der einzige Unterschied zu jetzt ist, dass ich xml und nicht mySql als Hauptdatenbank verwende und die Datenbasis zunächst auf LotusScript beschränke. Eine Erweiterung wäre ohne weiteres später machbar.

Gruß Axel
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Semeaphoros am 06.12.03 - 17:49:29
Oh ja, wie weit lässt sich das auf LND übertragen, diese Fragestellung wäre gewiss interessant. Da gibt es ein riesiges Loch, und da IBM die LND-Gemeinde ja ganz gerne ein wenig in diese Richtung bewegen möchte, bestünde da eigentlich Handlungsbedarf, der von IBM selber bisher kaum an die Hand genommen wurde.  Darüber hinaus würden OOA/OOD/OOP ja eigentlich Mittel in die Hand geben, die durchaus den Entwicklungsprozess ganz allgemein stärker stabilisieren könnte und und LotusScript hat ja durchaus Elemente davon implementiert, die darauf warten, genutzt zu werden. Genau das war das Thema meiner Vorrtäge anfangs Jahr in Orlando und Düsseldorf und mein Schluss aus den Reaktionen der Leute: das Bewusstsein fehlt, die Vorgehensweisen sind nicht bekannt, den Leuten fehlt ganz einfach die notwendige Arbeitstechnik, kein Wunder, dass sich die LND-Welt nur widerwillig in eine OO-dominierte Welt migririeren lassen will. Dass Schnittstellen beispielsweise zu UML fehlen, das alleine ist der Grund nicht, denn selbst die bescheidenenen vorhandenen Mittel würden schon enorme Vorteile bringen, wenn man sie nutzen würde.

In dem Sinne, wenn da am Schluss eine "Portierung der Erkenntnisse" auf LND herauskommt, wäre das sehr wertvoll. Würde ich glattweg als Vortragsthema für 2005 wählen.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 07.12.03 - 00:13:20

Werde noch heute mit der Anforderungsanalyse des Systems beginnen.  

Ich und meine Versprechungen  >:(
Werde dies und den Tomcat Thread auf jeden Fall später aufgreifen. Das kann morgen sein, nächstes Wochenende, spätestens aber nach dem 20.12.. Das ist schon ziemlich anstrengend und ich hab auch gegenüber meinem Bröttchengeber eine gewisse Verpflichtung fit zu den Projekten zu pilgern, von denen 2 abgeschlossen werden und 1 an mich übergeben. Das gleiche gilt btw. für den Tomcat-Thread. Hab heute abend mit Andreas Schmidt telefoniert und der meinte es würde eine neue offizielle Domino-Schulungsunterlage "Domino und Tomcat" oder so herauskommen. Den muss ich also sowieso betreuen.

Ansonsten freue ich mich über die rege Beteiligung.

@all: Es soll keiner abgeschreckt werden. Was folgt, muss nicht unbedingt in allen Details verstanden werden, um den weiteren Fortlauf des Threads zu verfolgen.

@Jens da bin ich wieder ziemlich de acuerdo mit dir. Mich würde Unterlagen zu den Vorträgen interessieren, falls das möglich ist.
Letztlich kann OOA/D/P unter dem Aspekt einer ingenieursmässigeren Herangehensweise an IT-Projekte gesehen werden. Und angesichts der realen kunden und consultingseitigen Frustration über mehr oder minder gescheiterte Projekte, ist es wirklich an der Zeit darüber ernsthaft nachzudenken.
Ganz doll "hacken" zu können kann es imnsho auf die Dauer nicht sein, wenn man sich nicht durch irgendwelche Prozesse selbst managed/schützt.

In Java gibt es die geschilderte Ablehnung nicht, da sich die Sprache ja explizit als OO verkauft.
 
Was meinst du mit Schnittstellen zu UML?
Ich würde sagen die Mehrheit der Java Programmierer benutzt z.Zt. die jetzt vorhandenen reverse-engineering UML Tools wie Rational Rose, Rational XDE, Togethersoft, Poseidon nicht und verfolgt mehr einen Papier oder MS-Visio mit Zusatz-stencils Ansatz (u.a. ich). Dh ich versuche immer mal wieder mich mit den Tools anzufreunden, hab aber bisher immer entnervt aufgegeben. Mir persönlich macht es auch mehr Spaß zusammen mit 3 Leuten Diagramme auf grosse Papierbögen zu malen.  
netter Artikel: http://www.javaworld.com/javaworld/jw-01-2002/jw-0111-ootools.html

Bin kein OO-Weltmeister, aber auch nicht wirklich OO-naiv. Ich versuche hier in einem relativ reinen Prozess eine Art an (Rational) Unified Process angelehntes OO-Projekt durchzuführen. Dies ist in verschiedenen Büchern hinreichend beschrieben. Wir können dann schauen, wie sich das auf Notes übertragen lässt. In POJO (Plain Old Java Objects) dürfte es wesentlich einfacher sein. EJBs sind aber z.B. auch nicht besonders OO, wenn man genau drüber nachdenkt.
 
Ich packe also das OO in einen Prozess und greife auf Standards wie UML und Design Patterns zurück.

Es ist auch irgendwie ein hermetisches Thema. Entweder man macht es oder man macht es nicht. Es ist auch ein längerer Prozess, sich da einzugewöhnen und zuerst versteht man nur Bahnhof (mir gings so). Viele Leute haben auch falsche Vorstellungen. Die glauben z.B., es ginge um den Aufbau von langen erbenden Klassenhierarchien mit extends, dabei wird genau das als explizitest schlechte Idee angesehen.
In Java_Land steht auch nicht alles zum besten. Zum Bleistift beschreibt dieser Artikel super-typische Fehler, wie man pseudo-OO schreibt (und diese Fehler mache ich: http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html?).

Gruß Axel  
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Semeaphoros am 07.12.03 - 09:36:47
Ah, das sind mal wirklich gute Artikel, die Du da zitierst. Und danke für diesen Update über die verschiedenen Tools, ich selber habe damit gar keine Erfahrung, aber nach den Vorträgen wurde ich des öfteren mal danach gefragt, so schien mir das ein Bedürfnis zu sein. Dieser Artikel erklärt aber sehr wohl, warum das nicht tut. Natürlich wollen die Leute, wenn man ihnen den OOP-Floh aufsetzt, gleich wissen, ob man mit diesen Tools dann auch arbeiten kann, aber da Notes nun mal eine weitgehend geschlossene Umgebung bietet, ist das natürlich nicht so "out of the Box" möglich, offenbar eigentlich auch nicht notwendig -- sehr gut zu wissen.

Der Mann sagt ja kurz zusammengefasst: statt zu theoretisieren krempelt doch einfach mal die Aermel hoch und fangt an zu arbeiten, aber vergesst dabei nicht das Denken einzuschalten. Seine Beispiele erinnern mich an ein Erlebnis vor rund 10 Jahren: gerade eben ist Turbo-Pascal mit OO versehen worden. Ich hatte mal zuerst selber meine eigenen Probleme, dieses "neue" Modell zu verstehen. Als ich dann das Wesentliche begriffen hatte, bekam ein Mitarbeiter ein internes Projekt zugesteckt mit der Aufgabe, das OO-mässig zu realisieren, sprich ein Objekt aus der Aufgabe (wenn ich mich richtig erinnere, ein Objekt zum Manipulieren von INI-Dateien, also ein wirklich schönes Projekt für OO). Was kam heraus? Ein einziges Objekt, bestehend aus einem Konstruktor (weil der obligatorisch ist) einem Destruktor (weil auch der obligatorisch ist) und einer einzigen Methode ... nennen wir sie mal DoIt. Das Hauptprogramm bestand aus Instantiieren des Objektes, Aufruf von DoIt und Dereferenzieren des Objektes. Die Methode DoIt war ellenlang und prozess-orientiert die Lösung der Aufgabe (oder wäre das geworden, wenn ich da nicht auf halbem Weg Stopp gesagt hätte und kurz nochmal das Prinzip von OO erklärt hätte, schliesslich wollten wir das Ding haben, um es in andere Programme einbauen zu können). Die Geschichte mit den Gettern und Settern im Artikel sind auf anderer Ebene genau dasselbe Phänomen ....

Ich selbst hab mit den verschiedenen Tools bisher nichts zu tun gehabt. Ich bin aus dem OO wieder ausgestiegen, als sie modern wurden. Da kam ich aus dem OO-Umfeld, eben Delphi (logisch, wenn man vorher mit TurboPascal gearbeitet hatte) und bin dann in die LoNoDo Welt eingetaucht. Da erging es mir wie offenbar den meisten: Aha, es gibt Objekte - interessant. Dann hat man sich die Beispiele zu Herzen geführt, und die sind nun mal allesamt prozessorientiert in einem eigentlich OO-basierenden Umfeld. Ergebnis: PO-Code in den vom System vorgegebenen Ereignissen und Methoden der System-Objekte: Man schreibt einfach seinenen "traditionellen" Code in den gegebenen QueryOpen und PostClose oder was immer.

Mir gabs den Kick, als ich die Komplexität erreicht hatte, die beim PO-Ansatz zum Kopieren von Code führt und dadurch bei Aenderungen eine Kaskade von Veränderungen herbeiführt. Garantiert vergisst man von 5 Stellen, die angepasst werden müssen 2 und hat riesige Zeitverluste, um die Fehler zu finden. Das Umschreiben einer Applikation unter Ausnutzung von Custom-Classes, also eigenen Objekten, war eine Fleissaufgabe, hat die Realisationszeit einer neuen Version um rund 30% verlängert, eine Zeitinvestition, die  ich unterdessen schon längstens wieder reingeholt habe: das Schreiben der Datenkonversion, die beim Update auf die neue Version erforderlich war, hat dann nur noch 50% der sonst üblichen Zeit gebraucht, also bereits bei der Migration konnte ich einen Teil der Zeitninvestiion bereits wieder "kapitalisieren". Das ist nur ach so typisch ....... so ähnlich wie Du ja Deine eigene Entwicklung auch erzählst.


Meine Vorträge findest Du hier: http://www.ligonet.ch

Gruss
Jens
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 07.12.03 - 21:32:17
Hi,

werd mir mal die Vorträge anschauen:

zu Tools: Das ist natürlich verlockend. Wenn die Tools wirklich funktionieren erzeugen sie aus UML-Modellen code. Den code kann man dann verfeinern und daraus wieder UML-Modelle erzeugen (etwa zu Beginn der nächsten Iteration im Projekt).
Die Probleme sind:
- UML-Modelle sind Mittel zur Kommunikation. Wenn man sie für die Kommunikation mit Entwicklern benutzt, brauchen sie einen wesentlich geringeren Grad an Exaktheit als wenn man sie zur Kommunikation mit einer Maschine benutzt, die daraus code generiert. Dieser höhere Grad an Exaktheit ist natürlich ein Problem gerade für Neueninsteiger. Es ist auch fraglich, ob das bei wirklich komplexen real world Sachen so einfach funktioniert. Der neue in diesem Jahr verabschiedete UML2.0 Standard fokussierte sich hauptsächlich darauf, diese exakten Bestandteile der UML weiter auszubauen.

- Rational Rose bestand aus vielen einzelnen Tools und das zu beherrschen, ist alles andere als trivial. Bereits vor dem Kauf durch IBM begann Rational die Tools als plug-ins für WSAD und MS-Visual Studio zu entwickeln (Rational XDE). Das hat dann eine gemeinsame Oberfläche. Wirklich trivial ist das aber auch nicht zu bedienen. Ich habe es, muß aber irgendwann mal mehr Zeit haben, um mich da wirklich einzuarbeiten.
Die openSource Tools sind noch schwerer zu bedienen. Relativ beliebt ist das Produkt Poseidon der Hamburger Firma Gentleware. Ist kleiner als Rational zeugs. Hab ich viel mit rumgespielt. Für unser Webservices Projekt hab ich es vorgeschlagen, die anderen wollten aber nicht. Ich hab auch schon von Leuten gelesen, bei denen irgendwann in der 6. Programmwoche die Daten des sorgsam erstellten UML-Modells korrupt waren und nicht mehr von Poseidon gelesen werden konnten. Und so was finde ich wirklich abschreckend.

zu pseudo-OO code schreiben:
OO ist ja an sich kein Vorteil, sondern es eröffnet nur Möglichkeiten besser managebaren code zu schreiben.
Deshalb ist auch ein guter OO-Prozess so wichtig. Und dies ist mir in aller Deutlichkeit erst in den letzten Wochen klargeworden. Prozesse wie RUP sind eine Arbeitsanleitung, die einen dazu bringen sollen, die guten Sachen von OO auch wirklich auszunutzen.
RUP an sich ist ein schwergewichtiger Prozess mit vielen Dokumenten. Gängige Praxis vieler moderner OO-Lehrbücher ist es, sich auf die wichtigsten Elemente von RUP konzentrieren. Der Prozess wird so leichtgewichtig. So will ich das hier auch halten.

Gruß Axel
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Semeaphoros am 07.12.03 - 22:12:10
Danke für diese Beschreibung, grundsätzlich sehe ich das auch so, mangels Erfahrung mit den Tools wusste ich natürlich nicht wirklich, was ich jeweils dazu hätte sagen sollen. Mit Deinen Angaben habe ich jetzt aber die Grundlage für eine gute Antwort.

Stimmt, OO ist nicht an sich gut, sondern ein Hilfsmittel, das richtig genutzt Nutzen bringt und eben auch schadet, wenn es falsch eingesetzt wird. Theoretisch müsste man ja nicht einmal eine OO-Sprache zur Verfügung haben, um den eigenen Code nach OO zu erstellen, es wird nur ein bisschen tricky.

Die Sache mit UML hatte ich, als sie aufgekommen war, auch so aufgefasst und war dann plötzlich sehr überrascht (da ich es ja dann nicht mehr so genau beobachtete), dass UML plötzlich zur Generierung verwendet werden sollte. Bin jetzt richtig gespannt, wie das hier bei Dir weitergeht und wie wir das dann auf die LoNoDo Umgebung umsetzen können.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 24.12.03 - 01:59:58
Ziel: Computerprogramm in Rahmen eines iterativen OOA/D-Prozesses zu erstellen.

Zunächst fokussiere ich mich darauf, die groben Anforderungen für das System zu ermitteln.
Da es sich um einen iterativen Prozess handelt, wird nicht jedes Anforderungs-Detail genau spezifiziert. Schliesslich ändern die User ihre Anforderungen sowieso.

Use Cases sind nicht OO-spezifisch. Ich benutze seit Jahren Use Cases für die Ermittlung von Anforderungen in reinen Notes-Projekten.

Anwender verfolgen spezifische Business-Ziele. Ein Computersystem soll sie dabei unterstützen. OOA/D besteht aus einem Analyse Teil (das A) und einem Design-Teil (das D). In dem Analyseteil soll erst mal ermittelt werden, „was“ das System leisten soll. Im Design-Teil wird danach gesucht, „wie“ das System die Anforderungen erfüllen soll. Bevor man mit der OO-Analyse überhaupt richtig anfängt benötigt man erstmal eine Analyse der Anforderungen.  

Sprachlich treffen in einem Software-Projekt 2 Welten aufeinander. Auf der einen Seite die Entwickler mit ihrer Fachsprache und auf der anderen Seite die Anwender mit ihrer Fachsprache. Der Vorteil von Fachsprachen besteht darin, dass komplexe Sachverhalte effizient ausgedrückt werden können. Der Nachteil ist, dass sie in aller Regel relativ hermetisch sind. D.h. Außenseiter in Bezug auf die jeweiligen Fachsprache verstehen erst mal nur Bahnhof. Die wichtige Quelle für die Anforderungen sind die Anwender. Deshalb soll auch deren Sprache dominieren. Die Entwickler müssen also lernen, sich in der Fachsprache der Anwender einigermassen zurechtzufinden. Als zusätzliches sinnvolles Analyse-Artefakt kann ein Glossar über die Fachsprache erstellt werden. Da hier ein System erstellt wird, dass Entwicklern hilft, Lotus-Script Funktionen zu speichern, katalogisieren und auszutauschen, sprechen hier Anwender und Entwickler die selbe Sprache. Die Anwender sind eben auch Entwickler.

Larman spricht von unterschiedlichen Formaten für Use-Cases. Zunächst kann das brief-informal Format benutzt werden.
Code
Use Case1: Code-Dokument erstellen
Der Anwender wählt die Kategorie, unter dem die neue Funktion gespeichert werden soll oder er erzeugt eine neue Kategorie. Er gibt der Funktion einen Namen, gibt einen Kommentar an, fügt Referenzen auf bestehende Funktionen hinzu, von denen die neue Funktion abhängt, schreibt einen aussagekräftigen Kommentar, fügt den code ein und sendet an das System die Nachricht, dass das neue code-Dokument abgespeichert werden soll. Das System validiert, ob alle notwendigen Eingaben getätigt sind und übergibt den Text des Kommentarfeldes dem Volltextindiexierungsservice und speichert das code-Dokument in einer exterenen Datenbank ab.
So werden funktionale Anforderungen in der Form kleiner Geschichten aufgezeichnet, die darüber handeln, wie die Anwender das System benutzen, um ihre Geschäftsziele zu erreichen. Also keine unzusammenhängenden feature-Listen. Der Ausschnitt des beschriebenen Systemverhalten ist so groß, dass er aus der Sicht des Anwenders einen Wert für seine Arbeit hinzufügt. Füllt der Anwender eine Maske aus und speichert die Daten über einen „Speichern“-Button in eine Datenbank, ist „Speichern in eine Datenbank“ kein eigener Use Case. Für den Anwender ist die Eingabe der Daten und das Drücken des „Speicher“-Buttons ein atomarer Vorgang. Eingeben und Speichern zusammen ist also möglicherweise ein Use Case. Muß ein Anwender beispielsweise für einen Geschäftsvorgang ein Kategoriedokument erstellen und dann erst das eigentliche Dokument, dann ist Kategoriedokument erstellen kein eigener Use cases, sondern beides zusammen.

Begriffe der Informatik werden vermieden. So kann der Gebrauch von „Datenbank“ angegriffen werden. Ich finde das aber ok, weil es ein Begriff ist, der von den meisten verstanden wird. Der oben aufgezeichnete informelle Anwendungsfall nimmt viele Details nicht auf. Das ist möglicherweise gut so, um den use case für alle Beteiligten einfach verstänlich zu halten. Schliesslich will keiner bei der Arbeit unnötig intelektuell gefordert werden. Das führt sowieso nur zu zuviel Kaffee oder gar schlimmeren (z.B. Zigaretten).

In unseren Use Case fehlen aber noch definitiv die Fehlerbedingungen, die auftreten können und wie die Fehlermeldungen dem Anwender mitgeteilt werden. Ich kenne mindestens 2 größere Notes-Projekte, bei denen Verbindungsprobleme mit einer externen RDBMS dem Anwender nicht korrekt mitgeteilt wurden. Die standen dann im Log. Das las keiner. Die Systeme arbeiteten dann über einen mehr oder weniger langen Zeitraum nicht korrekt und die Anwender wurden verunsichert, da keiner wusste warum das System nicht richtig rund lief. Konkrete Fehlermeldungen sind also konkret wichtig.

Der oben aufgeführte Use Case sollte also noch in ein exakteres Format übertragen werden. Das informelle Format beschreibt eigentlich nur ein Szenario bzw. eine Instanz des Use Cases. Den sogenannten lucky path oder main success scenario(alles funktioniert). Daneben sollen auch Fehlerbedingungen aufgeführt werden.
 
Ausserdem sollte man bei der Spezifizierung der UML-Akteure genauer sein. Anwender ist ein wenig zu allgemein. Eine physische Person  kann mehrere UML-Akteure verkörpern. Ein besserer Begriff für Akteur (engl. actor) wäre Rollen. Angeblich geht diese semantische Unschärfe auf Übersetzungsfehler aus dem schwedischen zurück. Die erste Person, die theoretisch über Use Cases publizierte, war der Ericson Mitarbeiter Ivar Jacobson.
Die Use Cases dienen letztlich in ihrer Gesamtheit dazu, alle Akteure (d.h. Rollen) eines Systems zu ermitteln.
Als Akteure haben wir zunächst den code-Dokument producer. Daneben sind auch andere Systeme, mit denen unser System kommuniziert, Akteure. In unserem Fall sind dies zunächst der Volltextindexierungs- Service und die Datenbank.

Deshalb gehen wir zum nächsten Format über, dem sogenannten casual Format (laut Larman).

Code
Use Case1: Code-Dokument erstellen
Main Success Scenario:
Der code-Dokument producer wählt die Kategorie, unter dem die neue Funktion gespeichert werden soll oder er erzeugt eine neue Kategorie. Er gibt der Funktion einen Namen, gibt einen Kommentar an, fügt Referenzen auf bestehende Funktionen hinzu, von denen die neue Funktion abhängt, schreibt einen aussagekräftigen Kommentar, fügt den code ein und sendet an das System die Nachricht, dass das neue code-Dokument abgespeichert werden soll. Das System validiert, ob alle notwendigen Eingaben getätigt sind, übergibt den Text des Kommentarfeldes dem Volltextindiexierungsservice und speichert das code-Dokument in einer exterenen Datenbank ab.

Alternate Scenario1:
Wenn das System bei der Validierung der eingegebenen Daten bemerkt, dass die Daten nicht komplett sind, wird der code-Dokument producer mit einer Message-Box darauf aufmerksam gemacht. Eine Volltextindexierung und das Abspeichern der Daten in der Datenbank findet nicht statt. 

Alternate Scenario2:
Wenn der Volltextindexierungsservice zurückmeldet, dass er den Text des Kommentarfeldes nicht verarbeiten kann, wird der Datensatz in die Datenbank mit einem Vermerk „nicht Volltextindexiert“ abgespeichert. Der Anwender wird mittels einer Messagebox über die nicht stattgefundene Volltextindizierung informiert. Bei einem späteren Systemstart, wird versucht die Volltextindexierung für das entsprechende code-Dokument durchzuführen. Der Vermerk im Datensatz in der Datenbank wird auf „volltextindiziert“ umgestellt. Der Anwender wird informiert.

Alternate Scenario3:
Wenn die Datenbank zurückmeldet, dass sie zur Zeit keine neuen Datensätze abspeichern kann, bekommt der code Dokument producer eine Meldung über eine Messagebox. Die Volltextindexierung wird rückgängig gemacht. 
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 24.12.03 - 02:00:48
 
Sehr ähnlich sieht der Use Case “ Kategorie erstellen” aus
Code
Use Case2: Kategorie erstellen:
Main Success Scenario:
Der code Dokument producer wählt eine Oberkategorie für die neue Kategorie aus oder nicht. Wenn nicht, ist die neue Kategorie eine first-level Kategorie. Über den Button „Kategorie abspeichern“ sendet er eine Nachricht an die Datenbank, dass sie die neue Kategorie abspeichern soll.

Alternate Scenario1: 
Wenn der code Dokument producer nichts in das Namensfeld der Kategorie eingetragen hat,. erhält eine eine Fehlermeldung und der Datensatz wird nicht in die Datenbank abgespeichert. 

Alternate Scenario2:
Wenn die Datenbank zurückmeldet, dass sie unter der gleichen Oberkategorie bereits eine gleichnamige Kategorie abgespeichert hat, erhält der Code-Dokument producer eine Fehlermeldung und der Datensatz wird nicht in die Datebank abgespeichert. 

Alternate Scenario3:
Wenn die Datenbank zurückmeldet, dass sie zur Zeit keine neuen Datensätze abspeichern kann, bekommt der Code Dokument producer eine Meldung in Form einer Messagebox.

Der Use Case für „Code Dokument suchen“ sieht so aus:
Code
Use Case2: Code Dokumente suchen:
Main Success Scenario:
Der Code Dokument Consumer (neuer Akteur!) 
a)   wählt in einem hierarchischen Kategorie-Baum (ähnlich wie Windows-Explorer) die gewünschte Kategorie aus und 
b)   macht einen Eintrag in das Feld Volltextsuche, betätigt den „Senden“-Button und
erhält eine Trefferliste, der gefundenen code Dokumente zurück.
Er kann die sich nun angucken. Wenn ihm ein code Dokument gefällt, kann er über den  Button „code Dokument in die Zwischenablage kopieren“, den code inklusive aller referenzierten Unterfunktionen in die Zwischenablage des OS-kopieren und im Domino Designer über Strg-V wieder reinkopieren. 

Alternate Scenario1: 
Der Volltextindexierungsservice kann die Anforderung nicht verarbeiten. Der code Dokument consumer erhält vom System eine Fehlermeldung. 

Kommt nun noch das Kollaborationsfeature „Replizierung für Arme“. Es kann später durch einen echten P2P-Service ersetzt werden... Sollte das System genutzt werden, lohnt sich die Mühe. Im ersten Release gibt es nur „Replizierung für Arme“

Code
Use Case2: Replizierung durchführen:
Main Success Scenario:
Der replication requester wählt aus einer Liste an Teilnehmern aus, mit wem er replizieren will.
Betätigt der replication requester die Schaltfläche „request Datei erzeugen“ generiert das System eine xml-Datei (request.xml) als Übersicht über sämtliche Datensätze, die in der Datenbank des replication requesters enthalten sind. 
Diese request.xml sendet er als email an denjeningen, von dem er eine pull-replikation haben will (replication requested). 
Der replication responder empfängt die email und speichert die request.xml im selben OS-Verzeichnis wie sein code-store Programm. Er startet das code-store Programm. Er betätigt die Schaltfläche „replication request bearbeiten“. Das System überprüft, welche code-Dokument, Kategorie und Teilnehmer-Daten sich in seiner Datenbank enthalten sind, aber in der Übersicht der request.xml fehlen. Diese Datensätze packt das System in eine Datei response.xml. 
Der replication responder sendet eine email an den replication requester mit der response.xml als attachment. 
Der replication requester empfängt die email und packt die response.xml in das OS-Verzeichnis seines code-store Programms. Er startet das code-store-Programm und betätigt die Schaltfläche „replication-response einfügen“. Das System übergibt die Inhalte des Kommentarfeldes der Datensätze dem Volltextindexierungsservice, es fügt die neuen Datensätze aus der Datei response.xml in seine Datenbank ein und baut die Kategorisierung neu auf. 

Alternate Scenario1
Das System kann die request.xml nicht erstellen. Der replication requester erhält eine Fehlermeldung als messagebox. 

Alternate Scenario2:
Das System des replication responders kann die request.xml nicht verarbeiten. Der replication responder erhält eine Fehlermeldung als messagebox. 

Alternate Scenario3
Das System des replication responders kann die response.xml nicht erstellen. Der replication responder erhält eine Fehlermeldung als Messagebox.


Alternate Scenario4
Das System des replication requesterskann die response.xml nicht verarbeiten. Der replication requester erhält eine Fehlermeldung als Messagebox.


Alternate Scenario5:
Wenn der Volltextindexierungsservice zurückmeldet, dass er den Text des Kommentarfeldes nicht verarbeiten kann, wird der Datensatz in die Datenbank mit einem Vermerk „nicht Volltextindexiert“ abgespeichert. Der Anwender wird mittels einer Messagebox über die nicht stattgefundene Volltextindizierung informiert. Bei einem späteren Systemstart, wird versucht die Volltextindexierung für das entsprechende code-Dokument durchzuführen. Der Vermerk im Datensatz in der Datenbank wird auf „volltextindiziert“ umgestellt. Der Anwender wird informiert.

Alternate Scenario6:
Wenn die Datenbank zurückmeldet, dass sie zur Zeit keine neuen Datensätze abspeichern kann, bekommt der code Dokument producer eine Meldung über eine Messagebox. Die Volltextindexierung wird rückgängig gemacht. 
 

Es gibt noch weitere Use Cases zu den Themen Teilnehmerdaten verwalten, sowie Erweiterungen für die Anwendungsfälle "Code Dokument erstellen“ und „Kategorie erstellen“ (jeweils bestehende bearbeiten). Dies ist aber jetzt erst mal zu trivial, als das es aufgeführt werden müßte. Ich komme später darauf zurück.

Hier ist ein UML Use Case Diagramm, das alle Use Cases übersichtlich darstellt. So wahnsinnig sinnvoll ist dieser Diagrammtyp nicht, ausser das er eine Übersicht bietet.
(http://www.atnotes.de/attachments/useCasesCodeStore.gif)
Das <<verwendet>> zwischen "Code-Dokument erstellen" und "Kategorie erstellen" soll eigentlich <<uses>> heissen. Schuld ist erstmal Visio.
Wenn sich jemand den use case "code Dokument erstellen" noch mal durchliest, sieht er, dass in dem use case der code-Dokument producer eine neue Kategorie erstellen kann. Dies wird mit dem <<uses>> alias <<verwendet>> ausgedrückt.
Ach ja. Die lustigen Linien zwischen den Akteuren und den Use Cases zeigen an, welche Akteure bei weilchen Use Cases beteiligt sind.
Ich hätte auch noch die Anwendungsfälle "code-Dokument bearbeiten" und "Kategorie bearbeiten" hinzufügen können, die dann von den use cases "Code-Dokument erstellen" und "Kategorie erstellen" erben (Schlüsselwort <<extends>>) oder "code Dokument suchen" als abstrakten use case definieren können, von dem die use cases "code Dokument über Kategorie suchen" und "code Dokument über Volltextindex suchen" erben... . Das hätte aber das Diagramm überfrachtet. So wichtig ist der Sachverhalt nicht. Diese ganze Vererberei ist in OO-Land sowieso ein bischen out. Use Cases haben eine reichhaltiges Angebot an Erweiterungen (extension points, abstrakte use cases, etc). Die Literatur rät aber dringend dazu, die Dinge einfach zu halten, es sei denn man hat wirklich gute Gründe, die erweiterten features zu nutzen. Die sehe ich hier nicht.  

Für die Inception Phase fehlt jetzt noch auf jeden Fall eine Aufstellung der nicht-funktionalen Anforderungen. Schliesslich behandeln Use Cases nur funktionale Anforderungen. Aber das kommt morgen.

Der Text der Use Cases wird in der nun folgenden OOAnanalyse dazu dienen, die Klassen der Business Domäne herauszufinden: Das heisst, die Namen der Klassen, ihre Verantwortlichkeiten und ihre Kollaborationen (also welche Klassen mit welchen anderen Klassen zusammenarbeiten).
Ein Use Case mit starker Querschnittsfunktionalität für das gesamte System („Code Dokument erstellen“) werde ich auch schon mal durchprogrammieren (schliesslich will ich ja iterativ arbeiten, d.h. die Dinge Requirement Analyse --> OO-Analyse --> OO-Design --> codieren --> testen nicht streng hintereinander, sondern durcheinander durchführen).

Aufgrund der Gui-Lastigkeit der Anwendung macht ein GUI-Prototyp Sinn. Das notieren der Use-Cases haben mir auch geholfen, ein Bild der GUI im Kopf zu entwickeln. Dies sollte ich dann auch festhalten, sonst vergesse ich das wieder.
Um dies zu notieren, bieten sich theoretisch Java-Swing GUI-IDE-Tools an. Da ich aufgrund schlechter Erfahrungen Anfang Dezember mit dem momentanen Stand dieser Tools ein bischen auf dem Kriegspfad mit demselben bin, werde ich den Prototyp mit dem Notes-Client machen.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 24.12.03 - 11:30:40
Keine Ahnung, ob sich das jemand durchliest, oder ob die spärlichen Leser dieses Forums mich für endgültig und unwiederbringlich durchgeknallt halten.  :-[

Dies ist für mich erstmal Teil meiner Vorbereitung von IBM_486. Es darüber hinaus ein Kommunikationsangebot. Praktische Objekt-Orientierung ist ein Prozess. Das versuche ich hier darzustellen. Nachdem die technischen Details wg. besserer Tools, allgemeinen Forum- und Google-Support und Globalisierung zunehmend zu einem commodity werden, kann es nur darum gehen die Prozesse zu beherrschen.
Das ist sicher nicht trivial. U.a. auch deshalb, weil ich teilweise ins Detail gehen muß. Meiner Ansicht nach bestehen extrem viel Missverständnisse bezüglich OOA/D. Ich versuche hier darzustellen, wie mein OOA/D-Prozess wirklich aussieht. Ich hoffe das ist einigermassen verständlich. Für viele enthält der Text sicherlich viele neue Konzepte und ist deshalb nicht einfach zu durchdringen.

Gruß Axel
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: animate am 24.12.03 - 15:09:02
klar liest das jemand.

ein paar Anmerkungen habe ich dazu:

an einigen Stellen in deinen UseCases bist du IMHO viel zu detailliert. Use Cases sind ein Teil der Analyse und beschreiben, wie du schon sagtest, das "Was", nicht das "Wie". Allerdings machst du in deinen Use Cases schon Vorgaben,(z.B.) dass eine Datei im xml-Format geschrieben werden soll, dass die Meldung an den Benutzer in Form einer Msgbox erfolgt.
Solche Sachen sind (alles IMHO) nicht Sache von UseCases.

Weiter oben in dem Thread schreibst du, dass die Datenbank (wieder so eine Vorgabe) Teil des Systems ist. In deinem UC-Diagramm ist die Datenbank aber eindeutig außerhalb des Systems.
Meine Frage deshalb, was umfasst das System? Nur die GUI, wie der Threadtitel vermuten lässt, oder all das, was später vom Benutzer dazu verwendet werden soll, um Code leicht wiederzuverwenden (denn dann würde ich sowohl die Datenbank als auch den Indizierungsservice mit zum System zählen)?

Ich les jetzt mal weiter, vielleicht habe ich dann noch ein paar mehr Anmerkungen.

Just my 0.02€

Frohe Weihnachten
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 24.12.03 - 15:57:20
klar liest das jemand.

danke.

an einigen Stellen in deinen UseCases bist du IMHO viel zu detailliert. Use Cases sind ein Teil der Analyse und beschreiben, wie du schon sagtest, das "Was", nicht das "Wie". Allerdings machst du in deinen Use Cases schon Vorgaben,(z.B.) dass eine Datei im xml-Format geschrieben werden soll, dass die Meldung an den Benutzer in Form einer Msgbox erfolgt.
Solche Sachen sind (alles IMHO) nicht Sache von UseCases.
Streber. ;D
Im Prinzip hast du völlig Recht. Wir befinden uns in der Analyse Perspektive. Ich habe hier ein vielleicht grundsätzliches Problem. Was würdest du statt xml-Datei verwenden???
Datei? Vielleicht besser. Oder was anderes?

Weiter oben in dem Thread schreibst du, dass die Datenbank (wieder so eine Vorgabe) Teil des Systems ist. In deinem UC-Diagramm ist die Datenbank aber eindeutig außerhalb des Systems.
Meine Frage deshalb, was umfasst das System? Nur die GUI, wie der Threadtitel vermuten lässt, oder all das, was später vom Benutzer dazu verwendet werden soll, um Code leicht wiederzuverwenden (denn dann würde ich sowohl die Datenbank als auch den Indizierungsservice mit zum System zählen)?
Da war ich oben falsch. Ich räume das irgendwann auf. Datenbank und Indexierungsservice sind eindeutig nicht Teil des Systems. Sehr wohl wird aber der Database Access Layer, der aus der Anwendung mit der Datenbank kommuniziert, eindeutig Teil des Systems sein. Datenbank und Indexierungsservice sind dagegen black boxes für mich. Auch wenn es open Source ist, werde ich da vermutlich keinen code verändern, sondern sie vielmehr quasi als Dienste einbinden. Deshalb ausserhalb.
 
Der Begriff Datenbank sehe ich als keine starke Einschränkung ein. Es kann RDBMS, Notes-Datenbank oder xml-Datei sein (für mich sind xml-Dateien Datenbanken, wobei man darüber streiten kann). Wieder. Was würdest du statt Datenbank verwenden?
Neben GUI und Database Access Layer werden auch die Domain Objekte sowie verschiedene Helper, Startup und was weiss ich Klassen Teil des Systems sein.

Frohe Weihnachten

Axel
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: animate am 25.12.03 - 15:44:26
Zitat
Was würdest du statt xml-Datei verwenden???
Datei? Vielleicht besser. Oder was anderes?
mir würde in diesem Fall schon reichen, dass eine Liste aller Datensätze erstellt wird.
Wie das Teil mal aussieht ist im Moment nicht relevant.

Mir ist beim Durchlesen des Replizieren-Use Cases noch was aufgefallen: nämlich ein weiteres Beispiel dafür, dass du die UseCases viel zu detailliert beschreibst. In meinen Augen ist das Ziel von Use Cases nicht, z.B. eine Replikation in all ihren Schritten detailliert zu beschreiben (mit Formaten, Speicherorten, Kommunikationsmechanismen, etc.). Ich denke, sie sollten abstrakter beschrieben werden, um z.B. einen Überblick zu bekommen, welche Stakeholder beteiligt sind und was da mal ganz grob ablaufen wird.
Wie die Replikation genau abläuft, das kannst du dann z.B. in einem Aktivitätsdiagramm modellieren; eine genaue Beschreibung des Ablaufs gehört IMHO aber nicht in die Anforderungen an dieses System.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 26.12.03 - 20:53:47
Hallo Potsmoker,

Auf jeden Fall. D.h. ein Aktivitätsdiagramm ist das bessere Format.

Ich würde aber diesen Use Case schon in der Inception-Phase genauer spezifizieren (besser mit Aktivitätsdiagramm als mit Use Case).
Der Grund für die frühe Spezifizierung sehe ich darin, dass dies der sowohl programmatisch und v.a. organisatorisch der komplexeste Use Case ist. Hier ist das Risiko am größten, dass der Budget-Verantwortliche nicht mit diesem Vorgehen einverstanden ist. Deshalb neige ich hier dazu, früh für klare Verhältnisse zu sorgen.

Aktivitätsdiagramme sind
- an sich nicht objektorientiert.
- eignen sich sehr gut dazu, Workflows darzustellen
Deshalb stellen sie ein sinnvolles Modellierungs-Werkzeug für Notes-Projekte dar. Teilzweck dieser Veranstaltung besteht ja darin herauszufinden, wo UML für Lotus Notes gut genutzt werden kann.

Zu allgemein bei der Spezifizierung zu bleiben, halte ich übrigens aus meiner Erfahrung für keine gute Idee. Vor allem in Organisationen mit einer strengen Trennung zwischen Projekt-Management und Coding dürften zu wolkige Spezifikationen dazu führen, dass dem Programmierer zuviel Verantwortlichkeit/Arbeit übertragen wird. Ich arbeite zum Glück nicht in einer solchen Organisation.

some work for a lazy friday afternoon.
Werd mal den Jakobs Krönung stock der hiesigen Kiosk-Szene abchecken und meld mich dann wieder...

Gruß Axel
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 27.12.03 - 16:47:11
Hier ist das Aktivitäts-Diagramm für den Anwendungsfall "Pull Replizierung initiieren".
(http://www.atnotes.de/attachments/activityD_UseCase_Repl.GIF)

Die schwarzen Kreise am Start und Ende symbolisieren den Anfang und das Ende der Aktivität. Die Kästchen mit den runden Ecken sind Aktivitäten. Die Pfeile dazwischen Transitionen zwischen den Aktivitäten.  
Die einzelnen Aktivitäten sind auf "Spalten" aufgeteilt mit einem "Spaltentiteln" (z.B. "Replication Requester System". Der Fachmann spricht hier von Verantwortlichkeitsbereichen (swimlanes). Durch sie ist eine Zuordnung von einer Aktivität zu einem Akteur möglich.

Ein Aktivitätsdiagramm beschreibt einen Fluss von sequentiell aufeinander folgenden Aktivitäten. Es existiert auch eine Syntax für Verzweigungen (if-then) und Aufspaltung (für nebenläufige parallel in verschiedenen Threads ablaufende Aktivitäten). Beides wird aber in diesem Diagramm nicht benötigt.
Diese Abfolge von Aktivitätszuständen hat nix mit OO zu tun. Der Diagrammtyp hat sich aber für die folgenden Aufgaben bewährt:
- Analyse eines Anwendungsfalls
- Verstehen eines Workflows/Geschäftsprozesses.
- Beschreiben eines komplizierten sequentiellen Algorithmus
- Umgang mit Anwendungen mit mehreren Threads.  

Die Kästchen mit den Eselsohren sind sogenannte UML-Notes. Das sind sowas wie Kommentare. Die UML-Notes können in verschiedenen UML Diagrammtypen benutzt werden.

Was oben ein bischen untergegangen ist: Bei den << >> wie in <<uses>>  handelt es sich um sogenannte Stereotypen. Mit ihnen kann die semantische Bedeutung von UML Elementen erweitert, d.h. genauer spezialisiert werden. Der Use Case "Code-Dokument erstellen" steht in einer Beziehung zu dem Use Case "Kategorie erstellen" .<<benutzt>> zeigt an, dass diese Beziehung eine "benutzt"-Beziehung und keine "erbt-von" Beziehung handelt.

Inzwischen dürfte klar sein, dass die UML ein Bündel an verschiedenen Diagramm-Typen für unterschiedliche Aufgabenstellungen für ein Softwareprojekt enthält. Es gibt in UML 1.4 ungefähr 8 bis 10 verschiedene Diagrammtypen. Man kann wirklich nicht sagen, dass 1 Diagrammtyp "wichtiger" ist als ein anderer.  
 
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Semeaphoros am 27.12.03 - 22:05:17
Hab mir den ganzen Thread jetzt noch einmal in aller Ruhe angeschaut und auf mich wirken lassen. Und dann ein wenig zurück überlegt. Interessant ist ja schon, dass ich diese Vorgehensweise schon immer praktiziert habe, natürlich ohne die unterdessen erfolgte Formalisierung, der Weg war hingegen in etwa derjenige, der jetzt durch (R)UP ganz offensichtlich in ein formales Gerüst gegossen wurde.

Als Vorbereitung auf die Verbindung mit LotusNotes: Im Zusammenhang mit meinen Vorträgen über OOP und Prototyping (das gehört hier auch mit hinein, man will ja den Anwender in die Entwicklung mit einbeziehen) bin ich natürlich mit verschiedenen Leuten ins Gespräch gekommen.

Erstens: zu OOP: Offensichtlich ist für viele ND-Entwickler, auch wenn sie intensiv mit LS arbeiten und dabei eigentlich Objekte perfekt benutzen, OO ein absolut fremd(artig)er Begriff. Ja, man interessiert sich dafür, wagt aber den Schritt nicht zu machen, in diese Welt einzusteigen. Ok, LS macht es einem ja nicht leicht, da die Unterstützung für eigenes OOP zwar vorhanden, aber nicht gerade ideal ist. Sprich, der Hauptteil der LoNo Entwicklung wird nach wie vor prozessorientiert durchgeführt, man arrangiert sich irgendwie mit dem OO-Framework und dem Event-Modell, das zugrunde liegt, ohne es aber eigentlich zu verstehen. Von verschiedenen Leuten wurde ich sehr lobend dafür angesprochen, das Thema aufgegriffen zu haben. Schaut man die Literatur an, so stellt man auch rasch fest, dass es für die Basics, die für den "Umsteiger" so wichtig sind, so gut wie keine Literatur gibt.

Zweitens, Prototyping: Ich hab mal in der Runde der Teilnehmer in Dortmund gefragt, wie ihre Erfahrungen und Erwartungen sind: Nur gerade 2 der Teilnehmer haben es überhaupt je versucht, Prototyping zu verwenden. Natürlich waren die Zuhörer dort motiviert, sonst wären sie ja nicht in den Vortrag gekommen, es zeigte sich aber deutlich, dass man zwar ganz gerne "neues" machen möchte, gleichzeitig spürte man aber auch die Angst heraus, mit dem Endanwender schon während der Entwicklung zusammen zu arbeiten. Natürlich gibt es auch auf der Anwenderseite Probleme: das setzt natürlich voraus, dass der Benutzer eben auch Zeit aufwendet schon während der Entwicklung. Und die Leute dazu zu motivieren, ist nicht einfach, geht aber definitiv nicht, wenn die Entwicklerseite nicht von der Wirksamkeit überzeugt ist. Danach habe ich mich nicht mehr gewundert, dass es fast keine Literatur zum Thema gibt, obwohl man doch schon bald seit Jahrzehnten von Prototyping spricht, und in anderen Branchen ist das Verfahren ja schon lange absoluter Alltag.

Fazit: Es geht nicht nur darum, neue Verfahren auszuhecken und umzusetzen, man darf nicht vergessen, die Menschen mitzunehmen. Schliesslich gilt das auch für die Softwareentwicklung selber: Wenn wir die Anwender nicht mitnehmen, mit einbeziehen, dann funktioniert der Prozess nicht (und das gilt jetzt eigentlich ganz allgemein und sagt auch gleich aus, warum das Wasserfall-Model so leicht zu langen Gesichtern führt ....).

Hatte gerade mit jemandem von Lotus-Education einen kurzen Mailwechsel kurz vor Weihnachten und werde in dem Sinne in Orlando weiter diskutieren: Das ist bei der gegenwärtigen IBM-Strategie eindeutig ein Problem, will man die Leute, die heute mit LoNo entwickeln, in die "neuen Welten" mirgrieren, muss man ihnen genau diese Zusammenhänge nahebringen. Das geschieht aber nicht, wenn man nicht genau diesen Leuten spezielle Brücken zur Verfügung stellt in Form von Aus- und Weiterbildung spezifisch auf das Problem des "Paradigmenwechsels" von Prozess-O zu OO und alles was damit zusammenhängt. Ich denke mal, das Bewusstsein dafür ist noch nicht vorhanden.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 28.12.03 - 00:29:44
Use Cases fokussieren sich hauptsächlich auf funktionale Anforderungen an das System. Daneben existieren die sogenannten nicht-funktionalen Anforderungen.
Allgemein spricht man von FURPS+ Requirements.
- Functionality
- Usability
- Reliability
- Performance
- Supportability
- Implementations-Beschränkungen, Komponenten, Interfaces, Domain Rules, Legal Issues

Die meisten dieser Anforderungen sollten laut (R)UP in einem speziellen Dokument gesammelt werden, dem sogenannten Supplementary Specification Document.  Viele der nicht funktionalen Anforderungen sind Gegenstand der Architektur-Analyse. Mehr dazu später.

Ich übernehme das Template von Larman für das Supplementary Specification Document.

+ Functionality
(gemeinsam für viele Use Cases)
Logging und Error Handling
Alle Fehler werden in ein Log geschrieben. Ausserdem erhält der Anwender eine Nachricht in Form einer Messagebox.

- Sicherheit
Ist hier nicht so wichtig

+ Usability
Das User Interface soll möglichst ähnlich wie für die Anwender vertraute Windows-Anwendungen aussehen.

Schnelligkeit, Einfachheit und Fehlerfreiheit sind wichtig, damit die Anwendung benuttz wird.  
 
+Reliability
Außer beim halbautomatisierten Replikations-Prozess handelt es sich bei der Anwendung um eine Standalone-Anwendung. Ausfälle des Netzwerk fallen erst mal aus. Ausfälle von externen Komponenten oder Systemen (RDBMS, Lotus Notes, korrupte xml Datei, Indexierungsservice) sollen dem Anwender in Form einer Messagebox in transparenter Form mitgeteilt werden. Ausserdem werden sie in das log geschrieben.

+Performance
Performance ist sehr wichtig für die Akzeptanz der Anwendung. Um die Responsivität der GUI zu maximieren, soll Multithreading benutzt werden. Die GUI soll nie länger als 0.5 Sekunden blockiert sein.  

+ Supportability
- Adaptability
Als Datenbank soll zunächst eine xml-Datei genommen werden.
Der Database Access Layer wird so designt, dass die xml-Datei einfach durch Lotus Notes oder eine Relationale Datenbank ersetzt werden kann.
Die Anwendung soll mehrsprachlich sein.
- Configurability
Die Wahl der Datenbank (und der spätere Wechsel) soll über eine Konfígurationsdatei (ohne Programmierung) möglich sein.
Die GUI soll ohne Programmierung neue Sprachen unterstützen.

Implementation Constraints
Das Management board hat sich mit einstimmiger Mehrheit für Java als Programmierplatform entschieden.
Grund dafür ist die Einfachheit der Programmierung.

Gekaufte Komponenten
- Lotus Notes
- evtl db2

freie Open Source Komponenten
Open Source ist oft eine gute Idee (es gibt Ausnahmen). Es sollen reife und häufig verwendete Open Source Komponenten eingesetzt werden.
Kandidaten sind:
- Java Swing
- Log4u
- Look and Feel von Carsten Jentzsch (damit Swing nach Windows und nicht wie eine Milka-Kuh aussieht).
- Forms Layout Manager von Carsten Jentzsch (weil das sehr vielversprechend aussieht und ich dem Mann vertraue. Ausser denke ich darüber nach, einen Bericht über das Forms-Layout für den Javaranch Newsletter zu schreiben).
- Für xml entweder DOM oder JDOM. JDOM ist möglicherweise einfacher.
- vermutlich Dinge aus dem utils Package von apache.jakarta
- als Haupt-Entwicklungs-RDBMS MySQL.  

Interfaces- Hardware
PC (inklusive Laptop).

Legal Issues
sauber bleiben und kein Scheiss bauen.

Information in Domain of Interest
...

Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 28.12.03 - 01:05:02
Jens,

ich habe des öfteren Prototyping eingesetzt. Es gibt da ganz eigene projekt-soziale Probleme (die Dauer-Meeting-Falle), vor denen man sich hüten sollte. Oft können auch projekterfahrene Entwickler, als "Anwalt des Endanwenders" auftreten.  
 
Es geht IMNSHO auch nicht darum, einen Prozess in voller Reinheit umzusetzen. Ich kann das auch gar nicht, weil ich da auch nicht so der mega-Experte bin. Nur will ich mich eben wirklich ernsthaft mit (R)UP auseinandersetzen.
Das "der-Anwender-akzeptiert-das-eh-nicht-so"-Argument führt dazu, dass man sich nur oberflächlich mit den vorhandenen theoretischen Prozessen auseinandersetzt. Ich bin mir inzwischen sicher, dass dies zu Ineffizienzen führt. Einige Ineffizienzen in unserem eigentlich effizienten Webservices-Projekt lassen sich genau darauf zurückführen.

Zitat
OOP: Offensichtlich ist für viele ND-Entwickler, auch wenn sie intensiv mit LS arbeiten und dabei eigentlich Objekte perfekt benutzen, OO ein absolut fremd(artig)er Begriff.
Was in LotusScript (und Visual Basic < Visual Basic #) gemacht wird, ist Objekt-Basierung, wobei LotusScript im Gegensatz zu Visual Basic6 bestimmte OO-Features besitzt, die aber nicht wirklich modernen Anforderungen entsprechen (keine Interfaces oder Mehrfachvererbung).
Der Schritt von Objektbasierung zu Objektorientierung ist nicht zu unterschätzen. Eigene Klassen zu erstellen, die wirklich von anderen Programmierern benutzt werden können, ist noch ein weiterer Schritt.
 
Zur Zeit ist keiner da, der die Brücken finanzieren könnte.

Gruß Axel
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: animate am 28.12.03 - 02:48:47
Use Cases fokussieren sich hauptsächlich auf funktionale Anforderungen an das System. Daneben existieren die sogenannten nicht-funktionalen Anforderungen.

so siehts aus. das ist der Punkt, über den ich "gemeckert" habe. du stellst in deinen UseCases öfter solche NFAs (_wie_ soll dass System etwas tun -> per email kommunizieren, in Daten einem bestimmten Format speichern, Informationen in Messageboxen anzeigen).
Wenn du das aus den Use Cases rauslässt, dann hat das auch nix mit zu allgemeinen Anforderungen oder Ungenauigkeit zu tun. Diese Informationen werden natürlich benötigt, aber eher was im Design als in der Analyse.

Zitat
Zitat
OOP: Offensichtlich ist für viele ND-Entwickler, auch wenn sie intensiv mit LS arbeiten und dabei eigentlich Objekte perfekt benutzen, OO ein absolut fremd(artig)er Begriff.


Was in LotusScript (und Visual Basic < Visual Basic #) gemacht wird, ist Objekt-Basierung, wobei LotusScript im Gegensatz zu Visual Basic6 bestimmte OO-Features besitzt, die aber nicht wirklich modernen Anforderungen entsprechen (keine Interfaces oder Mehrfachvererbung).
Der Schritt von Objektbasierung zu Objektorientierung ist nicht zu unterschätzen. Eigene Klassen zu erstellen, die wirklich von anderen Programmierern benutzt werden können, ist noch ein weiterer Schritt.


ich finde, dass LS eigentlich ganz brauchbare Möglichkeiten bietet, um obejktorientiert zu entwickeln (ich muss gestehen, ich habe noch nie Mehrfachvererbung verwendet - natürlich nicht in LS, aber auch nicht in irgendwelchen Designmodellen. Wenn eine Klasse mal ein Interface implementieren soll, dann kann man sich noch helfen, aber bei mehreren wirds dann schon übel, dass Fehlen von Interfaces ist wirklich nicht so schön - aber ich bin auch noch nicht in die Verlegenheit gekommen, so was in LS realisieren zu müssen, dafür gibts ja außerdem auch noch Java, das man nicht vergessen sollte). Was schön wäre, wäre eine IDE, die etwas besser das Programmieren von Klassen unterstützt. Das ist wirklich a pain in the ass mit dem Designer. brrrr.


Zitat
Schaut man die Literatur an, so stellt man auch rasch fest, dass es für die Basics, die für den "Umsteiger" so wichtig sind, so gut wie keine Literatur gibt.

wie wäre es denn mit einem Thread, der sich mit OO (speziell in Lotus Notes) beschäftigt? Ich mache eigentlcih ziemlich viel OO in Notes und würde mich über Diskussionen zu diesem Thema freuen...


*edit*
fällt mir gerade ein: es gibt keine statischen Methoden in LS :-(
da muss man sich immer mit Dummyobjekten aushelfen
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Semeaphoros am 28.12.03 - 07:21:34
Axel:
> Die Brücken sind nicht finazierbar

Da bin ich nicht ganz einverstanden. Da lässt sich nämlich etwas machen: Wenn IBM den Weg vorgibt und innerhalb von "Education" entsprechende Gefässe zur Verfügung stellt,  dann sieht das ganz plötzlich anders aus. Bis dahin stimmt es. Allerdings sollte IBM da ein Interesse daran haben, das zu provozieren. Ich nehme mal an, dass ich da in Orlando mehr darüber erfahre.

Potsmoker:
Ja, es stimmt, das IDE-Interface ist für Klassen-Programmierung sehr schlecht geeignet und dort eine Verbesserung ist sehr wünschenswert. Manch ein Entwickler verwendet daher externe Editoren, was ich seit N6 nicht mehr soo toll finde.

Beide:
Ja, es stimmt, die OO-Unterstützung in LS ist "sort of" rudimentär. Aber es ist wenigstens etwas vorhanden, was man nutzen könnte und das erst noch Vorteile bringt (stabileren Code, zentrale Pflege von Kern-Teilen einer Applikation). In meiner Erfahrung ist der zusätzliche Aufwand für eine OO-Implementierung und der zusätzliche Aerger mit der schlechten IDE-Unterstützung sehr leicht mit besserer Wartbarkeit und schnellerer Entwicklung/Anpassung in einer späteren Phase der Applikation rasch wettgemacht. Der Profit - um den geht es ja schlussendlich - ist also vorhanden durch eine Steigerung der Effizienz. Sagen wirs so, die Steigerung der Produktivität ist grösser als die zweifellos vorhandenen Bremsen.

Ein Thread "Einführung in OO mit LS" ist eine gute Idee. Ich persönlich möchte jetzt noch warten und schauen, was ich in Orlando noch so erfahre. Ansonsten bin ich da sicher dabei, oder fange es an, wenn Du, Potsmoker, es nicht machen möchtest.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 28.12.03 - 11:35:05
so siehts aus. das ist der Punkt, über den ich "gemeckert" habe. du stellst in deinen UseCases öfter solche NFAs (_wie_ soll dass System etwas tun -> per email kommunizieren, in Daten einem bestimmten Format speichern, Informationen in Messageboxen anzeigen).
Wenn du das aus den Use Cases rauslässt, dann hat das auch nix mit zu allgemeinen Anforderungen oder Ungenauigkeit zu tun. Diese Informationen werden natürlich benötigt, aber eher was im Design als in der Analyse.
Hm. Meine frühe Festlegung auf eine Technologie (xml) ist problematisch.
Ansonsten können aber Use Cases sehr detailliert sein. Craig Larman empfiehlt sogar NFAs in Use Cases zu notieren und sie später in Supplementary Specification zu sammeln. Use Cases dienen ja der Kommunikation mit Endanwendern. Ich würde sagen, dass deshalb "Austausch per email" etwas ist, worunter sich der Endanwender plastisch etwas vorstellen kann.
Sehr ausführliche Use Cases unterliegen natürlich der Gefahr, dass sie zu anstrengend zu lesen sind. Da gibt es wohl immer 2 Seiten der Medaillie.
Es existiert auch eine Trennung zwischen business use cases (für grobe Requirements) und detaillierteren technischen Use Cases. Wobei letztere
dem eher der Design-Phase zugehörig sind.
Werd das mal bei Alistair Cockburn nachschlagen.

Erinnert ein bischen an den Witz:
Was ist der Unterschied zwischen einem Methodikder und einem Terroristen?

Mit einem Terroristen kann man verhandeln.  ;D

Deine Beiträge waren auf jeden Fall wertvoll.

wie wäre es denn mit einem Thread, der sich mit OO (speziell in Lotus Notes) beschäftigt? Ich mache eigentlcih ziemlich viel OO in Notes und würde mich über Diskussionen zu diesem Thema freuen...
bin sehr interessiert. Im Domino 6 (oder 5) Entwicklung ist noch eine Menge Platz. Also nur zu :)

fällt mir gerade ein: es gibt keine statischen Methoden in LS :-(
da muss man sich immer mit Dummyobjekten aushelfen

... und keine Introspection.
Das alles an das Domino Objects Modell (Database, View, DocumentCollection, Document, Item, etc) und teilweise deren Events gebunden werden muss, führt zu einer gewissen Starre. Bei Java ist man da wesentlich freier, was dann natürlich auch eine Menge an Komplexität mit sich bringt.
Wegen der größeren Freiheit, konnten aber viele im Kontext von C++ und v.a. SmallTalk entwickelten OO-Prinzipien in der Java-Community einfach übernommen, verbreitet und erweitert werden (Design Patterns).

Ich finde es eine explizit gute Idee, OO-Prinzipien in LotusScript in diesem Forum stärker zu propagieren.
Das sind erprobte Werkzeuge und Vorgehensweisen, die dadrauf warten benutzt zu werden.
 
Ich halte das für einen guten Ansatz. Ich hab um Lotus Notes viel Flurschaden gesehen, weil

a) Rapid Application Development mit einer gewissen "Everything goes. 1_2_3_los Attitude" verwechselt wurde, die sich möglicherweise bei Punk Bands in den 70er/80ern bewährt hat, aber vielleicht doch nix in irgendwie unternehmenskritische Anwendungen zu suchen hat (3-Akkorde-Programmierung).

b) User verunsichert wurden, indem das System durch sehr früh auf den Markt geschmissene Dinge wie LISA/LSA überspannt wurde.
Ein Kollege hat das 2 Jahre bei einem Kunden eingeführt und hat nun ein neues Projekt alle LISA Teile innerhalb eines Jahres wieder zu entfernen.

c) Erfahrene Entwickler durch eigene, barocke und oft sehr kreative Lösungen das System überdehnt haben (Performance-Probleme, System schwer zu durchschauen).

Gruß Axel
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Semeaphoros am 28.12.03 - 12:13:02
Genau in den Bereichen, die Du hier antönst, könnten die paar OO-Brocken, die LS bietet, eben schon gewisse Ordnung bringen (und damit die Entwickler gleichzeitig auf die "neue Welt" vorbereiten).

Was es dazu braucht:

a) Grundlagen von OO [für LS ist das nicht sehr umfangreich]

b) Kenntnis der OO-Bordmittel von LS

c) Eine Handvoll Strategien, wie man sich am besten in das bestehende Notes-Umfeld einklinkt. Du hast das schon angetönt, eines der Probleme ist, dass Notes ein Framework mit seinen bestehenden Objekten wie NotesDocument, Formulare mit Events und so weiter bereits vorgibt.

Aber wir sind schon fast dabei, einen Online-Kurs zu konzeptionieren.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 29.12.03 - 10:43:35
ok. Versuche nun stichwortartiger zu werden. Das wird sonst für den Leser und v.a. für mich zu viel. Schliesslich muss ich auch noch den ganzen source code schreiben.

In den Dokumenten für die Konzeptualisierungsphase (Inception Phase) fehlt noch das Visions-Dokument. Hier wird vor allem aufgeführt, welche Probleme die Software aus Sicht des Anwenders lösen soll. Ausserdem werden high level features (d.h. nicht detailliert) des Systems notiert.

Ich hab noch einen use case gefunden. Der user soll zwischen verschiedenen Persistenz-facilities (xml, rdbms, lotus-notes) wechseln können. Wenn er sich dafür entscheidet, müssen alle bestehenden Code-Dokumente von der alten Datenbank in die neue Datenbank geschrieben werden.
Neuer Use Case: Datenbank wechseln

Weiterhin fehlt das Glossar. Da die Zielgruppe Softwareentwickler sind, ist die sprachliche Lücke zwischen Entwicklern und Endanwendern gering.
Glossar:
-Code Dokument: Datensatz, der eine Lotus Notes Funktion im Sinne des Systems ausreichend beschreibt.

Die nächste Phase ist die Entwurfs (Elaboration)-Phase.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 29.12.03 - 18:44:53
nächste Phase Entwurf (Elaboration).

Ziele:
- Die Mehrzahl der Anforderungen sind erkannt und beschrieben
- technische Risikoquellen für das Projekt sind fokussiert und gelöst
- Die Kernelemente der Architektur stehen fest

Dies ist ein iterativer Prozess. Es soll nicht darum gehen zunächst die ganze Analyse oder das gesamte Design zu erstellen.
Vielmehr sollen in kleineren Iterationsschritten immer mehr Teile der Anforderungen in testbaren Produktions-Code umgesetzt werden.
 
Es soll zunächst ein "architektonischer Prototyp" erstellt werden, der nur einen Teil der Anforderungen erfüllt. Dies ist kein Wegwerf-Prototyp. Vielmehr dient er als immer größer werdender Kern des Gesamtsystems.
Besonderer Fokus soll auf besonders riskante Bereiche gelegt werden. Da dies ein relativ einfaches Projekt ist, gibt es hier keine besonders riskanten Bereiche.
Das sah z.B. bei unserem Webservices Projekt anders aus. Da haben wir uns früh darauf fokussiert, aus Domino5 heraus mit einem apache.axis-Webservice auf Tomcat zu kommunizieren. Sowas steht nicht in den Büchern. Ist aber ehrlichgesagt auch nicht sooo die Raketen-Wissenschaft.

Konzentriere mich also auf den architektonischen Prototypen. Ein "wide and shallow" Design und Implementierung des Gesamtsystems.
.
Die separaten Prozesse, Layers, Pakete und Subsysteme sowie deren allgemeinen Verantwortlichkeiten und Schnittstellen sollen gesucht werden.
 
Die Schnittstellen zwischen den Systemen.
Hier etwa zwischen dem Code-Repository Projekt und den unterschiedlichen Datenbanktypen sowie dem Indexierungsservice. Auch das Userinterface fällt in diesen Bereich.

Vereinfachende, aber alle horizontalen Bereiche umfassende Szenarien werden implementiert. Mit horizontalen Bereichen ist das User Interface, die Geschäftslogik und die Persistierung der Daten in einer Datenbank gemeint.

Zudem werden alle Anwendungsfälle weiter untersucht und spezifiziert.
Zunächst soll aber die OO-Analyse, das Design und die Implementierung des Anwendungsfalls "Code-Dokument erstellen" als roter Faden für die Implementierung des architektonischen Protoypen dienen.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: animate am 29.12.03 - 21:32:52
sorry, wenn ich wieder mecker. ich würde auf jeden Fall mal ein Klassenmodell für die Analyse machen.  Kannst du ganz einfach aus deinen UseCases ableiten und das Teil macht das Ganze anschaulicher.  Auch wenns scheinbar noch so trivial ist.
Außerdem bildet es auch die Basis für dein Entwurfsmodell.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 29.12.03 - 22:23:59
sorry, wenn ich wieder mecker.
Ist kein Gemecker. Ist konstruktive Kritik.
ich würde auf jeden Fall mal ein Klassenmodell für die Analyse machen.  Kannst du ganz einfach aus deinen UseCases ableiten und das Teil macht das Ganze anschaulicher.  Auch wenns scheinbar noch so trivial ist.
Außerdem bildet es auch die Basis für dein Entwurfsmodell.
gemach. gemach. ich bin dabei.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Semeaphoros am 29.12.03 - 22:40:42
Potsmoker:
Sehe ich auch als konstruktive Kritik. Macht den Thread zusätzlich interessant.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 30.12.03 - 02:27:13
Für den Use Case „Code Dokument erstellen“ generiere ich ein sogenanntes System Sequence Diagram. Das ist eine Sequenz an Nachrichten, die der Anwender mit dem System austauscht. Das System selbst wird dabei als black box betrachtet.

Inzwischen bin ich überzeugt, dass Potsmokers Einwände zu 95% korrekt waren. Ich habe Fehler gemacht. Ich bringe den Use Cases in ein vollständiges Format und ändere ein paar Dinge. Tatsächlich war der Begriff Datenbank unglücklich gewählt. Korrekt ist es zunächst bei einem Begriff zu bleiben, der aus der Welt der Problem-Domäne und nicht der Lösungs-Domäne angehört. Ich wähle also Code-Dokument Katalog statt Datenbank.
Ausserdem war es ein bischen design-overkill, den Anwender in die Rollen code-document producer, code-document consumer, etc. aufzuspalten.
Für dieses kleine System reicht eine Rolle Anwender, die mehrere Funktionen im System ausfüllt:

UC1: Code Dokument erstellen

Primärer Akteur: Anwender
Stakeholders and Interests:
[...] hier zu trivial

Main Success Scenario
Preconditions: Anwender ist im System authentifiziert
Postconditions:
Das neue Code-Dokument ist im Code Dokument Katalog eingefügt.
Der Indexierungsservice hat das Code-Dokument indexiert.
Das Code-Dokument kann über die Kategoriesuche und die Volltextsuche jederzeit aufgerufen werden.

Main Success Scenario:
1.   Anwender startet Erstellung eines neuen Code Dokuments
2.   Anwender fügt die benötigten textlichen Informationen  (Beschreibung, Beschreibung der Verwendung, code)
3.   Anwender wählt bei Bedarf aus der Liste der bestehenden LotusScript-Funktionen die aus, auf die der code im neuen Code-Dokument zugreift.
4.   Anwender wählt die Kategorie des neuen Code Dokuments
5.   Anwender teilt mit, dass Eingaben abgeschlossen.
6.   System prüft Korrektheit der Eingaben.
7.   Indexierungsservice indexiert Beschreibung.
8.   System fügt Code Dokument dem Code-Dokument Katalog hinzu und persistiert diese Änderung in eine Datenbank (hehe).
9.   System logged erfolgeiche Erstellung des neuen Code Dokuments.
10.   System teilt Anwender mit, dass Code-Dokument erfolgreich dem Code-Dokument Katalog hinzugefügt wurde.

Extensions (or Alternative Flows)
4. a) Anwender erstellt eine neue Kategorie -> Use Case „Neue Kategorie erstellen”

6.a) Anwender wird mit einer Nachricht auf die fehlenden Eingaben. Zurück zu 3.

7.a) Indexierung schlägt fehl
8.a) System fügt Code Dokument dem Code-Dokument mit dem Attribut „Code-Dokument nicht indexiert“ hinzu und persistiert diese Änderung in eine Datenbank.
9.a) System locked Erstellung des neuen Code Dokuments mit Hinweis auf fehlende Volltextindexierung.
10.a) System teilt Anwender mit, dass Code-Dokument erfolgreich dem Code-Dokument Katalog hinzugefügt, aber nicht volltextindexiert wurde.
11.   Bei einem Neustart des Systems wird versucht den Volltextindex zu erstellen (Teil des startup Use Cases!).

8.a) Hinzufügung des Code Dokuments zum Code Dokument Katalog und ?ersistierung diese Änderung in eine Datenbank.scheitert.
9.a) System logged gescheitertes Hinzufügen des Code Dokuments zum Code Dokument Katalog
10.a) User erhält Nachricht über gescheitertes Hinzufügen des Code Dokuments zum Code Dokument Katalog


Man kann nun noch für das Main Success Scenario ein sogenanntes System Sequence Diagram erzeugen. Das Sequence Sequence Diagram enthält die zwischen den Akteuren gesendeten Nachrichten. Dabei wird das System als Black Box betrachtet.
Ich habe ein bischen die Orthodoxie verlassen, indem ich nicht nur die Interaktion zwischen dem primären Akteur „Anwender“ und dem System zeige, sondern auch die Interaktion mit den sekundären Akteuren Datenbank, Indexierungsservice und Loggingservice. Ob das sinnvoll ist, kann ich nicht beurteilen. Eigentlich verliert das System dadurch ein wenig seinen (passiven) black box Charakter. Es ruft ja selber akiv die Operationen indexCodeDocument(), saveCodeDocument() und logMessage() auf.
Ich finde, man muß das nicht so päbstlich sehen. Modelle sind nie richtig oder falsch sondern immer mehr oder weniger nützlich. Bubbles don’t crash. An einem ausführbaren Programm kann in der Regel gut gezeigt werden, dass es nicht funktioniert. Bei einem Modell ist das schwieriger. Ein Modeller kann sich besser rausreden als ein Programmierer.

Da die deutsche Sprache in Computern sowieso meist zu einer kruden Mischung aus Deutsch und Englisch führt, nehme ich Englisch als Sprache. Als Input für die Namensfindung benutze ich den Text des Use Cases.

Beispiel:
Anwender wählt die Kategorie des neuen Code Dokuments
wird zur Operation selectCategory() usw.
 
Dieses generelle Vorgehen ist charakteristisch für den (Rational) Unified Process. Es wird sich von dem spezifischen Problem in der Welt der Anwender immer näher der Lösung, dem Computerprogramm angenähert. Auf dem Weg wird ein Haufen an Dokumenten erstellt. Bei jedem neuen Schritt wird auf die in die vorherigen Schritte erstellten Dokumente zurückgegriffen. Trotz aller Objektorientierung geht man also davon aus, dass die Domäne des Geschäftsprozesses, der durch die Software unterstützt werden soll, unterschiedlich ist von der Welt der Software. Ansonsten bräuchte man nicht diesen komplexen Analyseprozess. Mit Objektorientierung wird nur die semantische Lücke zwischen Geschäftsbereich und Software geringer, nicht geschlossen.

(http://www.atnotes.de/attachments/SSDCreateCodeDocumentz.gif)

Die Kästchen oben beschreiben den Akteur. Ich stelle sie als UML-Objekte dar. Der Syntax von UML-Objekten ist Objektbezeichner:Klassenbezeichner. Ich benötige keinen Objektbezeichner, deshalb nehme ich :Klassenbezeichner. Die vertikalen gestrichelten Linien sind die Objektlebenslinien. Das Diagramm zeigt, dass die Akteurs-Objekte länger leben als die Zeitspanne des dargestellten Use Cases. Die Pfeile stehen für Nachrichten, die zwischen den Objekten ausgetauscht werden. Eine Nachricht ist: Objekt x ruft die Operation a des Objekts y auf.

Beispiel: Der Akteur User ruft die Operation selectFunctionsUsed() des System auf.

Die Begriffe Operation und Methode werden oft synonym verwendet. Das ist nicht ganz richtig. Eine Operation bezeichnet lediglich den Methoden-Header. Methode strenggenommen nur die Implementierung.

Code
public String intToString(int num) {
   return “” + num;
}
ist eine Methode. (Header und Body).

Code
public String intToString(int num)
die entsprechende Operation der Klasse, die von ausserhalb oder innerhalb eines Objekts der Klasse angesprochen werden kann. Da wir uns im konzeptionellen Analyse-Modus und nicht im Implementierungs-Modus befinden, interessieren uns nur die Operationen, nicht die Methoden.  

Rückgaben von Operationen können optional als gestrichelte Pfeile angezeigt werden. Der Anwender sendet dem System eine Nachricht, indem er dessen Operation saveCodeDocument() aufruft.
Dies führt zu einer Sequenz von Nachrichten, die zwischen den Akteuren System, Database, IndexService und LoggingService gesendet werden. Am Ende erhält der Anwender „message“ als Rückgabewert der Operation.
In diesem frühen konzeptionellen Diagramm habe ich auf Operationsparameter und die Spezifizierung der Rückgabewerte verzichtet. Ein Modell soll nicht die wirkliche Welt darstellen, sondern sich auf die wichtigen Dinge fokussieren. Bubbles don’t crash.

Von diesen Operationen lassen sich später die tatsächlichen Methoden des ausführbaren Systems ableiten.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: animate am 30.12.03 - 03:10:25
Der renovierte UC1 gefällt mir jetzt echt sehr gut. Eigentlich vorbildlich.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 30.12.03 - 18:33:34
Es ist nun an der Zeit, sich dem statischen Domänen Modell zuzuwenden.
Die Use Cases und das System Sequence Diagramm beschreiben eine dynamische Sicht auf Geschäftsprozesse (eine Funktion notieren, kategorisieren und ablegen, Funktionen suchen, ). Es sollen nun aus einer konzeptionellen Perspektive heraus die statischen Entitäten und Akteure (konzeptionelle Klassen) dieses Geschäftsprozesses, ihre Beziehungen untereinander sowie ihre Attribute herausgearbeitet werden.
Dies ist der entscheidende objekt-orientierte Schritt dieses Analyse-Prozesses. Die betrachtete Geschäfts-Domäne wird in verschiedene konzeptionelle Klassen dekompositioniert

Die Dokompisitionen der Geschäftsprozesse in der Analyse strukturierter Softwareentwicklung fokussiert sich vornehmlich auf die Prozesse und Funktionen, die objekt-orientierte Methode fokussiert sich auf die Aufteilung in konzeptionelle Klassen (Objekte). .

Das Klassenmodell aus der konzeptionellen Perspektive wird später im Design Modell in eine objektorientiertes Klassenmodell für die Softwarelösung transformiert werden.

Das System Sequence Diagramm (und die später im Design zu erstellenden Interaktionsdiagramme) beschreiben eine dynamische Sicht auf das Objektmodell der betrachteten Domäne. Das Klassenmodell eine statische Sicht.

In 3 Schritten werden jetzt
1. Die Klassen gesucht
2. Die Beziehungen zwischen den Klassen untersucht
3. Attribute für die Klassen hinzugefügt

Der erste (und wichtigste) besteht nun darin, die Analyse Klassen zu finden. Es wird gesagt, es ist besser ein Domain Modell über- als zu unterzuspezifizieren.
Wie finden wir nun diese konzeptionellen Klassen?
Larman führt 2 Techniken auf:
1. Aus allgemeinen Listen von Kategorien von konzeptionellen Klassen
2. Jedes Substantiv in einem Text über die Geschäftsdomäne (z.B. die Use Cases) ist ein Kandidat für eine konzeptionellen Klasse.
 
Ich wende Larmans Kategorie-Listen auf die bisher bekannten Use Cases an. Dabei benutze ich die Substantive in den Texten der UseCases als Kandidaten für konzeptionelle Klassen. Rein technische Komponenten, wie LoggingService und Database sind nicht Bestandteil des Domain Models. Der IndexingService jedoch schon, da er das Modell um einen Aspekt aus Anwendersicht erweitert:
LarmanKlassen im Projekt
physische Objekte
Beschreibungen von Sachen CodeDocument
Orte
Transaktionen
Items in Transaktionen
Rollen von PersonenUser
Container für andere DingeCodeDocumentCatalog, UserCatalog, ReplicationRequest, ReplicationResponse, SearchHits,
Dinge in einen ContainerReplicationRequestItem.
Technische Geräte ausserhalb des SystemsIndexingService
Abstrakte KonzepteCategory
Organisationen
Ereignisse
ProzesseFullTextSearch, CategorySearch
Regeln und Policies
Verträge
finanzielle Instrumente und Dienste
Dokumente, Bücher

Dies ist keine abschliessende Liste. In späteren Analysen werden weitere Klassen gefunden und bestehende verworfen.

Nun sollen die statischen Verbindungen zwischen diesen Klassen gesucht werden.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 31.12.03 - 00:00:15
Es geht nun darum, im Domain Modell Assoziationen zwischen den Klassen (genauer den Instanzen der Klassen im Programm) herzustellen.

Die Dauer der Beziehung wird dabei nicht im Fokus. Die Beziehungen können lang- oder kurzfristig sein.

Die Assoziation wird durch eine Linie zwischen den Klassen dargestellt. Im Domain Modell macht es oft Sinn die Assoziationsbeziehung durch einen Bezeichner wie contains, owns, etc. näher zu charakterisieren.

An beiden Typenden  heissen Rollen. Die Rollen besitzen neben einem Namen (oft nicht benutzt) und einer Navigierbarkeit (in Analysemodellen in der Regel nicht benutzt) eine Kardinalität (multiplicity). * steht für beliebig viele. Mögliche Kardinalitäten sind Zahlen oder Zahlenmengen wie 1 oder 0...3 oder 1,2,4.

Beispiel im Diagramm: Ein CodeDocumentCatalog enthält * (also 0 bis unendlich viele) CodeDocuments. Ein CodeDocument ist in einem CodeDocumentCatalogCatalog enthalten.

2 Typen können mehrere Assoziationen untereinander haben. Ein ReplicationRequest ist requested-by einem User. Ein Replication ist directed-to einem User (2 Beziehungen im Modell).

Zu viele Assoziationen verschlechtern die Lesbarkeit eines Domain Modells. Manche Assoziationen sind wichtiger als andere.

Normalerweise werden alle UML Diagramme von links oben nach rechts unten gelesen. Die schwarzen Pfeile sind nur da die Leserichtung des Bezeichners der Assoziation zu erleichtern.

(http://www.atnotes.de/attachments/DomainModel.gif)
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: animate am 31.12.03 - 00:54:44
Ahh, das Klassendiagramm...

Ein paar Anmerkungen/Fragen dazu hab ich wieder (dabei gehe ich davon aus, dass das ein UML-Diagramm ist):

Vorsicht bei den 1:1-Beziehungen. So eine Beziehung zwischen User und CodeDokument würde bedeuten, dass ein Dokument von genau einem User erzeugt wurde (was ja auch richtig ist), aber ein User auch nur ein Dokument erzeugen kann (zumindest lese ich das so). 1:1-Beziehungen kommen vergleichsweise selten vor, ich würde alle nochmal prüfen.

Ist Category eine Fachklasse oder ist das "nur" ein Attribut vom Codedokument? Welche Aufgaben hat diese Klasse?

Bei der Beziehung zwischen User und ReplicationRequest bin ich nicht ganz sicher, ob diese zwei Beziehungen nötig/richtig sind.
Dein Modell würde ich so lesen, dass der User Beziehungen zu zwei verschiedenen ReplicationRequest-Objekten hat. In meinen Augen ist aber das Objekt, das er erzeugt und das, das er zurückbekommt, das gleiche, dann wäre in meinen Augen eine "einfache" Beziehung angebracht.
(Ich habe gerade mal in dem Buch nachgeschlagen, das du scheinbar verwendest. Da ist ja dieses Flight-Airport-Beispiel drin. Dieses Beispiel könnte z.B. bedeuten, dass ein Flug-Objekt (LH522) zu einem Airport-Objekt(FFM) fliegt und von einem anderen Airport-Objekt(MUC) aus startet. Und umgekehrt kennt ein Airport-Objekt(FFM) mehrere abgehende Flug-Objekte(BA1,LH2,SA3) und mehere ankommende(RA4,LH5,CP6))

Sehr schön finde ich das "Listen-Pattern" bei RRequest und RRequestItem und bei den anderen beiden Stellen (zumindest im Moment ;-)


Viel Spaß noch beim Modellieren.
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel_Janssen am 31.12.03 - 13:00:39
Vorsicht bei den 1:1-Beziehungen. So eine Beziehung zwischen User und CodeDokument würde bedeuten, dass ein Dokument von genau einem User erzeugt wurde (was ja auch richtig ist), aber ein User auch nur ein Dokument erzeugen kann (zumindest lese ich das so).
Ja. Das ist ein Fehler.

1:1-Beziehungen kommen vergleichsweise selten vor, ich würde alle nochmal prüfen.
Ich glaub ein paar der 1:1 kommen dadurch, dass es sich um eine Desktop standalone Anwendung handelt, aber ich habe noch einiges gefunden, wo es nicht korrekt war (s.u.).

Ist Category eine Fachklasse oder ist das "nur" ein Attribut vom Codedokument? Welche Aufgaben hat diese Klasse?
Es ist eine Klasse. Ein Dokument ist einer Kategorie zugeordnet (wobei man sich hier fragen kann, ob auch Mehrfachkategoriesierung möglich sein soll. Erstmal nich). Jede Kategorie ist wiederum einer oder keiner Oberkategorie zugeordnet.... Moment. Sehe gerade, dass bei der isChildOf Beziehung die 1er Kardinalität nicht korrekt ist. Es muss heissen Category isChildOf 0...1 Category.
Category ist auf jeden Fall eine Fachklasse, da es ein Referenzobjekt ist: Es soll neben dem Namen eine Sortiernummer haben (steht nicht im Use Case). Ausserdem können unter 2 verschiedenen Oberkategorien gleichnamige Unterkategorien auftauchen. Das Konzept muss also mehr enthalten als einen einfachen Wert (etwa der Name der Kategorie) --> Value Object und ist auch durch diesen Namen nicht eindeutig identifizierbar.

Bei der Beziehung zwischen User und ReplicationRequest bin ich nicht ganz sicher, ob diese zwei Beziehungen nötig/richtig sind.
Dein Modell würde ich so lesen, dass der User Beziehungen zu zwei verschiedenen ReplicationRequest-Objekten hat. In meinen Augen ist aber das Objekt, das er erzeugt und das, das er zurückbekommt, das gleiche, dann wäre in meinen Augen eine "einfache" Beziehung angebracht.
Es gibt 2 unterschiedliche User-Objekte. Ein User der den ReplicationRequest stellt und ein anderer an den der ReplicationRequest gerichtet wird. Es gibt in der Anwendung immer nur 1 oder 0 aktive ReplicationRequests. Die ReplicationRequests der Vergangenheit interessieren nicht. Vielleicht eine Beziehung zwischen CodeDocumentCatalog und ReplicationRequest?

Das ist sowieso alles noch unvollständig. Is halt iterativ ;D

Larmans Buch ist gut. Es ist nur manchmal ein wenig undidaktisch organisiert. Nach dem zweiten durchlesen findet man sich dann aber ganz gut zurecht. ::) Es ist das wichtigste Buch für die IBM certi.
Arlow, Neustadt, UML and the Unified Process ist vermutlich das bessere Lehrbuch.
Fowlers UML Buch sollte man sowieso haben.
Ich glaub ich werd mir Fowlers, Analysis Pattern von 1996 zulegen (28,80 Euro auf Amazon.de). Ich glaube ich hab jetzt begriffen, warum auch für OO-A das Pattern-Konzept gut passt.    

Gruß Axel  
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel Janssen temp am 05.01.04 - 15:09:53
werde das weiterführen.
Hab nur gerade jetzt wenig Zeit.

Interessante querverweise:
In diesem zeitlosen Klassiker eines Bliki-Eintrag vom 25.11.2003  zeigt Martin Fowler (1er der 5 top Publizisten in Java/OO Welt), dass auch mit J2EE sehr oft prozedural programmiert wird.
http://www.martinfowler.com/bliki/AnemicDomainModel.html

Fowler_OO ist der Prozess, den ich hier versuche. Von Domain Model zu echten Objekten.

Hier ist eine Reaktion aus dem Volk:
http://www.jroller.com/page/chiara/20040104

und noch eine:
http://www.jroller.com/page/cv/20040105#the_domain_model_diet

und noch eine:
 http://weblog.anthonyeden.com/archives/000053.html

Ist nur Fowler_OO OO?
Titel: Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
Beitrag von: Axel Janssen temp am 05.01.04 - 15:19:40
ein total hippes Thema ist momentan paper prototyping für (wohl) guis.

(von meinem Lieblingsblog:)
http://www.jroller.com/page/cv/20040101

werd am Wochenende mal meinen scanner reaktivieren.