【C++进阶】面向对象

news2024/12/26 11:05:46

程序

编写程序是为了让计算机解决现实生活中的实际问题。pascal之父、结构化程序设计先驱Niklaus Wirth提出程序 = 算法 + 数据结构。程序是完成一定功能的一些列有序指令的集合。指令 = 操作码 + 指令。将指令按一定的顺序进行整合,就形成了程序。

机器语言与汇编语言

机器语言就是一些机器能读懂的二进制指令集合
。机器语言更多的要站在机器的角度来考虑问题,而不是站在解决问题的本身空间中来考虑问题。现实生活中要处理的数据用二进制来表示,施加的逻辑也用二进制指令来表示。要按照机器的思维来解决问题。汇编语言将机器指令映射为一些可以被人读懂的助记符,如ADD、SUB等。汇编语言的抽象层次还是比较低,大部分时候我们还是要以机器的思维来考虑问题。

高级语言

高级语言屏蔽了机器的细节,提高了语言的抽象层次,程序中可以采用具有一定含义的数据命名和容易理解的执行语句。这使得在书写程序时可以联系到程序所描述的具体事物。

结构化程序设计

传统的程序设计方法可以归结为“程序=算法+数据结构”,将程序定义为处理数据的一系列过程。这种设计方法的着眼点是面向过程的,特点是数据与程序分离,即数据与数据处理分离。机器语言与汇编语言代码与数据的界限模糊,也被称为“面条式”的编程方法。

结构化程序设计的基本思想是采用自顶向下、逐步细化的设计方法和单入单出的控制结构。其理念是将大型程序分解成小型、便于管理的任务。如果其中的一项任务仍然过大,则将它分解为更小的任务。这一过程将一直持续下去,直到将程序划分为小型的,易于编写的模块,使得整个程序更有条理性。但是很多数据仍然属于整个程序,因而结构化程序设计思想还是需要有很多的全局变量。

结构化程序设计为处理复杂问题提供了有力手段,但到80年代末,这种设计方法逐渐暴露出以下缺陷:
1.程序难以管理
2.数据修改存在问题程序可重用性差
3.用户要求难以在系统分析阶段准确定义,致使系统在交付使用时产生许多问题。
4.用系统开发每个阶段的成果来进行控制,不能适应事物变化的要求。

面向过程程序设计缺点的根源在于数据与数据处理分离。

面向对象程序设计

面向对象将系统看成通过交互作用来完成特定功能的对象的集合。每个对象用自己的方法来管理数据。也就是说只有对象内部的代码能够操作对象内部的数据。也就是说程序 = 对象 + 对象 + … + 对象。对象 = 算法 + 数据。这就是封装的思想。

面向对象程序设计模拟自然界认识和处理事物的方法,将数据和对数据的操作方法放在一起,形成一个相对独立的整体——对象(object) ,同类对象还可抽象出共性,形成类(class)。一个类中的数据通常只能通过本类提供的方法进行处理,这些方法成为该类与外部的接口。对象之间通过消息(message)进行通讯。

数据抽象

结构化设计方法应用的是过程抽象。所谓过程抽象是将问题域中具有明确功能定义的操作抽取出来,并将其作为一个实体看待。数据抽象是较过程抽象更高级别的抽象方式,将描述客体的属性和行为绑定在一起,实现统一的抽象,从而达到对现实世界客体的真正模拟。

实体、对象、类之间的关系

现实世界中的实体可以抽象出类别的概念。对应于计算机世界就有一个类(class)的概念,因为类是一个抽象的概念的对应体,所以计算机不给它分配内存,只给对象分配内存。左图表达了计算机世界与现实世界之间的对应关系。

在这里插入图片描述

从计算机的观点看对象

对象是计算机内存中的一块区域。通过内存分块每个对象在功能上相对保持独立。这些内存不但存储数据,也存储代码。这保证对象是受保护的,只有对象中的代码能访问存储于对象中的数据。这清楚地限定了对象所具有的功能,并且使得对象不受未知外部事件的影响,从而使自己的数据和功能不会因此遭受破坏。对象之间只能通过函数调用也就是发送消息来实现相互通信。当对象的一个函数被调用时,对象执行内部的代码来响应该调用,从而使对象呈现一定的行为。这个行为及其呈现出来的结果就是该对象所具有的功能。

面向对象的基本特征

1.抽象

抽象是人们认识事物的一种方法,抓住事物本质,而不是内部具体细节或具体实现,是从具体到一般的过程。比如将房屋抽象成木材、水泥和钢筋等,形成了类的概念。

2.封装

