面向对象的思想

这部分内容比较抽象,枯燥,无聊,但是却十分重要!希望大家能够对这块重视起来,他可以帮助你编写出高质量,优秀的面向对象代码!!
20世纪90年代期间,一些软件研究人员和从业人员在一起研究一种基于对象概念的新方法。先前的计算机变成方法将数据和过程分开,但是许多分析员发现,这种分离是不自然的。因为这和人类认识自然界事物的方式是不一致的,人类认识一个事物的通常过程是这样的:首先看到这个东西,然后会观察这个东西外部是什么样的,里面有什么,它能干什么。这里的外部和里面有什么属于事物的属性,能干什么是事物的行为特征,很多时候这两个部分是不可分离的,至少人类的思维模式是这样的。因此人们在长期的实践和研究中提出了基于对象的编程方法学,这就是我们现在广为使用的面向对象的编程思想。
面向对象的编程思想是比较契合人类认知思维的,为了使得所有人都能够使用这个原则去对一些事物进行抽象,面向对象提出了一系列的原则,这些原则和基本方法可以帮助我们更好地进行对事物的描述。

1. 四个特征

面向对象和面向过程有很大的不同的,它有以下4个基本特征。

抽象性

计算机软件科学就是一门高度抽象的学科,编程语言作为一个重要的工具,抽象性是所有编程语言的共性。面向对象的抽象性和面向过程的抽象性是不一样的,面向对象的抽象方式,是从整体上对一个对象的数据或者属性,行为进行的抽象。忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。比如,我们要设计一个学生成绩管理系统,考察学生这个对象时,我们只关心他的班级、学号、成绩等,而不用去关心他的身高、体重这些信息。抽象包括两个方面,一是过程抽象,二是数据抽象。过程抽象是指任何一个明确定义功能的操作都可被使用者看作单个的实体看待,尽管这个操作实际上可能由一系列更低级的操作来完成。数据抽象定义了数据类型和施加于该类型对象上的操作,并限定了对象的值只能通过使用这些操作修改和观察。

继承性

这个特性是每个抽象对象类之间的纵向关系描述,它是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。这也体现了大自然中一般与特殊的关系。继承性很好的解决了软件的可重用性问题。比如说,所有的Windows应用程序都有一个窗口,它们可以看作都是从一个窗口类派生出来的。但是有的应用程序用于文字处理,有的应用程序用于绘图,这是由于派生出了不同的子类,各个子类添加了不同的特性。

封装性

这个特性和抽象性有一些关联,对一个事物的抽象就是需要忽略一些不重要的细节,这些细节的忽略基本就是通过封装性来完成。封装性是面向对象的特征之一,是对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。一旦定义了一个对象的特性,则有必要决定这些特性的可见性,即哪些特性对外部世界是可见的,哪些特性用于表示内部状态。在这个阶段定义对象的接口。通常,应禁止直接访问一个对象的实际表示,而应通过操作接口访问对象,这称为信息隐藏。事实上,信息隐藏是用户对封装性的认识,封装则为信息隐藏提供支持。封装保证了模块具有较好的独立性,使得程序维护修改较为容易。对应用程序的修改仅限于类的内部,因而可以将应用程序修改带来的影响减少到最低限度。

多态性

多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。又比如,同样的选择编辑-粘贴操作,在字处理程序和绘图程序中有不同的效果。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。多态性允许一个对象对相似的消息进行不同的响应,从而做出不同的处理。多态性有两种形式:横向多态和纵向多态。横向多态通常是指一个类内部多个方法接口之间的多态,通常这个特性的实现就是通过同样的函数名,返回值,但是参数不一样的方式实现的。纵向多态通常是指类之间的泛华关系,通常是通过类的继承和override覆写完成的。

2. 六个关系

依赖
关联
继承(泛化)
实现
组合
聚合
这六个关系在下面的7个原则中会有描述,请详见下一小结。

3. 七个原则

基本是5+2原则,5个是SOLID, 2个是CL
5个SOLID:
S: 单一职责原则(Single Responsibility Principle)
O: 开闭原则(Open Close Principle)
L: 里氏替换原则(Liskov Substitution Principle)
I: 接口隔离原则(Interface Segregation Principle)
D: 依赖倒置原则(Dependence Inversion Principle)
2个CL:
合成/聚合复用原则(Composite/Aggregate Reuse Principle CARP)
迪米特法则(Law O

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值