规约(specification)的设计

  在过去的学习中,我对于规约的理解可以说就是简单的注释,方便写完代码后改bug,但是别的就不知道了 ,在这学期的软件构造课上听了xhc老师的讲解我才终于有了新的认知。

  通过这学期的学习,我知道了过去我用C语言写的哪些只不过是很简单的东西,而实际的大项目与之前的那种一个项目只有一个文件的那种截然不同,实际的项目都是由很多人合力完成的,其中涉及到了复杂的版本控制技术,以及对于实际问题的抽象,因此规约是必不可少的一部分

  通过查阅资料以及听老师的讲解,我知道了在实际的软件工程中,先是客户端提出需求,之后软件架构师经过思考后设计出实现需求所需的接口,并给出规约,之后接口被提供给软件测试人员以及软件开发人员,测试员根据规约写出测试用例,而开发人员则根据规约完成接口的实际实现,在经过测试用例的调试后找到问题并解决,不断循环,最终得到让客户端满意的程序。而等到客户端使用的时候,直接根据规约调用即可。

 

 

 

  规约提供着一种防火墙一样的作用,可以提高编码的效率,具体来说:客户端不需要知道接口具体是如何实现的,只需要按规约进行使用即可;而哪怕是接口的实现由于某些原因发生了变化,客户端仍然可以放心的调用。从实现者的角度来看,实现者不需要知道输入是否合理(这是调用者的责任,若调用者不按规约来,那么实现者理论上也可以自由的来)

 

  在IDEA中(它是真的智能。。。)只需要输入  /**  再敲个回车,它就会自动生成框架,

 1     /**
 2      * Add, change, or remove a weighted directed edge in this graph.
 3      * If weight is nonzero, add an edge or update the weight of that edge;
 4      * vertices with the given labels are added to the graph if they do not
 5      * already exist.
 6      * If weight is zero, remove the edge if it exists (the graph is not
 7      * otherwise modified).
 8      * 
 9      * @param source label of the source vertex
10      * @param target label of the target vertex
11      * @param weight nonnegative weight of the edge
12      * @return the previous weight of the edge, or zero if there was no such
13      *         edge
14      */
15
public int set(L source, L target, int weight);

图中是某次实验的示例,从中可以看到开头是对于该方法的解释,随后的@param是传入的参数的解释,@return是返回值的解释,而除了该例子的以外,@throw为该方法可能抛出的异常以及其原因,可以说只要规约准确易懂,客户端与实现端都能按照规约进行,那么这个项目距离成功就又近了一步

 

 

 

 

 

posted @ 2022-06-06 16:25  HITyfj  阅读(114)  评论(0)    收藏  举报