Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
posobie1.doc
Скачиваний:
13
Добавлен:
01.05.2019
Размер:
457.22 Кб
Скачать
    1. Функциональное программирование

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

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

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

Первый функциональный язык программирования (Лисп) был разработан американским ученым Дж. Маккарти (J. McCarthy) в 1958-1961 гг. на основе алгебры списочных структур, лямбда-исчисления и теории рекурсивных функций. К настоящему времени созданы такие функциональные языки программирования как Scheme, Рефал, Haskell, Sisal.

    1. Логическое программирование

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

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

1.5. Объектно-ориентированное программирование

Объектно-ориентированная технология разработки программ состоит из объектно-ориентированного анализа, объектно-ориентированного проектирования и объектно-ориентированного программирования.

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

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

Объекты обладают поведением, состоянием, свойствами, которые в программе реализуются в виде подпрограмм (функций). Таким образом, объектно-ориентированная технология включает в себя возможности структурного подхода, но объектно-ориентированное проектирование в большей степени реализует модель реального мира и соответствует естественной логике человеческого мышления. По мнению автора С++, Бьерна Страуструпа[2], различие между процедурным и объектно-ориентированным стилями программирования заключается примерно в следующем: программа на процедурном языке отражает "способ мышления" процессора, а на объектно-ориентированном - способ мышления программиста. Отвечая требованиям современного программирования, объектно-ориентированный стиль программирования делает акцент на разработке новых типов данных, наиболее полно соответствующих концепциям выбранной области знаний и задачам приложения.

Сравнивая объектно-ориентированный и процедурный стиль программирования (подробно остановимся на этих двух технологиях, поскольку для остальных характерна некоторая функциональная ограниченность, не позволяющая использовать их для решения широкого круга задач), необходимо выбрать критерий сравнния. Основной критерий в оценке программных продуктов – сложность[1] , а основными требованиями к методологиям разработки являются: удобство сопровождения, возможность безболезненного наращивания уже существующей программы, способность разработанных программных объектов к повторному использованию. При этом на второй план отступает такое требование, как быстрое проектирование первоначальной версии программы, потому что его воплощение обычно не позволяет соблюсти все остальные условия. Дело в том, что процесс разработки программного обеспечения не заканчивается первой версией. Он сводится к итеративному расширению предыдущих версий, что, в некоторой степени, и помогает решать проблему сложности. В борьбе с проблемами, определяемыми сложностью программ, дальше всех продвинулась объектно-ориентированная технология, которая и получила наибольшее распространение. В настоящее время она успешно развивается по самым разным направлениям, затрагивая как анализ и проектирование программных систем, так и написание самих программ. Последнее определяется как объектно-ориентированное программирование и связано с использованием соответствующих объектно-ориентированных языков. В качестве примера языков, поддерживающих объектно-ориентированный стиль программирования, можно привести С++, Object Pascal, Smalltalk, Ada, Eiffel.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]