Парадигмы программирования

Подходы к созданию алгоритмов и программ существенно изменялись в ходе эволюции компьютеров. Набор характерных идей и методов (или принципов) программирования получил название парадигмы программирования. Между парадигмами и языками программирования высокого уровня прямая связь: различные языки поддерживают различные парадигмы. Рассмотрим некоторые из них с указанием приблизительного периода их становления.

Операционный подход (1945-1965 годы). Данный подход характерен для ЭВМ 1-го и 2-го поколений. Первые программы писались на машинном языке, затем появились языки типа ассемблера и первые языки высокого уровня типа Fortran, Basic, Cobol. Решаемые задачи были в основном связаны с математическими вычислениями.

Технология программирования при операционном подходе:

- программа состоит их мелких деталей;

- имеется набор простых операций;

- программы имеют простую структуру.

Такой подход в программировании характерен для языков типа Fortran, Basic, Cobol, Lisp.

Структурный подход (1965 – 1985 годы). С появлением массовых ЭВМ 3-го поколения устаревшая технология программирования оказалась основным фактором, сдерживающим развитие и распространение компьютерных технологий, что подтолкнуло ведущие в этой сфере деятельности фирмы, в первую очередь IBM, к разработке новых методологий программирования. Появившийся в начале 1970-х годов новый подход к разработке алгоритмов получил название структурного.

Пионером структурного программирования считается Э.Дрейк, который в 1965г. предложил, что оператор GOTO (оператор перехода на другой участок программы) может быть исключен из языков программирования.

Характерные черты структурного программирования:

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

Модульность программирования. Относительно независимые фрагменты задачи оформляются как модули. Использование модулей имеет следующие преимущества:

- возможность создания программы несколькими программистами;

- простота проектирования и последующих модификаций программы;

- упрощение отладки программы - поиска и устранения в ней ошибок;

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

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

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

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

Само структурное программирование, наиболее отчетливо выражено в языках Pascal, Algol-68, C, Ada.

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

Объектно-ориентированное программирование базируется на трех основных понятиях:

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

Наследование – это возможность использования уже определенных объектов для построения иерархии объектов производных от них. Каждый из «наследников» наследует описание данных «прародителя» и доступ к методам их обработки.

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

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

Объектно-ориентированное программирование может заметно упростить написание сложных программ, придать им гибкость. Одним из его главных преимуществ можно назвать возможность расширять область их применения, не переделывая программу, а лишь добавляя в нее новые уровни иерархии.

Первым языком с элементами объектно-ориентированного программирования был язык Симула-67. В Турбо-Паскале, начиная с версии 5.5, появились средства объектно-ориентированного программирования. Итогом развития Турбо-Паскаля в этом направлении стало создание фирмой Borland системы программирования Delphi.

Декларативный подход (с 1970 по настоящее время). Декларативный подход в разработке компьютерных программ появился в начале 70-х годов. Его появление связано с первыми работами в области создания искусственного интеллекта (экспертных систем, программ-переводчиков, интеллектуальных игр и пр.). Базируется на логической модели знаний.

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: