我想了解关于面向对象开发方法的知识，请写一篇详细的介绍
user
#### 面向对象开发方法的形成

传统的功能分解方法只能单纯反映管理功能结构的状况，数据流程模型（DFD）只是侧重反映事物的信息特征和流程，信息模拟只能被动地迎合实际问题需要的做法。结构化系统分析与设计方法：描述客观世界的问题领域与软件系统结构之间的不一致，结构化系统分析与设计只注重某些特定方面：
如：DFD--反映数据的特性和流向模型
业务流程图--反映业务操作的细节和程序模型#### 面向对象开发方法的组成

1、面向对象的（需求）分析OOA
2、面向对象的设计OOD
3、面向对象的程序OOP#### 面向对象开发方法的基本思想

客观世界是由各种各样的对象组成的，每种对象都有各自的内部状态和运动规律，不同对象之间的相互作用和联系就构成了各种不同的系统。
在设计和实现一个客观系统时，在满足需求的条件下，把系统设计成一些不可变的（相对固定）部分组成的最小集合（最好的设计）。这些不可变的部分就是所谓的对象。
以对象为主体的OO方法的进一步解释。#### 面向对象开发方法的开发过程

1、系统调查和需求分析：对系统将要面临的具体管理问题以及用户对系统开发的需求进行调查研究，即先弄清要干什么的问题。
2、分析问题的性质和求解问题：在繁杂的问题域中抽象地识别出对象以及其行为、结构、属性、方法等。一般称之为面向对象的分析，即OOA。
3、整理问题：对分析的结果作进一步的抽象、归类、整理，并最终以范式的形式将它们确定下来。一般称之为面向对象的设计，即OOD。
4、程序实现：用面向对象的程序设计语言将上一步整理的范式直接映射（即直接用程序设计语言来取代）为应用软件。一般称之为面向对象的程序，即OOP。
5、识别客观世界中的对象以及行为，分别独立设计出各个对象的实体；分析对象之间的联系和相互所传递的信息，由此构成信息系统的模型；由信息系统模型转换成软件系统的模型，对各个对象进行归并和整理，并确定它们之间的联系；由软件系统模型转换成目标系统。#### 面向对象开发方法的特点

1、封装性。面向对象方法中，程序和数据是封装在一起的，对象作为一个实体，其操作隐藏在方法中，其状态由对象的"属性"来描述，并且只能通过对象中的"方法"来改变，从外界无从得知。封装性构成了面向对象方法的基础。因而，这种方法的创始人Codd和YOuMn认为，面向对象就是"对象+属性+方法"。
2、抽象性。面向对象方法中，把从具有共同性质的实体中抽象出的事物本质特征概念，称为"类"（Class），对象是类的一个实例。类中封装了对象共有的属性和方法，通过实例化一个类创建的对象，自动具有类中规定的属性和方法。
3、继承性。继承性是类特有的性质，类可以派生出子类，子类自动继承父类的属性与方法。这样，在定义子类时，只须说明它不同于父类的特性，从而可大大提高软件的可重用性。
4、动态链接性。对象间的联系是通过对象间的消息传递动态建立的。#### 面向对象开发方法的应用范围

在大型管理信息系统开发中，若不经自顶向下的整体划分，而是一开始就自底向上地采用OO方法开发系统，会造成系统结构不合理、各部分关系失调等等问题。OO方法和结构化方法在系统开发中相互依存、不可替代。#### 为什么需要面向对象方法

软件作为系统的重要元素,是最复杂、最具智慧型的人类产品。软件是一种无形的媒介,开发人员通常难以精确估计它的特性。除了非常小的系统之外,软件开发是需要一组人员共同努力才能完成,而人的因素又会进一步使问题复杂化。虽然软件开发的工具越来越先进,人们的经验也越来越丰富,但是需要解决的问题却越来越复杂。人们发现开发出的软件系统常常出现开发周期长,费用超过预算,最终产品又不能满足用户需求,系统的可维护性差,产生软件危机。
软件工程的方法就是基于软件危机的问题提出来的。最广泛使用的模型是结构化生命周期模型。它将软件开发分为几个不同的阶段需求分析、系统设计、系统实现、系统测试、试运行及维护等。它的目的是模仿工程中的一些方法,将软件开发规范化,每阶段形成一定格式的文档,下一阶段以上一阶段的文档为原料。这种方法可以控制软件开发的进度,合理分配人力和资金,以及最重要的因素—实现软件的可靠性及可维护性。
结构化分析与设计方法是应用相当广泛而又成熟的软件工程设计和分析方法。它是在结构化程序设计的基础上提出来的。结构化分析以数据流图为工具,实现对问题空间即需求的描述。
它主要以数据流、数据变换为考虑对象,从这个角度来描述整个系统的状况。结构化设计以数据流图为蓝本,提出其数据变换部分,加以功能分解,一直到最小的功能元素单位。然后开发人员据此进行程序设计。
但人们在应用传统的结构化生命周期模型的过程中发现了许多难以克服的问题。如:这种方法要求分析人员在现实世界中跟踪数据的流动,但许多系统不以数据流为主干,在这种情况下数据流图DFD就不是十分有效。
(1)这种方法要求分析人员在现实世界中跟踪数据的流动,但许多系统不以数据流为主干,在这种情况下数据流图DFD就不是十分有效。
(2)划分加工十分困难,不知道哪一个划分是最好的。
(3)数据字典的规模非常大,这使得需求分析中的交流问题变得非常困难。
(4)数据流方法不强调数据结构,只说明数据存贮。
(5)结构化分析与结构化设计之间的过渡非常困难。
这一方面来自构造方法的转换,另一方面来自添加实施细节。
(6)生命周期模型必须在分析阶段结束后才能进入设计阶段,设计阶段完成后才能进入实现阶段,这样的话,上一阶段的错误或不完整性就会带到下一阶段。
面向对象的方法正是拓宽软件开发道路的一种方法。目前,运用面向对象方法的比例虽然不是很大,但采用这种方法成功的比例却远远高于其他方法。面向对象方法的优越性来自以下几个方面:
(1)面向对象的方法更接近于人类的自然思维。人类在认识和理解现实世界中普遍运用的三个构造法则是区分对象及其属性、区分整体对象及其组成部分、区分及形成不同对象类。而面向对象正是基于对象及属性、类属及成员、整体及其部分这些概念基础之上的。因而它必然更容易被理解和运用。
(2)系统分析、系统设计及实现之间采用同样的角度看待问题甚至同样的表示方法来描述间题,它们之间的连接是自然的无缝连接。
(3)面向对象的方法将对象的属性及服务视为一个整体。
这更符合客观世界的规律,从而使其理解与实现起来更加容易,进一步减少维护的费用。
(4)继承的方法一方面符合客观世界的规律,一方面加强代码重用的可能性,以便提高软件的开发效率。
(5)信息隐蔽原理使系统在变化的环境中有良好的适应性,从而使整个系统更加稳定和易于维护。
总之,面向对象的方法一方面更易于人们理解并映射现实世界,另一方面可以提高软件开发效率、可靠性及可维护性。
assistant