Файл: История и развитие методологии объектно-ориентированного программирования. Сферы применения (Анализ предметной области).pdf
Добавлен: 31.03.2023
Просмотров: 90
Скачиваний: 1
- императивная парадигма наиболее близко напоминает собственно машинный код, поэтому программист гораздо ближе к “железу”;
- из-за такой близости императивная парадигма была единственной, достаточно эффективной для широкого использования до недавнего времени.
Преимущества императивного подхода:
- эффективность;
- близость к «железу»;
- популярность;
- знаком программистам.
Недостатки императивного подхода:
- семантика программы может быть сложной для понимания или доказательства, поскольку ссылочная прозрачность не выполняется (из-за побочных эффектов);
- побочные эффекты также затрудняют отладку;
- абстракция более ограничена, чем в некоторых других парадигмах.
Логическая Парадигма применяет декларативный подход к решению проблем. Логическая парадигма программирования предусматривает использование математической логики для разработки программ. Проводятся различные логические утверждения о ситуации, устанавливаются все известные факты. Затем выполняются запросы. Роль компьютера — это сохранение данных и логический вывод.
Логическая программа разделена на три раздела:
- ряд определений/деклараций, определяющих проблемную область;
- заявления соответствующих фактов;
- постановка целей в форме запроса.
Возвращается любое выводимое решение для запроса. Определения и декларации строятся целиком из отношений. т.е. X является членом Y или X находится внутри между a и b, и т. д. [6, 10]
Преимущества логико-ориентированного программирования многообразны:
- система решает проблему, поэтому само программирование сводятся к минимуму;
- доказательство действительности разработанных на нём программ является простым.
В целом, классификация языков показана на рисунке 1.
Рисунок 1 — Классификация языков программирования
Функциональная парадигма программирования рассматривает все подпрограммы, как функции в математическом смысле, неформально, они принимают в качестве аргументов и возвращают единственное решение. Возвращенное решение полностью основано на вводе, а время, когда функция вызывается, не имеет никакого отношения. Поэтому вычислительная модель является одним из функций приложения и сокращения.
Функциональные языки создаются на основе функциональной парадигмы. Такие языки допускают функциональные решения проблем, позволяя программисту рассматривать функции как объекты первого класса (их можно рассматривать как данные, которые, как предполагается, имеют значение того, что они возвращают, поэтому они могут быть переданы другим функциям в качестве аргументов или возвращены от функций). [15]
Имеются следующие преимущества функционального программирования:
- Высокий уровень абстракции, особенно когда используются чистые функции, которые исключают многие нюансы программирования и, таким образом, устраняют возможность совершения многих классов ошибок;
- Отсутствие зависимости от операций присваивания. Эта независимость в отношении оценки делает функционально-ориентированные языки хорошими кандидатами для программирования параллельных компьютерных систем;
- Отсутствие операций присваивания делает функционально-ориентированные программы гораздо более пригодными для математического доказательства и анализа, чем настольные программы, поскольку функциональные программы обладают ссылочной прозрачностью. [12, 20]
К недостаткам можно отнести следующие:
- Возможно, менее эффективно.
- Проблемы, связанные с множеством переменных или много последовательной деятельности, иногда легче обрабатывать императивно или с объектно-ориентированным подходом.
Процедурное программирование — есть отражение фон Неймановской архитектуры компьютера. Программа, написанная на процедурном языке, представляет собой последовательность команд, определяющих алгоритм решения задачи. Основная идея процедурного программирования - использование памяти для хранения данных. Основная команда- присвоение, с помощью которой определяется и меняется память компьютера. Программа производит преобразование содержимого памяти, изменяя его от исходного состояния к результирующему.
Процедурное программирование — это парадигма программирования, полученная из структурированного программирования, основанная на концепции вызова процедуры. Процедуры, также известные как подпрограммы или функции, просто содержат ряд вычислительных шагов, которые должны быть выполнены.
Процедурное программирование — есть отражение фон Неймановской архитектуры компьютера. Программа, написанная на процедурном языке, представляет собой последовательность команд, определяющих алгоритм решения задачи. [5, 9]
Модульность обычно желательна, особенно в крупных сложных программах. Входы обычно указываются синтаксически в форме аргументов, а выходы передаются как возвращаемые значения.
Область видимости — еще один метод, который помогает сохранять процедуры модульными. Это не позволяет процедуре получить доступ к переменным других процедур (и наоборот), включая предыдущие экземпляры, без явного разрешения.
Менее модульные процедуры, часто используемые в небольших или быстро написанных программах, имеют тенденцию взаимодействовать с большим количеством переменных в среде выполнения, которые могут также изменить другие процедуры.
Из-за способности указывать простой интерфейс, быть автономным и повторно использоваться, процедуры являются удобным средством для создания фрагментов кода, написанных разными людьми или различными группами, в том числе через библиотеки программирования.
Процедурное программирование, которое порой упоминается как встроенное программирование, требует более глубокого подхода к программированию. Объектно-ориентированное программирование использует классы и объекты, процедурное программирование принимает приложения, решая проблемы с верхней части кода к нижней. [14]
Это происходит, когда программа запускается с проблемой, а затем разбивает эту проблему на более мелкие суб-проблемы или подпроцедуры. Эти подпроцедуры непрерывно разрушаются в процессе, называемом функциональной декомпозицией, до тех пор, пока подпроцедура не будет достаточно простой, чтобы ее можно было решить.
Проблема, очевидная в процедурном программировании, заключается в том, что, если редактирование требуется программе, разработчик должен отредактировать каждую строку кода. Например, если в начале программы переменная была установлена равной значению 1. Если другие подпроцедуры программы полагаются на эту переменную равным 1 для правильной работы, их также необходимо будет отредактировать. Поскольку для кода может потребоваться все больше изменений, становится все труднее находить и редактировать все связанные элементы в программе.
В этой главе были рассмотрены основные парадигмы программирования и изучены вопросы появления и развития программирования.
2. Методология объектно-ориентированного программирования
2.1 Понятие «объектно-ориентированное программирование»
Объектно-ориентированное программирование (ООП) — это модель языка программирования, организованная вокруг объектов, а не «действий» и данных, а не логики. Исторически программа рассматривалась как логическая процедура, которая принимает входные данные, обрабатывает их и создает выходные данные.
Задача программирования заключалась в том, как написать логику, а не как определить данные. Объектно-ориентированное программирование считает, что нас действительно волнуют объекты, которыми мы хотим манипулировать, а не логика, необходимая для их манипулирования. Примеры объектов варьируются от людей (описываемых по имени, адресу и т. д.), до зданий и этажей (свойства которых можно описать и управлять ими), до маленьких виджетов на рабочем столе компьютера (таких как кнопки и полосы прокрутки). [13, 19]
Первым шагом в ООП является определение всех объектов, которыми программист хочет манипулировать, и того, как они связаны друг с другом. Этот подход часто называют моделированием данных. Как только объект идентифицирован, он обобщается как класс объектов, который определяет тип данных, которые он содержит, и любые логические последовательности, которые могут им манипулировать. Каждая отдельная логическая последовательность называется методом. Объекты взаимодействуют с четко определенными интерфейсами, называемыми сообщениями.
Концепции и правила, используемые в объектно-ориентированном программировании, обеспечивают следующие важные преимущества:
- Концепция класса данных позволяет определять подклассы объектов данных, которые разделяют некоторые или все характеристики основного класса. Это свойство ООП, называемое наследованием, требует более тщательного анализа данных, сокращает время разработки и обеспечивает более точное кодирование.
- Поскольку класс определяет только те данные, с которыми он должен иметь дело, при запуске экземпляра этого класса (объекта) код не сможет случайно получить доступ к другим программным данным. Эта характеристика сокрытия данных обеспечивает большую безопасность системы и предотвращает непреднамеренное повреждение данных.
- Определение класса может использоваться повторно не только программой, для которой он изначально создан, но также и другими объектно-ориентированными программами (и по этой причине может быть более легко распространено для использования в сетях).
- Концепция классов данных позволяет программисту создавать любой новый тип данных, который еще не определен в самом языке.
Основа для ООП началась в начале 1960-х годов. Прорыв, связанный с экземплярами и объектами, был достигнут в MIT с помощью PDP-1, и первым языком программирования, который использовал объекты, был Simula 67. Он был разработан с целью создания симуляций и был разработан Кристеном Найгаардом и Оле-Йоханом Далем в Норвегия. [18]
Simula, как уже было сказано выше, была первым объектно-ориентированным языком программирования. Java, Python, C++, Visual Basic .NET и Ruby являются самыми популярными ООП языками. Язык программирования Java разработан специально для использования в распределенных приложениях в корпоративных сетях и Интернете. Ruby используется во многих веб-приложениях. Curl, Smalltalk, Delphi и Eiffel также являются примерами объектно-ориентированных языков программирования.
Они работали над симуляциями, связанными с взрывающимися кораблями, и поняли, что могут группировать корабли в разные категории. Каждый тип корабля будет иметь свой собственный класс, и класс будет генерировать свое уникальное поведение и данные. Симула был не только ответственным за представление концепции класса, но и за представление экземпляра класса.
Термин «объектно-ориентированное программирование» впервые был использован Xerox PARC в их языке программирования Smalltalk. Термин использовался для обозначения процесса использования объектов в качестве основы для вычислений. Команда Smalltalk была вдохновлена проектом Simula 67, но они разработали Smalltalk так, чтобы он был динамичным. Объекты можно изменять, создавать или удалять, и это отличает его от обычно используемых статических систем. Smalltalk также был первым языком программирования, который представил концепцию наследования. Именно эта особенность позволила Smalltalk превзойти Simula 67 и аналоговые системы программирования. Хотя эти системы были усовершенствованы для своего времени, они не использовали концепцию наследования. [19]
Simula 67 была новаторской системой, которая вдохновила большое количество других языков программирования, и некоторые из них включают Pascal и Lisp. К 1980-м годам объектно-ориентированное программирование стало заметным, и основным фактором в этом является C++. Объектно-ориентированное программирование также было важно для разработки графических пользовательских интерфейсов. Структура Какао, существующая в Mac OS X, является хорошим примером динамического графического интерфейса пользователя, который работает с объектно-ориентированным языком программирования. Эта парадигма программирования также сыграла важную роль в развитии событийного программирования.
Никлаус Вирт и его сотрудники искали такие области, как модульное программирование и абстракция данных, и разработали две системы, которые включали эти элементы. Этими двумя системами являются Оберон и Модула-2. Оберон использовал уникальный подход к классам и объектной ориентации, который сильно отличается от C++ или Smalltalk. Со времени введения ООП большое количество современных языков программирования в настоящее время используют эту концепцию. Некоторые из них это Fortran, BASIC и Pascal. Были некоторые проблемы совместимости, потому что многие программы не были разработаны с учетом подхода ООП. В «объектно-ориентированных» языках программирования, которые были «чистыми», не было многих функций, которые требовались программистам.