关于 C++软件设计的建议
简介
RT
参考资料
C++语言的设计与演化
内容
在回答这个问题时,程序员经常把注意力集中在语言特征上:我要不要使用 inline 函数?虚函数?多重继承?单根层次结构?抽象类?重载函数?这种关注根本就是错的。
这些语言特征的存在只是为了支持更具本质性的折中:设计是否应该
• 强调运行时的效率?
• 使修改之后的重新编译达到最小化?
• 最大化跨平台的可移植性?
• 允许用户扩展基本的库?
• 允许在没有源代码的情况下使用?
• 与现存的记法和风格混合在一起?
• 使之可以从不是用 C++写的代码中调用?
• 对新手也很容易使用?
给出了对于这些问题的回答之后,自然而然地也就有了对于语言层问题的答案。
库的设计思想
名称空间解决了不同的库中使用同样名称的基本问题;异常处理为建立一种处理错误的公共模型提供了基础。
模板是为定义独立于具体类型的容器类和算法而提供的一种机制,其中的具体类型可以由用户或者其他的库提供。
构造函数和析构函数为对象的初始化和最后清理提供了一种公共模型。抽象类提供了一种机制,借助于它可以独立地定义接口,与实际被接口的类无关。运行时的类型信息是为寻回类型信息而提供的一种机制,因为当对象被传递给一个库然后再传递回来的时候,可能只携带着不够特殊的(基类的)类型信息。当然这些不过是有关语言功能的一方面用途,但如果把他们看成针对由独立开发的库触发去构造程序的支持功能,问题就更清楚了。
最好的方式是库的供应商认识到他们并不拥有整个世界,将来也不会如此,而给予这种认识设计出的库,实际上最符合他们自身的利益。
关于 C++软件设计的建议的更多相关文章
- [置顶] 软件设计之道_读书纪要.doc
本系列的文档都是我读书后的个人纪要,如想了解更多相关内容,请购买正版物.对应的图书可以从我的个人图书列表里找寻:个人毕业后图书列表 1. 每个写代码的人都是设计师,团队里每个人都有责任保证自己的代码 ...
- AOP软件设计
什么是面向方面的编程? 为什么面向方面的软件设计? 术语 关注 视口 关注点分离 人工制品 横切 方面 编织 零件 形式主义 第二节 案例研究 关注 人工制品 横切 方面 AspectJ 加入点 切入 ...
- 这样学BAT必面之软件设计原则,还不会就是我的问题
学习设计原则是学习设计模式的基础.在实际开发过程中,并不要求所有代码都遵循设计原则,我们要考虑人力.时间.成本.质量,不能刻意追求完美,但要在适当的场景遵循设计原则,这体现的是一种平衡取舍,可以帮助我 ...
- 读书笔记《A Philosophy of Software Design - John Ousterhout 软件设计哲学》
软件设计哲学这本书很薄,值得一读.这本书将大家平时碰到的很多软件问题从更深刻的层面进行了抽象分析,同时又给出了具体的解决方案.可以说既有理论高度,又能贴近实践. 但针对软件问题,这本书并没有提出太多与 ...
- 我的敏捷、需求分析、UML、软件设计电子书 - 下载(持续更新中)
我将所有我的电子书汇总在一起,方便大家下载!(持续更新) 文档保存在我的网站——软件知识原创基地上(www.umlonline.org),请放心下载. 1)软件设计是怎样炼成的?(2014-4-1 发 ...
- C#远程时间同步助手软件设计
C#远程时间同步助手软件设计 本程序才C#语言开发,实现远程时间同步功能,可以将本地时间每隔一段时间与时间服务器时间进行同步!不足之处还望见谅! 软件开发环境:Visual Studio 2010 软 ...
- 敏捷遇上UML-需求分析及软件设计最佳实践(郑州站 2014-6-7)
邀请函: 尊敬的阁下:我们将在郑州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实 ...
- C#软件设计——小话设计模式原则之:依赖倒置原则DIP
前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做“全战”, ...
- C#软件设计——小话设计模式原则之:单一职责原则SRP
前言:上篇C#软件设计——小话设计模式原则之:依赖倒置原则DIP简单介绍了下依赖倒置的由来以及使用,中间插了两篇WebApi的文章,这篇还是回归正题,继续来写写设计模式另一个重要的原则:单一职责原则. ...
- C#软件设计——小话设计模式原则之:接口隔离原则ISP
前言:有朋友问我,设计模式原则这些东西在园子里都讨论烂了,一搜一大把的资料,还花这么大力气去整这个干嘛.博主不得不承认,园子里确实很多这方面的文章,并且不乏出色的博文.博主的想法是,既然要完善知识体系 ...
随机推荐
- fiddler的自动响应器
1.点击autoresponder,勾选enable rules和unmatched requests passthrough 2.替换步骤 (1)把要替换的会话拉取到空白处,或者选中要替换的内容点击 ...
- DOC,PDF,PPT文件转换为HTML代码记录
pom文件引入 <repositories> <repository> <id>com.e-iceblue</id> <url>http:/ ...
- 用DevEco Studio增量补丁修复功能,让鸿蒙应用的调试效率大增
在鸿蒙应用开发的快节奏赛道上,每一秒的开发效率提升都至关重要.如何更快地看到代码更改后的效果?如何尽可能缩短开发.调试和验证的周期?如何做到在某大厂180万行+项目中将代码修改即时生效?这些问题在De ...
- 【笔记】reko 0.10.2 反编译工具安装和使用记录|(2) 翻译 user‘s guide
Reko user's guide Reko是一个二进制可执行文件的反编译器.它接受输入的一个或多个二进制可执行文件,然后反编译成高级语言.它可以在GUI shell中被交互地使用,作为一个命令行项目 ...
- JS 原型链的终点
从对 js 原型和原型链查找的特性, 我们知道了两个最为重要的结论: 函数对象天生存在 prototype 属性, 它是一个对象, 而它的 constructor 属性指回 函数自身 构造函数的 pr ...
- 鸿蒙Next复杂列表性能优化:让滑动体验如丝般顺滑
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- 【语义分割专栏】先导篇:评价指标(PA,CPA,IoU,mIoU,FWIoU,F1)
目录 前言 混淆矩阵 计算混淆矩阵 评价指标 像素准确率(Pixel Accuracy,PA) 类别像素准确率(Class Pixel Accuracy,CPA) 类别平均像素准确率(Mean Pix ...
- System.Drawing.Point与System.Windows.Point的异同
在C#中,System.Drawing.Point 和 System.Windows.Point 是两个不同的结构,分别属于不同的命名空间,用于表示二维平面中的点.尽管它们的功能相似,但在使用场景和实 ...
- WPF学习问题汇集:
WPF中ItemsSource改变,DataGrid中不更新 需要将ItemsSource先赋值为null,而后再赋值为新的值. 例如: gridBeamInfo.ItemsSource = null ...
- Linux Shell整理小知识
Linux Shell整理小知识 介绍两个命令 1. shopt shell option, 即shell的一些选项设置 [root@localhost ~]# shopt autocd off cd ...