面向对象的基本特性

也称“三大基本特征”、“三个要素”。封装、继承、多态

封装(Encapsulation)

封装包含两层含义:
一种语言结构,便于将数据与对该数据进行操作的方法(或其他功能)捆绑在一起。(对象封装)
一种语言机制,用于限制对某些对象组件的直接访问。(访问控制)
Java封装可以理解成:封装数据和方法(定义类)、控制访问权限(添加访问修饰符)。
访问权限的控制常被成为“具体实现的隐藏”。把数据和方法包装进类中,以及具体实现的隐藏,常共同被称为“封装”。(Java编程思想)
更多信息可参考链接。

封装的实现

为了将数据和对这些数据操作的方法捆绑在一起,Java等面向对象语言通过引入“类”实现这一功能。同时,为了限制直接访问,提供了访问修饰符。

继承(Inheritance)

继承是基于一个对象(基于原型的继承)或类(基于类的继承)创建另一个对象或类的语言机制。该语言机制在创建新类(子类)的同时,不仅保留现有类(超类或基类)的实现,还形成类的层次结构。
更多信息可参考链接。

单继承(single inheritance)与多继承(multiple inheritance)

单纯比较单继承和多继承没有任何意义。基于单继承的Java语言和基于多继承的C++语言都在特定的领域获得了极大的成功。这里重点关注Java语言选择单继承,放弃多继承的原因。要理解Java针对单继承和多继承的技术选型,就必须先了解Java语言的设计目标:

Simple, object oriented, and familiar
Robust and secure
Architecture neutral and portable
High performance
Interpreted, threaded, and dynamic

The reasons for omitting multiple inheritance from the Java language mostly stem from the “simple, object oriented, and familiar” goal. As a simple language, Java’s creators wanted a language that most developers could grasp without extensive training. To that end, they worked to make the language as similar to C++ as possible (familiar) without carrying over C++'s unnecessary complexity (simple).
更多可参考链接。
简单来说,类的多继承尤其灵活性,但其语义复杂给理解和使用带来了困难。另一方面,多继承的使用频度较低(Rarely Used),且很多功能可以通过“单继承 + 多接口继承 + 组合”实现。
更多可参考链接1 链接2 。

Java实现多继承

Java内部类:在内部中继承,然后在外部类中创建内部类的实例。本质是一种组合机制。

重写(override)

重写在英文里既可以表示为override,也可以表示为overwrite。在Java中统一使用override。
重写和重载的差异:简单来说,重写是复写父类方法,重载是为了区分同名方法。

多态(Polymorphism)

多态就是使用单个接口指代不同类型的实体,或者使用单个符号来表示多种不同类型。Polymorphism is the provision of a single interface to entities of different types or the use of a single symbol to represent multiple different types
在Java中,就是在编码时,调用父类方法,在运行时,动态绑定子类方法。所以,多态也称为“动态绑定”、“后期绑定”、“运行时绑定”

前期绑定和后期绑定

所谓“绑定”,就是将一个方法调用和一个方法主体关联的过程。
所谓“前期绑定”,就是在程序执行前,已明确方法和对应的方法主体。(C语言只支持前期绑定)
所谓“动态绑定”,就是在程序运行时,可根据对象的类型,绑定对应的方法主体。(Java支持动态绑定,且除了static方法和final方法(所有的private方法均是final方法),其他所有的方法都是后期绑定)。

多态与可扩展性

多态机制可以实现程序的可扩展性。

面向对象编程和设计的基本原则

在程序设计领域, SOLID(单一职责、开闭原则、里氏替换、接口隔离以及依赖反转)是由罗伯特·C·马丁在21世纪早期引入的记忆术首字母缩略字,指代了面向对象编程和面向对象设计的五个基本原则。当这些原则被一起应用时,它们使得一个程序员开发一个容易进行软件维护和扩展的系统变得更加可能。SOLID所包含的原则是通过引发编程者进行软件源代码的代码重构进行软件的代码异味清扫,从而使得软件清晰可读以及可扩展时可以应用的指南。更多说明可参考链接 。
但是,在实际的面向对象开发过程中,还会使用“迪米特法则”和“组合/聚合复用原则”。
熟悉“面向对象基本原则”后,可将其理解成“高内聚、松耦合”为实现目标。

