面向对象测试题_第1页
面向对象测试题_第2页
面向对象测试题_第3页
面向对象测试题_第4页
面向对象测试题_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、问答题1. 值类型和引用类型的区别?值类型和引用类型的区别在于,值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。 值类型变量直接把变量的值保存在栈中,引用类型的变量把实际数据的地址保存在栈中,而实际数据则保存在堆中。注意,堆和栈是两个不同的概念,在内存中的存储位置也不相同。堆(Heap)一般用于存储可变长度的数据,如字符串类型堆中保存值和对象,调用完毕之后依然存在,由垃圾回收器查找栈中有无指向该值或对象的引用,无则从堆中删除;栈(Stack)则用于存储固定长度的数据,如整型类型的数据int(每个int变量占用四个字节),栈由系统管理生存期,存储代码执行和

2、调用路径,执行或调用完毕即从栈中清除。 由数据存储的位置可以得知,当把一个值变量赋给另一个值变量时,会在堆栈中保存两个完全相同的值;而把一个引用变量赋给另一个引用变量,则会在堆栈中保存对同一个堆位置的两个引用,即在堆栈中保存的是同一个堆的地址。在进行数据操作时,对于值类型,由于每个变量都有自己的值,因此对一个变量的操作不会影响到其它变量;对于引用类型的变量,对一个变量的数据进行操作就是对这个变量在堆中的数据进行操作,如果两个引用类型的变量引用同一个对象,实际含义就是它们在堆栈中保存的堆的地址相同,因此对一个变量的操作就会影响到引用同一个对象的另一个变量。(1) 值类型 包括:简单类型、结构类型

3、、枚举类型。其中,简单类型又分为:整型、布尔型、字符型、浮点型、小数型。 (2) 引用类型 包括:对象类型、类类型、接口、元数据、字符串类型、数组。/值类型与引用类型的例子 static void Main(string args)  /=值类型,操作的是值= int i1 = 10; int i2 = i1; i2 = 88; Console.WriteLine(i1 + " " + i2);/10 88 由于值类型直接操作值,所以不会发生改变/=引用类型,操作的是引用,所谓的引用可以看作是指

4、向内存的地址,地址再对应着内容=int intArr1 = new int 1, 2, 3 ;int intArr2 = intArr1;intArr20 = 9;intArr22 = 0;foreach (int i in intArr1) Console.Write(i);/结果:920由于引用类型intArr1的引用赋值给了intArr2,所以他们是持有同一个引用,当intArr2的引用发生改变的时候,intArr1的引用也将发生变化foreach (int j in intArr2)  Console.Write(j);/结果:9 2 0Console.Read();下面代码

5、的输出结果是什么?class Program            static void Main(string args)                    string b;            b

6、 = "old"            Func1(ref b);            Console.WriteLine(b);  int c;            c = 3;    

7、;        Func1(ref c);            Console.WriteLine( c);                 public static void Func1(ref string a)   &

8、#160;                a = "new"                public static void Func1(ref int a)            &#

9、160;       a = 6;            答案:new6题目2:下面代码的输出结果是什么?  class Program            static void Main(string args)          &

10、#160;         string b;            b = "old"            Func1( b);            Console

11、.WriteLine(b);            int c;            c = 3;            Func1( c);          

12、60; Console.WriteLine( c);                            public static void Func1( string a)               &

13、#160;    a = "new"                public static void Func1( int a)                    a = 6;    

14、;        答案:        old        32. 简述装箱和拆箱的过程。 装箱(boxing)是将值类型隐式地转换为引用类型。如int i=3; object o = i ;便是装箱过程,装箱一个数值会为其分配一个对象实例,并把该数值拷贝到新对象中。拆箱(unboxing)是显式地把引用类型转换成值类型,如int j = (int)o char j= (char)o。3. 结构

15、和类的区别是什么? 1) 结构是一个值类型,保存在栈上,而类是一个引用类型,保存在受管制的堆上。 2) 对结构中的数据进行操作比对类或对象中的数据进行操作速度要快。 3) 一般用结构存储多种类型的数据,当创建一个很多类或对象共用的小型对象时,使用结构效率更高。 4. 什么是静态变量?类的数据成员可以分静态变量、非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员.因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员.非成静

