Zero Lee的专栏

组件间的物理关系

   开发可维护、易测试和可重用的软件需要全面的物理设计和逻辑设计的知识。物理设计研究组织的问题,超出了逻辑领域的范畴,物理设计很容易影响可测量的特性,例如运行时间、编译时间、连接时间以及可执行文件大小。

   一个组件是由一个.c文件和.h文件组成的物理实体,它具体表达了一个逻辑抽象的具体实现。一个组件一般包含一个、两个甚至多个类,已经需要用来支持全部抽象的适当的自由运算符。一个组件(而不是一个类)是逻辑设计和物理设计的适当单位,因为它能够:
   1)让若干逻辑实体把一个单一的抽象表现为一个内聚单位;
   2)考虑到物理问题和组织问题;
   3)在其他程序中选择性地重用编译单元。

   一个组件的逻辑接口仅限于指能够被客户程序通过编译访问的部分,而物理接口则包括它的整个头文件。如果在一个组件的物理接口中使用了一个用户自定义类型T,即使T是一个封装的逻辑细节,也可能迫使那个组件的客户程序在编译时依赖T的定义。
   组件是自我包含的、内聚的和潜在的可重用的设计单位。在一个组件内部声明的逻辑结构不应该定义在那个组件之外。一个组件的.c文件应该直接包含它的.h文件,以确保.h文件可基于它自己进行语法分析。对于每一个需要的类型定义,都始终包含其头文件,而不是依赖一个头文件去包含另一个,这样,当一个组件允许一个#include 指令从其头文件中被删除时不会出现问题。想要改进可用性、可重用性和可维护性,如果某个带有外部连接的结构没有在一个组件的.h文件声明,那么我们应该避免把该结构放在这个组件的.c文件中。同样的原因,我们应该避免使用局部声明去访问有外部连接的定义。
   
   最后友元关系虽然表面上是一个逻辑关系,但会影响到物理设计。在一个组件内部,(局部的)友元关系是那个组件的一个封装的实现细节。为了改进可用性和用户可扩展性,一个容器类常常会把同一个组件内的迭代器视作友元,不会破坏封装。友元关系只会直接影响访问权限但不会隐含依赖。

posted on 2007-03-20 20:56 Zero Lee 阅读(811) 评论(2)  编辑 收藏 引用 所属分类: CC++ Programming

评论

# re: 组件间的物理关系 2007-03-21 10:03 Neal

写的不错,不过有一点觉得不妥。
“组件”不知是不是指component呢?
个人认为,不能简单的把C文件和组件对应起来;C/C++的文件组织不象JAVA之类的语言,要求遵循一定的规则,C/C++的文件组织是很散漫的。不过作为一种coding standard,强制要求把组件和文件对应起来也未尝不可,但这实际上会降低组件的可维护性和代码级别的重用性。  回复  更多评论   

# re: 组件间的物理关系 2007-03-21 10:20 kkk

你想说的是减少编译依赖性,有个基本原则:能不知道的就不要知道。比如类的成员是个指针,就不要在。h中包含定义那个类的。h文件,用个前导申明。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理