开发者

Inheritance or Composition? [closed]

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center. Closed 10 years ago.

I have a program that needs to be developed. For confidentiality, I will use vague terms. I have a widget which contains members shared by several different classes. My will handle a widget at 2 stages. each stage has different members but they do sh开发者_运维知识库are some members as well. This is a diagram of the structure.

           Widget()
    |-                -|

SWidget() PWidget()

| -|

Stage1() Stage2()

Swidget and Pwidget inherit from Widget

Swidget contains 2 pwidgets

Stage1 and stage2 inherit from Swidget.

I have a class that will need to implement either a stage1 or stage2

If I declare the variable as a Swidget I can only see what is common. I cannot see what is specific to stage1 or stage2. How do I solve this problem? Inheritance works for everything but how they differ. please advise!

Edit that user posted as "answer":

Stage1 and Stage2 are almost completely the same. They differ with some members and some methods. The problem is that I cannot create properties in the base class to set properties in the specific subclasses. And the stage1/ stage2 class is instantiated before I know the values of their specific members. Thus I have no way of setting them if I declare a instance of the base class in the UI. The base class knows nothing of the subclasses. However, in order to have all properties and methods accessible from the UI, I will have to declare one of each and use the one I need.


I believe what you are looking for is something like this:

class Stage
{
   //shared members
}

class Stage1: Stage
{
   //unique members
}

class Stage2: Stage
{
   //unique members
}

class SWidget: Widget
{
   Stage currentStage;
}

From what I can gather, you're experiencing the is-a or has-a dilemma. With the design above you can box Stage1 or Stage2 as currentStage. And then cast the property as needed to access the unique members.

Now whether this is the best way to do things is dependent on your specific needs.


Stage1 and Stage2 are almost completely the same. They differ with some members and some methods. The problem is that I cannot create properties in the base class to set properties in the specific subclasses. And the stage1/ stage2 class is instantiated before I know the values of their specific members. Thus I have no way of setting them if I declare a instance of the base class in the UI. The base class knows nothing of the subclasses. However, in order to have all properties and methods accessible from the UI, I will have to declare one of each and use the one I need.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