16、态员:所有没有加Static的成员都是非静态成员,当类被实例化之后,可以通过实例化的类名进行访问.非静态成员的生存期决定于该类的生存期.而静态成员则不存在生存期的概念,因为静态成员始终驻留在内容中。一个类中可以同时包含静态成员和非静态成员,类中也包括静态构造函数和非静态构造函数。5. abstract class和interface有什么区别?声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,抽象类不能被实例化。abstact class AA a = new A(); /这个是错误的class B:AB b = new B();

17、A a = b;然而可以创建一个变量,其类型是一个抽像类,并让它指向【具体子类】的一个实例。不能有抽像构造函数或抽像静态方法。抽象类的方法必须全部被子类继承:如果子类也是抽象的,那么就不必全部继承接口(interface)是抽像类的【变体】。在接口中,所有方法都是抽像的;在抽象类中,有些方法可以不是抽象的。多继承性可通过接口实现。接口中的所有方法都是抽像的,没有一个有【方法体】。interface Ainterface Babstract class A1()abstract class A2class c:A1,A,B6. 接口是否可继承接口? 抽象类是否可实现(implements)接口?

18、 抽象类是否可继承实体类(concrete class)?接口可以继承接口。抽象类可以实现(implements)接口,抽象类是可继承实体类,但前提是实体类必须有明确的构造函数。7. 进程和线程分别怎么理解?1)定义解释进程是具有一定独立功能程序在关于某个数据集上的一次运行活动。进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是Cup调度的基本单位。它是比进程更小的能独立运行的基本单位,线程只拥有一点在运行中必不可少的资源,可与同一个进程中其他线程共享进程中所拥有的所有资源。一个线程可以创建和销毁另一个线程,同一进程中的多个线程可以同时并发执行;2)区别解释一个程序至少有一个

19、进程,一个进程至少有一个线程。线程的划分尺度小于进程,使得多线程程序并发行高,另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存从而极大的提高程序的运行效率。进程有独立的地址空间一个进程崩溃后在保护模式下不会对其他进程产生影响,而线程只是一个进程中的不同执行路径;线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。所以多进程的程序要比多线程的程序健壮,但在进程切换时耗费资源较大,效率要差一些。但对一些要同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。8. 简述“开-闭”原则的基本思想。请举出一个使用了软件“开-闭”原则的软件设计模

20、式,其中何处体现了“开-闭”原则。答:“开闭”原则:软件实体应当对扩展开放,而对修改关闭,“开-闭”原则要求软件系统能够在不需要修改原有类的基础上,通过增加类达到扩展功能的目的。Abstract factory体现了这个原则,如果想增加一类新的products,只需在product类体系中增加各个products,然后在factory类体系结构中增加一个concrete factory就可以了,而不需要对现有类做任何修改,The Open-closed principleocp在不改动过模块源代码的情况下扩展模块的行为。9. 简述依赖倒置原则的基本思想。请举出一个使用了软件依赖原则的软件设计模

21、式,其中何处体现了依赖原则。答:依赖倒置原则的基本思想是:高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。Template method就体现了这个原则,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中,template method使得子类不改变一个算法的结构,即可重定义该算法的某些特定步骤。10. 什么是单一职责原则?请举出一个使用了单一职责原则的软件设计模式,其中何处体现了单一职责原则。答:基本思想:SRP使得一个类或一个模块承担的责任尽可能的少,使尽可能少的因素或动机影响该类或该模块,即增大类或模块的内聚性,减少其耦合度,SRP是所有

22、原则中最简单的之一,也是最难正确运用的之一。COMMAND模式体现了SRP原则,大多数类都是一组方法和相应的一组变量的结合,而该模式只是封装了一个没有任何变量的函数,它对函数的关注超过了类,将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化。11. 软件复用可采用类的继承方式和类的聚合方式,比较两者的优缺点。答:聚合:一个对象拥有另一个对象或对另一个对象负责(即一个对象包含另一个对象或是另一个对象的一部分)并且聚合对象和其所有具有相同的生命周期(即所谓的“同生共死”关系)。聚合复用优点:容器类仅能通过被包含对象的接口来对其进行访问。“黑盒”复用,因为被包含对象的内部细节对外是不可见。

23、包装性好。实现上的相互依赖性比较小。每一个类只专注于一项任务。通过获取指定其他的具有相同类型的对象的使用,可以在运行期间动态地定义(对象的)组合。聚合的缺点:导致系统中的对象过多 为了能将多个不同的对象作为组合块来使用,必须仔细地对接口进行定义。类继承:是一种通过扩展(一个已有对象的)实现,从而获得新功能的复用方法。继承的优点:容易进行新的实现,因为其大多数可继承而来 易于修改或扩展那些被复用的实现。继承的缺点:破坏了封装性,因为这会将父类的实现细节暴露给子类 “白盒”复用,因为父类的内部细节对于子类而言通常是可见的 当父类的实现更改时,子类也不得不随之更改 从父类继承来的实现将不能在运行期间

