面向对象

什么是面向对象编程

编程的实质是为了解决问题,面向对象这种程序设计方法提供了一种新的思考方式。即以对象为基本单元组织

程序结构。对象是类的实例,类中封装了数据和操作。对象是一种更高的抽象概念,现实生活中的万事万物都

可以看做是对象,这与人的思维方式更接近,从而更加轻松的对复杂问题进行建模。总结的说面向对象提高

了程序的灵活性,扩展性和可维护性。


局限

纵然面向对象有如此多的好处,但也绝不是万能的,当做解决的问题的复杂度不高时,面向过程式的编程(将

所解决的问题表示成函数序列的顺序集合)会更加高效。面向对象虽然简化了思考方式,但是需要你编写很多

的类,打造一个解决问题的模型。这时候就杀鸡不用牛刀了。


面向对象的思考方式

一般的思维方式是自顶向下的,把大问题分解成小问题,分而治之。面向对象对象的思维方式是自底向上,先

设计底层的程序,再讲他们组合成完整的程序。我是这样理解的,对象或者类组对应着底层的小问题。当我们

用面向对象的思维方式去解决问题的时候首先思考们需要哪些对象,构造出这些对象。然后组合这些对象解决

最终的问题。实际写代码的时候仅仅使用自底向上上是不够的,因为思维是有局限的,你不可能构想出所有潜

在的对象。对我来说更好的方法是辅以自顶向下的思考,用抽象的语言把要解决的最终问题写出来,这种表达

的方式会引导你找到更多的类,更多的对象。比如在绘制图形的应用程序中,需要画一个圆形,再涂上颜色。

用自底向上使我很轻松想到需要一个Cirl类,类中有Draw和AddColor成员函数。自顶向下时我会写出这样的语

句 Cirl cirl; cirl.Draw(); cirl.AddColor( yellow ); 这时我想到还需要一个颜色的类,或者关于颜色的枚举。


特定语言的面向对象

C++支持面向对象的编程,但是C++不仅仅支持面向对象,它是一个语言联邦。首先它是C的超集,它包含C,

其次C++还支持泛型编程,特别地C++包含STL(标准程序库)。C++的面向对象没有接口的直接定义,但是可以

定义抽象基类实现。接口在Java中是有直接定义的Interface这是一个很酷的概念。继承和多态在C++和Java中

都有体现。另外一个不同点是Java不支持多重继承而C++支持。


面向对象三要素(C++)

在了解面向对象基本概念之前,需要明确人的角色。正如文章是写给读者的一样。人在程序设计过程中,分成

设计者和使用者是非常非常必要的,因为面向对象的要素是建立在这种分工之上的。

1.封装

也就是数据抽象,又或者是自定义数据类型。将所解决的问题和客观世界的对象进行类比,用基本的数据类型

构造出类,实例化此类得到类的对象。一个类自成一个系统,类的接口头提供给类的使用者,类的作者负责实

现细节。封装使程序设计变得灵活,简单易用。

2.继承

继承简单说是用已有的类派生新的类,在互联网上有成顿成吨的类库,它们都是精心设计的。站在巨人的肩膀

上写代码会写的如鱼得水。如果你不亲自去实现一个继承你不会切实的感受。当我继承Opencv的Mat从而实现

自己的一个图像类时,我只加了几行代码就完成了。那种感觉真是事半功倍。程序员既是类的使用者又是类的

设计者,不管是为别人还是为自己,都理应为虚拟的世界添砖加瓦。带着这样的情怀,当我们设计一个类时多

想想哪些人可能会用到它,可能会需要它。设计好接口,将奉献的精神星火相传。

3.多态

人说多态是面向对象的精髓,简而言之多态的含义是一个接口多种形态,提高了程序的灵活性和可维护性。在

C++中多态需要虚函数,在实现代码中使用基类指针或引用调用虚函数。因为基类指针的静态类型和动态类型

不同,在运行时绑定到实际的类型,从而实现多态。多态提高了程序的可维护性。我们为了抢夺市场发布了一

个初始的软件版本,之后需要提高性能,需要升级换代。那么在不该变接口的情况下,改变实现代码。不改变

用户的使用方式,设计良好时,在用户端甚至不需要重新编译,就能享受更高级的软件版本。造福一方人民真

是无量功德。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值