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 Cat
和 Dog
) 然后你可以通过调用 sound()
来处理多态 Animal
。如果你有 Cat
它会喵喵叫,如果你有 Dog
它会吠叫。
我假设你的问题是指面向对象编程的泛化和多态性,例如 Java。
泛化指的是class可以分解行为,子class可以从这些行为中受益。 super class 泛化行为,相反,sub class 专门化这些行为。
由于一个对象可以被看作是一般的class或特殊的对象(通过转换这个对象),我们说这个对象是多态。在运行时,多态性会影响方法调用的选择:如果两个 super class 特化的都有相同方法的两个实现,程序应该在两个实现之间进行选择。
因此,多态性更多地与以下事实相关:在运行时,我们必须选择对象的性质,而泛化更多地与行为的继承和分解概念相关。
您可以查看这些 lecture notes 以获得更多解释和示例。
多态和泛化有什么区别。我看到它们在 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 Cat
和 Dog
) 然后你可以通过调用 sound()
来处理多态 Animal
。如果你有 Cat
它会喵喵叫,如果你有 Dog
它会吠叫。
我假设你的问题是指面向对象编程的泛化和多态性,例如 Java。
泛化指的是class可以分解行为,子class可以从这些行为中受益。 super class 泛化行为,相反,sub class 专门化这些行为。
由于一个对象可以被看作是一般的class或特殊的对象(通过转换这个对象),我们说这个对象是多态。在运行时,多态性会影响方法调用的选择:如果两个 super class 特化的都有相同方法的两个实现,程序应该在两个实现之间进行选择。
因此,多态性更多地与以下事实相关:在运行时,我们必须选择对象的性质,而泛化更多地与行为的继承和分解概念相关。
您可以查看这些 lecture notes 以获得更多解释和示例。