C++重学之路 1 计算机和C++简介

1.1 硬件和软件

计算机在一系列指令的控制下处理数据,这一系列的指令称为计算机程序。计算机上运行的程序称为软件

一台计算机由各种设备组成,如键盘、显示器、鼠标、硬盘、内存、DVD和处理单元等。这些设备总称为硬件

1.1.1 摩尔定律

每年或每两年,计算机的性能可以毫不费力地翻一番。这个显著的趋势通常被称为摩尔定律。

摩尔定律及相关的观点特别适用于预测计算机为运行程序而拥有的内存量可以长期保存程序和数据的辅助存储器(如磁盘存储器)的容量计算机处理器的速度——即计算机执行其程序的(也就是完成它们的工作)的速度等的增长趋势。类似的增长模式已出现在通信领域。

1.1.2 计算机的组成

若不考虑外表上的不同,其实计算机都可以被想象成由不同的逻辑单元(logical unit)或部分组成。

逻辑单元
输入单元(input unit)
输出单元(output unit)
内存单元(memory unit)
算术逻辑单元(arithmetic and logic unit,ALU)
中央处理器(central processing unit,CPU)
辅助存储单元(secondary storage unit)

1.2 数据的层次结构

计算机处理的数据项构成了一个数据层次结构。

在这里插入图片描述

层次描述
位(Bit)计算机中最小的数据项,可以假定是数值0或者数值1。这样的一个数据项称作1个位,是“二进制数字”(binary digit)的简称)。
字符(Character)我们称数字、字母、特殊符号为字符。计算机的字符集是用于编写程序和表示数据项的所有字符的集合。
字段(Field)正如字符是由位构成的一样,字段则是由字符或者字节组成的。
记录(Record)若干相关的字段可用于组成一个记录。
文件(File)一个文件是一组相关的记录。
数据库(Database)一个数据库是一个电子化的数据集合,对它的组织要便于访问和操作。

1.3 机器语言、汇编语言和高级语言

机器语言(Machine Language)

任何计算机都可以直接明白它自己的机器语言(也称作机器代码),其是由其硬件体系结构所定义的。机器语言一般有数字字符串组成(最终简化为由0和1组成的数字字符串)。

汇编语言(Assembly Language)

使用机器语言编程又慢又单调乏味,因此程序员开始采用类似于英语缩写的指令来表示操作。这些缩写构成了汇编语言的基础。另外,人们开发出了称为汇编器(assembler) 的翻译程序,它们将汇编语言程序转换成机器语言。

高级语言(High-level programming language)

为进一步加快编程速度,人们又开发了高级语言。其中的单条语句可以完成实质性的很多任务。高级语言的使用可以让程序员采用类似于日常用语并包括常用数学符号形式的指令来编写程序。高级语言的翻译程序称为编译器(compiler),能够将高级语言程序转换成机器语言。

将大型高级语言程序编译为机器语言的过程相当耗时。为此人们又开发了解释器(interpreter),它可以直接执行高级程序语言(没有编译的延迟),但这样的执行过程要比编译后的程序的运行慢很多。脚本语言(如流行的web语言JavaScript和PHP)就是由解释器来处理的。

Tips:

解释器在网络应用脚本编写方面远优于编译器。待解释的程序已下载到客户的机器,就可以开始执行,而不需要经过编译后才能执行。当然不利的一面是解释的脚本通常比编译的代码运行速度要慢。

1.4 C++

C++标准库

C++标准库(C++ Standard Library)提供了丰富而现成的类和函数。所以想要了解“C++世界”实际上要学习两方面的知识:一是学习C++语言本身;二是学习使用C++标准库所提供的各种类和函数

Tips:

  • 使用“构建块”方法来创建程序。避免重复工作,尽量使用现有的构件。这就是软件复用(software reuse),也是面向对象编程的核心思想。
  • 进行C++编程时常用到以下构建块:源自C++标准库中的类和函数、你和同事自己创建的类和函数、一些知名的第三方软件商提供的类和函数。
  • 因为每个C++实现方案中都包含了C++标准库函数和类,所以使用C++标准库函数和类而不是自己编写相应的版本,可以提高程序的可移植性

