设计模式之美
王争
前 Google 工程师,《数据结构与算法之美》专栏作者
123425 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 113 讲
设计模式与范式:行为型 (18讲)
设计模式之美
15
15
1.0x
00:00/00:00
登录|注册

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

其他面向对象的概念和知识点
UML的学习成本和沟通成本
面向对象分析和设计
判定编程语言是否是面向对象编程语言
面向对象编程语言
面向对象编程
在互联网公司的项目开发中用处可能不大
复杂,学习成本高
统一建模语言
产出类的设计,包括程序被拆解为哪些类、类与类之间如何交互等
面向对象设计:搞清楚怎么做
面向对象分析:搞清楚做什么
写出来的代码不一定是面向对象编程风格的
面向对象编程一般使用面向对象编程语言
支持类、对象语法机制
严格定义 vs. 放宽要求
能方便地实现面向对象编程四大特性的编程语言
支持类或对象的语法机制
封装、抽象、继承、多态作为基石
以类或对象作为组织代码的基本单元
编程范式或编程风格
课堂讨论
重点回顾
什么是UML
什么是面向对象分析和面向对象设计
面向对象编程和面向对象编程语言之间的关系
如何判定一个编程语言是否是面向对象编程语言
什么是面向对象编程语言
什么是面向对象编程
参考文章

该思维导图由 AI 生成,仅供参考

考虑到各个水平层次的同学,并且保证专栏内容的系统性、全面性,我会循序渐进地讲解跟设计模式相关的所有内容。所以,专栏正文的第一个模块,我会讲一些设计原则、设计思想,比如,面向对象设计思想、经典设计原则以及重构相关的知识,为之后学习设计模式做铺垫。
在第一个模块中,我们又首先会讲到面向对象相关的理论知识。提到面向对象,我相信很多人都不陌生,随口都可以说出面向对象的四大特性:封装、抽象、继承、多态。实际上,面向对象这个概念包含的内容还不止这些。所以,今天我打算花一节课的时间,先大概跟你聊一下,当我们谈论面向对象的时候,经常会谈到的一些概念和知识点,为学习后面的几节更加细化的内容做一个铺垫。
特别说明一下,对于今天讲到的概念和知识点,大部分我都是点到为止,并没有展开详细讲解。如果你看了之后,对某个概念和知识点还不是很清楚,那也没有关系。在后面的几节课中,我会花更多的篇幅,对今天讲到的每个概念和知识点,结合具体的例子,一一做详细的讲解。

什么是面向对象编程和面向对象编程语言?

