面向对象

  • 什么是面向对象编程
  1. (一:了解)
    面向对象编程(OOP)是一种编程思想,这里借助面向过程和面向对象对比进行理解。比如你打算吃蛋炒饭,可以自己做或者去饭店吃。

    可以看出 面向对象面向过程 的区别,面向过程关注的是每一个功能实现的具体步骤,面向对象关注的是对象,然后由对象去调用功能。这里的饭店就是一个对象,把一类事情交给一个对象去处理。

    来段故事

    一个老板,接了一个300万的软件开发的项目,但是呢?这位老板本身并不具备软件开发的能力,他要怎么做呢?他可不可以自己做?现学?可以,因为项目就是人做出来的嘛!于是乎,这个老板现学软件开发,终于,5年时间,他把那个项目做出来了,可事实是那个给钱的公司早就黄了!这是不是不靠谱啊?那这个老板该怎么做?他聘请了一批程序员,说这有个项目,你们给我做出来,程序员是不是专业啊?那这没那个老板什么事了,他就去喝茶,玩去了!对这个老板来说,开发软件这个事情是不是从复杂变得简单了?他是不是从一个执行者转换成了指挥者?这些专业程序员对老板来说就是对象,老板面向这些对象,调用这些对象本身具有的功能来实现了自己的目的!这就是面向对象!

  2. (二:举例)
    例一:洗衣机里面放有脏衣服,怎么洗干净?

    面向过程的解决方法:
    1、执行加洗衣粉方法;
    2、执行加水方法;
    3、执行洗衣服方法;
    4、执行清洗方法;
    5、 执行烘干方法;

    将解决这个问题的过程拆成一个个方法(是没有对象去调用的),通过一个个方法的执行来解决问题。

    面向对象的解决方法:
    1、我先弄出两个对象:“洗衣机” 对象和 “人” 对象
    2、针对对象 “洗衣机” 加入一些属性和方法:“洗衣服方法”、“清洗方法”、“烘干方法”
    3、针对对象 “人” 加入属性和方法:“加洗衣粉方法”、“加水方法”
    4、然后执行
    人.加洗衣粉
    人.加水
    洗衣机.洗衣服
    洗衣机.清洗
    洗衣机.烘干

    面向对象编程就是先抽象出对象,然后用对象执行方法的方式解决问题。

    例二:五子棋游戏

    面向过程的设计思路就是首先分析问题的步骤:
    1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用不同的方法来实现。

    面向对象的设计则是从共性和功能的思路来解决问题:
    整个五子棋可以分为1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

    可以明显地看出,面向对象是以功能来划分问题,而不是步骤。

  3. (三:总结)
    ①、面向对象是一种思考问题的方式,是一种思想。
    ②、面向对象将复杂的事情变简单了。面向过程需要关注每一步的实现,而面向对象只需要关注一个对象就可以了。
    ③、面向对象让我们的角色发生了转变,从原来的执行者过渡到了指挥者。
    ④、面向对象基于面向过程。


面向对象的五大基本原则

  1. 单一职责原则 (Single Responsibility Principle SRP)
    是指一个类的功能要单一,不能包罗万象。如同一个人一样,分配的工作不能太多,否则一天到晚虽然忙忙碌碌的,但效率却高不起来。

  2. 开放封闭原则 (Open-Close Principle OCP)
    一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能,那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码,这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。

  3. 里式替换原则 (the Liskov Substitution Principle LSP)
    子类应当可以替换父类并出现在父类能够出现的任何地方。比如:公司搞年度晚会,所有员工可以参加抽奖,那么不管是老员工还是新员工,也不管是总部员工还是外派员工,都应当可以参加抽奖,否则这公司就不和谐了。

  4. 依赖倒置原则(the Dependency Inversion Principle DIP)
    具体依赖抽象,上层依赖下层。假设B是较A低的模块,但B需要使用到A的功能,这个时候,B不应当直接使用A中的具体类: 而应当由B定义一个抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口:这样就达到了依赖倒置的目的,B也解除了对A的依赖,反过来是A依赖于B定义的抽象接口。通过上层模块难以避免依赖下层模块,假如B也直接依赖A的实现,那么就可能造成循环依赖。一个常见的问题就是编译A模块时需要直接包含到B模块的cpp文件,而编译B时同样要直接包含到A的cpp文件。

  5. 接口分离原则(the Interface Segregation Principle ISP)
    模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来


