当前位置:文档之家› CORBA 程序设计指南入门

CORBA 程序设计指南入门

CORBA 程序设计指南入门
CORBA 程序设计指南入门

CORBA 程序设计指南(入门)

Author: 龙湘明

Company: 北京邮电大学国家重点实验室

Date : 2001-2-28

Update : 2013-04-05

这里假设你对CORBA毫无所知。对JAVA略有所知,因为这里使用JAVA作为程序设计语言。学习了本书,你将对CORBA有个初步了解,并能编写一个简单完整的CORBA 应用程序。

(下载源码就到源码网:https://www.doczj.com/doc/ef10570440.html,)

1.C ORBA 简介

CORBA(Common Object Request Broker Architecture)是为了实现分布式计算而引入的。为了说明CORBA在分布计算上有何特点,我们从它与其它几种分布计算技术的比较中进行说明。

与过去的面向过程的RPC(Remote Procedure Call)不同,CORBA是基于面向对象技术的,它能解决远程对象之间的互操作问题。MicroSoft 的DCOM (Distributed Component Object Model)也是解决这一问题的, 但它基于Windows操作系统,尽管到本书编写时,DCOM已有在其他操作系统如Sun Solaris, Digital Unix, IBM MVS 上的实现,但毫无疑问,只有在微软的操作系统上才会实现得更好。而只有CORBA是真正跨平台的,平台独立性正是CORBA的初衷之一。另一种做到平台无关性的技术是Java RMI(Remote Method Invocation),但它只能用JAVA实现。CORBA与此不同,它通过一种叫IDL(Interface Definition Language)的接口定义语言,能做到语言无关,也就是说,任何语言都能制作CORBA组件,而CORBA组件能在任何语言下使用。

因此,可以这样理解CORBA:CORBA一种异构平台下的语言无关的对象互操作模型。

1.1 CORBA体系结构

CORBA的体系结构如下:

图1.1 CORBA体系结构

CORBA上的服务用IDL描述,IDL将被映射为某种程序设计语言如C++或Java,并且分成两分,在客户方叫IDL Stub(桩), 在服务器方叫IDL Skeleton(骨架)。两者可以采用不同的语言。服务器方在Skeleton的基础上编写对象实现(Object Implementation),而客户方要访问服务器对象上的方法,则要通过客户桩。而双方又要通过而ORB(Object Request Broker,对象请求代理)总线通信。

与传统的Client/Server模式(我们称为Two-tier client/server)不同,CORBA是一种multi-tier client/server architecture,更确切的说,是一种three-tier client/server模式。双重客户/服务器模式存在的问题是两者耦合太紧,它们之间采用一种私有协议通信,服务器的改变将影响到客户方。多重客户/服务器与此不同,两者之间的通信不能直接进行,而需要通过中间的一种叫代理的方式进行。在CORBA中这种代理就是ORB。通过它,客户和服务器不再关心通信问题,它们只需关心功能上的实现。从这个意义上讲,CORBA是一种中间件(Middleware)技术。

下面列出CORBA中的一些重要概念,或者说CORBA中的几个重要名词,有助于读者了解CORBA的一些重要的方面。

1.2 CORBA中的几个概念

1.2.1 ORB(Object Request Broker)

CORBA体系结构的核心就是ORB。可以这样简单理解:ORB就是使得客户应用程序能调用远端对象方法的一种机制。

图1.2 ORB模型

具体来说就是:当客户程序要调用远程对象上的方法时,首先要得到这个远程对象的引用,之后就可以像调用本地方法一样调用远程对象的方法。当发出一个调用时,实际上ORB 会截取这个调用(通过客户Stub完成,“提高”篇中会详细解释),因为客户和服务器可能在不同的网络、不同的操作系统上甚至用不同的语言实现,ORB还要负责将调用的名字、参数等编码成标准的方式(称Marshaling)通过网络传输到服务器方(实际上在同一台机器上也如此),并通过将参数Unmarshaling的过程,传到正确的对象上(这整个过程叫重定向,Redirecting),服务器对象完成处理后,ORB通过同样的Marshaling/Unmarshaling方式将结果返回给客户。

因此,ORB是一种功能,它具备以下能力:

1.对象定位(根据对象引用定位对象的实现)

2.对象定位后,确信Server能接受请求

3.将客户方请求通过Marshaling/Unmarshing方式重定向到服务器对象上

4.如果需要,将结果以同样的方式返回。

1.2.2 IDL(Interface Definition Language)

IDL,接口定义语言,是CORBA体系中的另一个重要概念。如果说ORB使CORBA 做到平台无关,那么IDL, 则使CORBA做到语言无关。

正像其名字中显示的那样,IDL仅仅定义接口,而不定义实现,类似于C中的头文件。实际上它不是真正的编程语言。要用它编写应用,需要将它映射它相应的程序设计语言上去,如映射到C++或JAVA上去。映射后的代码叫Client Stub Code和Server Skeleton Code。

IDL的好处是使高层设计人员不必考虑实现细节而只需关心功能描述。IDL可以说是描述性语言。设计IDL的过程也是设计对象模型的过程。它是编写CORBA应用的第一步,在整个软件设计过程中至关重要。

IDL的语法很像C++,当然也像Java。很难想像一个程序设计人员是不懂C或Java的,所以,几乎所有的程序设计人员都能迅速理解IDL。而这正是IDL设计者所希望的。

下面是一个IDL定义的简单例子:

// grid.idl

// IDL definition of a 2-D grid:

module simpleDemo{

interface grid {

readonly attribute short height; // height of the grid

readonly attribute short width; // width of the grid

// IDL operations

// set the element [row,col] of the grid, to value:

void set(in short row, in short col, in long value);

// return element [row,col] of the grid:

long get(in short row, in short col);

};

};

This IDL defines an interface for a grid CORBA object that maintains a grid or 2-D array of data values, which a client can access or modify remotely.

Module类似于Java中包(Package)的概念,实际上module simpleDemo映射到JAVA 正是package simpleDemo。而Interface类似于C++中的类(classs)声明,或是Java中的Interface 定义。

附录中列出了IDL的全部语法。

1.2.3 Stub Code 和Skeleton Code

Stub code 和Skeleton Code 是由IDL Complier自动生成的,前者放在客户方,后者放

在服务器方。不同厂商的IDL complier生成的Stub 和Skeleton会略有区别,但影响不大。

如上面的grid.idl, 编译后,Stub Code包含以下文件:

grid.java

_gridStub.java

gridHelper.java

gridHolder.java

gridOperations.java

Skeleton Code则包含以下文件:

gridOperations.java

gridPOA.java

gridPOATie.java

(在Stud Code 也包含gridOperations.java, 是因为在使用Call back机制时会用到。)

这些文件的用途后面会讲到。

1.2.4 GIOP 和IIOP

我们知道,客户和服务器是通过ORB交互的,那么,客户方的ORB和服务器方的ORB 又是通过什么方式通信呢?通过GIOP(General Inter-ORB Protocol)。也就是说,GIOP是一种通信协议,它规定了两个实体:客户和服务器ORBs间的通信机制。

图1.3 ORBs通信机制(下载源码就到源码网:https://www.doczj.com/doc/ef10570440.html,)

GIOP在设计时遵循以下目标:

Widest possible availability

Simplicity

Scalability

Low cost

Generality

Architectural neutrality

也是说,GIOP设计的尽可能简单,开销最小,同时又具有最广泛的适应性和可扩展性,以适应不同的网络。

GIOP定义了以下几个方面:

1.The Common Data Representation (CDR) definition.

通用数据表示定义。它实际上是IDL数据类型在网上传输时的编码方案。它对所有IDL 数据类型的映射都作了规定。

2.GIOP Message Formats.

它规定了Client和Server两个角色之间要传输的消息格式。主要包括Request和Reply 两种消息。

一个Request 消息有以下几部分组成:

A GIOP message header

A Request Header

The Request Body

相应的,一个Reply消息则包括

A GIOP message header

A Reply Header

The Reply Body

GIOP1.1规定GIOP message header格式如下:

// GIOP 1.1

struct MessageHeader_1_1 {

char magic [4];

Version GIOP_version;

octet flags; // GIOP 1.1 change

octet message_type;

unsigned long message_size;

};

Request Header格式如下:

// GIOP 1.1

struct RequestHeader_1_1 {

IOP::ServiceContextList service_context;

unsigned long request_id;

boolean response_expected;

octet reserved[3]; // Added in GIOP 1.1

sequence object_key;

string operation;

Principal requesting_principal;

};

Request Body则按CDR规定的方式编码,它主要对方法调用的参数进行编码,如方法:

double example (in short m, inout Principal p);

可表示成:

struct example_body {

short m; // leftmost in or inout parameter

Principal p; // ... to the rightmost

};

3.GIOP Transport Assumptions:

主要规定在任何面向连接的网络传输层上的一些操作规则。如:Asymmetrical connection usage,Request multiplexing,Overlapping requests,Connection management等。

另外,因为CORBA是基于对象的,GIOP还需定义一套Object Location的机制。

GIOP因为是一种通用协议,所以不能直接使用。在不同的网络上需要有不同的实现。目前使用最广的便是Internet上的GIOP,称为IIOP(Internet Inter-ORB Protocol)。IIOP基于TCP/IP协议。IIOP消息格式定义如下:

module IIOP { // IDL extended for version 1.1

struct Version {

octet major;

octet minor;

};

struct ProfileBody_1_0 { // renamed from ProfileBody

Version iiop_version;

string host;

unsigned short port;

sequence object_key;

};

struct ProfileBody_1_1 {

Version iiop_version;

string host;

unsigned short port;

sequence object_key;

sequence components;

};

};

1.2.5 Dynamic Invocation Interface (DII) 和Dynamic Skeleton Interface (DSI)

动态调用接口(DII)和动态骨架接口(DSI)是用来支持客户在不知道服务器对象的接口的情况下也能调用服务器对象。

一个增加了DII和DSI的CORBA调用模型如下:

图1.4 增加了DII和DSI的调用模型(下载源码就到源码网:https://www.doczj.com/doc/ef10570440.html,)我们在“提高篇”中再详细讲述DII和DSI。

1.2.6 Object Adapter (对象适配器)

对象适配器是ORB的一部分。它主要完成对象引用的生成、维护,对象定位等功能。对象适配器有各种各样。Basic Object Adapter(BOA, 基本对象适配器)实现了对象适配器的一些核心功能。而Portable Object Adapter(POA,可移植对象适配器)则力图解决对象实现在不同厂商的ORBs下也能使用的问题。最新的ORB产品一般都支持POA。

还有其他一些专有领域的对象适配器如Database Object Adapter等。

1.3 CORBA历史

CORBA是由OMG(Object Management Group)负责制定和维护的一组规范。OMG成立于1989年,是一个非营利的国际性软件组织,主要致力于为分布式计算提供解决方案并制定规范。除CORBA外,OMG还制定了如UML(United Modeling Language, 统一建模语言)、CWM等其他重要规范。OMG目前已有世界上760多个成员,东南大学是中国唯一的OMG成员。

CORBA自1990提出并被OMG采纳以来,已历经多个版本。分别称为CORBA 1、CORBA 2和CORBA 3。其中CORBA 1是对CORBA 1.x的统称,CORBA 2是对CORBA 2.x 的统称。目前CORBA 3规范还在制订中,不久便可面世。

下面是CORBA版本的更新历史。

CORBA1 :

CORBA 1.0 90-12,提出CORBA框架

CORBA 1.1 91早期,定义了IDL及ORB Interface。

CORBA 1.2 92-93, 修订

CORBA定义了ORB的一些基本特性,但是没有定义而ORB间的通用协议。CORBA 2主要解决这一问题。

CORBA 2:

CORBA 2.0 94-12, 定义了GIOP和IIOP

CORBA 2.1 97-08

CORBA 2.2 98-02, 增加了POA。

CORBA 2.3 98-12

CORBA 2.3.1 99-10, 一些Change bars.

CORBA 2.4 00-10, 具备CORBA 3的雏形,包括:QoS Specification, Asynchronous

Messaging, Minimum CORBA, Real-Time CORBA, CORBA

Components, Notification Services, Firewall Specification等。

CORBA 2.4.1 00-11

CORBA 2.4.2 01-02

因此,可以说,CORBA 1提出ORB和IDL等CORBA基本概念,CORBA 2主要贡献是IIOP,而在制订中CORBA 3 则集中于CORBA Components技术及Real-time特性等。

对CORBA的简要介绍就到这里。关于OMG及CORBA的更多信息,可访问OMG站点:

https://www.doczj.com/doc/ef10570440.html,.

下面我们开始编写第一个CORBA程序。

2 使用Orbix 2000编写第一个CORBA程序

在编写CORBA程序前,需要安装CORBA环境。提供CORBA产品的厂商有很多,这里我们采用IONA公司的Orbix 2000。IONA公司在CORBA领域一直处于领先地位,其产品几乎总是和CORBA规范同时出台。Orbix 2000是IONA公司2001年2月发布的最新产品,它具有Real-time特性,而这正是CORBA在电信领域应用的最关键的特性之一。

而程序设计语言采用JAVA。其开发环境为JBuilder 4. JBuilder 4 是Enterprise 公司(原著名的Boland公司)推出的最新JAVA集成开发环境,其内嵌JDK 1.3。

2.1 安装环境

你需要安装JAVA和CORBA ORB环境,前者使用JBuilder 4, 后者使用Orbix 2000。操作系统建议使用Windows 2000(Professional or Server),因为我们后面所讲的一些配置工作是基于Windows 2000,和Windows 98稍有区别。另外,Windows 2000也更为稳定。

2.1.1 安装Java

Orbix 2000需要一个JDK环境。如果你安装了JBuilder 4,可以直接使用其所带的JDK1.3。否则,你需要单独安装一个JDK。JDK是免费的,你可以下载一个较新的版本。

JBuilder 4不是必需的。但我们建议你使用它,因为JBuilder 4 支持CORBA程序的编写,除了能使用其自身的Visibroker(Enterprise公司自己的ORB)外,通过配置,还可直接使用Orbix。这对提高我们的开发效率是很有帮助的。

2.1.2 安装Orbix 2000

Orbix 2000安装很简单,按照安装步骤进行即可。但要注意以下几点:

尽量按缺省方式,这样可以省去不少配置上的麻烦。如安装路径使用C:\Program Files\IONA;使用典型安装等。(下载源码就到源码网:https://www.doczj.com/doc/ef10570440.html,)Orbix 2000同时支持JAVA和C,还带有一个COMet Development Kit。只需安装Orbix 2000 v1.2 Java Development Kit即可。

图 2.1 安装Orbix 2000 for Java

安装过程中,会提示输入JDK的路径,所以,最好先安装JAVA。假设JBuilder 4安装在C:\JBuilder 4 目录下,那么,在提示框中输入C:\JBuilder 4\jdk1.3。

Orbix 2000需要license。License.txt文件中包含有所需的license.txt, 告诉安装程序这个文件所在的位置,安装程序会自动读取并安装所需的license。

图 2.2 安装license

最后,安装程序会做一些配置工作,为使配置生效,你需要重启机器。

2.1.3 配置Orbix 2000

为使Orbix 2000能正常工作,还需要做一些额外的配置工作,主要是设置一些必需的环境变量。这里以Windows 2000为例。(Windows 98中需要在autoexec.bat中用相应命令设置。)

打开Windows的控制面板,找到“System‖-―Advanced‖-―Environment Variables‖,如图2.3所示。

图 2.3 配置环境变量

―Environment Variables‖分为两部分:“User variables”和“System variables”。

(以下标*的环境参数是需要用户自己配置的。其他参数安装程序会自动配置,但由于安装不得当或其他原因,也可能不正确,这里列出来,对照检查一遍是否都正确。另外,我们假设程序安装在C:\Program Files\IONA目录下,如果不是,作相应改变。)

1. User variables:

1)CLASSPATH(*)

在CLASSPATH的末尾添加以下路径:

C:\Program Files\IONA\orbix_art\1.2\localhost; .\;.\classes

(添加的部分与前面部分用分号;隔开,下同)

it_javac, it_java工具会在运行时添加C:\Program Files\IONA\orbix_art\1.2\classes, 所以不必在这里设置。增加当前目录.\ 和.\classes会对你工作带来便利。

2)PATH

在末尾增加C:\Program Files\IONA\bin

这样你可以在任何目录运行Orbix2000的命令了。

2.System variables:

1)IT_PRODUCT_DIR (*)

如果没有IT_PRODUCT_DIR,单击‖new‖按钮,添加它,其值设置为C:\Program Files\IONA,也即程序安装路径。这个参数非常重要,Orbix自动设置其他关于目录的参数时都基于它。

2)JAVA_HOME (*)

添加JAVA_HOME,设置为C:\JBuilder4\jdk1.3,或其他JDK路径。it_javac和it_java 的运行需要它。

3)PATH

增加C:\Program Files\IONA\bin

User variables 和System variables中只需设置一个就行,当然都设置也无妨。

4)IT_IDL_CONFIG_FILE(*)

idl compiler工具需要这个参数,添加这个参数,设置为C:\Program Files\IONA\orbix_art\1.2\etc

在开始编程之前,请确保上述设置是正确的。当你使用命令行方式时,如果你改变了设置,为使改变生效,需要重新开一个DOS窗口,然后在此窗口下操作,但不必重启机器。

2.2 编写第一个CORBA程序

2.2.1 命令行方式

我们先介绍在命令行方式下的开发步骤,编写一些小型的测试程序可以使用这种方式,因为没有必要启动庞大的JBuilder 4。后面我们再介绍在JBuilder 4集成开发环境下的使用方法。实际上两者步骤是类似的,只是方便程度不一样。

通常,开发一个CORBA应用的大致步骤如下:

1)定义IDL。

2)用IDL complier 将IDL编译成Client Stub 代码和Server Skeleton代码。

3)编写Server方的实现(Implementation)代码。

4)编写Server。

5)编写Client。

6)编译和调试。

