b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

您好,C ++(31)我终于找到了对象! 6.1从结构化设计到面向对象的编程

电脑杂谈  发布时间:2020-05-06 03:15:27  来源:网络整理

面向对象化语言_莱昂移动web实现指南:面向移动设备的网站优化、开发和设计_某些过程化程序设计语言也可实现面向对象系统

第6章

当C ++爱上了面向对象

许第一次进入C ++世界会问: C ++中的两个加号是什么意思?

C ++是从C语言开发的. 它比C语言多两个加号. 它实际上是C语言的增量运算符,这意味着C ++语言会在C语言的基础上添加新的一种. 内容. 如果一个加号表示C ++在C语言的基础上增加了现代编程语言的新功能,例如模板和异常处理,则另一个加号表示C ++在该语言上添加了面向对象的编程C语言的基础. 思想支持. 正是这两个加号所代表的新内容,使得C ++在C语言的基础上完成了从传统到现代,从面向过程到面向对象的演进,从而使C ++和C语言成为可能. 本质上是不同的.

在C ++添加的两个新内容中,核心是对面向对象编程思想的支持. 它的添加完成了从C语言到C ++的华丽转换. 那么,什么是面向对象的呢?为什么C ++应该添加对此的支持? C ++如何支持面向对象?别担心,一一听我.

自1960年以来,面向对象编程的原型已在Simula语言中出现. 当时,编程领域正面临危机: 面对越来越复杂的软件和硬件系统,传统的面向过程以C语言为代表的编程思想越来越不能满足实际需求. 面向过程的设计整个系统得到了很好的描述,设计结果也难以理解. 因此,它给软件的实现和后期维护带来了巨大的挑战. 在前所未有的软件危机中. 为了解决此软件危机,人们开始寻找可以消除怪兽“软件危机”的“银弹”. 面向对象编程的思想在这种背景下应运而生. 它通过强调设计和实现的可伸缩性和可重复性,成功解决了这一“软件危机”. 从那时起,面向对象编程的思想开始在业界流行并逐渐成为主流. 在此期间,发生了从C语言到C ++的演变. 自然,C ++选择支持面向对象的编程.

“神话般的月亮”和银

神话般的月刊是一本在软件领域具有深远影响的书. 它是在软件危机的背景下诞生的,正是这本书提出了“银弹”的概念.

在西方神话中,只有一颗银击中了杀死怪物的心. 在本书中,作者将越来越大,越来越难以管理和维护的软件开发项目与无法控制的传奇怪物进行了比较,并希望有一种技术可以杀死像银弹一样的怪物. 为了彻底解决软件危机.

实际上,面向对象编程的思想并不是完整意义上的灵丹妙药. 解决大型软件项目遇到的所有问题是不可能的,但是它在一定程度上提出了一种更自然的软件描述方式. 软件危机已解决.

要了解新的面向对象思维的优势,最简单,最直接的方法是首先查看旧的面向过程思维的缺点. 回顾我们在前几章中学到的示例,在解决问题时,我们始终遵循以下过程: 然后分析问题的处理过程;然后根据流程需要将一个大问题分为几个小问题;如果还可以,细分的小问题仍然更加复杂,然后进一步细分,直到可以简单解决小问题为止;实现每个子模块以解决每个小问题;最终通过main函数按照业务流程的顺序调用这些子模块,并最终解决整个大问题. 问题如图6-1所示. 从这样的问题开始,由上而下和逐步细化的开发思想被称为``面向过程的编程思想'',它描述了解决问题的``过程''.

面向对象化语言_某些过程化程序设计语言也可实现面向对象系统_莱昂移动web实现指南:面向移动设备的网站优化、开发和设计

图6-1面向过程的编程过程

面向过程编程的思想诞生于1960年代,并在1980年代蓬勃发展,是当时最流行的编程思想. 它的流行有其内在原因,与当时的其他编程思想相比,它具有明显的优势.

与第4章介绍的程序流控制结构一样,面向过程的程序设计将程序限制为仅三个基本控制结构: 顺序,选择和循环. 任何程序逻辑,无论简单还是复杂,都可以通过这三种基本控制结构的不同组合或嵌套来实现. 这使得程序的结构相对简单,易于实现和维护.

在解决复杂问题时,人们总是采取“分而治之”的策略,将大问题分解为多个小问题,然后“每次分解”,最后解决大问题. 面向过程的编程思想也采用这种“分而治之”的策略,根据业务逻辑将较大的程序划分为多个子模块,然后逐个完成这些子模块,最后根据业务流程进行组织,最终使整个问题得以解决. 根据某些原则,将大问题细分为“每个破碎的小问题”,符合人们思考问题的一般规律,设计结果更易于理解,而且这种方法也易于人们掌握. 通过分解问题,降低了问题的复杂性,使程序易于实现和维护. 此外,部分分解后的小问题(子模块)可以重复使用,从而避免了重复开发. 分工也可以完成多个子模块,提高了开发效率.

面向过程的编程思想所倡导的方法是“自上而下,逐步完善”. 所谓“自上而下,逐步完善”是指首先从宏观角度考虑,根据功能或业务逻辑划分程序的子模块,定义程序的整体结构,然后逐步完善每个子程序-module,最后分解成程序Sentence. 这种方法使程序员可以全面考虑问题,从而使程序的逻辑关系清晰明了. 它将整个开发过程从最初的“如何做”的考虑变为“首先要做什么,然后做什么”的考虑,并且过程更加清晰.

随着时代的发展,软件开发项目变得越来越复杂. 尽管面向过程的编程具有许多优点,但是当它用于解决复杂的问题时,其缺点逐渐暴露出来: 在面向过程的编程中,数据和操作彼此分离,从而导致数据结构是否发生更改,相应的操作功能将不得不重写;如果需求有变化或有新需求,也可能涉及模块的重新划分,这将修改大量先前编写的功能模块. 面向过程的编程中数据和操作的分离使某些模块与特定的应用程序环境紧密集成. 旧程序模块很难在新程序中重用. 这些面向过程的编程思想的固有缺陷使得它越来越无法适应大型软件项目的开发. 这实际上是“过程也以成功为导向,失败也以过程为导向”. 因此,人们开始寻找新的编程思想. 在这种情况下,一些新的编程思想开始出现并逐渐取代面向过程的编程思想,而面向对象的编程思想就是其中的“领导兄弟”.

面向对象程序设计(Object Oriented Programming,OOP)是面向过程程序设计的继承和发展. 它不仅吸收了后者的本质,而且以更接近人类思维的方式分析和解决问题: 程序是对现实世界的抽象和描述. 现实世界的基本单位是一个对象,与之对应的程序中的基本单位是一个对象.

面向对象的思维认为,现实世界是由许多相互关联并相互通信的实体组成的. 像一个星球一样大的国家,一个像人一样小的国家,一个分子,无论它是否活着,都可以视为一个对象. 通过分析这些对象,发现每个对象都由两部分组成: 描述对象状态或属性的数据(变量)和描述对象行为或功能的方法(函数). 与面向过程的数据分离和对数据进行操作的功能不同,面向对象的功能将数据和处理数据的功能结合在一起,形成对象以更准确地描述现实世界. 可以说这是面向过程和面向对象之间最本质的区别.

对应于现实世界,在面向对象中,我们使用一个对象来代表现实世界中的一个实体,每个对象都有其自己的属性和行为,并且整个程序由一系列交互组成. 对象之间,通过对象之间的互操作来完成复杂的业务逻辑. 例如,在一个班级中,有一个陈老师和50个学生,那么我们可以使用一个老师对象和50个学生对象来抽象和描述这个班级. 对于这51个对象,每个对象都具有一些共同的属性,例如名称,年龄等. 一些属性对于某些类型的对象是唯一的,例如教师对象具有title属性,而学生对象则不是. 另外,教师和学生这两个客体也有不同的行为. 例如,教师对象具有准备课程,上课和纠正作业的行为;学生对象具有听课和完成作业的行为. 老师对象和学生对象对自己的行为和责任负责,并且同时彼此联系. 例如,老师在课堂上的动作需要以学生为动作对象. 通过对象之间的交互,整个类可以正常运行. 整个面向对象的分析和设计的结果非常接近我们的现实世界,自然更容易理解和实现. 教师对象如图6-2所示.

图6-2使用面向对象的思维将教师抽象为对象

了解更多: 面向对象编程的重要性是什么?

面向对象化语言_某些过程化程序设计语言也可实现面向对象系统_莱昂移动web实现指南:面向移动设备的网站优化、开发和设计

这一点也许可以从面向对象的诞生开始.

在面向对象的诞生之前,有一个称为过程的人,他将要解决的整个问题抽象为描述事物的数据和描述数据处理或数据处理的功能. 当问题的规模相对较小且需求变化不大时,面向过程的效果很好.

但是(所有人都害怕“ but”这个词),当问题的规模越来越大,越来越复杂,并且需求变化越来越快时,面向过程的方面将变得无能为力. 想象一下,当我们根据需求的变化来修改结构时,我们必须修改与其相关的所有流程功能,而流程功能的修改通常还涉及其他数据结构. 当系统规模较小时,这相对容易解决,但是当系统规模越来越大时,尤其是涉及协作开发时,这是一场噩梦. 这是著名的软件危机.

为了解决此软件危机,面向对象应运而生(问题的出现,必须有问题的解决方案的出现,大多数英雄都是以此方式诞生的. )

我们知道面向对象的三个轴是封装,继承和多态性: 它使用封装将问题中的数据与处理数据的功能组合在一起,从而形成一个完整的类概念. 它更符合人们的思维习惯,更有利于理解. 自然地,更容易理解和抽象一些复杂的系统. 它使用继承来应对系统的扩展. 在原始系统的基础上,只要简单的继承就可以完成系统扩展而无需重新启动炉子;它使用多态来响应需求变化,这是一个统一的借口,但是它可以有不同的实现方式.

可以说,面向对象的思想从三个方面解决了软件危机,这是软件重要性的基本体现.

我们知道面向对象是为解决流程导向无法解决的“软件危机”而诞生的. 那么,它如何解决“软件危机”呢?封装,继承和多态性是面向对象思维的三个基石. 它们的共同作用使得“软件危机”得到了一定程度的解决,如图6-3所示.

1. 包装

该程序用于抽象和描述现实世界. 因此,让我们看一下我们如何描述现实世界中的事物. 我们总是用数据和操作来描述事物: 事物是什么,事物可以做什么. 例如,如果我们想描述一位老师,我们会说: 他高178厘米,重72公斤,年龄32岁. 同时,他可以教学生和纠正作业. 这样,在我们的脑海中就会建立起一个活泼的老师形象.

在传统的面向过程的思想中,程序中的数据和操作是相互分离的. 也就是说,在描述事物时,事物是什么(数据)和事物可以做什么(操作)是相互分离的. 但是在面向对象的思想中,我们通过封装机制将数据和相应的操作捆绑在一起,以形成具有属性(数据)和行为(操作)的完整数据类型. 在C ++中,我们将此数据类型称为类,并且用此数据类型定义的变量称为对象. 这样,程序中的数据和这些数据的操作被组合在一起,更符合人们描述某件事的思维习惯,因此也更容易理解和实现. 简而言之,对象是一个逻辑实体,它封装数据和操作这些数据的动作,也是真实程序中事物的反映,如图6-4所示.

面向对象化语言_某些过程化程序设计语言也可实现面向对象系统_莱昂移动web实现指南:面向移动设备的网站优化、开发和设计

图6-4将属性和行为封装到对象中

封装机制的另一个好处是可以保护数据. 在面向过程的思维中,由于数据和操作彼此分离,因此某些操作可能会错误地修改不属于该数据的数据,从而导致程序错误. 在面向对象的思想中,数据和操作绑定在一起成为对象,并且数据可以是对象专用的,并且只能由绑定到该对象的操作访问,从而避免了其他操作要访问的数据. 这就像钱包里的钱是我们的私有财产,只有我们可以访问它,其他人不能访问它. 当然,除了小偷.

在创建新内容时,我们始终希望我们可以在旧内容的基础上开始,这无疑会提高效率. 但是对于面向过程的C语言,这很难做到. 在C语言中,如果您已经编写了“类”函数并且想编写“数学类”函数,那么很多时候我们必须重新开始. 如果我们每次都从头开始,那么开发效率就会太低. 显然,这不能满足大型复杂系统的开发需求.

为了解决这个问题,面向对象的思想提出了继承机制. 继承是一种简单的方法,它允许一种类型获取另一种类型的属性(成员变量)和行为(成员函数). 继承就像现实世界中的进化一样. 继承的子类型不仅可以具有父类型的属性和行为,还可以添加该子类型独有的新属性和行为. 例如,我们使用了封装机制将name属性和说话行为封装到“ person”类中. 基于此,我们可以通过继承“ person”类并同时添加作业属性和类行为来轻松获得a. 新的“老师”课. 这个新的“老师”类不仅具有其父类“ person”的名称属性和口语行为,而且还具有其自己的工作属性和类行为. 如有必要,我们还可以在“老师”课程的基础上继承“数学老师”,“中文老师”等课程. 在此过程中,我们直接重用了父类的现有属性和行为,从而避免了从头开始面向流程的问题,并大大提高了开发效率. 如图6-5所示.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-200181-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...