面向对象方法题库1-0-5

合集下载

面向对象试题(标准答案)

面向对象试题(标准答案)

CoreJavaOOP考试题考试时间:90分钟考试总分:100分一、选择题(不定项选择)(22*4=88)1.类A,B的定义如下:class A {private int a = 100;A() {System.out.print("A()");System.out.println(a);}}class B extends A {private int a = 200;B() {System.out.print("B()");System.out.println(a);}}运行下面的代码:new B();输出的结果是:(A )。

A.A() 100B() 200B.A() 200B() 200C.B() 200A() 100D.B() 200A() 2002.下列说法正确的是(D )A.所有类都必须定义构造方法(构造器)B.构造方法必须初始化类的所有数据成员C.子类定义了构造器后,不再调用父类的构造器D.构造方法可以访问类的非静态成员3.在Java中,哪个关键字使类不能派生子类?, (A )A : finalB : publicC : privateD : native4.class Base{static void test(){System.out.println(“Base.test()”);}}public class Child extends Base{static void test(){System.out.println(“Child.test()”);}public static void main(String[] args){Base base = new Child();Child child = new Child();base.test();child.test();}}程序运行的结果是( C )A.Child.test() Child.test()B.Child.test() Base.test()C.Base.test() Child.test()D.Base.test() Base.test()5.下列哪些叙述是正确的(CD )A.在一个类中,方法不能与类名相同B.a bstract 可以修饰属性、方法和类C.实例方法可直接调用本类的static方法和非static方法D.static方法不能调用非static方法6.以下说法正确的是(ABC)A.子类不能继承父类的构造方法B.子类的构造方法可以访问父类的构造方法C.子类不可直接访问父类的私有属性D.子类可以重写父类的所有方法7.分析选项中关于Java中this关键字的说法正确的是( A )A.this关键字是在对象内部指代自身的引用B.this关键字可以在类中的任何位置使用C.this关键字和类关联,而不是和特定的对象关联D.同一个类的不同对象共用一个this8 下列关于继承的说法哪个是正确的?( B )A.子类只继承父类public方法和属性B.子类继承父类的非私有属性和方法C.子类只继承父类的方法,而不继承父类的属性D.子类将继承父类的所有属性和方法9.在Java中,关于final关键字的说法正确的是(AC )A.final修饰的变量,一旦赋值就不能被更改B.final修饰的类只能被一个子类继承C.final修饰的方法,不能在子类中被覆盖D.final修饰的方法,不能被子类继承10. String s=new String(“xyz”)创建了几个对象(C);A. 0B. 1C. 2D. 311.下列语句的序列执行后,k的值是( B )int m=3,n=6,k=0;While((m++)<(--n))++k;A.0B.1C.2D.312.下列哪一项不是面向对象的典型特征(D )A.封装 B.继承C. 多态D.抽象13.(多选)在java中,关于构造方法,下列说法正确的是(ABD )A.构造方法的名称必须与类名相同B.构造方法可以带参数C.构造方法不可以重载D.构造方法绝对不能有返回值14.下面关于变量的说法正确的是(BC )A.实例变量可以通过类名直接调用B.类变量可以通过类名直接调用C. Java中的参数传递都是值传递D. 在不同的作用域不能定义相同的变量15.下列代码有编译错误的是第(C )行1)public class Test{2)public static void main(String[] args){3)int[] arr1 = new int[12];4)char[] arr2 = new char[];5)int[] arr3 = {};6)Object[] obj = new Object[4];7)Object obj1 = new object[9];8)}9)}A.5)B.5) 7)C.4) 7)D.4)16.下列代码的运行结果是(A )public class Test{private int num;private static Test test;public Test(int num){this.num = ++ num;}static{int num = 16;test = new Test(num);++ test.num;}public static void main(String[] args){test = new Test(13);System.out.println(test.num);}}A.14B.15C.16D.1717.仔细分析下列代码,请指出错误的行(D )。

面向对象程序设计(java)题库

面向对象程序设计(java)题库

面向对象程序设计(java)题库抽题规范:(1)此题库共75道题,抽8道作为期末考试题。

其中,易8道,较易33道,较难18道,容易16道.(2)按题型,第一大题抽4道,每道10分;第二大题抽2道,每道10分;第三大题抽1道,每道20分后;第四大题扣1道,每道20分后。

(3)按难易程度:易(1道)、较易(4道)、较难(2道)、难(1道)。

一、答疑题(共40道,扣4道,每道10分后,共40分后)1.面向对象有哪三大特征?封装,继承,多态.2.什么是类?(易)类就是定义同一类所有对象的变量和方法的蓝图或原型。

3.什么就是对象?对象是类的实例;对象是通过newclassname产生的,用来调用类的方法;类的构造方法.。

4.类和对象的区别是什么?java中的类就是模板,而对象就是依据模板产生的实体5.详述java的PCB性,如何在java中同时实现PCB封装性是指的把代码封装到大括号中,只能访问自己内部的数据,外边的东西访问不了。

实现为加访问权限。

6.构造方法有哪些特点方法名与类名相同,没返回值,可以存有多个空载。

7.构造方法的促进作用就是什么?(更易)初始化对象,就是你new一个类的时候可以很方便的给你的对象里的属性赋值。

8.this在程序中所代表的意思(易)指当前对象9承继的促进作用就是什么?(极易)同时实现代码F83E43Se。

10.java支持多继承吗?(易)不能。

11.子类可以承继父类的哪些成员?(较难)变量和构造方法。

12.简述构造子类对象时子类和父类构造方法执行顺序(较易)先执行父类再执行子类。

13.什么就是方法的空载,如何挑选被空载的方法?(更易)同一个类中如果同时存在两个以上的方法有同一个名字,在这种情况下,我们说方法被重载了,这个过程被称为重载。

14什么就是方法的改写,如何挑选被改写的方法?(较难)当同名方法同时存在于子类和父类中时,对于子类来说就是将继承父亲的方法重载写过了,实现功能完全和父类无关。

Java面向对象测试题(一)

Java面向对象测试题(一)

Java面向对象测试题(一)注:测试时间:3小时编程题在电脑上编写,保存在已学生名字为文件名的文件夹中一、选择题(共30分,每题1分<多选、少选、错选不得分>)1、下面有关Java异常处理模型的说法错误的是()。

a)一个try块只能有一条catch语句b)一个try块中可以不使用catch语句c)Catch块不能单独使用,必须始终与try块在一起d)Finally块不能单独使用,必须始终与try块在一起2、下列选项中关于Java中super关键字的说法错误的是()。

