12.12计算机导论课后总结

5.计算机中的数据

5.1数据

数据就是用文字、数字、图形、图像、声音等方式对人、事件、事物等进行的描述。在计算机科学中,数据是指所有能输入计算机并能被计算机程序处理的符号的总称,数字、文本、音频、图像、和视频等统称为数据。
计算机常用的编码方式
1.ASCⅡ
12.12计算机导论课后总结
2.扩展ASCⅡ
12.12计算机导论课后总结
3.Unicode
12.12计算机导论课后总结
4.UTF-8
12.12计算机导论课后总结

5.2数据结构

数据结构
   数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或者多种特定关系的数据元素集合。通常情况下,精心选择的数据结构可以带来更高效的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
   数据结构是ADT(抽象数据类型)的物理实现。
   程序 = 数据结构 + 算法
   算法是为了解决问题而设计的,数据结构是算法需要处理问题的载体。
   1.顺序表:顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。
   将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构。
   2.链表:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
   使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换。链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。链表有很多种不同的类型:单向链表,双向链表以及循环链表。链表可以在多种编程语言中实现。像Lisp和Scheme这样的语言的内建数据类型中就包含了链表的存取和操作。程序语言或面向对象语言,如C,C++和Java依靠易变工具来生成链表。
   3.栈:栈是限定仅在表头进行插入和删除操作的线性表。要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质。"栈“者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。 
   首先系统或者数据结构栈中数据内容的读取与插入(压入push和 弹出pop)是两回事!插入是增加数据,弹出是删除数据 ,这些操作只能从栈顶即最低地址作为约束的接口界面入手操作 ,但读取栈中的数据是随便的没有接口约束之说。很多人都误解这个理念从而对栈产生困惑。 [1] 而系统栈在计算机体系结构中又起到一个跨部件交互的媒介区域的作用 即 cpu 与内存的交流通道 ,cpu只从系统给我们自己编写的应用程序所规定的栈入口线性地读取执行指令, 用一个形象的词来形容它就是pipeline(管道线、流水线)。cpu内部交互具体参见 EU与BIU的概念介绍。  
   栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
   栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。栈可以用来在函数调用的时候存储断点,做递归时要用到栈!

5.3算法

算法是一切程序设计的灵魂和基础。
很多开发者都知道“程序=数据结构+算法”这个著名的公式,简单点来说,我更喜欢表单成为“后台程序=数据+逻辑”。

1 什么是算法?
字面含义:
算法是用于计算的方法,通过这种方法可以达到预期的计算结果。
其它专家说:
算法是解决实际问题的一种精确描述方法、算法是对特定问题的求解步骤的一种精确描述方法。
广泛定义:
算法是模型分析的一组可行的、确定的和有穷的规则。
通俗的讲:
算法可以理解为一个完整的解题步骤,由一些基本运算和规定的运算顺序构成。

再简单的讲:
算法:解决问题 的方法。

特点:有穷性 确切性 输入 输出 可行性
2 算法分类
2.1 按照应用来分类
基本算法、数据结构算法、几何算法、图论算法、规划算法、数值分析算法、加密算法、排序算法、查找算法
2.2 按照确定性
确定性算法、非确定性算法
2.3 算法的思路来划分
递推算法、递归算法、穷举算法、贪婪算法、分治算法、等

5.4数据库

数据库(Database,DB)是存储在计算机内、有组织、可共享的数据和数据对象(如表、视图、存储过程和触发器等)的集合。这种集合按一定的数据模型(或结构)组织、描述并长期存储,同时能够以安全可靠的方法进行数据的检索和存储。
  简单地说,数据库就是电子化的文件柜——存储电子文件的处所。如通讯录是一个小型的数据库,图书馆则是相对较大的数据库了。小数据库尚可手工管理,而大型数据库就得由计算机进行管理了。
  数据库有以下两个特点
  (1) 集成性。将某特定应用环境中的各种应用相关的数据及数据间的联系全部集中并按照一定的结构形式进行存储。或者说,可以把数据库看成是若干个性质不同的数据文件的联合和统一的数据整体。
  (2) 共享性。数据库中的数据可为多个不同的用户所共享,即不同的用户可以使用多种不同的语言,为了不同的应用目的而同时存取数据库,甚至可以同时存取数据库中的同一数据。

