Seite 1 von 1
UML + Python Frage(n)
Verfasst: Sonntag 25. April 2010, 14:08
von Assemblage23
Hi,
kann mir bitte jemand ein paar Fragen zu einem UML Klassendiagramm beantworten?
Zunächst die Frage
1) Wenn ich eine Klasse A und eine Klasse B habe. Klasse A besitzt eine Methode getIrgendwas() diese liefert ein Objekt der Klasse B zurück. In welcher Beziehung stehen diese 2 Klassen nun? Oder ist das gar keine Beziehung ?
2) Wenn Klasse A als Attribut eine Referenz auf ein Objekt von Klasse B hat und Klasse B eine Referenz auf ein Objekt der Klasse A. Was ist das für eine Beziehung, bzw gibts sowas überhaupt oder macht das Sinn ?
3) Kapselung in Python. Ich bin mir hier mit der Doku nicht ganz im klaren ( oder mein Englisch ist zu schlecht )
Code: Alles auswählen
class Test:
def __init__(self):
pass
def mytest1(self):
print "mytest1"
def _mytest2(self):
print "mytest2"
def __mytest3(self):
print "mytest3"
def privateTest(self):
self.__mytest3()
t = Test()
t.mytest1()
t._mytest2()
t.__mytest3()
t.privateTest()
Warum funktioniert t._mytest2() ? Ich dachte das wäre auch private genauso wie __
Danke für eure Antworten !
Verfasst: Sonntag 25. April 2010, 14:19
von cofi
Ad 3) Kapselung gibt es nicht. Zumindest keine die vom Compiler oder Interpreter erzwungen wird, sowohl `_`, als auch `__` stehen nicht fuer `private`.
http://tutorial.pocoo.org/classes.html# ... -variablen
Verfasst: Sonntag 25. April 2010, 17:07
von .robert
Zu 1 und 2:
Was meinst du mit "was für Beziehungen" das sind? So etwas wie Komposition oder Aggregation? Diese existieren ja nur auf dem Papier bzw. bei der Modellierung. Einer Referenz auf eine Klasse siehst du im Code so direkt nicht an, was für eine Beziehung das ist.
Gegenseitige Referenzierung geht schon, ob es Sinn macht hängt natürlich immer vom Fall ab, einen speziellen Namen gibt es mMn dafür nicht.
Gruß,
r.
Verfasst: Sonntag 25. April 2010, 19:34
von BlackJack
@Assemblage23: Bei 2) bin ich mir nicht sicher was Du da meinst, bzw. habe ich den Verdacht Du hast nicht das geschrieben was Du eigentlich wissen wolltest. Soll das wirklich "Klasse A [hat] als Attribut eine Referenz auf ein Objekt von Klasse B" heissen oder meintest Du da "Ein Objekt von Klasse A…"!? Deine Frage könnte man nämlich so verstehen:
Code: Alles auswählen
class A(object):
pass
class B(object):
a = A()
A.b = B()
Zu 3) Ich gehöre zu den Leuten die Kapselung und Zugriffschutz als zwei unterschiedliche Sachen ansehen. Kapselung kann man mit Python machen: Einfach nicht auf die "Innereien" von Objekten zugreifen. Erzwungen wird's halt nur nicht.
Verfasst: Montag 26. April 2010, 08:12
von Assemblage23
Danke erstmal für alle antworten
@ BlackJack Ja, das bin ich mir selber auch nicht mehr ....
Ich versuche es hier nochmal deutlich zu machen.
Code: Alles auswählen
def main():
class Aggregat:
def __init__(self):
self.refVonObjektDerKlasseKomponente1 = Komponente1()
self.refVonObjektDerKlasseKomponente2 = Komponente2()
self.name = "Aggregat"
class Komponente1:
def __init__(self):
self.name = "Komponente1"
class Komponente2:
def __init__(self):
self.name = "Komponente2"
agg = Aggregat()
print agg.name
print agg.refVonObjektDerKlasseKomponente1.name
print agg.refVonObjektDerKlasseKomponente2.name
if __name__ == "__main__":
main()
So habe ich es jetzt ( vereinfacht ) gebaut.
Die Aufgaben wurden in der Schulklasse verteilt und ich habe diese 3 Klassen bekommen. Meine Klasse Aggregat ( heißt natürlich anders ) wird aus einer anderen Klasse abgeleitet ( das muss jemand anders machen ).
Der Code funktioniert soweit auch. Meine Frage ist jetzt aber ob das UML dazu passt. Ich habe es mal hier reingestellt.
Außerdem würde ich gerne wissen ob ich ( falls es mit der Komposition passt ) die Raute 2 mal machen muss oder wie in dem Beispiel zusammgeführt werden kann.

