|
Программирование >> Программирование на языке c++
в процессе выполнения этапов 1-5 накапливается определенный опыт, который дает основание для усовершенствования программы (этап 6). В этом случае дорабатываются или изменяются некоторые алгоритмы и модули. Усовершенствование не должно приводить к повторению цикла разработки с самого начала. После завершения программного продукта он передается пользователям (этап 7). Последующая поддержка программного обеспечения (этап 8) сводится к устранению возможных ошибок, выявленных пользователями на этапе эксплуатации. Другая цель поддержки - постепенное улучшение (развитие и модификация) программного продукта. 1.2. Абстрактные типы данных Концепция абстрактных типов и абстрактных типов данных является ключевой в программировании. Абстракция подразумевает разделение и независимое рассмотрение интерфейса и реализации (см. § 1.1). Модульность и абстракция дополняют друг друга. Модульность предполагает скрытие деталей реализации в некотором черном ящике. Абстракция позволяет специфицировать каждый модуль перед тем, как будет написана соответствующая программа. Рассмотрим пример. Все мы смотрим телевизионные программы. Назовем телевизор модулем или объектом. Этот объект имеет интерфейс с пользователем, т. е. средства управления (совокупность кнопок), воспроизведения изображения и звука. Чем совершеннее интерфейс, тем удобнее телевизор в использовании. Мы переключаем программы, нажимая определенные кнопки, и при этом не задумываемся о физических процессах, происходящих в телевизоре. Об этом знают специалисты. Когда мы выбираем телевизор, нас интересуют его цена и эксплуатационные параметры, т. е. качество изображения, звука и т. п. Однако нас не интересует то, что находится внутри. Другими словами, мы возвращаемся к свойствам объекта (модуля), какими являются интерфейс и реализация. Основная цель абстракции в программировании как раз и заключается в отделении интерфейса от реализации. Абстрактные типы данных Основная цель абстракции в программировании как раз и заключается в отделении интерфейса от реализации. Вернемся к нашему примеру. Предположим, некоторый субъект уверен, что хорошо знает устройство телевизора. Он снимает крышку и начинает усовершенствовать его. Хотя иногда это и приводит к определенным промежуточным (локальным) успехам, окончательный результат почти всегда отрицательный. Поэтому подобные действия надо запрещать. В программировании это поддерживается механизмами запрета доступа или скрытия внутренних компонентов. Каждому объекту (модулю) предоставлено право самому распоряжаться своим имуществом , т. е. данными функциями и операциями. Игнорирование этого принципа нарушает стабильность системы и часто приводит к ее полному разрушению. Принцип абстракции обязывает использовать механизмы скрытия, которые предотвращают умышленное или случайное изменение внутренних компонентов. Различают процедурную абстракцию (procedural abstraction) и абстракцию данных (data abstraction). Процедурная абстракция требует раздельного рассмотрения цели процедуры и внутренней реализации процедуры. Под процедурой здесь понимается некоторая программная единица, например функция в языках C/C++. Абстракция данных требует раздельного рассмотрения операций над данными и реализации этих операций. Пусть имеется некоторый модуль. В этом случае достаточно знать, какие операции выполняет этот модуль, но нет необходимости знать, какие данные он при этом использует (они скрыты) и как в действительности выполняются эти операции. Таким образом, абстракция позволяет отделить внешнее представление модуля от его внутренней структуры. Если кто-то использует модуль, то его не интересует, что там внутри, его интересует, насколько эффективно можно использовать этот модуль. С другой стороны, разработчик модуля знает, что качество его работы будет оценено только по конечному результату, т. е. насколько модуль является дешевым и эффективным. Абстракция данных предполагает определение и рассмотрение абстрактных типов данных (АТД) [3, с. 104] или, что то же самое, новых типов данных, введенных пользователем [1, с. 18-19]. АТД - ЭТО совокупность данных вместе с множеством операций, которые можно выполнять над этими данными [3, с. 104]. Когда программа должна выполнять операции над данными и эти операции нельзя непосредственно реализовать конструкциями языка программирования, следует построить АТД, в котором тщательно специфицировать все выполняемые операции. Только после этого можно приступать к реализации операций. При этом необходимо установить, какие данные являются внутренними и какие внешними. 1.3. Основные направления в программировании К настоящему времени в программировании сформировалось несколько направлений: ♦- процедурное программирование; модульное программирование; > объектно-ориентированное программирование. В процедурном программировании основное внимание уделяется алгоритму, т. е. некоторой заданной последовательности действий, выполнение которых приводит к получению результата вычислений. Языки программирования, которые поддерживают эту модель, называются процедурными. Главное внимание в них уделяется построению процедур (подпрограмм) и, как следствие, решению следующих вопросов: передача аргументов в процедуры; получение вычисленных значений из процедур; внутренняя организация процедур и т. п. Первым процедурным языком был ФОРТРАН. Далее появилось целое поколение языков указанного типа: АЛГОЛ 60, АЛГОЛ 68, ПАСКАЛЬ, С и др. В модульном программировании основные акценты переносятся на построение модулей. При этом необходимо определить модули, которые будут использоваться, и разделить программу на модули так, чтобы ее данные были скрыты в этих модулях. В действительности указанная модель переносит основные акценты на организацию данных (а не на алгоритм, по которому обрабатываются эти данные). Модулем (в модульном программировании) называется множество
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |