- О целях и содержании курса
- О языке программирования Juliа
- О исполнителе "Робот на клетчатом поле со сторонами горизонта"
- Технология проектирования
- Пример решения в плохом стиле
- Пример достаточно хорошо структурированного кода
- Технология проектирования «сверху вниз»
- Отладка программы по технологии «снизу вверх»
- О составлении описаний функций
- Функции и файлы
- Аннотирование аргументов функции
- Подготовка программного окружения для работы с Роботом
- Технология проектирования "сверху вниз"
- Разбор задачи 2
- Декомпозиция задачи на уровне псевдокода
- Программный код главной функции
- Реализация вспомогателных функций
- Запуск и отладка программного кода
- Уточнение понятия алгоритма
- Что такое "правильная программа"
- Языки программирования и трансляция программы в машиный код
- Классификация трансляторов
- Устройство и алгоритм работы компьютера
- Разбор задачи 6
- Декомпозиция задачи и соответствующий псевдокод
- Полученный полный программный код
- Запуск и отладка программного кода
- О самодокументировании библиотечных функций
- Создание библиотечного файла
- Пример получения помощи в REPL по функциям из библиотечного файла
- Статическая и динамическая типизация
- Вывод типа
- Cсылки на объекты
- Автоматическая сборка "мусора"
- Mножественная диспетчеризация
- Глобальные переменные модуля
- Пример программы, использующей глобальную переменную
- Цель инкапсуляции данных и функций в модуль
- Замечание о использовании глобальных переменных
- Рекомендация по отладке модуля
- Локальные переменные функций
- Пример программы, использующей функции с локальными переменными
- Пример не слишком удачного выбора решения с использования глобальных переменных
- Функции с аргументами, передача параметров в функцию "по значению" и "по ссылке"
- Разбор решения задачи 5
- Возможный вариант решения
- Улучшенный вариант решения
- Разбор решения задачи 8
- Первый вариант решения
- Второй вариант решения
- Разбор решения задачи 9
- Использование программами компьютерной памяти
- Простейшие приемы доказательства и контроля правильности программного кода
- Промежуточные утверждения
- Циклы
- Cвойство цикла с предусловием
- Инвариант цикла и метод доказательства правильности цикллического алгоритма
- Пример использования инварианта в доказательстве правильности алгоритма: замаркировать ряд от начала до конца
- Опасность и нежелательность цикла с постусловием
- Пример: алгоритм подсчёта числа перегородок в ряду
- Метод переменной состояния
- Альтернативный способ
- Разбор задачи 11
- Разбор задачи 12
- Разбор задачи 13
- Разбор задачи 14
- Разбор задачи 16
- Обобщенное программирование
- Иерархия типов Julia, конкретные и абстрактные типы
- Пример разработки обобщенной функции
- Принцип аннотирования тпов аргуметов функции
- Создание библиотечного файла roblib.jl
- Пример, когда желание иметь универсальный код приводит к необходимости, некоторые вспомогательные функции распределять по нескольким отдельным файлам
- Ленивые логические операции && и ||
- Разбор задачи 26
- Модульное программирование
- Задача перемещения Робота в стартовый угол и обратно
- Еще раз о задаче 7 с точки зрения модульного программирования
- Вложенные функции
- Элементы функционального программирования
- Функции, как объекты первого класса
- Анонимные функции
- Функции высших порядков
- Замыкания (closure)
- Замыкание, возвращаемое из функции
- Стандартная функция высшего порядка map
- do-синтаксис
- Каррирование
- Операция композиции функций
- Операция направления потока данных на "вход" функции
- Улучшение структуры програмного кода в полученном ранее решение задачи 12 за счет ввынесение за пределы модуля "лишних" функций
- Разбор задачи 31
- Задание на улучшение структуры програмного кода решения задачи 31
Обобщенное программирование в функциональном стиле (продолжение)