你如何从抽象项目描述转向实际代码?

Jas*_*son 11 project-planning

也许是因为我现在已经编写了大约两个学期的编码,但我现在遇到的主要绊脚石是将教授的项目描述和要求转换为实际的代码.由于我目前在算法101中,我基本上做了一个自下而上的过程,从空白白板开始并绘制对象和方法交互,然后将其转换为类和代码.

但是现在教授已经将接口和抽象类混合在了一起.从理智上讲,我可以认识到它们是如何工作的,但是我正在弄清楚如何在当前项目中使用这些新工具(模拟Web服务器).

在我的教授自己的话中,将抽象描述映射到Java代码是真正的技巧.那么从英语(或任何语言)到计算机代码最常用的步骤是什么?您如何决定创建界面的位置和时间,或使用抽象类?

Joh*_*lla 6

那么从英语(或任何语言)到计算机代码最常用的步骤是什么?

经验教你如何做到这一点.如果它还没有自然而然地出现(并且如果没有自然感觉不好,因为它需要很长时间!),你可以问自己一些问题:

  • 该系统的主要概念是什么?它们如何相互关联?如果我向别人描述这个,我会用什么词和短语?这些想法将帮助您确定哪些类是有用的思考.

  • 这些东西有什么样的行为?它们之间是否存在天然的依赖关系?(例如,如果LineItem没有a 的上下文,则a 不相关或没有意义Order,Engine没有a 也没有多大用处Car.)行为如何影响其他对象的状态?他们是否相互沟通,如果是,以何种方式沟通?这些想法将帮助您开发类的公共接口.

当然,那只是冰山一角.有关这个思维过程的更多信息,请参阅Eric Evans的优秀书籍Domain-Driven Design.

您如何决定创建界面的位置和时间,或使用抽象类?

没有硬性和快速的处方; 再次,经验是这里最好的指南.也就是说,你可以遵循一些经验法则:

  • 如果几个不相关或明显不同的对象类型都提供相同类型的功能,请使用接口.例如,如果Steerable接口有一个Steer(Vector bearing)方法,可能会有很多不同的东西可以被引导:Boats,Airplanes,CargoShips,Cars等等.这些是完全无关的事情.但他们都有共同的界面,能够被引导.

  • 通常,尝试使用接口而不是抽象基类.这样您就可以定义一个实现N个接口的实现.对于Java,您只能有一个抽象基类,因此一旦您说某个类继承自另一个类,您就会被锁定到特定的继承层次结构中.

  • 每当你不需要从基类实现时,肯定喜欢一个抽象基类的接口.如果您使用的语言不适用继承,这也很方便.例如,在C#中,您不能struct从基类继承.