我不想说这取决于,但这取决于。
如果您需要为世界上的每辆汽车建模,并拥有可以调用它们的方法(例如“更换轮胎”,每个模型的过程都非常不同),那么是的,您将拥有很多臃肿的类,因为你的现实世界的情况也很臃肿。
如果你只是想要一个原型车图片的数据库,而不管是你邻居实例的图片还是你姐姐的实例图片你都不开车,那么你可以去掉底层。“2009 VW CC”很可能是一个实例,尽管您可以想象它也是另一个模型中的一个类。
或者,也许您根本不需要使其成为真正的子类。一个简单的参考可能就足够了。例如,一家保险公司知道大量的汽车型号和年份,但开发人员不会为每个型号编写一个子类。相反,他们有一个汽车模型数据库,其中一行可能代表 2009 年大众 CC。当您为您的汽车投保时,他们会创建一个引用“2009 VW CC”实例的“Insured Car”实例。
这并不严格遵循“为‘is-a’关系使用继承”,但所有车型上的操作都是相同的——只是参数(例如每年的保险价格)发生了变化,以及新车型记录在数据库中,而不是代码中。
这里的一个假设是,您可以将差异模型之间的差异建模为汽车上相同方法的仅参数。
(旁白:当 iPhone 开始通过电话公司网站上市时,我注意到它打破了他们的类模型——他们的网站似乎在一个页面上处理了数十个品牌和型号的手机——大概使用了一个简单的手机数据库和他们的功能——然后需要一个特殊的页面来处理 iPhone 型号,大概是因为他们的类需要新的特殊方法来支持 iPhone 销售的某些方面。自动销售台会说“按 1 购买手机。按 2买一部 iPhone。”)