写C也OO

什么是OO思想 用OO的开发方式去分析,设计一个系统,掌握OO还是需要掌握许多的,我认为有以下几点必须掌握:1. UML 这是OO的工具,OO 开发人员交流思想的工具.2. 了解RUP. 掌握好的软件开发过程才能开发出好的软件,RUP其实就是指导我们OO分析与设计的一个开发过程.我一直认为RUP是正宗,虽然他烦琐.3. 理解建立领域模型的重要性.Evan的DDD的确是这样的好书.这个到现在也说不出什么道道.4. 阅读详情
以前看见有人写用C来OO,但文章看起来总是不知道所云,学不要什么东西,其实在公司开发的时候,很多C程序还是按OO的思想来开发的。于是总结一下,也希望讨论一下C的OO方法。

C其实是一种很自由的语言,而OO是一种思想,同时也是一种限制,只要自己在C中加上这种限制,也能在C中实现一定程度的OO。

比如,OO中最重要的是封装。C最大的特点就是开放。但要是有封装的思想来写C,也未尝不可。

在C++中,我们的类这样的表示(设有类A) :
class A
{
public:
    function1();
   function2();
private:
   int i;
   int j;        
}

而我要用C来写这样的类封装的代码(只能说是有明显的标志分开)就是这样:
struct  c_A_
{
   int i;
   int j;
}
typedef  c_A_  A;

cA_function1(A *,其它参数);
cA_function2(A *,其它参数);

使用的时候自学一些,一般也不会出很大的问题。

然后继承,我们当然不可能用简单的方法来完成C++那么强大的继承,但要做到继承也不是很难,比如:

struct c_B_
{
    A a;
    int m;
    int n;
}
typedef    c_B_     B;
cB_function1(B *,其它参数);
cB_function2(B *,其它参数);

当要使用A的函数时就用:
cA_function1(&(B.A),其它参数);
cA_function2(&(B.A),其它参数);


这只是两个主要的问题,但多态的问题倒是不容易想到解决的办法。请大家讨论一下这种访求的可行性。

我认为OO其实是一种方法,在没有技术支持的情况下,我们也一样可以写出很OO的C代码来。

OO Programing in C 最近看c版很多人讨论c的面向对象,前天突然在别的论坛看到这个帖子,又因为今天早上醒得早,就copy过来了 http://www.javaeye.com/topic/150575http://www.javaeye.com/topic/150578http://www.javaeye.com/topic/150581作者:rubynroll ----------------------------- 阅读详情

相关推荐

stm32h743 FM25CL64铁电存储器踩坑记录

调试FRAM经验总结: 1、跑完FRAM读写代码之后,逻分仪发现总线上只有简单、短暂的电平变化,明显不是SPI的通信数据。 (经提醒发现连片选拉高拉低都没有执行到位) 后来发现是因为片选引脚没有初始化,所以直接拉高拉低是无效的。 2、引脚成功初始化后发现CLK、MISO、MOSI数据仍不正常。通过加打印的方式发现跑到HAL_SPI_Transmit中之后还没有执行到写SPI数据寄存器的那一步就return了。 后来经提醒发现: 上图中的指针使用方式错误 后来又发现: 打印出来发现

kuniqiw的博客 3844

C语言用新方法写五子棋^(* ̄(oo) ̄)^

用C写五子棋 用这种办法写出的五子棋程序比较简单。 核心代码在于判断判断四个方向上的五个棋子是不是一致,如果是一致的则跳出Game()并宣布某方获得胜利,如果不一致则继续下棋。 但是我并没有设立人人对战,只设立了人机对战。 人机对战,我采用的仍是大多数时候选用的获得随机数的方法:rand函数,通过srand(time(NULL))给rand()一个种子从而获得随机数。通过随机数,我们就可以让电脑进行“下棋”。 话不多说,上代码。 还是说明一下rand函数: ran

