atwood-pan

 

01-面向对象程序设计

面向对象程序设计

概念

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

对象和类

Lnu95n.png

这是一个类图。

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

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

所有猫都有相似的行为: 它们会呼吸 breathe 、 进食 eat 、 奔跑 run 、 睡觉 sleep 和 喵喵叫 meow 。

这些都是该类的方法。成员变量和方法可以统称为类的成员。 存储在对象成员变量中的数据通常被称为状态,对象中的所有方法则定义了其行为

LnudPI.png

类层次结构

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

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

我们刚刚定义的父类被称为超类

继承它的类被称为子类

子类会继承其父类的状态和行为,其中只需定义不同于父类 的属性或行为。

因此, 猫 类将包含 meow 喵喵叫 方法,而 狗 Dog 类则将包含 bark 汪汪叫 方法。

Lnu4zV.png

这种由各种类组成的 金字塔就是层次结构

LnujRx.png

子类可以对从父类中继承而来的方法的行为进行重写。

子类 可以完全替换默认行为,也可以仅提供额外内容来对其进行加强。

抽象

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

封装

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

封装某个内容意味着使用关键字 private 私有 来对其进行 修饰,这样仅有其所在类中的方法才能访问这些内容。

还有 一种限制程度较小的关键字 protected 保护 ,其所修饰的对象仅允许父类访问其类中的成员。

绝大部分编程语言的接口和抽象类(或方法)都基于抽象和 封装的概念。

现代面向对象的编程语言中,接口机制(通 常使用 interfaceprotocol 关键字来声明)允许你定义对 象之间的交互协议

这也是接口仅关心对象行为,以及你不能在接口中声明成员变量的原因之一。

继承

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

继承最主要的好处 是代码复用

如果你想要创建的类与已有的类差异不大,那也没必要重复编写相同的代码。

你只需扩展已有的类并将额 外功能放入生成的子类(它会继承父类的成员变量和方法)中即可。

使用继承后,子类拥有与其父类相同接口

如果父类中 声明了某个方法,那么你将无法在子类中隐藏该方法。

你还 必须实现所有的抽象方法,即使它们对于你的子类而言没有意义。

多态

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

对象之间的关系

依赖

LnK4kd.png

依赖是类之间最基础的、也是最微弱的关系类型。

如果修改 一个类的定义可能会造成另一个类的变化,那么这两个类之间就存在依赖关系。

关联

LnKLnS.png

关联是一个对象使用另一对象或与另一对象进行交互的关系。

关联可视为一种特殊 类型的依赖,即一个对象总是拥有访问与其交互的对象的权限,而简单的依赖关系并不会在对象间建立永久性的联系。

聚合

LnM910.png

聚合是一种特殊类型的关联,用于表示多个对象之间的**“一 对多”“多对多**”或**“整体对部分”**的关系。

组件可以独立于容器存在,也可以同时连接多个 容器。

组合

LnM0u8.png

组合是一种特殊类型的聚合,其中一个对象由一个或多个其 他对象实例构成。

组合与其他关系的区别在于组件仅能作为 容器的一部分存在。(脱离整体就不存在了)

posted on   JavaCoderPan  阅读(111)  评论(0编辑  收藏  举报  

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南

导航

统计

点击右上角即可分享
微信分享提示