UML Komponenten als Java-Klassen abbilden

N

noobstudent

Gast
hi,
wir hatten dieses semester uml gelernt, was für mich totales neuland ist. jedoch kenne ich bereits recht gut java und wollte mir ein komponenten diagramm als java klassen abbilden um ein besseres verständnis davon zu erhalten. nur stehe ich da irgendwie auf dem schlauch, da ich nicht weiß, welche klasse wen kennt...

ich bin mir nichtmal so sicher, ob das überhaupt geht. aber soweit ich es verstanden habe, sollte es schon möglich sein, da selbst eine einzelne klasse eine komponente ist. (...richtig??)

foglendes beispiel habe ich mir aufgemallt:


A, B und C sind komponenten und DS, ES und FS sind jeweils die schnittstellen. in java müsste das dann so aussehen:

Java:
class A {
   B b;
   C c;
   DS ds;
   ES es;
   FS fs;
}

class B {
   DS ds;
   ES es;
}

class C {
   ES es;
   FS fs;
}

interface DS { }
interface ES { }
interface FS { }

- liege ich damit richtig, dass die komponente A sämtliche anderen komponenten UND interfaces kennen muss? denn A muss ja B und C verbinden.
- muss B auch C kennen, oder reicht es wenn lediglich das angebotene interface von C bekannt ist?
- sehe ich das richtig, dass jede komponente jeweils das angebotene und konsumierte interface kennen muss?


gruß :)
 
M

Marcinek

Gast
Ich weiß nicht 100 %, was das Schaubild zeigen soll.

Ein UML Klassendiagramm, aus dem man 1:1 Java Klassen erstellen kann ist es sicherlich nicht.

Hier musst du dir erstmal eine geeignete Datenstruktur überlegen. Da ist die Frage, was das für einzelene Komponenten sind und wie sie sich verhalten zueinander...
 

Spin

Top Contributor
Hallo TO,

ich beschäftige mich auch gerade mit Komponentendiagramme und habe herausgefunden, dass eine Komponente eine einzelne Klasse sein kann, aber auch ein Paket aus Klassen. Stelle dir vor du hast ein Paket aus Klassen, die sich um das parsen von Zeichen und Dateien kümmern. Es gibt einen XMlParser, einen JsonParser, einen Prser um Bilder zu decodieren usw. Das wäre die Parser Komponente. Aber auch eine einzelne Klasse kann eine Komponente sein, wie beispielsweider ein FileLoader oder Configuration. Anschließend werden abhängigkeiten definiert. Es gibt das Provider und das Required Interface. Eine Komponente kann Objekte anbieten und Objekte benötigen.

In deinem Beispiel ist A eine Komponente und B,C Subkomponenten.
Die Komponente A ist abhängig von Ereignissen, die außerhalb des Komponentensystems passieren. Es wird also die innerer Struktur von der äußeren abgekoppelt. Ein Beispiel wäre ein UserLogin. Ohne User Login kann keiner dein System betreten. (Beispiel für FC) Anders rum kann dein System nur Funktionieren, wenn beispielsweise Daten in der Datenbank (Beispiel für DS) vorhanden sind oder wenn das Internet erreichbar ist, oder was weiss ich ;)

Die Komponente C könnte beispielsweise ein Kunde sein und die Komponente B eine Bestellung. Ohne Kunde auch keine Bestellung, daher die Abhängigkeit. Weiter sobald eine Bestellung rein kommt, müssen Daten in der Datenbank vorliegen, was soll sonst der Kunde bestellen können?

Mit meinen Beispielen überlege dir nochmal die Kompositionen ;) Jetzt kennt gefühlt jeder jeden bei dir, was aber nicht sein muss. Denk dran Komponenten muss man auch austauschen können.

grüße spin
 
N

noobstudent