7)运行程序。

编写Server Implementation和编写Server不是一回事。Server和Client都是带有main()函数的可执行的程序。但Server Implementation 是对interface的实现,它可以单独放在一个.java文件中,也可以和Server放在同一个文件中。

下面以一个简单的例子详细讲解各个步骤。

第一步:定义IDL

首先建立一个工作目录,这里假设为D:\mywork\simpleDemo。

然后编写IDL。这个例子我们使用1.2.1 节中grid.idl,一个对二维数组操作的例子。可以使用任何文本编辑器编写,如UltraEdit等。之后保存到D:\mywork\simpleDemo下。

grid.idl定义了一个接口interface grid。其中定义两个方法get()和set(),用以获取和设置数组元素值。注意属性(attribute)的定义,这是C和JAVA中没有的概念(在Delphi中有这个概念),实际上它就相当于类的数据定义,但在映射到Java时被映射成方法。

第二步:编译IDL 为Java Stub和Skeleton.

打开DOS窗口,进入到D:\mywork\simpleDemo目录,在Dos命令提示符下键入:idl –jbase –jpoa grid.idl

参数-jbase表示生成java stub code,参数–jpoa 表示生成java skeleton code,在Orbix 2000中,骨架代码使用POA方式。

缺省情况下idl编译器会创建一个java_output的目录,如果idl中有module定义,还会生成与此module同名的子目录,并将编译后生成的.java程序放在此目录中。

你可以开关参数控制编译方式,例如,如果想将客户stub和服务器skeleton代码分开,可以键入:

idl –jbase:-Oclient grid.idl

idl –jpoa:-Oserver grid.idl

-O 参数控制输出目录。编译器会自动生成client和server目录,并将代码分别放在这目录中。

我们知道,idl编译器会将module映射成package,缺省情况下,module simpleDemo 映射成package simpleDemo。如果想自己控制package的生成,例如要生成package demos.simpleDemo 形式的包,可以:

idl –jbase:-Oclient –jbase:-Pdemos grid.idl

编译器会在module指定的包前再加上-P参数指定的包前缀,即生成package demos.simpleDemo。注意不要写成-Pdemos.simpleDemo,否则会生成package demos.simpleDemo.simpleDemo。

附录B中列出了idl命令的用法。

注意,

我们看看idl生成的stub和skeleton代码。

Stub Code包含以下文件:

grid.java 定义了接口interface grid,

public interface grid

extends gridOperations,

org.omg.CORBA.Object,

org.omg.CORBA.portable.IDLEntity

{

}

直接由grid.idl中的interface grid 映射而来。

_gridStub.java 桩代码,定义了class _gridStub

public class _gridStub

extends org.omg.CORBA.portable.ObjectImpl

implements grid{

public void set(){…} ;

pubic int get(){..};

…}

class _gridStub中实现了客户方的set()和get()等方法,它

们封装了ORB的功能,截取客户的调用,执行

Marshaling/Unmarshing等操作,最终得到调用结果。也就

