如何在面向对象中表示动物园?

时间:2012-03-22 10:09:20

标签: java oop

我收到了关于如何在OOP中代表动物园的采访问题 我的答案是,动物园将拥有属性动物,其中动物是一个抽象类,动物园里的所有动物都将扩展它,它将包含物种,城市属性。 和Zoo将扩展抽象类 Agricultural_land ,其中包含空格,位置属性。

我得到一个问题,如果我有不同类型的鸟类,如何在OOP中代表它们,我说我将为鸟类制作另一个类别,不同类型的鸟类将扩展它。

请把你的想法告诉我。

4 个答案:

答案 0 :(得分:6)

在面试中提出未解决问题的主要原因是需要有关您技能的信息。所以,没有one good way来回答这类问题。相反,您可以考虑要展示哪些技能。

以下几点提示:

  • 基本对象分析(如何创建类,方法或属性)
  • 构建类层次结构(需要继承 - 何时不需要)
  • 使用接口
  • 控制倒置
  • 设计模式(例如观察者模式是否适合兽医和动物健康控制?)
  • 您构建单元测试的方法

答案 1 :(得分:5)

任何对象都是状态(字段值)和行为(方法逻辑)的组合。我认为如果你必须将某些东西表示为对象,你最好先指定上下文。如果您开发了一些土地交易应用程序,那么您的动物园应该包含成本所有者 lastSoldDate 等字段以及出售, changeOwner calculateTax 。如果您从事游戏,那么您的动物园将拥有动物等等。清晰的上下文允许您决定什么对您的对象和什么不重要。

至于鸟类,我建议你阅读Head First Design Patterns书的第一章。有关如何设计鸭子等级以及如何避免常见陷阱的非常有趣和清晰的解释。他们解释继承主体上的组合,这对我来说是一种启示。现在我试图避免继承并将我的对象设计为一组负责行为的组件。现在,对于不同的鸟类,没有超过9000个班级,没有复杂的班级层次结构,如果你需要添加一只新的鸟类,你可以抓住它们。那本书真是太好了:)

答案 2 :(得分:1)

从语源学的角度来说,“动物”这个词源自拉丁语,意思是“生命存在,是一种呼吸的存在”。鸟类呼吸并且是动物王国的成员。

所以 Bird 类将扩展 Animal

答案 3 :(得分:0)

你可以在扩展树中开始更高...... 你有一个由“鸟类延伸”的“生命之翼”,它会得到扩展......

动物园里只有动物。它有道路,工人,访客,树木,垃圾桶......