C/C++
acloud_csu
90年毕业于中南大学。麦芯半导体设备应用操作系统发明人。擅长C + + 编程、设计和分层架构。精通面向对象和设计模式。
展开
-
麦芯(MachCore)应用开发教程3 --- 组件,方法和字段
麦芯增加组件以及组件包含的方法和字段的方法介绍原创 2024-03-16 17:40:41 · 505 阅读 · 0 评论 -
新申请了公众号
欢迎关注。原创 2023-12-28 13:02:43 · 350 阅读 · 0 评论 -
什么是时序
PC端做设备控制软件,有一个核心概念叫做时序,这里分享一下我的认识。先看代码。// 时序函数1void sequence1(int& step){switch(step):{ case 0: // do something step++; break; case 1: // do something step++; brea...原创 2021-10-14 14:51:59 · 7241 阅读 · 1 评论 -
C++ Follow Me(4): 封装
C++ Follow Me(4): 封装黄国强 2007-3-30 C++与C最大的不同,就在于C++可以将数据和操作数据的函数放在一起,变成一个独立的物体。即,类(class)。典型的好处就是调用一个函数不用传很多参数了。 但对于很多人来说,把哪些函数和数据放在一个类中,却是个大问题。事实上,在我们周围,设计不良的类比比皆是。 在上一篇中,我们从职责的角度解决了如何得到...原创 2020-04-08 15:57:53 · 223 阅读 · 0 评论 -
C++ Follow Me(3): 类的产生(下):从职责中提取
C++ Follow Me(3): 类的产生(下):从职责中提取黄国强 2006-12-21 在C中,软件可以认为是函数的集合。我们一般是从功能中来提取函数并将之模块化。与C不同的是,C++程序是由一系列类组成。所以按功能来获得类的出发点是不对的。那么,我们应该从什么角度才能得到我们所需的类了?答案正如标题所述,从职责中提取。 职责(responsibility)和功能(fu...原创 2020-04-08 15:56:33 · 234 阅读 · 0 评论 -
C++ Follow Me(1): 你面向对象了吗?
C++ Follow Me(1): 你面向对象了吗?黄国强 2006-7-12 传统的C的编程方式是以函数为中心的编程方式,换句话,整个程序就是函数的集合。有人要问,这有什么问题吗?当然没有问题。在面向对象技术出现之前,用过程式的设计方法依然构建出很多出色的系统,甚至有的现在还在运行。 那么我们为什么还需要向面向对象的方法转变呢?一个很现实的问题就是经济方面的问题。用面向对象...原创 2020-04-05 00:16:10 · 193 阅读 · 0 评论 -
产生式编程(Generative Programming,GP)
产生式编程(Generative Programming,GP)黄国强 2005/10/31 从2004年我开始学习产生式编程,到现在已经有一年多的时间,其间用这种编程和设计方法写了数万行C++代码。充分认识到其巨大的优势,同时也对其适用的范围有了一些认识。特别是后原创 2011-09-09 13:33:07 · 3132 阅读 · 2 评论 -
慎重使用Get/Set成员函数(三)Get函数替代办法-让类说话
慎重使用Get/Set成员函数(三)Get函数替代办法-让类说话黄国强 2011-8-25上文中的类CSample的Get函数取消后,那么我们从外部将不能获得它内部m_nVal的值。举个例子,未取消前的代码是这样的:int nTmp = aSampleObj.Ge原创 2011-08-25 14:16:57 · 1141 阅读 · 0 评论 -
慎重使用Get/Set成员函数(四)CSample可以被其他类做为返回值
慎重使用Get/Set成员函数(四)CSample可以被其他类做为返回值黄国强 2011-10-11在上文中,我们设计了一个去掉了Get/Set函数的值对象CSample。这次他作为COther 的成员,请见下面的例子。//////////////////////原创 2011-10-11 10:28:15 · 1280 阅读 · 0 评论 -
领域层能否引用其他基础库中的UI控件?
领域层能否引用其他基础库中的UI控件?黄国强 2011-11-28首先说结论,结论是可以引用。理由如下:1 从实用性角度分析: 看一个例子,比如界面上有一个CListBox控件,我们需要填充它,分别是两种写法: 1) 写法一,领域层没有对UI控件的引用 CStringArray ret; pDomain->GetStringArra原创 2011-11-25 10:09:25 · 1205 阅读 · 0 评论 -
集中决策和分散决策(2)
集中决策和分散决策(2)黄国强 2011-12-20与集中决策相对应的就是分散决策。下面的代码是按分散决策的思路写的。class P2{private: int m_nVal;public: int fun(int nVal1,int nVal2,int nVal3)const { if(m_nVal原创 2011-12-21 12:43:29 · 2088 阅读 · 0 评论 -
软件开发:依赖关系的三条原则
黄国强 2004年09月16日 类与类之间依赖度越低,可复用的机会越大。而且修改起来很方便,便于重构。近来看到一本书上提到以下三条原则,感觉非常重要。由于书不在手边,故书名未写出来,内容只是表达一个意思,与原文有差异。1 任何一个类不要从一个具体类中继承;2 任何一个类成员原创 2011-07-28 09:05:48 · 1918 阅读 · 0 评论 -
重构和增加功能
重构和增加功能 黄国强 2004年09月16日 今天有一位同事问到一些开发的问题,我认为比较典型,故写上一段短文,希望能给大家一点启发。 我们遇到软件增加功能的时候,传统的方法是拿过源代码直接动手修原创 2011-07-28 09:08:40 · 1173 阅读 · 2 评论 -
软件开发:类与角色
软件开发:类与角色 黄国强 2004年09月16日 我们往往从角色的角度考虑给一个类划分出多个接口。这样就能达到接口隔离的效果。一般基类的命名都是CXXXBase之类,但角色却不是这样命名。他往往应该原创 2011-07-28 09:07:45 · 1012 阅读 · 0 评论 -
慎重使用Get/Set成员函数(二)Set函数和其他修改函数的替代办法
慎重使用Get/Set成员函数(二)Set函数和其他修改函数的替代办法黄国强 2011-7-19前文说到,尽量避免使用Get和Set这样的函数,下面介绍的是替代办法。第一步,把Set中的函数参数都放到构造函数中。第二步,把所有其他的修改函数都变成不变函数。比如下面的代码:clas原创 2011-07-19 13:07:26 · 962 阅读 · 0 评论 -
大象vs蚂蚁
大象vs蚂蚁黄国强 2004-12-22 前两天,去参加了微软的软件开发高级管理培训班。有一点感想,与大家分享。微软是软件行业的巨无霸、航空母舰。我所在的公司比较起来,可能算是一个蚂蚁。所以,一只蚂蚁要象大象学习,教条的照搬可能会死的会很难看。而且开发一个产品最终是否成功原创 2011-07-26 16:27:49 · 706 阅读 · 0 评论 -
信息隐藏(Information Hiding)原则
信息隐藏(Information Hiding)原则黄国强 2006-10-25 信息隐藏是结构化设计与面向对象设计的基础。在结构化中函数的概念和面向对象的封装思想都来源于信息隐藏。软件业对这个原则的认同也是最近十年的事情。 David Parnas在1972原创 2011-07-26 16:25:44 · 8617 阅读 · 0 评论 -
隐喻:层与层之间的控制关系与倒车雷达
隐喻:层与层之间的控制关系与倒车雷达黄国强 2006-9-27 前一阵子到苏州参加IC China 2006,在回来的路上我突然想起了这个题目。 事情是这样的,在一个路口我们车在等红绿灯的时候过了线,旁边还站了个警察。我们的司机由于忘带驾照,怕引起警察注意而导原创 2011-07-26 16:26:45 · 780 阅读 · 0 评论 -
软件项目成功的秘诀(英)
(朋友翻译的我的一篇博文:http://blog.csdn.net/acloudhuang/article/details/5793503)1. only small projects;2. re in big projects, the first cut原创 2011-07-11 14:22:22 · 1355 阅读 · 0 评论 -
集中决策和分散决策(1)
集中决策和分散决策(1)黄国强 2011-12-20何为集中决策?先看一段代码:class P1{public: int m_nVal;};class P2{public: int m_nVal;};int fun(const P1& aP1,const P2& aP2){ if(aP1.m_nVal原创 2011-12-20 10:15:33 · 3856 阅读 · 0 评论 -
集中决策和分散决策(3)
集中决策和分散决策(3)黄国强 2011-12-31 上两篇文章讨论了集中决策和分散决策两种程序的写法。两种写法在项目中都有广泛的运用。一般来说,C的项目中大多采用集中决策的写法,而C++的项目用分散决策的写法多些。但这也不是绝对的。根据我多年的开发经验,在以下几个方面得出一些结论:1 项目的规模和难易程度 首先,对于比较小的简单项目,采用集中决原创 2012-01-20 19:40:54 · 7033 阅读 · 0 评论 -
重构多重循环的一个实例
重构多重循环的一个实例黄国强 2011-12-31一位同事提供了以下这段C#示例代码。List returnValue = new List();for (int i = 0; i { CoordsDouble leftPoint = totalPoints[i]; CoordsDouble rightPoint = totalPoints[i原创 2011-12-31 08:56:39 · 2143 阅读 · 0 评论 -
一次成功的重构实践4 - 万物皆对象
一次成功的重构实践4 - 万物皆对象黄国强 2019/3/25 前文说到所有IO卡可以抽象成三个函数。如下是重构前的代码,打开三色灯的红灯。// 头文件#define RED_LIGHT 0x00,0x00,0x03 // 三色灯的红灯// cpp 文件 BitOn(RED_LIGHT); // 点亮红灯 这里用到了宏,即红...原创 2019-03-25 16:35:02 · 340 阅读 · 0 评论 -
一次成功的重构实践3 - 抽象的艺术
一次成功的重构实践3 - 抽象的艺术黄国强 2019/2/7 抽象能力的培养非常重要。所谓抽象即抓住事物的本质规律,透过现象看本质。一个程序员工作多年,写代码的技术都会掌握。但是如果想做架构,缺乏抽象能力是不行的。 这就好比工匠和艺术家,前者只能做到是技艺纯熟,不断重复自己。艺术家往往可以表达人类普遍情感,探索客观世界的规律。比如,物理学上补色原理就是印象派画家最...原创 2019-02-07 10:58:39 · 332 阅读 · 0 评论 -
一次成功的重构实践1 - 概述
一次成功的重构实践1 - 概述黄国强 2019/1/20很长时间没写blog了,原因很简单,工作基本上遇不到问题,因而思考少了,自然也没有写东西的动力。这次年会之所以拿到了公司特殊贡献奖,是因为去年将原先的软件架构重写,使公司软件发生了有目共睹的巨大变化。在这里总结一下重构过程。重构前与重构后的解决方案比较:图中是原先的解决方案和现在解决方案的比较,从中可以看到,整个解决方...原创 2019-01-20 11:27:20 · 566 阅读 · 0 评论 -
用行为将对象归类
用行为将对象归类黄国强 2017/12/19学习C++从封装开始。那么封装什么呢?当然是封装数据还有操作这些数据的函数。由于经常封装数据,很多开发者会默认建立这个观念,即:封装就是封装数据。事实上这个观念是错误的。举一个地铁闸机的例子。闸机有两种状态,可以通过和不可以通过。有两种设计方案。设计方案1:class CGate{public: CG原创 2017-12-22 10:10:25 · 368 阅读 · 0 评论 -
Microsoft Visual Studio 调试监控器(MSVSMON.EXE)未能启动
Microsoft Visual Studio 调试监控器(MSVSMON.EXE)未能启动,关掉防火墙,问题解决。原创 2017-10-25 16:37:55 · 5894 阅读 · 1 评论 -
从ACE难学说起
从ACE难学说起 黄国强 2005年01月12日 ACE很难学,这是得到公认的。主要因为两个方面原因导致的。一是因为网络软件开发非常困难。二是因为ACE这个非常庞大的体系很难掌握。这个体系共有30多位核心开发者开发,全世界共有1700多人作出了贡献。在学习ACE之前,推荐掌握下列基础知识:深入掌原创 2017-10-01 00:07:33 · 551 阅读 · 0 评论 -
人月神话-软件开发现状
人月神话-软件开发现状黄国强 2005年03月5日 人月神话的作者Frederick P. Brooks Jr这样说到“所有软件活动包括根本任务--打造构成抽象软件实体的复杂概念结构,次要任务-使用编程语言表达这些抽象实体,在空间和时间限制内将他们映射成机器语言。” 这句话我原创 2017-10-01 00:06:01 · 804 阅读 · 0 评论 -
windows 多线程编程防止死锁的几点经验 (转)
windows 多线程编程防止死锁的几点经验 (转)1) 不要在线程函数体内操作MFC控件,不要再线程里面调用UpdateData函数更新用户界面,而应该尽量采用发送消息的方式,在主线程的消息响应函数中操作控件;2)不建议采用SendMessage往主线程发送消息,因为它是同步的,阻塞的,可以考虑采用PostMessage代替;3)线程退出时转载 2017-08-21 10:35:56 · 577 阅读 · 0 评论 -
ACE_INET_Addrconnect: address not available 问题的解决
ACE_INET_Addrconnect: address not available 问题的解决黄国强 2015/2/4这几天要写一个多机通讯的程序,所以看了ACE。1 问题背景ACE版本 6.1.9Win7 x64MS VS20082 遇到的问题 打开 ace\ACE-6.1.9\ACE_wrappers\examples\APG\Reactor 中的例原创 2015-02-04 14:36:07 · 3211 阅读 · 0 评论 -
boost 1.83版本编译备忘
boost 1.54版本编译备忘 黄国强 2013-9-10从boost官网上下载了1.54版本的压缩包,解压到本地磁盘。我把它解压到这里D:\boost_1_54_0。从控制台进入D:\boost_1_54_0目录中,输入命令 bootstrap根据编译器和32位64位目标程序选择下面四个命令之一启动编译程序。1 vc2010编译器编译32位目标程序从Vi原创 2013-09-10 10:13:45 · 2112 阅读 · 3 评论 -
我眼中的MVC模式(2) --- 变体 MOVE
我眼中的MVC模式(2) --- 变体 MOVE黄国强 2012-7-17看了文章 “MVC已过时,MOVE时代来临?”[1]后,感觉是MVC的一个变体,参照之前的一篇文章“我眼中的MVC模式”[2],我改了一下。实质上就是去掉了 View 对 Model 的引用。这是文章[1]中的原图:下面这张是按照我自己的发明的类图方法画的。参考文章[1] ht原创 2012-07-17 09:38:46 · 1376 阅读 · 0 评论 -
最近遇到了 manifest 的相关问题的记录
最近遇到了 manifest 的相关问题的记录黄国强 2012-3-271 问题出现每日构建一切正常,发布的程序也正常运行,直到有一天出现编译错误。mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file 根据网上查来的资料做出下列调整:将原创 2012-03-27 10:58:56 · 2039 阅读 · 3 评论 -
设计一个类时应该问自己四个问题
设计一个类时应该问自己四个问题黄国强 2011-2-23是否是唯一的对象|| 是|---------------> 单件模式|是否必须有时间维度|| 是|---------------> 实体对象模式|是否共享|| 是|---------------> 不可修改属性的值对象模式||--------------原创 2012-02-23 09:48:26 · 1834 阅读 · 0 评论 -
一个模块接口的组成
一个模块的接口由两部分组成,第一部分是回调接口,这些接口在主接口中被使用。第二部分是主接口,展示对外的服务。原创 2011-05-09 10:22:00 · 1899 阅读 · 0 评论 -
慎重使用Get/Set成员函数(一)问题的提出
Get/Set这两个函数都很明显的暴露了内部的数据存储的形式和值,使面向对象形同虚设原创 2011-04-27 10:22:00 · 1050 阅读 · 3 评论 -
重构 — 改善既有的类图设计 条款15:区分基类和接口
重构 — 改善既有的类图设计 条款15:区分基类和接口黄国强 2009-6-17基类和接口,二者非常相似。我们可以通过他们所服务的对象来区分区分他们。这个角度非常重要。 基类的服务对象是其继承类,而接口的服务对象是使用这个接口的外部类。基类的存在是由于其包含了很多公共函数或数据,是实现。而接口反映的是系统的需求,本身包含了做什么的信息,不包含怎么做的信息。原创 2009-06-17 15:56:00 · 751 阅读 · 0 评论 -
一个用C来模拟类的多态行为的例子
一个用C来模拟类的多态行为的例子黄国强 2009-8-21在某些嵌入式系统中不支持类的概念,下面介绍了一个例子来说明如何在C中实现多态。1) 这是原先C的代码:enum Shape{ LINE = 0,CIRCLE,RECT,};struct Line{ int x1,y1,x2,y2;};struct Cir原创 2009-08-21 11:02:00 · 787 阅读 · 0 评论 -
用NVI(Non-Virtual Interface) 模式强化依赖倒置
用NVI(Non-Virtual Interface) 模式强化依赖倒置黄国强 2009-8-20先看示例代码。1) 没有运用NVI模式的Baseclass Base{public : virtual void Work(void) = 0;};class Derived : public Base{private:原创 2009-08-20 09:21:00 · 2032 阅读 · 0 评论