Классы
Классы - это объекты, в которых не все значения имён заданы, или даже все не заданы. Вот простейший пример класса:
cc = {x: , y: 3};
В этом "недообъекте" задано значение второго имени y, а значение первого имени x просто пропущено. Мы можем задать значение первого имени произвольно и получим объект, но этот объект уже будет зависеть от того, какое значение мы придадим первому имени класса. Можно сказать, что класс даёт нам не один объект, а бесконечное множество объектов. Более точно будет сказать так: класс задаёт отображение из множества всевозможных значений, которые мы можем проставить в пустые места класса, в множество объектов. Это отображение обозначается тем же словом (в нашем примере "сс"), каким обозначается класс. Это отображение называется конструктором класса.
Проверим, как конструктор класса cc работает в нашем примере. Для этого перейдём в редактор и напечатаем следующее:
cc = {x: , y: 3};
show(cc(5).x);
show(cc(5).y);
Мы увидим, что cc(5).x = 5, а cc(5).x = 3. Это означает, что cc(5) является объектом {x: 5, y: 3}, т.е. объектом, который получается из класса сс подстановкой 5 на пустое место, где должно стоять значение имени x.
Имеется два особых, в некотором смысле, универсальных класса, которые могут быть использованы во многих конструкциях:
single = {x:};
pair = {x:, y:};
Класс single позволяет инкапсулировать произвольный объект, т.е. поместить его внутрь другого объекта, содержательно при этом ничего не меняется. Рассмотрим подробнее класс pair, тут оба значения пропущены, поэтому у конструктора должно быть два аргумента:
pair(5, 3) - это объект {x: 5, y: 3},
следовательно,
pair(5, 3).x = 5, pair(5, 3).y = 3.
При подстановке в класс pair числовых значений мы получаем объект с двумя числовыми координатами, что мы привыкли воспринимать как вектор или точку на плоскости. Но подставить в пустые места этого класса, как и любого другого, мы можем не только числа, но и любые другие объекты. При этом может получиться много интересного и содержательного. Например, давайте в качестве значений имён x и y положим вектора:
pair(pair(1, 2), pair(3, 4)) = {x: {x: 1, y: 2}, y: {x: 3, y: 4}}
Этот объект математики называют матрицей. Чтобы получить матрицу в редакторе следует напечатать команды:
pair = {x: , y:};
matrix = pair(pair(1, 2), pair(3, 4));
show(matrix.x.x);
show(matrix.x.y);
show(matrix.y.x);
show(matrix.y.y);
Матрица задаёт две точки на плоскости, которые можно рассматривать, как концы отрезка или как два диагонально расположенных угла прямоугольника. Это обстоятельство пригодится нам при рисовании. В математике матрицы определяют линейные преобразования плоскости.
Математики записывают матрицы в виде квадратной таблицы:
здесь первый столбец матрицы является первым вектором пары векторов, а второй столбец - вторым вектором пары векторов. Число:
m11 + m22
(сумма диагональных элементов) называется следом матрицы. Число:
m11 * m22 - m21 * m12
называется определителем матрицы. Матрица:
называется транспонированной матрицей. Можно также придать именам x и y значения разного типа, например,
dd = pair(5, pair(33, 44));
show(dd.x);
show(dd.y.x);
show(dd.y.y);
объекты, которые получаются из одного класса, называются однотипными. Когда мы имели дело с примитивными объектами, мы выделили три класса примитивных объектов: числа, слова и биты. Тогда мы называли однотипными примитивные объекты, принадлежащие одному и тому же из этих трёх классов. Теперь мы ввели понятие однотипности уже для всех, а не только примитивных, объектов. Попробуйте и другие варианты с классами и конструкторами.
Перейдём к упражнениям.
1. Создайте функцию, которая вычисляет след матрицы. Начните так:
starttest;
pair={x:,y:};
matr=pair(pair(1,2),pair(3,4));
fun=function(mm){
А закончите так:
show(fun(matr));
Далее следуйте инструкциям в консоли.
2. Создайте функцию (путём внесения в предыдущую программу незначительных изменений), которая вычисляет определитель матрицы. Начните так:
starttest;
pair={x:,y:};
matr=pair(pair(1,2),pair(3,4));
fun=function(mm){
А закончите так:
show(fun(matr));
Далее следуйте инструкциям в консоли.
3. Создайте функцию (путём внесения в предыдущую программу незначительных изменений), которая вычисляет транспонированную матрицу. Начните так:
starttest;
pair={x:,y:};
matr=pair(pair(1,2),pair(3,4));
fun=function(mm){
А закончите так:
show(fun(matr).x.x);
show(fun(matr).x.y);
show(fun(matr).y.x);
show(fun(matr).y.y);
Далее следуйте инструкциям в консоли.
cc = {x: , y: 3};
В этом "недообъекте" задано значение второго имени y, а значение первого имени x просто пропущено. Мы можем задать значение первого имени произвольно и получим объект, но этот объект уже будет зависеть от того, какое значение мы придадим первому имени класса. Можно сказать, что класс даёт нам не один объект, а бесконечное множество объектов. Более точно будет сказать так: класс задаёт отображение из множества всевозможных значений, которые мы можем проставить в пустые места класса, в множество объектов. Это отображение обозначается тем же словом (в нашем примере "сс"), каким обозначается класс. Это отображение называется конструктором класса.
Проверим, как конструктор класса cc работает в нашем примере. Для этого перейдём в редактор и напечатаем следующее:
cc = {x: , y: 3};
show(cc(5).x);
show(cc(5).y);
Мы увидим, что cc(5).x = 5, а cc(5).x = 3. Это означает, что cc(5) является объектом {x: 5, y: 3}, т.е. объектом, который получается из класса сс подстановкой 5 на пустое место, где должно стоять значение имени x.
Имеется два особых, в некотором смысле, универсальных класса, которые могут быть использованы во многих конструкциях:
single = {x:};
pair = {x:, y:};
Класс single позволяет инкапсулировать произвольный объект, т.е. поместить его внутрь другого объекта, содержательно при этом ничего не меняется. Рассмотрим подробнее класс pair, тут оба значения пропущены, поэтому у конструктора должно быть два аргумента:
pair(5, 3) - это объект {x: 5, y: 3},
следовательно,
pair(5, 3).x = 5, pair(5, 3).y = 3.
При подстановке в класс pair числовых значений мы получаем объект с двумя числовыми координатами, что мы привыкли воспринимать как вектор или точку на плоскости. Но подставить в пустые места этого класса, как и любого другого, мы можем не только числа, но и любые другие объекты. При этом может получиться много интересного и содержательного. Например, давайте в качестве значений имён x и y положим вектора:
pair(pair(1, 2), pair(3, 4)) = {x: {x: 1, y: 2}, y: {x: 3, y: 4}}
Этот объект математики называют матрицей. Чтобы получить матрицу в редакторе следует напечатать команды:
pair = {x: , y:};
matrix = pair(pair(1, 2), pair(3, 4));
show(matrix.x.x);
show(matrix.x.y);
show(matrix.y.x);
show(matrix.y.y);
Матрица задаёт две точки на плоскости, которые можно рассматривать, как концы отрезка или как два диагонально расположенных угла прямоугольника. Это обстоятельство пригодится нам при рисовании. В математике матрицы определяют линейные преобразования плоскости.
Математики записывают матрицы в виде квадратной таблицы:
(
m11 m12
m21 m22
)
здесь первый столбец матрицы является первым вектором пары векторов, а второй столбец - вторым вектором пары векторов. Число:
m11 + m22
(сумма диагональных элементов) называется следом матрицы. Число:
m11 * m22 - m21 * m12
называется определителем матрицы. Матрица:
(
m11 m21
m12 m22
)
называется транспонированной матрицей. Можно также придать именам x и y значения разного типа, например,
dd = pair(5, pair(33, 44));
show(dd.x);
show(dd.y.x);
show(dd.y.y);
объекты, которые получаются из одного класса, называются однотипными. Когда мы имели дело с примитивными объектами, мы выделили три класса примитивных объектов: числа, слова и биты. Тогда мы называли однотипными примитивные объекты, принадлежащие одному и тому же из этих трёх классов. Теперь мы ввели понятие однотипности уже для всех, а не только примитивных, объектов. Попробуйте и другие варианты с классами и конструкторами.
Перейдём к упражнениям.
1. Создайте функцию, которая вычисляет след матрицы. Начните так:
starttest;
pair={x:,y:};
matr=pair(pair(1,2),pair(3,4));
fun=function(mm){
А закончите так:
show(fun(matr));
Далее следуйте инструкциям в консоли.
2. Создайте функцию (путём внесения в предыдущую программу незначительных изменений), которая вычисляет определитель матрицы. Начните так:
starttest;
pair={x:,y:};
matr=pair(pair(1,2),pair(3,4));
fun=function(mm){
А закончите так:
show(fun(matr));
Далее следуйте инструкциям в консоли.
3. Создайте функцию (путём внесения в предыдущую программу незначительных изменений), которая вычисляет транспонированную матрицу. Начните так:
starttest;
pair={x:,y:};
matr=pair(pair(1,2),pair(3,4));
fun=function(mm){
А закончите так:
show(fun(matr).x.x);
show(fun(matr).x.y);
show(fun(matr).y.x);
show(fun(matr).y.y);
Далее следуйте инструкциям в консоли.