The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:
В EO (и 𝜑-исчисление, на котором оно основано) есть три вещи: данные, атомы и объекты. Существует функция датификации, которая объединяет все три вместе, чтобы сделать программу на EO живой. Вот как это работает вместе с Java, например.
Допустим, мы создаем интернет-магазин, где товары доставляются в разные страны, и нам необходимо рассчитать стоимость доставки на основе местоположения покупателя. Мы создаем абстрактный объект, который представляет стоимость доставки:
Затем предположим, у нас есть абстрактный объект customer-in-mysql
, который представляет информацию о клиенте в базе данных MySQL. Чтобы создать конкретного клиента jeff
, мы создаем копию customer-in-mysql
, указывая ID клиента как 42
.
Закрытый объект jeff
- это клиент, которого мы ищем. Предполагается, что у него есть дочерний объект country
, необходимый для cost-of-shipment
.
Теперь мы делаем копию cost-of-shipment
и затем добавляем ее к цене товара, чтобы рассчитать, сколько должен заплатить клиент.
Здесь x
- новый объект, копия cost-of-shipment
. Затем мы берем дочерний абстрактный объект add
из него и делаем копию, передавая объект product.price
в качестве атрибута. Мы называем созданную копию total
. Затем мы выводим общую стоимость:
Все эти манипуляции еще не позволяют печатать число. Все они являются объявлениями объектов. Мы объявили один абстрактный объект стоимость-доставки
и несколько закрытых объектов: джефф
, икс
, итого
и приложение
.
Теперь самая интересная часть, которую мы называем датаизацией. Это процесс превращения объекта в данные. Данные - это нечто, не имеющее дочерних объектов и являющееся самым простым элементом вычислительной платформы, на которой компилируется программное обеспечение EO. Вы можете подумать, что в приведенном выше примере 42
и "US"
являются данными. Однако это не так. Они также являются объектами, и мы можем написать это, например:
Данные, лежащие в основе этих объектов, для нас на уровне программы EO не видны. Данные находятся внутри объекта 42
. Только среда выполнения конкретной платформы может извлечь их с помощью механизма данных. Если вы скомпилируете код EO в Java, вы получите класс EOapp
(полученный из объекта app
), который может быть преобразован в данные таким образом:
Метод take()
возьмет объект app
и попытается попросить его превратиться в данные. Объект stdout
перенаправит этот запрос объекту sprintf
, который спросит у объекта total
то же самое: какие данные у тебя есть? Объект total
является объектом x.add
. Если мы посмотрим, что представляет собой x
, мы увидим, что это копия нашего собственного абстрактного объекта cost-of-shipment
, в котором нет дочернего объекта add
! Однако у него есть дочерний объект @
, который является “приемником всего”: запрос на получение add
попадет туда.
Объект, связанный с атрибутом @
, - это копия if
.
Он возьмет customer.country.eq
, преобразует его в логические данные с помощью функции dataize, а затем, в зависимости от этих данных, вернет либо 9.99
, либо 24.99
. Каждый из них имеет атрибут add
, который будет использоваться для создания нового объекта с аргументом product.price
. Результат будет использоваться классом Java Dataized для продолжения процесса датаизации. Наконец, сумма двух чисел будет преобразована в число с плавающей точкой в Java.
Процесс датаизации customer.country.eq
происходит во время выполнения и не виден на уровне EO. Объект eq
называется атомом, поскольку он является атомарным элементом языка - его необходимо реализовывать на Java, а не на EO. В приведенном выше примере есть и другие атомы: if
, sprintf
, add
, stdout
и length
. Все они реализованы на Java.
Таким образом, мы сначала создаем объекты, либо через абстракцию (объявление новых абстрактных объектов), либо через применение (создание копий абстрактных объектов). Затем мы датаизуем один из объектов, и вся композиция объектов начинает “жить”, пытаясь превратиться в данные.
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-22 at 09:53