是说,在客户方声明一个grid类型的对象,实际上使用

gridHelper操作得到的是一个_gridStub类型的实例,调用

grid上的方法实际上是调用_gridStub上的方法。

gridHelper.java 定义public class gridHelper{ }

帮助客户方grid对象生成一个_gridStub类型的实例,同时

得到服务器对象的引用。

gridHolder.java 定义public final class gridHolder

implements org.omg.CORBA.portable.Streamable{}

当需要处理out,inout类型的参数时,需要这个类。

gridOperations.java 定义public interface gridOperations{

void set()

int get() }

这个接口实际上是Server使用的。当客户方需要使用

callback功能时,也需要这个接口。

Skeleton Code则包含以下文件:

gridPOA.java 定义类abstract public class gridPOA

extends org.omg.PortableServer.Servant

implements org.omg.CORBA.portable.InvokeHandler,

gridOperations

{

}

Server方的Implementation代码直接继承自这个类。

gridPOATie.java 定义类public class gridPOATie

extends simpleDemo.gridPOA

{

}

当使用代理方式而不是继承方式创建Server Object时,

使用这个类。

-jpoa 参数只生成上述两个文件,实际上Skeleton Code也包含gridOperations.java,因为class gridPOA就是实现gridOperations的。

上述接口(类)的继承关系如下:

gridOperations

grid

_gridStub gridPOA gridImpl

grid.idl中只定义了一个interface grid,实际上如果定义了多个interface, 那么对每个interface都会生成和上面类似的一套代码。

第三步:编写Server方的Implementation代码(即编写Servant)

到现在为止,我们才开始真正编写代码。

引入了POA概念后,Server方的实现对象称为Servant, 编写Implementation代码实际上就是对IDL定义的每个interface,都编写一个Servant,其中要现实interface中定义的每个方法。.

这里我们将Servant类定义为class gridImpl,类名字可以自己随便取,通常都命名为xxxImpl的形式。Class gridImpl直接继承自gridPOA。

在D:\mywork\simpleDemo目录下创建一个gridImpl.java文件,内容如下:

package simpleDemo;

public class gridImpl extends gridPOA{

short m_height; // store the height

short m_width; // store the width

int m_array[][]; // a 2D array to hold the grid data

private int i=0;

private int j=0;

private int n=0;

public gridImpl(short width, short height)

{

m_array = new int[width][height]; // allocate the 2D array

m_height = height; // set up height

m_width = width; // set up width

}

/*

* Implementation of the method which reads the height attribute

*/

public short height()

{

return m_height;

}

/*

* Implementation of the method which reads the width attribute

*/

public short width()

{

return m_width;

}

/*

* Implementation of the set operation

*/

public void set (short x, short y, int value)

{

i++;

n++;

System.out.println ("-----μú "+n+" ′?μ÷ó? Server / μú "+i+" ′?μ÷ó? grid.set()----");

System.out.println ("In grid.set() x = " + x);

System.out.println ("In grid.set() y = " + y);

System.out.println ("In grid.set() value = " + value);

m_array[y][x] = value;

}

/*

* Implementation of the get operation

*/

public int get (short x, short y)

{

j++;

n++;

System.out.println ("-----μú "+n+" ′?μ÷ó? Server / μú "+j+" ′?μ÷ó?: grid.get()----");

int value = m_array[y][x];

System.out.println ("In grid.get() x = " + x);

System.out.println ("In grid.get() y = " + y);

System.out.println ("In grid.get() value = " + value);

return value;

}

}

编写好Implementation代码后,实际上你就可以编译了。使用it_javac 命令进行编译。在编译gridImpl.java之前,请先编译idl生成的stub和skeleton代码。

1)转到D:\mywork\simpleDemo,用mkdir classes建立一个目录d:\mywork\simpleDeom\classes, 我们编译后的class文件都放在这个目录下。

2)编译桩和骨架代码。转到D:\mywork\simpleDemo\java_output\simpleDemo目录,键入命令:

it_javac –d d:\mywork\simpleDemo\classes *.java

(-d 参数指明编译后的class文件的输出目录,因为.java中指定了包名

simpleDemo,会自动创建一个simpleDemo子目录,.class文件放在此子目录

中。)

3)编译gridImpl.java。转到D:\mywork\simpleDemo, 键入命令:

it_javac –classpath .\classes –d classes gridImpl.java。

(-classpath 指明gridImpl.java要用到的其他类文件,因为gridImpl.java中

用到了骨架文件中的类,也即第2)步所编译的文件,所以需要用-classpath

指明。)

键入it_javac可以查看此命令的帮助。it_javac实际上还是调用jdk的javac进行编译的,需要用参数JAVA_HOME指定,这是为什么我们要对JAVA_HOME进行配置的原因。因此改变JAVA_HOME就可改变使用的javac编译器,非常方便。

使用it_javac而不直接使用javac的另一好处是it_javac会自动在原有CLASSPATH环境变量后加上CORBA所需的类库又不改变原有CLASSPATH的值(所以我们不需在环境变量中对CLASSPATH做orbix2000的类库设置,而只需做其他设置),同时用户还可以用-classpath 指定额外的class路径而不会覆盖已有的CLASSPATH值。it_javac会将这些值全部传递给JAVA_HOME指定的javac编译器。

第四步:编写Server

Servant仅是实现代码,而Server是包含main()函数的可执行的代码。Server的主要任务就是创建所需的Servant,同时通知POA已准备就绪,可以接受客户方的请求。

新建一个文件gridServer.java,放在D:\mywork\simpleDemo下,代码如下:package simpleDemo;

import java.io.*;

import org.omg.CORBA.*;

import org.omg.PortableServer.*;

public class gridServer {

public static ORB global_orb;

public static void main(String[] args) {

final short width = 100;

final short height = 100;

// 1. Initalise ORB for an application and resolve RootPOA reference try{

System.out.println("Initializing the ORB");

global_orb = ORB.init (args,null);

org.omg.CORBA.Object poa_obj = global_orb.resolve_initial_references("RootPOA");

org.omg.PortableServer.POA root_poa = org.omg.PortableServer.POAHelper.narrow(poa_obj);

// 2. Create servants, activate them, write their IORs to files.

//

System.out.println("Creating objects");

gridImpl grid=new gridImpl(width,height);

byte[] grid_oid = root_poa.activate_object(grid);

export_object(root_poa, grid_oid, "../grid.ior", gridHelper.id());

// 3. Activate the POA Manager to allow new requests to arrive

//

System.out.println("Activating the POA Manager");

org.omg.PortableServer.POAManager poa_manager = root_poa.the_POAManager();

poa_manager.activate();

// 4. Give control to the ORB to let it process incoming requests

//

System.out.println("Giving control to the ORB to process requests");

global_orb.run();

System.out.println ("Done");

}

catch(org.omg.CORBA.ORBPackage.InvalidName ex)

{

System.out.println("Failed to obtain root poa " + ex );

}

catch(org.omg.PortableServer.POAPackage.WrongPolicy ex)

{

System.out.println("Invalid POA policy " + ex );

}

catch(org.omg.PortableServer.POAPackage.ServantAlreadyActive ex) {

System.out.println("POA servant already active " + ex );

}

catch(org.omg.PortableServer.POAManagerPackage.AdapterInactive ex) {

System.out.println("POAManager activate failed" + ex );

}

System.out.println("gridServer exiting...");

}

