Сложная система как структура последовательных уровней.
Наша библиотека для работы с HTML-тегами — пример проекта с использованием так называемого уровневого проектирования.
Уровневое проектирование предполагает такой подход, когда сложной системе нужно придавать структуру при помощи последовательности уровней, которые описываются последовательностью языков. Каждый из уровней строится путём комбинации частей, которые на этом уровне рассматриваются как элементарные. Части, которые строятся на каждом уровне, работают как элементарные на следующем уровне. Язык, который используется на каждом уровне такого проекта, включает примитивы, средства комбинирования, абстракции и соответствующие этому уровню подробности. В нашем случае это:
functions
cons, car, cdr
l, head, tail, map, filter, reduce, ...
node, append, make, children, hasChildren
Уровневое проектирование пронизывает всю технику построения сложных систем. Например, при проектировании компьютеров сочетаются резисторы и транзисторы, из них строятся им подобные элементы, служащие основой языка цифровых схем. Из этих элементов строятся процессоры, шины и системы памяти, которые в свою очередь служат элементами построения компьютеров при помощи языков, подходящих для описания компьютерной архитектуры. Компьютеры дают распределённые системы, которые описываются при помощи языков описания сетевых взаимодействий и т.д.
Хороший пример уровневого проектирования — Сетевая модель OSI. Она разбивает весь процесс взаимодействия по сети на 7 подуровней. Сейчас мы не будем вдаваться в подробности. Вот их краткое описание (уровни принято считать снизу вверх):
В реальной жизни часть уровней отсутствует, но по факту это некая спецификация, которая говорит о том, что они из себя представляют и как их правильно разбивать. Эта модель была придумана достаточно давно. И она оказалась настолько успешной, удачной и правильной с точки зрения реализации, что сейчас появляются новые технологии, новые способы передачи данных, более эффективные протоколы, более эффективные механизмы передачи, но это не заставляет нас переделывать каждый раз полностью работу интернета, взаимодействие между компьютерами или любую программу, которая работает по сети. Это очень здорово! Без этого мы просто не могли бы двигаться с такой скоростью, с которой мы можем двигаться сейчас.
Уровневое проектирование обеспечивает устойчивость. По сути происходит локализация изменений. Если у вас что-то ломается, что-то нужно заменить, что-то работает не так, то вы просто вносите изменения только на соответствующем уровне, но предоставляя такой же интерфейс для уровней выше. То, что мы говорили про OSI-модель, это хороший пример, потому что в какой-то момент времени мы работаем с Ethernet, в какой-то момент у нас используется Wi-Fi. После этого выходит новый стандарт или появляется оптоволокно. При этом все уровни, которые выше базового физического уровня, продолжают работать точно также и не зависят от того, что находится на уровне ниже.
Вам ответят команда поддержки Хекслета или другие студенты
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт