从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易?
今日分享开始啦,请大家多多指教~
前言:
1)java 面向对象语言,面向过程围绕过程(解决问题步骤),面向对象围绕实体(名词,特性(属性),行为(动作、方法))。它们设计思想区别在于关心核心不同的。
主流都是面向对象的。
实际开发,先按面向对象思想进行设计,具体实现时面向过程(人习惯)
2)java 怎么支持面向对象呢?
a. 万物皆对象,所有的类都是 Object 子类
b. java 中支持单继承,多重继承,Tiger 是 Animal 子类,Animal 是 Object 的子类。满足单继承(每次都一个父类,超类)
c. 面向对象的 4 大特性:封装、继承、多态、抽象
3)封装的优点
a. 隐藏细节,开发者关注内容就少,好写代码,
b. 安全,你不需要知道我内部实现细节,private 修饰后,外部不能访问。
c. 方便修改,私有,外部不能访问,修改不影响其他类(送耦合)
4)继承
a. extends 继承
a.1 继承实现类 class
a.2 继承抽象类 abstract class (必须有抽象方法,子类去实现)
b. implements 实现
实现接口 interface (里面全是抽象方法,子类去实现)
面向对象
1)面向过程(早期)、面向对象(主流)、面向服务(SOA、微服务)(主流,在面向对象基础上)
2)面向过程和面向对象的区别?
编程思想,做一件同样事情,做的思路不同。
思路不同在哪里?
例子:把大象放到冰箱里。(本意:把公大象放到格力冰箱中)需求变更
面向过程:开发步骤(流水账)
a. 把冰箱门打开
b. 把什么放进去:大象
c. 把大象放入冰箱
d. 把冰箱门关上
找出主体:名词(冰箱、大象),围绕它做事
找出动作:动词(打开、放入、关上),强调过程
面向过程:找出把名词主体,和动作(动词)连接起来,最后怎么完成整个过程!
面向对象:
a. 找出主体(名词:冰箱、大象)
b. 创建模型:(额外考虑,感觉画蛇添足)
冰箱:容大、颜色、品牌、耗电、打开、关上
大象:产地、公母、皮、腿
c. 执行步骤
打开冰箱,把大象放入冰箱,关上门
它考虑额外事情,目前为止用户不关心。
在实际开发中,用户不遵守他的话,他说的话不算数。
实际开发中,无法完全(合同),无法严格按合同执行,开发者就必须适应用户的需求变更。
从这一实际角度出发,面向过程思考好还是面向对象思考好!
如果按照面向过程思考,它不能适应用户需求变更,要修改代码,加班加点完成。前面考虑不够完善。
如果按照面向对象思考,它提前考虑很多细节,超过用户要求,表面上多考虑了,但是当用户需求变化,刚好就在我们多考虑范畴中!代码不需改,改动量很少。按期完成,无需额外资金投入。
面向对象要考虑很多,考虑范围,不能太广,过度设计。设计都需要人力物力。
有一个平衡点,设计多大范围合适呢? 系统分析师(高薪!)8 年
到超市购买商品
第一次用户提出需求:要购买白酒和花生米
第二次用户提出需求:要购买白酒和花生米,买猪头肉(需求变更)
第三次用户提出需求:+ 凉菜
用户变化 n 次
面向过程:
1)到哪个超市
2)挑选商品(白酒、花生米)2 种,
3)购买,结束
每次需求都要改,有可能之前代码框架都无法适应新需求,翻天覆地重做。
面向对象:
1)都有哪些超市,都有哪些商品,对超市商品全部建模 2000 种商品
2)到某个超市,挑选商品(白酒、花生米、猪头肉、凉菜)
3)购买,结束
总的来说:面向对象优于面向过程设计,主流设计思想面向对象设计!
java 是怎么支持面向对象设计的?
java 面向对象,c 面向过程,c++面向对象,python 面向对象,javascript 面向对象,vue 框架面向对象
java 四大特性:围绕面向对象而言:封装、继承、多态、抽象
封装
面向过程过程中每个细节都需要开发者去了解,封装改变这样方式,它先进行建模,把名称创建对象,设置它的属性(代表这个事物的特点)和方法(表现一些动作)
把生活中的物品抽象成 java 中的对象
对象为了简单,有些内容对外暴露,有些内容隐藏。隐藏就体现了封装。
例子:手机
如果知道手机所有细节,我们现在都用不上手机。
1)对外暴露:屏幕、键盘、话筒、耳机、充电器
2)隐藏:怎么通讯,运行 app
对有些内容使用者是不关心它的内部实现,手机把这些内容进行封装,用户使用就简单了。
代码如何实现封装呢?
有些功能用户不能去访问,用户不需要知道内容封装。
它需要知道,我们会单独给它接口 api
手机:
1)创建一个类:Phone
2)类中封装,对外看不到,创建属性 call、keys,私有 private (体现了封装)
3)对外暴露:怎么开发 call,怎么开发 keys?公有 public
封装的好处
1)把不让外界知道的信息就隐藏起来,外部无法操作。代码比较安全,外部无法操作。
2)代码只能内部处理。当代码修改,所有调用地方都要随之改变,这种结构紧耦合。如果代码只能内部修改,修改后,外部丝毫不影响,这种结构松耦合。程序能实现松耦合就松耦合。封装就实现松耦合结构。内部修改不影响其他代码。
3)封装后,里面程序实现细节,对应调用者来说不关心,只关心如何使用。把复杂问题变简单。
继承
什么叫继承?
java 中继承和生活继承是一样一样的。父类(父亲)和子类(自己)。父亲父亲,子类子类。
java 继承单继承,c 语言允许多继承(c 语言代码质量出错,很难找的其中一个原因)。
结论:java 中单继承,但是可以多层
java 中如何实现继承关系?
实现继承关系提供 2 个方式:
1)extends 关键字(继承):语法 extends 后面跟类(class 实现类、abstract class 抽象类)
Tiger extends Animal
Eagle extends Animal
特点:Animal 是一个实现类,它具体实现 eat 方法
抽象类特点:它有部分实现(父类自己实现)和部分规定不实现的(子类去实现)
Tiger extends AbstractAnimal(抽象类中有抽象方法,抽象方法父类不实现,压到子类去实现)
2)implements 关键字(实现):语法 implements 后面跟接口(interface)
接口特点:所有方法都是抽象方法,一点活都不干,它指手画脚(它要规定子类实现方法)
为什么要使用继承?
我们可以从父类继承它的属性和方法,在子类中直接调用父类资源(属性和方法),方法和属性都是 public。
通过对上面两个类的观察:
1)它们有共性,eat 方法一样
2)它们有个性,Tiger 类它有自己的 run()方法,Eagle 类它有自己的 fly()方法。
有共性有不同!
缺点:
共性的方法,出现在多个类中,如果业务需要修改,要修改多处,工作量大,容易造成失误,这个类改,那个类
忘改,造成结果不一致!
继承
解决办法?就是继承!
1)要把共性方法抽取出来,放到一个单独类中 Animal
2)把共性方法就从当前类中删除
3)两个类连接起来,使用继承,Tiger extends Animal,可以在子类中直接访问父类方法 eat()
抽象类
接口
实现类和抽象类和接口区别
为什么需要抽象类?
学框架,框架中很多抽象类。例如:spring 框架
框架要做很多底层公用事情,让我们写代码利用框架,程序更加健壮,更加安全,
业务需求私有事情,还得我们去实现
公用框架实现,私有我们自己实现,我们自己写代码怎么和框架对接。框架进行规定!
规范私有类(抽象方法声明)
为什么需要接口?
提倡面向接口开发,你可以实现接口,别人可不可以接口。
java JDBC 数据库一套规范,java 自身规定接口,其他厂商去实现
mysql 数据库厂商,Mysql 的实现;oracle 数据库厂商,oracle 的实现。
小结
今日给大家分享的是面向对象,这对于很多小白来说很友好的,大家都能看得懂!
今日份分享已结束,请大家多多包涵和指点!
评论