рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ

ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ - раздел Программирование, ВЫСОКОУРОВНЕВЫЕ МЕТОДЫ ИНФОРМАТИКИ И ПРОГРАММИРОВАНИЯ   В Программировании Существуют Различные Парадигмы, Представля...

 

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

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

Существующие языки программирования классифицируют по четырём основным группам (парадигмам): процедурные, объектно-ориентированные, функциональные и логические. Кратко рассмотрим особенности каждого подхода.

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

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

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

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

Языки программирования часто оценивают по уровню. Уровень языка показывает, насколько язык близок к естественной для человека записи. Процедурные языки − самого низкого уровня. Функциональные − значительно выше. Логические языки в принципе могут быть самого высокого уровня, но из-за высокой сложности теории, лежащей в их основе, разрабатываются довольно медленно. Широко распространённых в мире языков логической группы довольно мало.

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

 

ОТ ПРОЦЕДУРНОГО ПРОГРАММИРОВАНИЯ

К ОБЪЕКТНОМУ

 

Развитие программирования активно ведется с начала 50-х годов XX века (т.е. уже более 50-ти лет!). На протяжении всех этих лет практика программирования требовала совершенствования технологических приемов и создания на их основе таких средств программирования, которые упростили бы процесс разработки программ, позволяя создавать все более сложные программные системы.

Первые программы были организованы очень просто. Они состояли из собственно программы на машинном языке и обрабатываемых данных. Сложность программ ограничивалась способностью программиста одновременно мысленно отслеживать последовательность выполняемых операций и местонахождение большого количества данных.

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

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

Типичная программа того времени состояла из основной программы, области глобальных данных и набора подпрограмм (в основном библиотечных), выполняющих обработку всех данных или их части (рис. 1а, б).

 

 

А

 

Б

Рис. 1 − Архитектура программы, использующей глобальную область данных: А – структура программы и Б – виды взаимодействия

основной программы и подпрограмм.

 

Слабым местом такой архитектуры было то, что при увеличении количества подпрограмм возрастала вероятность искажения части глобальных данных какой-либо подпрограммой. Например, обычно подпрограмма поиска корней уравнения на заданном интервале по методу деления отрезка пополам меняет величину интервала. Если при выходе из подпрограммы не предусмотреть восстановления первоначального интервала, то в глобальной области окажется неверное значение интервала, полученное при последнем делении отрезка в ходе работы подпрограммы.

Необходимость исключения таких ошибок привела к идее использования в подпрограммах локальных данных (рис. 2).

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

 

 

Рис. 2 − Архитектура программы, использующей подпрограммы с локальными данными

 

Усилиями многих авторов такая технология была создана и получила название «структурное программирование».

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

Были сформулированы основные принципы выполнения разработки:

- принцип нисходящей разработки, рекомендующий на всех этапах вначале определять наиболее общие моменты, а затем поэтапно выполнять детализацию (что позволяет последовательно концентрировать внимание на небольших фрагментах разработки);

- структурное программирование, рекомендующее определенные структуры алгоритмов и стиль программирования (чем нагляднее текст программы, тем меньше вероятность ошибки);

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

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

Метод пошаговой детализации заключается в следующем. Определяется общая структура программы в виде одного из трех вариантов (рис. 3):

- последовательности подзадач (например, ввод данных, преобразование данных, вывод данных),

- альтернативы подзадач (например, добавление записей к файлу или их поиск),

- повторения подзадачи (например, циклически повторяемая обработка данных).

Каждая подзадача, в свою очередь, разбивается на подзадачи с использованием тех же структур; процесс продолжается, пока на очередном уровне не получается подзадача, которая достаточно просто реализуется средствами используемого языка (1–5 управляющих операторов языка).

 

 

Рис.3 − Основные структуры процедурной декомпозиции

 

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

Основная программа:

1 Начать работу.

2 Вывести меню на экран.

3 Ввести команду.

4 Выполнить цикл обработки вводимых команд.

Завершить работу.

 

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

Выполнить цикл обработки вводимых команд:

цикл-пока команда «завершить работу»

Выполнить команду.

Ввести команду

все-цикл.

 

После этого детализируем операцию «Выполнить команду». Выполняем декомпозицию, используя сразу несколько конструкций ветвления.

Выполнить команду:

есликоманда = «открыть книжку»

то Открыть книжку

