程序设计主要有哪些方法?

程序设计主要有哪些方法?,第1张

程序设计主要方法有面向结构的方法和面向对象的方法。\x0d\x0a结构化程序设计\x0d\x0a\x0d\x0a 随着计算机的价格不断下降,硬件环境不断改善,运行速度不断提升。程序越写越大,功能越来越强,讲究技巧的程序设计方法已经不能适应需求了。记得是哪本书上讲过,一个软件的开发成本是由:程序设计 30% 和程序维护 70% 构成。这是书上给出的一个理论值,但实际上,从我十几年的工作经验中,我得到的体会是:程序设计占 10%,而维护要占 90%。也许我说的还是太保守了,维护的成本还应该再提高。下面这个程序,提供了两种设计方案,大家看看哪个更好一些那?\x0d\x0a\x0d\x0a 题目:对一个数组中的100个元素,从小到大排序并显示输出。(BASIC)\x0d\x0a\x0d\x0a 方法1:冒泡法排序,同时输出。 \x0d\x0a\x0d\x0aFOR I=1 TO 100\x0d\x0a  FOR J=I+1 TO 100\x0d\x0a IF A[I] >A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T\x0d\x0a  NEXT J\x0d\x0a  ? A[I]\x0d\x0aNEXT I\x0d\x0a\x0d\x0a 方法2:冒泡法排序,然后再输出。\x0d\x0a\x0d\x0aFOR I=1 TO 100\x0d\x0aFOR J=I+1 TO 100\x0d\x0aIF A[I] >A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T\x0d\x0aNEXT\x0d\x0aNEXT\x0d\x0a\x0d\x0aFOR I=1 TO 100\x0d\x0a? A[I]\x0d\x0aNEXT \x0d\x0a\x0d\x0a 显然,“方法1”比“方法2”的效率要高,运行的更快。但是,从现在的程序设计角度来看,“方法2”更高级。原因很简单:(1)功能模块分割清晰——易读;(2)也是最重要的——易维护。程序在设计阶段的时候,就要考虑以后的维护问题。比如现在是实现了在屏幕上的输出,也许将来某一天,你要修改程序,输出到打印机上、输出到绘图仪上;也许将来某一天,你学习了一个新的高级的排序方法,由“冒泡法”改进为“快速排序”、“堆排序”。那么在“方法2”的基础上进行修改,是不是就更简单了,更容易了?!这种把功能模块分离的程序设计方法,就叫“结构化程序设计”。\x0d\x0a\x0d\x0a面向对象的程序设计\x0d\x0a\x0d\x0a 随着程序的设计的复杂性增加,结构化程序设计方法又不够用了。不够用的根本原因是“代码重用”的时候不方便。面向对象的方法诞生了,它通过继承来实现比较完善的代码重用功能。很多学生在应聘工作,面试的时候,常被问及一个问题“你来谈谈什么是面向对象的程序设计”,学生无言,回来问我,这个问题应该怎么回答。我告诉他,你只要说一句话就够了“面向对象程序设计是对数据的封装;范式(模板)的程序设计是对算法的封装。”后来再有学生遇到了这个问题,只简单的一句对答,对方就对这个学生就刮目相看了(学生后来自豪地告诉我的)。为什么那?因为只有经过彻底的体会和实践才能提炼出这个精华。\x0d\x0a\x0d\x0a 面向对象的设计方法和思想,其实早在70年代初就已经被提出来了。其目的就是:强制程序必须通过函数的方式来 *** 纵数据。这样实现了数据的封装,就避免了以前设计方法中的,任何代码都可以随便 *** 作数据而因起的BUG,而查找修改这个BUG是非常困难的。那么你可以说,即使我不使用面向对象,当我想访问某个数据的时候,我就通过调用函数访问不就可以了吗?是的,的确可以,但并不是强制的。人都有惰性,当我想对 i 加1的时候,干吗非要调用函数呀?算了,直接i++多省事呀。呵呵,正式由于这个懒惰,当程序出BUG的时候,可就不好捉啦。而面向对象是强制性的,从编译阶段就解决了你懒惰的问题。\x0d\x0a\x0d\x0a 巧合的是,面向对象的思想,其实和我们的日常生活中处理问题是吻合的。举例来说,我打算丢掉一个茶杯,怎么扔那?太简单了,拿起茶杯,走到垃圾桶,扔!注意分析这个过程,我们是先选一个“对象”------茶杯,然后向这个对象施加一个动作——扔。每个对象所能施加在它上面的动作是有一定限制的:茶杯,可以被扔,可以被砸,可以用来喝水,可以敲它发出声音......;一张纸,可以被写字,可以撕,可以烧......。也就是说,一旦确定了一个对象,则方法也就跟着确定了。我们的日常生活就是如此。但是,大家回想一下我们程序设计和对计算机的 *** 作,却不是这样的。拿DOS的 *** 作来说,我要删除一个文件,方法是在DOS提示符下:c:>del 文件名。注意看这个过程,动作在前(del),对象在后(文件名),和面向对象的方法正好顺序相反。那么只是一个顺序的问题,会带来什么影响那?呵呵,大家一定看到过这个现象:File not found. “啊~~~,我错了,我错了,文件名敲错了一个字母”,于是重新输入:c:>del 文件名2。不幸又发生了,计算机报告:File read only. 哈哈,痛苦吧:)。所以DOS的 *** 作其实是违反我们日常生活中的习惯的(当然,以前谁也没有提出过异议),而现在由于使用了面向对象的设计,那么这些问题,就在编译的时候解决了,而不是在运行的时候。obj.fun(),对于这条语句,无论是对象,还是函数,如果你输入有问题,那么都会在编译的时候报告出来,方便你修改,而不是在执行的时候出错,害的你到处去捉虫子。\x0d\x0a\x0d\x0a 同时,面向对象又能解决代码重用的问题——继承。我以前写了一个“狗”的类,属性有(变量):有毛、4条腿、有翘着的尾巴(耷拉着尾巴的那是狼)、鼻子很灵敏、喜欢吃肉骨头......方法有(函数):能跑、能闻、汪汪叫......如果它去抓耗子,人家叫它“多管闲事”。好了,狗这个类写好了。但在我实际的生活中,我家养的这条狗和我以前写的这个“狗类”非常相似,只有一点点的不同,就是我的这条狗,它是:卷毛而且长长的,鼻子小,嘴小......。于是,我派生一个新的类型,叫“哈巴狗类”在“狗类”的基础上,加上新的特性。好了,程序写完了,并且是重用了以前的正确的代码——这就是面向对象程序设计的好处。我的成功只是站在了巨人的肩膀上。当然,如果你使用VC的话,重用最多的代码就是MFC的类库。

