oo知识点

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

什么是面向对象面向对象的方法是一种思维方法,指导软件的分析、设计和实现。对问题空间进行自然分割,以更接近人类思维的方式建立问题域模型,以便对客观实体进行结构模拟和行为模拟,从而使设计出的软件尽可能直接地描述现实世界。构造出模块化的、可重用的、维护性好的软件,同时限制软件的复杂性和降低开发维护费用基本思想从现实世界中客观存在的事物出发来建立软件系统充分运用人类日常的思维方法主要特点:(对象)(属性与服务)(封装)(分类)(继承)(聚合)(消息)(关联)对象对象是独立存在的客观事物,它由一组属性和一组操作构成。属性和操作是对象的两大要素。属性是对象静态特征的描述,操作是对象动态特征的描述。属性一般只能通过执行对象的操作来改变。操作又称为方法或服务,它描述了对象执行的功能。通过消息传递,还可以为其它对象使用。类和实例每一个对象都是某个类的实例。类是一组相似的对象。类是对象相关行为的储存库(repository)。即同一个类的所有对象都能执行同样的动作。多态性多态性是指一般类中定义的属性和服务,在特殊类中不改变其名字,但通过各自不同的实现后,可以具有不同的数据类型或具有不同的行为。OOP是基于递归设计的原则的:一切都是对象。计算通过对象间相互通信,请求其他对象执行动作来实现。对象间通过发送和接收消息来通信。每个对象都有自己的内存,其中可能包括了其他的对象。每一个对象都是某个类的实例。类就是一组相似的对象。类是对象相关行为的储存库。也就是说,同一个类的所有对象都能执行同样的动作。类被组织成有单个根节点的树状结构,被称为继承层次结构。与类实例相关的内存和行为都会被树结构中的后代自动继承。什么是抽象是指对于一个过程或者一件制品的某些细节有目的的隐藏以便把其他方面、细节或者结构表达得更加清楚。(信息隐藏)软件开发方法中所使用的抽象类型(1)过程抽象(2)数据抽象抽象(Abstraction)抽象是确定一个事物的本质特征的行为,使这个事物与其他事物区分开。抽象是自底向上的对几组事物观察,找出事物的共性,把具有共性的事物划分成一类。为不同的目的建立不同层次上的抽象,并将不同层次上的同一概念的两种元素联系起来的依赖关系,一个元素比另一个元素更详细。对象是对问题域中某些事物的抽象;类是对对象的一个抽象;抽象方法:只有方法说明,没有方法体的方法称为抽象方法。抽象类通常包括一个或多个抽象方法,抽象类的子类必须实现其父类定义的每一个抽象方法,除非该子类也是抽象类。封装封装就是指利用抽象数据类型将数据和基于数据的操作封装在一起抽象数据类型通过“类”来代表类常用来构建系统内部的模块保证程序中数据的完整性和安全性封装对对象的影响封装就是将对象具有的一些属性和方法通过封装打包到一起,共同体现一个事物的特征所有信息都存贮在对象中影响对象的唯一方式是执行它所属的类的方法即执行作用于其上的操作信息隐藏(informationhiding)当使用对象时,不必知道对象的属性及行为在内部是如何表示和实现的,只须知道它提供了那些方法(操作)即可封装的作用隐藏对象的属性和实现细节,仅对外提供公共访问方式将变化隔离便于使用提高复用性提高安全性封装原则将不需要对外提供的内容都隐藏起来;把属性都隐藏,提供公共方法对其访问封装的实现:修改属性的可见性来限制对属性的访问为每个属性创建一对赋值(setter)方法和取值(getter)方法,用于对这些属性的访问在setter和getter方法中,加入对属性的存取限制类与对象类是对某一类事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体什么是类类就是这些具有相同或相似行为或数据结构的对象的共同描述类是若干对象的模板,并且能够描述这些对象内部的构造属于同一个类的对象具有相同数据结构及行为类的性质类的名标识一个类类必须具有一个成员集合类的属性的域支持信息隐藏什么是接口接口(interface)是向客户保证类的行为方式的一种协定(contract)。接口的数据成员必须初始化接口里的方法必须全部都声明成abstract,也就是说,接口不能像抽象类一样保有一般的方法,而必须全部是“抽象方法接口的访问控制修饰符只有public或者缺省。接口类型也可以继承,并且可以多重继承java的类层次结构中有一个顶级类Object,接口没有接口体内只能声明常量字段和抽象方法,并且被隐式声明为public,static,final.当然可写可不写实现接口可以是某个类的子类,也可以是父类。一个类可以“实现”多个接口功能,从而实现多继承“继承”后的类可以抽象类也可以是普通类类中实现方法时,必须使用与该抽象方法完全一样的名字、返回类型和参数表,否则,就构成重载了在实现接口时public、abstract、final、static等修饰符不能被省略。抽象类与接口的比较不相同的地方:抽象类是对类的抽象。而接口只是一个行为的规范或规定。接口不具备任何继承的特点。它仅仅是承诺该完成的方法。类可以实现多个接口,但只能继承一个父类。抽象类可以包含方法的实现(非抽象方法),而接口中所有的方法都没有实现。接口是某类行为或功能的抽象,是一种开关或者是契约;抽象类是对具体对象的最高抽象,这个对象拥有自己的最基本特征java内部类可以将一个类的定义放在另一个类的定义内部,这就是内部类动态类型语言(DynamicallyTypedLanguage):变量看作名称标识,类型和数值联系在一起静态类型语言(StaticallyTypedLanguage):类型和变量联系在一起final关键字它可以修饰非抽象类、非抽象类成员方法和变量final类不能被继承,没有子类,final类中的方法默认是final的final方法不能被子类的方法覆盖,但可以被继承final成员变量表示常量,只能被赋值一次,赋值后值不再改变调用构造函数和析构函数的顺序在一般情况下,调用析构函数的次序正好与调用构造函数的次序相反:最先被调用的构造函数,其对应的(同一对象中的)析构函数最后被调用,而最后被调用的构造函数,其对应的析构函数最先被调用。先构造的后析构,后构造的先析构相对应一个栈,后进先出如果在一个函数中定义了一个对象(它是自动局部对象),当这个函数被调用结束时,对象应该释放,在对象释放前自动执行析构函数。static局部对象,只在main函数结束或调用exit函数结束程序时,才调用static局部对象的析构函数。全局对象,则在程序的流程离开其作用域时(如main函数结束或调用exit函数)时,调用该全局对象的析构函数。如果用new运算符动态地建立了一个对象,当用delete运算符释放该对象时,先调用该对象的析构函数。存储分配静态存储分配要求在编译时能知道所有变量的存储要求,栈式存储分配要求在过程的入口处必须知道所有的存储要求,而堆式存储分配则专门负责在编译时或运行时模块入口处都无法确定存储构造器不能被继承子类不能继承父类的构造器;构造器只能通过两种方法获得:自己编写;使用系统默认构造器;要求的数据结构的内存分配,比如可变长度串和对象实例。基类构造器总是在导出类的构造过程中被调用,而且按照继承层级逐渐向上链接(调用顺序则是从基类开始向下)。可以理解为,这么做的逻辑关系是在一个类构建时可能会用到其父类的成员、方法。在清理时顺序相反。成员的初始化方法(包括基本数据类型的赋值)在基类构造器调用之后才会被调用。最初时,分配给对象的存储空间初始化二进制的零替换原则类B继承类A时,除添加新的方法完成新增功能外,尽量不要重写父类A的方法,也尽量不要重载父类A的方法子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。子类中可以增加自己特有的方法。当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。静态行为和动态行为静态类型语言,类型在编译时绑定于变量。动态类型语言(有时也称为非类型语言,untypedlanguage),类型决定于数值,而与变量无关。变量仅仅代表一个名称。在程序执行期间,不仅变量所代表的数值可以改变,而且变量所代表的类型也可以改变运行时执行动态类所具有类型的方法当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的该同名方法。替换原则可以通过提升数值在继承层次上的位置来体现(向上转型)还需要判断一种变量目前所包含的数值是否为类层次中的低层次类(向下转型)判断类型为Animal的变量所包含的数值是否为Dog把一个子类对象直接赋值给一个父类引用变量向上转型时,父类指向子类引用对象会遗失与父类对象共有之外的其他方法,也就是在转型过程中,子类的新有的方法都会遗失掉,在编译时,系统会提供找不到方法的错误响应消息时对哪个方法进行绑定是由接收器当前所包含的动态数值来决定的。多态变量如果方法所执行的消息绑定是由最近赋值给变量的数值的类型来决定的,那么就称这个变量是多态的分配方案最小静态空间分配:只分配基类所需的存储空间。最大静态空间分配:无论基类还是派生类,都分配可用于所有合法的数值的最大的存储空间。动态内存分配:只分配用于保存一个指针所需的存储空间。在运行时通过对来分配其所需的存储空间,同时将指针设为相应的合适值。深复制C++:拷贝构造函数Java:改写clone方法拷贝对象返回的是一个新对象,而不是一个引用。拷贝对象与用new操作符返回的新对象的区别就是这个拷贝已经包含了一些原来对象的信息,而不是对象的初始信息。继承与组合的比较继承描述的是一种一般性和特殊性的关系,使用继承可创建已存在类的特殊版本组合描述的是一种组成关系,使用组合可用已存在的类组装新的类多态多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为。重载(专用多态):类型签名区分改写(包含多态):层次关系中,相同类型签名是重载的一种特殊情况,但是只发生在有父类和子类关系的上下文中多态变量(赋值多态):声明与包含不同泛型(模板):创建通用工具重载重载是在编译时执行的,而改写是在运行时选择的。重载是多态的一种很强大的形式。非面向对象语言也支持。通过类型签名和范畴可以对重载进行两种分类:基于具有不同范畴的方法;基于具有不同类型签名的方法。类型签名、函数类型签名是关于函数参数类型、参数顺序和返回值类型的描述。类型签名通常不包括接收器类型因此,父类中方法的类型签名可以与子类中方法的类型签名相同。关于重载的解析,是在编译时基于参数值的静态类型完成的强制(coercion)、转换(conversion)和造型(cast)强制是一种隐式的类型转换,它发生在无需显式引用的程序中转换表示程序员所进行的显式类型转换。在许多语言里这种转换操作称为“造型”造型和转换既可以实现基本含义的改变(例如将整数转换成实数);也可以实现类型的转换,而保持含义不变(子类指针转换为父类指针为了避免重载引起的困惑,应避免重载具有如下签名的两个版本的方法名:两个版本参数个数相同、参数顺序相同,其中某一个版本的参数是另一个版本的参数的子类型尽量保证具有重载方法名的方法具有不同参数个数是个非常好的做法,因为这会使得判断具体执行的方法版本变得十分简单。重定义当子类定义了一个与父类具有相同名称但类型签名不同的方法时,发生重定义。延迟方法如果方法在父类中定义,但并没有对其进行实现,那么我们称这个方法为延迟方法改写与遮蔽(隐藏)改写与遮蔽存在着外在的语法相似性类似于重载,改写区别于遮蔽的最重要的特征就是,遮蔽是在编译时基于静态类型解析的,并且不需要运行时机制。多态变量多态变量是指可以引用多种对象类型的变量。这种变量在程序执行过程可以包含不同类型的数值。对于动态类型语言,所有的变量都可能是多态的。对于静态类型语言,多态变量则是替换原则的具体表现。接收器变量多态变量最常用的场合是作为一个数值,用来表示正在执行的方法内部的接收器。向下造型向下造型是处理多态变量的过程,并且在某种意义上这个过程的取消操作就是替换框架对于一类相似问

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功