系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、设计概念
  • 二、对象和类
  • 三、类层次结构
  • 四、面向对象程序设计基础概念
    • 1.抽象
    • 2.封装
    • 3.继承
    • 4.多态
    • 5.对象之间的关系
  • 总结

前言


一、设计概念

面向对象程序设计(Object-Oriented Programming, 缩写为OOP)是一种范式,其基本理念是将数据块及与数据相关的行为封装成为特殊的、名为对象的实体,同时对象实体的生成工作则是基于程序员给出的一系列“蓝图”,这些“蓝图”就是类。

二、对象和类

以猫为例子,我们可以构造如下的类图:

假如你有一只名为卡卡的猫。卡卡是一个对象,也是 Cat 这个类的一个实例。

每只猫都有许多基本属性: 名字(name)、 性别(sex)、 年龄(age)、 体重(weight)、毛色(color)和最爱的食物等。这些都是该类的成员变量。

所有猫都有相似的行为: 它们会呼吸(breathe)、 进食(eat)、 奔跑(run)、 睡觉(sleep)和 喵喵叫(meow)。这些都是该类的方法。 成员变量和方法可以统称为类的成员。存储在对象成员变量中的数据通常被称为状态,对象中的所有方法则定义了其行为。

你朋友的猫“露露”也是 猫 这个类的一个实例。它拥有与“卡卡”相同的一组属性。不同之处在于这些属性的值:她的性别是“女孩”;她的毛色不同;体重较轻。因此类就像是定义对象结构的蓝图,而对象则是类的具体实例。

三、类层次结构

一些类可能会组织起来形成类层次结构

假如你的邻居有一只名为“福福”的狗。其实狗和猫有很多相同的地方:它们都有名字、性别、年龄和毛色等属性。狗和猫一样可以呼吸、睡觉和奔跑。因此似乎我们可定义一个动物(Animal)基类来列出它们所共有的属性和行为。

我们刚刚定义的父类被称为超类。 继承它的类被称为子类。子类会继承其父类的状态和行为,其中只需定义不同于父类的属性或行为。因此, 猫类将包含meow方法, 而狗类则将包含bark 方法。

假如我们接到一个相关的业务需求,那就可以继续为所有活的生物体( Organisms) 抽取出一个更通用的类, 并将其作为动物(Animal)和植物(Plants)类的超类。这种由各种类组成的金字塔就是层次结构。 在这个层次结构中, 猫 类将继承动物和生物体类的全部内容。

子类可以对从父类中继承而来的方法的行为进行重写。子类可以完全替换默认行为,也可以仅提供额外内容来对其进行加强。

四、面向对象程序设计基础概念

面向对象程序设计的四个基本概念使其区别于其他程序设计范式。

1.抽象

抽象是一种反映真实世界对象或现象中特定内容的模型,它能高精度地反映所有与特定内容相关的详细信息,同时忽略其他内容。

当使用面向对象程序设计的理念开发一款程序时,你会将大部分时间用于根据真实世界对象来设计程序中的对象。但是,程序中的对象并不需要能够百分之百准确地反映其原型(极少情况下才需要做到这一点)。实际上,你的对象只需模拟真实对象的特定属性和行为即可,其他内容可以忽略。

例如, 飞行模拟器和航班预订程序中都可能会包含一个飞机(Airplane 类)。但是前者需包含与实际飞行相关的详细信息,而后者则只关心座位图和哪些座位可供预订。

2.封装

封装是指一个对象对其他对象隐藏其部分状态和行为,而仅向程序其他部分暴露有限的接口的能力。

如果想要启动一辆车的发动机,你只需转动钥匙或按下按钮即可,无需打开引擎盖手动接线、转动曲轴和气缸并启动发动机的动力循环。这些细节都隐藏在引擎盖下,你只会看到一些简单的接口:启动开关、方向盘和一些踏板。该示例讲述了什么是对象的接口——它是对象的公有部分,能够同其他对象进行交互。

封装某个内容意味着使用关键字 private 私有 来对其进行修饰,这样仅有其所在类中的方法才能访问这些内容。还有一种限制程度较小的关键字 protected 保护 ,其所修饰的对象仅允许父类访问其类中的成员。

