gds (gds) wrote,
gds
gds

краткая характеристика ООП в окамле

Отвечал на этот комментарий в жыжыцэ ребе metaclass, решил вытащить в отдельный птсо, может кому понадобится.

Вот тут -- Private row types: abstracting the unnamed -- описываются применения row types (и полиморфных вариантных типов заодно).
Если вкратце и своими словами, типизация объектов в окамле структурная (член структуры = метод = "row" в официальной терминологии). Обращение к члену структуры (obj#meth) заставляет тайпчекер статически гарантировать наличие у объекта obj метода meth.
Нет номинальной типизации/подтипизации объектов (по имени класса), но она легко эмулируется, если нужна.
Поля объектов могут быть как изменяемыми, так и неизменными, по желанию. Поля видны только в пределах объекта, методы видны и в пределах объекта, и за пределами. Класс может иметь типы-параметры (как обычные параметрические типы). Методы класса могут быть полиморфными (через это имеем полиморфизм второго ранга в объектах). Существует возможность создать объект или описать объектный тип, не создавая класс. Поддерживаются виртуальные методы (и статически проверяется, что любой создаваемый объект должен иметь полностью определённые методы). Поддерживается множественное наследование (хотя даже обычное наследование не часто нужно).
Одно из классных свойств ООП в окамле состоит в том, что нет нужды использовать большинство ООП-паттернов. А вот для чего можно использовать ООП, так это для эмуляции duck typing и typeclasses.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 5 comments