a)super关键字是在子类对象内部指代其父类对象的引用b)super关键字不仅可以指代子类的直接父类,还可以指代父类的父类c)子类可以通过super关键字调用父类的方法d)子类可以通过super关键字调用父类的属性3、下列选项中关于Java中this关键字的说法错误的是()。

a)this是在对象内部指代对象自身的引用b)this关键字可以在类中的任何位置使用c)this只和特定的对象关联,而不和类关联d)同一个类的不同对象有不同的this4、在Java中,Object类是所有类的父亲,用户自定义类默认扩展自Object类,下列选项中的()方法不属于Object类的方法。

a)equals(Object obj)b)getClass()c)toString()d)trim()5、给定如下Java代码,关于super的用法,以下描述正确的是()。

class C extends B{public C(){super();}}a)用来调用类B中定义的super()方法b)用来调用类C中定义的super()方法c)用来调用类B的无参构造方法d)用来调用类B中第一个出现的构造方法6、在Java中,有如下两个类Student和Person。

如果Student是Person的子类,则下列声明对象x的语句中错误的是()。

a)Person x = new Student()b)Person x = new Person()c)Student x = new Person()d)Student x = new Student()7、下列对Java中的继承描述错误的说法是()。

面向对象程序设计考试题库

面向对象程序设计考试题库

面向对象程序设计期末综合练习一(单选题)单选题1. C++源程序文件的缺省扩展名为( )。

A. cppB. exeC. objD. lik2. 由C++源程序文件编译而成的目标文件的缺省扩展名为( )。

A. cppB. exeC. objD. lik3. 由C++目标文件连接而成的可执行文件的缺省扩展名为( )。

A. cppB. exeC. objD. lik4. 编写C++程序一般需经过的几个步骤依次是( )。

A. 编译、编辑、连接、调试B. 编辑、编译、连接、调试C. 编译、调试、编辑、连接D. 编辑、调试、编辑、连接5. 以下标识符中不全是保留字的是( )。

A. case for intB. default then whileC. bool class longD. goto return char6. 能作为C++程序的基本单位是( )。

A. 字符B. 语句C. 函数D. 源程序文件7. 程序中主函数的名字为( )。

A. mainB. MAINC. MainD. 任意标识符8. C++程序的基本模块为( )。

A. 表达式B. 标识符C. 语句D. 函数9. 可用作C++语言用户标识符的一组标识符是( )。

A. void define +WORDB. a3_b3 _123 YNC. for -abc CaseD. 2a DO sizeof10. 存储以下数据,占用存储字节最多的是( )。

A. 0B. ‘0’C. “0”D. 0.011. 程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用( )符号作为分隔符。

A. 空格或逗号B. 逗号或回车C. 逗号或分号D. 空格或回车12. 设”int a=12;”,则执行完语句”a+=a*a;”后,a 的值是( )。

A. 12B. 144C. 156D. 28813. 假设在程序中 a 、b 、c 均被定义成整型,所赋的值都大于1,则下列能正确表示代数式abc1的表达式是( )。

【精品】C++面向对象程序设计题库(含答案)

【精品】C++面向对象程序设计题库(含答案)

【精品】C++面向对象程序设计题库(含答案)C++面向对象程序设计试题集一、填空题(每空2分,共20分)1. 设a、b、c都是int型变量,则a=(b=4)+(c=2)后,a值为_ _,b值为。

2. 在派生类的成员中有公有成员、、、四类成员。

3. 类Sample的构造函数将形参data赋值给数据成员data。

请将类定义补充完整。

class Sample{public: Sample(int data=0);Private: int data;};Sample::Sample(int data){4. 面向对象程序设计的机制提供了重复利用程序资源的一种途径。

5. 继承发生在利用现有类派生新类时,其中现有类称为,或父类;派生的新类称为,或。

6. 若表达式(x+(y-z)*(m/n))+3中的变量均为double型,则表达式值的类型为。

7. 已知数组a 中的元素个数为n,下列语句的作用是将下标为i 的元素移动到下标为i,1 的单元,其中1?i,n。

例如,当n=4,a 中原有数据为1,2,3,4 时,则移动后a 中元素为2,3,4,4。

请将语句补充完整:for(int i=0;i<n-1;i++) a[i]= 。

8. 类是对具有共同属性和行为的一类事物的抽象描述,共同属性被描述为类中的,共同行为被描述为类中的。

9. 类Sample的构造函数将形参data赋值给数据成员data。

请将类定义补充完整。

class Sample{public:Sample(int data=0);Private:int data; };Sample::Sample(int data){}10. 实现运行时多态,要使用函数。

11. 设A为test类的对象且赋有初值,则语句test B(A); 表示。

12. 在MyClass 类的定义中,对赋值运算符=进行重载。

请将画线处缺失的部分补充完整。

MyClass::operator=(const MyClass rhs) {if(this=&rhs) return *this;value=rhs. value;return *this; }13. C++语言中的每条基本语句以 ________作为结束符,每条复合语句以________ 作为结束符。

最新国家开放大学电大本科《面向对象程序设计》期末题库及答案

最新国家开放大学电大本科《面向对象程序设计》期末题库及答案

最新国家开放大学电大本科《面向对象程序设计》期末题库及答案考试说明:本人针对该科精心汇总了历年题库及答案,形成一个完整的题库,并且每年都在更新。

该题库对考生的复习、作业和考试起着非常重要的作用,会给您节省大量的时间。

做考题时,利用本文档中的查找工具,把考题中的关键字输到查找工具的查找内容框内,就可迅速查找到该题答案。

本文库还有其他网核及教学考一体化答案,敬请查看。

《面向对象程序设计》题库及答案一一、单项选择题(每小题2分,共20分)1.设x和y均为bool量,则x||y为假的条件是( )。

A.它们均为真 B.其中一个为真C.它们均为假 D.其中一个为假2.假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}}”,则元素a[1][2]的值为( )。

A.2 B.4 C.6 D.83.假定P是具有int* *类型的指针变量,则给P赋值的正确语句为( )。

A.p=new int B.p=new int*C.p=new int** D.p=new int[10]4.软件产品在需求发生变化、运行环境发生变化或发现软件产品本身的错误或不足时进行相应的软件更新的难易程度叫做软件的( )。

A.可维护性 B.可复用性C.兼容性 D.正确性5.若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字( )放在函数原型或函数头的前面。

‘A.in B.inlineC.inLine D.InLiner .6.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾的后一个位置为( )。

A.1ength+1 B first+lengthC.(first+1ength—1)%MS D.(first+length)%MS7.假定一个类的构造函数为“A(int aa,int bb){a=aa;b=aa*bb;)”,则执行“A x(4,5);”语句后,X.a和x.b的值分别为( )。

C++面向对象程序设计模拟试题5

C++面向对象程序设计模拟试题5

C++面向对象程序设计模拟试题5C++面向对象程序设计模拟试题五一、单项选择题(本大题共15小题,每小题2分,共30分)在每小题列出的四个备选项中,只有一个是苻合题目要求的。

请将其代码填写在题后的括号内。

错选,多选或未选均无分。

1.下列对类的构造函数和析构函数描述正确的是()。

A)构造函数可以重载,析构函数不能重载B)构造函数不能重载,析构函数可以重载C)构造函数可以重载,析构函数可以重载D)构造函数不能重载,析构函数不能重载2.在函数定义前加上关键字“inline”,表示该函数被定义为()。

A)重载函数B)内联函数C)成员函数D)普通函数3.下面有关重载函数的说明中,()是正确的。

A) 重载函数必须具有不同的返回值类型B) 重载函数形参个数必须不同C) 重载函数一般具有不同的形参列表D) 重载函数名可以不同4.下列有关类与对象的说法中,( ) 是不正确的。

A) 对象是类的一个实列B) 任何一个对象只能属于一个具体的类C) 一个类只能有一个对象D) 类和对象的关糸和数椐类型与变量的关糸类似5.已知: Print( )函数是一个类的常成员函数,它无返回值,下列表示中,正确的是( )。

A)void Print( ) const;B) const void Print( );C) void const Print( );D) void Print(const)6.假定Myclass为一个类,那么下列的函数说明中( )为该类的析构函数。

A) void ~Myclass( ); B) ~Myclass( int n);C) Myclass( ); D) ~Myclass( )7.下面类的定义中有( ) 处错误。

