Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_по_пяву_4.doc
Скачиваний:
101
Добавлен:
15.03.2015
Размер:
1.29 Mб
Скачать
  1. Функции

    1. Понятие об абстракции и инкапсуляции

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

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

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

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

В языке Си имеется развитый аппарат подпрограмм, которые называются функциями.

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

При использовании функций важно получить ответ на следующие вопросы:

  1. Какова роль функций в программировании?

  2. Какие разновидности функций имеются в языке Си?

  3. Чем отличается понятие функции языка Си от понятия функции, принятого в математике?

  4. В чем состоят преимущества и недостатки применения функций при программировании на языке Си?

  5. Как оценить качество разработанной функции?

  6. Как организованы функции языка Си?

  7. Из каких структурных частей состоит функция языка Си?

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