当前课程知识点:C++语言程序设计基础 > 第1章 绪论 > 计算机语言和程序设计方法的发展 > 计算机语言和程序设计方法的发展
计算机语言和程序设计方法
l由二进制代码构成
l计算机硬件可以识别
l可以表示简单的操作
l例如:加法、减法、数据移动等等
l将机器指令映射为助记符
n如ADD、SUB、mov等;
l抽象层次低,需要考虑机器细节。
l关键字、语句容易理解;
l有含义的数据命名和算式;
l抽象层次较高;
n例如,算式:a+b+c/d
l屏蔽了机器的细节;
例如,这样显示计算结果:cout<<a+b+c/d
l是高级语言
l支持面向对象的观点和方法
n将客观事物看做对象
n对象间通过消息传送进行沟通
n支持分类和抽象
l机器语言、汇编语言、高级语言都支持;
l最初的目的:用于数学计算;
l主要工作:设计求解问题的过程。
l大型复杂的软件难以用面向过程的方式编写
l由面向对象的高级语言支持;
l一个系统由对象构成;
l对象之间通过消息进行通信。
大家好
欢迎回来继续学习
C++语言程序设计
现在我们来了解一下计算机语言
和计算机程序设计方法的
发展历程
最初的计算机语言呢
就是机器语言
机器语言就是
由二进制指令构成的
计算机硬件可以识别的这些指令
那么用机器语言去写程序呢
最早的程序员是很辛苦的
我们想一下
一条机器语言它能做什么事情
那一点0和1构成的指令
只能指挥计算机
那你现在做加法你现在做减法
你现在把数据从一个地址
给我搬到另外一个地址去
也就只能给这些简单的指令
那设想一下
如果像用这样这么简单
这么初级的一些指令组合起来
做成像我们现在看到的
五花八门的特别好用的软件
我们本能的想象一下
这事是不是太难了的确
因为早期计算机的任务
主要就是做计算
那么直接用机器语言指令
写程序呢也还是可以的
但是毕竟机器语言指令
对于人的阅读来说太不方便了
那后来就出现了汇编语言
汇编语言它的抽象层次
并没有提高
每一条汇编语言指令
仍然也只是告诉你
现在做加法
现在接下来做减法
或者还有这种移动数据
从一个寄存器到另一个寄存器
从一个地址到另一个地址
或者跳转执行流程
都是这样一些简单的
跟机器语言它的抽象程度
是一样的很低
但是它加了注记符
比如说用ADD表示加法
这样程序员来书写来记忆
就比较方便了
也就行了这一点点方便
那么后来呢
为了方便程序员
就出现了什么呢高级语言
大家看到这个发展历程
当一项事物有哪些不足的时候
那么变革与发展就会发生
机器语言虽然可以用来
跟计算机交互给计算机发指令
但是不好阅读不好书写记忆
于是出现了汇编语言有注记符
有人就想办法做这件事情了
那么汇编语言的抽象层次
仍然太低了
那么自然会有人发明高级语言
高级语言呢
就引入了类似于英语单词
或者单词缩写的这样的关键字
可以写成类似于英语语句
这样的语句
还可以把我们数学的式子直接
比如说加减乘除
这种式子直接写到程序中去
这个对于程序员来说就方便多了
那不仅是书写的方便了
而且它的语言的抽象层次提高了
举一个特别简单的例子
我可以写A+B+C+D+E
+很多还有括号还有乘除
一个复杂表达式
我用一行式子
就像我在数学里面写一样
就写进去了
那你说这个是不是
好多步骤我就一下写了
如果你用机器语言写呢
你得说先加什么再减什么
加完了减完的结果放在哪去
再把哪儿的东西拿出来
再做加法再做减法
就这么一个复杂表达式
你要写好多的指令
那么那个抽象层次就比较低
所以高级语言的抽象层次
就高了一些
而且高级语言还有什么好处
它屏蔽了机器的底层的细节
举一个简单的例子
我们经常看到一些运行的结果
在屏幕上显示出来了
运行结果是3 这个运行结果是8
我看到了很好
这件事情貌似很简单
但是如果你用机器语言指令
去写程序的话
它是很麻烦的
你要把信息去送到显示器端口
你要知道显示器端口的地址
等等等等这些事情
而用高级语言写程序呢
我只要用一种方式
约定的这种关键字
用约定的这种语句
去告诉计算机
你替我把什么信息
按什么格式送到显示器去
这就完成了
所以它的抽象层次就比较高一些
那么我们要学习的C++语言
是面向对象的程序设计语言
它也是一种高级语言
那么高级语言
为什么我们又特殊提出
它是面向对象的高级语言呢
因为它有一种特别接近我们人类
自然思维的这种思维方式
就是什么呢
把客观现实中的事物
都看作是对象
比如说我这个老师是个对象
我现在站在你面前
我在给你讲课
那我这个对象有什么
有我的属性有我的行为能力
属性是什么呢
我有姓名我有工作证号
我有身份证号我有电话号码
我有民族我有籍贯
这些都是我个人的属性
生物学属性
它包括身高体重年龄
这些都是
然后我有我的行为能力
比如生物学的行为能力
我会吃饭我会穿衣我会说话
比如说植物行为
我会站在这儿
在你面前给你讲课
这些都是一个自然界的对象
所具有的属性
那么在自然界中
对象与对象之间怎么沟通呢
比如说咱俩的沟通
现在我在对着你说话
那么用语言这种信息
消息传送
用消息传送的方式
一会你在网上留个言我看见了
那么也是消息传送的方式来沟通
程序中也可以这样
所谓面向对象的语言
就是支持这样的观点
支持程序员用这样的观点
这样的思想方法来写程序
这个就方便了很多
以前不是面向对象的语言呢
就做不到这一点
所以这是面向对象语言的特点
它把客观事物可以看作对象
在程序中也有对应的对象模型
然后还有一种分类与抽象的观点
支持把同类型对象进行分类
分为一类
那么这个呢在我们今后的学习中
大家都会体会到
接下来呢
我们再看看这个程序设计方法
它的发展历程
其实计算机语言的发展历程
跟程序设计方法的发展历程
它是同步的相辅相成的
比如说早期的
不管是机器语言汇编语言
还是早期的高级语言
它们支持的都是面向过程的
程序设计方法
什么是面向过程的
程序设计方法呢
简单的理解就是说
我们用这样的语言
用这样的方法
跟计算机沟通的时候
就是要告诉它
你要替我计算什么
解决什么问题
解决这个问题的步骤是什么
一步一步的步骤是什么
把这个解决问题的过程写清楚
当然这个过程不是说
必须是顺序
它可以有跳转
可以有选择分支可以有循环
我们后面都可以学
但是呢
必须是按照既定好的过程
来解决问题
那么你把既定好的过程
用这样面向过程的程序设计方法
写成程序给了计算机以后
计算机也就按你规定好的过程
来帮你执行计算
这个如果只是做数值计算
做科学计算这个没有问题
挺好用的了
但是我们想想
如果是做大型复杂的软件
那么它问题就有了
我们用过很多好玩的软件
比如说大家喜欢玩游戏
哪个游戏告诉你
进来不能乱动
你必须先点哪个按钮
再点哪个菜单
再填哪个对话框再做哪件事情
你必须按照程序走
你错一点步骤都不行
这样的游戏还有玩头吗
它没有悬念了
那么我们的游戏场景
模拟的是什么
模拟的都是真实的社会现象
你有角色你有道具
你有各种的武功行为等等
然后很多很多不确定因素在里面
那么那些对象
比如说敌方对象我方对象
互相的交火也好打斗也好
追逐或者说去藏起来找
各种的买卖各种行为的交互
都是模拟的现实社会
它没有规定必须的操作步骤
那么那些对象在那儿
你怎么用面向过程的程序
去模仿呢不是说不可以
是可以的
但是那个程序写着就很难
那么面向对象的程序设计方法呢
它要有面向对象的语言来支持
面向对象的语言
既然支持我们把客观事物
看成一个个的对象
那么面向对象的程序设计方法
它就可以用这样的方式
来构建一个复杂系统
在一个复杂系统里面
就像我们一个复杂的社会一样
一个一个对象存在于这个系统中
每一个对象
都有自己的属性和行为
各司其职
那么对象与对象之间
通过消息进行通讯协同配合
去形成一个有机的
互相配合的这么一个系统
那么这样的情况反映在程序里面
那么就是一个面向对象的程序
就用面向对象的思维方法
写的程序
那面向对象的方法呢
它可以使程序员能够用
我们人类几千年已经形成的这种
面向对象的习惯思维方法
它离人类的自然思维那就更近了
这也是我们这门课
主要要学习的内容
今天这一讲呢
我给大家简单地介绍了一下
计算机语言
和计算机程序设计方法
它的发展
还有各种不同级别的语言
不同的面向过程
面向对象的程序设计方法
它的差别
其实C++语言还支持一种
叫做泛型程序设计方法
在这门课中
我们也会做简单介绍的
希望大家对这些
有一个简单了解以后
会能够愿意继续去学习
我们到底怎么样用
面向对象的设计方法去写程序
-导学
--第1章导学
-计算机系统简介
--计算机系统简介
--计算机系统简介 测试题
-计算机语言和程序设计方法的发展
--计算机语言和程序设计方法的发展 测试题
-面向对象的基本概念
--面向对象的基本概念 测试题
-程序的开发过程
--程序的开发过程
--程序的开发过程 测试题
-信息的表示和储存
--计算机的数字系统
--数据的编码表示
--信息的表示和储存 测试题
-实验指导
-导学
--第二章导学
-C++语言概述
--C++语言概述 测试题
-基本数据类型、常量、变量
--程序举例
--基本数据类型、常量、变量 测试题
-运算与表达式
--运算与表达式 测试题
-实验二:简单程序设计(上)
-数据的输入和输出
--数据的输入和输出
--数据的输入和输出 测试题
-选择结构
--if语句
--switch语句
--选择结构 测试题
-循环结构
--for语句
--循环结构 测试题
-自定义类型
--自定义类型
--自定义类型
-第2章小结
--第二章小结
-实验二:C++简单程序设计(下)
-导学
--导学
-函数定义
--函数定义
--函数定义 测试题
-函数调用
--例3-2
--例3-3
--例3-4
--例3-5
--例3-6
--函数调用 测试题
-嵌套与递归
--例3-9
--例3-10
--嵌套与递归 测试题
-函数的参数传递
--函数的参数传递
--函数的参数传递 测试题
-引用类型
--引用类型 测试题
-含有可变参数的函数
--含有可变参数的函数 测试题
-内联函数
--内联函数 测试题
-constexpr函数
--CONSTEXPR函数课后习题
-带默认参数值的函数
--带默认参数值的函数 测试题
-函数重载
--函数重载 测试题
-C++系统函数
--C++系统函数习题
-第3章小结
--第三章小结
-实验三(上)函数的应用
-实验三(下)函数的应用
-导学
--导学
-面向对象程序的基本特点
--面向对象程序的基本特点 测试题
-类和对象
--类和对象的定义
--类和对象 测试题
-构造函数
--构造函数基本概念
--委托构造函数
--复制构造函数
--构造函数 测试题
-析构函数
--析构函数
--析构函数 测试题
-类的组合
--类的组合
--类的组合程序举例
--前向引用声明
--类的组合 测试题
-UML简介
--UML简介
--UML简介课后习题
-结构体与联合体
--结构体与联合体 测试题
-枚举类
--枚举类
--枚举类 测试题
-第4章小结
--第四章小结
-实验四(上)
--实验四(上)
-实验四(下)
--实验四(下)
-导学
--导学
-标识符的作用域与可见性
--标识符的作用域与可见性 测试题
-对象的生存期
--对象的生存期
--对象的生存期 测试题
-类的静态成员
--类的静态成员 测试题
-类的友元
--类的友元 测试题
-共享数据的保护
--共享数据的保护 测试题
-多文件结构和预编译命令
--多文件结构和预编译命令 测试题
-第5章小结
--小结
-实验五
--实验五
-导学
--导学
-数组的定义与初始化
--数组的定义与使用
--一维数组应用举例
--数组的定义与初始化 测试题
-数组作为函数的参数
--数组作为函数的参数 测试题
-对象数组
--对象数组
--对象数组 测试题
-基于范围的for循环
-指针的定义和运算
--指针的定义和运算 测试题
-综合实例
--综合实例
-实验六(上)
--实验六上
-指针与数组
--指针数组
--指针与数组 测试题
-指针与函数
--指针类型的函数
--指向函数的指针
--指针与函数 测试题
-对象指针
--对象指针
--对象指针 测试题
-动态内存分配
--动态内存分配 测试题
-智能指针
--智能指针
-vector对象
--vector对象
--vector对象 测试题
-对象复制与移动
--移动构造
--对象复制与移动 测试题
-字符串
--C风格字符串
--string类
--字符串 测试题
-第6章小结
--第六章小结
-综合实例
--综合实例
-实验六(下)
--实验六(下)