Опубликован: 05.11.2013 | Доступ: свободный | Студентов: 542 / 46 | Длительность: 11:51:00
Лекция 6:

Абстрактный тип данных

5.6. Уровни абстракции

Абстракция может рассматриваться на разных уровнях. Высшие уровни абстракции - это представление пользователя о решении задачи, низшие уровни абстракции - это возможности языка программирования и его реализации для конкретного типа аппаратуры.

Рассмотрим в качестве примера абстракции автомобиль. При про-ектировании автомобиль может рассматриваться на более детальном уровне, т.е. как кузов, шасси, двигатель, салон. Проектировщики шасси будут оперировать терминами "передняя подвеска", "задняя подвеска", "коробка передач", "карданный вал" и т.п. Хорошей абстракцией может быть подвеска автомобиля. Для разработчика шасси она определяется типом, набором рычагов, пружинами, амортизаторами, сайлент-блоками, стабилизаторами и, конечно, их взаимным расположением. В этом случае полезной операцией будет расчет изменения положения и нагрузок при воздействии внешних сил. Такая абстракция полезна лишь при разработке самой подвески.

На более детальном уровне всю конструкцию подвески можно представить в виде набора рычагов с заданной длиной, коэффициентом жесткости и коэффициентом растяжения. Эта абстракция может использоваться для расчета любой механической конструкции, не обязательно связанной с автомобилем. Но даже это еще не уровень языка программирования.

Приведенный пример проектирования сверху вниз может применяться как при проектировании структур данных, так и при проектировании алгоритма управления. Проектирование архитектуры программы начинается с верхних уровней абстракции и постепенно переходит к нижним уровням.

Не все абстракции стоит всегда реализовывать на всех уровнях. Много компонент нижних уровней абстракции зачастую уже доступны в качестве библиотечных модулей. Использование готовых компонент экономит ресурсы для решения других задач.

Внимание!

Абстрактный тип данных должен проектироваться абстрактно, т.е. безотносительно к реализации. Только после того, как абстракция отражена в виде h-файла, можно приступать к самой реализации. Зачастую реализация будет накладывать ограничения на абстракцию. Полностью избавиться от учета особенностей реализации не всегда удается, но к этому надо стремиться. Например, использование динамической памяти может снимать ограничения на размеры, но обусловливать дополнительные проблемы при создании переменных.

Вопросы и задачи для самостоятельного решения

  • Как используются абстрактные типы данных?
  • Что необходимо задать, чтобы полностью определить абстрактный тип данных?
  • Какие основные классы операций определяют для абстрактного типа данных.
  • Определите набор операций и структуру данных для абстрактного типа данных "дек".
  • Определите набор операций и структуру данных для абстрактного типа данных "линейный список".
  • Определите набор операций и структуру данных для абстрактного типа данных "множество печатных символов".
  • Определите набор операций и структуру данных для абстрактного типа данных "разряженный вектор произвольной длины".
  • Напишите спецификацию на модуль, реализующий абстрактный тип данных: "бинарное дерево".