CodeGym /课程 /Java 核心 /再聊 OOP (疏耦合、密聚合)

再聊 OOP (疏耦合、密聚合)

Java 核心
第 1 级 , 课程 3
可用

“你好,阿米戈!今天我要为你介绍 OOP 的另一个优点。你看,相较于建筑,程序更像动物。它们不是堆砌起来的,而是一点点成长起来的。开发意味着持续不断的变化。在建筑世界,你可以先制定好一个计划,然后按部就班地实施它。但是在软件开发方面,可不是这回事。”

多数情况下,你不能按照自己的意愿做事,而且你必须反复重新修改你的程序。更多的时候,客户的需求也会改来改去。

“但如果客户确实提供了一个详尽的规范说明呢?”

“回想一下以往的经历。”如果一个产品成功了,客户会想发布新的版本,然后再发布一个,再发布一个。当然,你或许还要对当前版本做一些“小小的改动”。因此,软件开发是一系列漫长的更改。只是节奏不同而已。新版本可能每周发布一次,每月一次,或每半年一次。”

“我们可以从中总结出什么道理呢?”

“以最小幅度的重写来执行大量(和小量)改动是产品内部结构维护的最佳之选。”

“具体怎么做呢?”

“我们已经讲过程序里的对象相互之间如何交互。我们在黑板上用实心点来代表程序里的对象。我们用箭头来把每个对象(实心点)和所有与它交互的对象(实心点)连起来。”

现在我们把这些对象(实心点)划分群组。同一组的实心点之间联系的总比与其他组的要多些。如果一个点的箭头指向的大多是它同一组的点,那我们的对象分组就是正确的。同一组的点之间就是所谓的紧耦合,不同组的点就之间是疏耦合。

这就是“疏耦合原理”。一个程序可以被拆分成几个不同的部分,通常是层级。各部分/层级与其内部结构的逻辑关系紧密,而与其他层级/部分的关系则比较微弱。层级间的交互通常高度区分。1 个层级可以利用其类的子集合来调用另一个层级。

“和‘劳动力分配’原理相同,但范围更广一些?”

“正是。这让我们可以重组部门,让它更高效,甚至是雇佣更多的人才。如果我们不改变相互依赖的协议,所有变更都只是局部的。没有人会受到限制。我们不需要重新改造整个系统。如果部门交互的机制选定合宜,每个部门都可以优化它的内部事务。”

“那是选的好,那如果选的不好呢?”

‘那就要看看有没有改动的余地,和重写整个系统的必要性。这时不时会发生。我们无法预测未来,但是我们可以尽量减少我们重写程序的次数。”

“好的。我明白这个拆分程序的优势,但是它和 OOP 有什么关系呢?

“在选择如何组建部门以及它们之间相互交互时,我们应用了‘抽象原理’。在编程里,抽象被用来决定什么是拆分程序的最佳方法,以及各部分之间如何交互。此原理还可以重复应用于程序的各个组成部分,直到我们把程序拆分成单个的类。”

“隐藏这些部分的内部结构,严格限制它们与其他部分的交互方式,这就是封装,对吗?”

“没错。封装和抽象是 OOP 的基石。好的程序必须符合这两大原理。稍后,我们会讲其他原理,了解它们的优势。”

“太棒了。我已经等不及了!”

评论 (4)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
17022 级别 41,Guangzhou,China
5 六月 2024
还有425暗物质
Qin-1999 级别 22
8 一月 2024
share: 当谈论面向对象编程(OOP)时,有几个核心概念非常重要,包括疏耦合、密聚合、抽象、封装等。 1. **面向对象编程(OOP):** OOP是一种编程范式,它将程序看作是一组相互作用的对象的集合。对象是具有状态和行为的实体,通过定义类来创建对象,类是对象的蓝图或模板。 2. **疏耦合和密聚合:** - **疏耦合(Loose Coupling):** 这是一种设计原则,旨在减少各个组件(类、模块)之间的依赖关系。疏耦合的系统中,一个组件的变化不会影响其他组件,提高了系统的灵活性和可维护性。 - **密聚合(High Cohesion):** 相关的功能应该放在一起,形成一个相对独立的单元。密聚合强调模块内部的功能关联紧密,提高了模块内部的一致性和可理解性。 3. **抽象和封装:** - **抽象(Abstraction):** 抽象是指通过简化复杂系统的方式,忽略不必要的细节,关注于关键的概念。在OOP中,抽象通过类和接口的定义来实现,从而将系统分解为更易于理解的部分。 - **封装(Encapsulation):** 封装是将一个对象的状态和行为包装在一起,并对外部隐藏对象的内部细节。这样可以防止外部直接访问对象的内部实现,提高了代码的安全性和模块化。 4. **类与对象:** - **类(Class):** 类是对象的模板,它定义了对象的属性(成员变量)和方法(成员函数)。 - **对象(Object):** 对象是类的实例,它具有类定义的属性和方法。通过实例化类可以创建多个对象。 5. **抽象原理的应用:** - 抽象原理在OOP中用于确定如何组织和拆分程序,以及定义各个部分之间的交互方式。 - 这种抽象过程可以一直应用到程序的各个层次,直到将程序拆分成单个的类。 总的来说,OOP的设计原则旨在创建灵活、可维护和可扩展的软件系统。在Java中,你会看到类和对象的使用,以及通过继承、接口等机制来实现抽象和多态性。理解这些基本概念将帮助你更好地编写Java程序,并更好地应对软件开发中的变化和需求。
简默 级别 15,Central District,Hong Kong
11 十二月 2023
嘿嘿,还有400暗物质
hello world 级别 22,shanghai,China
22 十月 2021
暗黑物质告急