Verfasst: Montag 26. April 2010, 08:37
von .robert
Morgen.
Das passt jetzt ja mal nicht zu deinen Fragen!
Das ist jetzt eine ganz normale Komposition, was hat das mit den Fragen 1 und 2 zu tun?
Bei dem Diagramm solltest du übrigens die Verbindungen
nicht zusammen legen.
Und noch was: zieh die class-Definitionen aus der main() Funktion raus:
Code: Alles auswählen
class Aggregat:
def __init__(self):
self.refVonObjektDerKlasseKomponente1 = Komponente1()
self.refVonObjektDerKlasseKomponente2 = Komponente2()
self.name = "Aggregat"
class Komponente1:
def __init__(self):
self.name = "Komponente1"
class Komponente2:
def __init__(self):
self.name = "Komponente2"
def main():
agg = Aggregat()
print agg.name
print agg.refVonObjektDerKlasseKomponente1.name
print agg.refVonObjektDerKlasseKomponente2.name
if __name__ == "__main__":
main()
Verfasst: Montag 26. April 2010, 08:50
von Assemblage23
Vielen Dank habe mein UML entsprechend geändert, kannst du mir noch Frage 1) beantworten?
Ich denke es ist eine Assoziation ?
Verfasst: Montag 26. April 2010, 09:23
von .robert
Assemblage23 hat geschrieben:Ich denke es ist eine Assoziation ?
Warum?
Verfasst: Montag 26. April 2010, 09:42
von Assemblage23
1) Sie stehen in Verbindung und Assoziation ist laut Wikipedia die geringste Form der Abhängigkeit?
Wie gesagt nur ne Vermutung wir haben in der Schule noch fast kein Material bekommen nur den Hinweis auf wikipedia zu schauen....
Verfasst: Montag 26. April 2010, 10:20
von ms4py
Assemblage23 hat geschrieben:1) Sie stehen in Verbindung und Assoziation ist laut Wikipedia die geringste Form der Abhängigkeit?
Wie gesagt nur ne Vermutung wir haben in der Schule noch fast kein Material bekommen nur den Hinweis auf wikipedia zu schauen....
AFAIK ist Assoziation und Aggregation nicht wirklich klar definiert und die Verwendung liegt im Ermessen des Designers.
Edit: Ja, Wikipedia sieht das genauso: "Eine exakte Definition wird in der UML2 nicht gegeben, vielmehr wird darauf verwiesen, dass eine Aggregation je nach Anwendung und Modellierer variiert. "
Verfasst: Montag 26. April 2010, 15:34
von BlackJack
Und den Unterschied zwischen Aggregation und Komposition kann man aus den Klassen auch nicht ersehen, weil der in der Bedeutung liegt. Es gibt da die Faustregel, dass es davon abhängt ob ein Objekt ohne die Einzelteile auskommt. Aber das ist halt in vielen Fällen auch wieder Ansichtssache. Ist das Gehirn unverzichtbarer Bestandteil? Eigentlich ja, aber es gibt ja 'n Haufen Bild-Leser -- also vielleicht doch nicht.
