面向对象总结

小白容易犯的错(了解)

98-面向对象总结-小白.jpg

  1. 面向对象的程序设计看起来高大上,因此我在编程时就应该保证通篇class,这样写出的程序必定是好的程序(面向对象只适合那些可扩展性要求比较高的场景)程序员

  2. 不少人喜欢说面向对象三大特性(这是从哪传出来的,封装,多态,继承?漏洞太多太多,好吧暂且称为三大特性),那么我在基于面向对象编程时,我必定要让我定义的类中完整的包含这三种特性,这样写确定是好的程序算法

好家伙,我说降龙十八掌有十八掌,那么你每次跟人干仗都要从第一掌打到第18掌这才显得你会了是么:面对敌人,你打到第三掌对方就已经倒下了,你说,不行,你给老子起来,老子尚未show完...
  1. 类有类属性,实例有实例属性,因此咱们在定义class时必定要定义出那么几个类属性,想不到怎么办,那就使劲的想,定义的越多越牛逼
这就犯了一个严重的错误,程序越早面向对象,死的越早,为啥面向对象,由于咱们要将数据与功能结合到一块儿,程序总体的结构都没有出来,或者说须要考虑的问题你都没有搞清楚个八九不离十,你就开始面向对象了,这就致使了,你在那里干想,自觉得想通了,定义了一堆属性,结果后来又都用不到,或者想不通到底应该定义啥,那就一直想吧,想着想着就疯了。

你见过哪家公司要开发一个软件,上来就开始写,确定是频繁的开会讨论计划
  1. 既然这么麻烦,那么我完全解脱了,咱们不要用面向对象编程了,你啊,你有大才,你能成事啊,傻叉。

OOP(面向对象)经常使用术语

98-面向对象总结-专业术语.jpg

抽象/实现

抽象指对现实世界问题和实体的本质表现,行为和特征建模,创建一个相关的子集,能够用于绘制程序结构,从而实现这种模型。抽象不只包括这种模型的数据属性,还定义了这些数据的接口。编程

对某种抽象的实现就是对此数据及与之相关接口的现实化(realization)。现实化这个过程对于客户程序应当是透明并且无关的。函数

封装/接口

封装描述了对数据/信息进行隐藏的观念,它对数据属性提供接口和访问函数。经过任何客户端直接对数据的访问,无视接口,与封装性都是背道而驰的,除非程序员容许这些操做。做为实现的 一部分,客户端根本就不须要知道在封装以后,数据属性是如何组织的。在Python中,全部的类属性都是公开的,但名字可能被“混淆”了,以阻止未经受权的访问,但仅此而已,再没有其余预防措施了。这就须要在设计时,对数据提供相应的接口,以避免客户程序经过不规范的操做来存取封装的数据属性。工具

注意:封装毫不是等于“把不想让别人看到、之后可能修改的东西用private隐藏起来”,真正的封装是,通过深刻的思考,作出良好的抽象,给出“完整且最小”的接口,并使得内部细节能够对外透明(对外透明的意思是,外部调用者能够顺利的获得本身想要的任何功能,彻底意识不到内部细节的存在)oop

合成

合成扩充了对类的描述,使得多个不一样的类合成为一个大的类,来解决现实问题。合成了一个异常复杂的系统,好比一个类由其它类组成,更小的组件也多是其它的类,数据属性及行为,全部这些合在一块儿,彼此是“有一个”的关系。性能

派生/继承/继承结构

  • 派生描述了子类衍生出新的特性,新类保留已存类类型中全部须要的数据和行为,但容许修改或者其它的自定义操做,都不会修改原类的定义。测试

  • 继承描述了子类属性从祖先类继承这样一种方式。设计

  • 继承结构表示多“代”派生,能够述成一个“族谱”,连续的子类,与祖先类都有关系。

泛化/特化

  • 泛化和特化都基于继承

    • 泛化表示全部子类与其父类及祖先类有同样的特色。
    • 特化描述全部子类的自定义,也就是,什么属性让它与其祖先类不一样。

多态与多态性

多态指的是同一种事物的多种状态:水这种事物有多种不一样的状态:冰,水蒸气

