在未来时态下研发C 程式
2008-02-23 05:35:02来源:互联网 阅读 ()
好的软件能够适应变化。他提供新的特性,适应到新的平台,满足新的需求,处理新的输入。
新的函数将被加入到函数库中,新的重载将发生,于是要注意那些含糊的函数调用行为的结果;新的类将会加入继承层次,现在的派生类将会是以后的基类,并已为此作好准备;将会编制新的应用软件,函数将在新的运行环境下被调用,他们应该被写得在新平台上运行正确;程式的维护人员通常不是原来编写他们的人,因此应该被设计得易于被别人理解、维护和扩充。
这么做的一种方法是:用C 语言自己来表达设计上的约束条件,而不是用注释或文档。例如,假如一个类被设计得不会被继承,不要只是在其头文档中加个注释,用C 的方法来阻止继承。
假如一个类需要其实例全部创建在堆中,不要只是对用户说了这么一句,用以前介绍过的方法来强迫这一点。
假如拷贝构造和赋值对一个类是没有意义的,通过申明他们为私有来阻止这些操作。
应该判断一个函数的含意,连同他被派生类重定义的话是否有意义。假如是有意义的,申明他为虚,即使没有人立即重定义他。假如不是的话,申明他为非虚,并且不要在以后为了便于某人而更改;确保更改是对整个类的运行环境和类所表示的抽象是有意义的。
处理每个类的赋值和拷贝构造函数,即使“从没人这样做过”。他们现在没有这么做并不意味着他们以后不这么做。假如这些函数是难以实现的,那么申明他们为私有。这样,不会有人误调编译器提供的默认版本而做错事(这在默认赋值和拷贝构造函数上经常发生)。
基于最小惊讶法则:努力提供这样的类,他们的操作和函数有自然的语法和直观的语义。和内建数据类型的行为保持一致:拿不定主意时,仿照int来做。
要承认:只要是能被人做的,就有人这么做(WQ:莫菲法则)。他们会抛异常;会用自己给自己赋值;在没有赋初值前就使用对象;给对象赋了值而没有使用;会赋过大的值、过小的值或空值。一般而言,只要能编译通过,就有人会这么做。所以,要使得自己的类易于被正确使用而难以误用。要承认用户可能犯错误,所以要将您的类设计得能够防止、检测或修正这些错误。
努力于可移植的代码。写可移植的代码并不比不可移植的代码难太多,只有在性能极其重要时采用不可移植的结构才是可取的。即使是为特定的硬件设计的程式也经常被移植,因为这些平台在几年内就会有一个数量级的性能提升。可移植的代码使得您在更换平台是比较容易,扩大您的用户基础,吹嘘支持开放平台。这也使得您赌错了操作系统时比较容易补救。 将您的代码设计得当需要变化时,影响是局部的。尽可能地封装;将实现细节申明为私有。只要可能,使用无名的命名空间和文档内的静态对象或函数。避免导致虚基类的设计,因为这种类需要每个派生类都直接初始化他--即使是那些间接派生类。避免需要RTTI的设计,他需要if...then...else型的瀑布结构。每次,类的继承层次变了,每组if...then...else语句都需要更新,假如您忘掉了一个,您不会从编译器得到任何告警。
未来时态的考虑只是简单地增加了一些额外约束:
·提供完备的类,即使某些部分现在还没有被使用。假如有了新的需求,您不用回过头去改他们。
·将您的接口设计得便于常见操作并防止常见错误。使得类容易正确使用而不易用错。例如,阻止拷贝构造和赋值操作,假如他们对这个类没有意义的话。防止部分赋值。
·假如没有限制您不能通用化您的代码,那么通用化他。例如,假如在写树的遍历算法,考虑将他通用得能够处理任何有向不循环图。
未来时态的考虑增加了您的代码的可重用性、可维护性、健壮性,已及在环境发生改变时易于修改。他必须和进行时态的约束条件进行取舍。太多的程式员们只关注于现在的需要,然而这么做牺牲了其软件的长期生存能力。是和众不同的,是离经叛道的,在未来时态下研发程式。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash