Тема  9. Объекты

Содержание

  1. JS-подобные объекты
    1. Ассоциативные массивы и прототипы
    2. Свойства
    3. Методы
    4. Конструкторы
    5. Наследование
  2. Java-объекты
    1. Интерфейсы
    2. Реализация
    3. Изменяемые поля
    4. Работа с Java-классами
  3. Изменяемое состояние
    1. Динамические переменные
    2. Локальные переменные
    3. Ссылки

Домашнее задание 11. Объектные выражения на Clojure

  1. Разработайте конструкторы Constant, Variable, Add, Subtract, Multiply, Divide и Negate для представления арифметических выражений.
    1. Пример описания выражения 2x-3:
      (def expr
        (Subtract
          (Multiply
            (Constant 2)
            (Variable "x"))
          (Constant 3)))
      
    2. Функция (evaluate expression vars) должна производить вычисление выражения expression для значений переменных, заданных отображением vars. Например, (evaluate expr {"x" 2}) должно быть равно 1.
    3. Функция (toString expression) должна выдавать запись выражения в стандартной для Clojure форме.
    4. Функция (parseObject "expression") должна разбирать выражения, записанные в стандартной для Clojure форме. Например,
      (parseObject "(- (* 2 x) 3)")
      должно быть эквивалентно expr.
  2. Сложный вариант.
    1. Конструкторы Add, Subtract, Multiply и Divide должны принимать произвольное число аргументов. Парсер так же должен допускать произвольное число аргументов для +, -, *, /.
    2. Функция (diff expression "variable") должна возвращать выражение, представляющее производную исходного выражения по заданной переменной. Например, (diff expression "x") должен возвращать выражение, эквивалентное (Constant 2), при этом выражения (Subtract (Constant 2) (Constant 0)) и
      (Subtract
        (Add
          (Multiply (Constant 0) (Variable "x"))
          (Multiply (Constant 2) (Constant 1)))
        (Constant 0))
      
      так же будут считаться правильным ответом.
  3. При выполнении задания можно использовать любой способ представления объектов.
  4. При выполнении задания можно использовать функции, для определения JS-like объектов, приведённые на лекции.