一、初识面向对象
1.1、面向过程:
它是一种编程思想,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
举例如:做数学题:
(a+b) *c - d/(e-f)→
Step1. 求 a+b
Step2. 求 (a+b)*c
Step3. 求 e-f
Step4. 求d/(e-f)
Step5. 最后再求他们两个的差
问?此过程可以跳过某一步直接运算吗?
当然是不能的,简单来说就是每一步都要亲力亲为,全局自己操作
1.2、面向对象:
它也是一种编程思想,它是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
在拿上面的数学题举例:
(a+b) *c - d/(e-f)→
用面向对象怎么做呢?
Step1. (a+b) *c 得结果1→让数学老师来做
Step2. d/(e-f) 得结果2→让隔壁老王来做
Step3. 结果1-结果2,得最终结果→我自己来(也可以其他人来)
1.3、小结
它们各有各的好处。
在上面举了两个例子,不难看出面向过程的设计思想是优先去分析解决问题的步骤,而面向对象的设计则是以功能来划分问题,功能的统一也保证了面向对象设计的可扩展性(敲黑板)。
当然我是学java的,肯定是面向对象好咯。
通过上面这样的事例从面向对象某一些方面的特征来简单的让大家有一个认识而已,更多的内容还是需要大家自己下来逐步了解、加深。
面向对象“官方”概念:
二、类和对象
2.1、类和对象的引入
软件的本质就是计算机对现实世界的模拟,软件的一切思想都是来源于现实生活!
类和对象 (理解为主):
类是模板;
对象是以类为模板创建的 (工厂生产产品,得有一个模子,根据模子设置设备生产);
好吧感觉很难懂,再来举个例子:
比如收集学生的情况,如果通过每个人来填写,使用纸质文件保存,不方便,查找也不方便,而且纸质容丢(蟑螂多、老鼠也多);
所以需要做一个系统,我们需要做什么事情:
①做一个纸质模板:目标是为了统计某一类事物的数据,录入学生信息模板,主要为了统计学生信息
可以理解为:学生信息纸质模板,没填写任何数据,描述学生这一类事物。
是一个类!
②复制纸质模板,得到独立的崭新的一份,填写具体的信息,该复制的模板填写了 具体的信息,描述了一个具体的信息
可以理解为:学生纸质模板,填写了具体的信息,描述的是一个具体的学生。
是一个对象!
简而言之就是说:
①需要个模板,一个类,用来描述一类事物
②可以复制该模板,填写具体的信息,用来描述具体的一类事物
再次强化类和对象的概念
①[类]:就是一个类事物:是不具体的:是类
②[对象]:就是一个具体的学生,是具体的:是对象
做这件事(定义模板和录入信息)之前先了解两个概念:类和对象。
2.2、类和对象的理解
什么是类?
类是指描述一类事物,或者看成是一个分类, 例如人类、车类、动物类等
什么是对象?
对象是指具体的个体(也叫实例-instance), 例如马云、王石、马云的迈巴赫、王石的切诺基、地球、火星等等。
通常都会将对象划分为两个部分,即动态部分(方法)与静态部分(成员变量)。
①动态部分:然而具有这些属性的人会执行哪些动作也是一个值得探讨的部分,这个人可以哭泣、微笑、说话、行走,这些是这个人具备的行为(动态部分)——方法,
②静态部分:顾名思义就是不能动的部分,这个部分被称为“属性”,任何对象都会具备其自身属性,如一个人,它包括高矮、胖瘦、性别、年龄等属性——成员变量。
人类通过探讨对象的属性和观察对象的行为了解对象。
静态部分:属性 成员变量
动态部分:行为 普通方法
三、面向对象的三大特征
BB了这么多,接下来进入正题
面向对象包括三大特征:封装、继承、多态
3.1、封装
大家想一想生活中封装是什么?日常认知
包装?快递?打包?
例如:
a. 网购一个娃娃(充气的) : 亲,请帮我打包严实一点,注意保密啊!保护隐私、安全
b.台式机电脑:机箱[主板、显卡、内存、电源 、硬盘…]
如上示例的共同点总结一下:
通过封装的操作,可以达到从物理层面控制访问(外面不能轻易访问到里面内容→这个就是物理层面)
那Java程序是如何进行封装呢? 怎么封装上面的机箱呀?
1.可以想象成这样
class 电脑{
主板
内存
硬盘
电源
}
2.如何控制程序中的访问 ?
通过给类中的成员(字段,方法,构造方法)添加访问权限来实现访问控制
3.什么是访问权限:
简单的认为访问权限就是不同级别的人能够干不同级别的事,不同级别的人能看到的页面是不同的
例子:比如做一个系统,不同人登录进去,的访问权限不一样;
4.访问权限修饰符:
private(私有的) < default 默认不写(注意不要添加default修饰)< protected(受保护的) < public(公共的)
private:及私有的,对访问权限限制最窄的修饰符。被private修饰的属性以及方法只能被该类的对象访问。它的子类也不可以访问,更不支持跨包访问。
protected:及保护访问权限,是介于public和private之间的一种访问修饰。被protected修饰的属性及方法只能被类本身的方法和子类访问。(子类在不同的包中也可以访问)
public:及共有的,是访问权限限制最宽的修饰符。被public修饰的类、属性、及方法不仅可以跨类访问,而且可以跨包访问。
default:及默认的,不加任何访问修饰符。常被叫做“默认访问权限”或者“包访问权限”。无任修饰符时,只支持在同一个包中进行访问。
3.2、继承
三个类 都有重复的代码,可以把这部分内容 抽出去,抽出去放到另外一个类里面;下面的3个类和上面的类需要发生一点关系(继承),上面的类 我们叫做 父类(超类,基类,根类),子类(派生类,拓展类);
好处 : 提高了代码的复用性
Java类中的继承的语法格式:
class A{}
class B extends A{}
A 就是B的父类; B是A的子类
java中继承有哪些特点呢:
① Java中类的继承只能够是单继承(一个类只能够有一个直接父类) 一个人只能够有一个亲爹
(一个双胞胎 据说有两个爹)
② 可以支持多重继承(多层级的继承), 一个类可以有子类,子类还可以子类… 子子孙孙无穷尽也…
示例:
class A{}
class B extends A{}
class C extends B{}
class D extends C{}
C 是D的直接父类;
A B 都是D的间接父类
③ 每一个类都有一个直接父类,如果没有看到显示的继承代码,那么就隐式继承就Object
class A extends Object{}
类与类之间是继承关系,并且是单继承
3.2、多态
什么是多态
简单理解 : 看成一种事物多种形态
比如 : 今天晚上大家请我吃大餐 : 龙虾 喝粥 思想大餐…
我准备买一辆车 : 独轮车 自行车 拖拉机 布加迪模型…
Java 程序中的体现:
四、最后
可能我写的多而且比较杂,但我相信优秀的你都能理解到,关于面向对象的知识,重点是理解概念,熟悉相关的语法和代码,真正面向对象的编程思想是需要慢慢的培养;