*在写《程序猿的思维修炼》随笔中,我们大概猜想到了,OOP的思想更趋于模块化,更独立,因此称为一个个对象,本次随笔将对OOP和一般编程的区别有更详细的解释

面向对象编程的含义:

  面向对象编程是创建计算机应用程序的一种相当新的方法,它解决了传统编程技巧带来的许多问题。一般的的编程方法称为函数(或过程)化编程,常常会导致所谓的单一应用程序,即所有的功能都包含在几个代码模块中(常常是一个代码模块)。而使用OOP技术,常常要使用许多代码模块,每个模块都提供特定的功能,每个模块都是孤立的,甚至与其他模块完全独立。这种模块化编程方法提供了非常大的多样性,大大增加了重用代码的机会。

  要进一步说明这个问题,假定计算机上的一个高性能应用程序是一辆一流赛车。如果使用传统的编程技巧,这辆赛车就是一个单元。如果要改进该车,就必须替换整车,把它送回厂商那里,让汽车专家升级它,或者购买一辆新车。如果使用OOP技术,就只需从厂商处购买新的引擎,自己按照其说明替换它,而不必用钢锯切割车体。

  在传统的应用程序中,执行流常常是简单的、线性的。把应用程序加载到内存中,从A点开始执行,在B点结束,然后从内存中卸载,在这个过程中可能用到其他各种实体,例如存储介质上的文件或显卡的功能,但处理的主体总是位于一个地方。此时的代码一般与使用各种数学和逻辑方式处理数据相关。处理方法通常比较简单,使用基本的数据类型,例如整型和布尔值,建立比较复杂的数据表达方式。

  而使用OOP,事情就不是这么直接了。尽管可以获得相同的效果,但其实现方式是完全不同的。OOP技术以结构、数据的含义以及数据和数据之间的交互操作为基础。这通常意味着要把更多的精力放在项目的设计阶段,但项目的可扩展性比较高。一旦对某种类型的数据的表达方式达成一致,这种表达方式就会应用到应用程序以后的版本中,甚至是全新的应用程序中。这种一致的表达方式可以大大减少开发时间。这就是上述赛车示例的工作原理。这里的一致是"引擎"的代码是结构化的,这样就可以很容易地替换成新代码(即新引擎),而不需要找厂商帮忙。这也表示,引擎创建出来后可以用于其他目的,可以把它安装到另一辆车上,或者用它驱动潜艇。

  除了数据表达方式的一致性外,OOP编程还常常可以简化任务,因为较抽象实体的结构和用法也是一致的。例如,不仅把输出结果发送给设备(如打印机)所使用的数据格式是一致的,而且与该设备交换数据的方法也是一致的,这包括它理解的指令等等。回到赛车的示例上,要达成的一致包括引擎如何连接到油箱上,如何把驱动力传送给车轮等。

  顾名思义,OOP技术要使用对象。

面向对象的四个基本特征:

    ①抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。比如,我们要设计一个学生成绩管理系统,考察学生这个对象时,我们只关心他的班级、学号、成绩等,而不用去关心他的身高、体重这些信息。抽象包括两个方面,一是过程抽象,二是数据抽象。过程抽象是指任何一个明确定义功能的操作都可被使用者看作单个的实体看待,尽管这个操作实际上可能由一系列更低级的操作来完成。数据抽象定义了数据类型和施加于该类型对象上的操作,并限定了对象的值只能通过使用这些操作修改和观察。

    ②继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。这也体现了大自然中一般与特殊的关系。继承性很好的解决了软件的可重用性问题。比如说,所有的Windows应用程序都有一个窗口,它们可以看作都是从一个窗口类派生出来的。但是有的应用程序用于文字处理,有的应用程序用于绘图,这是由于派生出了不同的子类,各个子类添加了不同的特性。

    ③封装:封装是面向对象的特征之一,是对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。一旦定义了一个对象的特性,则有必要决定这些特性的可见性,即哪些特性对外部世界是可见的,哪些特性用于表示内部状态。在这个阶段定义对象的接口。通常,应禁止直接访问一个对象的实际表示,而应通过操作接口访问对象,这称为信息隐藏。事实上,信息隐藏是用户对封装性的认识,封装则为信息隐藏提供支持。封装保证了模块具有较好的独立性,使得程序维护修改较为容易。对应用程序的修改仅限于类的内部,因而可以将应用程序修改带来的影响减少到最低限度。

    ④多态:多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。又比如,同样的选择编辑-粘贴操作,在字处理程序和绘图程序中有不同的效果。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

面向对象的优点:

  ①开发时间短,效率高,可靠性高,所开发的程序更强壮。由于面向对象编程的可重用性,可以在应用程序中大量采用成熟的类库,从而缩短了开发时间。
  ②应用程序更易于维护、更新和升级。继承和封装使得应用程序的修改带来的影响更加局部化。

