Абстракция — основной способ борьбы со сложностью в программировании. Она позволяет уйти от деталей реализации и сосредоточиться на главном. Хороший пример абстракции — функция сортировки списка. Не важно, как она устроена, важно, что она делает то, что нам нужно.
Другой пример — функции высших порядков, такие как map
и filter
, позволяют обрабатывать коллекции без знания их
внутреннего устройства. Причём коллекция не обязательно должна быть плоской: подобные функции можно написать для
сколь угодно сложных структур, например, для деревьев. Абстракция с помощью функций помогает сосредоточиться на самой
обработке, а не на процессе обхода данных.
С другой стороны, сами данные нередко имеют сложную структуру. Представление пользователя в нетривиальной системе может потребовать описания десятков и сотен различных параметров и данных, связанных с ними. В этой ситуации полезно спрятать сложную структуру за набором функций. Такие функции скрывают внутреннюю сложность и упрощают поддержку кода. Подобное сокрытие деталей реализации и называется абстракция с помощью данных.
В данном курсе мы познакомимся с некоторыми базовыми принципами проектирования программ. С тем, как моделировать и представлять в программе объекты реального (и воображаемого) мира. Примером для проектирования послужит создание библиотеки для работы с графическими примитивами, такими как точки, отрезки, фигуры. Эта библиотека, с одной стороны, достаточно понятна (в том числе визуально) для всех, с другой — очень просто представляется в коде.
Основные темы этого курса: