上午12分 下午两大答题 30分
面向对象的基本概念❤❤❤❤❤
采用面向对象的软件开发,通常由面向对象分析,面向对象设计,面向对象实现
1 面向对象分析OOA:
获取对应用问题的理解,主要任务是抽取和整理用户需求并建立问题域精确模型 架构师主要关注系统的行为
包含:
1.1 认定对象
1.2 组织对象
1.3 描述对象之间的相互作用
1.4 定义对象的操作
1.5 定义对象的内部信息
它的第一步是确定问题域
2 面向对象设计OOD:采用协作的对象 对象的属性 方法说明软件解决方案的一种方式,,强调的是定义软件对象和这些软件对象如何协作来满足需求,延续了面向对象分析
在侧重点上,面向对象分析侧重于理解问题,描述软件要做什么,而面向对象设计侧重于理解解决方案,描述软件要如何做。 (2) 面向对象分析一般只考虑理想饿设计,不关心技术和实现层面的细节,而面向对象设计需要得到更具体、更详尽,更接近于真实的代码的设计方案。
OOP机制
面向对象开发技术 面向对象设计
理解解决方案
实现系统的细节
OOD包含于OOA对应如下五个活动
识别类和对象
定义属性
定义服务
识别关系
识别包
关注技术和实现层面的细节
面向对象实现:
采用面向对象语言实现系统
1 道选择
程序语言基础
在机器层面上 所有的数据都是二进制的 在应用领域中数据可以由不同的形式与运算,程序中的数据以及进行了抽象不同的数据需要不同的大小的存储空间,因此为程序的数据规定数据类型(取得取值范围后)后们可以更合理安排存储空间.
不同类型的数据其取值方式不同和运算也不同 引入类型信息后 在对源程序进行编译时就可以对参与表达式求值的数据对象进行合法性检查
类:
两个类之间可以有多个由不同角色标识的关联
实体类:是应用领域中的核心类
接口类(边界类):一种交互的类
控制类:来控制活动流
对象
它即包括数据(属性)属性也叫状态和数据成员变量 方法(函数 服务) 以及对象名 三个部分组成
属性又名:数据 状态 成员变脸
方法又名:函数 成员函数 行为 操作
类是一个对象模板
类是对象的抽象定义
实际存在的是类的实例 即对象
一个类定义一组大体相似的对象 这些对象共享 属性和行为
具有以下特性:
1 有清晰的边界
2 良好定义的行为
3 可扩展性
但是没有明确的位置和数量 具体由其对象和系统确定
从给定需求描述中的名词短语来识别对象
对象的状态 包括对象的所有属性(一般时静态的)以及每一个属性当前的值(一般时动态的) 为了将一个对象和其他所有对象区分开来,我们会给他一个标识
静态成员
所修饰的成员是属于类的而不是对象,静态数据成员对该类只有一份,该类中的所有对象共享静态数据成员,可被改类中的所有方法访问,其值可以被修改,但是无论是通过对象还是类对静态数据成员值的修改,都会反应到整个类,类的静态方法只能访问该类的静态数据成员
消息
消息是对象发出的服务请求 一般包含提供服务的对象标识 服务标识 输入信息应答信息
对象之间通信的一种构造 当一个消息发送给某个对象 包含要求接受对象去执行某些活动的信息.
调用一个方法 传输一个参数
发送对象不需要知道接受消息的对象如何对请求来予以响应
我只管发 我不管你接收到要干嘛
方法重载:
没啥好说的
继承与泛化:
继承是父类和子类之间共享数据的方法和机制,这是一种类之间的关系,在定义一个类的时候,可以在一个已经存在的类的基础上来进行,把这个已经存在的类的内容作为自己的内容并加入新的内容,可以存在多重继承的概念
一个父类可以有多个子类 这些子类都是父类的特例 ,父类描述了这些子类的公共属性和方法
一个子类可以继承它的父类的属性和方法 这些书信和操作在子类中不需要定义 子类可以定义自己的方法和属性
继承用于在已存在的类基础上创建新类
子类有一个爹 单重继承 多个爹多重继承 使用它可能造成子类中存在二义性的成员
继承关系中子类将拥有父类的全部属性和方法
继承可以多继承 一个子类有多父类 java 单继承 c++ 多继承
在uml类图中 如果父类中已有方法名在子类中不出现目标是子类继承父类中的方法如果子类中出现 就表示子类在继承父类接口定义的前提下 覆盖了其方法
封装:
对象封装了属性和行为 封装是一种信息隐藏的技术 目的时使对象的使用者和生产者分离模式对象的定义和是西安分开,仅对外公开接口
封装使得开发人员不需要知道一个软件组件内部如何工作 开发效率和你是否使用封装没关系
多态
不同类的对象对统一消息做出不同的响应就叫做多态
存在的三个条件
1 有继承关系
2 子类重写父类方法
3 父类应用指向子类对象
客户类无需知道所调用的方法的特定子类的实现
通用多态:参数多态: 最纯的多态 最多使用
包含多态: 在许多语言中都存在 最常见的例子 子类型化 子类型化:即一个类型是一个类型的子类型
特定多态过载多态: 同一个名字在不同的上下文中所代表的含义不同 (考的最多)
强制多态:
绑定 动态绑定
运行时候进行
一个给定的过程调用和代码的结合知道调用发生时才进行
他是和类的继承以及多态相联系的
一个父类有多个子类
当一个对象发送消息请求服务时候 要根据接受对象的具体情况来将请求的操作和实现的方法进行连接
静态绑定
编译时候进行
是一个把过程调用和响应调用需要执行的代码加以结合的过程,
在一些语言中,绑定在编译时进行 叫做静态绑定
在一些语言中 绑定时在运行时进行 即一个给定的过程调用和响应调用需执行的代码的结合直到调用发生时才进行
面向对象设计的七大原则
单一责任原则
仅仅一个引起它变化的原因
开放-封闭原则对扩展开放 对修改关闭
里氏替换原则基类可以出现的地方子类一定可以出现
依赖倒置原则
抽象不应该依赖于细节 细节应该依赖于抽象
高层模块不应该依赖于低层模块 二者都应该依赖于抽象
要针对接口编程 不要针对实现编程
接口分离原则
依赖于抽象而不是依赖于具体
共同重用原则
重用了包中的一个类就要重用包中所有类
共同封闭原则
一个包中的类产生影响 包中所有类都产生影响 但是对于其他包不产生印象
面向对象分析
侧重于理解问题 软件他要做什么
忽略于系统实现有关的问题
建立独立于实现的分析模型
背!
认定对象
定义问题域 将存在的名词 作为一个对象
组织对象 描述对象间的相互作用 确定(基于)对象操作 定义对象的内部信息面向对象程序设计
没啥说的
面向对象测试!
分为四个层次 预测一波
算法层 类层 模板层 系统层
杂题
类的静态成员之恩访问该类的静态数据成员
静态数据成员可被该类的所有方法访问
该类的对象共享其静态数据成员的值 ,静态数据成员值可以修改
但是对于它的修改会反应到整个类
类的静态方法只能访问类的静态成员
在面向对象技术中 对象具有以下特性
清晰的边界
良好定义的行为
可扩展性
领域模型:
属性 操作 关联 不包括领域对象
分析阶段 架构师主要关注系统的行为
UML
采用UML对系统进行建模的时候,首先确定系统边界,识别主要用例,建模用例图
然后对图中的复杂用例采用活动图进一步建模,以对用例中执行过程中对象的如何通过消息相互交互进行建模,系统的领域模型采用类图进行建模,交互关系才有顺序图交互概览图等进行建模
用黑色线条表示 并发分支与会合
定时图和组合结构图是新增的uml2.0的
类图展示一组对象 接口 协作 他们之间的关系 ,面向对象的建模中 最常见的就是类图,给系统的静态设计视图
组件图展示一组组件的的组织和依赖
通信图❤❤❤也是一种交互图 强调收发消息的对象或参与者的结构组织
部署图
用来面向对象系统的物理方面建模的方法,展现了运行时处理节点以及其中构件的配置 展示系统软件组件和硬件组件之间的物理关系 ,在实施阶段使用
部署图给出了体系结构的静态实施视图,他与组件图相关,通常一个节点包含一个或多个组件,其依赖关系类似包图
用例图❤❤❤❤❤
先省略
类图❤❤❤❤❤泛化关系
是父子关系
一个类和多个细化类中间的关系,表达一般和特殊之间的关系.
聚合关系
研发部和其他部门组成公司 研发部没了 公司还在 所以是 部分离开整体依旧能用 空心菱形
组合关系是 大脑和人的关系 部分离开整体不能用 实心
必须掌握 符号和其对应的关系
顺序图❤❤❤❤
状态图❤❤❤
活动图❤❤❤
对于一个复杂用例中的业务处理流程进行进一步的建模的最佳工具
设计模式❤❤❤❤❤
出1题 两空 23个设计模式
记名字和分类
每一个设计模式描述一个在我们周围不断重复的问题,以及该问题的解决方案的核心 这样我们就不许重复劳动只需要重复该方案,它的核心在于提供相关问题的解决方案
因此在开发过程中采用设计模式的主要目的是 复用成功的设计
抽象 工厂 桥接组合
创建性模式 结构性模式行为性模式
结构性模式 工厂模式
抽象工厂模式
原型模式
单例模式 Singleton
保证一个类只产生一个实例
生成器模式
适配器模式Adapter
将类的接口和转换成客户希望的另一个的接口,舍得原本由于不兼容而不能在一起工作的那些类可以在一起工作
桥接模式Bridge
抽象部分和实现部分相分离 从而独立改变他们
组合模式 Composite
描述构造一个类层次式结构
将对象组合组合成树形结构以表示"部分-整体"的层次结构使得用户对单个对象和组合对象的使用具有一致性
希望用户忽略组合对象和单个对象的不同,用户将统一的使用组合结构中所有对象
装饰模式Decorator动态的给一个对象添加一些额外职责,需要给某个对象而不是整个类添加一些概念时候使用
这个模式对增加功能比生成子类更加灵活
例题
命令模式Command将请求封装在对象中,他就可以作为参数来传递 ,也可以被存储在历史列表中 或者以其他方式使用 对请求排队或记录请求日志,以及支持可撤销的操作
策略模式 Strategy定义一系列的算法 把他们一个个封装在一起 并使他们可以相互替换 这一模式是的他们可以独立与使用他们的客户而变化
代理模式 Proxy
通过提供与对象相同的接口来控制这个对象的访问,已使的在确实需要这个对象的时候才对他进行创建和初始化
行为性模式 观察者模式
定义对象将的一种一对多的依赖关系,当一个对象的状态发生改变的时候 所有依赖它的对象都得到通知并自动更新
其别名为Publish-Subscribe模式
状态模式 State
使得一个对象在其内部状态改变时通过调用另一个类中的方法改变其行为,使得这个对象看起来如同修改了它的类
访问者模式:Visitor
一个visitor对象是一个多态accept操作的参数,这个参数作用域该Visitor对象的访问对象
享元模式 FlyWeight
运用共享技术有效支持大量细粒度的对象 减少对象数量 从而达到较少的内存占用并提升性能 减少存储开销
迭代器模式 Iterator
提供一种方法顺序访问一个聚合对象中的各个元素而又不需要暴露对象的内部表示
外观模式 Facede
将对象加以包装以简化其接口