иначе если команда= «добавить»

то Добавить запись

иначе если команда = «найти»

то Найти запись

все-если

все-если

все-если.

 

На этом шаге можно пока остановиться, так как оставшиеся действия достаточно просты. «Вложив» результаты пошаговой детализации, получим структурное представление алгоритма основной программы объемом не более 20... 30 операторов.

Основная программа:

Начать работу.

Вывести меню на экран.

Ввести команду.

цикл-пока команда ¹ «завершить работу»

если команда= «открыть книжку»

то Открыть книжку

иначе если команда- «добавить»

то Добавить запись

иначе если команда= «найти»

то Найти запись

все-если

все-если

все-если

Ввести команду

все-цикл

Завершить работу.

 

Окончательно, на первом уровне выделены подзадачи: «Вывести меню», «Ввести команду», «Открыть книжку», «Добавить запись» и «Найти запись». На следующем уровне определяются подзадачи задач второго уровня, например:

Открытькнижку:

Ввести имя файла

если существует файл Имя_книжки

то Открыть файл

иначе Вывести сообщение об ошибке

все-если

 

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

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

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

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

 

Рис. 4 −Алгоритмическая декомпозиция системы

«Записная книжка»

 

Поддержка принципов структурного программирования была заложена в основу так называемых процедурных языков программирования. Как правило, они включали основные «структурные» операторы управления, поддерживали вложение подпрограмм, локализацию и ограничение области «видимости» данных. Среди наиболее известных языков этой группы стоит назвать PL/1, ALGOL-68, Pascal, С.

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

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

Эту технологию поддерживают современные версии языков Pascal и С (C++), языки Ада и Modula.

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

 

Рис. 5 − Архитектура программы, состоящей из модулей

 

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

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

– Конец работы –

Эта тема принадлежит разделу:

ВЫСОКОУРОВНЕВЫЕ МЕТОДЫ ИНФОРМАТИКИ И ПРОГРАММИРОВАНИЯ

На сайте allrefs.net читайте: "ВЫСОКОУРОВНЕВЫЕ МЕТОДЫ ИНФОРМАТИКИ И ПРОГРАММИРОВАНИЯ"...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

ВЫРАЖЕНИЯ
  Выражения состоят из операторов и операндов. Большинство операторов в Конструкторе являются бинарными, то есть содержат два операнда. Остальные операторы являются унарными и содержа

КОММЕНТАРИИ
  Часто бывает полезно вставлять в программу текст, который предназначается в качестве комментария только для читающего программу человека и игнорируется компилятором в программе. В C

ВЕТВЯЩИЕСЯ АЛГОРИТМЫ
Циклические и рекурсивные алгоритмы. Операторы циклов for, do, while. В процессе программирования часто возникает необходимость повторять многократно выполнять многократно один и тот же фрагмент пр

МАССИВЫ И РАБОТА С ФАЙЛАМИ
Объявления массивов и указателей. Массив представляет собой набор данных одного типа. Формат определения массива следующий: тип_данных имя_массива[размер_массива];  

УКАЗАТЕЛИ
  Указатель является переменной, которая содержит адрес другой переменной или функции. Описание указателя определяет тип данных, на которые ссылается указатель, оно имеет вид:

ОСВОБОЖДЕНИЕ ПАМЯТИ
При компиляции программы память компьютера разбивается на четыре области, содержащие код программы, глобальные данные, стек и динамически распределяемую память ( иногда ее называют heap – куча). He

