① 面向对象的设计
面向对象设计是把分析阶段得到的需求转变成符合成本和质量要求的、抽象的系统实现方案的过程。从面向对象分析到面向对象设计,是一个逐渐扩充模型的过程。
瀑布模型把设计进一步划早空分成概要设计和详细设计两个阶段,类似地,也可以把面向对象设计再细分为系统设计和对象设计。系统设计确定实现系统的策略和目标系统的高层结构。对象设计确定解空间中的类、关联、接口形式及实现操作的算法。
(一)面向对象设计的准则
⒈模块化
面向对象开发方法很自然地支持了把系统分解成模块的设计原则:对象就是模块。它是把数据结构和操作这些数据的方法紧密地结合在一起所构成的模块。分解系统为一组具有高内聚和松耦合的模块是模块化的属性。
⒉抽象
面向对象方法不仅支持过程抽象,而且支持数据抽象。
⒊信息隐藏
在面向对象方法中,信息隐藏通过对象的封装性来实现。
⒋低耦合
在面向对象方法中,对象是最基本的模块,因此,耦合主要指不同对象之间相互关联的紧密程度。低耦合是设计的一个重要标准,因为这有助于使得系统中某一部分的变化对其它部分的影响降到最低程度。
⒌高内聚
⑴操作内聚。
⑵类内聚。
⑶一般——具体内聚。
(二)面向对象设计的启发规则
⒈设计结果应该清晰易懂
使设计结果清晰、易懂、易读是提高软件可维护性和可重用性的重要措施。显然,人们不会重用那些他们不理解的设计。
要做到:
⑴用词一致。
⑵使用已有的协议。
⑶减少消息模式的数量。
⑷避免模糊的定义。
⒉一般——具体结构的深度应适当
⒊设计简单类
应该尽量设计小而简单的类,这样便以开发和管理。为了保持简单,应注意以下几点:
⑴避免包含过多的属性。
⑵有明确的定义。
⑶尽量简化对象之间的合作关系。
⑷不要提供太多的操作。
⒋使用简单的协议
一般来说,消息中参数不要超过3个。
⒌使用简单的操作
面向对象设计出来的类中的操作通常都很小,一般只有3至5行源程序语句,可以用仅含一个动词和一个宾语的简单句子描述它的功能
⒍把设计变动减至最小
通常,设计的质量越高,设计结果保持不变的时间也越长。即使出现必须修改设计的情况,也应该使修改的范围尽可能小。
(三)系统设计
系统设计是问题求解及建立解答的高级策略。必须制定解决问题的基该方法,系统的高层结构形式包括子系统的分解、它的固有并发性、陆迅瞎子系统分配给硬软件、数据存储管理、资源协调、软件控制实现、人机交互接口。
⒈系统设计概述
设计阶段先从高层入手,然后细化。系统设计要决定整个结构及风昌镇格,这种结构为后面设计阶段的更详细策略的设计提供了基础。
⑴系统分解。
系统中主要的组成部分称为子系统,子系统既不是一个对象也不是一个功能,而是类、关联、操作、事件和约束的集合。
⑵确定并发性。
分析模型、现实世界及硬件中不少对象均是并发的。
⑶处理器及任务分配。
各并发子系统必须分配给单个硬件单元,要么是一个一般的处理器,要么是一个具体的功能单元。
⑷数据存储管理。
系统中的内部数据和外部数据的存储管理是一项重要的任务。通常各数据存储可以将数据结构、文件、数据库组合在一起,不同数据存储要在费用、访问时间、容量及可靠性之间做出折衷考虑。
⑸全局资源的处理。
必须确定全局资源,并且制定访问全局资源的策略。
⑹选择软件控制机制。
分析模型中所有交互行为都表示为对象之间的事件。系统设计必须从多种方法中选择某种方法来实现软件的控制。
⑺人机交互接口设计。
设计中的大部分工作都与稳定的状态行为有关,但必须考虑用户使用系统的交互接口。
⒉系统结构的一般框架
⒊系统分解——建立系统的体系结构
可用的软件库以及程序员的编程经验。
通过面向对象分析得到的问题域精确模型,为设计体系结构奠定了良好的基础,建立了完整的框架。
⒋选择软件控制机制
软件系统中存在两种控制流,外部控制流和内部控制流。
⒌数据存储管理
数据存储管理是系统存储或检索对象的基本设施,它建立在某种数据存储管理系统之上,并且隔离了数据存储管理模式的影响。
⒍设计人机交互接口
在面向对象分析过程中,已经对用户界面需求作了初步分析,在面向对象设计过程中,则应该对系统的人机交互接口进行详细设计,以确定人机交互的细节,其中包括指定窗口和报表的形式、设计命令层次等项内容。
(四)对象设计
⒈对象设计概述
⒉三种模型的结合
⑴获得操作。
⑵确定操作的目标对象。
⒊算法设计
⒋优化设计
⒌控制的实现
⒍调整继承
⒎关联的设计
② 面向对象分析与设计
UML面向对象清喊分析设计,就是利用UML建模表现面向对象开发中的分析和设计。
也就是你需要用UML中的各种卖和框图从不同角度描述你的系统。
如下图是UML用例图,描述的是系统业务中用户管理中正盯的部分。
③ 什么是面向对象方法
对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作枯枝进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。面向对象方法的具体实施步骤如下:1)面向对象分析:从问题陈述入手,分析和构造所关心的显示世界问题域的模型,并用相应的符号系统表示。模型必须是简洁、明确地抽象目标系统必须做的事,而不是如何做。分析步骤为:(1)确定问题域,包括定义论域,选择论域,根据需要细化和增加论域;(2)区分类和对象,包括定义对象,定义类、命名;(3)区分整体对象以及组成部分,确定类的关系以及结构;(4)定义属性,包括确定属性,安排属性;(5)定义服务,包括确定对象状态,确定所需服务,确定消息联结;(6)确定附加的系统约束。2)面向对象设计:面向对象的设计与传统的以功能分解为主的宽握设计有所不同。具体设计步骤为:(1)应用面向对象分析,对用其他方法得到的系统分析的结果进行改进和完善;(2)设计交互过程和用户接口;⑶设计任务管理,根据前一步骤确定是否需要多重任务,确定并发性,确定以何种方式驱动任务,设计子系统以及任务之间的协调与通信方式,确定优先级;(4)设计全局资源,确定边界条件,确定任务或子系统的软、硬件分配;(5)对象设计。3)面向对象实现:使用面向对象语言实现面向对象的设计相对比较容易。如果用非面向对象语言实现面向对慎败庆象的设计时,特别需要注意和规定保留程序的面向对象结构。传统的面向功能的方法学中,强调的是确定和分解系统功能,这种做法虽然是目标的最直接的实现方式,但是由于功能是软件系统中最不稳定、最容易变化的方面,因而使系统难以维护和扩展。面向对象设计首先强调来自域的对象,然后围绕对象设置属性和操作。用面向对象设计,其结构源于客观世界稳定的对象结构。因而与传统软件设计方法相比,明显提高了软件的生产率,可靠性,易重用性、易维护性等方面的效果。
④ 面向对象分析和设计涉及到哪三个方面的内容
一套完善的建模符号,一系列有效的分析步骤和一个方便易用的建模工具。
面向对象的基本特征是封装、继承、多态、抽象,这个是从实际代码逻辑中进行解释的,封装就是代码封装在内部,构成一个整体功能,只提供某个方法给外面访问,在php中写的public function ,protected function 等就是给该函数方法设置访问权限,而function内部就是存放这块代码的功能逻辑。
(4)面向对象分析设计方法扩展阅读:
面向对象分析注意事项:
封装的是变量和方法,达到类裤清凳里面的变量只能够通过类所提供方法才能改变。就是说如果这个类造出了一个对象,那么如果想改变这个对象的状态,只能用有限的(所提供的)方法来改变。
没有封装前,程序在内存能够执行。开辟的内存空间,谁都能访问,能修改。很容易造成内存改变溢出,系统就崩溃。所以提出封装的概念。经过长时间正信的实胡旅践,才发现封装比不封装好。
⑤ 面向对象分析与设计的简介
OOAD(Object Orient Analysis & Design,面向对象的分析和设计,面向对象分析与设计)是现代软件企业广为采用的一项有效技术。OOAD方法要求在设计中要映射现实世界中指定问题域中的对象和实体,例如:顾客、汽车和销售人员等。这就需要设计要尽可能地接近现实世界,即以最自然的方式表述实体。所以面向对象技术的优点即为能够构建与现实世界相对应的问题模型,并保持他们的结构、关系和行为为模式。
大师说:没有不变的需求,世上的软件都改动过3次以上,唯一一个只改动过两次的软件的拥有者已经死了,死在去修改需求的路上。
目前众多的软件项目有什么样的问题呢?早些时候上ERP的企业在企业发展的时候发现原有的ERP系统需要改进,可是要改进或者是更改现有的ERP系统,唯一的方法就是重新开发一个ERP系统。这对于企业来说是笔不小的支出。此时,落后的信息系统就成为制约企业发展的重要因素。是什么原因造成了这种情况呢?主要的因素是传统的系统分析是在假定需求不变的情况下进行的,这样可以把企业的资源配置到最优的程度。可是在现代瞬息万变的社会,一个企业固守旧有模式,势必会在竞争中处于劣势(因此现在也出现了组件化的ERP,这是题外话)。既然企业的需求是变化的、不稳定的,那么以变化的需求为基础建立起来的企业信息系统当然也就不稳定了。这时候,有个问题就产生了,前面我们已经说过,需求是项目的根本,既然需求都是不稳定的,那么何以建立起稳定的企业信息系统呢?
要回答这个问题,首先要比较面向过程和面向对象的开发方法的差别,传统的面向过程的开发方法在前20年大行其道,为中国企业的信息化建设立下了汗马功劳。之所以称为面向过程,是因为开发的焦点集中于过程,开发者集中于以函数为核心的过程,例如前些年很多人试图编写一些通用转账函数来满足银行的需求。面向过程的开发语言包括:Cobol、Pascal、C及C的变形语言。面向对象的概念是在近10年才进入中国的,而它的思想至今也没有真正意义上得到普及。简单的说,面向对象就是面向世界,世界上的任何事物都是对象,因此面向对象是很自然的思想,是符合我们的思维习惯的。面向对象的语言包括了Smalltalk、C++、Java,还有Object Pascal,以及刚刚诞生的C#。
需求是不稳定的,那么需求之中是不是没有稳定的东西呢?有的,就是对象。世界都是由对象组成的,而对象都是持久的,例如动物、植物已经有相当长的时间。虽然对象也在变化,动物,植物也在不断的进化。但对象在一个相当长的时期内都存在,动植物的存在时间肯定比任何一家企业长久。面向对象的开发方法的精髓就是从企业的不稳定需求中分析出企业的稳定对象,以企业对象为基础来组织需求、构架系统。这样得出的系统就会比传统的系统要稳定得多,因为企业的模式一旦变化,只需要将稳定的企业对象重新组织就行了。这种开发的方法就被称为OOAD(Object Orient Analysis & Design 面向对象的分析和设计),而分析出的企业对象就被称为Common Business Object。
⑥ 什么才是真正的面向对象设计方法
面向对象是一种程序设计方法,它以对磨斗象作为基本的单元来构建系统,它利用对象将系统的复杂性隐藏在对象里(也就是常说的封装),从而构建大型的工业级系统和大型系统(注意是工业及系统和大型软件系统而不是播放器等小型的系统)。面向对象包括三个过程:面向对象分析(OOA)、面向对象设计(OOD)、面向对象编程(OOP)。
1。什么是面向对象的分析?
面向对象的分析指的是分析要开发的系统的各个方面,从而找出类和对象(不是你想有什么对象就有什么对象的)。
2.什么是面向对象的设计?
是指我们设计出一些特殊的类(如:抽象类,目的:来表达系统中不同对象的共性)和机制(让系统的对象互相协作,提供系统的功能肆游物);
3.什么是面向对象的编程?
是指我们用特定的面向对象编程语言来实现我们的设计,实现我们发现的对象和类。裂液
使用面向对象的困难在于找出系统的对象和类很困难,这常常需要经验、洞察力、严密的逻辑思维能力和创造力(这是最重要的),以及设计特殊的类和机制很困难。但是一旦做好了分析和设计,一切都变得极其简单。所以大多数人都会选择使用面向过程而不是用面向对象。
不要以为面向对象就是你的教材里讲的那些东西,面向对象还有许许多多的概念,而这些概念常常被忽略、吴用。
用面向对象设计你还要用学一样东西:UML(统一建模语言),这个语言在国人教材中没提到到(实际上没提到的东西多了)。
建议:去书店认认真真地找一本书国外的关于面向对象的书籍,这样你才能学到面向对象的精髓。
⑦ 面向对象方法的要点有哪些
面向对象的主线:
Java类及类的成员:属性、方法、构造器(高频);代码块、内部类(低频) (类是由对象派生的)
面向对象的三大特征:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)、(抽象性)
其它关键字:this、super、static、final、abstract、interface、package、import等
面向过程(ProcereOrientedProgramming)与面向对象(ObjectOriented Programming)的理解
二者都是一种思想,
面向对象是相对于面向过程而言的。
面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。
面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。而且更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。
1.面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。
2.面向对象:强调具备功能得对象,以类/对象为最小单位,考虑谁来做。
1.面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。
2.面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
面向对象的思想概述扒并竖
类(Class)和对象(Object)是面向对象的核心概念。
类是对一类事物的描述,是抽象的、概念上的定义
对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
程序员从面向过程的执行者转化蔽拆成了面向对象的指挥者
面向对象分析方法分析问题的思路和步骤:
根据问题需要,选择问题所针对的现实世界中的实体。
从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类。
把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构。
将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具。
面向对象的两个要素:类和对象类 :对一类事物的描述,是抽象的、概念上的定义
对象:是实际存在的该类事物的每个个体(实实在在的个体),因而也称为实例(instance)。
以人为例子: 类 = 抽象概念的人 ; 对象 = 实实在在的某个人
面向对象程序设计的重点是类的设计
设计类,就是设计类的成员。
二者关系:对象是由类派生(new)出来的、对象是类的实例化
类的结构:属性和方法
现实世界的生物体,大到鲸鱼,小到蚂蚁,都是由最基本的细胞构成的。
同理,Java代码世界是由诸多个不同功能春大的类构成的。
现实生物世界中的细胞又是由什么构成的呢?细胞核、细胞质、…那么,Java中用类class来描述事物也是如此。常见的类的成员有:
属性:对应类中的成员变量
行为:对应类中的成员方法
类和对象的创建和执行操作有那三步(落地实现的规则)?
①创建类,设计类的成员
②类的实例化(创建类的对象)
③通过“对象.属性”或 “对象.方法”调用对象的结构
几个常用的概念
属性= 成员变量 = Field = 域、字段
方法= 成员方法 = Method =函数
创建类的对象 = 类的实例化 = 实例化类
⑧ 面向对象分析与设计面向对象设计包括哪些内容
一、总述
面向对象分析的输入是用户的功能需求,输出是简单的、理性化的分析模型,此阶段的工作更多侧重于如何理解软件的功能需求;
面向对象设计的输入是面向对象分析的结果,蔬菜水果最终的、细化后的设计模型,此阶段的工作更多侧重于如何得到一个合适的、完整的解决方案。
二、主要区别
(1) 在侧重点上,面向对象分析侧重于理解问题,描述软件要做什么,而面向对象设计侧重于理解解决方案,描述软件要如何做。
(2) 面向对象分析一般只考虑理想饿设计,不关心技术和实现层面的细节,而面向对象设计需要得到更具体、更详尽,更接近于真实的代码的设计方案。
(3) 在设计结果的描方式上,面向对象分析阶段侧重于描述对象的行为,而面向对象设计阶段侧重于描述对象的属性和方法。
(4) 面向对象分析只关注功能性需求,而面向对象设计既关注功能性需求,也关注非功能性需求。
(5) 面向对象分析产生的系统模型通常规模较小,而面向对象设计产生的系统模型规模较大,内容也比较详尽、完整。
三、分析设计工具(RationalRose + UML)
1、需求分析阶段
常借助于“用例图”、“顺序图”对功能模型进行建模;
用例描述,一般包括:用例名称,系统范围,用户目标,前置条件,执行过程,扩展情况,后置条件。
顺序图着眼于整个系统。
2、面向对象分析阶段(包含需求分析阶段的用例建模)
常借助于“类图、对象图”,“顺序图、协作图”,“状态图”进行静态模型建模和动态模型建模。
这里的类图主要指通过用例分析得到的实体类、控制类和边界类。
顺序图也着眼于各个分析类对象间的协作。
3、面向对象设计阶段
常借助于“类图”,“顺序图、协作图”,“状态图”来细化各个类以及对象间的协作、关系的可见性;
这里的类图,要具体到属性、方法,类之间的关系依赖(继承、组合、聚合)
这里的顺序图要具体到各个类的实例之间的消息传递、函数调用。
面向对象设计阶段常借助一些设计模式达到软件的可扩展行,应对软件的可预测到的变化。
⑨ 面向对象技术的分析方法
面向对象的分析方法是利用面向对象的信息建模概念,如实体、关系、属性等,同时运用封装、继承、多态等机制来构造模拟现实系统的方法。
传统的结构化设计方法的袜戚基本点是面向过程,系统被分解成若干个过程。而面向对象的方法是采用构造模型的观点巧好唯,在系统的开发过程中,各个步骤的共同的目标是建造一个问题域的模型。在面向对象的设计中,初始元素是对象,然后将具有共同特征的对象归孝培纳成类,组织类之间的等级关系,构造类库。在应用时,在类库中选择相应的类。
⑩ 面向对象程序设计主要有哪些方法
程序设计主要方法有面向结构的方法和面向对象的方法。
结构化程序设计
随着计算机的价格不断下降,硬件环境不断改善,运行速度不断提升。程序越写越大,功能越来越强,讲究技巧的程序设计方法已经不能适应需求了。记得是哪本书上讲过,一个软件的开发成本是由:程序设计 30% 和程序维护 70% 构成。这是书上哗或改给出的一个理论值,但实际上,从我十几年的工作经验中,我得到的体会是:程序设计占 10%,而维护要占 90%。也许我说的还是太保守了,维护的成本还应该再提高。下面这个程序,提供了两种设计方案,大家看看哪个更好一些那?
题目:对一个数组中的100个元素,从小到大排序并显示输出。(BASIC)
方法1:冒泡法排序,同时输出。
FOR I=1 TO 100
FOR J=I+1 TO 100
IF A[I] > A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T
NEXT J
? A[I]
NEXT I
方法2:冒泡法排序,然后再输出。
FOR I=1 TO 100
FOR J=I+1 TO 100
IF A[I] > A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T
NEXT
NEXT
FOR I=1 TO 100
? A[I]
NEXT
显然,“方法1”比“方法2”的效率要高,运行的更快。但是,从现在的程序设计角度来看,“方法2”更高级。原因很简单:(1)功能模块分割清晰——易读;(2)也是最重要的——易维护。程序在设计阶段的时候,就要考虑以后的维护问题。比如现在是实现了在屏幕上的输出,也许将来某一天,你要修改程序,输出到打印机上、输出到绘图仪上;也许将来某一天,你学习了一个新的高级的排序方法,由“冒泡法”改进为“快速排序”、“堆排序”。那么在“方法2”的基础上进行修改,是不是就更简单了,更容易了?!这种把功能模块分离的程序设计方法,就叫“结构化程序设计”。
面向对象的程序设计
随着程序的设计的复杂性增加,结构化程序设计方法又不够用了。不够用的根本原因是“代码重用”的时候不方便。面向对象的方法诞生了,它通过继承来实现比较完善的代码重用功能。很多学生在应聘工作,面试的时候,常被问及一个问题“你来谈谈什么是面向对象的程序设计”,学生无言,回来问我,这个问题应该怎么回答。我告诉他,你只要说一句话就够了“面向对象程序设计是对数据的封装;范式(模板)的程序设计是对算法的封装。”后来再有学生遇到了这个问题,只简单的一句对答,对方就对这个学生就刮目相看了(学生后来自豪地告诉我的)。为什么那?因为只有经过彻底的体会和实践才能提炼出这个精华。
面向对象的设计方法和思想,其实早在70年代初就已经被提出来了。其目的就是:强制程乱判序必须通过函数的方式来操纵数据。这样实现了数据的封装,就避免了以前设计方法中的,任何代码都可以随便操作数据而因起的BUG,而查找修改这个BUG是非常困难的。那么你可以说,即使我不使用面向对象,当我想访问某个数据的时候,我就通过调用函数访问不就可以了吗?是的,的确可以,但并不是强制的。人都有惰性,当我想对 i 加1的时候,干吗非要调用函数呀?算了,直接i++多省事呀。呵呵,正式由于这个懒惰,当程序出BUG的时候,可就不好捉啦。而面向对象是强制性的,从编译阶段就解决了你懒惰的问题。
巧合的是,面向对象的思想,其实和我们的日常生活中处理问题是吻合的。举例来说,我打算丢掉一个茶杯,怎么扔那?太简单了,拿起茶杯,走到垃圾桶,扔!注意分析这个过程,我们是先选一个“对象”------茶杯,然后向这个对象施加一个动作——扔。每个对象所能施加在它上面的动作是有一定限制的:茶杯,可以被扔,可以被砸,可以用来喝水,可以敲它发出声音......;一张纸,可以被写字,可以撕,可以烧......。也就是说,一旦确定了一个对象,则方法也就跟着确定了。我们的日常生活就是如此。但是,大家回想一下我们程序设计和对计算机的操作,却不是这样的。拿DOS的操作来说,我要删除一个文件,方法是在DOS提示符下:c:> del 文件名<回车>。注意看这个过程,动作在前(del),对象在后(文件名),和面向对象的方法正好顺序团悔相反。那么只是一个顺序的问题,会带来什么影响那?呵呵,大家一定看到过这个现象:File not found. “啊~~~,我错了,我错了,文件名敲错了一个字母”,于是重新输入:c:> del 文件名2<回车>。不幸又发生了,计算机报告:File read only. 哈哈,痛苦吧:)。所以DOS的操作其实是违反我们日常生活中的习惯的(当然,以前谁也没有提出过异议),而现在由于使用了面向对象的设计,那么这些问题,就在编译的时候解决了,而不是在运行的时候。obj.fun(),对于这条语句,无论是对象,还是函数,如果你输入有问题,那么都会在编译的时候报告出来,方便你修改,而不是在执行的时候出错,害的你到处去捉虫子。
同时,面向对象又能解决代码重用的问题——继承。我以前写了一个“狗”的类,属性有(变量):有毛、4条腿、有翘着的尾巴(耷拉着尾巴的那是狼)、鼻子很灵敏、喜欢吃肉骨头......方法有(函数):能跑、能闻、汪汪叫......如果它去抓耗子,人家叫它“多管闲事”。好了,狗这个类写好了。但在我实际的生活中,我家养的这条狗和我以前写的这个“狗类”非常相似,只有一点点的不同,就是我的这条狗,它是:卷毛而且长长的,鼻子小,嘴小......。于是,我派生一个新的类型,叫“哈巴狗类”在“狗类”的基础上,加上新的特性。好了,程序写完了,并且是重用了以前的正确的代码——这就是面向对象程序设计的好处。我的成功只是站在了巨人的肩膀上。当然,如果你使用VC的话,重用最多的代码就是MFC的类库。