Modula-2是一种高级编程语言,由Nicklaus Wirth在1980年代设计。它基于Pascal语言,并引入了一些新的概念和改进,以提高程序的可读性和模块化水平。在Modula-2中,最引人注目的变化之一是其面向对象编程(OOP)特性。尽管与现代面向对象语言如Java或C++相比,Modula-2的面向对象特性较为基础,但它仍然为程序设计者提供了强大的工具来组织和管理代码。
在Modula-2中,基本数据类型和结构体提供了一种构建自定义类型的基础。类(Classes)是另一种用于创建自定义类型的方式,并且可以包含方法、属性以及继承特性。这种方法使得程序员能够定义自己的抽象概念并实现它们的行为。
在Modula-2中,一个类可以被定义如下:
CLASS MyClass
VIRTUAL
PROCEDURE Display; OVERRIDE;
END;
IMPLEMENTATION OF MyClass
PROCEDURE MyClass.Display = BEGIN
PRINT("This is a display method of MyClass.");
END;
END.
上述代码定义了一个名为MyClass
的类,并为其实现了一个方法Display
。这里的关键词VIRTUAL
表示该类可以被继承,而OVERRIDE
则表明了子类中可以重新定义此方法。
Modula-2支持通过使用SUBCLASS OF
语句来创建类层次结构。这使得一个类可以从另一个类派生,从而复用已有的代码,并且可以在不修改原类的情况下扩展功能。
SUBCLASS DerivedClass SUBCLASS OF MyClass;
DerivedClass
继承了MyClass
的所有属性和方法,同时也允许对这些内容进行扩展或覆盖。通过这种方式,可以实现代码的重用并保持良好的封装性。
在Modula-2中,类提供了封装机制,使得数据和操作可以被组织在一起形成私有成员(非公共属性和方法)以及公有接口。这有助于保护内部状态,并使外部系统仅通过已定义的方法与对象交互。
CLASS MyClass
PRIVATE
VAR secretData: INTEGER;
PUBLIC
PROCEDURE SetSecretData(data: INTEGER);
END;
IMPLEMENTATION OF MyClass
PROCEDURE MyClass.SetSecretData = BEGIN
secretData := data;
END;
END.
在此示例中,secretData
字段被声明为私有(PRIVATE
)成员。只有通过SetSecretData
方法才能访问或修改它。
虽然Modula-2的面向对象特性可能不如现代语言那样先进和强大,但它提供了一套基本但功能性的工具来支持面向对象的设计原则。这些特性的引入使得代码更加模块化、易于理解和维护,从而提高了开发效率和产品质量。