学校代码:10425 学 号:S0207615 中国石油大学硕士研究生学位论文
(申请工学硕士论文)
基于Linux的地震数据处理软件的
设计与实现
学科专业:计算机应用技术 培养方向:计算机网络及应用 硕 士 生:吴霞
指导教师:陈明(教授)
入学日期:2002年9月 论文完成日期:2005年4月
摘 要
地震数据数量庞大,处理复杂,如何有效、快速地对其进行处理已成为近代科学研究的重要分支之一。计算机科学、信息技术的兴起,使得地震数据处理软件得以出现并不断发展起来。计算机技术在地震数据处理中的应用,使得人们开始有可能用计算机来采集、存储和处理庞大的地震数据。
GeoEast V1.0是地震数据采集、解释、分析处理一体化软件系统,是国内外处于领先水平的地震数据处理软件之一。本系统是GeoEast V1.0处理功能的一部分,实现大数据量的表格操作及二进制数据文件的处理功能。
本文首先介绍了系统设计主要运用的方法—面向对象思想方法,然后分别对系统开发平台Linux以及系统设计阶段所用到的三种设计模式—观察者模式、命令模式和备忘录模式进行了阐述。在此基础上,对整个系统的设计与开发过程进行了简要的说明。
关键词: 面向对象 设计模式 地震数据
Abstract
The quantity of seism data is very large and the process is much complicated. How to deal with seism data quickly and efficiently has become one of the most important branch of recent science research. With the development of computer science and information technology, seism data process software came into being and it has made much more progress. People begin to collect、 store and process seism data under the help of computer.
GeoEast V1.0 is a software of the top level software related to seism data process home and abroad. The system which the author participated in and developed is part of GeoEast V1.0, whose function is to realize the operation of large quantity data in table and binary data files.
This paper introduces to you the object-oriented method first, the it discusses the Linux operating system, under which the software was developed, and three kinds of design pattern(Observer、 Command、Memento) that were used in the software. On the basis of these theory, it describes the design and develop process of this system.
Key words: Object-Oriented Design Pattern Seism Data
目 录
摘要
Abstract
第1章 绪论............................................1 1.1课题背景及意义....................................1 1.2 论文结构..........................................2 第2章 面向对象理论...................................3 2.1 面向对象与面向对象设计方法学......................3 2.2 面向对象的基本概念................................4 2.2.1 对象...........................................4 2.2.2 消息...........................................4 2.2.3 类.............................................5 2.3 面向对象方法的特征................................5 2.3.1抽象...........................................6 2.3.2继承...........................................6 2.3.3封装...........................................7 2.3.4多态性.........................................7 2.4 C++语言...........................................8 第3章LINUX操作系统...................................9 3.1 LINUX 概述.........................................9 3.1.1 LINUX的诞生....................................9 3.1.2 LINUX的主要特点...............................10 3.1.3 LINUX的主要构成...............................12 3.2 进程管理.........................................13 3.2.1进程及其状态..................................13 3.2.2 LINUX进程状态.................................14
3.2.3进程的模式和类型..............................16 3.2.4 进程管理......................................17 3.3 存储管理.........................................21 3.4 文件管理.........................................21 3.4.1 LINUX文件系统的树型结构.......................22 3.4.2 虚拟文件系统VFS..............................22 3.5 设备管理.........................................24 3.6 作业管理.........................................25 3.6.1 作业管理概述..................................25 3.6.2 LINUX作业调度算法.............................27 第4章 设计模式.......................................30 4.1 UML标记.........................................30 4.2创建型设计模式...................................31 4.3结构型设计模式...................................32 4.4 行为型设计模式...................................34 4.4.1 观察者模式(OBSERVER)...........................37 4.4.2 命令模式(COMMAND)..............................39 4.4.3 备忘录模式(MEMENTO)..........................42 第5章 系统设计与实现.................................45 5.1 系统需求.........................................45 5.1.1 表格器件......................................45 5.1.2 六类数据文件..................................46 5.2 系统设计.........................................46 5.2.1表格器件......................................46 5.2.2 滤波数据文件..................................49 5.3设计开发工具.....................................53 5.4 项目开发难点.....................................53
5.4.1开发环境的配置................................53 5.4.2表格器件中大数据量操作的实现..................54 5.4.3表格器件中对行/列进行独立冻结功能的实现.......55 5.5 主要窗口描述.....................................56 5.5.1 滤波数据文件主界面............................56 5.5.2 新建滤波数据文件窗口..........................57 5.5.3 表格器件的行列冻结功能........................58 5.5.4 表格器件属性设置界面..........................59 5.6 重要的数据结构...................................59 5.6.1 循环队列......................................59 5.6.2 堆排序........................................60 第6章 总结...........................................61 参考文献.............................................63 致谢.................................................64
第1章 绪论
第1章 绪论
1.1课题背景及意义
地震数据是工业界、科学界普遍认可的最重要、最有研究的数据之一。通过解释、分析、处理地震数据,地质学家就可以确定地质、地层的结构和特性,而这些结构和特性对能源的开采和利用具有决定性的意义。
地震数据数量庞大(通常是G级),一般存放在磁带上,而地震数据的处理则更加繁琐和复杂。当前,由于原油紧缺,世界各国对中国的地震数据处理软件进行封锁,而国内现有的处理软件或者功能不全,或者技术含量不高,很难达到预测地质、地层结构和特性的目的。GeoEast V1.0是在东方地球物理公司国内外物探技术服务市场份额持续增长,原有软件已不能满足一体化工作需求的背景下,由中国石油集团投资1.4亿元研制开发的。
GeoEast V1.0以满足油气勘探与开发需要为目标,涵盖了地震数据处理与解释的主要功能,增加了叠前偏移成像、海上地震数据处理两个方面的功能。在不到两年的研究开发过程中,广大科技人员先后攻克了系统总控、数据管理与三维可视化等方面的诸多技术难题,在系统交互控制框架、数据流与工作流管理、地震地质及地理信息共享、三维地质与速度模型构建等关键技术方面均获得了突破性进展,形成了“三维空间多维地质体建模”、“简谐波拟合法波场外推”等数十项技术创新成果,并已分批申请了发明专利。该系统的1.0版本
1
第1章 绪论
已于2004年12月31日发布。
本系统是GeoEast V1.0 中的处理功能的一部分,主要包括两部分内容:
一是表格器件部分:要求实现完美的Excel表的功能,包括撤销、重做、拷贝、粘贴、行/列计算及冻结功能。表格器件是供给东方地球物理公司的软件开发人员使用的。
二是六类数据文件(滤波数据文件、时间速度数据文件、编辑数据文件、静校正数据文件、切除数据文件、高程数据文件)的生成、显示、绘图处理部分。这六类数据文件是供给批量作业使用的。
1.2 论文结构
本文第一章简要介绍了地震数据处理软件的开发背景及意义。第二章阐述了面向对象的理论基础。第三章介绍了系统开发平台——Linux操作系统的基本知识。第四章讲述了设计模式的理论知识,重点介绍了系统中运用到的观察者模式、命令模式和备忘录模式。第五章阐述了系统设计和实现过程。第六章对系统设计和开发工作进行了总结。
2
第2章 面向对象理论
第2章 面向对象理论
2.1 面向对象与面向对象设计方法学
面向对象技术是目前流行的系统设计开发技术,它包括面向对象分析和面向对象程序设计。面向对象程序设计技术的提出,主要是为了解决传统程序设计方法——结构化程序设计所不能解决的代码重用问题。
结构化程序设计从系统的功能入手,按照工程的标准和严格的规范将系统分解为若干功能模块,系统是实现模块功能的函数和过程的集合。由于用户的需求和软、硬件技术的不断发展变化,按照功能划分设计的系统模块必然是易变的和不稳定的。这样开发出来的模块可重用性不高。
面向对象程序设计从所处理的数据入手,以数据为中心而不是以服务(功能)为中心来描述系统。它把编程问题视为一个数据集合,数据相对于功能而言,具有更强的稳定性。
面向对象程序设计同结构化程序设计相比最大的区别就在于:前者首先关心的是所要处理的数据,而后者首先关心的是功能。
面向对象程序设计是一种围绕真实世界的概念来组织模型的程序设计方法,它采用对象来描述问题空间的实体。对象反映了系统为之保存信息和(或)与它交互的能力。它是一些属性及服务的一个封装体,在程序设计领域,可以用“对象 = 数据 + 作用于这些数据上的操作”这一公式来表达。
3
第2章 面向对象理论
2.2 面向对象的基本概念
2.2.1 对象
对象是其自身所具有的状态特征以及可以对这些状态施加的操作结合在一起所构成的独立实体。在计算机世界中,我们可以把对象看成是存储器中一个可标识的区域,它能保存固定或可变数目的数值(或数值的集合)。在面向对象系统中,一个对象的状态是通过“域”来描述的,也称为私有存储单元,这些私有存储单元只能由它自己的操作来进行处理。在C++中用成员变量来存放一个对象的状态,用成员函数操作对象状态。
对象具有三个特性:模块独立性、动态连接性和易维护性。模块独立性主要是指从逻辑上看,一个对象是独立存在的模块。从外部看这模块,只需了解它具有哪些功能,至于它如何实现这些功能和使用哪些局部数据来完成它们,则都“隐蔽”在模块内部。动态连接性指的是客观世界中各式各样的对象并不是鼓励存在的,它们之间是有联系的,正是它们之间的相互作用、联系和连接,才构成了各种不同的系统。易维护性则是由于对象的功能被“隐蔽”,所以修改、完善功能及其实现的细节都被局限于该对象的内部,不会波及到外部,这就使得对象和整个系统变得非常容易维护。
2.2.2 消息
面向对象的系统中,对象之间的通信和请求对象完成某种处理工
4
第2章 面向对象理论
作是通过消息传送实现的。消息传送相当于一个间接的过程调用。对象对它能够接受的每一个消息有一个相应的方法解释消息的内容,并执行消息指示的操作。一个对象可以同时向多个对象发送消息,也可以接受多个对象发送的消息。由于消息内容由接受消息的对象解释,同样的消息可能被不同对象解释为不同的含义。通常我们把发送消息的对象称为发送者,接受消息的对象称为接收者。
2.2.3 类
类是具有相同操作功能和相同的数据格式(属性)的对象的集合。类可以看作抽象数据类型的具体实现。抽象数据类型是数据类型抽象的表示形式。数据类型是指数据的集合和作用于其上的操作的集合,而抽象数据类型不关心操作实现的细节。从外部看,类型的行为可以用新定义的操作加以规定。类为对象集合的抽象,它规定了这些对象的公共属性和方法;对象为类的一个实例。苹果是一个类,而放在桌上的那个苹果则是一个对象。对象和类的关系相当于一般的程序设计语言中变量和变量类型的关系。
2.3 面向对象方法的特征
面向对象的编程方法具有以下四个基本特征:
5
第2章 面向对象理论
2.3.1抽象
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。比如,我们要设计一个学生成绩管理系统,考察学生这个对象时,我们只关心他的班级、学号、成绩等,而不用去关心他的身高、体重这些信息。抽象包括两个方面,一是过程抽象,二是数据抽象。过程抽象是指任何一个明确定义功能的操作都可被使用者看作单个的实体看待,尽管这个操作实际上可能由一系列更低级的操作来完成。数据抽象定义了数据类型和施加于该类型对象上的操作,并限定了对象的值只能通过使用这些操作观察和修改。 2.3.2继承
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。这也体现了大自然中一般与特殊的关系。继承性很好的解决了软件的可重用性问题。比如说,所有的Windows应用程序都有一个窗口,它们可以看作都是从一个窗口类派生出来的。但是有的应用程序用于文字处理,有的应用程序用于绘图,这是由于派生出了不同的子类,各个子类添加了不同的特性。
6
第2章 面向对象理论
2.3.3封装
封装是面向对象的特征之一,是对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。一旦定义了一个对象的特性,则有必要决定这些特性的可见性,即哪些特性对外部世界是可见的,哪些特性用于表示内部状态。在这个阶段定义对象的接口。通常,应禁止直接访问一个对象的实际表示,而应通过操作接口访问对象,这称为信息隐藏。事实上,信息隐藏是用户对封装性的认识,封装则为信息隐藏提供支持。封装保证了模块具有较好的独立性,使得程序维护修改较为容易。对应用程序的修改仅限于类的内部,因而可以将应用程序修改带来的影响减少到最低限度。 2.3.4多态性
多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。又比如,同样的选择编辑-粘贴操作,在字处理程序和绘图程序中有不同的效果。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
7
第2章 面向对象理论
2.4 C++语言
C++是一种混合型的面向对象程序设计语言。它既具有独特的面向对象特征,可以为面向对象技术提供全面支持,又具有对传统C语言的向后兼容性,很多已有的程序稍加改造就可以重用,许多有效的算法也可以继续利用。因此,目前它是实现面向对象理论与技术的比较通行和使用的手段。要想理解把握C++语言,离不开面向对象技术的理论指导,而介绍面向对象技术也无法不结合对C++语言的运用。本系统综合运用面向对象技术和C++程序设计语言,很好地实现了各个模块的系统功能。
8
第3章Linux操作系统
第3章Linux操作系统
由于系统是在Linux环境下开发和编写的,因此这里要对Linux操作系统进行必要的讲解和介绍。
3.1 Linux 概述
3.1.1 Linux的诞生
Linux的兴起可以说是Internet创造的一个奇迹。 1991年初,当年轻的芬兰大学生Linus Torvalds在开始其Linux 操作系统的设计时,他的目的只不过是想看一看Intel 386存储管理硬件是怎样工作的,而绝对没有想到这一举动会在计算机界产生如此重大的影响。他的设计进展得很顺利,只花了几个月时间就在一台Intel 386微机上完成了一个类似于Unix 的操作系统, 这就是最早的Linux版本。1991年底,Linus Torvalds首次在Internet 上发布了基于Intel 386体系结构的Linux源代码,从此以后,奇迹开始 发生了。由于Linux具有结构清晰、功能简捷等特点,许多大专院校的学生和科研机构的研究人员纷纷把它作为学习和研究的对象。他们在更正原有Linux版本中错误的同时,也不断地为Linux增加新的功能。在众多热心者的努力下,Linux逐渐成为一个稳定可靠、功能完善的操作系统。一些软件公司, 如Red Hat、InfoMagic等也不失时机地推出了自己的以Linux为核心的操作系统版本,这大大推动了Linux的商品化。在一些大的计算机公司的支持下,Linux还 被移植到以Alpha APX、PowerPC、Mips及Sparc等为处理机的系统上。Linux的使 用日益广
9
第3章Linux操作系统
泛,其影响力直逼Unix。
Linux的成功得益于如下因素:
⑴具有良好的开放性。Linux及其生成工具的源代码均可通过Internet免费获取,Linux爱好者能非常容易地建立一个Linux开发平台。
⑵Internet的普及使热心于Linux的开发者们能进行高效、快捷的交流,从而为Linux 创造了一个优良的分布式开发环境。
⑶Linux具有很强的适应性,能适应各种不同的硬件平台。Linux的版本更新很快。在短短的二十年时间里,其版本已升至2.4.x。这里之所以用\"x\"表示,是因为x的值变化太快,很难准确地定位它的值。这也从侧面反映了从事Linux的研究者之多。
3.1.2 Linux的主要特点
作为一个操作系统,Linux几乎满足当今Unix操作系统的所有要求,因此,它具有Unix操作系统的基本特征:
⑴符合POSIX 1003.1标准
POSIX 1003.1标准定义了一个最小的Unix操作系统接口,任何操作系统只有符合这一标准,才有可能运行Unix程序。考虑到Unix具有丰富的应用程序,当今绝大多数操作系统都把满足POSIX 1003.1标准作为实现目标,Linux也不例外,它完全支持POSIX 1003.1标准。另外,为了使Unix System V和BSD上的程序能直接在Linux上运行,Linux还增加了部分System V和BSD的系统接口,使Linux成为一个完善的Unix程序开发系统。
10
因篇幅问题不能全部显示,请点此查看更多更全内容