1. 单一职责原则(Single Responsibility Principle)

每一个类应该专注于做一件事情。
该原则参考了《结构化分析和系统规格》的“内聚原则”。
在编码的过程中,常使用“职责分离”思想来遵循该原则。
更多可参考链接。

2. 开闭原则(Open Close Principle)

面向扩展开放,面向修改关闭。
该原则是一种编码追求,过度的追求“开闭原则”会带来功能会系统的复杂性。
更多可参考链接。

3. 里氏替换原则(Liskov Substitution Principle)

基类存在的地方,都可使用子类替换。
里氏代换原则的直接应用是多态(动态绑定)。

4. 接口隔离原则(Interface Segregation Principle)

应为客户端提供尽可能小的单独的接口,而不是提供大的总的接口。该原则指明客户(client)应该不依赖于它不使用的方法。也是实现“高内聚”的方式之一。该原则也用于系统解耦,方便系统重构。
更多可参考链接。

5. 依赖倒置原则(Dependency Inversion Principle)

也称为“依赖倒置原则”,“依赖反转原则”。
该原则是指一种特定的解耦(传统的依赖关系创建在高层次上,而具体的策略设置则应用在低层次的模块上)形式,使得高层次的模块不依赖于低层次的模块的实现细节,依赖关系被颠倒(反转),从而使得低层次模块依赖于高层次模块的需求抽象。该原则规定:
(1)高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口。(面向接口编程)
(2)抽象接口不应该依赖于具体实现(类的实例)。而具体实现则应该依赖于抽象接口(实现尽量依赖抽象,不依赖具体实现)
更多可参考链接1 链接2 。

6. 迪米特法则(Law Of Demeter)

又叫“最少知识原则”,一个软件实体应当尽可能少的与其他实体发生相互作用。(我将其称为“最小知道原则”)
该原则是实现松耦合(Loose Coupling)遵循的原则之一。
更多可参考链接。

7. 组合/聚合复用原则(Composite/Aggregate Reuse Principle, CARP)

合成/聚合复用原则(CARP),也称为组合复用原则。该原则的语义化描述是:尽量使用合成/聚合达到复用,尽量少用继承。
注意,该原则并不是银弹,因为不能完全使用组合替换继承。只是在告知要慎用“继承”,一旦使用继承,就会带来“子类”和“父类”的紧耦合
实现:在一个类中引用另一个类的对象。
更多可参考链接1。

原创不易,如果本文对您有帮助,欢迎关注我,谢谢 ~_~