封装是指按照信息屏蔽的原则,把对象的属性和操作结合在一起,构成一个独立的对象。通过限制对属性和操作的访问权限,对外提供一定的接口,在对象之外只能通过接口对对象进行操作。封装性增加了对象的独立性,从而保证了数据的可靠性。外部对象不能直接操作对象的属性,只能使用对象提供的服务。 比如我们不用关心电视机的内部工作原理,电视机提供了选台、调节音量等功能让我们使用。

3.继承

继承表达了对象的一般与特殊的关系。特殊类的对象具有一般类的全部属性和服务。当定义了一个类后,又需定义一个新类,这个新类与原来的类相比,只是增加或修改了部分属性和操作,这时可以用原来的类派生出新类,新类中只需描述自己所特有的属性和操作。继承性大大简化了对问题的描述,大大提高了程序的可重用性,从而提高了程序设计、修改、扩充的效率。继承具有传递性,如汽车具有车的全部属性和行为。

在这里插入图片描述

4.多态

多态性:同一个消息被不同对象接收时,产生不同结果,即实现同一接口,不同方法。一般类中定义的属性和服务,在特殊类中不改变其名字,但通过各自不同的实现后,可以具有不同的数据类型或具有不同的行为。比如当向图形对象发送消息进行绘图服务请求后,图形对象会自动判断自己的所属类然后执行相应的绘图服务。

在这里插入图片描述

继承与多态组合,可以生成很多相似但又独一无二的对象。继承性使得这些对象可以共享许多相似特性,而多态又使同一个操作对象对不同对象产生不同表现形式。这样不仅提高了程序设计的灵活性,而且减轻了分别设计的负担。

面向对象思想总结

面向对象是一种认识世界的方法,也是一种程序设计方法。面向对象的观点认为,客观世界是由各种各样的实体,也就是对象组成的。每种对象都有自己的内部状态和运动规律。不同的对象间的相互联系和相互作用就构成了各种不同的系统,进而构成整个客观世界。

面向对象编程方法的特性

程序设计的重点在数据而不是函数。程序由对象组成,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。对象之间通过相互协作来完成功能。函数与相关的数据紧密结合。数据可以被隐藏,很容易扩充新的数据和函数,对增加开放,对修改、删除关闭。

面向对象编程的优点

1.易维护:可读性高,即使改变需求,由于继承的存在,维护也只是在局部模块,维护起来是非常方便和较低成本的。
2.质量高:可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
3.效率高:在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。这样的方法解决问题,接近于日常生活和自然思考方式,势必提高软件开发的效率。
4.易拓展:由于继承、封装和多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更加灵活,更容易拓展,而且成本较低。

面向对象编程的缺点

运行效率会下降10%左右。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/403822.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试的案例分析 - 闰年5

