<p>面向功能(过程、结构化、模块化)编程思想的缺点</p><p>1.软件重用性差</p><p>重用性是指同一事物不经修改或稍加修改就可多次重复使用的性质。软件重用性是软件工程追求的目标之一。</p><p>2.软件可维护性差</p><p>软件工程强调软件的可维护性,强调文档资料的重要性,规定最终的软件产品应该由完整、一致的配置成分组成。在软件开发过程中,始终强调软件的可读性、可修改性和可测试性是软件的重要的质量指标。实践证明,用传统方法开发出来的软件,维护时其费用和成本仍然很高,其原因是可修改性差,维护困难,导致可维护性差。</p><p>3.不能满足用户需要</p><p>用传统的结构化方法开发大型软件系统涉及各种不同领域的知识,在开发需求模糊或需求动态变化的系统时,所开发出的软件系统往往不能真正满足用户的需要。</p><p>用结构化方法开发的软件,其稳定性、可修改性和可重用性都比较差,这是因为结构化方法的本质是功能分解,从代表目标系统整体功能的单个处理着手,自顶向下不断把复杂的处理分解为子处理,这样一层一层的分解下去,直到仅剩下若干个容易实现的子处理功能为止,然后用相应的工具来描述各个最低层的处理。因此,结构化方法是围绕实现处理功能的“过程”来构造系统的。然而,用户需求的变化大部分是针对功能的,因此,这种变化对于基于过程的设计来说是灾难性的。用这种方法设计出来的系统结构常常是不稳定的 ,用户需求的变化往往造成系统结构的较大变化,从而需要花费很大代价才能实现这种变化。</p><p>面向对象的编程思想</p><p>从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位(而不是用一些与现实世界中的事物相关比较远,并且没有对应关系的其它概念来构造系统)。这可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。</p><p>1、类和对象</p><p>类是对现实事物的抽象,是把我们对事物关心的特征和行为组织在一起的计算机语言描述,它与人类认识事物的思想密切相关,也可以把它看做一个空的信息表,而对象就是对信息表填写信息</p><p>类的一个最大的特点就是它把数据和对数据的操作放在了一起</p><p>编写什么样的程序就需要什么样的属性,语言(语法,词汇)</p><p>对象是指对类中具体事物的描述,也就是刚刚说的填表的过程,使得类这一事物的抽象概念变成某个具体的事物。对象就是类的实例化。</p><p>在程序中对客观世界的认识就是分类。</p><p>面向对象编程思想就是现实世界实体到抽象数据类型的映射</p><p>许多对象的共同属性描述就是一个类</p><p>定义狗类 信息表</p><p>定义对象 填表 实例化</p><p>输出(每个程序都要有输出)查看程序是否满足要求</p><p>能否运行(编程和测试)</p><p>面向对象的编程思想:程序员用计算机程序让我们未来的生活更加美好</p><p>2、封装</p><p>在生活中这种封装的概念处处可见,例如电视机等。它是把复杂的原理包装起来,胶囊、给人以完整整体的形式显示出来。而它在计算机程序中的映射就是封装。</p><p>封装的一个大的概念就是软件包,它是各个类的一个组合,构成了一个应用的软件。</p><p>封装的用途:</p><p>1、隐私的保护</p><p>例如:某些企业的敏感数据,就需要保护。而在程序中对企业的描述就要通过封装来达到保护隐私的作用。</p><p>隐私保护我们要用到的几个词:public、protected、private,它们是对封装中的数据和操作进行使用范围的限定,来达到保护隐私的作用</p><p>保护隐私还可以通过使用方法来访问敏感数据,因为这种访问是可控的,所以我们也同样可以保护隐私。</p><p>2、细节隐藏</p><p>例如:电视机,就是把复制的电路原理隐藏起来,而只提供用户需要的接口信息</p><p>3、可重用性提高了</p><p>重用性是指同一事物不经修改或稍加修改就可多次重复使用的性质。软件重用性是软件工程追求的目标之一。</p><p>3、继承</p><p>二、面向对象</p><p>一、面向对象的基本概念</p><p>(1)对象</p><p>对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。</p><p>(2)对象的状态和行为</p><p>对象具有状态,一个对象用数据值来描述它的状态。</p><p>对象还有操作,用于改变对象的状态,操作就是对象的行为。</p><p>对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中</p><p>(3)类</p><p>具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。</p><p>类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。</p><p>类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。</p><p>(4)类的结构</p><p>在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即一般--具体结构关系,整体--部分结构关系。</p><p>①一般——具体结构称为分类结构,也可以说是“或”关系,或者是“is a”关系。</p><p>②整体——部分结构称为组装结构,它们之间的关系是一种“与”关系,或者是“has a”关系。</p><p>(5)消息和方法</p><p>对象之间进行通信的结构叫做消息。在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。</p><p>类中操作的实现过程叫做方法,一个方法有方法名、参数、方法体。消息传递如图10-1所示。</p><p>二、面向对象的特征</p><p>(1)对象唯一性</p><p>每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。</p><p>(2)分类性</p><p>分类性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。</p><p>(3)继承性</p><p>继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。</p><p>继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。</p><p>在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。</p><p>在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。</p><p>在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重性。</p><p>采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。</p><p>(4)多态性(多形性)</p><p>多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。</p><p>多态性允许每个对象以适合自身的方式去响应共同的消息。</p><p>多态性增强了软件的灵活性和重用性。</p><p>三、面向对象和基于对象的区别</p><p>很多人没有区分“面向对象”和“基于对象”两个不同的概念。面向对象的三大特点(封装,继承,多态)缺一不可。通常“基于对象”是使用对象,但是无法利用现有的对象模板产生新的对象类型,继而产生新的对象,也就是说“基于对象”没有继承的特点。而“多态”表示为父类类型的子类对象实例,没有了继承的概念也就无从谈论“多态”。很多流行技术都是基于对象的,它们使用一些封装好的对象,调用对象的方法,设置对象的属性。但是它们无法让程序员派生新对象类型。他们只能使用现有对象的方法和属性。所以当你判断一个新的技术是否是面向对象的时候,通常可以使用后两个特性来加以判断。“面向对象”和“基于对象” 都实现了“封装”的概念,但是面向对象实现了“继承和多态”,而“基于对象”没有实现这些,的确很饶口。</p><p>从事面向对象编程的人按照分工来说,可以分为“类库的创建者”和“类库的使用者”。使用类库的人并不都是具备了面向对象思想的人,通常知道如何继承和派生新对象就可以使用类库了,然而我们的思维并没有真正的转过来,使用类库只是在形式上是面向对象,而实质上只是库函数的一种扩展。</p><p>面向对象是一种思想,是我们考虑事情的方法,通常表现为我们是将问题的解决按照过程方式来解决呢,还是将问题抽象为一个对象来解决它。很多情况下,我们会不知不觉的按照过程方式来解决它,而不是考虑将要解决问题抽象为对象去解决它。有些人打着面向对象的幌子,干着过程编程的勾当。</p>
T:0.009596s,M:255.28 KB
返回顶部 留言