OOP深挖解密

为了达到对OOP最准确最深入的理解,我把散落各处边边角角的有关OOP的描述都梳理总结在此,希望连点成线,逐个击破,形成成熟的OOP思维。

c++ 集合了面向对象编程,泛型编程和过程化编程三种编程范式于一体。(所有说c++难都是因为要学的东西太多,实际上学会了就会异常灵活)

  • 过程化编程: 强调算法,是要让问题去满足语言的特性,是top-down 的设计,自顶向下,旨在把大型程序分解为小的便于管理和处理的任务。不断地分解,变为一个个小小的模块,用函数实现。C语言就是典型的过程化编程。

  • OOP :为了应付复杂程度不断增高的编程任务而发明的,通过重用代码和抽象通用概念的方式解决大型项目的处理, 强调数据, 旨在设计和问题的特性对应的数据类型,是用语言去满足问题的需求。是bottom up的方法。所以OOP方法首先就是要设计类,是从类的设计到整个程序的完成的。当然设计有用又可靠的类是很难的,所以厂商提供了大量的类库(都是很可靠的经过仔细测试的代码),可以一定程度简化我们的工作

  • 泛型编程:由模板提供。强调独立于特定数据类型,编写独立于类型的代码,比如对不同类型的数据进行排序,一般要对整数,小数,字符等类型各写一个排序函数,但是泛型编程通过对语言本身进行扩展,可以只写一个泛型函数,(即不是特定数据类型的函数)。OOP侧重于管理大型项目,而泛型编程提供了执行常见任务的工具,比如对数据排序或者合并链表。

c++的二重性:OOP提供高级抽象;C语言提供低级硬件访问

继承:OOP中最强大特性之一。派生类,基类。派生类可以继承基类的特性,还能重用基类的代码。

  • 公有继承:派生对象是基类对象的特例。比如:物理学家和科学家。
  • 私有继承:
  • 保护继承:
  • 多重公有继承:一个类从多个类派生而来。

类就是oop的代表,所以类是oop的核心,抓紧类,就抓紧了oop。

用c佳佳就是为了用他的oop特性!可见oop才更重要,语言本身没有oop特性重要,语言只是实现oop编程方式的工具,多种语言都可以实现oop编程方式,在这一点上,c佳佳并不特殊。

计算机的发展历程中,是硬件带动了软件的发展。先有了计算机,主要是大型机和工作站,然后促使人们编程序控制硬件做事情,于是从机器语言到汇编语言,到c和pascal在上世纪七十年代引领人们进入结构化编程的有秩序有规程的时代。你可以清晰的看到语言的进步和变化。上个世纪的八十年代,c一统天下,在编程语言中占据着统治地位。但也正是同时,用c的人多了,发现问题的人也就多了,于是人们解决痛点,在大型程序的开发上,发明了一种新的编程模式,oop。当时只有c佳佳和SmallTalk两个语言可以做到oop。

其实计算机语言就处理俩概念,那么多代码,实际上抽象概括起来,就是数据和方法/算法。

过程性语言就强调算法方面,就是你先确定计算机,她应该做啥,然后你就写程序让她做这些事情,就结了。即根据要做什么!来写程序。数据倒是次要的,要用就用呗,没有提前去规划考虑数据本身。后来在过程化编程的基础上又改进了一些,变成了结构化编程,大大提高了程序的清晰度,可靠性和可维护性,即把一个大任务分成很多子任务,自顶而下的,用多个子程序或者函数来分别实现一部分功能。但是结构化编程还是根据要执行什么操作来构思一个程序,还是强调算法。

oop是一次很大的改变,革新,它完全从另一个角度出发,计算机科学家们可真聪明!它强调数据,他的核心理念就是,设计与问题本质特点相对应的一个数据形式!!!类,就是这种新的数据格式,而对象,就是根据类这个规范而构造出来的数据结构!!

比如一个绘图程序,就要设计很多个类,一个类被定义用于表示圆,一个类表示矩形,一个类表示直线等等等等,然后基于这些类,我们来开发一个使用这些类的程序。所以oop它是自下而上的编程,先写低级组织(类),再写高级组织(程序)。

oop不把重心放在任务上,而是放在表示概念上。它引入了很多新概念,比如多态,继承,信息隐藏,,,使得oop不仅仅只是把数据和方法合并为类的定义,还有很多其他的好处,比如代码重用,保护数据,为函数和运算符创建多个定义,使用旧类派生新类。

oop的目标就是去抽象通用概念,把他们可能需要的方法抽象出来,然后尽量代码重用。在这一点上,泛型编程也一样,它也是为了使得代码重用和抽象通用概念更简单。
OOP的本质是设计并扩展自己的数据类型。C++内置的类型是创建自己的类型的基本组件。

OOP强调程序如何表示数据。

OOP编程第一步就是根据程序和类的接口来描述数据,指定如何使用数据。
然后设计一个类实现出这个接口。私有数据成员存储信息,公有成员函数提供访问数据的唯一途径。所以私有部分实现了数据隐藏。只要知道公有接口就可以使用类。

要把接口和细节分开,一般是把有接口的类声明放在头文件。有成员函数实现的源代码放在方法文件。

每个对象都存储自己的数据,但共享类方法。

如果方法需要显式地引用调用它的对象,就要用this指针。this指针指向调用对象的地址,所以*this是调用对象的别名。

OOP另一个目标:隐藏内部机理,强调实质。比如重载运算符就做到了这一点,代码更简单自然贴近人类思维。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值