面向对象编程思想的理解相关推荐

  1. java面向对象编程思想的理解

    1.我们总说java是一门面向对象编程的语言,那什么是面向对象呢? 我是这样理解的,对象是事物存在的实体,如,猪.狗,花早等都是对象,对象由两部分组成.面向对象编程的三大特点:继承,多态,类是封装对象 ...

  2. java面向对象编程的思想_java面向对象编程思想的理解

    1.我们总说java是一门面向对象编程的语言,那什么是面向对象呢? 我是这样理解的,对象是事物存在的实体,如,猪.狗,花早等都是对象,对象由两部分组成.面向对象编程的三大特点:继承,多态,类是封装对象 ...

  3. java面向对象编程思想_Java面向对象编程思想的理解

    1.我们总说java是一门面向对象编程的语言,那什么是面向对象呢? 我是这样理解的,对象是事物存在的实体,如,猪.狗,花早等都是对象,对象由两部分组成.面向对象编程的三大特点:继承,多态,类是封装对象 ...

  4. 面试题: 谈一谈你对面向对象编程思想的理解?

    面向对象:(编程思想) 编程思想的概念引入         面向:看.关注.瞅         对象:个体.实体.实例.结果 使用到代码中:         将整个项目拆分为一个一个的模块,然后肢解成 ...

  5. java 以一个例子来理解面向对象编程思想

    在面向对象的编程中,面向对象的应用是检验你对现实中实际物体和及其关系的抽象能力.在实际编程过程中,你的能力并不是你掌握了多少新的技术,而是对你当前问题的认识的深度,当你理解的足够深的时候,你的框架就出 ...

  6. 我们程序员眼中的对象-看完华华的文章妈妈再也不担心我找不到对象了-Java面向对象编程思想理解系列(1)

    大家好!!!我叫霜华,是一个帅到没天理 骚里骚气,热爱人生与绿色 是一个不像程序员的程序员 作为一个在java这门领域沉迷一年半的人,如今在技术栈广度和深度 还是业务能力在客观层面讲确实进步迅速 (可 ...

  7. 如何理解Python 面向对象编程思想

    Python 面向对象编程思想 1. 宽泛的面向对象的概念 举例说明 面向过程:做一件事情,从头到尾,每一个细节都要关注,重点在于过程 面向对象:做一件事情,用对象去做,不关心细节和过程,万物皆对象 ...

  8. 面向对象编程思想概览(三)继承

    一.简介 本讲以大家耳熟能详的<西游记>中的唐僧师徒四人为例,介绍了类的继承的概念和实现方法,总结了继承的特性和优点,帮助同学们理解面向对象编程中继承的用法,进而掌握面向对象程序设计的基本 ...

  9. 面向对象编程思想 以及类与对象

    一.面向对象编程思想 众所周知,我们常见的编程思想有面向过程和面向对象两种,像我们最基础的c语言,就是一种以过程为中心的编程思想,不关注具体的事件和对象而是针对于解决问题的思路和目标,这种编程思想由于 ...

最新文章

  1. 调试寄存器(debug registers, DRx)理论及实践
  2. 4 计算机系统的异步性,计算机操作系统的最基本特征是什么
  3. 高并发IM系统架构优化实践
  4. H5之audio标签放音兼容所有浏览器方法
  5. python tkinter button_[转载]Python Tkinter之Button(转载)
  6. linq To DataTable
  7. docker 搭建nginx php mysql_docker搭建nginx+mysql+php
  8. 反射修改jsessionid实现Session共享
  9. MySQL多实例管理(mysqld_multi)
  10. 数据分析学习记录(四)--在origin中实现单因素方差分析和非参数检验
  11. 网络适配器有感叹号(56)
  12. [法国][无法触碰/触不可及][BD-RMVB.720p.中字][2011最新/法国票房冠军]
  13. labelimg标注的VOC格式标签xml文件和yolo格式标签txt文件相互转换
  14. 互联网创业公司是否需要技术外包?
  15. 笔记本触控板无法滑动解决办法
  16. 快速排序、快排的优化 及Java实现
  17. 交通行业服务器操作系统加固报价,加固清单报价实例
  18. 2018年中国互联网婚恋交友行业发展现状分析及未来发展趋势预测【转】
  19. android中的数据库操作
  20. 价值投资3原则:内在价值、安全边际和市场波动

热门文章

  1. html竖屏显示标签,H5竖屏提示
  2. ws1 kdevelop 报libQt5Core.so.5 找不到
  3. linux 抓包命令
  4. encrypt 加密解密
  5. 第一节 常用组件 之 Expression 概述
  6. 2021年中国冰雪产业市场现状分析,三亿人上冰雪正成为现实「图」
  7. 运动用什么耳机最好、推荐六款最好的运动耳机
  8. 关于高内聚低耦合的理解
  9. 漫画党的福利——将图片转换成漫画风格 API,附超多免费可用API 推荐(四)
  10. 7-2 例4-3游泳池改造预算 (20分)