class myclass{C. 保护数据成员D. 静态数据成员13.静态成员函数没有()。

A. 返回值B. this指针C. 指针参数D. 返回类型14.解决多重继承中二义性问题的方法有()。

A. 只能使用作用域分辨操作符B. 使用作用域分辨操作符或赋值兼容规则C. 使用作用域分辨操作符或虚基类D. 使用虚基类或赋值兼容规则15.如果在类CTest的外面的非成员函数中采用CTest::f()形式函数调用;则函数f( )是类CTest的()。

面向对象考试

面向对象考试

1. 下面关于Java语言中方法的说法错误的是:A. 方法调用时参数类型必须符合方法的定义B. 参数传递是值传递的方式C. 如果方法没有返回值必须声明返回为voidD. 如果方法定义为返回void,则方法中不能出现return语句2. 指出下列程序运行的结果public class Example{String str=new Strin g("tare na"); char[]ch={'a','b','c'};public static void main( Stri ng args[]){ Example ex=newExample();ex.cha nge(ex.str,ex.ch);System.out.pri nt(ex.str+" and "); System.out.print(ex.ch);}public void cha nge(Stri ng str,char ch[]){ str="test ok";ch[0]='g:}}A. tare na and abcB. tare na and gbcC. test ok and abcD. test ok and gbc3. 关于Java对象的删除,下列说法正确的是:A. 必须由程序员完成对象的清除B. Java把没有引用的对象作为垃圾收集起来并释放C. 只有当程序中调用System.gc()方法时才能进行垃圾收集(手动垃圾收集) D. Java中的对象都很小,一般不进行删除操作4. 下列代码编译或运行的结果是public class Foo {public String doit(i nt x, int y) { return "a";public String doit( in t[] vals) {return "b";}public static void main( Stri ng[] args) {Foo f=new Foo();System.out.pri ntln( f.doit(4, 5));}}A. 代码public String doit(int[] vals) { 行,编译出错B. 代码System.out.println(f.doit(4, 5));行,抛出运行时异常C. 输出:aD. 输出:b5. 请看下列代码:class Inner {private int x;public void setX(i nt x) {this.x = x;}public in t getX() {return x;}}class Outer {private Inner y;public void setY(I nner y) {this.y = y;}public Inner getY() {return y;}}public class Gamma {public static void main( Stri ng[] args) {Outer o = new Outer();Inner i = new Inn er();int n = 10;i.setX( n);o.setY(i);<插入代码>System.out.pri ntln( o.getY().getX());}}运行上述代码,要求输出“100”,那么<插入代码>处应填入的代码是:A. n = 100;B. i.setX( 100);C. o.getY().setX( 100);D. i = new Inn er(); i.setX( 100); o.setY( i);6. 关于下列代码说法正确的是:public class Foo {public int add(i nt a, int b) {return a + b;}public static void main( Stri ng[] args) {Foo foo = null; II什么都没有,也没有对象System.out.pri ntln (foo.add(10, 20));}}A. 编译错误B. 正常运行,但无结果输出C. 运行输出:30D. 运行时抛出NullPointerException 异常7. 下列说法正确的有:(constructor构造器)A. class中的constructor不可省略B. constructor必须与class同名,但方法不能与class同名(可以同名)C. constructor在一个对象被实例化时执行D. 一个class 只能定义一个constructor8. 关于Java中继承的特点,下列说法正确的是:A. 使类的定义复杂化B. Java只支持单继承,不可多继承,但可以通过实现接口来达到多继承的目的C. 子类继承父类的所有成员变量和方法,包括父类的构造方法(contructor只可以调用,不可继承)D. 不可以多层继承,即一个类不可以继承另一个类的子类9•请看下列代码:class ClassA {}class ClassB exte nds ClassA {}class ClassC exte nds ClassA {}public class Test{public static void main( Stri ng[] args) {ClassA p0 = new ClassA();ClassB p1 = new ClassB();ClassC p2 = new ClassC();ClassA p3 = new ClassB();ClassA p4 = new ClassC();<插入代码>}}下列选项中放置在<插入代码>处,使程序编译正确的是:A. pO = p1; 〃小类型转大类型,隐式转换B. p1 =p2; 〃兄弟之间不能类型转换C. p2 = p4; 〃把大类型转换成小类型需要显式转换D. p2 = (ClassC)p1; 〃兄弟之间不能强制类型转换,编译错误10•请看下列代码,程序的输出结果是:class One {public On e() {System.out.pri nt(1);}}class Two exte nds One {public Two() {System.out.pri nt(2);}}class Three exte nds Two {public Three() {System.out.pri nt(3);}}public class Numbers {public static void main( Stri ng[] argv) {new Three();}}A. 1B. 3C. 123D. 32111. 下列代码的运行结果是:public class Ani mal {public String no ise() {return "peep";}public static void main(String[] args) {An imal ani mal = new Dog();Cat cat = (Cat)animal; (兄弟不能强转)System.out.pri ntln( cat. no ise());}}class Dog exte nds An imal {public String no ise() {return "bark";}}class Cat exte nds An imal {public String no ise() {return "meow";}}A. peepB. barkC. meowD. 抛出运行时异常ng.ClassCastException __________ :javase2.Dog cannot be cast to javase2.Cat12. 下列代码的运行结果是:class SimpleCalc {public int value;public void calculate() {value += 7;}}public class MultiCalc exte nds SimpleCalc {public void calculate。

面向对象编程练习题库_test

面向对象编程练习题库_test

专题3 流程控制语句 一、填空题
1.在switch语句中的表达式的类型必须是( )【存放类型】。 2.break在循环语句中的作用是()。 3.分支语句包括()和()。 4.while循环语句的循环次数( ),do-while语句的循环次数( ),for 语句的循环次数( )。 5. continue在循环语句中的作用是 ()。
C.Java只支持单重继承,一个类可以实现一个接口 D.Java支持多重继承,但一个类只可以实现一个接口 21.下列方法的声明中不合法的是 。 A.float area( ){…} B.void area( ){…} C.area{…} D.int area(int r){…} 22、下面哪个包是编程时不需要导入就可以直接使用的 。 A. B.ng C.java.sql D.java.util 23、调用构造方法是在 。 A.类定义时 B.创建对象时 C.调用对象的方法时 D.使用对象的变量时 24、在子类构造方法的哪个地方可以调用其父类的构造方法 。 A.任何地方 B.构造方法的第一条语句 C.构造方法的最后一条语句 D.无法在子类构造方法中调用父类的构造方法 25、关于Java中的继承,下列说法错误的是 。 A.继承是面向对象编程的核心特征,通过继承可以更有效地组织程序 结构。 B.继承使得程序员可以在原有类的基础上很快设计出一个功能更强的 新类,而不必从头开始,避免了工作上的重复。 C.每一次继承时,子类都会自动拥有父类的属性和方法,同时也可以 加入自己的一些特性,使得它更具体、功能更强大。 D.继承一般有多重继承和单一继承两种方式,在单一继承中每一个类 最多只有一个父类,而多重继承则可以有多个父类。Java中的类都采用 多重继承。 26、当方法中的局部变量与成员变量同名时,必须使用下列哪一个关键 字指出成员变量 。 A.static B.super C.this D.new 27、什么样的方法不能被重写 。

面向对象程序设计复习题库

面向对象程序设计复习题库

判断题1. C++中标识符内的大小写字母是没有区别的。

2. C++是一种以编译方式实现的高级语言。

3. 在私有继承中,基类中所有成员对派生类都是不可见的。

4. 在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。

5. 使用关键字class定义的类中缺省的访问权限是私有(private)的。

6. 引用就是某个变量的别名,对引用的操作,实质上就是对被引用的变量的操作。

7. 类封装了数据和操作。

8. 析构函数可以有形参。

9. 派生类至少有一个基类。

10. 全局函数和静态成员函数也能声明为虚函数。

11. 在公有和保护继承方式下,派生类的对象可以对基类的保护成员进行访问12. 友元本身就是类的成员。

13. 一个类只能有一个对象。

14. 构造函数没有函数类型。

15. 构造函数没有函数类型。

16. 只有类的成员函数才能声明为虚函数。

17. 所谓私有成员是指只有类中所提供的成员函数才能直接访问它们,任何类以外的函数对它们的访问都是非法的。

18. For循环是只有可以确定的循环次数时才可使用,否则不能用for循环。

19. 通常的拷贝初始化函数的参数是某个对象的成员名或对象的引用名。

20. 已知:类A中一个成员函数说明如下:void Set(A& a);其中A& a的含意是将a的地址值赋给变量Set。

选择题1. 一个最简单的C++程序,可以只有一个(2分)A. 库函数B. 自定义函数C. main函数D. 空函数2. C++程序中的简单语句必须以( )结束(2分)A. 冒号B. 分号C. 空格D. 花括号3. 下列选项中,全部都是C++关键字的选项为(2分)A. while IF StaticB. break char goC. sizeof case externD. switch float integer4. 下列正确的字符常量为(2分)A. "a"B. 'name'C. aD. '\101'5. 下列选项中,( )不能交换变量a和b的值。

c++面向对象程序设计试题和答案(经典题目)

c++面向对象程序设计试题和答案(经典题目)

系名____________班级____________姓名____________学号____________密封线内不答题一、 填空题(每空1分,共14分)1、 观看以下程序:class point {public:void show() {cout<〈”point"〈〈endl;} }; void main () { point p1; point *p ; p=&p1; ______p1。

show ()_________//通过对象p1访问show 函数 _______p 。

show()_______//通过指针p 访问show 函数 } 2、 在C++类中可以包含___公共___、___保护_____和___私有__三种具有不同访问控制权的成员。

3、 定义类时,在类头中将使用关键字__class _____来表示类定义的开始。

4、 如果一个类中至少有一个纯虚函数,则该类称为_______抽象类_________。

5、 C++类的组成包括数据成员和______成员函数________,友元__是___(是、不是)该类的成员函数. 6、 友员函数是用关键字_____friend_______修饰的非成员函数. 7、 若有: int i; int &j=i; i=10; j=i+1; 则i=____11_____,j=___11______。

8、 new 的功能是_______分配内存空间______,delete 的功能是______释放内存空间______________.二、 选择题(每小题1。

5分,共30分)1、下列特性中不是面向对象程序设计语言所特有的是( D ).(A)数据封装 (B )继承(C)多态性 (D )模板2、( B )是给变量取一个别名,它引入了变量的同意词。

(A)指针(B)引用(C)枚举(D)结构3、类成员的访问权限中,()只能被本类的成员函数和其友元函数访问.(A)share (B)public (C)private (D)protected4、关于构造函数,下列说法不正确的是( )。

面向对象程序设计考试模拟题含参考答案

面向对象程序设计考试模拟题含参考答案

面向对象程序设计考试模拟题含参考答案一、单选题(共50题,每题1分,共50分)1、下列数据结构中,哪一个是ArrayList类的底层实现()A、数组结构B、链表结构C、哈希表结构D、红黑树结构正确答案:A答案解析:ArrayList的底层是数组实现的。

2、Java属于以下哪种语言()A、机器语言B、汇编语言C、高级语言D、以上都不对正确答案:C答案解析:Java是一门高级编程语言。

3、下面关于path和classpath的说法中,错误的是()A、path用来指定java虚拟机(JVM)所在的目录B、classpath用来指定我们自己所写的或要用到的类文件(.jar文件)所在的目录C、在dos命令行中,classpath和path环境变量的查看与配置的方式不相同D、只要设置了classpath这个环境变量系统就不会再在当前目录下查询某个类正确答案:C答案解析:classpath和path环境变量的查看与配置的方式完全相同,都是通过 set关键字实现的。

4、若double val = Math.ceil(-11.9);,则val的值是()A、11.9B、-11.0C、-11.5D、-12.0正确答案:B答案解析:ceil是天花板的意思,表示向上取值,永远是得到大于参数的最小整数。

5、下列集合中,不属于Collection接口的子类的是()A、ArrayListB、LinkedListC、TreeSetD、Properties正确答案:D答案解析:Properties集合属于Map集合的子类。

6、下列关于类与对象的说法中,错误的是()A、类是对某一类事物的抽象描述,而对象则是该类事物的个体。

B、对象是类的实例化。

C、类用于描述多个对象的共同特征,它是对象的模板。

D、类与对象没有什么实际关系。

正确答案:D答案解析:对象是通过类来创建的。

7、下列关于List接口的描述中,错误的是()A、List接口继承自Collection接口,是单列集合。

面向对象程序设计复习题

面向对象程序设计复习题

一、选择题(每题1分,共30分)1. 下列关于C++语言的描述,哪个是错误的?()。

A. C++语言支持结构化程序设计方法B. C++语言是解释执行的C. C++语言是编译执行的D. C++语言支持面向对象程序设计方法2. 下列哪种数据类型的存储位数最多?()。

A. charB. intC. floatD. double3.下列哪个名字可以作为变量名?()。

A. No.1B. 123ABCC. longD. Long4. 下列定义变量语句中,错误的是()。

A. int x, y;B. int x = 5, y;C. int x = y = 5;D. int x = 5, y = 5;5. 计算圆形周长的公式是:周长=2πr,其中r为半径。

编写计算圆形周长的程序时需要将什么数据定义成变量?()。

A. πB. 半径C. 周长D. 半径和周长6. C++语言表达式:5 / 2,该表达式结果的数据类型和值分别是()。

A. short,2B. int,2C. float,2.5D. double,2.57. 执行C++语句:int x = 5, y = 6, z; z = x++ / --y; 执行后变量x、y和z的值分别为()。

A. 5, 5, 1B. 6, 5, 1C. 6, 5, 1.2D. 5, 6, 08. 执行下列语句:int x = 5, &y = x; y = x + 10; 执行后变量x的值为()。

A. 5B. 10C. 15D. 209. 下列定义并使用指针变量px的语句中,正确的是()。

A. int x, *px; px = 10;B. int x, *px = &x; px = 10;C. int x, *px; *px = 10;D. int x, *px = &x; *px = 10;10. 执行下列C++语句:int x = 15;if (x%2 == 0) cout << x / 2;else cout << x / 2 + 1;显示器上将显示()。

面向对象程序设计复习试题(答案)

面向对象程序设计复习试题(答案)

语法扩充选择题在C++中用( D )能够实现将参数值带回。

a)数组 b)指针 c)引用 d)上述ABC都可考虑函数原型void test(int a,int b=7,char *ch="*"),下面的函数调用中,属于不合法调用的是:( C )A)test(5) B)test(5,8) C)test(6,"#")D)test(0,0,"*");已知: int m=10;下列表示引用的方法中,正确的是:( C )A)int &Z; B)int &t=10; C)int &X=m; D)float &f=&m;下列不是函数重载所要求的条件是:( D )A)函数名相同 B)参数个数不同C)参数类型不同 D)函数返回值类型不同在C++中执行以下4条语句后输出rad值为:( C )static int hot=200;int &rad=hot;hot=hot+100;cout<<rad<<endl;A) 0 B) 100 C) 300 D) 200系统在调用重载函数时,不能作为确定哪个重载函数被调用的依据是:( D )A)参数个数 B)参数类型 C)函数名称 D)函数的返回值类型对C++语言和C语言的兼容性,描述正确的是:( A )A)C++兼容C B)C++部分兼容C C)C++不兼容C D)C兼容C++在C++中使用流进行输入输出,其中用于屏幕输出的对象是:( C )A)cerr B)cin C)cout D)cfile对使用关键字new所开辟的动态存储空间,释放时必须使用( C )A)free B)create C)delete D)realse在函数调用时,如某一默认参数要指明一个特定值,则有( A )A)其之前所有参数都必须赋值 B)其之后所有参数都必须赋值C)其前、后所有参数都必须赋值 D)其前、后所有参数都不必赋值下列哪个类型函数不适合声明为内联函数( A )A)函数体语句较多 B)函数体语句较少C)函数执行时间较短 D)函数执行时间过长int Func(int,int);不可与下列哪个函数构成重载( B )A)int Func(int,int,int); B)double Func(int,int);C)double Func(double,double); D)double Func(int,double);下面的哪个保留字不能作为函数的返回类型( C )A)void B)int C)new D)long一个函数功能不太复杂,但要求被频繁调用,选用( A )。