Gast
Ein UML Klassendiagramm, aus dem man 1:1 Java Klassen erstellen kann ist es sicherlich nicht.
ne, es ist ein komponentendiagramm :p
aber mal spass bei seite, es ist sehr abstrakt gehalten (was ich auch erreichen wollte) und ich denke auch, dass es syntaktisch korrekt ist. dementsprechend müsste es sich auch in java code darstellen lassen...zumindest war das mein gedankengang.


Jetzt kennt gefühlt jeder jeden bei dir, was aber nicht sein muss.
ja mindestens einen fehler habe ich gefunden. mein vorgehen war eigentlich ganz simpel:
- A, B und C müssten mindest die schnittstellen kennen, die sie anbieten.
- da A jeweils beide schnittstellen delegiert, müsste A auch die anderen komponenten kennen

daraus würde sich nun ergeben:
Java:
class A {
   B b;
   C c;
   DS ds;
   FS fs;
}
 
class B {
   DS ds;
   ES es;
}
 
class C {
   ES es;
   FS fs;
}
 
interface DS { }
interface ES { }
interface FS { }


ich wollte mir also sowas wie ein rezept machen, wie ich ganz abstrakt komponenten zu code mappen kann.
wobei ich irgendwie das gefühl habe, dass die komponente A die komponenten B und C nicht kennen sollte, sondern nur deren schnittstellen. wegen der austauschbarkeit, wie du schon sagtest.

somit würden alle komponenten jeweils nur ihre eigenen schnittstellen kennen:
Java:
class A {
   DS ds;
   FS fs;
}
 
class B {
   DS ds;
   ES es;
}
 
class C {
   ES es;
   FS fs;
}
 
interface DS { }
interface ES { }
interface FS { }

die verdrahtung müsste dann aber irgendwo anders passieren, z.b. mittels dependency injection. das problem wäre nur, dass dieses "externe", also da wo die verdrahtung stattfindet, das komplette modell kennen müsste...


Code:
Mit meinen Beispielen überlege dir nochmal die Kompositionen ;)
werde ich heute abend mal machen. evtl. verstehe ich es ja dann und kann es auf dieses beispiel übertragen.
 

Andreas-P

Neues Mitglied
Hi,

das Problem ist, dass folgendes eben nicht möglich ist:

...dass es syntaktisch korrekt ist. dementsprechend müsste es sich auch in java code darstellen lassen...


Die Begründung lieferst Du auch gleich mit, in dem Du sagst, dass es sehr abstrakt gehalten ist. Gerade das ist ein Kern der UML, das man Sachverhalte durch verschiedene Sichten Abstrakt und Verständnis fördernd darstellen kann, ohne das es dafür eine explizite Lösung in Form von Quellcode gibt oder geben muss.

Vergegenwärtige dir, dass Du mit salopp gesagt 'ein paar Rechtecken', ein ganzes Softwaresystem bestehend aus vielen Millionen Zeilen Code in der UML darstellen kannst (Stichwort: Layer Model). Hier wird viel deutlicher wieso man trotz syntaktischer Korrektheit, keine konkreten Klassen oder gar die gesamte Software daraus ableiten kann.

Ähnlich ist es für dein Komponentendiagramm, es gibt hier also mindestens unendlich viele richtige Interpretationen und genauso viele falsche. Die Einzige Aussage die sich mit deinem Diagramm treffen lässt:

A ist eine Komponente bestehend aus B und C. A bietet als Schnittstelle nach außen DS an, in diesem Fall realisiert durch die Komponente B. A bzw. dessen Subkomponente C benötigt die Schnitstelle FS. B und C sind über die Schnittstelle ES verbunden.

Diese Informationen können genügen, falls man jemanden den Zusammenhang zwischen Softwarekomponenten erklären möchte. Oder auch nicht, falls man konkreten Code daraus erzeugen will, hier ist dann ggf. eine weitere Modellierung auf Klassenebene notwendig.

Für die Generierung von Quellcode sind eigentlich nur folgende Kandidaten geeignet:

  • Klassendiagramme
  • Statecharts
  • Sequenzdiagramme