24、进行改变。12. 比较Adapter和Proxy模式使用上的异同之处。适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。代理模式有两个英文名字:Proxy Pattern 和 Surrogate Pattern。代理模式:为其他对象提供一种代理以控制对这个对象的访问。说白了就是,在一些情况下客户不想或者不能直接引用一个对象,而代理对象可以在客户和目标对象之间起到中介作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。两者的主要区别在于代理模式应用的情况是不改变接口命名的,而且是对已有

25、接口功能的一种控制;而适配器模式则强调接口转换。二、选择题1 关于信息隐藏的描述错误的是( )A 信息隐藏是指对象在与外界的交互中,尽可能地隐藏对象的内部细节,仅保留有限的对外接口与外部进行联系。 B 信息隐藏既可以隐藏属性,也可以隐藏操作。 C 一个对象信息隐藏的内容对任何对象都是一样的,并不随与之交互的对象的不同而改变。 D 信息隐藏的原则是公开不变的操作,隐藏易变的操作。2 关于多态的描述正确的是( )A 多态是指在聚合关系中的各个类中名字相同的属性和操作具有不同的意义。 B 多态的实现机制是编译时静态链接。C 函数名重载(overload) 会导致多态现象出现。D 多态可实现接口复用,

26、节省大量的编码工作量. 3 关于重载(overload)与覆盖(override)的说法正确的是( )。A 如果子类中的成员函数f(x)具有父类中成员函数f(x)相同的函数名,那么称子类对父类的f(x)进行了覆盖。B 如果子类中的成员函数f(x)具有父类中成员函数f(x)相同的基调,那么称子类对父类的f(x)进行了重载。 C 重载导致多态,覆盖与多态无关。D 覆盖由动态链接实现,重载由静态链接实现。 4 关于用例图与类图的描述正确的是( )。A. 参与者是用例图中的元素,类是类图中的元素,二者没有关系。B. 用例图中用例应全部识别为类图中的同名类。C. 用例图中参与者应全部识别为类图中的同名类

27、。D. 用例图中参与者有可能识别为类图中的主动类5. 关于状态图的陈述正确的是( )A 一个对象自身的属性值变化不能作为其状态图中的事件。B 历史状态是指一个对象以前曾经所处的状态集合。C 动作是在状态内或在转化时所做的操作,是原子的和即时的。D 一个状态的内部转换与自转换的意义是相同的。6. 关于关联与消息之间的关系的说法正确的是( )A. 关联的目的是为了提供服务,必然导致消息传递B. 只有两个类之间存在关联,才能互发消息C. 两个类的实例之间没有关联链,但仍可以传递消息D. 若两个对象之间有链,则二者一定具有消息传递关系7. 下列关于面向对象的分析与设计的描述,正确的是 ( )。 A 面

28、向对象分析软件做什么,设计描述软件要怎么做。B 面向对象分析描述问题域与系统责任,面向对象的设计考虑与软件实现有关的问题。C 面向对象分析与面向对象的设计遵循不同的范型。D 面向对象分析类图与面向对象的设计类图具有相同的类与关系8. 设计模式具有的优点( ) 。A适应需求变化 B.程序易于理解C减少开发过程中的代码开发工作量 D.简化软件系统的设计9. 设计模式一般用来解决什么样的问题( )。A. 同一问题的不同表相 B 不同问题的同一表相C.不同问题的不同表相 D.以上都不是10. 设计模式的两大主题是( )。A.系统的维护与开发 B.对象组合与类的继承C.系统架构与系统开发 D. 系统复用与系统扩展11. 以下哪些问题通过应用设计模式不能够解决 。 ( )A)指定对象的接口 B)针对接口编程C)确定软件的功能都正确实现 D)设计应支持变化12. Adapter(适配器)模式的意图是( ) 。A. 希望简化现有系统的使用方法。你需要定义自己的接口。B 将一个无法控制的现有对象与一个特定接口相匹配。C. 将一组实现部分从另一组使用它们的对象中分离出来。D你需要为特定的客户(或情况)提供特定系列的对象。13. 下面不属于创建型模式的有( ) 。A抽

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论