面向对象基本特性和设计原则相关推荐

  1. python面向对象三大特性6大原则_【Python学习笔记】面向对象三大特性

    ★面向对象:封装.继承和多态是面向对象的三大特点★ 面向对象编程简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为 ...

  2. 面向对象的七种设计原则

    下面的截图:主要讲述了七种设计原则定名称,定义以及使用的频率.  原则一:(SRP:Single responsibility principle)单一职责原则又称单一功能原则 核心:解耦和增强内聚 ...

  3. 面向对象三大特性,五大原则

    以前一直认为程序中的类有使用到封装继承多态就是面向对象设计,其实不然 封装,继承,多态只是面向对象的三大特性,但是在设计程序的时候并不是说类的结构使用到了(或是体现出了)这三个特性就是面向对象, 其实 ...

  4. 面向对象设计原则_聊聊面向对象的6大设计原则

    程序员都知道编程有 3 大类:面向过程.面向对象.面向函数.面向对象是被讨论的最多的,个人认为,这是因为 Java 之类的编程语言有强大的用户基础,本质还是因为比较符合人的直觉. 说到面向对象,大家可 ...

  5. UVM设计模式 ( 一 ) OOP特性、设计原则、规范与单元测试

    目录 开头 面向对象 含义 UML 封装(Encapsulation) 抽象(Abstraction) 继承(Inheritance) 多态(Polymorphism) 设计原则 单一职责原则 开闭原 ...

  6. 基于javascripts的语法特性使用设计原则

    文章目录 设计原则 一.介绍 单一职责原则 开放封闭原则 李氏置换原则 接口隔离原则 依赖倒置原则 单一与开放原则的举例说明 二.从设计到模式 三.简介 23 种设计模式 设计原则 S O L(Lis ...

  7. 面向对象编程----6大设计原则

    一.单一职责原则(SRP) 一个类,只有一个引起它变化的原因.SRP中,把职责定义为"变化的原因".多个职责耦合在一起,会影响复用性. 接口一定要做到单一职责,类的设计要尽量做到只 ...

  8. wordvba编程代码大全_面向对象、设计原则、设计模式、编程规范、重构

    面向对象.设计原则.设计模式.编程规范.重构 面向对象 主流的三个编程风格有:面向对象,面向过程,函数式编程. 面向对象是最主流的风格,面向对象具有丰富的特性(封装,抽象,继承,多态). 面向对象 面 ...

  9. 面向对象六大设计原则

    目录 1 .单一职责(Single Responsibility Principle) 2 .开闭原则(Open Close Principle) 3.里氏替换原则(Liskov Substituti ...

  10. C++设计模式的设计原则(面向对象八大设计原则)

    面向对象设计八大设计原则 一.温故面向对象 二.八大设计原则 三.以史为鉴    先掌握八大设计原则,再详细看23种设计模式(

最新文章

  1. android 调用手机震动
  2. 让BASH,VIM美美的Powerline
  3. 学了python能干啥-python都可以做什么用
  4. 深度linux安装spotify,如何在 Linux 上使用 snap 安装 Spotify(声破天)
  5. LeetCode算法题-K-diff Pairs in an Array(Java实现)
  6. 详细分析图像形态学操作
  7. SAP License:SAP 移动类型详解
  8. strcat第二个参数变吗_您能解决这3个(看似)简单的Python问题吗?
  9. bat命令批量删除当前目录下指定格式之外的文件和文件夹
  10. et200s模块接线图讲解_ET200S 模块说明
  11. WeLink协作文档:办公协作再快一档
  12. Android 画圆
  13. 锤子使用手册 android,锤子爱好者的新手使用指南
  14. win7 、2008 提示Error 1606 Could Not Access Network Location %SystemDrive%/inetpub/wwwroot/ 的错误解决方法
  15. 产品运动动画用什么软件做的_3C产品渲染用什么软件好?Keyshot,工业设计必备!...
  16. 为什么计算机要更新,为什么要关闭windows 10更新理由详解
  17. Docker Desktop(WSL2)修改镜像存储位置
  18. PPT批量修改所有字体
  19. 在线测试屏幕软件康佳,硬件配置强大 不是说说而已
  20. TMC-城市智慧消防云平台

热门文章

  1. [codeup 2134] FatMouse's Trade
  2. 算法:回溯二 生成有效括号对Generate Parentheses
  3. php 库下载,远程文件下载php类库
  4. KDD18 DIN Deep Interest Network for Click-Through Rate Prediction
  5. php颜色淡入代码,JavaScript_jquery 淡入淡出效果的简单实现,样式:复制代码 代码如下:nbsp - phpStudy...
  6. sql中如何将视图中某一字段相同的数据合并 不同内容的字段相加_Tableau基础如何合并你的数据?理解与逻辑(上)...
  7. 【知识图谱系列】基于生成式的知识图谱预训练模型GPT-GNN
  8. cas 4.0 mysql 验证_在Ja-sig CAS中使用MySQL数据库进行身份验证
  9. python dynamic array
  10. Android基于代理的插件化思路分析