面向对象 第一章 笔记


提示

主要是记载学习面向对象分析与设计课程的笔记总结


一、介绍

1.1 介绍面向对象技术

(1) 面向过程编程

  • 这种编程范式本质上是机器/汇编语言的抽象;
  • 编程是围绕过程进行的;
  • 专注于数据结构、算法和步骤的排序。

面向过程程序的主要内容就是算法和数据结构
在这里插入图片描述
算法:一组用于解决问题的指令。
数据结构:用于以特定方式组织数据的构造。

缺点:

  • 将程序与数据分割过于清晰
    在这里插入图片描述
  • 分析与编程设计之间存在代沟
    在这里插入图片描述
  • 分析结果与具体落实需要进行转化;
  • 设计的模型需要很多的步骤实现;
  • 一个完成的程序很难二次利用;
  • 面向过程编程的项目很难进行拓展和维护。

(2) 面向对象编程(OOP)

OOP:Object-Oriented Programming
面向对象编程:编程是围绕对象进行的,是指导软件构建的一组原则,以及支持这些原则的语言、数据库和其他工具。

1)对象 Object
  • 对象是在软件运行时才会存在的概念,软件运行时等价于生成了一个世界,世界里的万物都可为对象。一个对象可以是一个人、地方、事件;
  • 对象包括数据和方法;
  • 相同类的对象具有相同的数据和方法;
  • 对象之间通过互相调用实现信息的接受和发送。
2)方法 method

由一个对象执行的操作,即方法。

3)type 或 class
  • type 是型,相对于class,型的外延更加宽泛,型是来约束对象的行为的,比如 int 类型对象,只可进行 int 类型的操作;
  • class,个人理解就是类,是生成对象的模型,由同一个模型生成对象,具有相同的方法和数据。
4)优点
  • 单一模式:用户、分析人员、设计人员和实现者使用的编程语言单一;
  • 体系结构和代码便于重用;
  • 编程模型更加接近于现实世界:更加准确的描述了现实世界的实体、基于自然区分而切分体系、易于理解和维护;
  • 稳定性更好:需求中的一个小变化并不意味着开发中的系统的巨大变化;
  • 对于变化的自适应能力强。

(3) 基本概念

1)Object 对象

定义: 对象是具有定义良好的边界和标识的实体,它封装了状态和行为。

  • 状态:由属性和关系表示,是对象可能存在的条件之一,通常会随着时间而改变;
  • 行为:行为由操作、方法和状态机表示,决定一个对象如何行动和反应,对象的可见行为由它可以执行的操作而定义;
  • 每个对象都有唯一的标识,即使状态与另一个对象相同;
  • 一个对象不会独自承担所有任务,也不会没有存在的意义;
  • 对象之间通过消息进行交互。
2)Class 类

定义: 类是一组具有相同属性和行为的对象的描述。

个人理解: 就是一类对象的模型,对象就是类的具体实现,就比如,我们都对神仙有个基本而模糊的认知比如会飞有仙法等等,观影菩萨就是一个具体的神仙,会飞会仙法,神仙是一个类,观影菩萨就是对象。

  • 类是对象的抽象定义,类中定义了对象的结构和行为,是创建对象的模板;
  • 对于一堆(1~n个)相同对象可以抽象为一个类;
  • 对象是类的实例。
  • 类的属性(attribute):是命名属性(不赋值),主要作用就是描述类的实例(即对象)的对应属性应当具有的规范(大小范围、可进行操作等等),一个类可以有0~n个属性;
  • Operation:操作是服务的实现,可以从类的任何对象请求该服务来影响行为,一个类可以有任意数量的操作,也可以没有操作(所谓操作即对类中的属性进行增删改查等等行为,与对象中的method不是一回事)。

注意: Object的属性为property,Class的属性为attribute,这是不一样的,attribute指命名属性。

4)Message 消息

定义: 一种对象之间通信的规范,该规范传递信息,并期望活动随之发生(一个对象请求另一个对象执行操作)。

5)Abstraction 抽象

个人理解: 所谓抽象,就是将一个实体中的属性、操作提取出来。
在这里插入图片描述

6)Encapsulation 封装

