设计模式学习导读 (3讲)

01 | 为什么说每个程序员都要尽早地学习并掌握设计模式相关知识?

  1. 应对面试中的设计模式相关问题
  2. 告别写被人吐槽的烂代码
  3. 提高复杂代码的设计和开发能力
  • 如何分层、分模块?应该怎么划分类?每个类应该具有哪些属性、方法?怎么设计类之间的交互?该用继承还是组合?该使用接口还是抽象类?怎样做到解耦、高内聚低耦合?该用单例模式还是静态方法?用工厂模式创建对象还是直接 new 出来?如何避免引入设计模式提高扩展性的同时带来的降低可读性问题?……各种问题,一下子挤到了我面前。
  1. 让读源码、学框架事半功倍
  2. 为你的职场发展做铺垫

02 | 从哪些维度评判代码质量的好坏?如何具备写出高质量代码的能力?

  1. 可维护性(maintainability)
  2. 可读性(readability)
  3. 可扩展性(extensibility)
  4. 灵活性(flexibility)
  5. 简洁性(simplicity)
  6. 可复用性(reusability)
  7. 可测试性(testability)

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

设计模式之美-----记录

设计原则与思想:面向对象 (11讲)

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

  1. 什么是面向对象编程和面向对象编程语言?
  2. 如何判定某编程语言是否是面向对象编程语言?
  3. 什么是面向对象分析和面向对象设计?
  • 前面我们讲了面向对象编程(OOP),实际上,跟面向对象编程经常放到一块儿来讲的还有另外两个概念,那就是面向对象分析(OOA)和面向对象设计(OOD)。面向对象分析英文缩写是 OOA,全称是 Object Oriented Analysis;面向对象设计的英文缩写是 OOD,全称是 Object Oriented Design。OOA、OOD、OOP 三个连在一起就是面向对象分析、设计、编程(实现),正好是面向对象软件开发要经历的三个阶段。
  • 分析和设计两个阶段最终的产出是类的设计,包括程序被拆解为哪些类,每个类有哪些属性方法,类与类之间如何交互等等
  1. 什么是 UML?我们是否需要 UML?
  • 讲到面向对象分析、设计、编程,我们就不得不提到另外一个概念,那就是 UML(Unified Model Language),统一建模语言。很多讲解面向对象或设计模式的书籍,常用它来画图表达面向对象或设计模式的设计思路。实际上,UML 是一种非常复杂的东西。它不仅仅包含我们常提到类图,还有用例图、顺序图、活动图、状态图、组件图等。在我看来,即便仅仅使用类图,学习成本也是很高的。就单说类之间的关系,UML 就定义了很多种,比如泛化、实现、关联、聚合、组合、依赖等。

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

  1. 封装(Encapsulation)
  • 封装也叫作信息隐藏或者数据访问保护
  1. 抽象(Abstraction)
  • 封装主要讲如何隐藏信息、保护数据,那抽象就是讲如何隐藏方法的具体实现,让使用者只需要关心方法提供了哪些功能,不需要知道这些功能是如何实现的。
  1. 继承(Inheritance)
  • 继承是用来表示类之间的 is-a 关系,分为两种模式:单继承和多继承。单继承表示一个子类只继承一个父类,多继承表示一个子类可以继承多个父类。
  1. 多态(Polymorphism)
  • 多态是指子类可以替换父类,在实际的代码运行过程中,调用子类的方法实现。

06 | 理论三:面向对象相比面向过程有哪些优势?面向过程真的过时了吗?

  1. 什么是面向过程编程与面向过程编程语言?
  • 面向过程和面向对象最基本的区别就是,代码的组织方式不同。面向过程风格的代码被组织成了一组方法集合及其数据结构(struct User),方法和数据结构的定义是分开的。面向对象风格的代码被组织成一组类,方法和数据结构被绑定一起,定义在类中。
  1. 面向对象编程相比面向过程编程有哪些优势?
    1.OOP 更加能够应对大规模复杂程序的开发
    2.OOP 风格的代码更易复用、易扩展、易维护
    3.OOP 语言更加人性化、更加高级、更加智能
    3.1 跟二进制指令、汇编语言、面向过程编程语言相比,面向对象编程语言的编程套路、思考问题的方式,是完全不一样的。前三者是一种计算机思维方式,而面向对象是一种人类的思维方式。我们在用前面三种语言编程的时候,我们是在思考,如何设计一组指令,告诉机器去执行这组指令,操作某些数据,帮我们完成某个任务。而在进行面向对象编程时候,我们是在思考,如何给业务建模,如何将真实的世界映射为类或者对象,这让我们更加能聚焦到业务本身,而不是思考如何跟机器打交道。可以这么说,越高级的编程语言离机器越“远”,离我们人类越“近”,越“智能”。

07 | 理论四:哪些代码设计看似是面向对象,实际是面向过程的?

相关文章:

  • 2021-07-16
  • 2022-12-23
  • 2021-08-16
  • 2021-06-18
  • 2021-08-02
  • 2021-09-26
  • 2022-02-26
  • 2021-12-02
猜你喜欢
  • 2022-02-10
  • 2021-10-20
  • 2021-09-18
  • 2022-03-04
  • 2021-11-04
相关资源
相似解决方案