1. 软件产品的特性是什么?
答:● 软件是一种逻辑产品,具有无形性;
 ● 软件产品的生产主要是研制;主要是脑力劳动;
 ● 软件不存在磨损和老化问题,但存在退化问题;
 ● 软件产品的成本非常昂贵,其开发方式目前尚未完全摆脱手工生产方式;
  ● 软件具有“复杂性”,其开发和运行常受到计算机系统的限制。
6. 软件生存周期各阶段的主要任务是什么?
答:软件生存周期按瀑布模型分为6个阶段:
● 可行性研究与计划(确定系统的目标和规模,分析项目的可行性);
● 需求分析与规格说明(明确系统的规格和要求);
● 设计(包括概要设计和详细设计,将系统分解为模块);
● 编程(用程序语言实现每个模块,简单容易);
● 测试(发现并改正错误,分为模块测试、集成测试和系统联调三级);
● 运行维护(扩充功能、纠错等)。
5. 如何画分层数据流图?有哪些基本原则?
答:总的原则是:至顶而下,逐层分解(画分层数据流图)。逐层分解的画法可以控制每一层的复杂度。
顶层:将整个系统作为一个加工,描述系统边界(输入与输出)。
中间层:将某个加工分解为一组子加工,其中的子加工还需进一步分解。
底层:由不再进行分解的基本加工组成。
画分层数据流图的基本原则有:① 数据守恒与数据封闭原则。② 加工分解的原则。③ 子图与父图“平衡”的原则。④ 合理使用文件的原则。basic语言是什么软件
2. 集中式模型和分布式模型相比各有什么优缺点?
答:以集中式的仓库模型为例。其主要优点:
(1)数据由某个子系统产生,并且被存储到仓库中,以便为另外一些子系统共享;
(2)由于中央集中控制的缘故,共享数据能得到有效的管理,各子系统之间不需要通过复杂的机制来传递共享数据;
(3)一个子系统不必关心其他的子系统是怎么使用它产生的数据;
(4)所有的子系统都拥有一致的基于中央数据仓库的数据视图。如果新子系统也采用相同的规范,则将它集成于系统中是容易的。
但这种系统也有明显的缺陷:
(1)虽然共享数据得到了有效的管理,但随之而来的问题是各子系统必须有一致的数据视图以便能共享数据,换句话说,就是各子系统之间为了能共享数据必须走一条折中的路线,这不可避免地会影响整个系统的性能。
(2)一个子系统发生了改变,它产生的数据也可能发生结构上的改变。问题随之而来,其他的子系统如何能正确解析这些数据呢?所以为了达到共享的目的,数据翻译系统会被引入到整个系统当中。但这种翻译的代价是很高的,并且有时是不可能完成的。
(3)中央数据仓库和各子系统的私有数据库必须有相同的关于备份、安全、访问控制和恢复的策略,这可能会影响子系统的效率。
(4)集中式的控制使数据和子系统的分布变得非常困难甚至成为不可能。这里分布指的是将数据或子系统分散到不同的机器上。
分布式结构有这样的一些优势:
(1)资源共享:系统中每个服务节点上的资源都可以被系统中的其他节点访问;
(2)开放性高:系统可以方便地增删不同软硬结构的节点;
(3)可伸缩性好:系统可以方便地增删新的服务资源以满足需要;
(4)容错能力强:分布式系统中的信息冗余可以容忍一定程度的软硬故障;
(5)透明性高:系统中的节点一般只需知道服务的位置而不必清楚系统的结构。
但分布式结构也存在着一些不足:
(1)复杂性:分布式系统比集中式系统要复杂得多。集中式系统的性能主要依赖于主机的处理器能力,而分布式系统的性能则还会依赖于网络的带宽,这让情形变得更加复杂。
(2)安全性:网络环境随时面临着各种威胁:病毒、恶意代码、非法访问等。如何保证安全性是一个让人头疼的问题。
(3)可管理性:分布式系统的开放性造成了系统的异构性。显而易见,管理异构的系统比管理主机系统要困难得多。
(5)不可预知性:这主要指系统的响应时间。网络环境本身的特点决定了网络负载会明显地影响整个系统的响应时间。
7.分布式对象模型与客户-服务器模型有什么异同?
答:在C/S模型中,客户和服务器的“地位”是不“平等”的:客户只能向服务器提出服务请求,
而服务器不能向客户提出服务请求,同时服务器之间可以互相提供服务。另外,客户一般要知道服务器在网络上的具体位置(服务器的域名或者IP地址),相反,服务器则不需要。这种差别在一定程度上限制了系统的灵活性和可扩展性。而在分布式对象结构中,服务的提供者是被称为“对象”(Object)的系统组件(System Component)。每个对象的地位在逻辑上是平等的,它们可以互相为对方提供所需的服务。在这种情况下,提供服务的对象就是服务器,而提出服务请求的对象就是客户。为了能够提供服务,每个对象都有一个服务接口。
面向对象七大原则
1. 单一职责原则(Single Responsibility Principle)
每一个类应该专注于做一件事情。
2. 里氏替换原则(Liskov Substitution Principle)
超类存在的地方,子类是可以替换的。
3. 依赖倒置原则(Dependence Inversion Principle)
实现尽量依赖抽象,不依赖具体实现。
4. 接口隔离原则(Interface Segregation Principle)
应当为客户端提供尽可能小的单独的接口,而不是提供大的总的接口。
5. 迪米特法则(Law Of Demeter)
又叫最少知识原则,一个软件实体应当尽可能少的与其他实体发生相互作用。
6. 开闭原则(Open Close Principle)
面向扩展开放,面向修改关闭。
7. 组合/聚合复用原则(Composite/Aggregate Reuse Principle CARP)
尽量使用合成/聚合达到复用,尽量少用继承。原则: 一个类中有另一个类的对象。
1.消息传递机制与传统程序设计模式中的过程调用相比,有何本质区别?
答:(1) 消息传递必须给出信道的信息,通常要指出明确的接收方。
(2) 由于接收方是一通信实体,具有保持状态的能力,所以同一发送方在不同时刻向同一接收方发送同样的信息,可因接收方的当前状态不同而得到不同的结果。
(3) 消息传递可以是异步的,发送方可以不必等待接收方返回信息就可以继续执行后面的操作,因而支持程序的并发和分布执行,而过程调用只能是同步的,本质上是串行的。
2.比较面向对象方法与结构化方法的特点,说明为什么面向对象方法比结构化方法更加优越。
答:结构化方法是以数据流和数据封闭性为基础的,由SA、SD和 SP三部分构成。该方法:
①无法实现从问题空间到解空间的直接映射。开发方法求解过程是先对应用领域(问题空间)进行分析,建立起问题空间的逻辑模型,再通过一系列复杂的转换和算法,构造计算机系统,获得解空间。
②无法实现高效的软件复用。结构化方法是面向过程的,将数据和处理过程(操作)分离,不仅增加了软件开发的难度,也难于支持软件复用。
③开发方法难以实现从分析到设计的直接过渡,从SA到SD要经过一系列复杂的变换。
而面向对象的方法以对象为核心,强调模拟现实世界中的概念而不是算法,尽量用符合人类认识世界的思维方式来渐进地分析、解决问题。
①使问题空间与解空间具有一致性,便于对软件开发过程所有阶段进行综合考虑,能有效地降低软件开发的复杂度,提高软件质量。
②软件开发各个阶段有机集成,有利于系统的稳定性。
③具有良好的重用性。面向对象的技术在利用可重用的软件成分构造新软件系统上具有很大的灵活性,由于对象所具有的封装性和信息隐蔽,使得对象的内部实现与外界隔离,具有较强的独立性。继承性本身就是一种重用机制。
综上,显然面向对象方法比结构化方法更加优越。
3.程序设计语言的选择对应用程序的开发有什么样的影响?
答:通常应根据软件系统的应用特点,程序设计语言的内在特性以及系统的性能要求等方面来进行选择。程序设计语言的选择应该考虑以下因素:
项目的应用领域。应尽量选取适合某个应用领域的语言。例如,选择Visual Basic来开发数据库应用就比选择Visual C++要容易一些。
算法和计算复杂性。要根据不同语言的特点来选取能够适应软件项目算法和计算复杂性的语言。例如,对于科学计算较多的应用一般会考虑选择FORTRAN语言。
软件的执行环境。要选取机器上能运行且具有相应支持软件的语言。例如,在嵌入式系统中(这类系统的硬件资源往往较少),软件开发语言多为C/C++、Java。
性能因素。应结合工程具体性能来考虑,例如实时系统对响应速度有特殊要求,就应选择汇编语言、C语言等。
数据结构的复杂性。要根据不同语言构造数据结构类型的能力选取合适的语言。C++、Java这样的高级语言显然比汇编语言的表达能力要强。
软件开发人员的知识水平以及心理因素。知识水平包括开发人员的专业知识,程序设计能力;心理因素是指开发人员对某种语言或工具的熟悉程度。从技术的层面来讲,大多数的任务用任何一门高级语言都可以完成,所以选择开发者熟悉的语言是可以提高效率的。为此,
要尽量避免受外界的影响,盲目追求高、新的语言。
4.结构化程序设计的特点是什么?为什么要采用结构化程序设计?
答:结构程序设计的概念最早是由E. W. Dijkstra提出来的,他指出:“可以从高级语言中取消GOTO语句,程序质量与程序中所包含的GOTO语句的数量成反比”。并指出结构程序设计并非简单的取消GOTO语句,而是创立一种新的程序设计思想、方法和风格,以显著提高软件生产率和质量。
提高程序可读性的关键是使程序结构简单清晰,结构化程序设计(SP)方法是达到这一目标的重要手段。
结构化程序设计是一种程序设计技术,它采用自顶向下,逐步求精的程序设计方法和单入口和单出口的控制结构。具体来说,结构化程序设计技术主要具有以下特点:
(1)自顶而下,逐步求精
这种逐步求精的思想符合人类解决复杂问题的普遍规律,从而可以显著提高软件开发的效率。
而且这种思想还体现了“先全局,后局部”、“先抽象,后具体”的方法,使开发的程序层次结构清晰,易读、易理解还易验证,因而提高了程序的质量。
将程序自顶向下逐步细化的分解过程用一个树状结构来描述,如图<10>所示。
(2)单入口和单出口的控制结构
结构化的程序是由且仅由顺序、选择、循环三种基本控制结构组成,既保证了程序结构清晰,又提高了程序代码的可重用性。这三种基本结构可以组成所有的各种复杂程序。
结构化程序设计的基本原理中一个重要的概念是“模块化”。因为要实现结构化的程序设计总体的思想是:自顶向下,逐步求精,分而治之。相应的结构化程序设计的步骤如图<1>所示。
模块是由边界元素限定的相邻的程序元素的序列,而且有一个总体标志符来代表它。
所谓模块化,即是将一个大任务分成若干个较小的任务,较小的任务又细分为更小的任务,直到更小的任务只能解决功能单一的任务为止,一个小任务称为一个模块。各个模块可以分
别由不同的人编写和调试。把大任务逐步分解成小任务的过程可以称为是“自顶向下,逐步细化”的过程。
对于模块的设计和实现有以下5条基本的标准:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。