Viele Grüße,
Andreas
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Sind EJB Komponenten auch mit Java Swing nutzbar? Softwareentwicklung 8
A MVC & getter für GUI Komponenten Softwareentwicklung 5
G Umwandung von Vb auf Java Softwareentwicklung 1
von Spotz Kommunikation zwischen Java und Container Orchestrator (Microservices) Softwareentwicklung 11
S Microservices in Java Spring: Nebenläufigkeitsprobleme lösen Softwareentwicklung 6
temi Elementfunktionen vs. Nichtelementfunktionen in Java Softwareentwicklung 20
R Umsetzungen in Java vs. Umsetzungen auf Datenbankebene Softwareentwicklung 9
L Module Eclipse Java 9 Softwareentwicklung 12
R Software-Architekt (Schwerpunkt Java) Softwareentwicklung 9
S VB.NET / C# als Java-Entwickler? Softwareentwicklung 2
J Java Kentnisse vertiefen oder andere Programmiersprache probieren? Softwareentwicklung 8
U Java vs. anderen plattformunabhängige Programmiersprachen Softwareentwicklung 8
S JNI Java from C Softwareentwicklung 0
H [Java]Regex Hilfe Softwareentwicklung 3
D Teamspeak Java html app Softwareentwicklung 5
S Java Anfänger hat Probleme mit Scanner Softwareentwicklung 6
C Lohnt es sich noch ein neues Projekt in C++ anstatt Java zu realisieren? Softwareentwicklung 4
U Java oder welche Sprache? Softwareentwicklung 98
MrWhite Ist Java gar nicht sooo objektorientiert??! Softwareentwicklung 16
J Java Long-Werte in C++ auslesen Softwareentwicklung 4
K Mit "Java" html-Seite entscripten Softwareentwicklung 6
Airwolf89 Theoretische Frage - In Java Java-Programme schreiben Softwareentwicklung 5
G Mischsprache aus Java & C# Softwareentwicklung 23
H COBOL und Java Softwareentwicklung 17
H Java als Backend, Javascript als View Softwareentwicklung 3
U Decorator Pattern in der Java API Softwareentwicklung 6
J Java Software nach C++ portieren Softwareentwicklung 6
C Unterschiede: C++ vs. C# vs. Java Softwareentwicklung 21
G Umstieg Java/Oracle => C#/MSSQL Softwareentwicklung 13
A Jira durch Java ansprechen Softwareentwicklung 18
M Immutable Objekte und funktionales Programmieren in Java oder Scala Softwareentwicklung 34
B [Web 2.0] Java vs PHP Softwareentwicklung 28
Raidri Flex mit Java Softwareentwicklung 2
L Java + WCF Softwareentwicklung 9
Airwolf89 Java-Programm in C++ portieren Softwareentwicklung 4
T Kapselung nich vollständig umgesetzt in Java? Softwareentwicklung 4
J Korpus mit Python einlesen - weiterbearbeiten mit Java Softwareentwicklung 4
N c# nach java Softwareentwicklung 14
K Suche freies UML Tool um aus .java dateien Diagramme zu. Softwareentwicklung 8
D Java in KLassen, schon vorhanden? Softwareentwicklung 3
B Was ist besser für Grafiken? Java oder C#? Softwareentwicklung 9
R Java Passwort verschlüsseln --> kompliziert! wirklich doo Softwareentwicklung 13
F vorteile php gegenüber java? Softwareentwicklung 46
M Umwandlung von String in java.sql.Date Softwareentwicklung 2
lolkind Iso Datein per Java über Windows XP brennen Softwareentwicklung 13
U [Diskussion] Java vs. C# Softwareentwicklung 208
E Java Programm distributen Softwareentwicklung 35
J Hardware zugriff mit java? Softwareentwicklung 4
N Für und Wieder von Java und .NET (primär C#) | Performance Softwareentwicklung 6
G java.lang.ArrayIndexOutOfBoundsException Softwareentwicklung 5
E Default Java unter Linux aendern? Softwareentwicklung 3
S arabische Buchstaben in java ?:L Softwareentwicklung 3
L Noch 'ne Perl-Frage. Kehre dann auch reumütig zu Java zurück Softwareentwicklung 10
G Serveranbindung mit java Softwareentwicklung 24
P Grafik-Programm mit JAVA? Softwareentwicklung 21
G Umstieg von Delphi zu JAVA (wichtige Fragen!) Softwareentwicklung 41
F Welche Sprache sieht ähnlich aus wie Java? Softwareentwicklung 7
T Suche A Star Java Beispielprogramm Softwareentwicklung 2
D C# zu Java - Übersetzer gesucht. Softwareentwicklung 3
F Windows Media Player in Java? Softwareentwicklung 11
C C code in java umschreiben Softwareentwicklung 9
O java und c# - die zweite. Softwareentwicklung 7
S Problem PJIRC java-applet Softwareentwicklung 4
U Geeignete Plattform für Projekt (JSP, PHP, Java-Anwendung) Softwareentwicklung 7
G C++ in JAVA verpacken Softwareentwicklung 2
D C# vs. java Softwareentwicklung 16
G Darstellung von Java-Projekten mit UML Softwareentwicklung 3
E Java & Performance Softwareentwicklung 9
T Brauche für meinen Java-Code dringend Hilfe Softwareentwicklung 4
B Wo bekommt man fertige Java-Programme (z.B. für Lsg LGS) Softwareentwicklung 3
W Herangehensweise an ein Java Programm Softwareentwicklung 4
B Programmierung eines 8051-Assemblers unter Java Softwareentwicklung 3
M Bidirektionale Assoziazion in Java realisieren? Softwareentwicklung 3
J Java <-> C# Softwareentwicklung 1
S c# schneller java - wieso ? Softwareentwicklung 12
D C++ und Java Softwareentwicklung 61
J IntelliJ - Debugging funktioniert nur in manchen Klassen Softwareentwicklung 1
S Darstellung "globaler" Klassen/Libraries im Klassendiagramm Softwareentwicklung 3
T Wie die Multiplizität zweier bidirektionaler Klassen umsetzen? Softwareentwicklung 4
MiMa Organisation von Klassen Softwareentwicklung 5
P [UML] Klassen als Attribute = Assoziationen? Softwareentwicklung 14
C innere klassen auslagern Softwareentwicklung 12
S Design Pattern für zwei abhängige Klassen Softwareentwicklung 8
E Von Use-Case nach Klassen Diagramm Softwareentwicklung 3
F Control und Interface Klassen Softwareentwicklung 7
G Klassen trennen zur verbesserung der Übersicht? Softwareentwicklung 9
W Frage zu a)Innere Klassen und b)OO Design Softwareentwicklung 13
S Dynamisches Einbinden von Klassen Softwareentwicklung 3
W Statische Klassen oder neue Instanz einer Klasse nutzen? Softwareentwicklung 11
A Iterato-Pattern und Innere Klassen Softwareentwicklung 9
V 2 Klassen arbeiten am selben Objekt? Softwareentwicklung 2
V alle abgeleiten Klassen eines Interfaces finden? Softwareentwicklung 2
H aus allgemeinem array auf methoden abgeleiteter klassen zugr Softwareentwicklung 5
S Wieviele Klassen sind sinnvoll? Softwareentwicklung 3
K auf Attribute aus anderen Klassen zugreifen*help* Softwareentwicklung 3
P Projekt und Klassen Verwaltung (Wiederverwendung) Softwareentwicklung 4
L Aufgabenverteilung in zwei Klassen? Softwareentwicklung 6
L Frage zu Beziehungen zwischen Klassen und UML Softwareentwicklung 10
R klassen vererbung Softwareentwicklung 3

Ähnliche Java Themen

Neue Themen


Oben