前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面向对象之特性

面向对象之特性

作者头像
CoreDao
发布2021-04-13 10:44:38
3750
发布2021-04-13 10:44:38
举报
文章被收录于专栏:BigData_FlinkBigData_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 相关

上集:面向对象之总述

下集:面向对象

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 面向对象之特性
    • A1 总述
      • A2 封装(Encapsulation)
        • A3 抽象(Abstraction)
          • A4 继承(Inheritance)
            • A5 多态(Polymorphism)
              • A6 相关
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档