1、维护简单
面向对象程序设计的一个特征就是模块化。实体可以被表示为类以及同一名字空间中具有相同功能的类,可以在名字空间中添加一个类而不影响该名字空间的其他成员。这种特征为程序的维护提供了便捷性。
2、可扩充性
如果有一个具有某一种功能的类,就可以扩充这个类,创建一个具有扩充功能的类。
3、代码重用
功能是被封装在类中的,类是作为一个独立实体而存在的,因此可以很简单的提供类库,使代码得以重复使用。
扩展资料
面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。
1、Smalltalk
Smalltalk被公认为历史上第二个面向对象的程序设计语言和第一个真正的集成开发环境 (IDE)。由Alan Kay,Dan Ingalls,Ted Kaehler,Adele Goldberg等于70年代初在Xerox PARC开发。
Smalltalk对其它众多的程序设计语言的产生起到了极大的推动作用,主要有:Objective-C,Actor, Java 和Ruby等。90年代的许多软件开发思想得利于Smalltalk,例如Design Patterns, Extreme Programming(XP)和Refactoring等。
2、Eiffel
Eiffel语言是继Smalltalk-80之后的另一个"纯"OOPL。这种语言是由OOP领域中著名的专家Bertrand Meyer等人20世纪80年代后期在ISE公司(Interactive Software Engineering Inc)开发的,它的主要特点是全面的静态类型化、有大量的开发工具、支持多继承。
3、C++
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。
C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
4、Java
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 。
扩展资料:
面向对象程序设计的原则:
1、单一职责原则:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。
单一职责原则是实现高内聚、低耦合的要素。类的职责主要包括两个方面:数据职责和行为职责,数据职责是通过其属性来体现的,行为职责是通过其方法来体现。如果职责过多将导致系统非常的脆弱,类被复用的可能性就越少,一个职责可能会影响其他职责。
2、开闭原则:一个软件实体应当对扩展开放,对修改关闭。
任何软件都需要面临一个问题,当软件系统需要面对新的需求时,我们要保证系统的设计框架是稳定的。为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。百分百的开闭原则很难达到,但是要尽量使系统设计符合开闭原则。
3、里氏代换原则:所有引用基类(父类)的地方必须透明地使用其子类的对象。
里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象代替父类对象。子类的所有方法必须在父类中声明,或子类必须实现父类中声明的所有方法。
4、依赖倒转原则:高层模块不应该依赖低层模块,他们都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
依赖倒转原则是面向对象设计的主要手段。在代码中使用抽象类,而具体类放在配置文件中。里氏代换原则是依赖倒转原则的基础。如果系统行为发生变化,只需要扩展抽象层,并修改配置文件,而无需修改原有系统的源代码,满足开闭原则的设计要求。
5、接口隔离原则:客户端不应该依赖那些他不需要的接口。
首先需要满足单一职责原则。将一组相关的 *** 作定义在一个接口中,在满足高内聚的前提下,接口中的方法越少越好。可以在进行系统设计时采用定制服务的方式。
6、合成复用原则定义:尽量使用对象组合,而不是继承来达到复用的目的。
通过继承来实现复用很简单,而且子类易于扩展。但其主要问题是会破坏系统的封装性,继承会将基类的实现细节暴露给子类。同时没有足够的灵活性,如果基类发生变化,子类的实现也不得不发生改变。
7、迪米特法则原:每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。
在类的结构设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限。在类的设计上,只要有可能,一个类型应当设计成不变类。一个对象对其他对象的引用,应当降到最低。
参考资料:
一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。
面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。
扩展资料
面向对象程序设计的优点:
1、数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰。
2、通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,降低软件维护的难度。
3、结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程。
4、通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,在一定程度上更便于控制软件复杂度。
5、以对象为中心的设计可以帮助开发人员从静态(属性)和动态(方法)两个方面把握问题,从而更好地实现系统。
6、通过对象的聚合、联合可以在保证封装与抽象的原则下实现对象在内在结构以及外在功能上的扩充,从而实现对象由低到高的升级。
参考资料来源:百度百科-面向对象程序设计
参考资料来源:百度百科-面向对象的程序设计
面向对象的特点是:封装多态继承其中多态有分为重载和重写面向对象的编程思想更加接近现实的事物
有这样几点好处:
1是编程更加容易因为面向对象更接近于现实所以你可以从现实的东西出发进行适当的抽象
2在软件工程上面向对象可以使工程更加模块化实现更低的耦合和更高的内聚
3在设计模式上(似乎只有面向对象才设计到设计模式)面向对象可以更好的实现开-闭原则也使代码更易阅读
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。
面向对象设计原则是OOPS编程的核心,学习面向对象编程像“抽象”、“封装”、“多态”、“继承”等基础知识是重要的,但同时为了创建简洁、模块化的设计,了解这些设计原则也同等重要。
(设计原则)底线是永远追求高内聚、低耦合的编码或设计。Apache和Sun的开源代码是学习和OOPS设计原则的良好范例。它们向我们展示了,设计原则在编程中是如何使用的。JDK使用了一些设计原则:BorderFactory类中的工厂模式、Runtime类中的单例模式、io类中的装饰器模式。顺便说一句,如果您真的对编码原则感兴趣,请阅读JoshuaBloch的Effective,他编写过API。我个人最喜欢的关于面向对象设计模式的是KathySierra的HeadFirstDesignPattern(深入浅出设计模式),以及其它的关于深入浅出面向对象分析和设计。这些书对编写更好的代码有很大帮助,充分利用各种面向对象和SOLID的设计模式。
虽然学习设计模式(原则)最好的方法是现实中的例子和理解违反设计原则带来的不便,本文的宗旨是向那些没有接触过或正处于学习阶段的程序员介绍面向对象设计原则。
DRY_Don’trepeatyourself
我们第一个面向对象设计原则是:DRY,从名称可以看出DRY(don’trepeatyourself)意思是不写重复代码,而是抽象成可复用的代码块。如果您有两处以上相同的代码块,请考虑把它们抽象成一个单独的方法;或者您多次使用了硬编码的值,请把它们设置成公共常量。这种面向对象设计原则的优点是易于维护。重要的是不要滥用此原则,重复不是针对代码而是针对功能来说。它的意思是,如果您使用通用代码来验证OrderID和SSN,这并不意味着它们是相同的或者他们今后将保持不变。通过把通用代码用于实现两种不同的功能,或者您把这两种不同的功能密切地联系在一起;当您的OrderID格式改变时,您的SSN验证代码将会中断。所以要当心这种耦合,而且不要把彼此之间没有任何关系却类似的代码组合在一起。
封装经常修改的代码
EncapsulateWhatChanges
在软件领域永远不变的是“变化”,所以把您认为或怀疑将来要被修改的代码封装起来。这种面向对象设计模式的优点是:易于测试和维护恰当封装的代码。如果您在用编程,那么请遵守以下原则:变量和方法的访问权限默认设置为私有,并且逐步放开它们的访问权限,例如从“private”到“protected”、“notpublic”。中的一些设计模式使用了封装,工厂设计模式就是一个例子,它封装了创建对象的代码而且提供了以下灵活性:后续生成新对象不影响现有的代码。
打开/关闭设计原则
OpenClosedDesignPrinciple
类、方法/函数应当是对扩展(新功能)开放,对修改闭合。这是另外一个优雅的SOLID设计原则,以防止有人修改通过测试的代码。理想情况下假如您添加了新功能,那么您的代码要经过测试,这就是打开/关闭设计原则的目标。顺便说一句,SOLID中的字母“O”指的是打开/关闭设计原则。
单一职责原则
SingleResponsibilityPrinciple(SRP)
单一职责原则是另外一个SOLID设计原则,SOLID中的字母“S”指的就是它。按照SRP,一个类修改的原因应当有且只有一个,或者一个类应当总是实现单一功能。如果您在中的一个类实现了多个功能,那么这些功能之间便产生了耦合关系;如果您修改其中的一个功能,您有可能就打破了这种耦合关系,那么就要进行另一轮测试以避免产生新的问题。
依赖注入/反转原则
DependencyInjectionorInversionprinciple
不要问框架的依赖注入功能将会给你带来什么益处,依赖注入功能在spring框架里已经很好的得到了实现,这一设计原则的优雅之处在于:DI框架注入的任何一个类都易于用模拟对象进行测试,并且更易于维护,因为创建对象的代码在框架里是集中的而且和客户端代码是隔离的。有多种方法可以实现依赖注入,例如使用字节码工具,其中一些AOP(面向切面编程)框架如切入点表达式或者spring里使用的代理。想对这种SOLID设计原则了解更多,请看IOC和DI设计模式中的例子。SOLID中的字母“D”指的就是这种设计原则。
优先使用组合而非继承
ForCompositionoverInheritance
如果可以的话,要优先使用组合而非继承。你们中的一些人可能为此争论,但我发现组合比继承更有灵活性。组合允许在运行时通过设置属性修改一个类的行为,通过使用多态即以接口的形式实现类之间的组合关系,并且为修改组合关系提供了灵活性。甚至Effective也建议优先使用组合而非继承。
里氏替换原则
LiskovSubstitutionPrincipleLSP
根据里氏替换原则,父类出现的地方可以用子类来替换,例如父类的方法或函数被子类对象替换应该没有任何问题。LSP和单一职责原则、接口隔离原则密切相关。如果一个父类的功能比其子类还要多,那么它可能不支持这一功能,而且也违反了LSP设计原则。为了遵循LSPSOLID设计原则,派生类或子类(相对父类比较)必须增强功能,而非减少。SOLID中的字母“L”指的就是LSP设计原则。
接口隔离原则
接口隔离原则指,如果不需要一个接口的功能,那么就不要实现此接口。这大多在以下情况发生:一个接口包含多种功能,而实现类只需要其中一种功能。接口设计是一种棘手的工作,因为一旦发布了接口,您就不能修改它否则会影响实现该接口的类。在中这种设计原则的另一个好处是:接口有一个特点,任何类使用它之前都要实现该接口所有的方法,所以使用功能单一的接口意味着实现更少的方法。
编程以接口(而非实现对象)为中心
编程总是以接口(而非实现对象)为中心,这会使代码的结构灵活,而且任何一个新的接口实现对象都能兼容现有代码结构。所以在中,变量、方法返回值、方法参数的数据类型请使用接口。这是许多程序员的建议,Effective以及headfirstdesignpattern等书也这样建议。
代理原则
不要期望一个类完成所有的功能,电脑培训认为可以适当地把一些功能交给代理类实现。代理原则的典范是:中的equals()和hashCode()方法。为了比较两个对象的内容是否相同,我们让用于比较的类本身完成对比工作而非它们的调用方。这种设计原则的好处是:没有重复编码而且很容易修改类的行为。
A、结构化程序设计和面向对象程序设计。
结构化程序设计(structured programming)是进行以模块功能和处理过程设计为主的详细设计的基本原则。结构化程序设计是过程式程序设计的一个子集,它对写入的程序使用逻辑结构,使得理解和修改更有效更容易。
而面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。
扩展资料:
结构化程序设计的原则:
结构化程序设计采用自顶向下、逐步求精的设计方法,各个模块通过“顺序、选择、循环”的控制结构进行连接,并且只有一个入口、一个出口。
结构化程序设计的原则可表示为:程序=(算法)+(数据结构)。
算法是一个独立的整体,数据结构(包含数据类型与数据)也是一个独立的整体。两者分开设计,以算法(函数或过程)为主。
随着计算机技术的发展,软件工程师越来越注重于系统整体关系的表述,于是出现了数据模型技术(把数据结构与算法看做一个独立功能模块),这便是面向对象程序设计的雏形。
参考资料来源:百度百科-结构化程序设计
参考资料来源:百度百科-面向对象程序设计
什么是面向对象的设计思想?也许有不少初学者对这个概念还有许多不明白的地方,
特别是这个处于新旧思想交替的时代,许多人刚刚学完现在看来是快要淘汰的只是面向过程的
语言。他们的脑子还没有脱离面向过程思想的束缚,抬头却发现,“面向对象”早已经流行
开来,这个陌生的词漫天飞舞。随便拿起一本流行计算机技术书籍,那里会没有“面向对象”
的字眼!于是心中便惶惑了:什么叫“面向对象”?不感兴趣者,一带而过;有志于在这方
面发展的,匆忙找到一本有关书籍来啃究竟什么是“面向对象”。然而,要突破思想的束缚,
说难也不难,说到要深刻认识却也不容易。笔者在做了一些轻量级的工作后,颇以为有点心
得,不怕贻笑大方,写出已供广大同行批评指正。
“对象(Object)”一词,早在十九世纪就有现象学大师胡塞尔提出并定义。对象是世
界中的物体在人脑中的映象,是人的意识之所以为意识的反映,是做为一种概念而存在的
先念的东西,它还包括了人的意愿。举例说明吧。当我们认识到一种新的物体,它叫树,于
是在我们的意识当中就形成了树的概念。这个概念会一直存在于我们的思维当中,并不会因
为这棵树被砍掉而消失。这个概念就是现实世界当中的物体在我们意识当中的映象。我们对
它还可以有我们自己的意愿,虽然我们并不需要付诸实现——只要在你的脑中想着把这棵树
砍掉做成桌子、凳子等——我们就把它叫做意向。于是,对象就是客观世界中物体在人脑中
的映象及人的意向。只要这个对象存在我们的思维意识当中,我们就可以籍此判断同类的东
西。譬如,当我们看到另外一棵树是,并不会因为所见的第一棵树不在了失去了供参照的模
板而不认识这棵树了。当我们接触某些新事物时,我们的意识就会为这些事物确立一个对象
。当然这个过程是怎么形成的,那就不是我们所能讨论的问题了。
上面所说的对象研究的是一般意义上的问题,因而它可以外推到一切事物。我们经常
所说的“对象”,一班指的是解决信息领域内所遇到问题的方法。特别是应用软件技术来解
决问题的方法。如我们经常碰到的面向对象的编程(Object-Oriented Programming)、面向对
象的分析(Object-Oriented Analysis)、面向对象的设计(Object-Oriented Design)等。应用
前面所介绍的关于对象的概念,可以对这些问题做进一步的分析。在面对较复杂的系统,我
们可以将它作为一个对象来进行分析。一个系统(解决某个问题的全套解决方案)作为一个
对象,可以由多个部分组成。同样,这个对象也可以由多个对象组成。对于同类的事物,可
以由一个对象来表示。这样做的益处是显而易见的,它灵活而高效,可以大大减轻设计人员
的工作量,简化实际的模型。举一个例子。在关系型数据库的设计当中,我们可以把一个元
组当作对象,给它定义一组 *** 作方法。这些方法将适用于所有元组,从而我们不必在更大的
范围内去细致的考虑不同的元组(如判断一个元素是否合法):因为它们有一组公共的面向
本身的方法,它们“自己”可以“解决”自己的问题。更上一层的对象可以是一个表、视图
等。表对象在元组对象的基础上又有它们自己的方法,如增加、删除等。从这个层面上讲,
它也只需要做“自己”的事情,因为有元组对象的支持,它无须去考虑像元素是否合法这类
的事情。甚至,有时为了满足我们还可以将元素或表群当作时对象并定义它们自己的方法。
这样,更能显示面向对象的优势。
上面所讨论的可以说是面向对象的分析方法。在具体的设计过程当中,还应该采用适当
的方式。因为面向对象的思想固然很先进,如果做得不好的话,同样不能达到预期的效果。
这主要表现在处理对象与对象的关系上没有做好,对象与对象的层次不分明。如上面所举得
关系型数据库得例子,如果在元组层面上得对象过多得考虑一个表对象得因素,或一个表层
面上对象过多地考虑一个元组对象的因素,甚至去考虑元素层面上的因素,这些都不是好的
面向对象的设计方法。这一点,在语言实现方面,Java比C++更有优势,因为它不允许多
重继承,从而使对象之间的关系更明确。谁也不会否认C++的功能更强大,但是它也要由次
付出巨大代价——当现在代码库发展到一定程度、一定规模时,个对象之间的层次关系将
变得异常复杂,给后继使用者得学习、理解带来很大的困难,应用上很难把握。另外,虽然
C++具备面向对象的处理能力,但它还是保留了很多面向过程的东西。用C++完全可以不用
面向对象的思想来进行程序设计,当然人们不会这样去做——除了那些只是把C++看成是C
扩充的初学者,这就为以后的发展埋下了隐患。在者一方面,Java的限制更多一点。就者一
点还远远不够。搞开发的是人,开发方法是由人决定的。要应用面向对象的方法开发出优秀
的软件,必须要求开发人员具有良好的面向对象的思想。好的工程师可以利用适当的工具开
发出优秀的软件——而不在乎他所使用的语言工具——Java、C++、Object Pascal、Ada等。
要能应用面向对象的思想熟练得做好系统分析、设计、实现(编程),首先要求开发人
员知道什么是对象,什么是面向对象得概念,否则是谈不上应用面向对象得思想搞软件开发
了。希望读者能在看到我在前面的不太严密、详细的论述之后可以对“对象”这个概念由一
个初步的了解,同时也希望有不同看法的同行提出批评。其次,还要求开发人员有比较丰富的开
发经验。否则,光谈理论,那是不能真正体会“面向对象”的含义的。尽管如此,我们还是
可以定出一般的规则的。抛开生命周期的其它阶段,对一个确立的系统一般可以进行以下几
个过程:
一、首先应用面向对象的思想进行系统分析。仔细的划分系统的各个部分,明确它
们之间的层次关系,然后将各个部分作为一个对象进行功能上的分析。例如,要设计一个用
户界面,它可能由几个主要的窗体组成:主窗体MainFrame、功能性子窗体FunctionFrame
以及对话对话框Dialog。其中,MainFrame中可能还包括菜单、工具条、文本框、状态条等
Windows组件。对于要完成一些重要功能的组件,我们可以单独将它作为一个对象看待,在
具体的实现中,用单独一个类来表示。而一些并不是很重要的、只是在过程中需要用到的组
件,就可以将它们集成到其他对象中去。要明确每个对象自己的任务——不要让它有缺陷,
也不能越殂代庖。各个对象之间的关系通过过程、内容、功能等耦合来实现。
实际上,如果你是用Java进行开发,你会发现swing组件本身就非常好用,因为它们
之间的关系是很分明的——你无须去理解分清象C++中的组件那样复杂的关系。在开发你自
己的组件时,也需要力求达到这样的效果。
二、其次时应用面向对象的思想进行系统设计。其实在真正做好了系统分析的工作之后,
进行设计就比较轻松了。这段时间只要进一步确定各个对象的功能以及各个对象之间的关系
。为了能够更好地帮助实现人员明白各个对象之间的关系,可以利用一些工具将这些组件的
关系表示出来,统一建模语言(Uniformed Module Language,UML)就是这样的一种好东
西。它不仅可以现在帮助开发人员了解整个系统,也为以后的维护工作提供一个档案文件,
给以后的工作提供巨大的方便。
以上就是关于面向对象程序设计的优点是什么全部的内容,包括:面向对象程序设计的优点是什么、面向对象程序设计语言有哪些、什么是面向对象的程序设计思想等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)