多态性的概念指出了对象如何经过他们共同的属性和动做来操做及访问,而不需考虑他们具体的类。

冰,水蒸气,都继承于水,它们都有一个同名的方法就是变成云,可是冰.变云(),与水蒸气.变云()是大相径庭的过程,虽然调用的方法都同样

自省/反射

自省也称做反射,这个性质展现了某对象是如何在运行期取得自身信息的。若是传一个对象给你,你能够查出它有什么能力,这是一项强大的特性。若是Python不支持某种形式的自省功能,dir和type内建函数,将很难正常工做。还有那些特殊属性,像__dict__,__name__及doc

面向对象的软件开发

不少人在学完了python的class机制以后,遇到一个生产中的问题,仍是会懵逼,这其实太正常了,由于任何程序的开发都是先设计后编程,python的class机制只不过是一种编程方式,若是你硬要拿着class去和你的问题死磕,变得更加懵逼都是分分钟的事,在之前,软件的开发相对简单,从任务的分析到编写程序,再到程序的调试,能够由一我的或一个小组去完成。可是随着软件规模的迅速增大,软件任意面临的问题十分复杂,须要考虑的因素太多,在一个软件中所产生的错误和隐藏的错误、未知的错误可能达到惊人的程度,这也不是在设计阶段就彻底解决的。

因此软件的开发其实一整套规范,咱们所学的只是其中的一小部分,一个完整的开发过程,须要明确每一个阶段的任务,在保证一个阶段正确的前提下再进行下一个阶段的工做,称之为软件工程

面向对象的软件工程包括下面几个部:

  1. 面向对象分析(object oriented analysis ,OOA)
软件工程中的系统分析阶段,要求分析员和用户结合在一块儿,对用户的需求作出精确的分析和明确的表述,从大的方面解析软件系统应该作什么,而不是怎么去作。面向对象的分析要按照面向对象的概念和方法,在对任务的分析中,从客观存在的事物和事物之间的关系,贵南出有关的对象(对象的‘特征’和‘技能’)以及对象之间的联系,并将具备相同属性和行为的对象用一个类class来标识。

创建一个能反映这是工做状况的需求模型,此时的模型是粗略的。
  1. 面向对象设计(object oriented design,OOD)
根据面向对象分析阶段造成的需求模型,对每一部分分别进行具体的设计。

首先是类的设计,类的设计可能包含多个层次(利用继承与派生机制)。而后以这些类为基础提出程序设计的思路和方法,包括对算法的设计。

在设计阶段并不牵涉任何一门具体的计算机语言,而是用一种更通用的描述工具(如伪代码或流程图)来描述。
  1. 面向对象编程(object oriented programming,OOP)
根据面向对象设计的结果,选择一种计算机语言把它写成程序,能够是python。
  1. 面向对象测试(object oriented test,OOT)
在写好程序后交给用户使用前,必须对程序进行严格的测试,测试的目的是发现程序中的错误并修正它。

面向对的测试是用面向对象的方法进行测试,以类做为测试的基本单元。
  1. 面向对象维护(object oriendted soft maintenance,OOSM)
正如对任何产品都须要进行售后服务和维护同样,软件在使用时也会出现一些问题,或者软件商想改进软件的性能,这就须要修改程序。

因为使用了面向对象的方法开发程序,使用程序的维护比较容易。

由于对象的封装性,修改一个对象对其余的对象影响很小,利用面向对象的方法维护程序,大大提升了软件维护的效率,可扩展性高。

在面向对象方法中,最先发展的确定是面向对象编程(OOP),那时OOA和OOD都尚未发展起来,所以程序设计者为了写出面向对象的程序,还必须深刻到分析和设计领域,尤为是设计领域,那时的OOP实际上包含了如今的OOD和OOP两个阶段,这对程序设计者要求比较高,许多人感到很难掌握。

如今设计一个大的软件,是严格按照面向对象软件工程的5个阶段进行的,这个5个阶段的工做不是由一我的从头至尾完成的,而是由不一样的人分别完成,这样OOP阶段的任务就比较简单了。程序编写者只须要根据OOd提出的思路,用面向对象语言编写出程序既可。

相关文章
相关标签/搜索