标签:
欢迎关注我的个人博客,获得更佳的阅读体验:www.beyondbin.com
鸣谢:感谢Lave Zhang启发了我们前端的设计思路,以及百度地图为我们提供的全国所有城市地铁的xml文件。
结对编程:邓楚云 岳桐宇
信息隐藏实际上就是封装机制。具备封装性的程序设计隐藏了某一方法的具体执行步骤,取而代之的是通过讯息传递机制传送讯息给它。封装是通过限制只有特定类别的物件可以存取这一特定类别的成员,而它们通常利用介面实作讯息的传入传出。所有的类与组件均通过接口进行访问,并且内部数据必须通过安全的访问函数以实现,可以充分切分软件结构,从而实现模块化。因此,举例来说,“狗”这个类有“吠叫()”的方法,这一方法定义了狗具体该通过什么方法吠叫。但是,其他人并不知道它到底是如何吠叫的。而当狗的吠叫被封装到类中,任何人都可以简单地使用。
程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。应用程序接口是一组数量上千、极其复杂的函数和副程序,可让程序设计师做很多工作,譬如“读取文件”、“显示选单”、“在窗口中显示网页”等等。操作系统的API可用来分配内存或读取数据。许多系统应用程序借由API接口来实现,像是图形系统、资料库、Web服务,甚至是线上游戏。应用程序接口有诸多不同设计。用于快速执行的接口通常包括函数、常量、变量与数据结构。也有其它方式,如通过解释器,或是提供抽象层以遮蔽同API实现相关的信息,确保使用API的代码无需更改而适应实现变化。
耦合性是一种软件度量角度,是指一程序中,模块及模块之间通信或参数依赖的程度。松耦合性是结构良好程序的特性,松耦合性程序的可读性及可维护性会比较好。松耦合的目标是最小化依赖。松耦合这个概念主要用来处理可伸缩性、灵活性和容错这些需求。但是松耦合要付出使系统更加复杂的代价,松耦合意味着更多的开发以及维护工作量。一个例子:A系统作为服务提供方,与B1,B2,B3....Bx等服务消费方系统对接,使用紧耦合点对点的方式来系统集成,那么假如A系统如果更改了地址,那么B1,B2,B3...Bx系统都需要求相应的请求地址。说明系统和系统间严重依赖。要实现松耦合,通常的做法就是引入Mediator(中间层,也有翻译成中介者),在SOA中,这个中间层通常指的就是ESB(企业服务总线)。
如果我们将每一个类都很详细地进行DbC,那也是一件很耗时、痛苦的没有必要的事情,正如你预防着小偷固然好,但是将除了自己之外的其他人都像防贼一样来防着也不合适一样。我们应该是适当地DbC。
由于只是实验性地使用DbC进行设计。在对Core模块的路径规划功能的设计中应用了DbC,在保证调用操作前后应当属于何种状态,即前置条件,后置条件和不变式。前置条件发生在每个操作(方法,或者函数)的最开始,后置条件发生在每个操作的最后,不变式实际上是前置条件和后置条件的交集。违反这些操作会导致程序抛出异常。
最开始我的考虑和大多数同学一样,想将一个图片作为整个交互式地图的控件基底,对其进行控件制作。但是考虑到了图片这种数据形式拓展性极差,不符合软件的迭代发展方式,遂决定放弃这种粗犷的地图制作模式。由于缺少前端设计的基础,思路一度陷入了停滞阶段。很幸运的是在网上查找资料时发现了两个既有价值的博文,一是Lave Zhang教会了我如何自定义绘制控件,二是从地铁网站截取地铁图XML文件,就此奠定了前端设计的基础。但是由于Lave Zhang的博文采用的WinForms框架,已经跟不上时代的潮流,我便操刀开始使用WPF改写他的全部设计方案,在这之中付出了大量的努力与尝试。然后结合作业要求添加了不少功能,和特性,整个软件有极强的拓展性。
因为本次程序要求能同时计算换乘最少和站点最少,因此我在原本的计算最短路径的spfa算法的基础上增添了路由表功能,每个能到达的节点都拥有一张路由表,表示到达当前节点的目前全部来自于不同线路的最优路径,因为对于换乘站点,只保存一条最优的路径是不够的。而在每次更新新节点的路由表的时候,需要遍历这个节点的前序节点所有的路由表,根据这张路由表更新新节点的路由表。最后从终点的路由表中选取一个站点数最少的路由。
标签:
原文地址:http://www.cnblogs.com/hyperleopard/p/5928414.html