1、结构化程序设计

在结构化程序设计中,任何程序段的编写都基于3种结构:分支结构、循环结构和顺序结构。程序具有明显的模块化特征,每个程序模块具有惟一的出口和入口语句。结构化程序的结构简单清晰,模块化强,描述方式贴近人们习惯的推理式思维方式,因此可读性强。

2、面向对象程序设计

面向对象程序设计方法是尽可能模拟人类的思维方式,使得软件的开发方法与过程尽可能接近人类认识世界、解决现实问题的方法和过程,也即使得描述问题的问题空间与问题的解决方案空间在结构上尽可能一致,把客观世界中的实体抽象为问题域中的对象。

程序设计的分类

1、按照结构性质,有结构化程序设计与非结构化程序设计之分。前者是指具有结构性的程序设计方法与过程。它具有由基本结构构成复杂结构的层次性,后者反之。

2、按照用户的要求,有过程式程序设计与非过程式程序设计之分。前者是指使用过程式程序设计语言的程序设计,后者指非过程式程序设计语言的程序设计。

3、按照程序设计的成分性质,有顺序程序设计、并发程序设计、并行程序设计、分布式程序设计之分。按照程序设计风格,有逻辑式程序设计、函数式程序设计、对象式程序设计之分。

3.2.1 制定井身结构、套管程序方案的基本原则

井身结构和套管程序,是钻探技术设计中必须首先确定的技术环节,它对钻探技术设计的其他环节,如钻探设备方案设计、取心或扩孔钻进用钻头方案设计、孔内钻具系统方案设计等,都有至关重要的影响作用。此外,对钻探施工的经济性也有重要的影响作用。

确定钻井的井身结构和套管程序,应遵循以下基本原则:

1)套管程序留有余地,以满足钻遇复杂地层时增加套管层次的需求。套管层次多对施工安全更加有利,并且钻达目标的把握性更大。但是套管层次多,将带来施工成本的上升和施工难度加大。因此,须综合考虑施工安全性、钻达目标的把握性和施工成本等因素后予以确定。参照已实施的类似钻井项目的经验,该井除导管之外,考虑7层套管,留1级储备,即最多可有8层套管。

2)套管与井壁之间有足够的间隙,以保证下套管、固井施工的顺利进行。同时,还要考虑下一级钻头能够顺利地在本级套管内通过。在同时满足这两个条件的基础上,应该将套管之间的间隔尽量设计得小一些,也即在有限的空间范围内使套管层数尽量多一些,这样可减小钻井直径,提高钻进效率和降低钻进成本。

3)采用标准尺寸套管,尽量采用普通的连接方式,但特殊条件下,考虑采用小接箍套管或无接箍套管,以减小钻井直径。

4)尽可能采用尾管固井,以节省钻井成本。

3.2.2 13000m科学超深井的套管程序和钻进施工程序

目前13000m科学超深井钻进的地点和地层情况全为未知,按钻井设计要求,不能够进行钻井的井身结构和套管程序设计。但如果不进行井身结构和套管程序设计,后续的其他设计将受此影响,对13000m科学超深井钻探施工可行性的评价便无法开展。因此,在此设计中,参考类似项目的经验,对13000m科学超深井的套管层次、套管规格和套管下入深度,提出建议方案。