1. 数据与信息
  (1) 信息
  信息是人类主观对客观现实事物存在方式、状态以及事物间联系的抽象。信息是客观存在的,人类有意识地对信息进行采集加工、传递,从而形成了各种消息、情报、指令、数据及信号等。例如,对于某学生的基本情况来说,其学号是S1,姓名是luffy,性别是男,年龄是17岁,所在系别是航海系等,这些都是关于该同学的具体信息,是该学生当前存在状态的反映。
  信息是可存储的,人类使用大脑存储信息。而计算机存储器、录音、录像等技术的发展,进一步扩大信息存储的范围。人们还可以借助计算机对收集到的信息进行整理。
  (2) 数据
  数据是记录信息的可识别的符号组合,是信息的具体表现形式。如上面提到学生的信息可用一组数据“S1、luffy、男、17、航海系”表示。这组数据能被人们理解是因为这些符号已经被赋予了特定的语义,对于数据(luffy,航海系),如果不了解其语义,就有可能解释为“luffy的果实能力是航海系的”。具有特定的语义,数据才能够传递信息。也就是说,数据和它的语义是不可分割的。
  
  由上可知,信息和数据之间存在着固有的联系:数据是信息的符号表示或载体,信息是数据的意义,是对数据的解释。数据被赋予了特定的语义,才具有了传递信息的功能。

2. 数据处理与数据管理
  数据处理是将数据转换为信息的过程,包括数据的收集、管理、加工利用乃至信息输出的演变计算等一系列活动。
  在数据处理过程中,通常计算对计算机来讲是比较简单的,但是数据管理就比较复杂了。数据管理包括数据的收集、分类、组织、编码、存储、维护、检索和传输等许多操作,这些操作是数据处理业务的基本环节。可以说,数据处理的核心问题就是数据管理。

一个通用、高效而又方便的管理方法将会大大提高数据处理的效率。至此,数据库技术就诞生了。数据库技术正是为了有效管理数据,提高数据处理的效率而发展并完善起来的专门技术。

4.程序设计语言

4.1程序设计语言简介

程序设计语言(Programming Language),是一组用来定义计算机程序的语法规则。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。
程序设计语言具有心理工程及技术等特性。

(1)心理特性:歧义性、简洁性、局部性、顺序性、传统性。

(2)工程特性:可移植性,开发工具的可利用性,软件的可重用性、可维护性。

(3)技术特性:支持结构化构造的语言有利于减少程序环路的复杂性,使程序易测试、易维护。

4.2程序设计语言的分类和设计方式

4.2.1机器语言