转载于:https://www.cnblogs.com/yimengxianzhi/p/7802021.html

初学者的困惑:OOP与一般编程的区别相关推荐

  1. OOP 概念的编程基础思想----我的感想

    OOP 概念的编程基础思想----我的感想 (The essential of OOP concept Thought) Actually the philosofy of object orient ...

  2. 怎样才能把一个代码变成软件成品?一个初学者的困惑,我们写的代码都只能是解决一些数学问题而已。怎么把它变成一个软件。

    小弟疑惑... 怎样才能把一个代码变成软件成品?一个初学者的困惑,我们写的代码都只能是解决一些数学问题而已.怎么把它变成一个软件. 大神月... 对于您这个问题,当初也是我的好奇之处啊!其实你学好一门 ...

  3. OOP和POP之间的区别

    Here you will learn about difference between OOP and POP. 在这里,您将了解OOP和POP之间的区别. Object Oriented Prog ...

  4. 面向过程与面向对象编程的区别和优缺点

    ■面向过程与面向对象编程的区别 转载至:https://www.cnblogs.com/strivers/p/6681876.html 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步 ...

  5. 乐高编程学c语言吗,乐高编程和少儿编程的区别

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 乐高编程和少儿编程的区别如下: 1.乐高编程是以调用编程模块指令让机器动起来为目的.通常需要编程的模块是已经写好存储在模块里的,学 ...

  6. 机器人搭建和少儿编程的区别

    机器人搭建和少儿编程的区别?说起孩子的学习想必很多的家长们都是非常的认真耐心的.就拿现在很多的家长想要孩子去学习机器人编程的课程来说,有的家长对于机器人搭建和少儿编程的区别其实并不是很清楚,也不知道他 ...

  7. 思维课和少儿编程的区别

    思维课和少儿编程的区别?家长们在给孩子选择一些能够提升孩子能力的课程的时候,可以说是十分的用心.就拿现在很多的家长想要孩子去学习少儿编程的课程来说,他们对于思维课和少儿编程的区别并不是很清楚,今天我们 ...

  8. TwinCAT与Step 7编程的区别

    TwinCAT与Step 7编程的区别 熟悉西门子PLC编程的客户,首次使用TWINCAT PLC时,总是有一些概念要重新理解.本文根据作者个人经验,对二者做一些对比.希望做到系统.全面.正确,实际却 ...

  9. 围棋与机器人编程的区别

    围棋与机器人编程的区别?家长们在培养孩子的学习方面可以说是相当的耐心的.是会给孩子选择一些能够有利于孩子成长的课程的.就拿现在很多的家长想要孩子去学习机器人编程的课程来说,有的家长对于围棋与机器人编程 ...

最新文章

  1. Java迭代器(转)(iterator详解以及和for循环的区别)
  2. 拉文大学计算机科学,拉文大学
  3. 酷冷至尊官方psu计算工具_一款精致的电源,轻松应付高端配置、酷冷至尊MWE750金牌全模组电源 体验...
  4. LeetCode 152. 乘积最大子序列(DP)
  5. flink java 并行度_flink solt和并行度
  6. 永远不要去依赖别人_感悟人生的经典句子:不要轻易去依赖一个人
  7. 如何在 Windows XP Service Pack 2 上启用 SQL Server 连接
  8. fanuc机器人编程手册_FANUC机器人示教编程:距离先执行指令功能介绍与使用方法
  9. 人工智能学习该读哪些书籍?
  10. 虚拟服务器 vmotion,图文并茂:深入了解VMware vMotion过程
  11. localhost和127.0.0.1有什么区别?(转载)
  12. 软件测试之兼容性测试
  13. 流程图,NS图,伪代码
  14. Hdu 5064 Find Sequence 解题报告
  15. Python图像处理库PIL的基本概念介绍(一)
  16. Kubernetes基础:Pause镜像源码解读
  17. 计算机网络学生机怎样连接总机,极域课堂管理系统怎么连接老师 学生端连接问题解决方法...
  18. CANOPEN 协议 命令字
  19. 比江小白杜蕾斯还要清新,这些文案,可能这就是青春吧!
  20. SQL SERVER 连乘写法

热门文章

  1. memset函数源码实现
  2. 安装MYSQL出现checking for termcap functions library
  3. html小球跳跃技术原理,弹跳的小球.html · web-project-songyu/原生js小例子 - Gitee.com...
  4. Python倒排索引函数
  5. java用重载实现获取元素的数据类型
  6. WEUI picker组件无法js动态改变选项
  7. InnoDB多版本控制实现
  8. Spring Boot自动配置原理
  9. ESP8266 WiFi串口模块的学习与使用(一)
  10. ubuntu16.04分区