一、面向对象的基本概念
基本思想:尽可能按照人类认识客观世界的方法来分析和解决问题
开发方法:Booch方法、Coad方法、OMT方法
四种核心概念:对象、类、继承、消息传递
类和对象:
类——对象的模板,描述一组对象共有的成员属性和方法,通过类可以产生一个或多个对象
对象——是类的具体化,最基本的运行实体,对定义好的类的属性的不同赋值就可以得到该类的对象实例
组成成分:对象名、属性、操作
特性:
(1)清晰的边界
(2)良好定义的行为
(3)可扩展性
状态:这个对象的所有属性(一般为静态)以及每个属性当前的值(一般为动态)
标识:将一个对象与其它所有对象区分开
行为:对象根据它的状态改变和消息传递所采取的行为和所作出的反应,代表了其外部可见的活动
操作:一个类提供给他的对象的一种服务
接口:访问对象方法的操作
方法重载:就是函数或者方法有同样的名称,但参数列表不同的方法
三大特性:
继承——父类和子类之间共享数据和方法的机制,一般是单重继承,但也有多重继承
封装——将逻辑上相关的数据以及行为绑定在一起,使信息对使用者隐蔽
多态——不同对象收到同一信息产生不同处理结果
参数多态:是应用广泛的多态,被称为最纯的多态
包含多态:同样的操作可用于一个类型及其子类型,需要进行运行时的类型检查
过载多态:同一个名字(操作符、函数名)在不同的上下文中代表的含义不同
强制多态:编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求
消息传递:对象之间进行通信的一种构造,包含要求接收对象去执行某些活动的信息
访问权限修饰关键字:
private——对内可见,只有类内部所定义的方法才可以访问
protected——对外不可见,对继承子类可见,在使用继承时具有继承关系的子类可以访问
public——对外对内均可见,所有类使用者均可以访问
静态成员与静态方法:
静态成员——所修饰的成员属于类
静态数据成员——对该类的所有对象开放,值不可更改
静态方法——所修饰的方法属于类,只能访问静态数据成员
绑定:一个把过程调用和响应调用所需要执行的代码加以结合的过程
静态绑定:绑定在编译时进行
动态绑定:绑定在运行时进行
二、面向对象分析与设计方法
面向对象分析:为了获得用户需求并建立问题域精确模型,确定系统的功能、性能要求
主要任务:抽取和整理用户需求并建立问题域精确模型
五个活动:认定对象、组织对象、描述对象间的相互作用、定义对象的操作、定义对象的内部信息
面向对象设计:采用协作的对象、对象的属性和方法说明软件解决方案的一种方式,强调定义软件对象和协作方式
面向对象实现:强调采用面向对象成绩设计语言设计
面向对象测试:根据规范说明来验证系统设计的正确性
面向对象系统设计原则:
单一职责原则:设计目的单一的类
开放封闭原则:软件实体(类、模块、函数等)可以扩展但不可修改
里氏代换原则:一个软件实体子类替换基类不影响程序行为
依赖倒转原则:依赖于抽象,不依赖于实现,或依赖接口编程,不依赖实现编程
接口隔离原则:使用多个专门的接口比使用单一的总接口要好
高层模块低耦合:高层模块通过接口耦合,不直接关联底层模块
定义领域模型:按对象分类的角度来创建对象领域的描述,包括定义概念、属性和重要的关联,其结果用一组显示领域概念和对象的图形——一类图来组织,图中包括多重性、关联关系、泛化/特化关系以及聚合关系
泛化关系:一个类与它的一个货多个细化类之间的关系,表达一般与特殊的关系
关联关系:类与类之间的一种结构关系
聚集关系:一个较大的整体类包含一个或多个较小的部分类
组合关系:整体与部分之间的一种关系,部分依赖整体,整体销毁则部分销毁
类的应用:
实体类——负责数据和业务逻辑,表示现实世界中真实的实体,如人、物等
边界类(接口类)——负责和用户进行交互,即用户界面
控制类——负责实体类和边界类的交互
面向对象设计模式:
创建型对象设计模式:与对象的创建有关
生成器模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
工厂方法模式:定义一个用于创建对象的接口,让子类决定将哪一个类实例化,使一个类的实例化延迟到其子类
抽象工厂模式:提供创建一系列相关或相互依赖对象的接口,而无需指定具体类
单例模式(Singleton):保证一个类仅能够生成一个对象
原型模式(Prototype):用原型实例指定创建指定对象的种类,并且通过拷贝正圆形来创建新的对象
结构型对象设计模式:用于处理类和对象的组合
适配器模式(Adapten):使一个已存有的接口转化为系统希望的接口形式
桥接模式(Bridge):是一种结构性对象模式,将抽象模块与实现模块进行分离
组合模式(Composite):表示对象的部分-整体层次结构描述
装饰器模式(Decorator):在不影响其他对象的情况下,以动态透明的方式给单个对象添加职责描述
外观模式(Facade):为子系统中的一组接口提供一个一致的界面,定义一个高层接口,使得子系统更加容易使用,适用于为复杂子系统提供一个简单接口的情况
享元模式(Flyweight):共享大量细粒度的对象
代理模式(Proxy):通过提供与对象相同的接口来控制对这个对象的访问,以使得在确实需要这个对象时才对它进行创建和初始化
行为型对象设计模式:描述类或对象怎样交互和怎样分配职责
策略模式:定义一系列算法,把它们一个个封装起来,并且使他们相互替换
观察者模式(Observer):定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖与他的对象都得到通知并被自动更新
解释器模式(Interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,解释语言中的句子
中介者模式(Mediator):用一个中介对象来封装一系列的对象交互,降低各对象之间的耦合,且容易改变对象之间的交互
命令模式(Command):通过将其你去封装为一个对象,可将不同的请求对客户进行参数化
状态模式(State):使得一个对象在其内部状态改变时通过调用另一个类中的方法改变其行为
责任链模式(Chain of Responsibility):将多个对象的请求连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止,避免请求的发送者和接受者之间的耦合关系
访问者模式(Visitor):表示一个作用于某对象结构中的各元素操作,允许在不改变各元素的类的前提下定义作用于这些元素的新操作
通知模式(Notifier):
迭代器模式(Iterator):提供一种方法来顺序访问一个局和对象中的各个元素,而不需要暴露该对象的内部表示
UML:
用例图:展现了一组用例、参与者以及他们之间的关系,用于对系统的静态用例视图进行建模。
参与者——人、硬件或其它系统可以扮演的角色
对象图:展现了一组对象以及其之间的关系,描述了在类图中所建立的事务的实例的静态快照
状态图:展现了一个状态机,由状态、转换、事件和活动组成,强调对象的事件顺序
事件触发迁移
迁移可以包含事件触发器,监护条件和状态
活动可以在状态内执行,也可以在迁移时执行
活动图:展现了在系统内从一个活动到另一个活动的流程,专注于动态视图
同步棒(粗黑横线条)——并发分支与汇合,分支数代表并发数
类图:展现了一组对象、接口、协作和它们之间的关系
类图以黑色实体三角箭线代表B依赖于A,如B→A
类图以白色黑框三角箭线代表B继承A
抽象类以斜体描写类名和方法名
使用直线、关系模式、关系名作为关联关系
使用黑色实体菱形线、关系模式作为组合关系
序列图:场景的图形化标识,描述以时间顺序组织的对象之间的交互活动
通信图:强调收发消息的对象的结构组织
组件图:展现了一组组件之间的组织和依赖,专注于系统的静态实现视图,与类图有关
部署图:展现了运行处理结点以及其中构件的配置,表示软件与硬件之间的物理关系
UML的4种关系:
依赖——是两个事物间的语义关系,其中独立事物发生改变会影响依赖事物
关联——一种结构关系,描述一组链,链是对象之间的连接
泛化——一种特殊/一般关系,特殊元素可替代一般元素的对象
实现——类元之间的语义关系,其中一个类元指定了由另一个类元保证执行的契约
UML的4中事物:
结构事物——模型中静态部分。类+接口+协作+用例+活动类+组件+结点
行为事物——模型中的动态部分。交互+状态机
分组事物——即包,模型在其中被分解
注释事物——UML模型的解释部分
三、面向对象程序设计
面向对象程序语言:C++(编译)、JAVA(编译)、Python(解释)