C++面向对象程序设计上机考试题库

C++面向对象程序设计上机考试题库

C++面向对象程序设计上机考试题库一、第一类题目(20道,每题7分,在word中保留代码并将输出结果窗口保留)1.定义盒子Box类,要求具有以下成员:长、宽、高分别为x,y,z,可设置盒子形状;可计算盒子体积;可计算盒子的表面积。

#include<iostream>class Box{ private:int x,y,z; int v,s;public:void int(int x1=0,int y1=0,int z1=0) {x=x1;y=y1;z=z1;}void volue() {v=x*y*z;}void area() {s=2*(x*y+x*z+y*z);}void show(){cout<<"x= "<<x<<" y= "<<y<<" z="<<z<<endl;cout<<"s= "<<s<<" v= "<<v<<endl;}};void main(){ Box a;a.init(2,3,4);a.volue();a.area();a.show();}2.有两个长方柱,其长、宽、高分别为:(1)30,20,10;(2)12,10,20。

分别求他们的体积。

编一个基于对象的程序,在类中用带参数的构造函数。

#include <iostream>using namespace std;class Box{public:Box(int,int,int);//带参数的构造函数int volume();private:int length;int width;int height;};Box::Box(int len,int h,int w){length=len;height=h;width=w;}//Box::Box(int len,int w,int,h):length(len),height(h),width(w){}int Box::volume(){return(length*width*height); }int main(){Box box1(30,20,10);cout<<"The volume of box1 is "<<box1.volume()<<endl;Box box2(12,10,20);cout<<"The volume of box2 is "<<box2.volume()<<endl;return 0;}3.有两个长方柱,其长、宽、高分别为:(1)12,20,25;(2)10,30,20。