定义: 封装意味着设计、生产和描述软件,以便在不了解其工作细节的情况下轻松使用软件,也被称为信息隐藏。

解释: 封装的一个具体实例就是编程中使用的函数接口,我们编写好接口后,只需要向外界提供接口即可,外界不清楚我们内部的属性和方法。而万物都是接口,手机就是接口,我们解锁手机,只需输入密码即可解锁,而不清楚里面是如何运作的。

7)Inheritance 继承

相关定义:

  • 继承是一种组织类的方法;
  • 与遗传含义类似,子类继承父类,可以使用父类的公共属性、方法;
  • 具有公共属性的类可以分组,统一定义成一个父类,当需要父类的属性、方法时,可以直接继承父类,以便它们的公共属性只定义一次。

继承分类:

  • 单继承 Single Inheritance
    定义: 一个类只继承一个父类
    在这里插入图片描述
  • 多继承 Multiple Inheritance
    定义: 一个类可以继承多个父类
    在这里插入图片描述
    P.S. : 编程语言中,如果一个类,没有声名继承的父类,则默认继承的Object类。
8)Polymorphism 多态

定义: 多态——同一个词或短语在不同的上下文中可能有不同的意思,描述的是一种可变性,对于同一个事物,在不同的场合有不同的含义。
举例: 在Java中我们定义不同的类,都会定义Output()函数,但是每个类的Output()输出的内容都各不一样,可能是字符串,可能是整型,这就是编程中的多态性,同名但在不同上下文环境发挥作用不一样。

9)Interface 接口

定义: 接口是指定类或组件的服务的操作集合。

  • 接口约束多态性;
  • 接口支持“即插即用”体系结构;
  • 接口的约束是相互的。

个人理解:

  • 约束多态性:接口就是封装类的作用,而编程中多态性往往体现在不同的类中同名方法有不同作用,如果类不封装,系统调用方法肯定因多个方法同名出错,只有封装了类才能让统名方法共存;
  • 即插即用:调用对应接口的方法,只要调用方法正确、输入参数匹配,无需人工再干预,系统自动执行对应方法,即只要按着插口的插槽正确插入,就可直接使用;
  • 约束是相互的:接口不仅约束了类的属性和方法,还会约束用户调用方法时输入的参数。

接口表示:

  • 缩略图方法 Elided/lconic Representation
    在这里插入图片描述
  • 正则表达式 Canonical(Class/Stereotype)Representation
    在这里插入图片描述
10)Abstract Class 抽象类

定义: 抽象类是没有任何直接实例的类。

  • 在UML中,您可以通过用斜体书写一个类的名称来指定它是抽象的。
    在这里插入图片描述
  • 抽象操作是不完整的操作,需要子操作提供该操作的实现。

个人理解: 抽象类是一个无法直接实例化的类,是一个只能被继承的类,其中的方法也是抽象、不完整的,需要继承该类的子类进行完善

1.2 介绍UML

面向对象: 是以对象为核心、以类和继承为构造机制、以接口和多态提供灵活性的方法

(1) modeling 模型

定义: 模型是对现实的简化,是一个事物的抽象

  • 模型总是强调相关特征,而抑制其他无关特征。
    在这里插入图片描述

个人理解:

  • 当我们只使用箱子来装东西时,我们就在乎箱子的重量、容量,它的打开操作、关闭操作、装入操作,所以也抽象出对应的属性、方法,对于取出操作我们就不管了。

建模的好处:

  • 我们建立模型以更好地理解我们正在开发的系统;
  • 帮助我们把一个系统形象化;
  • 允许我们指定系统的结构或行为;
  • 给我们一个模板,指导我们构建一个系统;
  • 记录我们所做的决定;
  • 我们建立复杂系统的模型,是因为我们不能完全理解这样一个系统。

(2) visual modeling 可视化模型

定义: 可视化建模是使用标准图形符号进行建模。
优点:

  • 避免传统建模时会产生的歧义
  • 便于从架构的角度了解系统
  • 促进系统的重用性

(3) UML

定义: UML是统一建模语言,用于可视化、指定、构建、记录软件密集型系统的产物,主要由面向对象和可视化建模构成。

四层元模型架构:
在这里插入图片描述
解释:

层次描述
元-元模型元建模体系结构的基础设施。定义用于指定元模型的语言。(元类、元属性、元方法)
元模型元-元模型的实例。定义用于指定模型的语言。(类属性、方法、元件)
模型元模型的实例。定义描述信息域的语言。
用户对象一个模型的实例。定义特定的信息域。

在这里插入图片描述
在这里插入图片描述

1.3 Software Process 和OOA&D

Software Process: Iterative Development and the Unified Process,迭代开发和统一过程,即软件生命周期模型
OOA&D: Object-Oriented Analysis and Design Overview,面向对象分析和设计概述

(1) Software Process

1)Process 定义

过程定义了谁在做什么,何时以及如何达到某个目标。

2)Agile Process 敏捷过程

定义: 敏捷过程意味着轻量级和适应性过程,能够灵活地响应不断变化的需求,特点是简单、快速。(示例:XP(eXtreme Programming) 极限编程模式)

敏捷过程的预测性与适应性:

  • 预测过程是试图在相对较长的时间段内详细规划和预测活动和资源(人员)分配的过程,例如项目的大多数。
  • 预测过程通常首先有"瀑布"或顺序生命周期,定义所有要求:第二,定义详细的设计:第三,实施。
  • 相比之下,适应性过程是接受变革作为必然驱动因素并鼓励灵活适应的过程:他们通常有一个迭次的生命周期。

繁杂过程: 指过程严格来规范、提高软件的质量,从而有所繁杂。

繁杂过程特点:

  • 许多在官僚主义氛围中创造的文物
  • 刚性和控制
  • 详细、长期、详细的规划
  • 预测性而不是自适应性
3)瀑布开发模型 和 迭代开发模型

瀑布开发模型的特点:

  • 延迟确认关键风险解决方案;
  • 通过评估不能很好地预测完成时间的工作产品来度量进度;
  • 延迟并聚合集成和测试;
  • 排除了早期部署;
  • 经常导致主要的计划外迭代。
    在这里插入图片描述
    迭代开发模型:
    在这里插入图片描述
    在这里插入图片描述
    二者风险比较:
    在这里插入图片描述
4)UP(Unified Process) 统一过程
  1. Best Practices 最佳方案
    在这里插入图片描述
  2. Key concepts 关键概念
    Worker: 个人或团队所扮演的角色
    Artifact: 一种由过程产生、修改或使用的信息
    Activity: 活动,工作单元
    Workflow(Discipline): 工作流,工作流是产生可观察值的结果的一系列活动
    在这里插入图片描述
  3. UP Structure 统一过程结构
    过程阶段、生命周期阶段:
    (1) Inception 初始阶段——定义项目的范围
    (2) Elaboration 细化-计划项目,指定特性,基线架构
    (3) Construction 构建——构建产品
    (4) Transition 产品化——产品化到最终用户社区
    在这里插入图片描述
    迭代阶段:
    迭代是基于已建立的计划和评估标准的不同的活动序列,结果是可执行的发布(内部或外部)。
    在这里插入图片描述
  4. core workflow 核心工作流
    在这里插入图片描述
  5. 在统一过程中使用UML
    在这里插入图片描述
  6. 统一过程是一个过程框架
    没有普遍的过程!统一流程是为灵活性和可扩展性而设计的,允许多种生命周期策略、选择要生成的工件、定义活动和工作者模型的概念。

1.4 组件和CBSD

(1) COmponent 组件

一个独立的软件部分,在上下文中相对独立的存在。

定义:

  • 系统中重要的、几乎独立的、可替换的部分,在定义良好的体系结构上下文中实现明确的功能;
  • 组件遵循并提供一组接口的物理实现;
  • 一个物理的、可替换的系统部分,它封装了一组接口的实现,并提供了一组接口的实现;
  • 组件代表系统实现的一个物理部分,包括软件代码(源、二进制或可执行文件)或等价的东西,如脚本或命令文件。

目的:

  • 提高软件的复用性;
  • 提高软件的质量。

(2) CBSD

Component-Based Software Development 基于构件的软件开发

1)弹性
  • 满足当前和未来的要求;
  • 提高可扩展性;
  • 允许重用;
  • 封装系统依赖关系。
