1. 编程方式

我们目前的编程方式大体可以有以下三种编程方式:

  • 顺序编程

  • 过程式编程

  • 面向对象编程

在讲面向对象编程时先讲一下什么是顺序编程,什么是过程式编程,什么是面向对象编程:

  1. 顺序编程: 就是只用一个单线程去执行一段代码,执行过程根据代码依次从上到下按顺序执行各种指令操作

  2. 过程式编程:过程式的编程中心是围绕着代码,比如当程序执行到某一个位置的时候回调用一个其他的方法来实现剩余的业务逻辑,然后程序继续往下执行,这就是过程式编程。通俗一点使用函数的方式来编写代码都属于过程式编程,更深层次的,例如某些PHP开发者虽然使用了类的概念来写程序,但是还是区域过程式的方式编程,doris周围的大多数同事就是如此,包括doris在了解面向对象编程之前也同样采用过程式的方式写程序。

  3. 面向对象编程:通俗的讲就是就是在写程序时,我们程序员自己设计出N多个对象(工作者)出来分工合作一起完成某项任务,这就是面向对象编程。这里说设计多个对象,那么我们如何去设计?这就是doris接下来的一段时间里与大家一起分享doris对面向对象的一些看法及平时工作中的一些总结了。

2. 为什么要采用面向对象编程

2.1 解决问题更容易

设计计算机程序就是为了解决人类的问题。其策略就是讲大的问题拆分成小的问题来逐一解决,而面向对象大体的讲就是这个原理,将大的复杂的问题进行拆分由小的个体来完成然后再进行组装就可以把这个复杂的问题逐一破解,这就是模块化设计风格。你可能认为模块化看起来并不太难。没错,问题越复杂,模块化就越有意义。所以OOP编程的出发点绝对不是要把复杂的问题更复杂化,反而是是要把复杂的问题简单化。即使是最困难的编程问题也可以采用这种分而治之的策略来解决。

2.2 开发和修改速度更快

在团队合作中特别能体现面向对象编程的优越性,我们可以大的问题拆分成很多个小的问题,模块的目的就是解决比较复杂的问题的某一方面,这样我们就得到了面向对象编程的首要原则之一(即单一职责原则),并将这些小问题进行组装(意思就是代码架构)起来,然后在把这些小的问题分配给其它开发人员,进行开发,这样在开效率上可以大大提高开发效率,并且开发者之间的代码冲突也会降到最低。

类似于OPP,过程式编程也是用了模块和重用。不过,过程式编程没有提供类(利用类,贬称任务可以打包到对象)。类对象(类实例)可以处理自己的数据结构,这是函数无法单独做到的,因此,如果采用过程式编程,完成大型任务往往需要很长时间的序列。另外,采用过程式编程时,团队合作也比较困难,因为不同的团队成员无法像采用OPP那样轻松地处理独立单相互关联的类。

3. 为什么面向对象如此之难

如果问doris为什么面向对象那么难就好比问doris为什么架构师工资那么高且没几个人达得到是同一个问题。因为面向对象编程是需要编程经验的一个提炼的,如果经验越丰富那么面向对象程序的设计就越灵活,这里说的经验是指使用面向对象编程的经验,而不是上文提到的顺序编程和过程式编程那些经验。面向对象编程需要对业务及代码的架构是有一定的要求的。一切程序的设计都离不开业务逻辑。在学习OOP和设计模式时,你需要记住:

  • 设计面向对象软件很困难

  • 设计可重用面向对象软件更困难

当然啦,不能把这些说法作为放弃学习OOP和设计模式的理由,而应当由此看出OPP和设计模式为什么这么有意义。知识会增加技能的价值,得到知识越困难,说明它就越有价值。

4. 如何学习OOP思想及设计模式

不要期望能轻松快速地掌握OOP和设计模式,要在你的编程中逐步渗入,一次结合一点,总有一天你会发现它的价值所在。过一段时间后,你会拥有更多的技能,有更深入的理解。你可能会遇到某个项目,发现可以在其中重用之前另外一个项目的大部分程序结构。

5. 面向对象编程基本原则

我们在使用面向对象编程时一定要记住以下几个基本原则(也就是设计面向对象程序的基本原则),这样才能够更好的理解面向对象的深意。

5.1 单一职责原则

本着低耦合、高内聚原则,一个类做一件事。
对于单一职责原则,其核心思想为:一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相互之间就产生影响,从而大大损伤其内聚性和耦合度。通常意义下的单一职责,就是指只有一种单一功能,不要为类实现过多的功能点,以保证实体只有一个引起它变化的原因。

5.2 开放封闭原则

当我们软件的实际应用发生改变时,出现新的需求,就需要我们对模块进行扩展,使其能够满足新的需求!更改封闭即是在我们对模块进行扩展时,勿需对源有程序代码和DLL进行修改或重新编译文件!这个原则对我们在设计类的时候很有帮助,坚持这个原则就必须尽量考虑接口封装,抽象机制和多态技术!通俗的讲就是:对扩展开放、对修改关闭

5.3 里氏替换原则(LSP)

意思就是说我们依赖父类接口,在客户端声明一个父类接口,通过其子类来实现,这个时候就要求子类必须能够替换父类所出现的任何地方,这样做的好处就是,在根据新要求扩展父类接口的新子类的时候而不影响当前客户端的使用!

5.4 依赖倒置原则

