免费智能真题库 > 历年试卷 > 软件设计师 > 2022年上半年 软件设计师 上午试卷 综合知识
  第18题      
  知识点:   程序设计   面向对象程序设计语言   面向对象分析   软件项目管理   程序设计语言   面向对象程序设计
  关键词:   程序设计语言   面向对象程序设计   面向对象分析   程序设计   对象   面向对象   语言        章/节:   软件工程基础知识       

 
一个软件项目的活动图如下图所示,其中顶点表示项目里程碑,连接顶点的边表示包含的活动,则里程碑(17)在关键路径上。若在实际项目进展中,活动AD在活动 AC开始5 天后才开始,而完成活动 DF过程中,由于有临时事件发生,实际需要15天才能完成,则完成该项目的最短时间比原计划多了(18)天

 
 
  A.  5
 
  B.  6
 
  C.  7
 
  D.  8
 
 
 

  相关试题:软件工程基础知识          更多>  
 
  第13题    2021年上半年  
   26%
下列关于风险的叙述中,不正确的是( )。
  第15题    2015年下半年  
   34%
若用户需求不清晰且经常发生变化,但系统规模不太大且不太复杂,则最适宜采用(15)开发方法,对于数据处理领域的问题,若系统规..
  第17题    2018年下半年  
   37%