/**

* This function takes a poa and object id, builds an object

* reference representing that object, and exports the object

* reference to a file.

*/

public static void export_object(POA poa, byte[] oid, String filename, String type_id)

{

try

{

org.omg.CORBA.Object ref = poa.create_reference_with_id(oid, type_id);

String stringified_ref = global_orb.object_to_string(ref);

RandomAccessFile FileStream = null;

try

{

FileStream = new RandomAccessFile(filename,"rw");

FileStream.writeBytes(stringified_ref);

FileStream.close();

}

catch(Exception ex)

{

System.out.println("Failed to write to " + filename );

}

}

catch(org.omg.PortableServer.POAPackage.WrongPolicy ex)

{

System.out.println("Invalid POA policy " + ex );

}

}

}

通常,一个Server主程序执行以下几个步骤:

1)初始化ORB;

2)创建Servant对象;

3)激活POA管理器;

4)通知ORB准备接受请求。

只有第二步是需要用户编写的,其他步骤所有Server程序都大致一样。在创建Servant 对象后还需注册其引用,这里我们使用了将其引用保留到文件中的方法(file based)。方法export_object()用来完成这一个工作,这是我们自己定义的,实际上可以作为一个通用方法使用在所有Server程序中使用。当客户方

Orbix 2000提供了两种获取对象引用的方式,一种叫file based,即读取文件的方式;一种叫Naming Service,即通常所说的命名服务。前一种方式的好处是不需要启动ORB守护进程,只需启动Server和Client两个程序就可以了。当Client需要使用获得Servant的引用时,需要从文件中读取,所以实际上当Client和Server在同一台机器上时才是可行的,在真正跨机器、跨平台的分布式应用中,通常使用Naming Servic,它的不足是需要启动Naming Service守护进程,这对其健壮性要求很高,可能成为系统瓶颈。

第五步:编写Client

Client程序就是客户方的可执行程序,它需要使用到Server方的服务。

新建一个文件gridClient.java,保存到D:\mywork\simpleDemo,源代码如下:

package simpleDemo;

import java.io.*;

import org.omg.CORBA.*;

/*

* The javaclient will connect to the Grid server and invoke

* operations enabling it to manipulate a 2 dimensional array. */

public class gridClient

