极客时间-设计模式之美 王争 听课笔记

极客时间-设计模式之美 王争

01 每个程序员都要尽早学习并掌握设计模式相关知识

基础书籍:操作系统、组成原理、编译原理

Talk is cheap,show me the code。

烂代码:

命令不规范

类设计不合理

分层不清晰

没有模块化概念

代码结构混乱

高度耦合

02 哪些维度评判代码质量?

  1. 可维护性maintainability代码的可读性好、简介、可扩展性好
  2. 可读性readability符合编码规范、命名是否达意、注释是否详尽、函数是否长短适合、模块划分是否清晰、是否符合高内聚低耦合
  3. 可扩展性 extensibility
  4. 灵活性flexibility
  5. 简洁性simplicityKISS原则 keep it simple,stupid代码简单、逻辑清晰
  6. 可复用性reusability面向对象特性的时候,继承、多态存在的目的之一,就是为了提供代码的可复用性。
  7. 可测试性 testability

Any fool can write code that a computer can understand. Good programmers write code that humans can understand。

面向对象设计思想、设计原则、设计模式、编码规范、重构技巧。1,2,3是最重要的评价标准。

03 面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?

  1. 面向对象

    封装、抽象、继承、多态

    面向对象编程VS面向过程编程

    面向对象分析、设计、编程

    接口VS抽象类

    基于接口而非实现编程

    多用组合少用继承

    贫血模型和充血模型

  2. 设计原则

    单一职责原则

    开闭原则

    里式替换原则

    接口隔离原则

    依赖倒置原则

  3. 设计模式

    创建型、结构型、行为型

  4. 编程规范

    20条最快速改善代码质量的编程规范

  5. 重构

    目的、对象、时机、方法

    单元测试和代码的可测试性

    大重构

    小重构

04 当谈论面向对象的时候,我们到底在谈论什么?

  1. 面向对象编程和面向对象编程语言?

    OOP面向对象编程:以类和对象作为组织代码的基本单元,四个特性:封装 抽象 继承 多态

    OOPL面向对象编程语言:支持类或对象的语法机制,并有现成的语法机制,能方便地实现面向对象编程四大特性的编程语言。

  2. 面向对象分析和面向对象设计?

  3. UML统一建模语言?

05 封装、抽象、继承、多态分别可以解决哪些编程问题?

  1. 封装

    也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外不仅能通过类提供的方式来访问内部信息或者数据。它需要编程语言提供权限访问控制语法来支持,例如Java中的private、protected、public关键字。封装特性存在的意义,一方面是保护数据不随意被修改,提供代码的可维护性;另一方面是仅暴露有限的必要接口,提高类的易用性。

  2. 抽象

    讲如何隐藏方法的具体实现,让使用者只需要关心方法提供了哪些功能,不需要知道这些功能是如何实现的。

  3. 继承

    两种模式:单继承和多继承。

    单继承:一个子类只继承一个父类。

    多继承:一个子类可以继承多个父类。

    继承主要用来解决代码复用的问题。

  4. 多态

    指子类可以替换父类。多态这种特性也需要编程用语言提供特殊的语法机制来实现。

06 面向对象比面向过程有哪些优势?面向过程真的过时了吗?

  1. 什么是面向过程编程和面向过程编程语言?

    面向过程编程:以过程或方法作为组织代码的基本单元,主要特点数据和方法相分离。相对于面向对象编程语言,面向过程编程语言最大的特点不支持丰富的面向对象特性,比如继承、多态、封装。

  2. 面向对象编程相比面向过程编程有哪些优势?

    1.OOP更加能够应对大规模复杂程序的开发

    2.OOP风格的代码更易复用、易扩展、易维护

    3.OOP语言更人性化、更高级、更智能

  3. 为什么说面向对象编程语言比面向过程编程语言更高级?

07 哪些代码设计看似是面向对象,实际上是面向过程的?

  1. 滥用getter、setter方法

  2. 滥用全局变量和全局方法

    Constants类 Untils类

    尽量做到职责单一,定义一些细化的小类

  3. 定义数据和方法分离的类

08 接口VS抽象类的区别?如何用普通的类模拟抽象类和接口?

  1. 抽象类和接口?区别在哪里

    抽象类特性:

    1.抽象类不允许被实例化,只能被继承。也就是说,你不能new一个抽象类的对象出来。

    2.抽象类可以包含属性和方法。方法既可以包含代码实现,也可以不包含代码实现。不包含代码实现的方法叫做抽象方法。

    3.子类继承抽象类,必须实现抽象类中的所有抽象方法。

    接口特性:

    1.接口不能包含属性(也就是成员变量)

    2.接口只能声明方法,方法不能包含代码实现。

    3.类实现接口的时候,必须实现接口中声明的所有方法。

  2. 抽象类和接口存在的意义?

    抽象类是对成员变量和方法的抽象,是一种is-a关系,是为了解决代码复用问题。接口仅仅是对方法的抽象,是一种has-a关系,表示具有某一组行为特性。

  3. 抽象类和接口的应用场景区别?

    如果要表示一种is-a的关系,并且是为了解决代码复用问题,我们就用抽象类;如果要表示一种has-a关系,并且是为了解决抽象而非代码复用问题,那我们就用接口。

09 为什么基于接口而非实现编程?有必要为每个类定义接口吗?

  1. 基于接口而非实现编程,这条原则的另一个表述,是基于抽象而非实现编程。后者的表述方式其实更能体现这条原则的设计初衷。我们在做软件开发的时候,一定要有抽象意识,封装意识,接口意识。越抽象、越顶层、越脱离具体某一实现的设计,越能提高代码的灵活性、扩展性、可维护性。

  2. 我们在定义接口的时候,一方法,命名要足够通过,不能包含跟具体实现象相关的字眼;另一方面,与特定实现有关的方法不要定义在接口中。

  3. 基于接口而非实现编程,这条原则,不仅仅可以知道非常细节的编程开发,还能指导更加上层的架构设计、系统设计等。比如 服务端和客户端之间的接口设计,类库的接口设计。

10 为何要说多用组合少用继承?如何决定该用组合还是继承?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淡水瑜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值