Klassendiagram

Shinadin

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen;

Ich brauche eure Meinung zum Thema Klassendiagramm. Ich habe eine Fahrstuhl mit Objektorientierung erstellt. Alle Methoden sind als protected deklariert. und alle Klassen sind in Main Programm instanziiert( z.b. Fahrtsuhl() )
Jede Klasse hat ihre eigene Variablen, die bearbeitet. diese Variablen sind in andere Klassen nicht erkannt. Es geht um Klassen die Unabhängig voneinander funktionieren, allerdings gibt es eine Beziehung zwischen diese Klassen, d.h. dass einige Variable gibt , die von andere Klassen benutzt werden. z.b. in Klasse Motor : if(Taste) then gvl.M:=TRUE . Die Variable M ist in Klasse Fahrstuhl erkannt: if(gvl.M=TRUE) then { Der Code } .. Die Voraussetzung ,dass die Code von Klasse Fahrstuhl implementiert wird , ist dass M auf TRUE gesetzt , sonst ist sie sinnlos. ---> Frage was ist die Beziehung zwischen diese Klassen Agregation, Assoziation oder Abhangigkeit und warum?
in der Klasse Taste z.b. wird wird die Variable gvl.gedruckt in der Klasse Fahrstuhl verwendet (if i>current_etage => Hochfahren ,sonst if i<current_etage ==> runterfahren), so wird die Variable gvl.gedruckt in Klasse Fahrstuhl verwendet. Also welche beziehung gibt es zwischen die Klasse Fahrstuhl und Klasse Taste?? ( in klasse Taste z.b gibt es eine methode : if Taste:= TRUE then gvl.gedruckt:=TRUE)

Dann was ist die Unterschied zwischen Assoziation und abhangigkeit.?

Danke im Voraus
 
Zuletzt bearbeitet:
Ich kann das, was du da schreibst so gar nicht sinnvoll zuordnen - sorry. Mag aber sein, dass es daran liegt, dass du das selbst noch nicht verstanden hast ...

Eine Klasse wird erst durch das instanzieren selbst verwendbar - davor ist sie lediglich eine Art Konstrukt.
Eine Klasse kann aber innerhalb einer anderen Klasse instanziert werden - in dem Fall hat die Basisklasse vollen Zugriff auf die Instanz - nicht aber umgekehrt.

Eine Klasse liefert keine Variable im engeren Sinn - sie stellt aber möglicherweise über ihre Properties Informationen zur Verfügung. Hierfür ist dann aber nicht, wie du schreibst, M notwendig damit man Motor instanzieren kann ...
Für die Beziehung zwischen Fahrstuhl und Motor kann ich aus deinem Beispiel gar nichts sagen ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Larry Laffer .. Danke für ihre Antwort ich habe den Beitrag bearbeitet

* alle Klassen werden nur in Main Programm instanziert.
* Die Variablen die in andere Klassen verwendet werden als Global Variable deklariert.
* so werden die Variablen von andere Klassen verwendet : (eine einfache Beispiele)
Klasse Taste { if Taste =TRUE then gvl.gedruckt:= TRUE } / Klasse Fahrstuhl { if gvl.gedruckt AND i>current_Etage then Hochfahren() else if gvl.gedruckt AND i< current_Etage then runterfahren()} ===> Welche Beziehung zwischen die beide Klassen??
Klasse Motor{ if Motor = TRUE then gvl.M:=TRUE} /Klasse Fahrstuhl { if gvl.M =TRUE then {Implementation aller Code dieser Klasse} } > Die Klasse Fahrstuhl ohne Variable gvl.M kann nicht implementiert werden.
(gvl.M = gvl.Fahrstuhl[F] hier)
In diesem Bild wird die Klasse Fahrstuhl ohne Variable gvl.Fahrstuhl[F] nicht implementiert. d.h, dass es stark davon abhängig ist. die Beziehung zwischen die Klasse Fahrstuhl und Motor ist dann eine Agregation und wie erwähnt alle klassen sind nur im Main Programm instanziert.

sps forum.jpg
 