机器语言是机器能直接识别的程序语言或指令代码,勿需经过翻译,每一操作码在计算机内部都有相应的电路来完成它,或指不经翻译即可为机器直接理解和接受的程序语言或指令代码。机器语言使用绝对地址和绝对操作码。不同的计算机都有各自的机器语言,即指令系统。从使用的角度看,机器语言是最低级的语言
机器语言的应用
一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。各计算机公司设计生产的计算机,其指令的数量与功能、指令格式、寻址方式、数据格式是差别的。从计算机的发展过程可以看到,由于构成计算机的基本硬件发展迅速,计算机的更新换代很快,这就存在软件如何跟上硬件的问题。一台新机器推出交付使用时,只有少量系统软件(如操作系统等)可提交用户,大量软件是不断充实的,尤其是应用程序,有相当一部分是用户在使用机器时不断产生的。为了缓解新机器的推出致使原有应用程序不能继续使用的问题,各个计算机公司生产的同一系列的计算机时,尽管其硬件实现方法可以不同,但指令系统、数据格式、I/O系统等保持相同,因而软件完全兼容。当研制该系列计算机的新型号时,尽管指令系统可以有较大的扩充,但仍保留了原来的全部指令,使软件向上兼容,即旧机型上的软件不加修改即可在新机器上运行。
说到这里大家明白为什么电脑即计算机,计算机即电脑了吧,原来无论它表现得多么地智能,其实质也不过是这些二进制代码运算的结果。但是二进制代码使用起来太费劲了,于是后来就在其基础上发展出的汇编语言,但是汇编依然看起来不直观,于是最终就出现了现代编程所采用的高级语言。这是计算机编程语言的发展。有了编程语言,按说就可以使这些机器为我所用了。实际还没那么简单。首先每做一件事,都要重复编一大堆的操作程序,工作量很大。其次,咱们都看到了,使用计算机的人,大多数,都不是计算机专业的,甭说编程了,操作步骤复杂一点都要抵制。所以,还需要一个操作系统,将复杂的操作留给自己,把简单的操作,呈现给用户。
机器语言程序兼容。机器语言就是用硬件实现的机器指令。实现用机器语言编写的程序兼容对计算机体系结构有非常苛刻的要求,需要实现兼容的两台计算机的体系结构和操作系统的用户程序接口等应完全相同;即使略有不同,也可用软件模拟或硬件仿真实现兼容。但这些方法将使用户程序的运算速度明显降低。
主要缺点
总况 
1.大量繁杂琐碎的细节牵制着程序员,使他们不可能有更多的时间和精力去从事创造性的劳动,执行对他们来说更为重要的任务。如确保程序的正确性、高效性。
2.程序员既要驾驭程序设计的全局又要深入每一个局部直到实现的细节,即使智力超群的程序员也常常会顾此失彼,屡出差错,因而所编出的程序可靠性差,且开发周期长。
3.由于用机器语言进行程序设计的思维和表达方式与人们的习惯大相径庭,只有经过较长时间职业训练的程序员才能胜任,使得程序设计曲高和寡。
4.因为它的书面形式全是"密"码,所以可读性差,不便于交流与合作。
5.因为它严重地依赖于具体的计算机,所以可移植性差,重用性差。
弱通用性
各计算机公司设计生产的计算机,其指令的数量与功能、指令格式、寻址方式、数据格式都有差别,即使是一些常用的基本指令,如算术逻辑运算指令、转移指令等也是各不相同的。因此,尽管各种型号计算机的高级语言基本相同,但将高级语言程序编译成机器语言后,其差别也是很大的。因此将用机器语言表示的程序移植到其他机器上去几乎是不可能的。从计算机的发展过程已经看到,由于构成计算机的基本硬件发展迅速,计算机的更新换代是很快的,这就存在软件如何跟上的问题。大家知道,一台新机器推出交付使用时,仅有少量系统软件(如操作系统等)可提交用户,大量软件是不断充实的,尤其是应用程序,有相当一部分是用户在使用机器时不断产生的,这就是所谓第三方提供的软件。
为了缓解新机器的推出与原有应用程序的继续使用之间的矛盾,1964年在设计IBM360计算机时所采用的系列机思想较好地解决了这一问题。从此以后,每个计算机公司生产的同一系列的计算机尽管其硬件实现方法可以不同,但指令系统、数据格式、I/O系统等保持相同,因而软件完全兼容(在此基础上,产生了兼容机)。当研制该系列计算机的新型号或高档产品时,尽管指令系统可以有较大的扩充,但仍保留了原来的全部指令,保持软件向上兼容的特点,即低档机或旧机型上的软件不加修改即可在比它高档的新机器上运行,以保护用户在软件上的投资。

4.2.2汇编语言

汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
语言特点
汇编语言是计算机提供给用户的最快最有效的语言,也是能够利用计算机的所有硬件特性并能够直接控制硬件的唯-语言。但是由于编写和调试汇编语言程序要比高级语言复杂,因此目前其应用不如高级语言广泛。
汇编语言比机器语言的可读性要好,但跟高级语言比较而言,可读性还是较差。不过采用它编写的程序具有存储空间占用少、执行速度快的特点,这些是高级语言所无法取代的。在实际应用中,是否使用汇编语言,取决于具体应用要求、软件开发时间和质量等方面作权衡。
优点
汇编语言作为机器语言之上的第二代编程语言,它也有很多优点:
1)可以轻松的读取存储器状态以及硬件I/O接口情况
2)编写的代码因为少了很多编译的环节,可以能够准备的被执行
3)作为一种低级语言,可扩展性很高
缺点
1)因为代码非常单调,特殊指令字符很少,所以造成了代码的冗长以及编写的困难
2)因为汇编仍然需要自己去调用存储器存储数据,很容易出现BUG,而且调试起来也不容易
3)就算完成了一个程序,后期维护时候也需要耗费大量的时间。
4)因为机器的特殊性造成了代码兼容性差的缺陷。