某软件项目的活动图如下图所示,其中顶点表示项目里程碑,连接顶点的边表示包含的活动,边上的数字表示活动的持续时间(天),则..
   知识点讲解    
   · 程序设计    · 面向对象程序设计语言    · 面向对象分析    · 软件项目管理    · 程序设计语言    · 面向对象程序设计
 
       程序设计
               类和继承
               1)类
               一个类是一些属性和方法的封装体,类的定义用关键字class声明,用关键字public、protected、 private指定类的成员的存取控制属性:private(私有)成员只有类内部的方法才能访问,protected(保护)成员派生类和同一文件夹下的类可以访问,public(公有)成员可以从类的外部访问。默认是public。这体现了面向对象的以下指导思想:尽量将类内部的细节隐藏起来,对类的属性的操作应该通过类的方法来进行。
               另外,public还可以用来修饰类,public类能够被其他文件夹下的类访问,非public类只能被同一文件夹下的类访问。一个.java文件中可以包含多个类,会被编译成多个.class文件,但只能有一个public类,而且该类名要和文件名一样。
               2)继承
               Java中用关键字extends表示类间的继承关系。父类的公有属性和方法成为子类的属性和方法,子类如果有和父类的同名、同参数类型的方法,那么子类对象在调用该方法时,调用的是子类的方法,亦即方法的重置。如果想要调用父类的同名方法,需要用super关键字(属性同理)。
               子类的对象可以作为祖先类的对象使用,即所谓类的向上转换,反之则不行。具体表现在:可以用子类对象来对祖先类对象赋值,可以用子类对象作为实参去调用以父类对象为形参的函数。
               对象的引用本质
               Java中的对象实际上是对象的引用,本质上和C语言中的指针是一样的;但也和C语言指针不尽相同,例如,不能自增、自减,不能强制转换成其他类型。
               例如:
               
               构造方法
               构造方法就是类的对象生成时会被调用的方法。每个类至少有一个构造方法(Constructor),也称构造函数。构造方法的名字和类名相同,没有任何返回类型。每个类都有一个默认的构造方法,但当用户自定义了构造方法后,默认的构造函数就不再有效了。
               重载
               同一个类中的两个或两个以上方法,名字相同,而参数个数不同或参数类型不同,称为重载。注意:不能有各方法名字和参数都一样,而仅仅返回值类型不同。
               静态属性和静态方法
               静态属性和静态方法的声明用关键字static实现,一个类的静态属性只有一份,由所有该类的对象共享。不需要创建对象也能访问类的静态属性和方法,访问方式为"类名.静态属性或静态方法",静态方法与对象无关,因此不能在静态方法中访问非静态属性和调用非静态方法。
               this和super关键字
               这两个关键字颇为重要。this代表当前对象,super代表当前对象的父类的东西。
               this主要用途有以下两个。
               (1)一个构造函数调用另一个构造函数,对构造函数的调用必须是第一条语句。
               (2)将对象自身作为参数来调用一个函数。
               super的用途如下:在子类中调用父类的同名方法,或在子类的构造函数中调用父类的构造函数,此时亦必须是第一条语句。
               多态
               所谓多态,是指通过基类对象调用一个基类和派生类都有的方法时,在运行时才能确定到底调用的是基类的方法还是派生类的方法。多态的好处是增加了程序的可扩展性。多态是通过动态联编实现的,即编译时不确定,程序运行时才确定调用哪个函数。
               抽象类与接口
               1)抽象类
               抽象类通过关键字abstract实现,抽象类的目的是定义一个框架,规定某些类必须具有的一些共性。
               包含抽象方法的类一定是抽象类,所谓抽象方法是指没有函数体的方法。
               抽象类的直接派生类必须实现其抽象方法;抽象类只能用于继承,不能创建对象。
               2)接口(Interface)
               接口用关键字interface声明,只能用于继承。注意:此时关键字为implements(实现)。接口用于替代多继承的概念,能实现多继承的部分特点,又避免了多继承的混乱,还能起到规定程序框架的作用。注意:接口也可以用于多态。
               直接继承了接口的类,必须实现接口中的抽象方法;间接的则可以实现,也可以不实现。
               3)抽象类与接口的异同
               接口和抽象类都不能创建对象。
               抽象类不能参与多继承,抽象类可以有非静态的成员变量,可以有非抽象方法;接口可以参与多继承,所有属性都是静态常量,所有方法都是public抽象方法。
               异常处理
               1)异常概念
               异常,即出错,比如0作为除数、找不到类、打开文件错误、数组越界等。异常如果不进行处理,那么程序运行就会结束;如果进行处理,那么会在执行完异常处理代码后继续运行。
               Java中所有异常类均继承自类Exception。
               Java中的异常类层次结构如下:
               
               此外,还有EOFException、 FileNotFoundException、 MalformedURLException等。
               2)捕获异常
               异常处理的典型用法如下,将可能出现异常的代码放在try块中,其后由一个或多个catch捕获相应异常进行处理,注意只执行第一个匹配的catch块,忽略后面的。
               
               如果某个方法中所产生的异常该方法自己没有处理,那么可以在调用该方法的方法中进行处理,如果自己处理了,那么调用它的方法就无法得到该异常。
               3)抛出异常
               异常除了运行中系统产生的之外,也可以主动抛出异常,用关键字throw,如throw new Exception()。注意:throw只能抛出Throwable子类的异常。
               4)带throws关键字的方法
               带throws关键字的方法声明如下:
               
               强制调用该方法的方法必须处理可能发生的异常,或者将异常重新定向。假定方法A带throws关键字,而方法B中调用了方法A,则方法B中必须有处理方法A中可能产生的异常的语句,或者方法B也带throws关键字,指明调用方法B的方法必须处理异常。
               final关键字
               用final关键字定义的常量,在其初始化或第一次赋值后,其值不能被改变。常量必须先有值,然后才能使用。对于常量的第一次赋值只能在构造函数中进行。
               final对象的值不能被改变,指的是该对象不能再指向其他对象,而不是指不能改变当前对象内部的属性值。
               函数参数声明为final后,函数中不能改变其值。
               final方法是不能被重置的方法。
               final类不能被继承,其所有方法都是final的,但属性可以不是final的。
 
       面向对象程序设计语言
               Smalltalk
               Smalltalk并不是一种单纯的程序设计语言,而是反映面向对象程序设计思想的程序设计环境。这个系统在其本身的设计中强调了对象概念的归一性,引入了类、方法、实例等概念和术语,应用了单重继承和动态绑定,成为OOPLs发展过程中的一个引人注目的里程碑。
               在Smalltalk-80中,除了对象之外没有其他形式的数据,对一个对象的唯一操作就是向它发消息。在这种语言中,连类也被看成是对象——类是元类的实例。因此,定义一个类就是向元类发一条消息,请求元类执行它的new来生成一个实例,也就是生成这个类,而消息中的参数就是关于这个类的说明。Smalltalk全面支持面向对象的概念。
               Eiffel
               Eiffel的主要特点是全面的静态类型化、有大量的开发工具、支持多继承。Eiffel也全面支持面向对象的概念。
               C++
               C++语言是一种面向对象的强类型语言,由AT&T的Bell实验室于1980年推出。
               C++语言是C语言的一个向上兼容的扩充,而不是一种新语言。C++是一种支持多范型的程序设计语言,它既支持面向对象的程序设计,也支持面向过程的程序设计。
               C++支持基本的面向对象概念,包括对象、类、方法、消息、子类和继承。C++完全支持多继承,并且通过使用try/throw/catch模式提供了一个完整的异常处理机制。它同时支持静态类型和动态类型,也完全支持多继承,不提供自动的无用存储单元收集,这必须通过程序员来实现,或者通过编程环境提供合适的代码库来予以支持。
               Java
               Java语言起源于Oak语言,Oak语言被设计成能运行在设备的嵌入式芯片上。
               Java编译成伪代码,这需要一个虚拟机来对其进行解释,Java的虚拟机在几乎每一种平台上都可以运行。这实质上使得开发是与机器独立无关的,并且提供了通用的可移植性。
               Java把类的概念和接口的概念区分开来,并试图通过只允许接口的多继承来克服多继承的危险。
               Java的异常处理机制与C++的try/throw/catch相类似,但更加严密。在Java中,通过声明轻型线程来处理并发性,这些线程通过副作用和同步协议进行通信。
               Java Beans是组件,即类及其所需资源的集合,它们主要被设计用来提供定制的GUI小配件。
               Java中关于面向对象概念的术语有对象、类、方法、实例变量、消息、子类和继承。
 
       面向对象分析
        面向对象分析的目的是为了获得对应用问题的理解。理解的目的是确定系统的功能、性能要求。
        面向对象分析包含5个活动,即认定对象、组织对象、描述对象间的相互作用、定义对象的操作和定义对象的内部信息。
               认定对象
               在应用领域中,按自然存在的实体确立对象。在定义域中,首先将自然存在的"名词"作为一个对象,这通常是研究问题、定义域实体的良好开始。通过实体间的关系寻找对象常常没有问题,而困难在于寻找(选择)系统关心的实质性对象,实质性对象是系统稳定性的基础。
               组织对象
               分析对象间的关系,将相关对象抽象成类,其目的是为了简化关联对象,利用类的继承性建立具有继承性层次的类结构。抽象类时可从对象间的操作或一个对象是另一个对象的一部分来考虑,如房子由门和窗构成,门和窗是房子类的子类。由对象抽象类,通过相关类的继承构造类层次,所以说系统的行为和信息间的分析过程是一种迭代表征过程。
               描述对象间的相互作用
               描述出各对象在应用系统中的关系,如一个对象是另一个对象的一部分、一个对象与其他对象间的通信关系等。这样可以完整地描述每个对象的环境,由一个对象解释另一个对象,以及一个对象如何生成另一个对象,最后得到对象的界面描述。
               定义对象的操作
               当考虑对象的界面时,自然要考虑对象的操作。其操作有从对象直接标识的简单操作,如创建、增加和删除等;也有更复杂的操作,如将几个对象的信息连接起来。一般而言,应避免对象太复杂,当连接的对象很复杂时,可将其标识为新对象。当确定对象的操作后,再定义对象的内部。对象内部定义包括其内部数据信息、信息存储方法、继承关系以及可能生成的实例数等属性。
 
       软件项目管理
               软件项目管理涉及的范围
               有效的软件项目管理集中在4个P上,即人员(Person)、产品(Product)、过程(Procedure)和项目(Project)。
               软件项目估算
               软件项目估算涉及人、技术、环境等多种因素,因此很难在项目完成前准确地估算出开发软件所需的成本、持续时间和工作量。因此,需要一些方法和技术来支持项目的估算,常用的估算方法有下列3种。
               (1)基于已经完成的类似项目进行估算。这是一种常用的也是有效的估算方法。
               (2)基于分解技术进行估算。分解技术包括问题分解和过程分解。问题分解是将一个复杂问题分解成若干个小问题,通过对小问题的估算得到复杂问题的估算。过程分解是指先根据软件开发过程中的活动(分析、设计、编码、测试等)进行估算,然后得到整个项目的估算值。
               (3)基于经验估算模型的估算。典型的经验估算模型有IBM估算模型、CoCoMo模型和Putnam模型。
               进度管理
               软件开发项目的进度安排有两种方式:系统最终交付日期已经确定,软件开发部门必须在规定期限内完成;系统最终交付日期只确定了大致的年限,最后交付日期由软件开发部门确定。
               进度安排的常用图形描述方法有甘特(Gantt)图和计划评审技术(PERT)图。
               1)Gantt图
               Gantt图中横坐标表示时间,纵坐标表示任务,图中的水平线段则表示对一个任务的进度安排,线段的起点和终点对应在横坐标上的时间分别表示该任务的开始时间和结束时间,线段的长度表示完成该任务所需的时间。
               Gantt图能清晰地描述每个任务从何时开始,到何时结束以及各个任务之间的并行性;但是它不能清晰地反映出各任务之间的依赖关系,难以确定整个项目的关键所在,也不能反映计划中有潜力的部分。
               2)PERT图
               PERT图是一个有向图,箭头表示任务,它可以表示完成该任务所需的时间;箭头指向节点表示流入节点的任务的结束,并开始流出节点的任务,这里把节点当成事件。只有当流入该节点的所有任务都结束时,节点所表示的事件才出现,流出节点的任务才可以开始。事件本身不消耗时间和资源,它仅表示某个时间点。一个事件有一个事件号和出现该事件的最早时刻和最迟时刻。每个任务还有一个松弛时间,表示在不影响整个工期的前提下,完成该任务有多少机动余地。
               PERT图不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了任务之间的关系,即哪些任务完成后才能开始另外一些任务,以及如期完成整个工程的关键路径。松弛时间则反映了完成某些任务是可以推迟其开始时间或延长其所需的完成时间。但是PERT图不能反映任务之间的并行关系。
               软件项目组织
               开发组织采用什么形式组织,不仅要考虑软件项目的特点,还需要考虑参与人员的素质。在软件项目组织中,其组织原则有以下3条。
               (1)尽早落实责任。在软件项目开始组织时,要尽早指定专人负责,使他有权进行管理,并对任务的完成负全责。
               (2)减少交流接口。一个组织的生产率随着完成任务时存在的通信路径数目的增加而降低。要有合理的人员分工、好的组织结构、有效的通信,减少不必要的生产率的损失。
               (3)责权均衡。软件管理人员承担的责任不应比赋予他的权利还大。
               软件配置管理
               软件配置管理(Software Configure Management,SCM)用于整个软件工程过程。其目标是标识变更、控制变更、确保变更正确地实现、报告有关变更。SCM是一组管理整个软件生存期各阶段中变更的活动。
               1)基线
               基线是软件生存期中各开发阶段的一个特定点,它的作用是把开发各阶段工作的划分更加明确化,使本来连续的工作在这些点上断开,以便于检查与肯定阶段成果。因此,基线作为一个检查点,在开发过程中,当采用的基线发生错误时,可以知道所处的位置,返回到最近和最恰当的基线上。
               2)软件配置项
               软件配置项(SCI)是软件工程中产生的信息项,它是配置管理的基本单位,对已经成为基线的SCI,虽然可以修改,但必须按照一个特殊的、正式的过程进行评估,确认每一处修改。
               3)版本控制
               表达系统不同版本的一种表示方法如下图所示。
               
               系统不同版本的一种表示方法
               4)变更控制
               变更控制是一项最重要的软件配置任务。为有效地实现变更控制,须借助配置数据库和基线的概念。
               配置数据库可以分为3类,即开发库、受控库和产品库。
               风险分析
               1)风险识别
               风险识别是试图系统化地确定对项目计划的威胁。风险识别的一个方法是建立风险条目检查表。该检查表可以用于识别风险,并使得人们集中来识别下列常见的、已知的及可预测的风险:产品规模、商业影响、客户特性、过程定义、开发环境等。
               2)风险预测
               风险预测又称为风险估算,它从两个方面评估一个风险:风险发生的可能性或概率;以及如果风险发生所产生的后果。通常项目计划人员与管理人员、技术人员一起,进行4种风险预测活动:建立一个尺度或标准,以反映风险发生的可能性;描述风险的后果;估计风险对项目和产品的影响;标注风险预测的整体精确度,以免产生误解。
               3)风险评估
               在进行风险评估时,建立了以下形式的三元组,即
               (ri,li,xi)
               式中:ri为风险;li为风险发生的概率;xi为风险产生的影响。
               一个对风险评估很有用的技术就是定义风险参照水准。对于大多数软件项目来说,成本、进度和性能就是3种典型的风险参照水准。
               在风险评估过程中,需要执行下面步骤:①定义项目的风险参考水平值;②建立每一组与每一个参考水平值之间的关系;③预测一组临界点以定义项目终止区域;④预测什么样的风险组合会影响参考水平值。
               4)风险控制
               一个有效的策略必须考虑3个问题:①风险避免;②风险监控;③风险管理及意外事件计划。如果软件项目组对于风险采取主动的方法,则避免是最好的策略。
 
       程序设计语言
        程序设计语言(Programming Language)是用于编写计算机程序的语言。语言的基础是一组记号和一组规则,根据规则由记号构成的记号串的总体就是语言。在程序设计语言中,这些记号串就是程序。程序设计语言包含三个方面,即语法、语义和语用。语法表示程序的结构或形式,即表示构成程序的各个记号之间的组合规则,但不涉及这些记号的特定含义,也不涉及使用者。语义表示程序的含义,即表示按照各种方法所表示的各个记号的特定含义,但也不涉及使用者。语用表示程序与使用的关系。
        程序设计语言的基本成分有:数据成分,用于描述程序所涉及的数据;运算成分,用以描述程序中所包含的运算;控制成分,用以描述程序中所包含的控制;传输成分,用以表达程序中数据的传输。
        程序设计语言按照语言级别可以分为低级语言和高级语言。低级语言有机器语言和汇编语言。低级语言与特定的机器有关、功效高,但使用复杂、繁琐、费时、易出差错。机器语言是表示成数码形式的机器基本指令集,或者是操作码经过符号化的基本指令集。汇编语言是机器语言中地址部分符号化的结果,或进一步包括宏构造。高级语言的表示方法要比低级语言更接近于待解问题的表示方法,其特点是在一定程度上与具体机器无关,易学、易用、易维护。常见的有Java、C、C++、PHP、Python和Delphi等。这类语言与人们使用的自然语言比较接近,大大提高了程序设计的效率。
 
       面向对象程序设计
        面向对象程序设计(Object Oriented Programming,OOP)是采用面向对象程序设计语言,采用对象、类及其相关概念所进行的程序设计,将设计模型转化为在特定的环境中系统,即实现系统。通过面向对象的分析与设计所得到的系统模型可以由不同的编程语言实现。一般采用如Java、C++、Smalltalk等面向对象语言,也可以用非面向对象语言实现,如C语言中的结构。
   题号导航      2022年上半年 软件设计师 上午试卷 综合知识   本试卷我的完整做题情况  
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 /
 
第18题    在手机中做本题