
子程序(subroutine)是一个概括性的术语,任何高级程序所调用的程序,都被称为子程序。它经常被使用在汇编语言层级上。子程序的主体(body)是一个代码区块,当它被调用时就会进入运行。
一般程序设计语言包含两种基本的抽象:过程抽象和数据抽象。过程抽象有时也称控制抽象。子程序是最主要过程抽象机制。面向对象语言中的方法与子程序的概念十分相似,不同在于它们的调用以及它们与类或对象关联的方式。每个子程序只有一个入口。在执行期间,调用程序单位被停止执行,即任意时刻只有一个子程序在执行子程序执行完毕后,总是将控制返回给调用程序
扩展资料:
子程序的应用
1、零件上若干处具有相同的轮廓形状,在这种情况下,只要编写一个加工该轮廓形状的子程序,然后用主程序多次调用该子程序的方法完成对工件的加工。
2、加工中反复出现具有相同轨迹的走刀路线,如果相同轨迹的走刀路线出现在某个加工区域或在这个区域的各个层面上,采用子程序编写加工程序比较方便,在程序中常用增量值确定切入深度。
3、在加工较复杂的零件时,往往包含许多独立的工序,有时工序之间需要适当的调整,为了优化加工程序,把每一个独立的工序编成一个子程序,这样形成了模块式的程序结构,便于对加工顺序的调整,主程序中只有换刀和调用子程序等指令。
参考资料来源:百度百科-子程序
参考资料来源:百度百科-计算机科学
在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型程序中的某部份代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。函数在面向过程的语言中已经出现。是结构(Struct)和类(Class)的前身。本身就是对具有相关性语句的归类和对某过程的抽象。
1、计算机基本的被独立提供出来的程序,它能够调用子程序,而不被任何子程序所调用。它是计算机程序的中心部分。
2、包含调用子程序的程序称为主程序。主程序不能被它的子程序调用。主程序和子程序两者是相对的。比如,某主程序在某个过程中调用了子程序A,子程序A在某个过程中又调用了子程序B,那么A对主程序而言是子程序,但对B而言它又成了主程序。
可以。凯恩迪系统是一种高端的数控系统,主要用于机床数控加工领域。该系统具有扩展性强、可靠性高、性能优越等一系列优点。此外,在凯恩迪系统主程序中,可以集成和调用子程序来实现一些特殊的功能,这说明凯恩迪系统主程序和子程序可以放在一起运行。不过,需要注意的是,在将主程序和子程序放在一起时,应该按照一定的规则进行编写和管理,避免互相干扰。
子程序和功能块最终都是要在主程序的调用下起作用的
主程序相当于是一间房子
而子程序就相当于是房子中的桌子
主程序
程序主体(称为
OB1),在其中放置控制应用程序的指令。 主程序中的指令按顺序执行,每个 CPU 扫描周期执行一次。
子例程
子例程是位于单独程序块的可选指令集,只在从主程序、中断例程或另一子例程调用时执行。
中断例程
中断例程是位于单独程序块的可选指令集,只在发生中断事件时执行。
STEP 7-Micro/WIN SMART 提供了三个程序编辑器,并通过在程序编辑器窗口为每个 POU 提供单独的选项卡来组织程序。 主程序 OB1
始终是第一个选项卡,然后是可能已创建的任何子例程或中断。
子例程
要重复执行某种功能时,子例程是非常有用的。 可在子例程中编写一次逻辑,然后在主程序中根据需要多次调用子例程。 这样做有若干优点:
您的总体代码大小减小。
与在主程序中多次执行相同代码相比,扫描时间也会减少,因为在主程序中,不管代码执行与否,每个扫描周期都会自动评估代码。
可以有条件地调用子例程,且在扫描过程中不被调用时不对子例程进行评估。
子例程容易移植;您可以单独挑出一个功能,并将其复制至其它程序中,而无须进行修改或只进行少量修改。
体系结构是一个计算机术语,由G Amdahl于1964年首次提出体系结构概念,为以后计算机系统的设计与开发奠定了良好的基础。体系结构包括数据流系统、调用-返回系统、独立部件、虚拟机、以数据为中心的系统(库)、特殊领域风格、特殊结构风格、不同风格合成建立的异构结构、最初始最基本的主程序/子程序九大内容。
二、体系结构由来:
在传统的程序设计领域中,人们使用流程图来表达系统的基本功能和实现的具体逻辑,但是,流程图实际上仅仅是源程序的图形化表示,无法给系统的分析和开发者提供更多的信息,所以没有在实际的系统开发过程中得到广泛的应用。随着软件系统的规模和复杂性的增加,对软件系统的整体结构(数据和控制的逻辑)进行分析和描述成为大型系统开发的一个不可缺少的重要部分,显然,使用流程图是无法达到这个目标的,我们必须使用新的方法和概念来对系统的整体结构进行把握。
三、体系结构的分类:
1 数据流系统,包括顺序批处理、管道和过滤器;
2 调用-返回系统,包括主程序和子程序、面向对象系统、层次结构;
3 独立部件,包括通信进程、事件隐式调用;
4虚拟机,包括解释器、规则基系统;
5 以数据为中心的系统(库),包括数据库、超文本系统、黑板系统;
6 特殊领域风格;例如过程控制、模拟器;
7 特殊结构的风格,例如分布式处理、状态转移系统;
8 不同风格合成建立的异构结构;
9 最初始、最基本的主程序/子程序。
四、结构范式:
1管道和过滤器
每个组件具有输入和输出的集合,从流中读出数据作为输入,产生输出数据的流。整个系统可以看成多个过滤器复合形成的数据处理组件。
过滤器A
过滤器B
过滤器C
管道
特点:
过滤器之间是相互独立的(不能共享状态),其中一个过滤器的 *** 作和行为不能影响另外过滤器的 *** 作和行为,流的传送没有副作用。
过滤器对所输入流的来源和输出流的去向不关心,不需要知道流的来源和流的去向,来源和去向对于过滤器的数据处理没有任何影响。
过滤和流的传送可以是并发的,可以同时有多个流的传送存在于系统之中。
实例:
一个最著名的实例是unix的shell编程,多个对数据进行处理的程序(组件)通过管道联结起来,产生总和的效果;还有传统的编译器,源代码经过词法分析、语法分析、中间代码生成、目标代码生成等步骤生成输出的目标代码。
优点:
整个系统的功能是多个过滤器作用的总和,这样可以简化系统的分析和设计,可以经过需求的分析之后将整个系统作为一个过滤器处理,然后再逐步的细化成为多个相互连接的过滤器。
支持组件的重用,同一个过滤器可以多次出现在系统的不同位置。
易于维护和增强,过滤器可以被替换,可以增加新的过滤器到系统中而不改变原有的过滤器,不改变原来系统的基本功能。
本质上的并发性支持,这种体系结构由于本质上是与各个独立的过滤器的状态无关的,与并行的流的通过次序也是无关的,所以并发是一个基本的体系结构自然具有的特性。
缺点:
由于过滤器之间本质上是独立的,所以设计者必须独立考虑每一个过滤器的输入、处理和输出的过程,对于过滤器逻辑上的共同点和相互关系无法在设计中加以体现。
由于这种体系的批处理特性,所以不适合开发和用户交互的应用程序。
系统的多个处理流之间的共同特性无法提取、多个过滤器之间的共同特性也无法提取,所以增加了设计的复杂性。
2面向对象的体系
在这种体系中,数据和数据上的 *** 作被封装成抽象数据类型或者对象。系统由大量的对象组成,在物理上,对象之间通过函数或者过程调用相互作用;在逻辑上,对象之间通过集成、复合等方式实现设计的复用。
对象D
对象B
对象A
对象E
对象C
对象调用
对象调用
对象调用
类A
类B
类C
类G
对象A
对象E
类F
复合
继承
物理结构逻辑结构
特点:
面向对象系统分析和设计的资料已经太多,这里就不再详细说明了。
优点:
由于封装,实现了灵活性和扩充性,隐藏了实现的细节,提高代码的质量;
使用继承和多态、提高了软件的可重用性。
缺点:
最主要的缺点是,由于对象之间的交互是通过明确的对象函数调用进行的,所以当一个对象需要实现一个特定功能的时候,必须知道哪一个对象提供这种服务,这就降低了系统的灵活性。管道和过滤器模型不需要明确指明数据的来源和去向。
事件驱动的体系
对象E
对象E
对象E
事件分发的总线
事件的创建
事件接收者的注册的创建
对象E
这是面向对象和数据抽象体系的一种变形,系统同样是由大量的对象组成的,但是对象之间的交互不是通过明确指明对象的函数或者过程调用进行的,相反,系统提供事件的创建和发布的机制,对象产生事件,一个或者多个对象通过向系统注册关注这个事件并由此触发出相应的行为或者产生新的事件。
实例:
一个最著名的例子是GUI的模型,鼠标、键盘或者其他输入设备产生各种事件,窗口、程序或者其他对象有这些事件所触发,产生新的事件、进行数据处理或者其他 *** 作。
优点:
用于函数和过程的调用调用不需要指明特定的对象,所以系统具有非常好的灵活性和扩展性,新的组件只需要向系统的事件处理部分注册就可以立刻加入系统中,同样,老的组件也可以方便的从系统中删除。对于动态性要求特别高的系统,特别是如果需要在运行时对系统进行扩充,应该采用该结构。
缺点:
由于函数调用是通过事件发送进行的,所以,发出事件的对象不能确认是否有对象处理了这个事件、是否是期望的对象处理了这个事件、是否获得期望的结果,同样也无法控制事件发生的次序,系统的逻辑和时序的正确性必须通过复杂的时序逻辑和前后条件的断言加以保证。
3分层次的体系
将系统功能和组件分成不同的功能层次,一般而言,只有最上层的组件和功能可以被系统外的使用者访问,只有相邻的层次之间才能够有函数调用。
下面是一个基本的商务处理系统的层次结构:
用户界面层
事务逻辑层
核心层
实例:
显然,ISO的OSI(开放系统互连)参考模型是最著名的层次模型的例子,通过将开放系统的功能和组件划分成7个层次,定义清晰的(很多时候是过于复杂的)层次之间的接口,实现复杂的互 *** 作性。
优点:
系统的开发和设计可以逐步的分层次的进行,从底层的简单的功能逐步建立高层的复杂和抽象的功能。
灵活性和扩展性,由于相邻层次之间通过清晰的接口交互,所以特定的层次可以被替换和增强,甚至可以增加新的层次。
缺点:
不是所有的系统都可以分解成为清楚的层次
划分清晰、逻辑上一致的层次是非常困难的(OSI的失败和TCP/IP的成功说明了这一点)
严格的层次调用结构会降低系统的性能。
4知识库体系
使用一个中心数据结构表示系统的当前状态,一组相互独立的组件在中心数据库上进行 *** 作。如果组件负责对中心数据进行选择、处理,这种体系就是传统的数据库模型;如果中心数据结构自主的引发一系列的行为,则这种体系可以看成一个黑板模型。
中心数据库(知识库)
客户组件A
客户组件B
客户组件C
实例:
大量的传统数据库应用程序实际上就是这一体系的具体实例。在很多研究系统中,使用的基于知识库的黑板模型,实际上也是这种体系
优点:
以数据为中心的体系结构,可以自然的表示大量的数据和事务处理的逻辑,适合表达以数据为重新的应用程序。
缺点:
只有很少一部分简单的数据库存储应用可以完全采用这种体系结构表示,在大量实际的商业应用中,完成师傅处理和其他逻辑的应用程序必须采用其他的体系结构表达
5解释器体系
用户
如果应用程序的逻辑非常复杂,例如,AutoCAD的各种绘图指令,而且,用户可能以非常复杂的方式使用这个系统,一个较好的体系就是提供面向领域的一组指令(语言),系统解释这种语言,产生相应的行为,用户使用这种指令(语言)完成复杂的 *** 作。
使用虚拟机语言描述的业务逻辑
虚拟机解释器
完成实际 *** 作任务的基本指令
实际的问题领域
实例:
大量的开发工具、二次开发工具体现了这一思想:微软在其产品中大量使用的Visual Basic for Application,以及在AutoDesk产品中大量使用的AutoLisp语言,实际上就是给用户提供了一种面向领域的语言,然后核心解释执行这一语言的指令和指令序列。从而扩充产品的功能,方便用户按照自己的需要定制系统。
优点:
非常好的扩展性,用户可以实现对软件系统的二次开发
缺点:
软件开发复杂,特别是这种指令集的设计非常困难。
是否可以采用一种成熟的语言作为二次开发的基础(例如,基于Java)
给你个例子statm:
function [mean,stdev] = stat(x)
n = length(x);
mean = avg(x,n);
stdev = sqrt(sum((x-avg(x,n))^2)/n);
function mean = avg(x,n)
mean = sum(x)/n;
在同一个m文件中,定义了两个函数,其中stat(x)为主函数,avg(x,n)为子函数,主函数调用子函数
主函数必须与m文件同名,子函数必须跟在主函数或其他子函数后
主函数在此文件外可见,子函数不可见,即主函数全局,子函数非全局
程序的模块是指:例如整个项目程序实现一个打飞机的功能,这个功能分很多小功能(你的飞机开炮,移动; 敌人的飞机开炮,移动),就可以说敌人飞机实现代码所以部分叫成程序的一个模块
子程序:就是指代码函数实现具体功能的函数,其中一个小函数实现飞机开炮功能就可以叫子程序,而主程序就是调用所有子程序的集合
接口就是指:比如你这个程序中,有写一个子程序,而其他人也想做类似打飞机的游戏,想要你这个子程序代码,他要写吗?不用,你就写一个接口函数,开放给他用,然后他就通过调用你这个开放的接口,他也能实现你这个打飞机其中一个小功能
以上就是关于什么是子程序,如何使用子程序呢全部的内容,包括:什么是子程序,如何使用子程序呢、主程序和子程序之间有何区别、凯恩迪系统主程序可以跟子程序放在一起吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)