СТРУКТУРЫ
  В отличие от массива, структура позволяет иметь смешанные атрибуты различных типов данных. Структура создается при помощи ключевого слова struct, за которым следует имя_типа (имя ст

ПЕРЕДАЧА СТРУКТУР В ФУНКЦИИ
В функцию информация о структуре может передаваться как по значению, так и по ссылке. В первом случае в функцию передается копия структуры, что может снизить эффективность программы. При передаче п

ОБЪЕДИНЕНИЯ
  Объединения – еще один тип данных, которые можно использовать различным образом. К примеру, некоторые данные в одном случае могут рассматриваться как целые, а в другом – как числа с

ИНКАПСУЛЯЦИЯ ИЛИ СКРЫТИЕ ДАННЫХ
  Понятие инкапсуляция означает, что функции элементы и структуры данных, определяющие некоторые свойства данного класса, рассматриваются в качестве единого целого. Это подразумевает

СКРЫТИЕ ДАННЫХ В ПОТОМКАХ
  При порождении потомка класса у вас есть выбор в определении типа элементов. По умолчанию элементы базового класса автоматически получают приватный тип, если только вы не захотите и

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ
В первой главе был дан краткий экскурс в основы программирования на языке С++. Далее будет рассмотрено детальное описание объектно-ориентированных свойств языка. ООП появилось в результате

ОСНОВНЫЕ ПРИНЦИПЫ И ЭТАПЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ
  В теории программирования ООП определяется технология создания сложного программного обеспечения, которая основана на представлении программы в виде совокупности объектов, каждый из

ПРОГРАММИРОВАНИЯ
Язык считается объектно-ориентированным, если в нем реализованы первые четыре из рассмотренных выше семи принципов. Кроме этого, в теории программирования принято различать объектно-ориентированные

ИСПОЛЬЗОВАНИЕМ ООП
  Процесс разработки программного обеспечения с использованием ООП включает четыре этапа: анализ; проектирование; эволюция; модификация.

ОБЪЕКТНАЯ ДЕКОМПОЗИЦИЯ
  Как уже упоминалось выше, при использовании технологии ООП решение представляется в виде результата взаимодействия отдельных функциональных элементов некоторой системы, имитирующей

ОБЪЕКТЫ И СООБЩЕНИЯ
  В предыдущем разделе было показано, что под объектом применительно к ООП понимается отдельно реализуемая часть предметной области задачи. Разрабатываемая программа, таким образом, с

Конец описания.
  Создавая объекты типа Окно, инициализируя их в соответствии с условием и посылая им сообщение «Нарисовать окно», получим разные окна на экране, причем параметры этих окон будут хран

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

НАСЛЕДОВАНИЕ
В ООП существует возможность конструирования новых более сложных классов из уже имеющихся посредством добавления полей и определения новых методов (принцип иерархичности). При этом исходный класс,

Конец описания.
  Класс Окно_меняющее_цвет содержит все поля родительского класса и все его методы. Дополнительно объекты типа Окно_меняющее_цвет могут менять цвет окна на указанный в сообщении «Изме

ПОЛИМОРФИЗМ
  Простой полиморфизм. При создании иерархии классов может обнаружиться, что некоторые свойства объектов, сохраняя название, изменяются по сути. Для реализации таких иерархий

СОЗДАНИЕ ПОЛИМОРФНЫХ ОБЪЕКТОВ
  Полиморфными объектами или полиморфными переменными называются переменные, которым в процессе выполнения программы может быть присвоено значение, тип которого отличается от типа пер

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

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

НАПОЛНЕНИЕ
  Включение объектов в некоторый класс можно реализовать и с использованием указателей на эти объекты. В отличие от объектного поля, которое включает в класс точно указанное количеств

ТЕХНОЛОГИЯ ООП ПРОГРАММИРОВАНИЯ
  В соответствии с обычным значением слова «технология» под технологией программирования будем понимать совокупность производственных процессов, приводящую к созданию требуемог

ПРОГРАММНЫХ СРЕДСТВ
Окружающий нас мир состоит из объектов и отношений между ними. Согласно данным словаря В. Даля объект (предмет) - это все, что представляется чувствам (объект вещественный) или уму (объект умственн

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

МЕТОДЫ КОНТРОЛЯ КАЧЕСТВА
  Как контролировать качество системы? Как точно узнать, что программа делает именно то, что нужно, и ничего другого? Как определить, что она достаточно надежна, переносима, удобна в

ОШИБКИ В ПО
  Ошибками в ПО, вообще говоря, являются все возможные несоответствия между демонстрируемыми характеристиками его качества и предписанными требованиями и, иногда, ожиданиями по

К главе 1
  1.1 Какие типы данных поддерживает С++? 1.2 Из каких компонент состоит выражение С++? 1.3 Какие виды арифметических операторов вы знаете?

К главе 2
  2.1 Какие парадигмы программирования вы знаете? 2.2 Поясните архитектуру процедурного программирования. 2.3 Поясните архитектуру модульного програ

К главе 3
  3.1 Что такое программная инженерия? 3.2 Что такое программное средство (ПС)? 3.3 Что такое ошибка в ПС? 3.4 Что такое надежность

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги