Java OOP面向对象基础和相关类图

三大特性

封装

利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。用户无需知道对象内部的细节,但可以通过对象对外提供的接口来访问对象
优点:

  • 减少耦合:可以独立的开发、测试、优化、使用、理解和修改
  • 减轻维护的负担:可以更容易被程序员理解,并且在调试的时候可以不影响其他模块
  • 有效地调节性能:可以通过剖析确定哪些模块影响了系统的性能
  • 提高软件的可重用性
  • 降低了构建大型系统的风险:即使整个系统不可用,但是这些独立的模块却有可能是可用的

    继承

    继承实现了 IS-A 关系,例如 Cat 和 Animal 就是一种 IS-A 关系,因此 Cat 可以继承自 Animal,从而获得 Animal 非 private 的属性和方法。
    继承应该遵循里氏替换原则,子类对象必须能够替换掉所有父类对象。

    里氏替换原则 源自于 SOLID单一功能、开闭原则、里氏替换、接口隔离以及依赖反转) 引用: (面向对象设计的SOLID原则)https://www.cnblogs.com/shanyou/archive/2009/09/21/1570716.html

多态

多态分为编译时多态和运行时多态:

  • 编译时多态主要指方法的重载
  • 运行时多态指程序中定义的对象引用所指向的具体类型在运行期间才确定

运行时多态有三个条件:

  • 继承
  • 覆盖(重写)
  • 向上转型

类图

PlanUML绘制

  • 泛化关系(用来描述继承,extends关键字)
  • 实现关系(用来实现一个接口,implement关键字)
  • 聚合关系(表示整体由部分组成,但是整体和部分不是强依赖,整体不存在了部分还是会存在)
  • 组合关系(和聚合不同,组合中整体和部分是强依赖,整体不存在了,部分也不存在了)
  • 关联关系(表示不同类对象之间有关联,这是一种静态关系,与运行过程的状态无关,在最开始就可以确定)
  • 依赖关系(与关联关系不同的是,依赖关系是在运行过程中起作用的)