Zuletzt bearbeitet:
Gut ... ich bleibe dann mal bei deiner Aufgabe (und nicht deinem Konstrukt) ...
Für mich wäre "Fahrstuhl" die Basis-Klasse und alle anderen Sub-Klassen darin eingelagert - das beschreibt dann auch schon die Beziehung zueinander ...
Tür kann ja nicht irgendwann wann auf oder zu gehen sondern nur dann wenn der Fahrstuhl in einer korrekten Position in einer Etage STEHT.
Der Fahrantrieb umgekehrt kann erst fahren wenn die Tür zu ist.
Die Tasten "Anforderung rauf", Anfoderung runter", "Etagenanwahl" sowie alle möglichen Endschalter / Initiatoren wären für mich Properties der Hauptklasse (also Fahrstuhl).

In deinem skizzierten Fall existieren alle Klassen (also die FB's) nebeneinander - sie haben also nicht wirklich eine Abhängigkeit. Diese wird nur über Globalvariablen hergestellt, was aus meiner Sicht einem OOP komplett widerspricht (wir sprechen hier ja in erster Linie von einer Art Hausaufgabe ...).
 
Vielen Danke für ihre Wertvolle Antwort.

Ich habe jetzt meine Programm eingestellt und diese Variablen von Global Variable entfernt, aber habe ich trotzdem einige Fragen zu stellen.

wie erwähnt es gibt Variablen in jede Klasse die von andere Klassen eingesetzt werden, deshalb habe ich entweder Pointer um auf diese Variablen zuzugreifen , oder Die andere Klasse (z.b Tur:Tur; Sensor:Sensor; Taste:Taste; ) in der Klasse(Fahrstuhl) instanziert, damit ich auf diese Variablen zugreifen wird (gedruckt.Taste; ) >>> ich sehe ,dass es keine unterschied zwischen die beide Methoden, die beide erlauben ihnen auf die Variablen zuzugriefen, sonst was ist die Unterschied.

1. wenn ich die Pointer eingesetzt, um auf eine Variable in einer andere Klasse einzusetzen, wie heißt die Beziehung zwischen die beide Klassen? Es ist Assoziation oder Abhangigkeit?? (2 Fallen> Fall1: wenn ich nur auf 1 Variable mithilfe von Pointer zugegegrifen habe. Fall2: wenn ich auf 2 Variablen mithilfe von Pointer zugegriefen habe)
2. wenn ich eine Klasse in eine andere Klasse instanziert, um auf eine Variable zuzugreifen (z.b. Fahrstuhl:Fahrstuhl; und in der Klasse Taste.Fahrstuhl , aber diese Befehl Fahrstuhl(); bleibt in Main Programm) ==> wie heißt die Beziehung zwischen die beide Klassen?? Agregation oder Assoziation?
3. wenn ich z.b in der Klasse Fahrtuhl alle andere Komponenten instanziert: Taste(); Sensor(); Tur(); >>> geht es um Komposation oder Agregation, wenn ich auch auf eine bestimmte Variable zugegrifen bin (z.b Tur.Halt) .. N.B. die Klassen bleiben unabhangig voneinander d.h. wenn ich alle Klassen nochmal in der Main Programm instanziert (Fahrstuhl() Sensor() Tur() Taste()) .. wird der Code normal funktioniert, deshalb glaube ich nicht ,dass es um komposition geht , sondern agregation.

ich will nur noch etwas fragen, was ist die Unterschiede zwischen Abhängigkeit und Assoziation. wenn ich mithilfe von Pointer auf eine Variable einer anderen Klasse , wird diese Beziehung als Abhangigkeit oder Assoziation.?

Danke im Voraus :)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Normalerweise greift man auf interne Variablen eine Klasse nicht direkt zu. Dafür stellt man Normalerweise Methoden oder Properties bereit.

In deinem ersten Posts ist mir aufgefallen, dass du alle Methoden als protected deklariert hast. Der Unterschied zwischen public, protected und private ist dir klar?
 