m0_55235912的博客 575

如何理解鲁棒性?为什么robustness会翻译为鲁棒性?

鲁棒性,英文为Robustness(承受故障和干扰的能力),是许多复杂系统(包括复杂网络)的关键属性。复杂网络的鲁棒性研究对许多领域都非常重要。本文着重介绍了鲁棒性的基本定义、命名起源、分类区别、提升方法和具体应用,供大家学习参考。

weixin_46880696的博客 8万+

(原創) 写程序时,要同时以Class Creator和Class User的角色来写程序 (OO) (.NET) (N-Tier) (C/C++)...

在上C++正式第一堂课时,第一张slide讲到Modern C++的教学原则与方法:当写程序时,要我们将Class Creator和Class User的角色分开,就算整个Project都是自己一个人写,也要自己分饰Class Creator和Class User两种角色,不能彼此混淆。这看似很简单的一句话,却有很深的意义。很多人抗拒OO的理由,认为OO只是将原来一个Function可以做的事情,...

weixin_34120274的博客 163

用LT1166+MOS管打造实验室级恒流源:闭环反馈与推挽驱动的深度调优

本文详细介绍了基于LT1166电流模式控制器与MOS管推挽架构的实验室级恒流源设计方法。通过闭环反馈调优和动态响应优化,实现带宽达100kHz、纹波低于0.1%的高性能恒流输出,适用于精密仪器校准和半导体测试等场景。重点解析了系统架构设计、MOS管选型策略以及频率响应测试等关键技术要点。

weixin_29290379的博客 206

Matlab实战:12种优化算法在CEC2014测试集上的性能对比(附完整代码)

本文详细对比了12种优化算法在CEC2014测试集上的性能表现,包括PSO、DE、GA等主流算法。通过Matlab实现完整的实验流程,涵盖算法实现、参数设置、结果分析与可视化,为工程优化问题提供实用解决方案。特别关注收敛曲线和评价指标,帮助读者选择最适合特定场景的优化算法。

wine的专栏 681

写程序是一种态度(一)strcmp

写程序正如做人,是一种态度。在写一个商业级的程序,从写代码的层次来说是否遵守默认的代码风格(code convention)?是否遵循简单、易读和效率?是否防范了预期的错误?是否检查了内存泄漏?是否考虑会有多线程重入?等等。从设计的层次来说是否引入了软件工程的思想?是否采用了OO的模式分析?是否使用UML来主导了整个流程?是否考虑单元测试和集成测试的QA同步?是否定期生成稳定版本?等等。 

swguru的专栏 1941

如何用Python打造PubMed API客户端:科研文献检索自动化实践

PubMed提供了官方的Entrez E-utilities API接口,支持程序化检索文献,但直接调用API需处理请求重试、参数封装、数据解析等问题。批量获取文献ID及结构化详情(标题、作者、DOI等)内置重试机制,应对网络波动或API限流统一数据输出格式,便于后续分析(如文献计量、AI文本处理)灵活适配不同检索需求(如指定数据库、结果数量)本文实现的PubMed API客户端,通过封装API请求、重试机制、数据解析,让科研文献检索从“手动点击”变为“代码自动化”。

ASKCOS博客 358

OO in C: C语言中的类模拟和多态,继承

OO in C(1): C语言中的类模拟和多态,继承     liyuming1978 [原作]   C语言中的类模拟(C++编程思想)        在面向对象的语言里面,出现了类的概念。这是编程思想的一种进化。所谓类:是对特定数据的特定操作的集合体。所以说类包含了两个范畴:数据和操作。而C语言中的struct仅仅是数据的集合。(liyuming1978@163.com)   1.实例:下面先

my的专栏 1942

YOLO26涨点改进 | 独家创新、损失函数改进篇 | TGRS 2025顶刊 | 带来AIoU小目标涨点损失函数,增强了目标检测中对边界框形状和尺寸的敏感度,适合复杂场景和小物体检测中有效涨点

