【发布时间】:2012-05-03 14:54:26
【问题描述】:
说,如果在我们的对象设计中,已经有一个Car 类,现在有一些汽车对象是敞篷车。
我们可以定义另一个类Convertible 和子类Car,但是假设我们稍后创建一个类FourWheelDrive,它也是Car 的子类,如果我们有一个FourWheelDrive那也是Convertible,那怎么处理呢?
上面的设计与其他设计相比如何,这是Car类中的isConvertible布尔值,isFourWheelDrive也是Car类中的布尔值,就像@的标志或属性一样987654332@上课。所以在这种情况下我们不会定义额外的类。
更新:在一个真实的例子中,在我们的项目中,有一个Credential 类存储用户的信息:user_id、encrypted_password、email_address 等。当我们允许通过 Facebook 登录时、Gmail、Yahoo、MySpace(使用 JanRain),一位同事建议添加FacebookCredential、GmailCredential、YahooCredential,所有这些类都是Credential 的子类。我有点不知所措,有这么多类,当你看到一个方法时,你必须看看子类是否覆盖了它,或者它是基类的方法。我会使用一个代码来告诉它是哪个凭据提供者(Facebook、Gmail 等),并使用这个提供者代码来做适当的事情。 (例如,有些提供商已经验证了电子邮件地址,有些则没有)。所以我只是不知道我同事的方法是否更合适或更复杂。
【问题讨论】:
-
我从不理解这些“代表现实世界构造的对象”的讨论。答案始终取决于您尝试使用代码解决的实际问题。
-
也许至少我们知道选项是什么,它会有所帮助
-
“您应该只根据您所面临的实际问题提出实用、可回答的问题。喋喋不休的开放式问题会降低我们网站的实用性,并将其他问题推到首页之外。”
-
@Sunny 这不是一个实际的问题吗?你以前没见过有汽车的赛车游戏吧?
-
请不要再问反问了。我建议寻找解决方案的更好地方可能是阅读书籍或参加面向对象编程和更多编程的课程。学习如何设计课程并不是你会在 SO 上学到的东西,你的工具会影响这些设计决策。