我得到了关于如何在OOP中代表一个动物园的这个采访问题,我的回答是动物园将拥有属性集动物,其中Animal是一个抽象类,动物园里的所有动物都会扩展它,它将包含物种,城市属性.和Zoo将扩展抽象类Agricultural_land,其中包含空间,地点属性.
我得到一个问题,如果我有不同类型的鸟类,如何在OOP中代表它们,我说我将为鸟类制作另一个类别,不同类型的鸟类将扩展它.
请把你的想法告诉我.
在面试中提出问题的主要原因是需要有关您技能的信息.所以,没有one good way回答这样的问题.相反,您可以考虑要展示哪些技能.
下面有几点提示:
任何对象都是状态(字段值)和行为(方法逻辑)的组合.我认为如果你必须将某些东西表示为对象,你最好先指定上下文.如果您开发了一些土地交易应用程序,那么您的Zoo应该包含cost,owner,lastSoldDate以及sell,changeOwner,calculateTax等方法.如果您从事游戏,那么您的动物园将拥有动物,树木等.清晰的上下文允许您决定什么对您的对象重要,哪些不重要.
至于鸟类,我建议你阅读Head First Design Patterns一书的第一章.有关如何设计鸭子等级以及如何避免常见陷阱的非常有趣和清晰的解释.他们解释了继承主体的构成,这对我来说是一种启示.现在我试图避免继承并将我的对象设计为一组负责行为的组件.现在,对于不同的鸟类,没有超过9000个班级,没有复杂的班级层次结构,如果你需要添加一只新的鸟类,你可以抓住它们.那是非常好的书:)