उत्तर प्रश्न से पहले, यह उन मामलों में से एक है, जहां रचना संबंधों से पदानुक्रम संबंधों को विभाजित करना एक अच्छा विचार है, जैसे कि वे विभिन्न प्रकार के आरेखों के साथ।
नोट: मैंने भ्रमित होने से बचने के लिए चित्र को "संरक्षित" और "कक्षा" उपसर्ग के रूप में जोड़ा है।
(1) संरचना आरेख
"CarClass" का एक वस्तु अपने 'EngineClass "की 1 एक वस्तु द्वारा रचित।
..............................................................................
..+-------------------------------------+........+-------------------------+..
..| <<abstract>> |........| <<abstract>> |..
..| CarClass |........| EngineClass |..
..+-------------------------------------+........+-------------------------+..
..| [#] Engine: EngineClass |<*>-----+ [+] startEngine(): void |..
..+-------------------------------------+........+-------------------------+..
..| [+] acelerate(): void <<virtual>> |.....................................
..+-------------------------------------+.....................................
..............................................................................
(2,1) विरासत आरेख
"CarClass" का एक वस्तु कुछ परिदृश्य पर बच्चे कक्षाओं हो सकते हैं।
...........................................
..+-------------------------------------+..
..| <<abstract>> |..
..| CarClass |..
..+-------------------------------------+..
..| [#] Engine: EngineClass |..
..+-------------------------------------+..
..| [+] acelerate(): void <<override>> |..
..+-----------------+-------------------+..
.................../.\.....................
................../...\....................
.................+--+--+..............................................................
....................|.................................................................
....................+------------------------------------------+......................
....................|..........................................|......................
..+-----------------+-------------------+....+-----------------+-------------------+..
..| <<concrete>> |....| <<concrete>> |..
..| StreetCarClass |....| OffRoadCarClass |..
..+-------------------------------------+....+-------------------------------------+..
..| [+] acelerate(): void <<override>> |....| [+] acelerate(): void <<override>> |..
..+-------------------------------------+....+-------------------------------------+..
......................................................................................
(2,2) विरासत आरेख
"EngineClass" का एक वस्तु कुछ परिदृश्य पर बच्चे कक्षाओं हो सकते हैं।
...........................................
..+-------------------------------------+..
..| <<abstract>> |..
..| EngineClass |..
..+-------------------------------------+..
..| [+] acelerate(): void <<override>> |..
..+-----------------+-------------------+..
.................../.\.....................
................../...\....................
.................+--+--+..............................................................
....................+------------------------------------------+......................
....................|..........................................|......................
....................|..........................................|......................
..+-----------------+-------------------+....+-----------------+-------------------+..
..| <<concrete>> |....| <<concrete>> |..
..| StreetEngineClass |....| OffRoadEngineClass |..
..+-------------------------------------+....+-------------------------------------+..
..| [+] startEngine(): void <<override>>|....| [+] startEngine(): void<<override>> |..
..+-------------------------------------+....+-------------------------------------+..
......................................................................................
3 उत्तर
अब, यह एक मामले में, जहां एक वर्ग एक unleast एक सदस्य रचना है, और उसके प्रकार ओवरराइड किया जा सकता है, जब मुख्य वर्ग अपनी ओवरराइड। इसे कभी-कभी "पैरालेल पदानुक्रम सॉफ्टवेयर पैटर्न" या "दोहरी पदानुक्रम सॉफ्टवेयर पैटर्न" कहा जाता है।
आपने केवल प्रत्येक मुख्य वर्ग के 2 उप-वर्गों का उल्लेख किया है, लेकिन वास्तव में, और भी हो सकता है।
आमतौर पर मैं इस 2 तरीकों से चार्ट बना देता हूं। एक, मैं पहला आरेख बनाता हूं, एक टिप्पणी जोड़ता हूं, जो इंगित करता है कि यह मामला है।
3,1 मुख्य समानांतर पदानुक्रम आरेख
..............................................................................
..+-------------------------------------+........+-------------------------+..
..| <<abstract>> |........| <<abstract>> |..
..| CarClass |........| EngineClass |..
..+-------------------------------------+........+-------------------------+..
..| [#] Engine: EngineClass |<*>-----+ [+] startEngine(): void |..
..+-------------------------------------+........+------------+------------+..
..| [+] acelerate(): void <<virtual>> |.....................|...............
..+--------------+----------------------+.....................|...............
.................|............................................|...............
.................+--------------------------------------------+...............
.................|............................................................
........+--------+-------+....................................................
........| Note: |....................................................
........| Paralell /....................................................
........| Hierarchy /| ...................................................
........| /|....................................................
........+-------------/--+....................................................
..............................................................................
दूसरे मामले, इसकी जब दोनों वर्गों बच्चे कक्षाएं दोनों सदस्यों को जोड़ने है कि है।
3।2 अतिरिक्त समानांतर पदानुक्रम आरेख
..............................................................................
..+---------------------------------------+........+-------------------------+..
..| <<concrete>> |........| <<concrete>> |..
..| OffRoadCarClass |........| OffRoadEngineClass |..
..+---------------------------------------+........+-------------------------+..
..| [+] createEngine(): void <<override>> |<*>-----+ [+] startEngine(): void |..
..+---------------------------------------+........| [+] nitroLevel(): void |..
..| [+] useNitro(): void |........+------------+------------+..
..| [+] acelerate(): void <<override>> |.....................|...............
..+--------------+------------------------+.....................|...............
.................|..............................................|...............
.................+----------------------------------------------+...............
.................|............................................................
........+--------+-------+....................................................
........| Note: |....................................................
........| Paralell /....................................................
........| Hierarchy /| ...................................................
........| /|....................................................
........+-------------/--+....................................................
..............................................................................
मैं, अतिरिक्त चित्र जोड़ सकते हैं यदि necesarilly।
4 मुझे कोड
दिखाएँ क्रम में, यह "समांतर" पदानुक्रम का प्रबंधन करने, आम तौर पर, समग्र सदस्यों के निर्माण के अपने एक ओवरराइड विधि द्वारा प्रबंधित।
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
चीयर्स।
पीएस क्या मैं, आप, एक फिशबर्गर हज़ कर सकते हैं?
यह होमवर्क की तरह गंध करता है। यदि ऐसा है, तो कृपया इसे इस तरह चिह्नित करें। – Jochen
नहीं, यह होमवर्क नहीं है: पी – annouk