2016-05-11 10 views
0

私は基本おっと質問はOPPS - クラス継承

を持っている私は、クラスのLogger、キュー、暗号化のための共通の機能が含まれていますXYZという名前の抽象クラスを作成しました。クラス ロガー、キュー、暗号化はxyzから派生します。私はさらにクラスを作成する必要があります。ALogger、AQueue & AEncryption。 ALoggerには、Loggerの一部の機能が含まれています( )。 AQueue & AEncryptionの場合も同様です。

だから、それを行うのに最適な方法は何ですか?

私のソリューションは、

Abstract class xyz 
{ 
} 

Abstract class Logger : xyz 
{ 
} 

Abstract class Queue: xyz 
{ 
} 

Abstract class Encryption : xyz 
{ 
} 

class ALogger : Logger 
{ 
} 

class AQueue: Queue: 
{ 
} 

class AEncryption: Encryption 
{ 
} 
+3

あなたの所持品に間違いはありません - 特に問題や懸念事項はありますか?もしそうでなければ、この質問はおそらくあまりにも曖昧になるだろう。 –

+0

私はそれが最高のデザインであることを確実にしたい – Tom

+0

将来的には、より多くのロガー、キュー、暗号化のクラスが存在する可能性があります – Tom

答えて

1

これを行うための最善の方法は、正直、ないんです。これらのクラスに共通するものはありませんので、共通の基底クラスから継承する必要はありません。たとえ共通点があったとしても、それは共通の基底クラスからの正当な理由ではありません。

実際には、継承は通常、クラスが機能を共有するための良い方法ではありません。私はそれが普遍的に常に真実であるとは言いませんが、遅かれ早かれ継承が崩壊します。 1つのクラスは他のクラスとは異なる振る舞いをする必要があり、最終的にはベースクラスを修正します。

これらすべてのクラスが共有する必要があるxyzの機能は何ですか?それを別のクラスに入れて、他のすべてのクラスをそのクラスに依存させる。 xyzの機能に依存しているからといって、その機能を継承するという意味ではありません。無関係な3つのクラスがその機能を必要とする可能性があるという事実は、それがそれ自身のクラスに属することを示すのに十分である。