2)基于组件
  • 重用或自定义组件(只有统一标准化,才可进行大规模的复用);
  • 从商业可用的组件中选择(而不是一个软件的所有部分都由自己开发);
  • 递增地发展现有的软件。
3)CBSD的目标

重用的基础: 组件重用、架构复用
项目管理基础: 计划性、人员调动性、交付性(Delivery)
智能控制器: 控制复杂性、保持完整性

1.5 模式和体系结构

(1) 模式的基本概念

1) 什么是模式

什么是模式?

  • 一个常见的问题,以及再某种情况下的一个经过验证的解决方案
  • 以文学形式组织、包装的问题解决方案;
  • 记录经验的方式,“最佳方案”:—个使用的标准格式、知识的宝库
  • 新鲜的是,这里没有什么新鲜的东西。

个人理解:

  • 模式就是大量经验累积、综合、整理的结果;
  • 模式就是对于一个已经解决的问题的框架式解决方案。
2)模式的各部分
  • 名称:一个好的名称是必不可少的,因为模式名称有助于设计师进行沟通;
  • 上下文:环境,模式可以应用的地方;
  • 动机:描述相关的动机和约束;
  • 问题:通常用动机来描述;
  • 解决方案:一种行之有效的描述得到所需结果的方法。
3)模式样例

在这里插入图片描述

4)使用UML建模的模式

(2) 软件架构的基本概念

1)软件体系结构包含关于软件系统组织的一组重要决策:
  • 选择组成系统的结构元素及其界面;
  • 在这些元素之间的协作中指定的行为;
  • 将这些结构和行为元素组成更大的子系统;
  • 指导该组织的架构风格。
2)软件体系结构涉及:

使用、功能、性能、弹性、重用、可理解性、经济和技术限制、美学考虑

3)架构限制了设计和实现:

体系结构涉及一组约束设计和构造的战略设计决策、规则或模式,架构决策是最基本的决策,更改它们将产生重大的连锁反应。

4)所有软件架构定义中的共同主题:

不管定义是什么(有很多),所有软件体系结构定义的共同主题都与大规模有关

  • 动机中的强大思想;
  • 组织;
  • 风格;
  • 模式;
  • 责任;
  • 协作;
  • 联系;
  • 动机;
  • 主要子系统
5)架构的元模型(Booch):

在这里插入图片描述

6)构架视图:

架构视图是从特定的角度或有利位置对系统进行简化的描述(抽象),涵盖特定的关注点,并省略与此角度不相关的实体

软件架构:“4+1视图”模型:
在这里插入图片描述
用例代表的是功能,功能代表的是功能性需求,(软件需求分为功能性需求、非功能性需求,功能性需求用功能解决,非功能性需求通过文档层实现)

7)需要视图的个数:
  • 简化模型以适应环境;
  • 不是所有的系统都需要所有的视图:单处理器:删除部署视图;单进程:删除进程视图;非常小的程序:删除实现视图;
  • 添加视图:数据视图,安全视图。

实际上,具体问题具体分析,哪些问题需要交流沟通,那就需要构建多少视图(视图是一个待解决问题的预解决方案)

8)框架风格:
  • 体系结构风格根据结构组织的模式定义了一系列系统;
  • 架构风格定义了:组件和连接器类型的词汇表;一组关于如何组合它们的约束;一个或多个语义模型,指定如何从系统各部分的属性确定系统的总体属性。
9)架构上重要的模型元素:
  • 并非所有的设计都是框架;
  • 主要的“业务”类;
  • 重要的机制;
  • 处理器和流程;
  • 层和子系统;
  • 架构视图=对模型进行切片
10)框架的专注点:

虽然上面的视图可以代表一个系统的整个设计,但架构只关注自己的一些具体方面:

  • 模型的结构——组织模式,例如,分层;
  • 基本元素——关键用例、主类、通用机制,等等,与模型中存在的所有元素相反;
  • 一些关键场景显示了整个系统的主要控制流;
  • 服务,以获取模块化、可选特性、产品线方面。
11)良好框架的特点:
  • 有弹性的;
  • 简单的,便于别人使用;
  • 更容易被理解、接受;
  • 有清晰的关注点;
  • 框架中各个部分的责任分配清晰;
  • 平衡经济和技术限制。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值