@Shinadin :
Wie @Mrtain schon schreibt greift man nicht direkt auf Variablen eines FB's (Klasse) zu - in der SPS geht das natürlich - in der Hochsprachenwelt wird das schon schwieriger. Hierbei ist es auch egal ob via Pointer oder Zuweisung ...
Wie das Verhältnis von Klassen zueinander aussieht hat nichts mit der Verwendung von Variablen zu tun sondern wie die Informationen des Einen vom Anderen ausgewertet werden (müssen).
Mit deinen Schlagworten "Aggregation" und "Assoziation" kann ich in diesem Kontext gar nichts anfangen ... bei den meißten Zusammenhängen würde ich aber von "Abhängigkeit" (also Dependency) sprechen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Danke für eure Antwort.
@Mrtain Ja bei protected können nur die vererbte Klassen auf die Methode zugreifen, bei private ist das nicht der Fall.
Ihr habt mir eine gute Hinweis gegeben und werde das Programm umbauen.
Ich habe eine Eigenschaft(property) die heißt Hoch_gedruckt und eine andere runter_gedruckt. Diese Eigenschaften werden von die Klasse Fahrstuhl verwendet , damit sie weißt , ob sie hoch- oder runterfahren soll , welche Beziehung ist zwischen diese Klassen? ich glaube Assoziation, sonst wie kann ich wissen , ob es um Assoziation oder Abhangigkeit handelt ?? die von andere Klassen verwendete Eigenschaften bzw. Methoden deuten immer auf eine Assoziation?
eine Weitere Frage bitte : wie muss eine Beziehung zwischen zwei Klassen sein, damit sie als Agregation in Codesys betrachtet wird? Es reicht aus, dass die andere Klasse "Taste" in der Klasse "Fahrstuhl" instanziiert wird?? (z.b. in der Klasse Fahrtuhl : deklaration >Taste:taste; Instanzierung>Taste();).
 
Unter einer Assoziation verstehe ich, dass der Klasse Fahrstuhl die anderen Klassen bekannt sind, aber selbst kein Bestandteil der Klasse Fahrstuhl sind.

Bsp: Die Klasse Fahrstuhl besitzt die Methode "OpenDoor". Die Methode besitzt als übergabeparameter die Klasse Tür.

Code:
Methode "OpenDoor" der Klasse Fahrstuhl:
OpenDoor(Door :clsTuer)

Objekte:
objFahrstuhl :clsFahrstuhl;
objDoor :clsTuer;

Aufruf im Programm:
objFahrstuhl.OpenDoor(objDoor)

Dagegen verstehe ich unter Aggregation, das die Klasse clsTuer zwar ein Member der Klasse clsFahrstuhl ist, aber beide Objekte können unabhängig von einander existieren und somit auch unabhängig von einander verwendet können.
Zum Beispiel der könnte der Member ein pointer auf die Klasse clsTuer sein.

Unter Komposition verstehe ich, dass die Klasse clsTuer fester Bestandteil der Klasse clsFahrstuhl ist.
Also quasi ein Objekt / Instanz innerhalb eines Objektes / Instanz.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielleicht solltest du dir dazu mal den Link im Beitrag #8 von @Mrtain anschauen - das sollte deine Frage beantworten ...
Stimmt, Ralf! Dort steht nämlich:
"Aggregation und Komposition sind besondere Assoziationen. Die konkrete Unterscheidung ist zum Teil schwierig und nicht klar abzugrenzen, so dass in einigen Lehrwerken nur von Assoziation gesprochen wird."
;)
OT: Du hast die falschen Lehrwerke gelesen und ich sie alle noch nicht. :ROFLMAO:
 
auch OT:
Ich habe so etwas noch gar nicht gelesen - ich kann es nur sinnvoll anwenden (sogar unter .Net)
OT: und andere, wie ich zum Beispiel, lernen durch Schmerz. Spätestens dann, wenn man vor seinem eigenen Programm steht und sich selbst eingestehen muss, dass man wirklich erstklassigen objekt orientieren Spaghetticode produziert hat :ROFLMAO:
Aber generell sollte man sich schon mit grundlegenden Prinzipien vertraut machen, wenn man das Werkzeug OOP einsetzen will.
 
Zuletzt bearbeitet:
Vielen Dank für eure Antwort.
In meinem Programm habe ich z.b die Klasse Tur in der Klasse Fahrstuhl instanziert ( Tur:Tur; und Tur() ) ---> Komposition
* Ich habe die Klasse Sensor in Klasse Tur ( nur mit Sensor :Sensor; instanziert damit ich auf die Methoden und Eigenschaften zuzugreifen ---> Assoziation) aber die Implementierung liegt in Klasse Fahrstuhl (so Sensor() ),mit klasse Fahrstuhl ist die Beziehung Komposition.. Was soll in der beide Klasse geschrieben, damit die beziehung als Agregation angesehen?
@mrtin Hat gesagt eine Klasse muss ein Member ein andere Klasse, was meinen sie damit ? :)
 
Zurück
Oben