本设计对13000m超深井考虑两种套管程序和钻进施工程序,即“超前孔裸眼钻进方法”和“等井径钻进方法”。

(1)采用“超前孔裸眼钻进方法”时的套管程序和钻进施工程序

上部采用“超前孔裸眼钻进方法”施工。该方法是科学深钻施工中常用的方法,在前苏联科拉超深井、德国KTB先导孔、中国大陆科学钻探科钻一井、汶川地震科学钻探项目的钻井中都得到过应用。该方法的优点是,适合在地层条件未知的情况下使用,有利于解决大直径井段的取心问题、垂孔钻进问题和测井问题。该方法的基本原理如下:全井以一种较小的直径取心钻进,施工效率高、成本低,容易实现。小直径取心钻进时,上部的大环空间隙会给钻探施工带来多种不利:泥浆上返流速太低,岩粉携带和排除效果差;钻杆柱受力恶劣,容易发生断钻杆事故;孔底钻具工作不平稳,导致钻头寿命低、取心效果差。为了解决这些问题,取心钻进前,先下一层与取心钻头直径接近的可回收套管(活动套管),遇到复杂情况必须下套管护孔时,将活动套管拔出,扩孔钻进穿过不稳定层,并下套管和固井,然后继续往下钻。根据套管直径和钻孔深度情况决定,下部钻进时是否再下活动套管。采用该方法施工有以下好处:

1)解决大直径井段的取心问题。13000m科学超深井上部钻孔直径在400~800mm之间。在这么大直径的钻井中取心钻进,从理论上说是可行的,但是技术难度大、钻进成本很高,并且对于不同的口径需要不同的取心钻具,钻具研制的成本也很高。而采用该方法施工,只采用一种钻具,而且是小直径(216mm)钻具程序,施工成本低、可靠性高。

2)解决上部井段的垂孔钻进问题。为了实现钻达13000m的目标,钻井的上部7000~8000m必须保持铅直。根据德国KTB主孔的施工经验,采用自动垂直孔钻进系统可实现此目标。在本超深井的小直径的超前孔钻进阶段,可实施自动垂直孔钻进方案。其优点与取心钻进的类似,即只采用一种小直径自动垂钻系统,使用成本很低、可靠性很高。

3)采用先钻小直径超前孔、再扩孔的施工方法。有利于上部井段采用非标准的钻头尺寸,最终可在相同套管层次的条件下使井眼直径变小,钻井效率提高,钻井成本降低。

4)全部采用标准尺寸套管。上部扩孔井段采用非标准钻头尺寸,以便能在有限的空间内尽可能多下套管,可减小钻进直径和套管直径,降低钻井成本。

5)从245mm套管开始,套管柱设计成尾管,以节省钻井成本。尾管固井工艺使用的限制是,要保证足够的环空上返泥浆流速,以保证好的携带岩屑效果和钻进施工正常进行。

为此,13000m超深井“超前孔裸眼钻进方法”井身结构和套管程序设计方案见表3.1、表3.2、图3.1。

表3.1 13000m超深井井身结构和套管程序-1(“超前孔裸眼钻进方法”)

表3.2 13000m超深井井身结构和套管程序-2(“超前孔裸眼钻进方法”)

图3.1 13000m超深井套管程序图(“超前孔裸眼钻进方法”)

(2)采用“等井径钻进方法”时的套管程序和钻进施工程序

等井径钻井技术是石油天然气领域的一个重大突破。该技术利用可膨胀管的技术特性,用可膨胀管代替套管,在井眼内下入多级同一尺寸的膨胀管并固井。采用该技术形成的井身结构与传统井身结构相比,具有如下显著的优点:

1)有助于地面设备的标准化。在深井钻井作业中,大量的时间花费在钻台上,如更换底部钻具组合、从钻台上甩钻杆和吊钻杆、防喷器组的尺寸受所设计的入井套管柱的限制等。采用等井径钻井技术可以将不同尺寸的地面设备标准化,可以使用一种尺寸的钻柱和钻头,缩小防喷器组的尺寸,从而大大降低一口井的钻井、完井费用。

2)有利于环保并减少总建井投资成本。因为不需要下入多层大尺寸套管,用小型钻机钻井即可,因而等井径系统能明显地降低环境影响,同时减少对材料的消耗。据报道,采用等井径钻井技术平均每口井可节省44%的钻井液用量,降低42%的套管质量,节约42%的固井水泥,节省59%的岩屑处理费用。

3)有利于钻井作业安全。常规作业中,在设备处理过程中经常会造成人身伤害,等井径钻井技术虽不能取消这些作业,但可明显减小处理设备的尺寸,获得更安全的工作环境。

为此,13000m超深井“等井径钻进方法”井身结构和套管程序设计方案见表3.3、表3.4、图3.2。

表3.3 13000m超深井井身结构和套管程序-3(“等井径钻进方法”)

表3.4 13000m超深井井身结构和套管程序-4(“等井径钻进方法”)

图3.2 13000m超深井套管程序图(“等井径钻进方法”)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10877416.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存