这是一个理论问题,我还没有想到一个关于面向对象设计的直接解释答案。 我们假设我们有一个音乐事件类,我们想要实现一个可能有一个int成员(星级1-5)和一个getter和一个setter函数的Rating类。 也许我还没想到更大的图片呢?
如果我们希望我们的音乐事件类具有评级(只有一个不是数组),为什么它更好 - 如果是 - 继承评级类,而不是在音乐事件类中添加一个评级类成员?
编码:
//why is this better...
class MusicEvent:public Rating {
string name;
string duration;
//and other stuff here
}
//...than this
class MusicEvent {
string name;
string duration;
Rating rating;
//and other stuff here
}
答案 0 :(得分:3)
不是更好。你自己回答了这个问题 - 有评级,不是评级。因此,成分更好(即成员)。
继承表示是-a 关系。合成表示 has-a 关系。
答案 1 :(得分:0)
评级应该是成员 - 它是事件的属性(即属于它的东西)。
如果您希望将多种(或“类别”)可评级事件视为一种常见的集合而不关心它们是什么类型的事件,那么从Rating
派生只会有意义。
答案 2 :(得分:0)
显然,MusicEvent
不是 Rating
,MusicEvent
有 Rating
,因此你的答案。
但是,您以后可能要做的是使用Rateable
和setRating()
抽象方法,使用名为getRating()
的接口或类似的东西。如果您将来某个时候有很多不同的课程,其中一些课程有评分而有些课程没有,则可能会有用。