面向对象编程范例使用继承来建模遵循泛化-特殊化关系的实体之间的关系。在这里,基类用于封装一组实体的通用(一般)属性和行为,派生类通过添加附加属性和/或添加/修改现有行为来扩展基类。
作为一个新手函数式编程,我需要指导如何在像F#这样的函数式语言中建模这样的关系。
例如,如何最好地建模以下简单情况:
abstract class Tutorial {
private String topic;
abstract public void learn();
}
class VideoTutorial extends Tutorial {
private float duration;
public void learn () {
System.out.println ("Watch Video");
}
}
class PDFTutorial extends Tutorial {
private int pageCount;
public void learn () {
System.out.println ("Read PDF");
}
}
然后稍后使用一系列 教程 并调用 learn 来观察多态行为。
AudioTutorial
,则需要修改TutorialKind
类型和learn
函数。但是,如果您想添加执行教程其他操作的函数,则只需要编写一个函数(而不是修改所有类,在面向对象编程中必须这样做)。因此,透视角度的变化可以双向工作... 在 F# 中,函数式风格是一个很好的默认选择,但如果您正在构建具有插件的东西并且确实需要 OO 类型的可扩展性,则可以使用 OO 和接口。 - Tomas Petricek