Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AlgStr / Библиотека / ЛЕКЦИИ / PZ03 / Стародубский И.П..doc
Скачиваний:
38
Добавлен:
23.03.2015
Размер:
203.26 Кб
Скачать

Абстракция как инструмент декомпозиции

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

Абстракция подразумевает собой процесс изменения уровня детализации программы. Когда мы абстрагируемся от проблемы, мы предполагаем игнорирование ряда подробностей с тем, чтобы свести задачу к более простой. После этого декомпозиция такой упрощенной задачи становится более простой

Таким образом если декомпозиция позволяет разделить задачи на подзадачи, то абстракция позволяет производить этот процесс обдуманно и обоснованно.

Уже упоминалось, что процесс абстракции подразумевает собой некоторое обобщение (отвлечение от деталей; собственно само слово абстракция переводится именно так - отвлечение). Этот процесс знаком каждому из нас с детства. Когда-то мы научились объединять свою куклу со всеми остальными - дошли до абстракции игрушка; в первом классе от конкретной задачи "3 яблока + 2 груши = ? фруктов" перешли к осознанию более абстрактного выражения "3+2 = ?", а затем и вовсе "X+Y = ?". Абстрактное мышление делает из просто человека человека творящего, а Программисты по определению - люди творческие.

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

тогда процедура обязана производить сортировку и выдавать должный результат. При этом она не должна изменять элементы массива с индексами, большими N-1: этого нет в спецификации. С другой стороны пользователь не должен предполагать, что процедура будет производить сортировку быстро - по той же причине. В обоих случаях пользователь процедуры освобождается от необходимости знать хоть один алгоритм сортировки (хотя это и странно для программиста).

При анализе спецификаций пользователь может опираться на достигнутый абстракцией результат. Следовательно, в том случае, когда результат не может быть достигнут, (например, при решении абстракцией квадратного уравнения) пользователь должен быть проинформирован об этом, а способ информирования длжен быть внесен в спецификацию.

Обобщение

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