传统的结构化编程中,最上层的模块通常都要依赖下面的子模块来实现,也
称为高层依赖低层!所以DIP原则就是要逆转这种依赖关系,让高层模块不要依赖低层模块,所以称之为依赖倒置原则!通俗一点就是(面向接口编程)

5.5 ISP 接口隔离原则

这个原则的意思是:使用多个专门的接口比使用单个接口要好的多!为了减少接口的定义,将许多类似的方法都放在一个接口中,最后发现,维护和实现接口的时候花了太多精力,而接口所定义的操作相当于对客户端的一种承诺,这种承诺当然是越少越好,越精练越好,过多的承诺带来的就是你的大量精力和时间去维护!

完!

初探面向对象编程之oop与设计模式相关推荐

  1. 【C语言】C语言实现面向对象编程之封装

    00. 目录 文章目录 00. 目录 01. 前言 02. 简单程序示例 03. 程序示例优化 04. 总结 05. 参考 01. 前言 面向对象编程(OOP)并不是一种特定的语言或者工具,它只是一种 ...

  2. python面向对象编程指南 脚本之家_Python面向对象编程之继承与多态详解

    本文实例讲述了Python面向对象编程之继承与多态.分享给大家供大家参考,具体如下: Python 类的继承 在OOP(Object Oriented Programming)程序设计中,当我们定义一 ...

  3. python面向对象编程之实例属性和类属性

    廖雪峰python教程 面向对象编程之实例属性和类属性 练习 为了统计学生人数,可以给Student类增加一个类属性,每创建一个实例,该属性自动增加: # -*- coding: utf-8 -*- ...

  4. python面向对象编程之访问限制

    廖雪峰python教程 面向对象编程之访问限制 https://www.liaoxuefeng.com/wiki/1016959663602400/1017496679217440 练习: 请把下面的 ...

  5. 【历史上的今天】5 月 17 日:面向对象编程之父出生;国内全面接入互联网;惠普收购 Cray

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 5 月 17 日,在 1969 年的今天,国际电信联盟第二十四届行政理事会正式通过决议,决定把国际电 ...

  6. 面向对象编程之继承、多态、封装、抽象类、接口、包-上

    面向对象编程之继承.多态.封装.抽象类.接口.包-上 继承 类的继承格式 为什么要继承 继承的特点 继承的种类及关键字 访问权限 多态 向上转型 动态绑定 方法重写 重写和重载的区别比较 多态的优点 ...

  7. Python基础-面向对象编程之特性(property)

    Python基础-面向对象编程之特性property Python面向对象编程之特性(property) 一.统一访问原则 二.使用特性进行拦截操作 三.老式写法 Python面向对象编程之特性(pr ...

  8. 面向对象编程之属性方法property

    面向对象编程之属性方法 八股文如下: property属性介绍 property属性就是负责把一个方法当做属性进行使用,这样做可以简化代码使用.当修改值或者设置值的时候只需要像属性那样使用. 定义pr ...

  9. C语言--面向对象编程之继承

    系列文章目录 C语言实现面向对象编程的第二篇,在第一篇里面我们已经了解到了何为面向对象以及实现面向对象的第一大特性–封装,对于C来说,实现继承和多态要稍微麻烦一些. C语言实现面向对象- - 封装 C ...

最新文章

  1. tensorflow 使用
  2. Linux平台下 vimrc配置(转网友:http://blog.csdn.net/wooin/article/details/1887737)
  3. c语言中entern int x y,关于extern和int main()的结构有关问题
  4. knn k的选取_经典算法(四):KNN
  5. Android 应用开发(8)---语言和语言区域
  6. Facebook何恺明团队提出SlowFast网络,视频识别无需预训练
  7. PostgreSQL客户端无法访问数据库问题
  8. STM32机器人控制开发教程No.4 使用串口通信控制电机(基于HAL库)
  9. 三极管原理-导通条件
  10. XGBoost 与 信用卡诈骗数据集 三
  11. Processing绘制随风飘扬的名画
  12. 硬件安全技术——芯片安全设计技术2
  13. STM32使用RTC+BKP+PWR+EXTI
  14. 【java-调用摄像头进行截屏与保存-实例篇1-0716】
  15. FireFox火狐浏览器设置不加载图片
  16. bread 块设备读取函数解析(1)
  17. 游戏行业比影视行业哪个更有前景?来看数据说话!
  18. 解决PythonDjango错误“TypeError: ‘bool‘ object is not callable”
  19. LeaRun.net代码生成器 一键生成前后端代码
  20. springboot+基于微信小程序的心理医生系统的设计实现 毕业设计-附源码191610

热门文章

  1. plsql如何连接oracle11g_PLSQL连接Oracle11G图文教程(含PLSQL配置文件)
  2. vs账号状态异常_西甲第35轮直播:皇家马德里vs阿拉维斯 皇马气势汹汹欲冲连胜势头!...
  3. Centos7使用yum源安装mysql5.7和redis
  4. linux中popen汉字乱码,Python中使用subprocess.Popen返回值乱码解决方案
  5. 【Redis】详细基础命令 - 学习笔记
  6. python 格式化方法 从其他信息构建字符串
  7. python使用函数可以减少内存吗_如何将Python内存占用缩小20倍?
  8. RCNN SPP_net
  9. java-Transient关键字、Volatile关键字介绍和序列化、反序列化机制、单例类序列化
  10. Excel表格数据导入到SQLServer数据库