c#面向对象试题及答案

c#面向对象试题及答案

一、选择题:1、下列关于类的描述中,错误的是( A )。

A.类就是C语言中的结构类型B.类是创建对象的模板C.类是抽象数据类型的实现D.类是具有共同行为的若干对象的统一描述体2、下列常量中,不是字符常量的是( B )。

A.'\n' B."y"C.'x' D.'\7'3、下列表达式中,其值为0的是( A )。

A.5/10 B.!0C.2>4?0:1 D.2&&2||04、下列关于数组维数的描述中,错误的是( C )。

A.定义数组时必须将每维的大小都明确指出B.二维数组是指该数组的维数为2C.数组的维数可以使用常量表达式D.数组元素个数等于该数组的各维大小的乘积5、下列关于字符数组的描述中,错误的是( D )。

A.字符数组中的每一个元素都是字符B.字符数组可以使用初始值表进行初始化C.字符数组可以存放字符串D.字符数组就是字符串6、已知:int a[5] = {1, 2, 3, 4}; 下列数组元素值为2的数组元素是( B )。

A.a[0] B.a[1]C.a[2] D.a[3]7、下列while循环语句的循环次数是( A )。

while(int i(0)) i--;A.0 B.1C.2 D.无限8、已知:int a[ ]={1,2,3,4,5},*p=a;在下列数组元素地址的表示中,正确的是( C )。

A.&(a+1) B.&(p+1)C.&p[2] D.*p++9、已知:int a=1,b=2,*p[2];下列表达式中正确的是( C )。

A.p=&a B.p=&bC.p[0]=&a,p[1]=&b D.p[ ]={&a,&b};10、当一个函数没有返回值时,该函数类型应说明为( A )。

A.void B.intC.无D.任意11、下列关于类的定义格式的描述中,错误的是( C )。

面向对象方法概论

面向对象方法概论

习题第1章面向对象方法概论1、与传统开发方法相比,面向对象方法有什么优点?2、查阅资料,进一步讨论UML与面向对象方法的关系。

3、封装的目的是什么?在面向对象方法中封装的目的是如何达到的?4、针对你过去使用传统开发方法所建造的系统的不足,总结一下问题的原因。

考虑如果使用面向对象方法,在哪些方面可能会获益。

5、面向对象方法的一个主要原则是抽象。

思考一下在工作和学习中你经常在什么场合下运用抽象原则。

第2章什么是面向对象分析1、简述OOA模型及OOA过程。

2、为什么要进行OOA?3、简述问题域与系统责任间的关系。

4、OOA是如何应对需求变化性的?5、为什么把用类图构建的模型称为基本模型?6、你对本章讲述的分析面临的主要问题有过什么实际感受?请举例说明。

第3章建立需求模型——用况图1、用况之间的关系可为包含关系、扩展关系或继承关系,三种关系之间有相同之处吗?它们之间的区别又在哪?2、论述用况图在面向对象方法中的地位。

3、怎样理解把系统内外的交互情况描述清楚了,就明确了系统边界?4、对于3.3.1节中的收款用况,补充用信用卡付款和使用优惠卡的描述。

5、通常自动售货机会按用户的要求进行自动售货,供货员会巡查向其内供货,取款员会定时取款。

针对上述要求,请建立用况图,并描述各个用况。

6、现要开发一个购书积分系统,其中至少要具有申请积分卡、增加积分、查看积分和按积分奖励功能。

请建立用况图,并描述各个用况。

第4章建立类图1、论述类与对象之间的关系以及关联与链之间的关系。

这四者之间还有什么联系吗?2、在什么情况下使用组合关系进行建模?3、总结继承关系的用途。

4、图4-44表明,一名教师可以在一个或多个系中任职,而且在二者间使用的是聚合关系。

在二者间可以使用组合关系吗?请解释原因。

5、举例说明类继承结构中的重载与多态。

6、面包是由面包片组成的。

面包与面包片之间的关系是聚合还是组合?7、一本书含有若干章,一章有若干节,一节由一些段落和图组成,一个段落由一些句子组成。

Java面向对象程序设计模拟试题1及答案

Java面向对象程序设计模拟试题1及答案

Java面向对象程序设计模拟试题1一、单项选择题(本大题共15小题,每小题1分,共15分)1. Java语言属于A. 机器语言B. 高级语言C. 自然语言D. 汇编语言2. Java源文件的扩展名是A. docB. exeC. javaD. class3. Java语言的字符使用的字符编码是A. ASCIIB. UnicodeC. UTF-8D. GB23124. Java中int类型所占字节数是A. 1B. 2C. 4D. 85. 给定下面代码段,程序运行结果是public class Foo{public static void main(String[] args){int i = 1;int j = i++;if((++i > j) && (i++ == j)){i += j;}System.out.println("i = "+i) ;}}A. i = 1B. i = 2C. i = 3D. i = 4 if内的判断也会对数值有影响6. 设有Circle类,执行下面语句后,哪个对象可以被垃圾回收器回收Circle a = new Circle();Circle b = new Circle();Circle c = new Circle();a = b;a = c;c = null;A.原来a所指的对象B.原来b所指的对象C.原来b和c所指的对象D.原来c所指的对象7. 下列程序段的运行结果为int index = 1;int foo[] = new int[3];int bar = foo[index];int baz = bar + index;A. baz 的值为0B. baz 的值为1C. baz 的值为2D. 抛出一个异常8. 执行下列语句后输出的结果是String s = "\"Hello,World!\"";System.out.println(s.length());A. 12B. 14C. 16D. 189. 下列代码执行后输出foo的结果为int index = 1;String[] test = new String[3];String foo = test[index];System.out.println(foo);A. ""B. nullC. 抛出一个异常D. 代码不能编译10. 下面程序运行结果为class Super{public int i = 0;public Super(String text){i = 1;}}public class Sub extends Super{public Sub(String text){i = 2;}public static void main(String[] args){Sub sub = new Sub("Hello");System.out.println(sub.i);}}A. 该程序有编译错误B. 编译成功输出0C. 编译成功输出1D. 编译成功输出211.下面代码在运行时会产生什么异常int a[] = {1,2,3,4,5};System.out.println(a[5]);A. ArrayIndexOutOfBoundsExceptionB. IndexOutOfBoundsExceptionC. ObjectClastExceptionD. NullPointerException12.有下列一段代码,执行后输出结果为。

面向对象基础-参考答案

面向对象基础-参考答案

