面向对象方法是一种运用对象,类,继承,封装,聚合,关联,消息,多态等概念和原则来构造软件系统的开发思想(方法)。
A.对象:把问题域中的事物抽象地表示为系统中的对象,作为系统的基本构成单位。
B.属性和操作:用对象的属性表示事物的数据特征;用对象的操作表示事物的行为特征。
C.对象的封装:对象的属性与操作结合为一体,成为一个独立的、不可分的实体,对外屏蔽其内部细节。
D.类:把具有相同属性和相同操作的对象归为一类,类是这些对象的抽象描述,对象是类的实例。
E:继承:通过在不同程度上运用抽象的原则,可以得到较一般的类和较特殊的类。特殊类继承一般类的属性与操作,从而简化系统的构造过程及其文档。
F:多态:多态性可以简单地概括为“一个接口,多种方法”,字面意思为多种形态。程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。
F.聚合:复杂的对象可以用简单的对象作为其构成部分。
G.类的封装:类具有封闭性,把内部的属性和操作隐藏起来,只有公共的操作对外是可见的。
H.消息:对象之间通过消息进行通讯,以实现对象之间的动态联系。总之一句,向对象发出的操作请求称之为消息。即要求对象之间只能通过消息进行通讯。
J.关联:通过关联表达类(一组对象)之间的静态关系。
结构关系:
第一,在消息传递机制中,每一个消息被发送给指定的接收者(对象)。在命令式编程范型中,函数调用机制没有指定的接收者。
第二,消息的解释(用来完成操作请求的方法或操作/代码集)依赖接收者,并且因接收者的不同而异。
第三,在面向对象的范型中,通常在运行时才能知道给定消息的特定的接收者。
子类从父类中继承属性和操作,根据需要添加自己的属性和方法。
一般类与特殊类之间的关系叫泛化关系(继承关系),简称泛化。
多重继承:允许一个特殊类具有一个以上一般类的继承模式称作多重继承(软件工程师,有本科,有研究所,有大专学历的)
一个(较复杂的)对象由其他若干(较简单的)对象作为其构成部分,称较复杂的对象为聚集(组合),称较简单的对象为成分,称这种关系为聚合。
类之间的静态联系称作关联。在实例化后,由类产生对象,由关联产生连接对象的链。链是关联的实例。 关联的表示符号也称作实例连接
从事物中舍弃个别的非本质的特征,而抽取共同的、本质特征的做法叫抽象。分过程抽象、数据抽象
类:把具有共同性质的事物划分为一类,得出一个抽象的概念。
对象:所有的对象都是类的实例。实例能够在运行时被产生(初始化)或销毁(删除)。
把对象的属性和操作结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。只是向外部提供接口,降低了对象间的耦合度。
由封装机制保证:数据不能被对象的使用者直接访问。只允许通过由对象提供的方法或代码访问数据。
封装的结果:信息隐蔽,
对象的操作定义了其他的对象怎样获得对其的访问。每一个对象都将提供给所有对象的公共操作公开化。它也提供仅局限于特定对象的其它的操作(受保护的和私有的)。其他的对象对被请求的对象怎样提供操作(代码,内部数据)没有感知。
多态是指同一个命名可具有不同的语义。面向对象方法中,在一般类中定义的属性或操作被特殊类继承之后,具有不同的数据类型或表现出不同的行为。
用途: 把具有共同基类的对象组成一组,并对它们进行一致的处理。
如,多边形下的三角形、长方形、正多边形。
行为分析是我们用来考察一个对象(类)是怎样提供它的操作的过程。
静态模型:关系机制为我们提供了用同等(关联、依赖)和层次(一般化/特殊化和聚合)结构组织类/对象的方法。很多面向对象的专家把模型的这部分结构称作静态模型。
静态行为:实现操作的代码不被任何外部或内部的事件(动作)所影响。只要我们使用命令式编程,就可以做到这一点。
动态行为:在行为中发生这些变化的原因可能是由于对象存在很多不同的状态。随后,对象根据它的状态做出反映。使用命令式编程技术不能很好地处理这种类型的行为。使用另外的一种称为有限状态机的机制会更好地捕获这样的方法。
例如:航班定票系统中的定票过程对象“机票”的状态:预定、等待、确认、取消、使用、归档
拓展:系统中的对象是相互协作的,通过发消息共同完成某项功能。这种协作的交互性,可以用交互图来进行描述。有很多系统具有并发行为。从事物的并发行为的起因上看,每个并发行为是主动发生的。体现在对象上,就是有一种对象是主动的,它代表着一个进程或线程,剩余的另一种对象则是被动的。在交互图上也能体现出对象间的并发行为。
引入包(package) 的概念,使模型具有大小不同的粒度层次,以利于控制复杂性。
自然语言和编程语言的---语言鸿沟
把数据和处理数据的过程作为一个整体,即对象---有助于软件的维护与复用
面向对象方法的主要优点:
把易变的数据结构和部分功能封装在对象内并加以隐藏,
一是保证了对象行为的可靠性;
二是对它们的修改并不会影响其他的对象,有利于维护,对需求变化有较强的适应性。
封装性和继承性有利于复用对象。
把对象的属性和操作捆绑在一起,提高了对象(作为模块)的内聚性,减少了与其他对象的耦合,这为复用对象提供了可能性和方便性。在继承结构中,特殊类对一般类的继承,本身就是对一般类的属性和操作的复用。
结构化方法:从算法的角度进行建模,所有的软件都用过程或函数作为其主要构造块。人们把大量精力都集中在控制流程和大算法的分解上。这种建模的缺点是模型脆弱。需求变动、维护困难。
面向对象方法:以众多的类及交互模式(类间的协同工作)为中心。
着重于的数据库方法:以实体-关系模型为中心,该模型的行为放入触发器和存储过程中。
对于一个给定的应用系统和开发方法,上述的任何一种方法可能都是正确的。只是代价和收益是不同的。
什么是面向对象编程思想,为什么要用面向对象思想。js中的面向对象思想和其他静态语言相比有什么不同。js中prototype,constructor,__proto__这些都是什么鬼?
面向对象设计的6个设计原则:1.单一职责原则,2.里氏替换原则,3.依赖倒置原则,4.接口隔离原则,5.迪米特法则,6.开闭原则
在ES5中,我们经常使用方法或者对象去模拟类的使用,并基于原型实现继承,虽然可以实现功能,但是代码并不优雅,很多人还是倾向于用 class 来组织代码,很多类库、框架创造了自己的 API 来实现 class 的功能。
在面试时经常会被问到面向过程和面向对象有什么区别,虽然都是编程的一种思想,但是他们的侧重点不同,我们从以下几个方面进行简单总结。
代码封装可以避免代码冗余,避免去哪聚变量污染,本质就是把公共的代码抽离出来在需要的地方随时调用在继承中也有体现
在面向对象的设计中,系统是由对象和让对象状态发生改变的方法,让对象到达另一种状态来达到目的的。当系统渐渐变大,对象渐渐变多,每个对象间的纠缠越来越多的时候一个对象的状态受到多个控制信号的机会就越来越多
我们正在审查一些代码,并开始讨论为什么我们走捷径,不遵循常识原则。虽然每个人在对待关于类应该如何基于功能上下文来构建的问题上都有自己的智慧,但仍然有一些基本原则值得我们在设计类的时候牢牢记住
JavaScript 是一个强大的面向对象编程语言,但是,并不像传统的编程语言,它采用一个以原型为基础的OOP模型,致使它的语法让大多数开发人员看不懂。另外,JavaScript 也把函数作为首要的对象,这可能会给不够熟悉这门语言的开发人员造成更大的困惑
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!