Файл: История и развитие методологии объектно-ориентированного программирования. Сферы применения (Исторические аспекты развития языков программирования).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 29.02.2024

Просмотров: 79

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

1. Исторические аспекты развития языков программирования

1.1. История развития представлений о программировании и формирования объектной модели

1.2. Краткая история методологий программирования

Методология машинного кодирования

Методология ассемблирования

Методология процедурного программирования

Методология логического программирования

Методология функционального программирования

Методология структурного программирования

Методология объектно-ориентированного программирования

2. Развитие объектно-ориентированной методологии программирования

2.1. Концептуальная база объектно-ориентированной методологии

2.2. Понятие объектно-ориентированного программирования

2.3. Виды объектно-ориентированных языков программирования

Достоинства методологии объектно-ориентированного программирования

Недостатки методологии объектно-ориентированного программирования

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

Для разрешения данных противоречий использовались принципы объединения, вынесения, предварительного действия, что послужило толчком к возникновению новых методологий программирования – процедурной, логической и функциональной. [6, 16, 18]

Методология процедурного программирования

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

Возник новый механизм написания программного кода – замена машинного кода императивом.

Процедурное программирование (рис. 9) представляет программирование на императивном языке, при котором последовательно выполняемые операторы можно консолидировать в более крупные целостные единицы – подпрограммы.

Рис. 9. Методология процедурного программирования

Императивный язык программирования представляет собой язык, описывающий процесс вычисления в виде инструкций, которые изменяют состояние программы. Императивная программа – это последовательность команд для компьютера. [15]

Еще одним нововведением явилось использование в программном коде сложных задач императивов – ассоциативных слов(input, print, next и т.п.). В связи с этим возникли новые противоречия:

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

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

Методология логического программирования

Выявленные ранее противоречия устраняются за счет введения следующих принципов:

  • вынесения: произошел отказ от управляющих операторов и операторов присваивания;
  • предварительного действия: программа стала представляться в виде высказываний в символьной логике.

В результате возникли новые механизмы логической методологии программирования: программное вычисление предикатов и автоматическое доказательство теорем. Логическое программирование основано на теории и аппарате математической логики с использованием математических принципов (рис. 10). [10]

Рис. 10. Методология логического программирования

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

Указанное противоречие удалось разрешить в связи с эволюцией методологий и возникновением объектно-ориентированной методологии программирования. [6, 15, 16]

Методология функционального программирования

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

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

При функциональном программировании процесс вычисления понимается как вычисление значений функций в математическом толковании (рис. 11). [6]

Рис. 11. Методология функционального программирования

Функциональное программирование предполагает обходиться вычислением результатов функций от исходных данных и результатов других функций, и не предполагает явного хранения состояния программы. Соответственно, не предполагает оно и изменяемость этого состояния. [18]

Функциональный язык не подразумевает сравнений в условиях, так как в таком языке отсутствует понятие переменной и понятие присваивания.

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


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

Методология структурного программирования

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

Возник новый механизм структурного программирования – представления программного кода в виде иерархической структуры блоков с помощью логических операторов (рис. 12). [6, 16]

Следование принципам структурного программирования сделало тексты программ более читабельными. Серьёзно облегчилось понимание программы не только ее автором, но и другими программистами. Отказ от безусловного перехода позволил повысить структурированность программного кода. [5]

Рис. 12. Методология структурного программирования

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

Данное противоречие удалось разрешить только с возникновением объектно-ориентированной методологии. [6, 16, 18]

Методология объектно-ориентированного программирования

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

  • принцип местного качества позволили перейти от однородной структуры кода к неоднородной, для чего объединили однородные части кода;
  • принцип объединения соединил абстрактные типы данных в классы, а экземпляры классов в объекты;
  • принцип универсальности сделал возможным использование одинаковых функций для разных объектов за счет наследования свойств одного класса у другого;
  • принцип «матрешки» позволили ввести понятия родительского и наследного классов, при этом наследный класс стал динамически связан с родительским, свойства класса-родителя стали переходить и на класс-наследник. [2, 6, 8]

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

Объектно-ориентированное программирование – это методология программирования, в которой основными концепциями являются понятия объектов и классов (рис. 13).

Рис. 13. Методология объектно-ориентированного программирования

Отказ от использования однотипных конструкций структурных языков привел к введению визуально легких конструкций. Например, операторы { } заменили аналогичными операторами начала и конца функции begin и end, синтаксис условных конструкций сократился до использования лишь if (условие) и else, наконец, стало возможным записывать условие одной строкой, не нарушая при этом логики программы. Как следствие, получили более высокую организацию кода.

Таким образом, место объектно-ориентированной парадигмы в системе языков программирования показано на рис. 14. [2, 6, 8]

Рис. 14. Эволюционная карта парадигм программирования

Вывод по главе 1

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

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

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

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


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

2. Развитие объектно-ориентированной методологии
программирования

2.1. Концептуальная база объектно-ориентированной методологии

Любая методология программирования имеет под собой концептуальную базу и требует определенного способа восприятия решаемой задачи. Для объектно-ориентированной методологии концептуальной базой является объектная модель, которая опирается на четыре основных принципах: абстрагирование, инкапсуляция, полиморфизм и наследование. [3]

Основные принципы объектно-ориентированного подхода:

  1. Абстрагирование предполагает выделение существенных характеристик некоторого объекта, которые отличают его от других видов объектов. Абстрагирование фокусирует внимание на внешнем представлении объекта и тем самым позволяет разделить существенные особенности поведения от их реализации. Абельсон и Суссман определили такое отделение поведения объекта от его реализации как принцип минимальных обязательств, согласно которому интерфейс объекта должен обеспечивать только основные аспекты его поведения и больше ничего. Наряду с этим выделяют еще один дополнительный принцип наименьшего удивления, заключающийся в том, что абстракция должна полностью описывать поведение объекта и не порождать побочные эффекты, выходящие за пределы абстракции. [2, 8, 9]
  2. Инкапсуляция заключается в отделении друг от друга элементов объекта, которые определяют его строение и поведение. С помощью инкапсуляции можно изолировать контрактные обязательства абстракции от их реализации. Абстрагирование и инкапсуляция дополняют друг друга. Абстракция концентрирует внимание на наблюдаемом поведении объекта, а инкапсуляция – на реализации, которая обеспечивает заданное поведение объекта. Обычно, инкапсуляция реализуется за счет сокрытия информации о всех несущественных деталях объекта. Как правило, скрываются структура объекта и реализация его методов. [2, 9]
  3. Полиморфизм заключается в обозначении различных действий одним именем и способности объекта отвечать на обращенный к нему запрос в соответствии со своим типом. Полиморфизм позволяет избежать использования операторов выбора, при этом связь метода и имени определяется только на стадии выполнения программ. [2, 13]
  4. Наследование позволяет определять новые типы данных, используя уже существующие, при этом данные и функции существующих классов становятся членами наследуемых классов. [2, 9]