4.2.3高级语言

高级语言(High-level programming language)相对于机器语言(machine language)是一种指令集的体系。在这种语言下,其语法和结构更类似汉字或者普通英文,且由于远离对硬件的直接操作,使得一般人更容易学习。高级语言通常按其基本类型、代系、实现方式、应用范围等分类。
分类编辑
命令式语言。这种语言的语义基础是模拟“数据存储/数据操作”的图灵机可计算模型,十分符合现代计算机体系结构的自然实现方式。其中产生操作的主要途径是依赖语句或命令产生的副作用。现代流行的大多数语言都是这一类型,比如 Fortran、Pascal、Cobol、C、C++、Basic、Ada、Java、C# 等,各种脚本语言也被看作是此种类型。
函数式语言。这种语言的语义基础是基于数学函数概念的值映射的λ算子可计算模型。这种语言非常适合于进行人工智能等工作的计算。典型的函数式语言如 Lisp、Haskell、ML、Scheme 、F#等。
逻辑式语言。这种语言的语义基础是基于一组已知规则的形式逻辑系统。这种语言主要用在专家系统的实现中。最著名的逻辑式语言是 Prolog。
面向对象语言。现代语言中的大多数都提供面向对象的支持,但有些语言是直接建立在面向对象基本模型上的,语言的语法形式的语义就是基本对象操作。主要的纯面向对象语言是 Smalltalk

4.2.4编程模式

主要分为两类:
1.过程式编程模式
2.面向对象编程模式

4.3高级汇编语言介绍

4.3.1BASIC语言

1)构成简单。 BASIC语言的最基本语句只有17种,而且它们都是常见的英文单词或其变形,如READ、END等,很容易学习和掌握。
(2)是一种“人机会话”式的语言。通过键盘操作,用BASIC语言编写完的程序,可以在计算机上边编写、边修改、边运行。而且还可以在运行中向人们提示信息的指出错误,要求人去改正,即实现了人和机器的对话。
(3)功能较全、适用面广。BASIC语言除了能进行科学计算和数据处理外,还能进行字符处理、图形处理、音乐演奏等。因此BASIC语言不仅适用于科学计算,也适用于事务管理、计算机辅助教学和游戏编程等方面。
(4)执行方式灵活。BASIC语言提供两种执行方式,分别是程序执行方式和命令执行方式。程序执行方式把BASIC语言编写成一个完整的程序送入计算机执行;命令执行方式不编写程序,直接从键盘输入某些命令(称键盘命令),计算机能立即执行这些命令。
BASIC语言采用的是解释器,就是逐句翻译成机器语言程序,译出一句就立即执行,即边翻译边执行.与编译器比起来,解释器费时比编译器更多,但可少占计算机的内存 。
使用BASIC语言的微型机有APPLE机和TRS-80机等.它们的使用方法有些不同。
下面举一个BASIC语言编的程序。
10 LET X=2
20 LET Y=SIN(X)
30 PRINT Y
RUN
0.034899496

4.3.2PASCAL语言