AIoU损失函数通过自适应形状感知和尺寸敏感加权机制,有效解决了YOLO26原生损失函数在小目标检测中的缺陷。实验结果表明,AIoU损失函数在多个数据集上均取得了显著的性能提升,尤其在小目标检测和多任务场景下表现突出。自适应形状感知,对形状差异较大的目标给予更大惩罚,提高边界框拟合精度尺寸敏感加权,对小目标的宽高比例差异给予更大权重,增强模型对小目标特征的学习能力梯度连续性好,即使在IoU=0时仍能提供有效的梯度更新,解决小目标梯度消失问题。

qq_36130719的博客 159

【20260309】【亲测可用】【异常】Get https://registry-1.docker.io/v2/: net/http: request canceled

【异常】Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection。

奶爸的编程之路,也就一周冷个三天 2万+

OO思维(零) 写在前面

我想在正题之前简单的讲几句关于这篇文章的事。最近看了不少关于OO的文章,大部分给人的感觉还是太理论,太教条,而且非常形式化。我写这篇文章的时候特别注意到这个问题, 最好尽量的不要把它讲的过于理论化。这里主要说的是我个人对OO的一些理解和看法。 认为学好C++学好JAVA就自然而然拥有了OO思维。难道仅靠些语法就能设计出高质量的OO模型了?认为面向过程已经被淘汰了,使用OO写出来软件就一定具有更高的

nonocast 2298

2026年OPPO嵌入式岗位面试题带详细答案

本文总结了OPPO嵌入式岗位面试的核心考点,涵盖硬件驱动、系统启动、Linux内核开发等7大模块共34道典型题目。重点解析了SPI通信协议、中断处理、U-Boot启动流程、Linux驱动开发等关键技术,突出硬件调试与工程实践能力考核。题目设置贴合实际岗位需求,适合校招与社招驱动开发岗位应聘者系统复习,帮助掌握嵌入式开发的核心知识与面试要点。

Open 491

OO,OO以后,及其极限

1、什么是软件开发?  软件开发的过程就是人们使用各种计算机语言将人们关心的现实世界映射到计算机世界的过程;   现在的计算机的数学理论基础是由计算机的开山鼻祖,大名鼎鼎的图灵于1937年提出的图灵机模型。 随后不到十年,电子计算机就诞生了(1945)。(埃尼亚克)   我们都知道,它当时的主要任务之一就是用于导弹弹道轨迹的计算。当时的软件开发(如果可以称之为软件开发的话)与现在的...

dechen6073的博客 3453

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

科普一下算法的度量——Big O, Big Omega, Big Theta以及Udi Manber的大OO

科普一下算法的度量——Big O, Big Omega, Big Theta以及Udi Manber的大OO目录[引子][正文][结论][关于作者][声明][引子]在很久很久以前……久以前……久以前……久以前——有一个阿拉伯的故事……伯的故事……伯的故事……伯的故事——故事的发生是这样的……是这样的……是这样的……这样的——大约是90年代初期,当时还算天真无鞋、聪明蟀气的俺,一不小心看到一

CS巴别塔(Computer Science Babel) 2万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SQL是OO的吗?

SQL是OO的吗? 最近写多了HiveSQL,今天偶尔改了一个很老的java程序,突然想到SQL到底是不是一种OO的语言? 按照历史来说,SQL应该和OO几乎是出生于同一个年代,我无法得知发明SQL的人是否借鉴了OO,或者想出OO的人是否吸纳了SQL的精髓,但是某一些容易被人忽略的东西还是可以印证这两个东西的相似性! OO的三个基本特点:封装性/继承性/多态性对于SQL来说几

曲线救己的fighter 995

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

OO第一单元总结