文章目的 显示不同的博客能获得多少博客质量分 (这是关于博客质量分的测试 https://www.csdn.net/qc) 这个博客得了 83 分。怎么才能得到更多分数? 正文 我们谈了不少测试的名词, 软件是人写的, 测试计划和测试用例也是人写的, 人总会犯错误。错误发生…

Shiro学习认证和授权

Shiro学习笔记 认证 思路 获取当前的Subject,调用SecurityUtils.getSubject()方法;判断当前用户是否被认证,即是否已经登陆,调用Subject的isAuthenticated()方法进行判断;若没有认证,则把用户名和密码封…

C++11线程、互斥量以及条件变量

文章目录前言1、创建第一个线程2、线程对象的生命周期、等待和分离3、线程创建的多种方式4、互斥量4.1 独占的互斥量std::mutex4.2 递归独占互斥量recursive_mutex4.3 带超时的互斥量std::timed_mutex和std::recursive_timed_mutex4.4 std::lock_guard和std::unique_lock5、cal…

CSS常用内容总结(扫盲)

文章目录前言相关概念【了解】脚本语言什么是脚本语言脚本语言有什么特点常见的脚本语言什么是动态语言,什么是静态语言动态语言和静态语言两者之间有何区别CSSCSS是什么CSS的特点一、CSS代码怎么写基本语法规则引入方式内部样式内联样式表外部样式代码风格二、CSS的…

JavaWeb——进程详解

目录 一、操作系统 1、定义: 2、操作系统的基本功能: 二、进程 1、定义: 三、进程管理 1、PCB定义 (1)、身份标识 (2)、内存指针 (3)、文件描述符 2、操作系统…

Hadoop入门常见面试题与集群时间同步操作

目录 一,常用端口号 Hadoop3.x : Hadoop2.x: 二,常用配置文件: Hadoop3.x: Hadoop2.x: 集群时间同步: 时间服务器配置(必须root用户): (1&#xff09…

1639_perror的函数功能以及简单测试

全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 继续分析之前的shell程序代码,看到了一个fork1的实现。 Fork之前还是看过的,但是也已经忘得差不多了,这个fork1就是fork的一种应…

4.Spring Cloud (Hoxton.SR8) 学习笔记—Nacos微服务治理

本文目录如下:一、Nacos微服务治理Nacos 下载 与 启动Spring Cloud 集成 NacosIDEA 同一个 Application 启动多次一、Nacos微服务治理 Nacos 下载 与 启动 https://github.com/alibaba/nacos/releases Nacos 下载与启动: F:\ProgramFiles\nacos\bin> .\startup…

MyBatis操作数据库

目录 MyBatis 功能架构 学习MyBatis 第一个MyBatis查询 1、创建数据库和表 2、搭建MyBatis开发环境 2.1、在项目中添加MyBatis框架 2.2、配置数据库连接信息 2.3、配置MyBatis中xml的保存路径(规则) 3、添加业务代码 3.1、创建实体类 3.2、构…

stack,queue

stack,queuestack的介绍和使用介绍使用模拟实现queue的介绍和使用介绍使用模拟实现priority_queue的介绍和使用介绍使用模拟实现容器适配器概念标准库中stack,queue的底层结构介绍deque原理缺陷deque作为stack,queue底层默认容器stack的介绍和使用 介绍 stack是适…

哪个牌子的蓝牙耳机音质好?音质比较好的蓝牙耳机排名

蓝牙耳机经过多年发展,无论是在外观设计还是性能配置上都有很大的进步,越来越多的蓝牙耳机开始注重音质表现,逐渐有HIFI音质、无损音质出现在大众视野。那么哪个牌子的蓝牙耳机音质好?接下来,我来给大家分享几款音质比…

【H2实践】之 SpringBoot 与 H2 数据交互

一、目标 本文是【H2实践】之认识 H2,【H2实践】之 SpringBoot 整合的后续。前文分别介绍了 H2 及其简单使用,并完成了 H2 与 SpringBoot 的整合。本文将紧接 【H2实践】之 SpringBoot 整合 探索实用 SpringBoot 结合 JPA 通过 web 接口操作 H2 数据库的…

Python数据分析案例22——财经新闻可信度分析(线性回归,主成分回归,随机森林回归)

本次案例还是适合人文社科领域,金融或者新闻专业。本科生做线性回归和主成分回归就够了,研究生还可以加随机森林回归,其方法足够人文社科领域的硕士毕业论文了。 案例背景 有八个自变量,[微博平台可信度,专业性,可信赖性,转发量,…

Java对象结构与内置锁

Java对象结构与内置锁 Java内置锁的很多重要信息都存放在对象结构中 1.Java对象结构 Java对象包括三部分:对象头、实例数据和对齐字节 对象头: 第一个字段叫做Mark Word,用于存储自身运行时数据,例如GC标志位,哈希…

P1120 小木棍(搜索+剪枝)

题目链接:P1120 小木棍 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 样例输入: 9 5 2 1 5 2 1 5 2 1 样例输出: 6 分析:这道题一看数据范围就知道是搜索,但关键是需要剪枝。 首先我们求出所有木棍的长度和&am…

什么是刺猬理念

一、什么是刺猬理念刺猬理念是指把复杂的世界简化成单个有组织性的观点,一条基本原则或一个基本理念,发挥统帅和指导作用。核心是把事情简单化,把所有的挑战和进退维谷的局面压缩为简单的。二、刺猬理念的寓言故事狐狸是一种狡猾的动物&#…

Maix Bit(K210)保姆级入门上手教程---自训练模型之云端训练

Maix Bit(K210)保姆级入门上手教程系列 Maix Bit(K210)保姆级入门上手教程—环境搭建 Maix Bit(K210)保姆级入门上手教程—外设基本使用 这是K210快速上手系列文章,主要内容是,介绍…

《机器学习》基础概念之【P问题】与【NP问题】

《机器学习》基础概念之【P问题】与【NP问题】 这里写目录标题《机器学习》基础概念之【P问题】与【NP问题】一、多项式&时间复杂度1.1. 多项式1.2.时间复杂度二、P问题 & NP问题2.1. P问题2.2.NP问题2.3.举例理解NP问题-TSP旅行商推销问题三、NP-hard问题&NP-C问题…

PMP项目管理项目成本管理

目录1 项目成本管理概述2 规划成本管理3 估算成本4 制定预算5 控制成本1 项目成本管理概述 项目成本管理包括为使项目在批准的预算内完成而对成本进行规划、估算、预测、融资、筹资、管理和控制的各个过程,从而确保项目在批准的预算内完工。核心概念 项目成本管理旨…

vuex getters的作用和使用(求平均年龄),以及辅助函数mapGetters

getters作用:派生状态数据mapGetters作用:映射getters中的数据使用:方法名自定义,系统自动注入参数:state,每一个方法中必须有return,其return的结果被该方法名所接收。在state中声明数据listst…