{

public static void main (String args[])

{

System.out.println ("The Client begin...\n");

ORB orb=null;

grid gridProxy = null;

grid gridProxy2=null;

org.omg.CORBA.Object obj_ref=null;

/*

* Initalise the ORB for an Orbix application.

*/

try {

orb=ORB.init (args,null);

/*

* Establish a CORBA connection with the grid server and * return a proxy for it.

*/

obj_ref=import_object(orb,"../grid.ior");

gridProxy = gridHelper.narrow (obj_ref);

gridProxy2 = gridHelper.narrow(obj_ref);

/*

* Get the width and height by calling the remote

* width and height operations on the grid server.

*/

short width = 0;

short height = 0;

/*

* Set some values in the remote grid.

2017年电大专科程序设计基础形考任务

电大专科程序设计基础形考任务一 1.计算机的五大主要应用领域是科学计算、数据处理、过程控制、计算机辅助系统和人工智能。 2.总线是连接CPU 、存储器和外部设备的公共信息通道。通常由三部分组成:数据总线、地址总线、控制总线。 3.计算机是一类智能机器,这是因为它除了完成算术运算外,还能完成某些逻辑运算。4.世界上第一台计算机取名为ENIAC 。 5.目前制造计算机所采用的电子器件是大规模集成电路。 6.CPU 是Central Processing Unit 的英文缩写,它主要由运算器、控制器和 寄存器3 个部分组成。 7.完整的计算机系统是由硬件系统和软件系统两大部分组成的。 8.计算机的硬件系统一般可分为存储器、中央处理器、输入设备和输出设备等几个部分。 9.计算机的存储器分为内存和外存两级。 10.随机存储器和只读存储器的英文缩写分别为RAM 和ROM 。 11.系统软件是为有效利用计算机的资源、充分发挥计算机的工作潜力、保证正常运行、尽可能方便用户使用计算机而编制的软件。

12.程序是为实现一定功能,用计算机程序设计语言所编制的语句的有序集合。文档是描述程序设计的过程及程序的使用方法的有关资料。 13.图灵机是计算机的概念模型,奠定了现代计算机的理论基础;冯·诺依曼机是 计算机的结构模型,奠定了现代计算机的设计基础。 14.高级语言源程序的翻译成机器语言程序一般有两种做法: 编译方式和解释方式。15.按照使用方式,程序设计语言分为交互式语言和非交互式语言;按照应用范围 则分为通用语言和专用语言。 16.编译程序的核心部分,叫__语法分析器_______ ,其任务就是检查源程序在语法上是否_正确___ 。 二、选择题(每题2 分,合计20 分)题目2 2、当代计算机的最主要的体系结构称为是______ 。 选择一项: A.冯·诺依曼机 B.PASCAL机 C.非冯·诺依曼机 D.图灵机 3 计算机软件是指____ 。 选择一项: A.源程序选择一项: A.机器语言 B.高级语言 C.目标语言 D.汇编语言 5、显示器是____ 。选择一项: A.存储设备 B.计算设备 B.计算机程序及其有关文挡 C.源程序和目标程序 D.计算机程序 C.输出设备 D.输入设备 6、系统软件的核心软件是 _____ 选择一项: 4、计算机能直接执行的语言是 A. 编译程序

Python程序设计基础教案8--程序的分支结构

授课教案

授课教案附页 教学设计说明一、程序的三种基本结构 任何简单或复杂的算法都可以由顺序结构、选择结构和循环结构这三种基本 结构组合而成。 (1)顺序结构:程序中的各个操作是按照它们在源代码中的排列顺序依次 执行的; (2)选择结构:根据某个特定的条件进行判断后,选择其中一支执行;分 为:单项选择、双选选择和多项选择; (3)循环结构:反复执行某个或某些操作,直到条件为假或为真时才停止 循环。 二、顺序结构 顺序结构是流程控制中最简单的一种结构。 该结构的特点是按照语句的先后次序依次执行,每条语句只执行一次。 顺序结构的程序设计方法: 案例讲解: 项目实践一的前4问就是一个典型的顺序结构。 (1)根据题干要求,即要解决的问题,确定变量的个数。项目实践一用到8 个变量,分别是:姓名、班级、数学成绩、语文成绩、英语成绩、总分、平均分、 数学成绩的平方根。

(2)给变量赋值。①变量值需使用input()函数由用户通过键盘输入。涉及到5个变量:姓名、班级、数学成绩、语文成绩、英语成绩。其中三个成绩变量由于是浮点数类型,而通过input( )输入的是字符串类型,所以需要用到float( )函数进行强制类型转换。②直接给出变量的值:直接赋值或通过表达式计算。项目实践一中:总分、平均分、数学成绩的平方根这3个变量都是通过表达式计算并将计算结果直接复制给变量。 (3)输出相应的信息和计算结果。例如:输出学生的基本信息、总分、平均分、数学成绩的平方根。 三、选择结构(条件语句) 选择结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程。 三种选择语句:

西交大《程序设计基础》试题及答案

西交大《程序设计基础》试题及答案 一、单项选择题(本大题共20小题,每小题2分,共40分) 1.int a[10];合法的数组元素的最小下标值为()。A:10 B:9 C:1 D:0 答案:D 2.以下运算符中优先级最低的是()。A:&& B:& C:|| D:| 答案:C 3.若使用一维数组名作函数实参,则以下正确的说法是()。A:必须在主调函数中说明此数组的大小B:实参数组类型与形参数组类型可以不匹配C:在被调用函数中,不需要考虑形参数组的大小D:实参数组名与形参数组名必须一致答案:A 4.已知函数的调用形式:fread(buffer,size,count,fp);其中buffer 代表的是()。 A:一个整数,代表要读入的数据项总数B:一个文件指针,指向要读的文件C:一个指针,指向要读入数据的存放地址D:一个存储区,存放要读的数据项答案:C 5.对以下说明语句int a[10]={6,7,8,9,10}; 的正确理解是()。A:将5个初值依次赋给a[1]至a[5] B:将5个初值依次赋给a[0]至a[4] C:将5个初值依次赋给a[6]至a[10] D:因为数组长度与初值的个数不相同,所以此语句不正确答案:B 6.下列程序的输出结果是()。main() { int x=1,y=0,a=0,b=0; switch(x) { case 1:switch(y) { case case } case 2:a++;b++;break; case 3:a++;b++;break; } printf(\} A:a=1,b=0 B:a=2,b=1 C:a=1,b=1 D:a=2,b=2 答案:B 7.下列程序的输出结果为()。main() {int m=7,n=4; float a=38.4,b=6.4,x; x=m/2+n*a/b+1/2; printf(\ 0:a++;break; 1:b++;break; } A:27.000000 B:27.500000 C:28.000000 D:28.500000 答案:A 8.若k为int型变量,则以下程序段的执行结果是()。k=-8567; printf(\A:格式描述符不合

程序设计基础形考作业2

江苏开放大学 形成性考核作业 学号: 姓名: 课程代码: 课程名称:程序设计基础(专)评阅教师: 第 2 次任务 共 4 次任务

作业说明: 1.做作业之前首先在封面填上自己的学号和姓名,做完作业后请写上作业完成时间。 2.学习完第二单元后必须完成本次作业,并请在规定时间内通过学习平台提交Word文档形式的电子作业,本次作业占形成性考核总成绩的20%。 作业内容: 根据“学生成绩的等级评定”实训,编写一个“菜单式程序界面”的程序,程序界面的内容构成由学员设定,比如某个具体应用的程序界面:学生系统主界面,按1进入学生信息登记、按2进入学生信息查询、按3进入学生信息的更新、按4进入学生信息备份、按5退出系统等,进入每个子节目显示一行欢迎语句。 作业要求: (1)程序的源代码以及对源代码必要(主要是代码中涉及选择结构、逻辑运算符、关系运 算符的地方)的行注释。(后缀名为.c的源程序代码)(占60%) (2)测试运行结果截图。(占40%) (3)以上内容请在本文档中完成,并将本文档提交至学习平台,作为本课程第二次作业。作业回答区: #include int main(void){ int a; printf("1-学生信息登记\n"); printf("2-学生信息查询\n"); printf("3-学生信息更新\n"); printf("4-学生信息备份\n"); printf("5-退出系统\n"); printf("input integer number: "); scanf("%d",&a); switch (a){

case 1: printf("欢迎进入-学生信息登记系统\n");break; case 2: printf("欢迎进入-学生信息查询系统\n");break; case 3: printf("欢迎进入-学生信息更新系统\n");break; case 4: printf("欢迎进入-学生信息备份系统\n");break; case 5: printf("退出系统\n");break; default:printf("输入错误!\n"); } return 0; }

初二信息技术程序设计教案

第1章程序设计入门 第1节程序设计简介(2课时) 【教材内容】1计算机程序并不神秘 1.1什么是程序 1.2体验计算机程序 2程序设计语言 2.1程序设计语言分类 2.2解释与编译 3程序设计的过程 4程序与软件 【教学目标】 1.知识与技能 (1)了解程序设计的基本概念和用变成方法解决问题的一般过程 (2)了解计算机软件与程序设计的密切关系 (3)了解程序设计语言的三种类型 (4)掌握环境下编写程序的一般步骤 2.过程与方法 (1)通过实例让学生体会程序设计的基本过程与方法,理解算法思想,会用自然语言或流程图表达一些具体问题的算法。 (2)通过对现实问题的分析与解决,让学生认识到生活中到处是程序,而程序解决的往往就是生活中的现实问题,培养学生利用计算机解决实际问题的能力。 3.情感态度与价值观

(1)体验程序设计的内涵及魅力,产生对程序设计的求知欲,形成积极主动地学习态度。 (2)通过问题的分析与解决,帮助学生克服程序设计的畏难情绪,培养他们严谨、缜密、科学的程序设计作风。 【教学重难点】 程序设计的基本概念与学习程序设计的意义。 【教学方法】启发式、任务驱动、演示、实例、实践操作 【教学过程】 程序设计简介第一课时 一、问题导入,揭示教学内容 大家有没有玩过电脑游戏?有没有同学想过自己设计和编写游戏? 游戏就是程序,要想设计、制作游戏,就应该学习“设计程序”。今天我们一起来认识和了解程序,它并不神秘,相反它会给我们带来很多乐趣。 二、趣味问题,了解什么是程序 问题1:猎人带着一只狼、一头羊和一些白菜过河,但渡船太小,一次只能带一样。因为……(课件展示问题) 学生:读题、小组讨论、得出解题思路、方法讲解(自然语言描述、符号描述……) 问题2:赵本山、宋丹丹小品,如何把大象关进冰箱 学生:方法讲解(自然语言描述、……) 总结:概括来说程序是有逻辑,有顺序的步骤的组合。开电脑,走路,吃饭,上课都是一系列步骤的有序有逻辑组合。 通过这些有序的指令(自然语言、符号语言等)完成了一项具体的工作,这些指令的集合就是程序。 问题3:体验计算机程序 利用语言编写的“三角形面积”程序(课件展示问题及具体的语句)

《计算机程序设计基础》课后练习题参考答案

《计算机程序设计基础》课后练习题1 一.判断题 (1)(错)事件过程由某个用户事件或系统事件触发执行,但不能被其他过程调用。 (2)(错)若X=2, Y=5,则表达式 Y-2>X AND X+2>Y 的结果为:True。 (3)(错)常量是指在程序运行过程中其值可以改变的那些量。 (4)(错,timer没有)VB工具箱中的所有控件都具有宽度(Width)和高度(Height)属 性。 (5)(错)定义变量:Dim max,min as Single , 则max 和 min 的数据类型均为Single。 (6)(对)如果创建的菜单项的标题是一个减号“-”,则该菜单项显示为一条分隔线。 (7)(错)标准模块文件的扩展名是“*.VBP”。 (8)(错,都不能)定时器控件可以响应Click事件,但不能响应DbClick事件。 (9)(错)在默认情况下,数组下标下界的缺省值为1。 (10)(对)在使用字体对话框时,需要对其Flags属性先进行相应设置。 二.单选题 (11)在Visual Basic中,表示鼠标单击事件的是 C 。 A)Activate B)DoubleClick C)Click D)MouseDown (12)用于设置计时器时间间隔的属性是 A 。 A)Interval B)Name C)Left D)Top (13)函数Int(10*Rnd)是在 D 范围内的整数。 A)[1,10] B)[1,10] C) [0,9) D)[0,9] (14)Select case语句结构的结尾应使用 D 。 A)End B) End Case C) End Sub D) End Select (15)改变了容器的坐标系后,该容器的 A 属性值不会改变。 A)left B)scaleleft C)scaletop D)scalewidth (16)执行下列语句后,列表框中各表项顺序为 D List1.Clear For i=1 to 4 : List1.AddItem i-1,0 :Next i A)B)C)D) (17)输入对话框InputBox的返回值的类型是 A 。

程序设计基础知识点)

第三部分程序设计基础 3.1 程序、程序设计、程序设计语言的定义 ⑴程序:计算机程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。 ⑵程序设计:程序设计是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程应当包括分析、设计、编码、测试、排错等不同阶段。 ⑶程序设计语言:程序设计语言用于书写计算机程序的语言。语言的基础是一组记号和一组规则。根据规则由记号构成的记号串的总体就是语言。在程序设计语言中,这些记号串就是程序。程序设计语言有3个方面的因素,即语法、语义和语用。 3.2 高级语言和低级语言的概念及区别 ⑴高级语言:高级语言(High-level programming language)是高度封装了的编程语言,与低级语言相对。

它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示(例如汉字、不规则英文或其他外语),从而使程序编写员编写更容易,亦有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容。 ⑵低级语言:低级语言分机器语言(二进制语言)和汇编语言(符号语言),这两种语言都是面向机器的语言,和具体机器的指令系统密切相关。机器语言用指令代码编写程序,而符号语言用指令助记符来编写程序。 ⑶区别: 高级语言:实现效率高,执行效率低,对硬件的可控性弱,目标代码大,可维护性好,可移植性好低级语言:实现效率低,执行效率高,对硬件的可控性强,目标代码小,可维护性差,可移植性差 了解知识:CPU运行的是二进制指令,所有的语言编写的程序最终都要翻译成二进制代码。越低级的语言,形式上越接近机器指令,汇编语言就是与机器指令一一对应的。而越高级的语言,一条语句对应的指令数越多,其中原因就是高级语言对底层操作进行了抽象和封装,

2017年电大专科程序设计基础形考任务

二、选择题(每题2分,合计20分) 题目 2 2、当代计算机的最主要的体系结构称为是______。 选择一项: A. 冯·诺依曼机 B. PASCAL 机 C. 非冯·诺依曼机 D. 图灵机 3计算机软件是指______ 。 选择一项: A. 源程序 B. 计算机程序及其有关文挡 C. 源程序和目标程序 D. 计算机程序 4、计算机能直接执行的语言是______。 选择一项: A. 机器语言 B. 高级语言 C. 目标语言 D. 汇编语言 5、显示器是______。 选择一项: A. 存储设备 B. 计算设备 C. 输出设备 D. 输入设备 6、系统软件的核心软件是______。 选择一项: A. 编译程序

B. 机器语言 C. 操作系统 D. 汇编程序 7、要保证程序在多次反复使用过程中不发生错误,关键应该提高程序的______。 选择一项: A. 正确性 B. 可靠性 C. 可维护性 D. 有效性 8、汇编语言属于______。 选择一项: A. 过程式语言 B. 逻辑语言 C. 函数式语言 D. 非过程式语言 9、要编写高质量的程序,判断程序质量的首要标准是程序的_____①______,要保证程序在多次反复使用过程不发生错误,应该保证程序的_____②______。 选择一项: A. ①可靠性②有效性 B. ①有效性② 正确性 C. ①正确性②可靠性 10、编译程序的实现算法较为复杂,但它可以产生高效运行的____①______程序,因此更适合翻译那些规模较大、结构较复杂、需要较长运行时间的_____②______ 程序。 选择一项: A. ① 目标② 应用 B. ① 执行② 复杂 C. ①可执行代码② 系统 11、高级语言源程序的翻译有两种方式,对程序逐句进行分析并立即执行的这种方式为_____①_______,另一种是需要把程序先转化为目标代码再装入内存运行,这种方式为______②______。 选择一项: A. ①解释②编译 B. ①编译②解释 C. ①翻译②解释

程序设计基础练习题(全答案版)

《程序设计基础——C#.NET》练习 参考答案: 一、选择题 https://www.doczj.com/doc/ef10570440.html,的目的就是将____A____作为新一代操作系统的基础,对互联网的设计思想进行扩展。A.互联网 B. Windows C. C# D. 网络操作系统 2.假设变量x的值为10,要输出x值,下列正确的语句是__C__。 A.System.Console.writeline(“x”) B. System.Cosole.WriteLine(“x”) C. System.Console.WriteLine(“x={0}”,x) D. System.Console.WriteLine(“x={x}”) 3.要退出应用程序的执行,应执行下列的_A___语句。 A. Application.Exit(); B. Application.Exit; C. Application.Close(); D. Application.Close; 4.关于C#程序的书写,下列不正确的说法是__D________。 A.区分大小写 B.一行可以写多条语句 C.一条语句可以写成多行 D.一个类中只能有一个Main()方法,因此多个类中可以有多个Main()方法 5. 在C#语言中,下列能够作为变量名的是__C__。 A.if B. 3ab C. b_3a D. a-bc 7. 能正确表示逻辑关系“a≥5或a≤0”的C#语言表达方式是__D__。 A.a>=5 or a<=0 B. a>=5|a<=0 C. a>=5&&a<=0 D. a>=5||a<=0 8. 以下程序的输出结果是___C_____。 A. 5 B. 4 C. 6 D. 不确定 9. If语句后面的表达式应该是__A___。 A.逻辑表达式 B. 条件表达式 C. 算术表达式 D. 任意表达式10.有如下程序:

C#程序设计基础教程与实训习题答案

附录Ⅰ各章习题答案 第1章C#语言概述 一、判断题 1、√ 2、× 3、√ 4、× 5、√ 6、√ 7、× 8、× 二、选择题 1、C 2、B 3、C 4、A 5、A 6、B 7、B 8、B 三、填空题 1、最新的;面向对象 2、C和C++;JA V A 3、先进设计思想;安全性能 4、灵活性 5、集成开发环境(IDE)——Visual https://www.doczj.com/doc/ef10570440.html, 6、Microsoft .NET Framework(微软.NET框架体系) 7、最基本的通用语言运行时库CLR(Common Language Runtime);一些提供了具体功能的类库 8、需要开发和设计的项目文件;应用程序或组件 四、简答题 1、①简洁易用的语法。②自动的资源回收机制。③与Web的紧密结合。④完整的安全性与错误处理。⑤版本处理技术。⑥灵活性和兼容性。 2、C#程序必须包含一个Main方法,Main方法是程序的入口点,程序控制在该方法中开始和结束。该方法用来执行任务,并在任务完成后返回信息。 第2章常用标准控件 一、判断题 1、× 2、× 3、√ 4、× 5、√ 6、× 7、√ 8、√ 二、选择题 1、A 2、C 3、B 4、D 5、A 6、B 7、B 8、D 三、填空题 1、输入/输出信息 2、属性 3、事件 4、TextAlign 5、Click 6、文本框(TextBox) 7、保证数据标准化 8、Show 四、简答题 1、简述生成控件的操作过程。 (1)单击工具箱中相应的工具按钮,这一按钮呈现被按下状态,表明被选定。 (2)移动鼠标到窗体上,这时鼠标的指针变成十字形,在需要放置控件的左上角位置按下鼠标左键。 (3)在窗体范围内向下向右拖动鼠标,这时窗体上会显示一个矩形框,当其大小合适时,松开鼠标左键,窗体上就会显示一个相应大小的这种控件。 另外一种快捷的方法是在工具箱中相应的工具按钮上双击此按钮,窗体上就会出现一个系统默认大小的所选按钮。 2、消息框有多少种Button参数设置? OK:只显示“确定”按钮 OKCancel:显示“确定”和“取消”按钮 AbortRetryIgnore:显示“终止”、“重试”和“忽略”按钮 YesNoCancel:显示“是”、“否”和“取消”

2019国开电大《程序设计基础》形考任务4答案

程序设计基础形考任务4: 1.算法的四种基本操作是逻辑运算、算数运算、数据比较、数据传送。 2.算法的控制结构有三种基本形式:顺序结构、选择结构、循环结构。 3.评价算法需要从几个不同的角度考虑,最主要的是正确性和运行效率。 4.算法的运行效率包括两方面,算法的时间复杂度和算法的空间复杂度。 5.结构化程序设计的总体思想是采用模块化结构,自顶向下、逐步求精。 6. 软件生存周期包括软件的定义、软件的开发和软件使用与维护3个部分。 7. 软件定义时期主要包括可行性研究和需求分析两个阶段。 8.软件开发时期是具体设计和实现在前一时期定义的软件,它由软件的设计阶段、实现阶段、集成阶段组成。 9.软件工程的目标是可概括为生产具有正确性、可用性以及开销合宜的产品。 10.软件开发模型大体上可分为两种类型,第一种是以软件需求完全确定为前提的瀑布模型。第二种是在软件开发初始阶段只能提供基本需求时采用的渐进式开发模型。 二、选择题(每题4分,合计40分) 2下列叙述中正确的是_____。 选择一项: A. 算法就是程序 B. 设计算法时只需要考虑结果的可靠性

C. 以上三种说法都不对 D. 设计算法时只需要考虑数据结构的设计 3下列叙述中正确的是_____。 选择一项: A. 一个算法的空间复杂度大,则其时间复杂度也必定大 B. 以上三种说法都不对 C. 一个算法的空间复杂度大,则其时间复杂度必定小 D. 一个算法的时间复杂度大,则其空间复杂度必定小 4一个算法应该具有“确定性”等5个特性,下面对另外4个特性的描述中错误的是()。选择一项: A. 有零个或多个输入 B. 可行性 C. 有穷性 D. 有零个或多个输出 5下面叙述正确的是()。 选择一项: A. 算法的时间复杂度是指执行算法所需要的计算工作量 B. 算法的效率只与问题的规模有关,而与数据的存储结构无关 C. 数据的逻辑结构与存储结构是一一对应的 D. 算法的时间复杂度与空间复杂度一定相关 6那一项不属于算法的四种基本的功能操作( ) 。

计算机程序设计基础习题册含答案

《计算机程序设计基础》 计算机程序设 计基础_基础知识(一) 班级 学号 姓名 成 绩 一、 单选题 习题册

1.C++源程序文件的默认扩展名为A。 2.A) cpp B) exe C) obj D) lik 3.由C++源程序文件编译而成的目标文件的默认扩展名为C。 4.A) cpp B) exe C) obj D) lik 5.由C++目标文件连接而成的可执行文件的默认扩展名为B。 6.A) cpp B) exe C) obj D) lik 7.编写C++程序一般需经过的几个步骤依次是B。 8.A)编译、编辑、连接、调试 B)编辑、编译、连接、调试 C)编译、调试、编辑、连接 D)编辑、调试、编辑、连接9.程序中主函数的名字为 A 。 10.A) main B) MAIN C) Main D) 任意标识 符 11.下面四个选项中,均是不合法的 用户标识符的选项的是 C。 12.A) A p_o do B)float lao _A C)b-a goto int D)_123 temp INT 13.下列变量名中合法的是 C。 14.A) B)C)Tom B) 3a66 C) _6a7b D) $ABC 15.存储以下数据,占用存储字节最 多的是 D 。 16.A) 0 B) ‘0’

C) “0” D) 17.在C++语言中,字符型数据在内存中的存储形式是D。 18.A) 补码 B) 反码 C) 原码 D) ASCII码 19.若有说明语句:char c =’\072’;则变量c A。 20.A) 包含1个字符 B) 包含2个字符 C) 包含3个字符 D) 说明不合法,变量的值不确定 二、填空题 1.C++头文件和源程序文件的扩展名分别为.h和.cpp 。 2.C++语言规定,标识符只能由字母、数字、下划线三种字符组成,而且第一个字符必须是字母或下划线。 3.一条表达式语句必须以__分号_;___作为结束符。 4.用于从键盘上为变量输入值的标准输入流对象是___cin____;用于输出表达式值的标准输出流对象是__cout____。 5.在一个C++程序文件中,若要包含另外一个头文件或程序文件,则应使用以_#include___标识符开始的预处理命令 计算机程序设计基础_基础知识(二) 班级学号姓名成绩 一、单选题 1.下列哪一个是C++语言中合法的变量 C A) 8ZSe B) ±A0 C) X0_2 D) ’x0’2.已知ch是字符型变量,下面不正确的赋值语句是A 3.A) ch='a+b' B) ch='\0'

Html5程序设计基础教程

第1章HTML 5概述 一、选择题 1.A 2.D 3.C 4.C 二、填空题 1.HyperText Markup Language 2. 3.HTML 4.UTF-8 5.

6.contextmenu 7.async 8.
9.Geolocation API 10.Web Workers 三、简答题 1.答:
标签用于定义文档中的区段。
标签用于定义文档的页眉(介绍信息)。
标签用于定义区段(section)或文档的页脚。通常,该元素包含作者的姓名、文档的创作日期或者联系方式等信息。
相关文档 最新文档