Классы и объекты
Понятие класса можно считать аналогом понятия математического понятия в математике. В самом деле, все понятия математики
являются конечными множествами других, более простых, понятий, в которые вводится дополнительная структура, которая всегда является отображением.
Эти более простые понятия можно считать, как принято говорить, свойствами, а дополнительные структуры, отображения - методами. Например, понятие
комплексного числа определеяется, как пара (множество, состоящее из двух элементов) вещественных чисел с дополнительной структурой,
состоящей из двух бинарных операций.
Напомним, что объектом мы называем конечное множество обозначений, а обозначением мы называем пару имя : значение, в которой имя - это слово, а значение - это "более простой объект". Самыми "простыми" объектами являются так называемые примитивы, т.е. слова, числа и биты. Также к числу объектов мы причисляем функции, в которых аргументами и возвращаемыми значениями (если функция что-то возвращает) являются объекты. Среди значений элементов объекта могут быть функции или элементы, не являющиеся функциями, в зависимости от этого долгое время эти элементы принято было называть методами или свойствами. Однако это разделение устарело, и мы его не используем, называя все элементы объекта элементами. В отличие от типизированных языков программирования, в которых понятие класса является центральным, в "утиных" языках понятие класса имеет периферийное значение. В самом деле, в "утиных" языках по существу один класс от другого отличается лишь числом, входящих в него элементов, поскольку тип этих элементов в силу принципа "утиности" не задаётся. В языке УТКА понятие класса расширено по сравнению с js, это расширение состоит в том, что в классе могут быть заданы значения части элементов. Заданные значения элементов класса можно считать аналогами статических элементов класса в типизированных языках. Те же элементы класса, значения в которых не заданы, превращаются в аргументы конструктора - отображения, которое с каждым набором значений тех элементов, значения которых не заданы, сопоставляет объект. Название конструктора совпадает с названием класса, тут мы следуем общепринятой традиции, но мы отказались от использования ключевого слова new при создании нового объекта при помощи конструктора, тут мы разошлись с традицией. Самыми простыми и в некотором смысле универсальными классами являются классы:
single = {x:};
и
pair = {x:, y:};
Класс single позволяет "упаковать" в него любой объект, при этом с содержательной точки зрения упакованный объект ничего не теряет и не приобретает, но такая "упаковка" бывает полезна и удобна в некоторых случаях, например, при помощи такой "упаковки" можно глобальное имя, определённое вне тела функции, сделать доступным для изменения внутри тела функции, как это было объяснено в теме "Функции".
Класс pair позволяет строить точки и векторы на плоскости, а также матрицы. Матрицы, т.е. пары векторов могут задавать много полезных вещей: линейные преобразования плоскости, отрезки, прямоугольники. Применяя конструктор pair несколько раз в различных комбинациях, можно вообще посторить любой объект, вот почему мы называем этот класс универсальным.
Напомним, что объектом мы называем конечное множество обозначений, а обозначением мы называем пару имя : значение, в которой имя - это слово, а значение - это "более простой объект". Самыми "простыми" объектами являются так называемые примитивы, т.е. слова, числа и биты. Также к числу объектов мы причисляем функции, в которых аргументами и возвращаемыми значениями (если функция что-то возвращает) являются объекты. Среди значений элементов объекта могут быть функции или элементы, не являющиеся функциями, в зависимости от этого долгое время эти элементы принято было называть методами или свойствами. Однако это разделение устарело, и мы его не используем, называя все элементы объекта элементами. В отличие от типизированных языков программирования, в которых понятие класса является центральным, в "утиных" языках понятие класса имеет периферийное значение. В самом деле, в "утиных" языках по существу один класс от другого отличается лишь числом, входящих в него элементов, поскольку тип этих элементов в силу принципа "утиности" не задаётся. В языке УТКА понятие класса расширено по сравнению с js, это расширение состоит в том, что в классе могут быть заданы значения части элементов. Заданные значения элементов класса можно считать аналогами статических элементов класса в типизированных языках. Те же элементы класса, значения в которых не заданы, превращаются в аргументы конструктора - отображения, которое с каждым набором значений тех элементов, значения которых не заданы, сопоставляет объект. Название конструктора совпадает с названием класса, тут мы следуем общепринятой традиции, но мы отказались от использования ключевого слова new при создании нового объекта при помощи конструктора, тут мы разошлись с традицией. Самыми простыми и в некотором смысле универсальными классами являются классы:
single = {x:};
и
pair = {x:, y:};
Класс single позволяет "упаковать" в него любой объект, при этом с содержательной точки зрения упакованный объект ничего не теряет и не приобретает, но такая "упаковка" бывает полезна и удобна в некоторых случаях, например, при помощи такой "упаковки" можно глобальное имя, определённое вне тела функции, сделать доступным для изменения внутри тела функции, как это было объяснено в теме "Функции".
Класс pair позволяет строить точки и векторы на плоскости, а также матрицы. Матрицы, т.е. пары векторов могут задавать много полезных вещей: линейные преобразования плоскости, отрезки, прямоугольники. Применяя конструктор pair несколько раз в различных комбинациях, можно вообще посторить любой объект, вот почему мы называем этот класс универсальным.