绝大部分编程语言的接口和抽象类(或方法)都基于抽象和封装的概念。在现代面向对象的编程语言中,接口机制(通常使用 interface 或 protocol 关键字来声明)允许你定义对象之间的交互协议。这也是接口仅关心对象行为,以及你不能在接口中声明成员变量的原因之一。

由于接口(interface)这个词代表对象的公有部分,而在绝大部分编程语言中又有 interface 类型,因此很容易造成混淆。在这里我将对此进行说明。

注意接口是Java语言,C++语言没有。

假 如 你 的 航空运输(FlyingTransport) 接 口 中 有 一 个fly(origin, destination, passengers) 方法 (即以起点、 终点以及乘客为参数的飞行方法)。 在设计航空运输模拟器时, 你可以对 机场(Airport)类做出限制, 使其仅与实现了航空运输接口的对象进行交互。 此后, 你可以确保传递给机场对象的任何对象——无论是 飞机 、 直升机(Helicopter )还是可怕的 家养狮鹫(DomesticatedGryphon)都能到达或离开这种类型的机场。

3.继承

继承是指在根据已有类创建新类的能力。

继承最主要的好处是代码复用。如果你想要创建的类与已有的类差异不大,那也没必要重复编写相同的代码。你只需扩展已有的类并将额外功能放入生成的子类(它会继承父类的成员变量和方法)中即可。

使用继承后,子类将拥有与其父类相同的接口。如果父类中声明了某个方法,那么你将无法在子类中隐藏该方法。你还必须实现所有的抽象方法,即使它们对于你的子类而言没有意义。

在绝大多数编程语言中,子类仅能对一个父类进行扩展。另一方面,任何类都可以同时实现多个接口。但是正如我之前提到的那样,如果父类实现了某个接口,那么其所有子类都必须实现该接口。

4.多态

多态是指程序能够检测对象所属的实际类,并在当前上下文不知道其真实类型的情况下调用其实现的能力。

让我们看一些动物的例子。绝大部分动物(Animals)可以发出声音。我们需要所有子类都重写基类的发出声音(makeSound)方法,让每个子类都发出正确的声音,因此我们可以马上将其声明为抽象。这让我们得以忽略父类中该方法的所有默认实现,从而强制要求所有子类自行提供该方法的实现。

5.对象之间的关系


依赖:对类 B 进行修改会影响到类 A 。
关联:对象 A 知道对象 B。类 A 依赖于类 B。
聚合:对象 A 知道对象 B 且由 B 构成。类 A 依赖于类 B。
组合:对象 A 知道对象 B、由 B 构成而且管理着 B 的生命周期。类 A 依赖于类 B。
实现:类 A 定义的方法由接口 B 声明。对象 A 可被视为对象
B。类 A 依赖于类 B。
继承: 类 A 继承类 B 的接口和实现, 但是可以对其进行扩
展。对象 A 可被视为对象 B。类 A 依赖于类 B。


总结

以上就是今天要讲的内容,本文详细介绍了设计模式中UML类图与面向对象编程的使用,设计模式提供了大量的方法供我们使用,非常的便捷,我们务必掌握。希望大家多多支持!另外如果上述有任何问题,请懂哥指教,不过没关系,主要是自己能坚持,更希望有一起学习的同学可以帮我指正,但是如果可以请温柔一点跟我讲,爱与和平是永远的主题,爱各位了。加油啊!

