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

5. Функциональное программирование.

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

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

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

При этом подходе программист использует для программирования термины логики, с помощью которых он описывает объекты и задает отношения между ними. Примером является язык Пролог (программирование в терминах логики). Идея использовать логику в качестве языка программирования разрабатывалась в начале семидесятых годов Робертом Ковальским из Эдинбурга (теоретические аспекты), Мартен ван Эмденом (экспериментальная демонстрационная система), и Аленом Колмероэ (реализация).

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

7. Параллельное программирование.

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

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

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

ООП в настоящий момент является бурно развивающейся и одной из самых перспективных технологий программирования. Человек привык существовать в мире, который состоит из объектов. Объект – это понятие, которое человек использует интуитивно с самого момента рождения, и, следовательно, попытки перенести работу с объектами в достаточно абстрактную по своей сути область, коей и является программирование, просто «обречены на успех». Приведем основные термины ООП.

Объект– осязаемый или видимый предмет, а так же нечто, воспринимаемое мышлением.

Состояние– характеристики различных статистических свойств объекта, а так же значения этих характеристик.

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

Класс– некоторое множество объектов, обладающих одинаковыми свойствами и поведением, отличающихся друг от друга только значением своих свойств.

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

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

В основе ООП лежат «три кита»:

Инкапсуляция (encapsulation)– свойство объединять внутри одной структуры состояние и поведение, с помощью инкапсуляции данные одного объекта могут быть защищены от других объектов. Такое «сокрытие» информации позволяет объектам спрятать их внутреннее устройство. При этом объект можно использовать, ничего не зная о механизме его работы и ненужных деталях.

Наследование (inheritance)– основанная на иерархии способность классов включать в себя свойства и поведение классов-предков, а так же добавлять к ним свое собственное поведение и свойства. С помощью механизма наследования одни классы могут происходить от других. Дочерний класс способен унаследовать от своего родительского класса все его методы и данные, причем потомок может унаследовать способности и от нескольких родителей.

Полиморфизм (polymorphism)– способность классов «играть роль» своих предков, сохраняя при этом свое собственное поведение. Благодаря полиморфизму имеет место позднее связывание. С помощью полиморфизма происходит присвоение единого имени процедуре, которая передается по иерархии объектов, с выполнением этой процедуры способом, соответствующим каждому объекту в иерархии.

Рассмотрим пример иерархии классов и наследования. Первым уровнем абстракции рассмотрим всех насекомых. Все они обладают определенными свойствами, характерными для всех насекомых вообще. Например, имеют лапки. Значение свойства «количество лапок» может отличаться для различных насекомых, но присутствует оно у всех.

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

Углубляясь еще дальше, разделим насекомых с крыльями еще на три класса – «бабочек», «мотыльков» и «мух». Любой из этих классов имеет все свойства «насекомого с крыльями», и какие-то свои свойства или способы поведения, отличающие его от собратьев, стоящих вместе с ним на одном уровне иерархии.

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

Все современные языки программирования являются объектно-ориентированными, а некоторые из ранних языков дополняются до объектно-ориентированных. Яркими примерами объектно-ориентированных по своей сути языков являются CPP и Java. Практически все программирование под Microsoft Windows связано с использованием классов. Такие технологии, как COM и вытекающая из нее OLE, полностью основаны на использовании классов, инкапсуляции и полиморфизме.

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

7