Vor der Antwort Frage, dies ist einer dieser Fälle, wo ist es eine gute Idee, Hierarchie Beziehungen von Komposition Beziehungen, als ob sie wo verschiedene Arten von Diagrammen.
Hinweis: Ich habe Engine dem Diagramm als "geschützt" und "Klasse" hinzugefügt, um Verwirrung zu vermeiden.
(1) Zusammensetzungsdiagramm
Ein Ziel "CarClass" its bestehend aus 1 einzelnes Objekt von "EngineClass".
..............................................................................
..+-------------------------------------+........+-------------------------+..
..| <<abstract>> |........| <<abstract>> |..
..| CarClass |........| EngineClass |..
..+-------------------------------------+........+-------------------------+..
..| [#] Engine: EngineClass |<*>-----+ [+] startEngine(): void |..
..+-------------------------------------+........+-------------------------+..
..| [+] acelerate(): void <<virtual>> |.....................................
..+-------------------------------------+.....................................
..............................................................................
(2,1) Vererbungsschema
die Aufgabe "CarClass" haben Kind-Klassen können auf bestimmten Szenario.
...........................................
..+-------------------------------------+..
..| <<abstract>> |..
..| CarClass |..
..+-------------------------------------+..
..| [#] Engine: EngineClass |..
..+-------------------------------------+..
..| [+] acelerate(): void <<override>> |..
..+-----------------+-------------------+..
.................../.\.....................
................../...\....................
.................+--+--+..............................................................
....................|.................................................................
....................+------------------------------------------+......................
....................|..........................................|......................
..+-----------------+-------------------+....+-----------------+-------------------+..
..| <<concrete>> |....| <<concrete>> |..
..| StreetCarClass |....| OffRoadCarClass |..
..+-------------------------------------+....+-------------------------------------+..
..| [+] acelerate(): void <<override>> |....| [+] acelerate(): void <<override>> |..
..+-------------------------------------+....+-------------------------------------+..
......................................................................................
(2,2) Vererbungsschema
die Aufgabe "EngineClass" haben Kind-Klassen können auf bestimmten Szenario.
...........................................
..+-------------------------------------+..
..| <<abstract>> |..
..| EngineClass |..
..+-------------------------------------+..
..| [+] acelerate(): void <<override>> |..
..+-----------------+-------------------+..
.................../.\.....................
................../...\....................
.................+--+--+..............................................................
....................+------------------------------------------+......................
....................|..........................................|......................
....................|..........................................|......................
..+-----------------+-------------------+....+-----------------+-------------------+..
..| <<concrete>> |....| <<concrete>> |..
..| StreetEngineClass |....| OffRoadEngineClass |..
..+-------------------------------------+....+-------------------------------------+..
..| [+] startEngine(): void <<override>>|....| [+] startEngine(): void<<override>> |..
..+-------------------------------------+....+-------------------------------------+..
......................................................................................
3 Antwort
Nun, dies ist ein Fall, wo eine Klasse ein unleast eines Komponieren Mitglied hat, und seine Art außer Kraft gesetzt werden kann, wenn die Hauptklasse ihrer überschriebenen. Dies wird manchmal als "Paralell-Hierarchie-Software-Muster" oder "Doppel-Hierarchie-Software-Muster" bezeichnet.
Sie haben nur zwei Unterklassen von jeder Hauptklasse erwähnt, aber in Wirklichkeit könnte es mehr geben.
Normalerweise mache ich Diagramme wie diese 2 Wege. Eins, ich mache das erste Diagramm, indem ich einen Kommentar hinzufüge, der anzeigt, dass es sich um diesen Fall handelt.
3.1 Haupt Paralell Hierarchy Diagram
..............................................................................
..+-------------------------------------+........+-------------------------+..
..| <<abstract>> |........| <<abstract>> |..
..| CarClass |........| EngineClass |..
..+-------------------------------------+........+-------------------------+..
..| [#] Engine: EngineClass |<*>-----+ [+] startEngine(): void |..
..+-------------------------------------+........+------------+------------+..
..| [+] acelerate(): void <<virtual>> |.....................|...............
..+--------------+----------------------+.....................|...............
.................|............................................|...............
.................+--------------------------------------------+...............
.................|............................................................
........+--------+-------+....................................................
........| Note: |....................................................
........| Paralell /....................................................
........| Hierarchy /| ...................................................
........| /|....................................................
........+-------------/--+....................................................
..............................................................................
Der zweite Fall, sein, wenn beiden Klassen Kind Klassen haben, die beiden Mitglieder hinzufügen.
3.2 Zusätzliche Paralell Hierarchy Diagram
..............................................................................
..+---------------------------------------+........+-------------------------+..
..| <<concrete>> |........| <<concrete>> |..
..| OffRoadCarClass |........| OffRoadEngineClass |..
..+---------------------------------------+........+-------------------------+..
..| [+] createEngine(): void <<override>> |<*>-----+ [+] startEngine(): void |..
..+---------------------------------------+........| [+] nitroLevel(): void |..
..| [+] useNitro(): void |........+------------+------------+..
..| [+] acelerate(): void <<override>> |.....................|...............
..+--------------+------------------------+.....................|...............
.................|..............................................|...............
.................+----------------------------------------------+...............
.................|............................................................
........+--------+-------+....................................................
........| Note: |....................................................
........| Paralell /....................................................
........| Hierarchy /| ...................................................
........| /|....................................................
........+-------------/--+....................................................
..............................................................................
kann ich zusätzliche Diagramme hinzufügen, wenn necesarilly.
4 Zeigen Sie mir den Code
Um diese „parallel“ Hierarchien zu verwalten, in der Regel, es ist die Schaffung der Verbundelemente durch eine überschriebene Methode verwaltet.
public abstract class EngineClass
{
public void startEngine() { ... }
} // EngineClass
public abstract class CarClass
{
protected EngineClass engine;
public CarClass()
{
// ...
}
public EngineClass createEngine()
{
EngineClass Result = new EngineClass();
return Result;
}
public void start()
{
this.Engine = createEngine();
}
} // CarClass
public class StreetCarClass extends CarClass
{
public StreetCarClass()
{
// ...
}
@override
public EngineClass createEngine()
{
EngineClass Result = new StreetCarEngineClass();
return Result;
}
} // StreetCarClass
public class OffRoadCarClass extends CarClass
{
public OffRoadCarClass()
{
// ...
}
@override
public EngineClass createEngine()
{
EngineClass Result = new OffRoadCarEngineClass();
return Result;
}
} // OffRoadCarClass
public class ExampleClass
{
public static main()
{
EngineClass OffRoadCar = new OffRoadCarClass();
OffRoadCar.start();
}
} // OffRoadCarClass
Prost.
P.S. Kann ich, ur, haz ein Fishburguer?
Das riecht nach Hausaufgaben. Wenn dies der Fall ist, markieren Sie sie bitte als solche. – Jochen
Nein, es sind keine Hausaufgaben: P – annouk