2019北航OO第一单元(表达式求导)总结 1. 第一次作业 1.1实现思路 第一次作业需要完成的任务为简单多项式的求导。首先对输入的整个表达式进行了格式判断,如果是非法输入,直接输出WF,否则去除空格然后一项一项读入并求导,将求导结果保存到arraylist中,进行合并同类项,输出。输出中可以进行相应的输出格式化简处理,比如针对指数为0、1或系数为0、1、-1等情况。 1.2代...

diaohan6039的博客 264

C语言这么厉害,它自身又是用什么语言写的?

这是来自我的星球的一个提问:“C语言本身用什么语言写的?”换个角度来问,其实是:C语言在运行之前,得编译才行,那C语言的编译器从哪里来? 用什么语言来写的?如果是用C语...

码农翻身 11万+

为什么写OO博客这么难—1/4

Part-0.3对于博客   万事开头难,虽然说博客只是作业的一小Part,但是确实是自己第一次写一些关于编程方面思考的文章,之前从来都是写一个感性的小文章,思考思考人生啥的。而且我相信写好博客是很重要的一个环节,毕竟态度最重要嘛哈哈。俗话说七分看三分写,好的作品总是要一遍一遍推敲,所以这周二一整天的时间我都想用来做这件事情,不能说自己以后能坚持多久,但总归是迈出了第一步,就认真点吧...

aaron2945的博客 188

我的OO观

最近才读师兄推荐的面向对象的入门书籍——beginning C# Obeject,可以说对面向对象还是一知半解。但是我应该勇于把我不成熟的观点呈现出来,以便更好地解决心中疑问。  我的OO观是什么?换句话说我认为什么是面向对象?“据说”面向对象是一种程序员的世

bibodeng兰香雅室 2341

OO第四单元总结及课程总结

OO第四单元总结及课程总结 一、前言   紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结。本博客主要有以下五个方面,一是第UML单元的作业总结,二是课程期间架构设计及OO方法理解的演进,三是测试理解与实践的演进,四是自己的课程收获,五是给课程的三个具体改进建议。 二、第四单元作业总结 (一)第十三次作业...

ab707871364的博客 199

OO方法

 OO方法(Object-Oriented Method,面向对象方法,面向对象的方法)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一

meteorWJ's Home—Floating clound 1748

OO入门之旅

经过OO的前三周课程,对java程序设计语言有了基本的了解,可以算作是基本的入门吧。 第一次作业:多项式加法 目的:熟悉java编程语言,体会过程式编程与面向对象编程的区别,了解正则表的基本使用 第一次作业要求使用C语言跟java两种语言一起实现。对于C语言最主要的流程是字符串的处理,转换为桶存的多项式,进行加减运算最后进行结果的输出。 其中最麻烦的部分是C语言的字符串处理部分,...

deojthl4955的博客 182

OO和OB的区别

C++同时支持OO和OB两种设计。 OO:Object Oriented,支持多态这一强大的设计机制,需要付出的代价便是额外的间接性(virtual机制)。 OB:Object Based,非多态的数据封装模型,就是C中ADT(Abstract Data Type)的概念,和OO相比拥有更快的速度而且空间更紧凑(因为不需要virtual)。 OO和OB的设计其实就是在弹性和效率之间的取舍。 ...

mmdev 1023

OO第四次博客总结

OO第四次博客总结 总结本单元两次作业的架构设计 对于架构问题,我的第二次作业在架构上进行了一定小小的更改,引入层次化的目录结构,将各种功能不同的类分门别类的放进不同的包里,使得结构更加清晰,(在这个问题上我醒悟的太晚了) 在本单元作业中,我的作业依然采取树形结构,对于开源库中的大部分元素我都对应的实现了自己的java类,类中除了可以保存对其他对象的引用外,还可以持有一些用来保存缓存的容器,这样可...

weixin_30646505的博客 183
上一篇: 第一次出差失败小结
下一篇: 阿哈,调试!
lamb1981
博客等级 码龄24年 0粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值