专栏首页BigData_Flink面向对象之特性

面向对象之特性

面向对象之特性

A1 总述

封装、抽象、继承、多态

学习思路:

奥义+实现+意义

A2 封装(Encapsulation)

奥义:

  • 信息隐藏或数据访问保护
  • 类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或函数)来访问内部信息或数据。

实现:

  • 通过访问权限控制,比如Java中的访问权限控制语法:private、public等关键字。
  • 抽象

意义:

  • 使属性和代码内部逻辑不可随意修改,提高diamagnetic可读性和可维护性。
  • 类通过有限方法暴露必要的操作,提高类的易用性。
  • 降低接口复杂度,提高类的易用性。

解决问题:

  • 没有封装的话,因为类属性都暴露,那么调用者要正确操作属性就需要堆业务和每个属性足够了解。
  • 相反,我们将属性封装起来,暴露少许几个必要的方法给调用者,那么其不用了解太多业务细节也可使用,同时用错的概率大大下降。
  • 就像对冰箱操作,如果有很多按钮,你需要研究很长时间,相反,只有几个必要按钮:开、停、调节温度,则很容易操作且不易出错。

A3 抽象(Abstraction)

奥义:

  • 隐藏方法的具体实现
  • 让调用者只关心提供的功能,而不用知道这些功能是如何实现的

实现:

  • 接口类(如Java中的interface关键字语法)
  • 抽象类(如Java中的abstract关键字语法)

Java中长用的interface配合implements public interface IPictureStorage { void savePicture(Picture picture); Image getPicture(String pictureId); void deletePicture(String pictureId); void modifyMetaInfo(String pictureId, PictureMetaInfo metaInfo); } public class PictureStorage implements IPictureStorage { // ...省略其他属性... @Override public void savePicture(Picture picture) { ... } @Override public Image getPicture(String pictureId) { ... } @Override public void deletePicture(String pictureId) { ... } @Override public void modifyMetaInfo(String pictureId, PictureMetaInfo metaInfo) { ... } }

意义:

  • 让调用者关注功能点而非实现的设计思路从而过滤掉许多非必要信息。
  • 对代码设计有重要指导作用,很多设计原则体现了抽象思想,如比如基于接口而非实现编程、开闭原则(对扩展开放、对修改关闭)、代码解耦(降低代码的耦合性)等。
  • 降低复杂度,减少细节负担。

解决问题:

  • 在方法定义中,抽象化,不暴露过多实现细节从而在改变实现逻辑时不用修改其定义。如getAliyunPictureUrl()getPictureUrl()

A4 继承(Inheritance)

奥义:

  • 表示类之间的is-a关系,比如猫属于哺乳动物。
  • 分类
    • 单继承
    • 多继承
  • 不是所有面向对象语言都支持多继承,如Java、PHP、C#、Ruby等都不支持。

实现:

  • 特殊语法机制支持,如Java中extends关键字,C++ 使用冒号(class B : public A),Python 使用 parentheses (),Ruby 使用 <。

意义:

  • 代码复用,多个子类重用父类代码,避免代码重复写多遍。

相关问题:

  • 继承层次过深会导致代码可读性和可维护性差。
  • 耦合度:子父类高耦合,修改父类代码直接影响子类。

建议:

  • 多用组合少用继承

A5 多态(Polymorphism)

奥义:

  • 子类可以替换父类

实现:

意义:

  • 提高代码可扩展性和复用性
  • 是很多设计模式、设计原则、编程技巧的代码实现基础,比如策略模式、基于接口而非实现编程、依赖倒置原则、里式替换原则、利用多态去掉冗长的 if-else 语句等等。

A6 相关

上集:面向对象之总述

下集:面向对象

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 面向对象(五)-面向对象三大特性之继承

    之前学习的构造函数与set、get访问器函数都是在进行封装。我们在类中声明的函数方法也都是在进行一些功能的整合。这些就是封装。

    孙寅
  • 面向对象四大特性

    需要编程语言提供权限访问控制语法来支持,比如Java中的private、protected、public关键字。

    WindCoder
  • JS面向对象高级特性

    本篇是通过学习视频《一头扎进javascirpt高级篇》整理的一些相关知识,大致包括下面几个方面:   1 对象的创建方法   2 对象的对象属性、私有属...

    用户1154259
  • 面向对象的三大特性

    继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:...

    人生不如戏
  • Java面向对象三大特性

    利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。 数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节, 只保留一些对外接口...

    李红
  • Java面向对象特性总结

    如果是对于面向过程来说,这些你都得知道。“吾生也有涯,而知也无涯”,面向对象的封装与庄子的思想遥相呼应:用有限的时间去做更适合的事情。

    Noneplus
  • Java三大面向对象特性

    Java 是面向对象的高级编程语言,类和对象是 Java 程序的构成核心。围绕着 Java 类和 Java 对象,有三大基本特性:封装是 Java 类的编写规范...

    润森
  • JavaScript之面向对象的概念,对象属性和对象属性的特性简介

      一、大家都知道,面向对象语言有一个标志,那就是他们都有类的概念,通过类我们可以创建任意多个具有相同属性和方法的对象。但ECMAScript(指定JavaSc...

    郑小超.
  • python面向对象的三大特性

    # 示例:循环让用户输入:用户名/密码/邮箱。 输入完成后再进行数据打印。 # 以前的写法: USER_LIST = [] while True: u...

    py3study

扫码关注云+社区

领取腾讯云代金券