特点
丰富的数据结构和构造数据结构的方法。除了整型、实型、布尔型和数组外,还提供了字符、枚举、子域、记录、集合、文件、指针等类型。由这些数据结构可以方便地描述各种事务元。
简明灵活的控制结构。具体的结构语句有复合语句、如果语句、情况语句、While 语句、Repeat
语句、For 语句和处理记录变量的分量的缩写形式———With 语句。
它可称为第一个结构化程序设计语言。
编译运行效率高。
有利于书写程序设计语言的编译程序。
严格的结构化形式。
查错能力强。
Pascal强调的结构化编程带来了非结构化语言如Fortran之流无法比拟的美和乐趣,Unix崇尚的“小即是美”、“没有消息就是好消息”。
正因为上述特点,Pascal语言可以被方便地用于描述各种算法与数据结构。尤其是对于程序设计的初学者,Pascal语言有益于培养良好的程序设计风格和习惯。
IOI(国际信息学奥林匹克竞赛)把Pascal语言作为三种程序设计语言之一,NOI(全国奥林匹克信息学竞赛)把Pascal语言和c语言、c++语言作为竞赛使用程序设计语言,在大学中Pascal语言也常常被用作学习数据结构与算法的教学语言。
高级语言发展过程中,PASCAL是一个重要的里程碑。1971年,瑞士联邦技术学院尼克劳斯·沃尔斯(N.Wirth)教授发明了另一种简单明晰的电脑语言,这就是以电脑先驱帕斯卡的名字命名的PASCAL语言。PASCAL语言语法严谨,编程语言。沃尔斯一生还写作了大量有关程序设计、算法和数据结构的著作,因此,他获得了1984年度“图灵奖”。
缺点
传统PASCAL的标准库中缺乏对网络编程的支持,并且仅通过自带的graph单元难以实现较好的图形界面(GUI),这些缺点大多需要嵌入汇编语言代码才能得到解决,缺乏与机器语言的接口。
另一方面,作为一个面向过程的编程语言,和90年代兴起的面向对象的语言相比,不利于大型软件的开发。
尽管Pascal非常流行(然而在八十到九十年代时比21世纪更加流行),依据维尔特的对这种语言的定义来构建Pascal,使它不适合在非教学的场合使用,这遭到了广泛的批评。 推广了C语言的Brian Kernighan早在1981年就在他的论文《Why Pascal Is Not My Favourite Programming Language》对Pascal提出了严厉的抨击

4.3.3C语言

主要特点
C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且c语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。通过对C语言进行研究分析,总结出其主要特点如下:
(1)简洁的语言
C语言包含的各种控制语句仅有9种,关键字也只有32 个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。
(2)具有结构化的控制语句
C语言是一种结构化的语言,提供的控制语句具有结构化特征,如for语句、if⋯else语句和switch语句等。可以用于实现函数的逻辑控制,方便面向过程的程序设计。
(3)丰富的数据类型
C语言包含的数据类型广泛,不仅包含有传统的字符型、整型、浮点型、数组类型等数据类型,还具有其他编程语言所不具备的数据类型,其中以指针类型数据使用最为灵活,可以通过编程对各种数据结构进行计算。
(4)丰富的运算符
C语言包含34个运算符,它将赋值、括号等均视作运算符来操作,使C程序的表达式类型和运算符类型均非常丰富。
(5)可对物理地址进行直接操作
C语言允许对硬件内存地址进行直接读写,以此可以实现汇编语言的主要功能,并可直接操作硬件。C语言不但具备高级语言所具有的良好特性,又包含了许多低级语言的优势,故在系统软件编程领域有着广泛的应用。
(6)代码具有较好的可移植性
C语言是面向过程的编程语言,用户只需要关注所被解决问题的本身,而不需要花费过多的精力去了解相关硬件,且针对不同的硬件环境,在用C语言实现相同功能时的代码基本一致,不需或仅需进行少量改动便可完成移植,这就意味着,对于一台计算机编写的C程序可以在另一台计算机上轻松地运行,从而极大的减少了程序移植的工作强度。
(7)可生成高质量、目标代码执行效率高的程序
与其他高级语言相比,C语言可以生成高质量和高效率的目标代码,故通常应用于对代码质量和执行效率要求较高的嵌入式系统程序的编写。
特有特点
C语言是普适性最强的一种计算机程序编辑语言,它不仅可以发挥出高级编程语言的功用,还具有汇编语言的优点,因此相对于其它编程语言,它具有自己独特的特点。具体体现在以下三个方面:
其一,广泛性。C 语言的运算范围的大小直接决定了其优劣性。C 语言中包含了34种运算符,因此运算范围要超出许多其它语言,此外其运算结果的表达形式也十分丰富。此外,C 语言包含了字符型、指针型等多种数据结构形式,因此,更为庞大的数据结构运算它也可以应付。
其二,简洁性。9 类控制语句和32个KEYWORDS是C语言所具有的基础特性,使得其在计算机应用程序编写中具有广泛的适用性,不仅可以适用广大编程人员的操作,提高其工作效率,同 时还能够支持高级编程,避免了语言切换的繁琐。
其三,结构完善。C语言是一种结构化语言,它可以通过组建模块单位的形式实现模块化的应用程序,在系统描述方面具有显著优势,同时这一特性也使得它能够适应多种不同的编程要求,且执行效率高。
缺点

  1. C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。
  2. C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。也就是说,对用C语言的人,要求对程序设计更熟练一些。

