从素数问题看面向对象

定义:除了1于本身之外,不能被其他正整数整除的数。

筛选法:生成2<i<n的素数序列,设n=60

  • 用结构化思维解决上诉问题
  • 用对象思维解决上述问题

如何表达设计思想:代码,图形

代码是计算机的表达方式,人脑需要花很多时间模拟计算机思维,不适合交流设计思想。

  • 通过流程图(结构化建模)可以更清楚表达设计思想
  • 针对过程的抽象
    • 过程(函数)是系统的核心,通过过程实现系统功能
    • 数据是静态的,由过程来控制对数据的访问

面向对象

  • 筛子:储存源数据
  • 过滤器:表明当前过滤因子
  • 计数器:记录当前正在筛选的元素

通过UML类图,可以更清楚表达设计思想,并为代码实现提供框架

  • 类拥有自己的数据和行为,能够完成自生的工作职责
  • 过程是类的组成部分,为类提供行为
  • 通过类的对象之间的协作完成系统功能

问题:对象识别,职责分配,多态抽象

面向对象

  • 建立对象的思维方式
  • 面向对象思想和理论有进一步理解
  • 能够熟练地使用UML表达面向对象的思想设计
  • 运用对象技术的一般原则和模式进行应用系统和分析和设计建模

  • Model:建模是最终目的
  • OO:面向对象技术是一种建模理论
  • UML:同意建模语言是一种体现OO的建模语言,是将OO理论转化为实践的工具

面向对象技术

面向对象技术是一系列指导软件构造的原则(抽象,封装,多态),并通过语言,数据库和其他工具来支持这些原则

  • 沟通
    • 顺应人类思维习惯,在计算机中模拟事物
  • 稳定
    • 较小的需求变化不会导致系统结构大的变化
  • 复用
    • 代码重用
    • 能提到质量

对象和类

对象

对象:可以标记出来的事物,是一个实体

  • 具有明确的定义边界和标识
    • 边界意味着对象是一个封装体,通过封装与其他对象分割
    • 表示则表明了每一个对象都是唯一的
  • 对象封装了状态和行为
    • 对象的状态通过对象的属性和关系来表达
    • 对象的行为通过对象的操作,方法和状态机来表达

  • 一系列对象的抽象描述,这些对象共享相同的属性,操作,关系和语义
  • 类是一种抽象
    • 将相似的实体抽象成相同的概念
    • 强调相关特征而忽略其他的特征

属性:类的特征或特性

  • 属性的值是某一特定对象的属性值
  • 在类中属性名必须唯一
  • 每个类的实例都有为这个类定义的所有属性的值

操作:访问或修改对象的属性值

  • 对象的行为是由为此对象定义的一系列操作决定的
  • 一个类可能同时存在多个实例
  • 一个类的所有实例都可以使用在这个类中定义的操作

面向对象相关原则

抽象

抽象是揭示事物区别于其他食物的本质特征和过程

  • 是一个分析和理解问题的过程
  • 抽象的结果去接与使用者的目的,应该包括使用者所感兴趣的那些职责,而忽略掉其他不相关的部分

对象到类的过程就是抽象

抽象取决于项目的上下文

封装

对客户隐藏具体的实现细节

  • 客户只依赖于接口
  • 通过封装实现信息隐藏和数据抽象

数据一致性

  • 操作这个数据结构的程序员,必须严格遵守一系列业务逻辑规则,否则很容易破坏数据的一致性
  • 结构化程序设计处理大项目时,多人协同开发时,本质上无法保证数据的一致性

可进行

  • public: +
  • package: ~
  • protected: #
  • private: -

分解

分解是指将多个大规模复杂系统划分为多个不同的小勾件

  • 分解的构建通过抽象,封装等技术形成相对独立的单元,可以独立设计和开发,从而实现化繁为简,分而治之

分解的方法

  • 结构化方法:函数,模块进行功能分解
  • 面向对象:基于类和对象的分解基础上,进行合理的打包和分层,从而实现更加复杂的分解结构

泛化

是类之间的一种“是”(is a/is kind of)关系,通过该关系的一个类可以共享另外一个或多个类的结构和行为

  • 采用继承实现泛化关系

通过泛化关系,可以建立类之间的层次结构,根据继承层次中父类的个数不同,分为

  • 单一继承
  • 多重继承

子类继承父类所有的内容:属性,操作,关系和语义

  • 其访问权限仍受可见性的约束

子类还可以

  • 添加新的属性,操作,关系和语义
  • 重定义继承的操作

设计继承层次

  • 父类定义公告的属性,操作,关系和语义
  • 针对不同的情况定义不同的子类,已扩展父类的属性,操作,行为和语义

多态

在统一外表(接口)下隐藏不同实现的能力

  • 即一个接口可以有不同的实现行为
  • 是面向对象技术的本质特征

分层

分层是指面向不同的目标建立不同的抽象级别层次,从而在不同的抽象层次对系统进行分解,进一步简化对系统的理解

  • 类层次结构:在不同的抽象级别进行对象的抽象,通过泛化关系,行程类间的继承层次结构
  • 对象层次结构:对象间的组成结构,即大的对象由小的对象组成

复用

借助已有软件的各种有关知识建立新的软件的过程

  • 将软件看成是由不同功能部分的构建组成的有机体,每个构件在设计编写时可以被设计成完成同类工作的通用工具
  • 如果完成各种工作的构建被建立起来以后,编写特定软件的工作就变成了将各种不同构建进行组合的简单问题,从而对软件产品的最终质量和维护工作都有本质性的改变

复用原则要求设计者不仅针对当前的业务需求开展设计,还需要考虑业务的通用性和可扩展性等问题,从而设计抽象层次高,复用粒度大的组件

上升到面向对象

  • 这里面有什么事物:类和对象
  • 每个事物看上去是什么样:类的属性
  • 每个事物能做点什么用:类的操作
  • 这些事物都呆在什么地方:类的状态,部署
  • 这些事物之间有什么关系:类之间间的关联
  • 这些事物是怎么成事的:类之间间的交互

参考

資産=負債+純資産\begin{aligned} \text{資産} = \text{負債} + \text{純資産} \end{aligned}

阅读全文 »

在GitOps中管理Secrets一直是一个麻烦的事情,因为GitOps需要用Git仓库来管理一切部署文件,而Secrets又不是能公开的东西,所以我们需要找一些方法来管理。

阅读全文 »