一、【必做题】1.(1)定义一个人类Person:1)定义一个方法sayHello(),可以向对方发出问候语“hello,my name is XXX”2)有三个属性:名字、身高、体重(2)定义一个PersonCreate类:1)创建两个对象,分别是zhangsan,33岁,1.73;lishi,44,1.742)分别调用对象的sayHello()方法。

(答案:Person.java、PersonCreate.java)2.(1)定义一个人类Person:1)定义一个方法sayHello(),可以向对方发出问候语“hello,my name is XXX”2)有三个属性:名字、身高、体重3)通过构造方法,分别给三个属性赋值(2)定义一个Constructor类:1)创建两个对象,分别是zhangsan,33岁,1.73;lishi,44,1.742)分别调用对象的sayHello()方法。

(答案:Constructor.java、或者是Person3.java)3.(1)定义一个矩形类Rectangle:1)定义三个方法:getArea()求面积、getPer()求周长,showAll()分别在控制台输出长、宽、面积、周长。

2)有2个属性:长length、宽width3)通过构造方法Rectangle(int width, int length),分别给两个属性赋值(答案:Rectangle.java)4.定义一个点类Point,包含2个成员变量x、y分别表示x和y坐标,2个构造器Point()和Point(int x0,y0),以及一个movePoint(int dx,int dy)方法实现点的位置移动。

()public class Point {private int x0;private int y0;public Point(){}public Point(int x0,int y0){t his.x0=x0;this.y0=y0;}public void movePoint(int dx,int dy){t his.x0 = this.x0 + dx;t his.y0 = this.y0 + dy;}}5.编写一个程序,创建两个Point对象p1、p2,分别调研movePoint方法后,打印p1和p2的坐标。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面向对象方法题库1-0-5问题:[单选]当()时,用例是捕获系统需求最好的选择。

A.系统具有很少的用户B.系统具有很少的接口C.系统算法复杂,功能单一D.系统有很多参与者用例描述的是系统的执行者(参与者)与系统的交互,同时也是开发人员与用户进行交流的工具,可用来很好地定义系统的边界。

所以,当执行者较多的时候,用例是捕获系统需求最好的选择。

问题:[单选]对OO系统的技术度量的识别特征,Berard定义了导致特殊度量的特征。

其中()抑制程序构件的操作细节,只有对访问构件必需的信息被提供给其他希望访问的构件。

A.局部化B.封装C.信息隐藏D.继承面向对象的软件和用传统方法开发的软件有本质的不同,为此,对OO系统的技术度量必须调整以适应那些区别OO和传统软件的特征。

Berard定义了5个导致特殊度量的特征,分别是局部化、封装、信息隐蔽、继承和对象抽象技术。

(1)局部化。

局部化是软件的一个特征,它指明信息在程序中被集中的方式,例如,针对功能分解的传统方法围绕功能局部化信息,它们典型地以过程模块来实现。

数据驱动方法围绕特定的数据结构局部化信息。

在OO语境中,信息是通过封装数据和处理在类或对象的边界内而集中的。

因为传统软件强调函数为局部化机制,软件度量着重于函数的内部结构或复杂性(例如,模块长度、内聚性或环路复杂性等)或函数间相互连接的方式(例如,模块耦合)。

因为类是OO系统的基本单位,所以,局部化是基于对象的,因此,度量应该应用于作为一个完全实体的类(对象)。

此外,在操作(函数、方法)和类间的关系不必要是一对一的。

因此,反应类协作方式的度量必须能够适应一对多和多对一的关系。

(2)封装。

Berard定义封装为“一组项的包装(或捆绑在一起),(对传统软件的)低层封装例子包括记录和数组,而子程序(例如,过程、函数、子例程和段落)是封装的中层机制”。

对OO系统,封装包含了类的责任,包括其属性(和针对聚合对象的其他类)和操作,以及由特定的属性值定义的类的状态。

封装通过将测度的焦点从单个模块改变到数据(属性)和处理模块(操作)包而影响度量。

此外,封装鼓励在高抽象层的测度。

将此层次的抽象同传统的度量相比较,传统的着重于布尔条件的计数或代码行数。

(3)信息隐蔽。

信息隐蔽隐瞒(或隐藏)程序构件的操作细节,只将对访问该构件必须的信息提供给那些希望访问它的其他构件。

良好设计的OO系统应该鼓励信息隐蔽,因此,指明隐蔽所达到程度的度量应该提供了对OO设计质量的一个指标。

(4)继承。

继承是使得某对象的责任能够传播到其他对象的机制,继承出现在类层次的所有层面上,通常,传统的软件不支持该特征。

因为继承是很多OO系统的关键特征,所以很多OO度量是关注于它的。

(5)抽象。

抽象是使得设计者能够关注程序构件(数据或过程)的本质性细节而不须考虑低层细节的机制。

如Berard所说:“抽象是一个相对概念,当我们移向更高的抽象级别时,我们忽略了越来越多的细节;当我们移向抽象的低层时,我们引入了更多的细节,即我们提供了概念或项的更特定的视图”。

因为类是一种抽象,它可以在很多不同的细节级别上并以一系列不同的方式(例如,作为一个操作列表、作为一个状态序列、作为一系列协作)来观察,所以OO度量用类的测度(例如,每个应用的每个类的实例数、每个应用的参数化类数以及参数化类和非参数化类的比率)来表示抽象。

问题:[单选]博学公司欲开发一个在线交易系统。

为了能够精确表达用户与系统的复杂交互过程,应该采用UML的()进行交互过程建模。

A.类图B.序列图C.部署图D.对象图显然,为了能够精确地表达用户与系统的复杂交互过程,应该使用交互图。

在UML中,交互图包括顺序图、交互概览图、通信图和定时图。

顺序图也称为序列图,强调消息的时间次序;通信图强调消息流经的数据结构;定时图强调消息跨越不同对象或角色的实际时间;交互概览图是活动图和顺序图的一个综合体。

(羽毛球教学 /)问题:[单选]UML是面向对象开发方法的标准化建模语言。

采用UML对系统建模时,用()模型描述系统的功能,等价于传统的系统功能说明。

A.分析B.设计C.用例D.实现显然,采用UML对系统建模时,使用用例模型来描述系统的功能。

问题:[单选,共用题干题]在计算机系统中,某一功能的处理时间为整个系统运行时间的50%,若使该功能的处理速度加快10倍,根据Amdahl定律,这样做可以使整个系统的性能提高(1)倍。

若要使整个系统的性能提高1.5倍,则该功能的处理速度应加快(2)倍。

空白(1)处应选择()A.A.1.6B.1.7C.1.8D.1.9Amdahl定律表明:利用这一公式,代入fe=0.5,re=10,可以得到系统的加速比为1.8左右。

