java八股文之第零篇:结构化开发方法、面向对象开发方法、编译型语言、解释性语言

前期知识

1结构化开发方法和面向对象开发方法

   软件开发方法指在项目投资规模和时间限制内,设计、实现符合用户需求的高质量软件,根据软件开发的特点,提出的多种软件开发策略。结构化方法和面向对象方法都是计算技术中常用的软件开发方法,两种开发方法各有利弊,选择哪一种方法要根据分析者的熟练程度和项目的具体类型而定。

1.1结构化开发方法

   结构化开发方法是一种传统的软件开发方法,用系统工程的思想和工程化的方法,按用户至上的原则,结构化、模块化、自顶向下地对系统进行分析和设计。结构化开发方法又称生命周期法,是迄今为止最传统、应用最广泛的一种信息系统开发方法。

   结构化程序设计方法包含结构化分析、结构化设计、结构化程序设计三个方面,分别对应了软件开发中的分析、设计和编码阶段。

1.1.1基本思想

   结构化开发方法的基本思想是软件功能的分解和抽象。
   系统按功能要求分为若干子功能模块,子模块又进一步分解为若干个子子模块,循此进行,从上往下进行功能分解。分解的结果将逐层地产生一系列的功能模块,随着分解的层次由高到低的发展,模块功能是逐层地由抽象变得具休,由综合变得单一。

1.1.2基本要点

(1)自顶向下:
将复杂的大问题分解为相对简单的小问题,找出每个问题的关键、重点所在,然后用精确的思维定性、定量地去描述问题。

(2)逐步求精
将现实问题经过几次抽象(细化)处理,最后只需解决一些简单的算法描述和算法实现问题。

(3)模块化设计
逐步求精的结果是得到一系列以功能块为单位的算法描述。以功能块为单位进行程序设计,实现其求解算法的方法称为模块化。模块化的目的是为了降低程序复杂度,使程序设计、调试和维护等操作简单化。

1.1.3开发过程

在结构化软件开发方法的瀑布模型中,项目团队首先分析,然后确定需求和需求的优先级。接下来,在设计阶段,根据需求说明进行详细设计。接下来就会执行代码实现。代码实现后使用合理的数据用于实施和测试,以供最终用户评估。最后阶段涉及评估和维护,后者确保一切顺利运行。

1.2面向对象开发方法

   面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。
   在面向对象建模中,代码和数据被合并成一个单一的不可拆分的单元,也就是一个对象。OOP在结构化程序设计的基础上发展而来的。封装是OOP的基础,其本质在于在数据外构造一个壳、或者说是保护层,以限制外围程序对其的影响。
   面向对象技术包括面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)三部分。面向对象方法有几个需要遵循的基本原则:即抽象、封装、继承和多态。

1.2.1开发模型

   面向对象方法遵循系统开发的迭代和增量方法。系统开发生命周期被视为由几个增量或阶段组成:开始,阐述,构造和过渡。这是一种自底向上和自顶向下相结合的方法,以对象建模为基础,不仅考虑了输入、输出数据结构,也包含了所有对象的数据结构。

1.2.2UML

   面向对象方法使用统一建模语言UML(Unified Modeling Language)。它专注于系统的三个架构视图:功能,静态和动态。所有图都迭代地进行细化,直到信息系统的要求被完全理解。
功能视图从用户的角度描述了系统的外部行为。用例和用例图用于描述功能视图。静态视图按照属性,方法,类,关系和消息来描述。类责任标记(CRC)卡,类图和对象图用于描绘静态视图。动态视图由序列图,协作图和状态图表示。

1.2.3需求分析

   面向对象开发方法中,需求分析过程与系统模型的形成过程一致,开发人员与用户的讨论从实体开始,即开发人员必须清晰地明白现实系统才能导出系统模型,这就使用户与开发人员之间的信息交流更加通畅,从而避免了需求讨论中可能出现的问题。

1.2.4可维护性

   在面向对象语言中,子类不仅可以继承父类的属性和行为,而且也可以重写父类的某个行为。利用这一特点,设计者可以方便地进行功能修改:引入某类的一个子类,对要修改的行为进行重写。由于不再在原来的程序模块中引入修改,所以改善了软件的可修改性,从而也改善了软件的可维护性。

1.2.5 主要特征(封装、继承、多态)

(1)封装性
   封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。其目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。
(2)继承性
   继承性是子类自动共享父类之间数据和方法的机制。类的对象是各自封闭的,如果没有继承性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。
(3)多态性
   同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次。

1.3两种方法对比

1.3.1优点

   结构化方法具有开发思想清晰,易学易用,模块层次分明,便于分工开发和调试,程序可读性强等特点。但程序较固定,界面简单,使用周期长等软件。结构化开发方法在整合,部署和维护方面是可行的,但仅限于具有稳定需求规格的小型项目。这一方法使软件开发者专注于将较大的算法分解成较小的算法。但传统的方法如瀑布,螺旋缺乏灵活性来处理面向对象的模型。

   面向对象方法充分利用对象的封装性,继承性和多态性使得软件的可靠性、可重用性、可扩充性和可维护性得到充分体现。面向对象的开发方法最适合于那些意味着使用新兴对象技术来构建,管理和组装这些对象到有用的计算机应用程序的系统的项目。
事实上,真正实用的系统开发方法往往是多种开发方法的结合。如何综合应用,要根据开发系统的规模、系统的复杂程度、系统开发方法的特点,以及所能使用的计算机软件等诸多因素综合考虑后决定。

1.3.2出发点

   结构化方法的出发点是“怎样做”,即结构化方法的着眼点是系统功能,要点是系统的功能分解,重点是建立功能模型。即自顶而下进行功能分解,逐步求精,这是从抽象到具体,从纲要到细节的过程。

   面向对象(OO)方法的出发点是“是什么”即要求解的实际问题,它“是什么”,面向对象方法的着眼点是系统中的对象,要点是对象特性的抽象,重点是建立对象模型。面向对象方法需要自顶向下的分解与自低向上的构造,这是从一般到具体,由具体到一般的过程;通过类的选择逐步求精。

1.3.3实现着重

结构化方法中的实现着重于编写代码。面向对象方法中的实现可以简化为创建类的实例,开发新的类,并对这些对象建立联系,使它们可以相互通讯。

1.3.4重用

结构化方法很少考虑重用问题。面向对象方法本质上是基于重用的软件开发法。

另外,面向对象方法认为一个类,在逻辑上既包含数据,又包含功能。它取代了实体只能定义数据的概念,继承性取代了实体关系的子类型。处理分析图描述了不同类的实例之间的消息传送,取代了数据流图。传统的实体关系图被类的关系图和类的分层图所取代。面向对象方法强调数据结构,使得开发过程更为稳定。
参考链接

二解释性语言和编译型语言

   计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。
   翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。

3.1编译性语言

   编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。编译型语言有C/C++、Pascal/Object Pascal(Delphi)等。

3.2解释性语言

   解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性java语言,专门有一个解释器能够直接执行java程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。
   脚本语言是解释性语言。脚本语言一般都有相应的脚本引擎来解释执行。它们一般需要解释器才能运行。所以只要系统上有相应语言的解释程序就可以做到跨平台。脚本语言是一种解释性的语言,例如vbscript,javascript,installshield script等等,它不象c\c++等可以编译成二进制代码,以可执行文件的形式存在。

3.3编译器与解释器的区别

   编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。

   编译性语言例如c语言:用c语言开发了程序后,需要通过编译器把程序编译成机器语言(即计算机识别的二进制文件,因为不同的操作系统计算机识别的二进制文件是不同的),所以c语言程序进行移植后,要重新编译。(如windows编译成ext文件,linux编译成erp文件)。

   解释性语言,例如java语言,java程序首先通过编译器编译成class文件,如果在windows平台上运行,则通过windows平台上的java虚拟机(VM)进行解释。如果运行在linux平台上,则通过linux平台上的java虚拟机进行解释执行。所以说能跨平台,前提是平台上必须要有相匹配的java虚拟机。如果没有java虚拟机,则不能进行跨平台。

java是解释语言还是编译语言

   java语言是解释性语言。java很特殊,java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。
   Java既可以被编译,也可以被解释。通过编译器,可以把Java程序翻译成一种中间代码 - 称为字节码 - 可以被Java解释器解释的独立于平台的代码。
通过解释器,每条Java字节指令被分析,然后在计算机上运行。只需编译一次,程序运行时解释执行。
   Java字节码使“写一次,到处运行”成为可能。可以在任何有Java编译器的平台上把Java程序编译成字节码。这个字节码可以运行在任何Java VM上。例如,同一个Java程序可以运行在WindowsNT、Solaris和Macintosh上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值