4.3.4C++语言

语言特点编辑
支持数据封装和数据隐藏
在C++中,类是支持数据封装的工具,对象则是数据封装的实现。C++通过建立用户定义类支持数据封装和数据隐藏。
在面向对象的程序设计中,将数据和对该数据进行合法操作的函数封装在一起作为一个类的定义。对象被说明为具有一个给定类的变量。每个给定类的对象包含这个类所规定的若干私有成员、公有成员及保护成员。完好定义的类一旦建立,就可看成完全封装的实体,可以作为一个整体单元使用。类的实际内部工作隐藏起来,使用完好定义的类的用户不需要知道类是如何工作的,只要知道如何使用它即可。
支持继承和重用
在C++现有类的基础上可以声明新类型,这就是继承和重用的思想。通过继承和重用可以更有效地组织程序结构,明确类间关系,并且充分利用已有的类来完成更复杂、深入的开发。新定义的类为子类,成为派生类。它可以从父类那里继承所有非私有的属性和方法,作为自己的成员。
支持多态性
采用多态性为每个类指定表现行为。多态性形成由父类和它们的子类组成的一个树型结构。在这个树中的每个子类可以接收一个或多个具有相同名字的消息。当一个消息被这个树中一个类的一个对象接收时,这个对象动态地决定给予子类对象的消息的某种用法。多态性的这一特性允许使用高级抽象。
继承性和多态性的组合,可以轻易地生成一系列虽然类似但独一无二的对象。由于继承性,这些对象共享许多相似的特征。由于多态性,一个对象可有独特的表现方式,而另一个对象有另一种表现方式。

4.3.5Java语言

1.简单性
Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。
2.面向对象
Java是一个面向对象的语言。对程序员来说,这意味着要注意应中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。
Java还包括一个类的扩展集合,分别组成各种程序包(Package),用户可以在自己的程序中使用。例如,Java提*生图形用户接口部件的类(java.awt包),这里awt是抽象窗口工具集(abstract windowing toolkit)的缩写,处理输入输出的类(java.io包)和支持网络功能的类(java.net包)。
3.分布性
Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。
网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运行。
4.编译和解释性
Java编译程序生成字节码(byte-code),而不是通常的机器码。Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地传送程序到多个平台。Java程序可以在任何实现了Java解释程序和运行系统(run-time system)的系统上运行。
在一个解释性的环境中,程序开发的标准“链接”阶段大大消失了。如果说Java还有一个链接阶段,它只是把新类装进环境的过程,它是增量式的、轻量级的过程。因此,Java支持快速原型和容易试验,它将导致快速程序开发。这是一个与传统的、耗时的“编译、链接和测试”形成鲜明对比的精巧的开发过程。
5.稳健性
Java
Java
Java原来是用作编写消费类家用电子产品软件的语言,所以它是被设计成写高可靠和稳健软件的。Java消除了某些编程错误,使得用它写可靠软件相当容易。
Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。
可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的可能性。类似地,Java自动的“无用单元收集”预防存储漏泄和其它有关动态存储分配和解除分配的有害错误。Java解释程序也执行许多运行时的检查,诸如验证所有数组和串访问是否在界限之内。
异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务。
6.安全性
Java的存储分配模型是它防御恶意代码的主要方法之一。Java没有指针,所以程序员不能得到隐蔽起来的内幕和伪造指针去指向存储器。更重要的是,Java编译程序不处理存储安排决策,所以程序员不能通过查看声明去猜测类的实际存储安排。编译的Java代码中的存储引用在运行时由Java解释程序决定实际存储地址。
Java运行系统使用字节码验证过程来保证装载到网络上的代码不违背任何Java语言限制。这个安全机制部分包括类如何从网上装载。例如,装载的类是放在分开的名字空间而不是局部类,预防恶意的小应用程序用它自己的版本来代替标准Java类。
7.可移植性
Java使得语言声明不依赖于实现的方面。例如,Java显式说明每个基本数据类型的大小和它的运算行为(这些数据类型由Java语法描述)。
Java环境本身对新的硬件平台和操作系统是可移植的。Java编译程序也用Java编写,而Java运行系统用ANSIC语言编写。
8.高性能
Java是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了“及时”编译程序,它能在运行时把Java字节码翻译成特定CPU(*处理器)的机器代码,也就是实现全编译了。
Java字节码格式设计时考虑到这些“及时”编译程序的需要,所以生成机器代码的过程相当简单,它能产生相当好的代码。
9.多线索性
Java是多线索语言,它提供支持多线索的执行(也称为轻便过程),能处理不同任务,使具有线索的程序设计很容易。Java的lang包提供一个Thread类,它支持开始线索、运行线索、停止线索和检查线索状态的方法。
Java的线索支持也包括一组同步原语。这些原语是基于监督程序和条件变量风范,由C.A.R.Haore开发的广泛使用的同步化方案。用关键词synchronized,程序员可以说明某些方法在一个类中不能并发地运行。这些方法在监督程序控制之下,确保变量维持在一个一致的状态。
10.动态性
Java语言设计成适应于变化的环境,它是一个动态的语言。例如,Java中的类是根据需要载入的,甚至有些是通过网络获取的。

