关于 OOP、C和C++

本文探讨了C和C++在面向对象编程领域的潜力与实现,通过实例展示如何在C项目中应用面向对象方法来提高代码的可拓展性和可重构性。文中详细对比了面向对象的几个关键特性在两种语言中的表现,强调了C++通过类等特性在面向对象编程中的优势,并展示了C项目演变为面向对象形式的过程。


C和C++,所谓的区别真的是面向对象和面向过程的区别?我不太认同。

wiki中关于OOP的描述如下:“面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。”


C虽然创造出来的时候确实是在面向过程的时代,但是并不代表其不具备面向对象的潜力。就OOP这种范型而言,我以为C其实也是能实现的,只不过实现中存在一些瑕疵。C程序并不是只能写成一堆函数的集合,然后以机器执行过程组织起来,其实也可以按照程序功能将程序划分称为若干的对象一样的形式,进行组织。BTW,就C++而言,也不可能是绝对的面向对象的完成,毕竟对象中的每个实现在非继承的情况下仍然是按照过程的思想写下来的。



上图是我以前写的一个C项目,虽然是这不是一个正统的纯软件项目(这是一个嵌入式工程代码),但是其实在稍微大一点的项目里其实会不自觉的去使用类似的方法去简化开发逻辑。当时我将代码演变到这种形式的时候主要是考虑到代码的可拓展和可重构性。面向对象的精华我觉得也在如此。


面向对象的几个重要特性

(1)抽象

就抽象本身而言其实C和C++都能完成,只不过C++的特性“类”决定了C++可以天然的完成的更加方便和简洁。

(2)封装和数据隐藏

对C++而言封装数据是一件比较容易的事情,因为存在私有概念。但是对C而言基本上都是共有的东西,封装和隐藏会比较麻烦,但是考虑到实现其实都可以在不同的file里,所以对于调用者而言其实是可以做到简单的封装和隐藏的。

(3)多态

编译时的多态性:C++中存在重载的特性,但是C是不存在的。

运行时的多态性:C++中存在虚函数,C也是不存在的。

(4)继承

这个不用说C++是可以轻松实现的,但是对C而言,就是优化逻辑,设计接口的问题了。

(5)代码的可重用性

这个其实都能做到,但是C++中的一些特性如前面的继承和多态可以让此更加简洁,模板,命名空间(using)等极大的扩大了重用的易用性,但是其实我还是觉得,世界上只有C的话,这些也都是可以实现的,只不过过程不一样,逻辑和整合过程不一样。


写这篇文章仅仅是为了记录一些关于面向对象和C,C++关系的一些看法,世界总是要往前走的,:)!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值