- 浏览: 119415 次
- 来自: ...
文章分类
最新评论
基础复杂性是守恒的,需要解决的基本问题始终是需要解决的;最终的复杂性,却取决于基础复杂性彼此间的依赖,如果互相依赖,最终将得到指数级的复杂性,而如果彼此独立,最终只是若干基础复杂性简单的累加,因此,程序需要更好的的Design和Organize,主要任务就是“降低模块间的依赖至最小”,而对开发效率有重大影响的,主要是编译期依赖,为此,人们发明了若干技术来降低编译期依赖
1,模块系统
C++继承了C的include机制,缺少ABI,缺少模块系统,客户端代码依赖于对象的内存布局,任何对头文件(类定义)的修改都导致需要编译所有客户端;传统上只能如下解决:
-
部分基于C++的平台提供了初步的模块系统来改善这个问题,如COM组件的dll;但依然基于内存模型,只能新增接口,不能修改原来的接口和删除原来的接口
-
改良include:使用Pimpl惯用法;使用前置声明;剔除不必要的include;预编译等(后三项主要是为了编译速度)
Java有一个ABI,基于ABI有一个模块系统,至少客户代码不再依赖于内存布局,而仅仅依赖于函数签名;类库作者可以较为放心的添加新功能,而不会影响那些不受控的遍及世界各地的客户代码
但模块系统依然有一个不能解决的问题:编译时依然需要“引用”的类和接口的定义
2,非侵入性
编译时对“引用”的类和接口定义的依赖,我们称之为“侵入性”的;任何显式的“接口”、“基类”都是侵入性的,不可避免的带来编译期依赖;即使这些依赖很小,但依然有办法而且应该尽可能消除
Java的法宝是反射,但效率低,并不具有类型安全性,因此,除非独立性和灵活性需求大于效率和类型安全需求的场合,一般不要使用反射;
而在非侵入性问题上,C++有强大的语言机制--模板:类型安全并且效率无损;它不需要你做任何继承操作,只需要满足模板参数的概念约束,提供“语法兼容”的调用即可;注意是“语法兼容”即可,这意味着你的函数可以是“static”的,也可以是“virtual”的,也可以什么都不是,只要签名一致就可以; 比如在扩充STL时,你不需要include任何STL头文件
当然模块系统和非侵入性在解决依赖问题上是正交的;作为降低编译期依赖的有效机制,以模板参数的概念约束形成的模块接口,应得到更多应用
发表评论
-
Architecture is layered
2004-12-11 11:57 379那天被问道软件架构师需要了解编程语言的细节吗? 呵呵,架构是 ... -
Thinking Everyday
2004-12-11 12:01 4401,编程语言的发展趋势 ... -
糟糕命名集锦
2004-12-11 16:50 5761,公交支线,如375和375 ... -
古代的软件开发 (一)
2005-02-19 16:45 6781,额外的中间层鞋子:人类发明鞋子的意义无论如何评价都不过分, ... -
访问控制 : 语言和平台
2005-03-15 19:27 616程序逻辑上的组织方式(如名称空间,包等)可以和部署时的分发 ... -
Thinking Everyday II
2005-03-17 15:11 6211, 是业务,不是技术,傻瓜 是集成,不是编程 是使用,不 ... -
内容与标准为王:下一代互联网与下一代搜索
2005-07-25 14:53 711第一代互联网混淆了真正的数据和它的表现形式,第一代搜索无法 ... -
个性与定制为王:下一代互联网和下一代门户
2005-07-28 11:28 614看一下现在我与互联网有关的生活:我有两三个常用的Web邮箱 ... -
泛型编程 vs. 面向对象
2005-08-10 14:30 837面向对象:封装(数据抽象)是基础,继承是手段,多态是目的 ... -
函数式编程 vs. 对象式编程
2005-08-10 14:44 651<<我爱我家>>有一集和平摔成了脑 ... -
用手机从ATM取钱
2005-11-21 22:49 697手机的以下两个特性,使它潜在的可能成为统一的支付和信用平 ... -
Web 3.0 : Unified Human-like Interaction
2006-01-14 16:31 700你还在到搜索引擎的主页上去搜索吗?你还登录新闻网站查询最新比赛 ... -
软件生物学
2006-01-14 16:59 651长久以来,软件的建筑学隐喻已经深入人心,可始终无法达到建筑 ... -
广义对象论
2006-01-25 15:31 715前几天本想接着以前的思维中对“3.2 Programming ... -
Thinking Everyday III
2006-03-26 14:17 7921, RAII让我告别了delete,IoC让我告别了ne ... -
简单至及的AOP和IOC
2006-03-26 14:21 665I. AOP的例子 1, Google To ... -
TDD: Tricky Driven Development
2007-05-10 07:07 600命名 测试用例的名字应该描述需求, 不要描述实现. ... -
Thinking Everyday IV
2007-05-15 04:36 5291, 实际上 C# 2.0 已经部 ... -
迭代本质论
2008-02-14 13:58 633新年伊始, 可能你又要制定一些计划了, 实际上, 你的生活在开 ... -
建筑的永恒之道
2004-08-10 18:31 6542,质 这种特质是任 ...
相关推荐
kernel.css 是一个非侵入性的语义化CSS和JavaScript框架,旨在提高网页开发的效率和可维护性。这个框架的核心理念是将样式和行为分离,同时保持代码的清晰和易于理解,这对于大型项目的开发尤其重要。 在CSS方面,...
为了适应这一需求,"基于云平台的非侵入式负荷监测与识别系统"应运而生,该系统的技术创新和应用前景极具潜力。 首先,让我们来深入探讨一下非侵入式负荷监测与识别系统的设计初衷和工作原理。传统上,电力消耗的...
非侵入式测试技术则是针对这种系统进行检测和调试的一种先进方法,它在不中断正常运行的情况下,对继电保护装置进行测试,以验证其功能正确性和性能稳定性。 本资料主要探讨的是"智能变电站继电保护非侵入式测试...
非侵入性意味着这个工具不会对开发者的工作流产生干扰,而是通过某种机制在后台自动地执行任务。这个工具的主要功能包括API的编译、收集以及Rest文档的生成。 首先,API编译是指将API接口定义转换为可执行的代码...
通过获取和处理硬件信息,生成机器码和注册码,可以增强系统的安全性,防止非法用户的侵入,同时为合法用户提供顺畅的使用体验。这种机制在很多商业软件和高级会员服务中都有所应用,是现代会员管理系统不可或缺的一...
5. 非侵入式监测系统构建:为了实现有效的负荷监测,需要构建一个包含信号采集、传输、处理和分析等多个模块的智能电网非侵入式监测系统。这个系统需要具备稳定的数据通信能力,确保监测数据能够及时准确地传输到...
通过脉搏波检测技术,系统能够非侵入性地获取这些参数,提供对心脏功能、血管功能及微循环功能的客观评估。这种检测方式在预防心血管疾病和指导相关疾病的治疗中具有重要价值。 与基于PC机的检测系统相比,嵌入式...
本文将深入探讨“行业分类-设备装置-一种Android系统的软构可信平台模块STPM的构建方法”,这是一种针对Android系统的安全技术,旨在增强设备的安全性,保护用户数据,并确保系统的完整性。 可信平台模块(Trusted ...
8. 可靠性与冗余:为了确保系统的稳定性和可靠性,远程数据模块设计时会考虑到故障转移和数据备份机制。 远程数据模块在可燃性气体报警系统中的应用可以大幅提升系统的响应速度和管理效率。例如,在一个大型化工厂...
6. **插件化设计**:EMonitor采用插件化架构,允许开发者根据需求添加自定义的监控模块,增强了系统的可扩展性。 7. **低资源消耗**:由于非侵入式的特性,EMonitor在保证功能的同时,尽可能减少对系统资源的占用,...
1. **脑电波(EEG)技术**:脑电图是一种记录大脑活动的非侵入性方法,通过在头皮上放置电极来捕捉神经元放电产生的电信号。在疲劳检测中,脑电波的α波和θ波通常与人的放松和睡眠状态有关,增加的这些波段活动可能...
侵入式(Intrusive)是Boost库中的一个模块,它提供了一种高效且灵活的方式来管理内存,特别是对于那些需要直接控制内存布局和对象生命周期的应用。侵入式容器允许程序员将容器功能直接“侵入”到用户定义的数据结构...
这种系统结构具有开放性、先进性、实用性、经济性、可靠性、灵活性和模块化等特点,满足了大楼综合布线系统结构与配置的各种需求。 1.1 系统设计原则: 开放性:大楼综合布线系统结构与配置系统的开放性是指系统的...
### SAP系统中销售与分销模块相关的BADI #### 概述 在SAP系统中,销售与分销(Sales and Distribution, SD)模块是企业资源规划(ERP)解决方案的关键组成部分之一,用于管理销售订单处理、出库流程、发票验证等...
EM241模块支持多种通信标准和协议,可以确保与各种通信设备的兼容性,同时提供自动拨号和自动应答等功能,方便用户在远程实施控制任务。 EM241模块的主要特点包括: - 通过电话线或者ISDN实现远程通讯; - 支持多种...
利用Shell_NotifyIcon API函数,开发者可以创建带有标题和消息的气泡提示,提供非侵入性的通知给用户,而不会干扰他们的主工作区。 以上各个模块在VB编程中都是非常实用的功能,它们能够帮助开发者创建功能丰富的...
4. **实现无侵入性**:为了使皮肤功能无侵入性,即不影响现有代码结构,开发者可以将换肤逻辑封装在一个单独的服务或者模块中。这样,其他业务代码无需关心皮肤功能的具体实现,只需在初始化时调用皮肤服务进行注册...
【标题】:“毕业设计:基于PHP非侵入式监控平台xhgui”是一个关于使用PHP构建的系统性能监控和故障定位工具的项目。这个平台,称为xhgui,旨在帮助开发者优化应用程序性能,快速定位并解决可能出现的错误,是开发...