最近看到了“面向对象”,所以将以前积累的知识以作笔记,一方面:用来记录自己的学习,另一方面:希望对一些朋友有点帮助。
再学习之前,我们先看两个官方的概念:
面向对象编程(OOP)
面向对象是一种比较符合人们习惯的思维方式,在面向对象看来,世界是抽象的,万事万物都是对象,都是可抽象化,可对象化的。面向对象认为事物都是独立的,不以外物而改变对象本身,事物的运动是对象本身的行为(方法),对象对外界只开放一个通信的小接口,并不敞开怀抱;代码层上来说,面向对象把数据和对数据的操作都存放在一起,都是对象的组成!面向对象编程本质上是抽象,程序的好坏与抽象的好坏成正比!
面向过程编程(POP)
面向过程是另一种思维方式,用面向过程来看世界,事物都是有关联,存在着因果关系的,有某种规则组织着事物的运动,有起点,有终点,是一种线性的发展过程。在解决现实问题时,总是从开始解决问题(起点)到问题被解决(终点),中间是解决问题的一系列步骤,这些解决问题的步骤用面向过程来编程就是函数。我们只要严格按照函数调用的顺序来调用函数,问题最终就能被解决;代码层上来讲,面向过程的编程中数据存储和对数据的操作是独立存放的。
OC 是面向对象的,C是面向过程的。说白了,面向对象和面向过程只是解决问题的两种不同思想。
在学习面向对象时,建议和面向过程对比去学习,因为这样你才会有所体会两者的不同,通过对比,从而对面向对象有更深的理解。
举例:
我们要修理一辆汽车:
面向对象思维:
第一步:去找修理工
第二步:告诉修理工要修理汽车
面向过程思维:
第一步:找工具
第二步:买零件
第三步:拆汽车
第四步:修理汽车
......
分析:
1、面向过程关注的是解决问题需要哪些步骤(每个步骤可以理解为代码中的函数)
2、面向对象关注的是解决问题需要哪些对象(对象理解为代码中类的实例)
现实生活中面向对象的例子
- 吃饭(去饭店找服务员,而不是自己去买菜,洗菜,炒菜)
- 境界:万物皆对象
类和对象的关系
面向对象中有2个非常重要的概念:类和对象
一:如何创建对象
面向对象解决问题的时候必须有对象,那如何创建对象呢?
- 现实生活的例子:如何创造汽车对象?
- 需要先有汽车的建造图纸,图纸上描述清楚汽车应该具备的属性和功能(行为)
- 属性:轮子数、时速
- 功能(行为):跑
- 然后再根据图纸上的描述生产汽车
- 每一辆汽车都是对象,都有自己具体的属性值,都是图纸的实例
- 图纸是抽象的,汽车是具体的。图纸是对汽车对象的高度概括
二:OC 中的面向对象
- OC中的类相当于图纸,用来描述一类事物。也就是说,要想创建对象,必须先有类
- OC利用类来创建对象,对象是类的具体存在
- 因此,面向对象解决问题应该是先考虑需要设计哪些类,再利用类创建多少个对象
三:需要设计哪些类,如何设计类
类的设计,只关心3样东西:
- 事物名称(类名):人(Person)
- 属性:身高(height)、年龄(age)
- 行为(功能):跑(run)、打架(fight)