【设计模式从青铜到王者】第二篇:UML类图与面向对象编程相关推荐

  1. 为掌握Java设计模式奠基:两步搞懂UML类图

    文章目录 前言 一.UML类图的基本概念 1.类与接口在类图中的表示方法 ①.类 ②.接口 二.类图间的基本关系 1.关联关系 ①.聚合关系 ②.组合关系 2.泛化关系(继承关系) 3.依赖关系 4. ...

  2. 【设计模式】目的、分类、UML类图

    目录 1. 设计模式的目的 2. 设计模式分类 3. UML类图 3.1 概念 3.2 前置知识(类的表示方式) 举个例子 3.2 常见的类图 3.2.1 泛化关系(继承关系) 3.2.2 实现关系 ...

  3. 基础(UML类图,设计原则)

    序言: 面向对象是PHP5之后增加的功能,是PHP走向现代语言的一个标志. 在过程式设计时代,PHP以学习成本低.入门快的特点赢得很多WEB开发者的青睐,但同时也限制了PHP的发展. 借鉴Java和C ...

  4. 从零开始单排学设计模式「UML类图」定级赛

    阅读本文大概需要 3.5 分钟. 本篇是设计模式系列的开篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统. 所以现在打算重写,加上距离现在也有一段时间了, ...

  5. 从零开始单排学设计模式「UML类图」定级赛 1

    阅读本文大概需要 3.5 分钟. 本篇是设计模式系列的开篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统. 所以现在打算重写,加上距离现在也有一段时间了, ...

  6. 设计模式-UML类图

    篇文章来总结下UML类图,本来不打算讲UML类图的,因为我在学习设计模式的时候,一遇到有关UML的就会自动忽略,一看感觉就很复杂.但是随着学习的深入,发现不掌握UML类图,对设计模式或者某一个框架没有 ...

  7. iOS开发 - 面向对象设计的设计模式(一):创建型模式(附 Demo UML类图)

    继上一篇的面向对象设计的设计原则,本篇是面向对象设计系列的第二个部分:面向对象设计的设计模式的第一篇文章. 另外,本篇博客的代码和类图都保存在我的GitHub库中:中的Chapter2. 最开始说一下 ...

  8. 设计模式(0):UML类图(Class Diagram)

    文章目录 一. 基本概念 1. 泛化(Generalization) 2. 实现(Realization) 3. 关联(Association) 4. 聚合(Aggregation) 5. 组合(Co ...

  9. 23种设计模式UML类图图解

    目录 一 .类图的表示 二.创建者模式 1.单例模式 2.简单工厂模式 3.工厂方法模式 4.抽象工厂模式 5.原型模式 6.建造者模式 三.结构型模式 1.代理模式 2.适配器模式 3.装饰者模式 ...

最新文章

  1. 《Java编程思想》学习笔记(三)——初始化与清理
  2. java一个点围着另一个点转_Java:按指定的度数值旋转另一个
  3. hdu 6112 今夕何夕
  4. Android之ndk-build -j4
  5. Python模块(8)-sklearn 简易使用教程
  6. 中怎么构建ebug模式_Mybatis的设计模式运用
  7. Reddit大热,伯克利PPT带你丝滑入门机器学习:知识点全面覆盖,笔记可搭配食用...
  8. C 语言常见 API(fprintf、fputs、fprintf)
  9. 服务器数据库维护需要做哪些,数据库运维究竟需要做什么?
  10. 阿里P9:程序员的“青春饭”,从什么时候开始结束?
  11. 51中程序存储器和数据存储器
  12. ff14服务器延迟滑步,ff14 5.0黑魔怎么玩_最终幻想14 5.0黑魔输出手法
  13. cmd脚本win10使用schtasks命令实现定时任务
  14. unity 许可证即将到期_了解Unity即将推出。
  15. Navicat出现超出试用期无法打开的解决办法,亲测有效!
  16. 想学脑电,没有数据为什么不看这里?
  17. nose 测试框架使用
  18. 2016年9月2日 星期五 --出埃及记 Exodus 16:34
  19. 粉丝突破1600,我感到一丝愧疚
  20. SSIS 学习之旅 SSIS 简介

热门文章

  1. 3D游戏编程与设计作业10
  2. 1个月拿下7个offer! 5分钟掌握81个数学模型,小白也能逆袭数据分析师!
  3. 给大家介绍一款校园网盘软件,孜创校园网盘软件,搭建学校私有云存储
  4. 来了!全球三个首次5G技术实现; 辽宁省完成5G投资36.4亿元; 中兴发布白皮书; 7月国内5G手机出货1391.1万...
  5. 模型评价指标—ROC曲线
  6. 背光尺寸怎么设计才合理?
  7. P3802 小魔女帕琪 期望
  8. 计算机专业 中职学校顶岗实习学校总结,中职学校顶岗实习论文(2)
  9. 仿生毛毛虫机器人源码
  10. 银行业用户井喷式发展——解密巨杉数据库为何收获银行用户青睐