当加速比要求为1.5时,利用上述公式,可以算出该功能部件的加速比为3倍。

问题:[单选]以下关于改进信息系统性能的叙述中,正确的是()A.将CPU时钟周期加快一倍,能使系统吞吐率增加一倍B.一般情况下,增加磁盘容量可以明显缩短作业的平均CPU处理时间C.如果事务处理平均响应时间很长,首先应注意提高外围设备的性能D.利用性能测试工具,可以找出程序中最花费运行时间的20%代码,再对这些代码进行优化系统吞吐率不单是取决于CPU的速度,还与内外存交换速度、磁盘存取速度等计算机的基本性能有关,也与应用程序的性能有关。

因此,A是错误的。

增加磁盘容量与CPU处理时间没有直接的关系,所以,B也是错误的。

如果事务处理平均响应时间很长,就需要我们去分析其中的原因,然后根据原因采取相应的措施。

如果是因为外围设备导致系统瓶颈,才去提高外围设备的性能。

因此,C是错误的。

根据20-80法则,一个程序中20%的代码使用了该程序所占资源的80%;一个程序中20%的代码占用了总运行时间的80%;一个程序中20%的代码使用了该程序所占内存的80%。

从这个规律出发,我们在做程序优化的时候,就有了针对性。

比如想提高代码的运行速度,根据这个规律可以知道其中20%的代码占用了80%的运行时间,因此我们只要找到这20%的代码,并进行相应的优化,那么我们程序的运行速度就可以有较大的提高。

要想找出那20%的代码,我们可以使用性能测试工具,检查程序中各个模块所分配内存的使用情况,以及每个函数所运行的时间等。

问题:[单选]下列关于UML叙述正确的是()A.UML是一种语言,语言的使用者不能对其扩展B.UML仅是一组图形的集合C.UML仅适用于系统的分析与设计阶段D.UML是独立于软件开发过程的UML是一个通用的可视化建模语言,用于对软件进行描述、可视化处理、构造和建立软件系统的文档。

它记录了对必须构造的系统的决定和理解,可用于对系统的理解、设计、浏览、配置、维护和信息控制。

UML是独立于软件开发过程的,它适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域,以及各种开发工具,UML是一种总结了以往建模技术的经验并吸收当今优秀成果的标准建模方法。

UML包括概念的语义,表示法和说明,提供了静态、动态、系统环境及组织结构的模型,它允许用户对其进行扩展。

它可被交互的可视化建模工具所支持,这些工具提供了代码生成器和报表生成器。

UML标准并没有定义一种标准的开发过程,但它适用于迭代式的开发过程。

它是为支持大部分现存的面向对象开发过程而设计的。

UML不是一种可视化的编程语言,但是UML 描述的模型可与各种编程语言直接相连,即可把用UML描述的模型映射成编程语言。

问题:[单选]UML是面向对象开发方法的标准化建模语言。

采用UML对系统建模时,用()模型描述系统的功能,等价于传统的系统功能说明。

A.分析B.设计C.用例D.实现显然,采用UML对系统建模时,使用用例模型来描述系统的功能。

问题:[单选]博学公司欲开发一个在线交易系统。

为了能够精确表达用户与系统的复杂交互过程,应该采用UML的()进行交互过程建模。

A.类图B.序列图C.部署图D.对象图显然,为了能够精确地表达用户与系统的复杂交互过程,应该使用交互图。

在UML中,交互图包括顺序图、交互概览图、通信图和定时图。

顺序图也称为序列图,强调消息的时间次序;通信图强调消息流经的数据结构;定时图强调消息跨越不同对象或角色的实际时间;交互概览图是活动图和顺序图的一个综合体。

问题:[单选]对OO系统的技术度量的识别特征,Berard定义了导致特殊度量的特征。

其中()抑制程序构件的操作细节,只有对访问构件必需的信息被提供给其他希望访问的构件。

A.局部化B.封装C.信息隐藏D.继承面向对象的软件和用传统方法开发的软件有本质的不同,为此,对OO系统的技术度量必须调整以适应那些区别OO和传统软件的特征。

Berard定义了5个导致特殊度量的特征,分别是局部化、封装、信息隐蔽、继承和对象抽象技术。

(1)局部化。

局部化是软件的一个特征,它指明信息在程序中被集中的方式,例如,针对功能分解的传统方法围绕功能局部化信息,它们典型地以过程模块来实现。

数据驱动方法围绕特定的数据结构局部化信息。

在OO语境中,信息是通过封装数据和处理在类或对象的边界内而集中的。

因为传统软件强调函数为局部化机制,软件度量着重于函数的内部结构或复杂性(例如,模块长度、内聚性或环路复杂性等)或函数间相互连接的方式(例如,模块耦合)。

因为类是OO系统的基本单位,所以,局部化是基于对象的,因此,度量应该应用于作为一个完全实体的类(对象)。

此外,在操作(函数、方法)和类间的关系不必要是一对一的。

因此,反应类协作方式的度量必须能够适应一对多和多对一的关系。

(2)封装。

Berard定义封装为“一组项的包装(或捆绑在一起),(对传统软件的)低层封装例子包括记录和数组,而子程序(例如,过程、函数、子例程和段落)是封装的中层机制”。

对OO系统,封装包含了类的责任,包括其属性(和针对聚合对象的其他类)和操作,以及由特定的属性值定义的类的状态。

封装通过将测度的焦点从单个模块改变到数据(属性)和处理模块(操作)包而影响度量。

此外,封装鼓励在高抽象层的测度。

将此层次的抽象同传统的度量相比较,传统的着重于布尔条件的计数或代码行数。

(3)信息隐蔽。

信息隐蔽隐瞒(或隐藏)程序构件的操作细节,只将对访问该构件必须的信息提供给那些希望访问它的其他构件。

良好设计的OO系统应该鼓励信息隐蔽,因此,指明隐蔽所达到程度的度量应该提供了对OO设计质量的一个指标。

(4)继承。

继承是使得某对象的责任能够传播到其他对象的机制,继承出现在类层次的所有层面上,通常,传统的软件不支持该特征。

因为继承是很多OO系统的关键特征,所以很多OO度量是关注于它的。

(5)抽象。

抽象是使得设计者能够关注程序构件(数据或过程)的本质性细节而不须考虑低层细节的机制。

如Berard所说:“抽象是一个相对概念,当我们移向更高的抽象级别时,我们忽略了越来越多的细节;当我们移向抽象的低层时,我们引入了更多的细节,即我们提供了概念或项的更特定的视图”。

相关文档
最新文档