面向对象编程的英文缩写是 OOP,全称是 Object Oriented Programming。对应地,面向对象编程语言的英文缩写是 OOPL,全称是 Object Oriented Programming Language。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了面向对象编程的概念及其相关内容,包括面向对象编程的历史发展、定义、特性以及面向对象分析和设计。作者强调了面向对象编程的基本特性:封装、抽象、继承、多态,并讨论了面向对象编程语言的判定标准。此外,文章还提到了UML(统一建模语言)的复杂性及其在实际项目中的使用情况。总体而言,本文全面深入地探讨了面向对象编程的相关概念,适合对该主题感兴趣的读者阅读。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《设计模式之美》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(357)

  • 最新
  • 精选
  • 王争
    置顶
    UML中定义了类之间的关系:泛化、实现、关联、聚合、组合、依赖,试问下小伙伴们,你们都能搞清楚这几个的区别吗?能否准确的用不同的箭头、图线来画出来吗?即便你能画出来,团队里的小伙伴都能看懂吗? 不过,关于类之间的关系,我后面会在实战篇中讲到的,但是,我会简化成四种关系,更好理解。
    2019-11-11
    35
    145
  • 王争
    置顶
    在这篇文章中,“面向对象编程”一词多义,不同的场景、语境下,解释不同。文章中没有点到这一点,我这里稍微补充说明一下: 1. 文章前半部分,面向对象编程指的是一种编程风格或者范式。 2. 文章后半部分,在讲到面向对象分析、设计、编程的时候,面向对象编程是一种行为。
    2019-11-11
    7
    217
  • daniel李
    当看到老师说uml意义不大的时候我就懵了,还好原来是指不需要按严格标准死磕uml。 我平时在功能开发初期和后期都是用uml把我的想法可视化然后让师兄审核,减少pr被reject机率。而且也容易让别的工程师接手做功能拓展。 不过确实互联网公司如果不是大厂,确实很少人能看懂uml。

    作者回复: 实际上,大厂也未必都在用。比如类图中几种类关系,同学们有几个能准确的用不同的图线画出来呢?

    2019-11-11
    8
    20
  • BK🎩
    确实很多公司使用 UML 的频率比较低,大厂也是这样。另外我自己对 Google 的了解是对代码要求很高,那么代码交付还有文档的要求想必也很高,不知道 Google 公司在文档上面会不会大量使用 UML,如果不用的话,有没有更好的方式或语言来维护高质量的文档

    作者回复: 好像没有多少人画uml,文档主要还是聚焦于业务和更上层的架构设计、技术难点说明,实现直接看代码。

    2019-11-12
    9
  • 编程界的小学生
    1.我觉得首先uml这东西很牛逼,很有必要去画,但是也需要分场景,比如crud还强行画一个出来那就是浪费时间,比如超级复杂的东西要画,那我觉得就可以简化,多配上文字注释。比如需求一般,不是很复杂也不是很简单的那种也可以好好画一下,必要的地方配上文案描述。uml能帮助我们瞬间理解这个东西到底要做什么,流程是怎样的,画出来不光是现在看还是以后复习看,他都很香! 2.我觉得缺少了一个“组合”,首先要以类和对象作为代码的基石,还要能灵活的支持组合特性才算不严谨的面向对象语言。组合算封装特性的一部分吗?还是说只要以类和对象为基石的开发语言都支持组合?

    作者回复: 组合跟封装应该没啥关系呢。

    2019-11-11
    5
  • 潇潇雨歇
    1,关于UML,大学的时候学过,但是没有好好学,大概能看得懂,非常复杂的话不必弄的太规范;可以在自己画的时候做个讲解,关于规范UML的讲解,以免学生误解。简化不等于乱画,大体思想核心是在的。我觉得这样挺好的。可以使用类UML的形式,《Head FIrst 设计模式》也是用的这种,大家更能看懂。因为学习UML是有成本的,老师可以在课程中讲解一些UML的基本用法,不需要详细介绍。 2,面向对象的话还有接口,组合等概念。我学的是JavaScript,其实js严格来说并不是面向对象编程语言,像类本身都是没有的,可以说是基于对象编程语言。Java这种就是严格上的面向对象编程语言。其实我也想学学Java,老师有什么好的学习资料推荐吗?比如书籍,文档,博客什么。感谢🙏

    作者回复: 周末会上一篇加餐,你可以简单看下专栏中用到的所有的java语法。至于书籍推荐,你可以随便找本比较薄的java书籍看看就可以,先入个门。

    2019-11-11
    2
    4
  • Kang
    请教下 mysql源码里面是否实现面向对象的思想呢,怎么理顺一部分,比如源码里的优化器

    作者回复: 我没读过mysql源码呢,不大清楚你说的那个问题。

    2019-11-12
    1
  • return
    老师, 面向对象主要用来解决扩展复杂性, 写出来的代码确实要比面向过程更舒服 更易扩展。 但是 我思考其 为什么会有这种效果时, 又说不上具体原因, 有人说是 面向对象 把 实体和行为节藕,实体是稳定的, 而面向过程只有行为 ,行为是不稳定的。 好想有点道理 但是又有点抽象。 老师能否指点指点🙂

    作者回复: 看下一篇文章,看能否解决你的疑惑呢

    2019-11-12
    1
  • Running
    古老的C语言是不是可以认为面向对象的编程语言呢?结构体可以认为是类吗?

    作者回复: c是面向过程的编程语言 后面会讲到 别急

    2019-11-11
    2
    1
  • 初心
    有一点很有体会:使用面向对象编程语言开发出来的功能未必符合面向对象的思想,很可能是面向过程的。如何避免这种问题呢?后续有类似案例吗?争老师

    作者回复: 有的 看专栏目录就知道了

    2019-11-11
    1
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部