Autor Thema: Projekt: P2P Java Gui Plattform für LoNo Funktionen  (Gelesen 31371 mal)

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #20 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
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #21 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
« Letzte Änderung: 28.12.03 - 04:18:53 von potsmoker »
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #22 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.
« Letzte Änderung: 28.12.03 - 10:30:15 von Semeaphoros »
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #23 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
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #24 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.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #25 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.
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #26 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.
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #27 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.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #28 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.
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #29 am: 29.12.03 - 22:40:42 »
Potsmoker:
Sehe ich auch als konstruktive Kritik. Macht den Thread zusätzlich interessant.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #30 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.



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.
« Letzte Änderung: 30.12.03 - 02:46:28 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #31 am: 30.12.03 - 03:10:25 »
Der renovierte UC1 gefällt mir jetzt echt sehr gut. Eigentlich vorbildlich.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #32 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.
« Letzte Änderung: 30.12.03 - 18:45:12 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #33 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.

« Letzte Änderung: 31.12.03 - 00:02:48 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #34 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.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #35 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  
« Letzte Änderung: 31.12.03 - 13:26:53 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Axel Janssen temp

  • Gast
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #36 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?
« Letzte Änderung: 05.01.04 - 15:42:55 von Axel Janssen temp »

Axel Janssen temp

  • Gast
Re:Projekt: P2P Java Gui Plattform für LoNo Funktionen
« Antwort #37 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.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz