面向对象的基本原则-抽象,封装,继承,分解


相关文章:

  1. 一篇搞懂OOA/OOD/OOP的区别
  2. 面向对象的基本原则-抽象,封装,继承,分解
  3. GRASP模式概述
  4. 面向对象的六大原则

抽象

抽象是简化问题中的概念的过程。抽象不关心具体细节,仅仅抽离出最重要的属性和功能。比如学生,我们可以抽出他的学号,上的课程,我们不关心学生是什么肤色,有什么爱好。再比如人抽象出吃喝拉撒,但我们不关心职业,不关心信仰。但是抽象不是瞎几把抽象,而是根据具体的场景,具体的问题进行抽象。比如公司的组织结构场景下,我们关心的人,也就是员工,就考虑职位。

封装

封装是隐藏对象的属性和实现细节,仅仅暴露对外接口,控制对象的属性访问。良好的封装可以减少耦合,外部只需知道对象的接口,无需关心内部实现。封装允许内容修改,接口不变,不会影响对外的接口。

封装设计的的三个问题

  1. 将属性值或数据以及行为或函数捆绑在一起,这些属性值或数据将这些值一起操纵一个独立的对象。
  2. 可以公开该对象的某些数据和行为以便其他对象访问。
  3. 可以将某些数据和功能的访问限制为仅在该对象内。

继承

继承是子类继承父类的特征和行为,使得子类具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
在Java中表现为extends与implements关键字。
extends继承的UML表示:
在这里插入图片描述
implements的实现UML表示:
在这里插入图片描述
在Java中,类支持多实现,但只支持单继承。为啥呢,因为复杂,支持多继承会出现二义性问题,当b1,b2都继承A时,假设A类有个f()方法都被b1,b2重写。此时c在同时继承b1,b2当调用f()方法时,就无法确定调用那个方法。

分解

分解是将整个事物分解成不同的部分,每个部分又如何协调共同工作完成一个功能。分解的整体与部分关系如下:

  1. 组合(Composition) : 是has-a的关系,整体与部分是强关联,整体不存在,部分也将不存在,部分不存在,整体也会不存在,同年同月生,同年同月死。比如人与大脑的关系。一般表现为类中包含另一个类的属性。可以是变量,也可以是集合。
    在这里插入图片描述
  2. 聚合(Aggregation):是has-a的关系,整体和部分的关系,整体与部分可以分开。比如汽车与轮子的关系。一般表现为类中包含另一个类的属性,可以是变量,也可以是集合。
    在这里插入图片描述
  3. 关联(Association):是has-a的关系,比如订单与用户直接的关系,用户类中一个订单类的变量。一般表现为类中包含另一个类的对象属性。
    在这里插入图片描述
  4. 依赖(Dependency):是use关系,比如驾驶员与汽车的关系。表现形式为类中的方法使用其他类的对象作为参数。
    在这里插入图片描述
    为了更好的记忆这块内容,想想人开车去买东西的场景,人与大脑是组合关系,车与轮子的关系是聚合,人与订单是关联关系,人与车是使用关系。

总结

抽象,封装,继承,分解是面向对象最基础的原则,是面向对象必不可少的一部分。
常见的类与类之间的关系。

  1. is a,是的关系,继承与实现
  2. has a,是有的关系,包括组合,聚合,关联
  3. use a,使用关系,依赖。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值