1.5 对象技术介绍

成员函数和类

成员函数拥有实际执行其任务的程序语句。它向用户隐藏了这些语句。

类包含了执行该类自己任务的成员函数集合。

实例化

在程序可以执行一个类的方法所定义的任务之前,由这个类创建一个对象。此构建对象的过程称作实例化(instantiation)。于是,一个对象也叫做它的类的一个实例。

重用

可以多次重用一个类去构建很多的对象。

消息和成员函数调用

可以向对象发送消息,每条消息都被实现为一次成员函数调用,告诉对象的成员函数去执行它的任务。

属性和数据成员

一个对象在程序中使用时,也具有伴随它的属性,这些属性被详细说明为对象的类的一部分。属性由类的数据成员来详细说明。

封装

类将属性和成员函数封装(encapsulate)(也就是打包)在对象中——一个对象的属性和成员函数是密切相关的。对象之间可以进行相互通信,但是通常不允许它们知道其他对象是怎么实现的——也就是说,实现的细节隐藏在对象自身中。

这种信息隐藏(information hiding)对良好的软件工程是至关重要的。

继承

我们可以通过继承(inheritance)快速和方便地创建一个新的对象类——该新的类吸收已有类的特性,有可能定制和添加它自己独特的特性。

面向对象设计和分析(OOAD)

理想情况下,在编写代码之前要履行一个详细的分析过程,并认真检查你的设计(或让其他专业人员检查)。如果此过程中分析和设计程序是从面向对象的角度来考虑的,则称为面向对象分析与设计(OOAD)。C++之类的语言是面向对象的,使用这样的语言编程称为面向对象编程(object-oriented programming,OOP),它可以让程序员将一个面向对象的设计实现为一个可工作的软件系统。

UML(统一建模语言)

统一建模语言(Unified Modeling Language,UML)是目前应用最广泛、用于面向对象系统建模的图形建模语言。

1.6 典型的C++程序开发环境

C++系统一般由程序开发环境语言C++标准库三个部分组成。

通常,C++程序要经历六个阶段,分别是编辑(edit)、预处理(preprocessing)、编译(compile)、链接(link)、载入(load)和执行(execute)。

第1阶段:编辑程序

第1阶段指用编辑器程序(通常简称为编辑器)编辑文件。

使用编辑器可以键入C++源代码,进行任何必要的修改,以及将程序保存到硬盘之类的辅助存储设备中。

C++源代码文件的名字常常以.cpp.cxx.cc 或者 .C 作为扩展名,这样表明了该文件包含C++源代码。

在这里插入图片描述

第2阶段:预处理程序

在第2阶段,程序员发出编译程序的命令。

在C++系统中,预处理器程序在编译器的翻译阶段开始前会自动执行。

C++预处理器执行一些被称为预处理器指令的命令,它们指示了在编译之前要先对程序进行的某些处理。这些处理通常是包含其他要编译文件的文本和实现各种文本替换。

在这里插入图片描述

第3阶段:编译C++程序

在第3阶段,编译器将C++程序翻译成机器语言代码——也就是目标代码。

在这里插入图片描述

第4阶段:链接

C++程序一般都包含了在别处定义的函数或数据的引用(如对标准库中定于的函数或数据的引用),由于缺少这些引用的定义,C++编译器产生的目标代码通常包含了“洞”。

链接器将目标代码和这些缺少的函数代码连接起来,形成可执行程序(其中不再含有缺失的部分)。

在这里插入图片描述

第5阶段:载入

在一个程序可以执行前,必须先将它放入内存中。这由载入器来完成。

载入器首先从磁盘里取得可执行程序,然后将其传输到内存。支持该程序的其他共享库组件在需要时载入器也会载入。

在这里插入图片描述

第6阶段:执行

最后,在中央处理器的控制下,计算机以每次一条指令的方式执行程序。一些现代计算机体系结构可以并行地执行多条指令。

在这里插入图片描述

Tips:

