首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模块化与多态性(OOD主要概念)

模块化与多态性(OOD主要概念)
EN

Software Engineering用户
提问于 2016-04-07 13:08:37
回答 3查看 4.1K关注 0票数 1

Booch给出了OOD的4个主要概念(原则)(参见他的著作“面向对象的分析和设计及其应用程序”):

  1. 抽象化
  2. 封装
  3. 模块化
  4. 层次结构

通常我们会遇到以下4种情况:

  1. 抽象化
  2. 封装
  3. 多态
  4. 继承

这些是等同的吗?我应该把模数理解为多态性的另一个术语吗?根据布奇的定义,我没有那种感觉:

模块化是将系统分解成一组内聚和松散耦合模块的特性。

据我所知,模块就像Java包。我不知道这是不是布奇的意思。

EN

回答 3

Software Engineering用户

发布于 2016-04-07 20:21:13

您在第一个列表中提到的OO原则是程序设计的指南。(除了这些,还有其他的;实心

OO原则是思想的集合,也是OO思维的一部分;理解OO原则,如抽象、封装和模块化,将帮助您在面对在代码中创建新类的任务时做出良好的设计决策。

其中一些决定可能包括

  • 我为类或方法选择了什么名称?
  • 方法或字段/属性属于哪个类?
  • 我应该将这一行代码添加到方法中还是创建一个新的代码行?
  • 一个类是否应该被分割成多个单独的类?
  • 应该把两个类合并起来吗?
  • 哪些其他类应该有权访问类的接口?

另一方面,多态性和继承不是原则,而是语言工具;正如forwhile是语言工具一样。

虽然它们经常被认为是OO编程的定义语言特性,但这种思路有些误导,因为它们可以被用于违背许多OO原则的方法。许多非常好的OO代码都是在没有使用继承或多态性的情况下编写的。

在某些情况下,继承和多态性是有用的工具,就像do..whileswitch是有用的工具一样;当然,您应该了解它们是什么以及如何/何时使用它们。

然而,将继承或多态性视为OO原则,或者认为它们是工作的“目标”是错误的。现实情况是,它们可以而且经常被滥用,导致错误的代码(通常是程序员认为继承的任何使用都是好事,或者将继承视为代码重用的工具)。

票数 3
EN

Software Engineering用户

发布于 2016-04-07 13:18:23

模块化和多态不是一回事。

多态允许您引用某种类型的接口(我在语言无关的意义上使用这个词),而无需知道或关心(耦合到)实现。它允许您通过更改使用的类型/实现来修改代码的行为。

正如您在引用中所述,模块化是衡量您的代码块划分得有多好的一种度量。粗略地说,如果您的系统的不同部分可以在不中断无关的东西的情况下被交换,那么您的模块化程度就越高。它是从简单的事物中构建复杂的事物,而不是从一开始就建立一个大的复杂的东西。

这两者有时是相关的(多态是一个很好的解耦工具,可以帮助达到更高的内聚力,从而导致更高的模块化,但它们并不是一回事,一个不一定意味着另一个。

票数 2
EN

Software Engineering用户

发布于 2016-04-07 13:20:14

第3条和第4条不相等。多态性和模数性在另一个答案中是非常不同的。而类继承是现代编程语言通过一种“是一种”模式来实现层次结构的一种方式。

票数 -1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/315032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档