Ich bin in der Situation, wenn zwei Klassen (nennen wir A und B) sind miteinander verwandt (ihre Methoden beruhen auf den Daten des anderen), aber die IS-A Beziehung ist nicht angemessen. Ich könnte Komposition verwenden, so dass beide Objekte Felder haben, die das andere Objekt speichern. Aber das scheint mir hässlich zu sein. Was ich derzeit tun, ist eine andere Klasse C enthält, die Objekte aus A und B über Zusammensetzung zu schaffen, und wenn ich eine Methode der Klasse A nennen wollen passiere ich das Objekt B. Meine Probleme mit diesem Ansatz:Objekte, die für beide Seiten brauchen einander
- Ich brauche ein Objekt zum anderes zu übergeben, so dass es statt dem OOP-Ansatzes ein einfaches Funktionsargument zu ähneln beginnt vorbei, wo das Objekt kapselt seine Daten
- wenn ich ändern müssen etwas, ich könnte den Code beiden Klassen ändern muß A und B, die für die Wiederverwendung von Code nicht ein guter Punkt ist
Was empfehlen Sie?
Beispiel
class Mesh:
method: plot(this, Solver)
{
plot data from class Solver // need to pass a Solver object, so the class is not self-contained
}
method: intersect(this, Domain)
{
do sth // depends on Domain, so we need to pass it
}
class Domain:
method: plot(this)
{
plot data from own data // no problem
}
method: selectVertex(this, Mesh)
{
do sth // depends on Mesh, so we need to pass it
}
Danke, Zoltan
Im Allgemeinen ist es keine gute Idee, zwei Objekte voneinander abhängig zu machen. Aber es ist schwer, mehr zu sagen, ohne dass Sie konkrete Informationen/Code zur Verfügung stellen. –
Gegenseitige Zusammensetzung ist keine gute Idee eher ein Hinweis, dass Ihre Klassen so verwandt sind, und vielleicht müssen sie nur eine Klasse mit den Attributen von A und B sein. Aber ohne einen konkreten Code ist schwierig. –
Ja, sie sind verwandt, aber wenn sie eine Klasse wären, hätte ich die Versuchung, fast alles in eine Klasse einzuordnen, was in OOP nicht sehr vorteilhaft ist. –