面向对象建模技术Lec1

  1. 编程语言的断代
    面向对象开发继承了其它语言的精髓
    从历史上看,我们注意到两种潮流:
    a)从小规模到大规模编程的转变
    b)从初级语言到高级语言的进化
    本书编程语言的断代:根据语言最初引进的特点
  • 第一代(1954-1958)
    特点:程序员可以方便的表达数学公式

  • 第二代(1958-1961)
    特点:使用、强调了算法抽象(使得子程序的完善性,增加文件处理功能和文件处理应用)
    其中,COBOL代码: 所有代码都写在一个文件中。分成几段:包括标识部,环境部,数据部,过程部,主逻辑区

  • 第三代(1961-1970)
    特点:支持数据抽象,强化数据类型
    其中,Pascal:(支持数据抽象,鼓励数据结构)

  • 第四代(1970-1980)
    出现了2000多种编程语言,因为没有新的特点,留下来的很少
    其中留下来的有C(1973)和FORTRAN 77
    特点:支持数据结构,强调结构化编程

大事件:
a)C与Unix的研发:Unix是最好的系统
b):微软的建立

  • 第五代(1980-1990):面向对象时代
    特点:支持面向对象编程,设计,分析
    C++的出现
  1. 编程语言的拓扑结构
  • 第一代-第二代早期语言的拓扑结构
    程序执行顺序: 按照顺序执行程序,遇go to x语句,跳转到x行

原始的子程序:甚至没有参数传递,可能有几个入口和出口。仅仅是为了反复调用一段程序提供方便。

拓扑的概念:拓扑结构是指语言的物理建筑模块与这些模块是怎样连接在一起的

扁平结构设计
缺点1:因为全局变量可以被任何代码修改,所以程序缺陷会引起波浪传导效应
缺点2:当大系统需要修改的时候,很难保持原设计的完整性

  • 第2代后期—第3代早期语言的拓扑结构
    程序执行顺序: 按照顺序执行程序。逐渐抛弃go to语句,改为while, for 等控制循环

改进的子程序:
1)子程序被视为“功能抽象”2)支持参数传递 3)子程序成为基本的“程序块” 4)支持子程序嵌套。5)子程序中的局部变量不允许其它代码访问。

最早的软件抽象: 过程抽象(出于实用的目的)
子程序没有被看成是抽象,而仅仅视为一种省力的手段

人们认识到子程序具有对功能的抽象作用

将子程序作为抽象机制的3个好处:
1)支持参数传递机制语言产生了
2)奠定了结构化编程的基础
产生子程序嵌套

结构化程序定理(1966年Corrado Böhm) :只要一种编程语言可以依三个方式组合其子程序及调整控制流程,则每个可计算函数都可以用此种编程语言来表示。三个调整控制流程的方式为:
序列结构:按照顺序执行一个子程序,然后再执行另一个子程序;
选择结构:根据布尔表达式的值,执行两个子程序中的一个;
迭代结构:执行子程序,直到一个布尔表达式为true。

结构化程序定理奠定了结构化编程的基础

结构化编程的定义:
结构化编程是一种编程的模式,他的目的是通过大量使用自函数,块状结构,和循环,改善清晰度,质量,减少计算机程序的开发时间。
他和简单的go to跳转形成对比

3)出现了结构化设计方法,子程序被视为基本的编程块

此拓扑结构解决了早期语言的不足,强调对算法抽象的更大的控制,但是仍然不能解决大规模编程数据设计问题。

  • 第三代后期语言的拓扑结构
    第3代后期的编程语言,有了模块化的概念

优点:
解决日益增长的大规模编程事宜
并行开发独立编译模块化;
进一步改进了子程序,允许模块化;

不足之处:
数据仍然可能被非法修改。

大项目要求一个程序的不同部分并行开发
使用可独立编译的模块
此时,虽然大多数语言支持某种模块结构
但是几乎没有保证模块接口间的语义一致性方面的规则

对于数据抽象与强类型的支持较少
所以,以上的错误只有到了程序执行的时候才能被发现

  • 面向对象语言的拓扑结构

过程抽象的概念:研究怎样将一个程序设计为一系列函数(过程)的集合,例如C语言编程。
(通过使用过程所得到的)过程抽象本质上很适合描述抽象操作,但是不适合描述抽象对象

数据抽象的概念:研究怎样将程序中的数据整理、组织为比较好管理的数据结构。强调数据类型。
数据抽象对于掌握复杂性是很重要的,因为要操作的数据对象的复杂性导致了软件问题的整体复杂性。

数据抽象方面的改进:强调数据抽象,数据类型
a)强调数据抽象
b)强调数据类型

过程抽象 + 数据抽象 ——> 面向对象

面向对象语言的物理建筑是模块,代表了由类与对象组成的模块,而不是由子程序组成的模块

面向过程程序由动词组成,而面向对象程序由名词组成

中小面向对象应用的结构像一个图一样,而不是一个树;树型结构是典型的面向算法的设计

另外,基本没有全局变量;系统结构单位是类与对象。

对于超大型软件:我们发现 类、对象、模块已经不足以描述。

因此,需要使用层次状的抽象集群;在任何给定的一层抽象,对象协作完成高层行为

形成了嵌套抽象结构

  1. 本章总结
    第1代编程语言特点:主要解决数学问题
    第2代编程语言特点:算法抽象(子程序),文件管理,商业应用
    第3代编程语言特点:支持数据抽象,强化数据类型

Generation Gap:在1970到1980年代,出现了接近2000多个编程语言,大多数都被忘记了,但是C语言与Unix操作系统流传至今;
面向对象编程语言特点:支持面向对象编程、设计、分析
1990年代以后,继续使用面向对象编程,但是强调Frame;1995年发布了Java

第1代-第2代早期语言程序的拓扑结构:全局变量+子程序;任何子程序都可以修稿全局变量
第2代晚期-第3代早期程序程序拓扑:全局变量+子程序;强调对算法抽象的更大的控制;任何子程序都可以修稿全局变量
第3代后期的编程语言程序拓扑结构:全局变量+模块,有了模块化的概念;目的:解决日益增长的大规模编程事宜;任何模块都可以修稿全局变量;
面向对象语言所写的程序的拓扑结构:面向对象程序由一系列的模块(Java中的包)组成,每个模块中都包含若干个类或者其它的模块;可能形成模块的嵌套

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值