万物皆对象
分析→设计→程序设计→测试
7.1 面向对象基础
面向对象(Object-Oriented,OO)
面向对象=对象(Object)+分类(Classification)+继承(Inheritance)+通过消息的通信(Communication with Messages)
7.1.1 类
一个类定义了一组大体上相似的对象。
一个类所包含的方法和数据描述一组对象的共同行为和属性
把一组对象的共同特征加以抽象并存储在一个类中是面向对象技术最重要的一点
是否建立一个丰富的类库,是衡量一个面向对象程序设计语言成熟与否的重要标志
类是在对象之上的抽象,对象是类的具体化,是类的实例
-
实体类
实体类的对象表示现实世界中真实的实体
-
接口类(边界类)
接口类的对象为用户提供一种与系统合作交互的方式
-
控制类
控制类的对象用来控制活动流,充当协调者
主要是协调上述两种类之间的交互
7.1.4 方法重载(重载没有别名)重载
- 方法名相同,参数个数不同
- 方法名相同,参数类型不同
- 方法名相同,参数类型顺序不同
即方法名相同,参数表不同。
7.1.5 封装(可用private修饰属性)
封装是一个对象把属性和行为封装为一个整体。封装是一种信息隐蔽技术,它的目的是使对象的使用者和生产者分离,是对象的定义和实现分开。
属性封装即为用(private)修饰;
目的是将数据隐藏,以免意外更改
而行为(方法)本身就是封装的,因为在调用的时候只能通过方法名调用,用户不能了解方法体;7.1.6 继承(关键字为extends)重写/覆写/覆盖
继承是父类和子类之间共享数据和方法的机制。
子类可以继承父类的所有成员(即属性和方法),包括被private修饰的成员,子类只是无法访问、不能调用被private修饰的方法罢了。
父类又叫做超类,基类;子类又叫做派生类
这是类之间的一种关系,在定义和实现一个子类的时候,可以在父类(一个已经存在的类)的基础上进行,把父类所定义的内容作为自己的内容,并加入若干新的内容。
- 一个父类可以由多个子类,这些子类都是父类的特例,父类描述了这些子类的公共属性和方法
- 一个子类可以继承它的父类(或祖先类)中的属性和方法,这些属性和操作在子类中不必定义,子类中还可以定义自己的属性和方法
- 单重继承:一个子类只有一个父类(JAVA里只有单重继承)
-
多重继承:一个子类可以由多个父类(C++里),使用多重继承可能造成子类中存在二义性的成员
-
通用的
-
参数的(参数多态)
是应用比较广泛的多态,被称为最纯的多态
-
包含的(包含多态)
在许多语言中都存在,最常见的例子就是子类型化,即一个类型是另一个类型的子类型,即向上转型,即覆写,重写
-
-
特定的
-
过载(Overloading)的(过载多态)(常考)
是同一个名字在不同的上下文中所代表的含义不同**(即为重载多态)重名不重参数表**
-
强制的
-
- 单一责任原则:就一个类而言,应该仅有一个引起它变化的原因,变化的方向隐含着类的责任
- 开放-封闭原则:软件实体(类、模块、函数等)应该是可以扩展的,即开发的;但是不可修改的,即封闭的。即对扩展开放,对修改关闭
- 里氏替换原则:子类型必须能够替换掉他们的父(基)类型。即任何父类可出现的地方,都可以用子类的实例来赋值给父类型的引用。即基类出现的地方,子类一定可以出现
- 依赖倒置原则:抽象不应该依赖于细节,细节应该依赖于抽象。即高层模块不应该依赖于低层模块,二者都应该依赖于抽象。即依赖于抽象,而不依赖于细节(实现)。
- 接口分离原则:不应该强迫客户程序依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。接口应该小而完备,不要把不必要的方法给public出去,该用什么访问权限修饰符就用什么修饰符,否则会产生依赖,一旦产生依赖,就要求接口必须稳定(即不可更改),反而不好。即依赖于抽象,不要依赖于具体
- 重用发布等价原则:重用的粒度就是发布的粒度
- 共同封闭原则:包中的所有类对于同一类性质的变化应该是共同封闭的。即一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响
- 共同重(chong)用原则:一个包中的所有类应该是共同重用的。即如果重用包中的一个类,那么就要重用包中的所有类
- 无环依赖原则:在包的依赖关系图中不允许存在环,即包之间的结构必须是一个直接的五环图形
- 稳定依赖原则:朝着稳定的方向进行依赖
- 稳定抽象原则:包的抽象程度应该和其稳定程度一致
- 识别类及对象
- 定义属性
- 定义服务
- 识别关系
- 识别包
- 算法层
- 类层
- 模板层
-
系统层
eg:向打印机同一发送消息“打印”,则黑白打印机打印黑白文件,彩色打印机打印彩色文件 多态的实现受到继承的支持,利用类的继承的层次关系,把具有通用功能的消息存放在高层次,而不同的实现这一功能的行为放在较低层次,在这些低层次上生成的对象能够给通用消息以不同的响应
重写/覆写/覆盖是特殊的多态 1. 多态的分类
7.1.8 静态、动态绑定(多态)
编译时zst对象为Person的实例,运行的时候才进行赋值,此时zst为Student的实例;因为运行的时候,zst对象(或s对象)可以是不同子类的实例
在一般的程序设计语言中,绑定是在编译时进行的,叫做静态绑定。
动态绑定则是在运行时进行的
因此,一个给定的过程调用和代码的结合直到调用发生时才进行
动态绑定是和类的继承以及多态相联系的。在继承关系中,子类是父类的一个特例,所以父类对象可以出现的地方,子类对象也可以出现。因此在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况(即Shape s接收的是Circle还是Square等)将请求的操作与实现的方法进行连接,即动态绑定。
7.1.9 面向对象设计的原则
五大原则(要背)
补充原则(背7,8即可)
7.1.10 面向对象分析(OOA)软件要做什么 21上考了
面向对象分析的目的是为了获得对应用问题的理解。(即分析软件或系统要做什么
理解的目的是确定系统的功能、性能要求。
面向对象分析包含5个活动:认定对象、组织对象、描述对象间的相互作用、确定对象的操作、定义对象的内部信息。
理解:先从一堆东西中找到人;将找到的所有人组织到一起;描述一下彼此的关系(以方便后面设计时联系);确定每个人都是做什么的;定义每个人的属性和方法。 1. 认定对象
在应用领域中,按自然存在的实体确立对象。在定义域中(定义问题域),首先将自然存在的**“名词”**作为一个对象,这通常是研究问题、定义域实体的良好开始。通过实体间的关系寻找对象常常没有问题,困难在于寻找(选择)系统关心的实质性对象,实质性对象是系统稳定性的基础。例如在银行应用系统中,实质性对象应包含客户账务、清算等,而门卫值班表不是实质性对象,甚至可不包含在该系统中。
2. 组织对象
分析对象间的关系,将相关对象抽象成类、其目的是为了简化关联对象,利用类的继承性建立具有继承性层次的类结构
3. 对象间的相互作用
描述出各对象在应用系统中的关系
4. 基于对象的操作
当考虑对象的界面时,自然要考虑对象的操作
7.1.11 面向对象设计(OOD)软件要怎么做 21下考了 ****
是将OOA所创建的**分析模型转化为设计模型,**其目标是定义系统构造蓝图
通常的情况是,由概念模型生成的分析模型被装入到相应的执行环境中时,需要考虑实现问题并加以调整和增补,如根据所用编程语言是否支持多继承或继承,而调整类结构。OOA与OOD之间不存在鸿沟,采用一致的概念和一致的表示法,OOD通用遵循抽象、信息隐蔽、功能独立、模块化等设计准则。
OOD在复用OOA模型的基础上,包含与OOA对应如下五个活动(背)
OOD目标是建立可靠的可实现的系统模型;过程是完善OOA的成果,细化分析,结合实现技术、实现环境考虑,包括全局性设计解决策略和局部的模型细化两个方面;
7.1.12 面向对象测试 22上可能考
面向对象软件的测试分为下列4个层次进行
7.1.13 面向对象程序设计(OOP)
OOP的实质是选用一种面向对象程序设计语言(OOPL),采用对象、类及其相关概念所进行的程序设计。它的关键在于加入了类和继承性,从而进一步提高了抽象程度。特定的OOP概念一般是通过OOPL中特定的语言机制来体现的。本节以C++语言为主从程序设计的角度进一步讨论这些概念
OOP现在已经扩展到系统分析和软件设计范畴,出现了面向对象分析和面向对象设计的概念
类属类是一种参数多态机制
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!
-