【发布时间】:2018-07-19 14:08:23
【问题描述】:
多态和泛化有什么区别。我看到它们在 UML 中看起来很相似。他们是一样的吗?
【问题讨论】:
标签: oop object polymorphism uml generalization
多态和泛化有什么区别。我看到它们在 UML 中看起来很相似。他们是一样的吗?
【问题讨论】:
标签: oop object polymorphism uml generalization
让我们看看牛津词典:
概括 | ˌjen(ə)rələˈzāSH(ə)n |
名词
从具体案例推论得出的一般性陈述或概念:他正在做出全面的概括。
• 概括的作用:这样的轶事不能作为概括的基础。
UML 有一个图形表示,它是一条朝向一般类的带有开放三角形的单线。
多态性 | ˌpälēˈmôrfizəm |
名词
以几种不同形式发生的条件:人类认知的复杂性和多态性。
[...]
• 计算一种编程语言的特性,它允许例程在不同时间使用不同类型的变量。
这是对泛化的某种使用。如果你有一个抽象类Animal,它有一个操作sound(),并且你有这个类的不同专业化(与泛化相反)(例如一个具体类Cat和Dog),那么你可以对待多态Animal 通过调用sound()。如果你有一个Cat,它会喵喵叫,如果你有一个Dog,它会吠叫。
【讨论】:
我假设您的问题涉及面向对象编程的泛化和多态性,例如 Java。
泛化是指一个类可以分解行为,子类可以从这些行为中受益。超类概括了这些行为,相反,子类专门化了这些行为。
由于一个对象可以被看作是通用类或特殊类(通过转换这个对象),我们说这个对象是polymorph。在运行时,多态性会影响方法调用的选择:如果两个超类和特化类都有相同方法的两个实现,则程序应该在这两个实现之间进行选择。
因此,多态性更多地与在运行时我们必须选择对象的性质有关,而泛化更多地与行为的继承和分解的概念有关。
您可以查看这些lecture notes 以获得更多解释和示例。
【讨论】: