UML 中的多态性和泛化

Polymorphism and Genaralization in UML

多态和泛化有什么区别。我看到它们在 UML 中看起来很相似。它们相同吗?

让我们查一查牛津词典:

generalization | ˌjen(ə)rələˈzāSH(ə)n |

noun

a general statement or concept obtained by inference from specific cases: he was making sweeping generalizations.

• the action of generalizing: such anecdotes cannot be a basis for generalization.

UML 有一个图形表示,它是一条带有空心三角形的单线,指向一般 class。

polymorphism | ˌpälēˈmôrfizəm |

noun

the condition of occurring in several different forms: the complexity and polymorphism of human cognition.

[...]

Computing a feature of a programming language that allows routines to use variables of different types at different times.

这是泛化的某种用途。比方说,如果你有一个抽象 class Animal 它有一个操作 sound() 并且你有不同的专业化(与泛化相反) class (例如具体 class CatDog) 然后你可以通过调用 sound() 来处理多态 Animal。如果你有 Cat 它会喵喵叫,如果你有 Dog 它会吠叫。

我假设你的问题是指面向对象编程的泛化和多态性,例如 Java。

泛化指的是class可以分解行为,子class可以从这些行为中受益。 super class 泛化行为,相反,sub class 专门化这些行为。

由于一个对象可以被看作是一般的class或特殊的对象(通过转换这个对象),我们说这个对象是多态。在运行时,多态性会影响方法调用的选择:如果两个 super class 特化的都有相同方法的两个实现,程序应该在两个实现之间进行选择。

因此,多态性更多地与以下事实相关:在运行时,我们必须选择对象的性质,而泛化更多地与行为的继承和分解概念相关。

您可以查看这些 lecture notes 以获得更多解释和示例。