免费智能真题库 > 历年试卷 > 软件评测师 > 2020年下半年 软件评测师 上午试卷 综合知识
  第46题      
  知识点:   基本概念   面向对象基本概念
  章/节:   软件开发方法及过程       

 
以下关于面向对象基本概念的叙述中,不正确的是(46)。
 
 
  A.  类是具有相同属性和操作的一组对象的集合
 
  B.  继承是子类自动地拥有父类的全部或部分属性或操作的机制
 
  C.  一个子类只能有一个父类
 
  D.  对象是类的实例
 
 
 

 
  第44题    2012年下半年  
   36%
(44)模型吸收了软件工程“演化”的概念,使用原型及其他方法来尽量降低风险,适合于大型复杂软件系统的开发。
  第48题    2014年下半年  
   40%
以下用例图中,A1和A2为 ( 47) 。A1和A2的关系为 (48 ) 。
  第44题    2016年下半年  
   55%
以下关于用例图的叙述中,不正确的是(44)。图书馆管理系统需求中包含“还书”用例和“到书通知”用例,对..
   知识点讲解    
   · 基本概念    · 面向对象基本概念
 
       基本概念
               程序与进程
                      程序顺序执行的特征
                      前趋图是一个有向无循环图,由结点和有向边组成,结点代表各程序段的操作,而结点间的有向边表示两个程序段操作之间存在的前趋关系(→)。程序段Pi和Pj的前趋关系表示成Pi→Pj,其中,Pi是Pj的前趋,Pj是Pi的后继,其含义是Pi执行结束后Pj才能执行。例如,下图为3个程序段,其中输入是计算的前驱(计算是输入的后继),输入结束才能进行计算;计算是输出的前驱,计算结束才能进行输出。
                      
                      3个结点的前驱图
                      程序顺序执行时的主要特征包括顺序性、封闭性和可再现性。
                      程序并发执行的特征
                      若在计算机系统中采用多道程序设计技术,则主存中的多道程序可处于并发执行状态。对于上述有3个程序段的作业类,虽然每个作业有前趋关系的各程序段不能在CPU和输入/输出各部件并行执行,但是同一个作业内没有前趋关系的程序段或不同作业的程序段可以分别在CPU和各输入/输出部件上并行执行。例如,某系统中有一个CPU、一台输入设备和一台输出设备,每个作业具有3个程序段,输入I、计算Ci和输出Pii=l,2,3)。下图为3个作业的各程序段并发执行的前驱图,图中的前驱关系可记为:
                      →={I1→C1,I1→I2,I2→C2,I2→I3,I3→C3,C1→P1,C1→C2,C2→P2,C2→C3,C3→P3,P1→P2,P2→P3
                      
                      程序并发执行的前驱图
                      从上图中可以看出,I2与C1并行执行;I3、C2与P1并行执行;C3与P2并行执行。其中,I2、I3受到I1的间接制约,C2、C3受到C1的间接制约,P2、P3受到P1的间接制约,而C1、P1受到I1的直接制约,等等。
                      程序并发执行时的特征如下:
                      (1)失去了程序的封闭性。
                      (2)程序和机器的执行程序的活动不再一一对应。
                      (3)并发程序间的相互制约性。
                      例如,两个并发执行的程序段完成交通流量的统计,其中,“观察者”P1识别通过的车辆数,“报告者”P2定时将观察者的计数值清0。程序实现如下:
                      
                      对于上例,由于程序可并发执行,所以可能有以下3种执行序列:
                      ①COUNT:=COUNT+1;PRINT COUNT;COUNT:=0
                      ②PRINT COUNT;COUNT:=0;COUNT:=COUNT+1
                      ③PRINT COUNT;COUNT:=COUNT+1;COUNT:=0
                      假定COUNT的某个循环的初值为n,那么这3种执行序列得到的COUNT结果不同,如下表所示。
                      
                      程序并发执行的结果
                      这种不正确结果的发生是因为两个程序P1和P2共享变量COUNT引起的,即程序并发执行破坏了程序的封闭性和可再现性,使得程序和执行程序的活动不再一一对应。为了解决这一问题,需要研究进程间的同步与互斥问题。
               进程的组成
               进程是程序的一次执行,该程序可以和其他程序并发执行。进程通常是由程序、数据和进程控制块(Process Control Block,PCB)组成的。
               (1)PCB。PCB是进程存在的唯一标志,其主要内容如下表所示。
               
               PCB的内容
               (2)程序。程序部分描述了进程需要完成的功能。假如一个程序能被多个进程同时共享执行,那么这一部分就应该以可再入(纯)码的形式编制,它是程序执行时不可修改的部分。
               (3)数据。数据部分包括程序执行时所需的数据及工作区。该部分只能为一个进程所专用,是进程的可修改部分。
               进程的状态及其状态间的切换
                      三态模型
                      在多道程序系统中,进程在处理器上交替运行,状态也不断地发生变化,因此进程一般有3种基本状态:运行、就绪和阻塞。下图显示了进程基本状态及其转换,也称三态模型。
                      
                      进程的三态模型
                      (1)运行。当一个进程在处理机上运行时,则称该进程处于运行状态。显然,对于单处理机系统,处于运行状态的进程只有一个。
                      (2)就绪。一个进程获得了除处理机外的一切所需资源,一旦得到处理机即可运行,则称此进程处于就绪状态。
                      (3)阻塞。阻塞也称等待或睡眠状态,一个进程正在等待某一事件发生(例如请求I/O,等待I/O完成等)而暂时停止运行,这时即使把处理机分配给进程也无法运行,故称该进程处于阻塞状态。
                      五态模型
                      事实上,对于一个实际的系统,进程的状态及其转换更复杂。例如,引入新建态和终止态构成了进程的五态模型,如下图所示。
                      
                      进程的五态模型
                      其中,新建态对应于进程刚刚被创建时没有被提交的状态,并等待系统完成创建进程的所有必要信息。因为创建进程时分为两个阶段,第一个阶段为一个新进程创建必要的管理信息,第二个阶段让该进程进入就绪状态。由于有了新建态操作系统,往往可以根据系统的性能和主存容量的限制推迟新建态进程的提交。类似地,进程的终止也可分为两个阶段,第一个阶段等待操作系统进行善后处理,第二个阶段释放主存。
                      具有挂起状态的进程状态及其转换
                      由于进程的不断创建,系统资源特别是主存资源已不能满足进程运行的要求。这时,就必须将某些进程挂起,放到磁盘对换区,暂时不参加调度,以平衡系统负载。或者是系统出现故障,或者是用户调试程序,也可能需要将进程挂起检查问题。下图是具有挂起状态的进程状态及其转换。
                      
                      细分进程状态及其转换
                      (1)活跃就绪。活跃就绪是指进程在主存并且可被调度的状态。
                      (2)静止就绪。静止就绪是指就绪进程被对换到辅存时的状态,它是不能被直接调度的状态,只有当主存中没有活跃就绪态进程,或者是挂起态进程具有更高的优先级时,系统将把挂起就绪态进程调回主存并转换为活跃就绪。
                      (3)活跃阻塞。活跃阻塞是指进程在主存,一旦等待的事件产生便进入活跃就绪状态。
                      (4)静止阻塞。静止阻塞是指阻塞进程对换到辅存时的状态,一旦等待的事件产生便进入静止就绪状态。
 
       面向对象基本概念
               对象
               在面向对象的系统中,对象是基本的运行时实体,它既包括数据(属性),也包括作用于数据的操作(行为)。所以,一个对象把属性和行为封装为一个整体。封装是一种信息隐蔽技术,其目的是使对象的使用者和生产者分离,使对象的定义和实现分开。从程序设计者的角度看,对象是一个程序模块;从用户的角度看,对象为他们提供了所希望的行为。在对象内的操作通常叫做方法。一个对象通常可由对象名、属性和方法(操作)三部分组成。
               在现实世界中,每个实体都是对象,如学生、汽车、电视机和空调等都是现实世界中的对象。每个对象都有其属性和操作,如电视机有颜色、音量、亮度、灰度和频道等属性,可以有切换频道、增大/减低音量等操作。电视机的属性值表示了电视机所处的状态,而这些属性只能通过其提供的操作来改变。电视机的各组成部分,如显像管、电路板和开关等都封装在电视机机箱中,人们不知道也不必关心电视机内部是如何实现这些操作的。
               消息
               对象之间进行通信的一种构造叫做消息。当一个消息发送给某个对象时,包含要求接收对象去执行某些活动的信息。接收到信息的对象经过解释,然后予以响应。这种通信机制叫做消息传递。发送消息的对象不需要知道接收消息的对象如何响应该请求。
               类
               一个类定义了一组大体上相似的对象。一个类所包含的方法和数据描述了一组对象的共同行为和属性。把一组对象的共同特征加以抽象并存储在一个类中,是面向对象技术最重要的一点,是否建立了一个丰富的类库,是衡量一个面向对象程序设计语言成熟与否的重要标志。
               类是对象之上的抽象,对象是类的具体化,是类的实例(instance)。在分析和设计时,通常把注意力集中在类上,而不是具体的对象。只需对类做出定义,而对类的属性的不同赋值即可得到该类的对象实例。
               有些类之间存在一般和特殊关系,即一些类是某个类的特殊情况,某个类是一些类的一般情况。这是一种is-a关系,即特殊类是一种一般类。例如,“汽车”类、“轮船”类、“飞机”类都是一种“交通工具”类。特殊类是一般类的子类,一般类是特殊类的父类。同样,“汽车”类还可以有更特殊的类,如“轿车”类、“货车”类等。在这种关系下形成一种层次的关联。
               “类及对象”(或对象类)是指一个类和该类的所有对象。
               继承
               继承是父类和子类之间共享数据和方法的机制。这是类之间的一种关系,在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
               一个父类可以有多个子类,这些子类都是父类的特例,父类描述了这些子类的公共属性和方法。一个子类可以继承其父类(或祖先类)中的属性和方法,这些属性和方法在子类中不必定义,子类中还可以定义自己的属性和方法。
               只从一个父类A得到继承,叫做“单重继承”。如果一个子类有两个或更多个父类,则称为“多重继承”。
               多态
               对象收到消息时,要予以响应。不同的对象收到同一消息可以进行不同的响应,产生完全不同的结果,这种现象叫做多态(polymorphism)。在使用多态的时候,用户可以发送一个通用的消息,而实现细节则由接收对象自行决定。这样,同一个消息就可以调用不同的方法。
               多态的实现受到继承的支持,利用类的继承的层次关系,把具有通用功能的消息存放在高层次,而实现这一功能的不同行为放在较低层次,在这些低层次上生成的对象能够给通用消息以不同的响应。
               多态有几种不同的形式,Cardelli和Wegner把它分为4类,如下图所示。其中,参数多态和包含多态称为通用的多态,过载多态和强制多态称为特定的多态。
               
               多态的4类形式
               参数多态是应用比较广泛的多态,被称为最纯的多态。许多语言中都存在包含多态,最常见的例子就是子类型化,即一个类型是另一个类型的子类型。过载(overloading)多态是指同一个名字在不同上下文中可代表不同的含义。
               动态绑定
               绑定是一个把过程调用和响应调用需要执行的代码加以结合的过程。在一般的程序设计语言中,绑定是在编译时进行的,叫做静态绑定。动态绑定则是在运行时进行的,因此,一个给定的过程调用和代码的结合直到调用发生时才进行。
               动态绑定(dynamic binding)是与类的继承以及多态相联系的。在继承关系中,子类是父类的一个特例,所以父类对象可以出现的地方,子类对象也可以出现。因此在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法进行连接,即动态绑定。
               面向对象原则
               面向对象方法中的五大原则是:
               (1)单一责任原则(Single Responsibility Principle,SRP)。当需要修改某个类的时候原因有且只有一个,让一个类只做一种类型责任。
               (2)开关原则(Open&Close Principle,OCP)。对扩展开放、对修改封闭,即软件实体应该是可扩展(即开放的)而不可修改的(即封闭的)。
               (3)里氏替换原则(Liskov Substitution Principle,LSP)。在任何父类可以出现的地方,都可以用子类的实例来赋值给父类型的引用。当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有是一个(is-a)关系。
               (4)依赖倒置原则(Interface Segregation Principle,ISP)。高层模块不应该依赖于低层模块,二者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。
               (5)接口分离原则(Dependence Inversion Principle,DIP)。依赖于抽象,不要依赖于具体,同时在抽象级别不应该有对于细节的依赖。这样做的好处就在于可以最大限度地应对可能的变化,即:使用多个专门的接口比使用单一的总接口总要好。
   题号导航      2020年下半年 软件评测师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第46题    在手机中做本题