Часть 1. Объектно-ориентированное программирование
Тем: 2
Тема 1. Программирование по контракту
Содержание
- Контракты кода
- Пред- и постусловия
- Операторы присваивания, композиции, ветвления, цикла
- Стратегии доказательств
- Контракты функций
- Чистые функции
- Хранимое состояние и инварианты
Примеры
zipДомашнее задание 1. Обработка ошибок
-
Разработайте классы
Checked*, выполняющие соответствующие операции с проверкой на переполнения и неверные аргументы. -
Добавьте в программу, вычисляющую выражения,
обработку ошибок, в том числе:
- ошибки разбора выражений;
- ошибки вычисления выражений.
-
Для выражения
1000000*x*x*x*x*x/(x-1)вывод программы должен иметь следующий вид:x f 0 0 1 division by zero 2 32000000 3 121500000 4 341333333 5 overflow 6 overflow 7 overflow 8 overflow 9 overflow 10 overflow
Результатdivision by zero(overflow) означает, что в процессе вычисления произошло деление на ноль (переполнение). - При выполнении задания следует обратить внимание на дизайн и обработку исключений.
- Человеко-читаемые сообщения об ошибках должны выводиться на консоль.
- Программа не должна «падать» с исключениями (как стандартными, так и добавленными).
-
Код должен находиться в пакете
expression.exceptions.
Библиография
Тема 2. Реализация ООП
Содержание
- Классы
- Инвариант класса
- Задачи инкапсуляции
- Интерфейсы
- Интерфейс как синтаксический контракт
- Интерфейс как семантический контракт
- Абстрактные базовые классы и наследование
- Устранение дублирования
- Вынос изменяемой логики в наследников
Примеры
zipЭкзаменационные вопросы
- Пре- и постусловия, инварианты
- Интерфейсы
- Абстрактные базовые классы
- Принцип подстановки Лисков
Практические навыки
- Реализация программ на Java с применением интерфейсов и абстрактных базовых классов
Часть 2. Введение в JavaScript
Тем: 3
Тема 3. Функции
Содержание
- JavaScript и Java
- Появление и история JavaScript/ECMAScript
- Связь с Java
- Различия с Java
- Strict mode
- Переменные и типы
- Объявление переменных
- Типы значений
- Массивы
- Простые функции
- Синтаксис объвления
- Передача аргументов
- Способы вызова
- Стрелочные функции
- Функции высших порядков
- Примеры
- Сортировка
- Компараторы
- Составные компараторы
- Функциональные интерфейсы
- Комбинаторы
- foldLeft, foldRight
- map
- Композиция
- Карринг
- Примеры
Тема 4. Объекты и замыкания
Содержание
- Объекты
- Объекты как ассоциативные массивы
- Свойства
- Изменение свойств
- Неопределенные свойства
- Строки как индексы
- Сокращенная запись
- Проверка наличия свойства
- Перечисление свойств
- Наследование
- Создание объектов (Object.create)
- Получение прототипа (Object.getPrototypeOf)
- Наследование свойств
- Переопределение свойств
- Удаление свойств
- Методы
- Функции в свойствах
- Наследование функций
- Aliasing
- Неявная передача this
- Явная передача this
- Конструкторы
- Фабрики
- Конструкторы
- Прототипы в конструкторах
- Явное создание объекта и вызов конструктора
- Получение конструктора
- Объекты как ассоциативные массивы
- Замыкания
- Хранение состояния в замыкании
- Замыкание изменяемых переменных
- Трюк с объявлением промежуточной функции
- Общее состояние нескольких функций
- Модули
- Определение модуля
- Определение конструкторов
- Определение функций
- Использования модуля
- Прямое использование
- Импортирование
- Переменные класса
- Определение модуля
Тема 5. Что еще есть в JavaScript
Содержание
- Обработка ошибок
- Стандартные ошибки
- Try-catch-finally
- Что можно бросить
- Пользовательские исключения
- Нет такой вещи как...
- Глобальные переменные
- Предопределенные значения
- Блочные переменные
- Реализация замыканий
- Стандартная библиотека
- Основные типы
- Основные функции
- eval
- parseInt/Float
- isNaN/Finite
- Составные типы
- Объекты
- Функции
- Массивы
- Строки
- Boolean
- Number
- Date
- RegExp
- Встроенные ошибки
- Error
- RangeError
- ReferenceError
- SyntaxError
- TypeError
- URIError
- Наборы функций
- Math
- JSON
- Классы и методы
- Свойства-методы
- Getters и setters
- Классы
- Наследование
- Javascript 6+
- Шаблонные строки
- Set и Map
- Модули
- Свойства (не рассказывалось)
- Определение свойств
- Атрибуты свойств: enumerable, writable, configurable
- Атрибуты свойств: value, get, set
- Атрибуты объектов: extensible, seal/isSealed, freeze/isFrozen
Часть 3. Введение в Clojure
Тем: 5
Тема 6. Функции
Содержание
- Выражения и переменные
- Константы
- Функции
- Фиксированной арности
- Произвольной арности
- Переменные
- Определение
- Функции как значения
- Примитивные типы
- Приведение типов
- Функции
- Определение функции
- Рекурсивные функции
- Общая рекурсия
- Хвостовая рекурсия
- Оптимизация хвостовой рекурсии
- Контракты
- Списки
- Литералы
- Создание
- Операции
- Проверки
- Свертки
- Вектора
- Литералы
- Создание
- Операции
- Проверки
- Свертки
- Стандартные функции
Библиография
Тема 7. Внешний мир
Содержание
- Ввод-вывод
- Простейший ввод-вывод
- Работа с последовательностями событий
- Разбор ввода
- Разбор и гомоиконность
- Стандартный парсер
- Операции с кодом
- Исполнение сгенерированного кода
- Гомоиконность
- Подрядки вычисления
- Аппликативный
- Нормальный
- Ленивый
- Потоки
- Основные определения
- Операции с потоками
- Конечные потоки
- Бесконечные потоки
- Ленивые последовательности
- Отображения и множества
- Литералы
- Создание
- Проверки
- Операции
Библиография
Тема 8. Объекты
Содержание
- JS-подобные объекты
- Ассоциативные массивы и прототипы
- Свойства
- Методы
- Конструкторы
- Наследование
- Java-объекты
- Интерфейсы
- Реализация
- Изменяемые поля
- Работа с Java-классами
- Изменяемое состояние
- Динамические переменные
- Локальные переменные
- Ссылки
Библиография
- Clojure
- Clojure Cheat Sheet
- Daniel Higginbotham Clojure for the Brave and True (Chapters 10, 12)
Тема 9. Комбинаторные парсеры
Содержание
- Базовые концепции
- Результат разбора
- Интерфейс парсера
- Простейшие парсеры
- Простейшие комбинаторы парсеров
- Комбинаторы
- Вспомогательные методы
- Последовательности
- Альтернативы
- Регулярные замыкания
- Пример: JSON
- Простые парсеры
- Массивы
- Объекты
- Полный парсер
Библиография
Тема 10. Макросы и основания информатики
Содержание
- Макросы
- Генерация кода
- Синтаксические кавычки
- Пример: JS-подобные объекты
- Пример: разбор текста
- Кодирование Чёрча
- Булева алгебра
- Пары и списки
- Персистентная память
- Числа Чёрча
- Натуральные числа
- Арифметика
- Предикаты сравнения
- Числа со знаком
- Дальнейшие обобщения
Библиография
- Daniel Higginbotham Clojure for the Brave and True (Chapter 8)
- Yehonathan Sharvit Numbers and Arithmetics with functions only
- Yehonathan Sharvit Boolean Algebra
Часть 4. Введение в Prolog
Тем: 3
Тема 11. Факты, правила и вычисления
Содержание
- Факты и правила
- Термы
- Атомы
- Числа
- Структуры
- Факты
- Объявление
- Переменные
- Запросы
- Правила
- Объявление
- Простые
- Конъюнкция
- Дизъюнкция
- Отрицание
- Рекурсия
- Запросы
- Унификация
- Порядок выполнения
- Возвраты и отсечения
- Объявление
- Термы
- Вычисления
- Операторы и функции
- Рекурсивные вычисления
- Мемоизация
- Обратимые вычисления
- Списки
- Синтаксис
- Сопоставление с образцом
- Правила на списках
- Правила высшего порядка
Тема 12. Задачи, унификация и объекты
Содержание
- Задачи
- Задача о расстановке ферзей
- Загадка Эйнштейна
- Унификация и объекты
- Унификация
- Определение
- Наследование
- Мультиметоды
Тема 13. Разбор текста
Содержание
- Термы
- Преобразование в терм
- Обратное преобразование
- Списки символов
- Преобразование в список
- Преобразование списка в атом
- Обратное преобразование
- Грамматики
- Описание грамматики
- Преобразование в строку
- Обратное преобразование