像0作为除数这样的错误在程序运行时才会发生,所以这类错误被称为==运行时错误(runtime errors)==或执行时错误(execution-time errors)。致命的运行时错误会导致程序还没顺利完成工作时就立即结束,非致命的则允许程序完成运行,但往往会产生不正确的结果。

1.7 操作系统

操作系统是软件系统,其提供的服务允许每个应用程序可以安全、有效且与其他应用程序并发地执行。

包含操作系统核心组件的软件称为内核(kernel)。

1.7.1 Windows——一个专有的操作系统

该操作系统在DOS操作系统之上构建了图形用户界面,而DOS是极受欢迎的个人计算机操作系统,但用户要通过输入命令与之交互。

迄今为止,Windows是世界上最广泛使用的桌面操作系统。

1.7.2 Linux——一个开源的操作系统

Linux内核是这个最受欢迎的开源、免费分发、功能齐全的操作系统的核心。Linux源代码供公众审查和修改,并且可免费地下载和安装。Linux已成为服务器和嵌入式系统上非常受欢迎的操作系统。

1.7.3 苹果公司的OS X和苹果公司iPhone、iPad、iPod Touch等设备的iOS

苹果公司的OS X操作系统是NeXTSTEP的后继。苹果公司专有的操作系统iOS来自于苹果公司的OS X操作系统。

1.7.4 谷歌公司的Android

Android是增长最快的移动和智能手机操作系统,它基于Linux内核和Java。开发Android应用程序的好处之一是平台的开放性,该操作系统是开源和免费的。

1.8 互联网和万维网

互联网——全球的计算机网络——通过计算和通信技术的融合才得以实现。

包交换

这项技术以一个个称为“数据包”(packet)的小数据包裹来发送数字数据。这些数据包包含地址、错误控制和顺序信息。地址信息允许数据包按照路线发送到它们的目的地。由于复杂的路由机制,数据包有可能没有按照顺序到达。这时,顺序信息可以帮助重新组装这些数据包,以原始的顺序到达接收者。为有效利用可用的带宽,来自不同发送者的数据包在相同的线路上混合传送。

与专用的通信线路的成本相比,包交换技术极大地减少了传输成本。

TCP/IP

TCP(Transmission Control Protocol):传输控制协议。确保消息可以从发送者正确地路由到接收者,并且在到达时完好无损。

IP(Internet Protocol):互联网协议。实现了使不同的网络进行通信,真正创造了一个网络的网络,也就是当前互联网的体系结构。

结合了上面两种协议的协议集合普遍地被称为TCP/IP。

万维网、HTML和HTTP

万维网(World Wide Web)允许大家在互联网上找到和查看几乎所有主题的基于多媒体的文档。

超文本标记语言(HTML,HyperText Markup Language),通过超链接的文本文档分享信息。

超文本传输协议(HTTP,HyperText Transfer Protocol)——一种用于在万维网发送信息的通信协议。

统一资源定位器(URL,Uniform Resource Locator),指定在浏览器窗口中显示的网页的地址(即位置)。每个互联网上的网页都和唯一的URL关联。

超文本传输协议的安全版(HTTPS,HyperText Transfer Protocol Secure),是万维网上传输加密数据的标准。

Web2.0

在2003年,在人们和商业实体如何使用网络和开发基于网络的应用方面出现了令人瞩目的变革。Web2.0这个术语被创造用以描述这种趋势。具有Web2.0特性的公司有Youtube(视频分享)、Facebook(社会网络)等。

Web2.0离不开用户——用户不仅要创造内容,同时用户也要帮助组织、分享、重新合成、评论、更新这些内容等等。Web2.0也是一种对话,使得每个人都有机会发表并且分享观点。

Web2.0包括一个参与的体系结构(architecture of participation),即一个鼓励用户交互和对网络社区做出贡献的设计。

1.9 软件开发的一些关键术语

术语
Ajax
敏捷软件开发
重构
设计模式
LAMP
软件即服务(SaaS)
平台即服务(PaaS)
软件开发工具包(SDK)
版本
Alpha
Beta
候选发布版
连续beta
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lum0s!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值