4.3.6Ada语言

易读性
专业人员往往要读很多程序,因此要避免像 APL 那种以过于简单的符号编程的语言,虽然它们的编程速度快,但基本上是不可读的。因此目前有种说法是:读一个程序比写类似的程序还要费时,这也是有一定道理的;特别是 C/C++ 的风格比较松散,很多语法都在滥用,使程序可读性相当低,由于 Ada 的语法接近人的语言,即使是初学者,也不会感到很难读懂。
强类型—保证了每个对象有明确定义的值域,并防止了不同概念的逻辑混淆。许多错误可以被编译器发现,而对于其它语言来说,则可能导致一个不正确的程序。
异常处理
实际中,一个程序不可能保证它的正确性;因此,通过异常机制及分块结构,将错误发生的影响控制在某一特定领域。
抽象数据类型
将数据描述的细节同基于该类型数据的操作相分离,以提高可移植性和可靠性。
多任务—使程序变成一系类的并发活动,而不是单一的顺序活动;这在很多领域,特别是对于服务器程序来说有重要意义,这比调用操作系统提供的功能更有易可移植性和可靠性。
类属单元
很多情况下,程序的某逻辑部份与运行时值的类型无关。因此,需要提供一种机制,从一个样板中产生多个相应的程序段,以提高代码的可重用性。

4.3.7Logo语言

特点编辑
LOGO语言具有如下的特点:
1.LOGO语言具有丰富的画图功能。为了激发初学者尤其是孩子们的兴趣,设计了一只可活动的“海龟”(turtle),各种有趣的图形恰是它爬行的轨迹。LOGO语言中有着许多海龟动作的命令,如forwardx表示海龟向前走x步,righty表示海龟向右转y度。用海龟作图,使孩子们从中学到许多形象直观的几何知识。
2.LOGO语言具有表(List)处理能力。表是一种不同于数和字(word)的特殊数据结构,它由数、字和表本身排列而成的。有了表处理功能,就很容易编制处理句子(Sentence)和字的程序。
3.LOGO语言具有很强的人机对话功能。每当给出一条LOGO命令,它都能及时响应和作出回答。这不仅激发了初学者的兴趣,还树立了他们学习的信心。
4.LOGO语言编写的程序是模块结构的。程序员可以把一个程序分为若干个称之为“过程”的模块。模块的独立性很强,既能独立编制、独立调试和修改,又允许在不同的过程中使用同名变量而不会相互混淆。程序员用LOGO固有命令定义了一个过程以后,该过程名(及其参数)就可作为用户定义的命令,和LOGO固有命令一样可供程序员使用。这种以LOGO固有命令为内核,逐步向外扩充LOGO命令的数量与功能的方式,体现了LOGO语言的可扩展性。
5.LOGO语言的过程可递归调用。利用这个特性,就能够方便地编制出高水平的、复杂的结构化程序。
6.LOGO语言中的变量允许以任意类型的数据赋值。不象BASIC语言,在字符型变是的名字后加后缀“$”,也不象其它高级语言,要预先说明变量的类型。即使是同一个变量,也可以先后赋以不同类型的值,使用起来非常灵活方便 。