Файл: «История и развитие методологии объектно-ориентированного программирования. Сферы применения».pdf
Добавлен: 21.05.2023
Просмотров: 329
Скачиваний: 3
СОДЕРЖАНИЕ
1. ИСТОРИЧЕСКИЕ АСПЕКТЫ ВОЗНИКНОВЕНИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ И ООП
1.1. Исторические предпосылки создания языков программирования и методологий программирования
1.2. Классификация и специфика языков программирования высокого уровня
2. СПЕЦИФИКА МЕТОДОЛОГИИ ООП В СОВРЕМЕННЫХ ЯЗЫКАХ ПРОГРАММИРОВАНИЯ
2.2 Анализ современных языков программирования, базирующихся на методологии ООП
3. РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ С ИСПОЛЬЗОВАНИЕМ ООП
3.1 Разработка проекта системы и ее основных классов
4. Си – язык разработки первых сетевых протоколов и операционных систем, популярных в ряде отраслей и в настоящее время.
5. Пролог – язык, используемый в области искусственного интеллекта, в силу поддержки гибкого аппарата математической логики и предикатов.
Данные высокоуровневые языки программирования являлись машинно–независимыми, в силу их ориентации на систему операндов, которые являются характерными для формализации записей имплементированных алгоритмов. Не смотря на это преимущество, в 60-х годах было выявлено, что программы, которые разработаны на базе использования языков программирования высокого уровня, занимают существенно больше оперативной памяти ЭВМ, что обуславливает меньшую скорость выполнения по сравнению с программами, которые были реализованы на машинных языках [13].
Эта специфика обусловлена тем, что программа, которая создана с использованием высокоуровневого языка программирования, в прямом виде не является понятной и интерпретируемой ЭВМ. В силу этого, для обеспечения корректного перевода разработанного программного кода на непосредственный язык машинных кодов стали применяться соответствующие специализированные программы, которые стали называться трансляторами [18].
Согласно специфике использования высокоуровневых языков программирования используется три типа трансляторов [17]:
1. Интерпретатор, представляющий собой транслятор, выполняющий пооператорную обработку и реализацию исходного программного кода.
2. Компилятор – это транслятор, который осуществляет преобразование всей программы в отдельный модуль машинного языка, а затем программа записывается непосредственно в оперативную или постоянную память ЭВМ и выполняется.
3. Ассемблер, предназначенный для корректного перевода разработанной программы, которая записана на языке ассемблера, в соответствующую программу машинного языка.
Генеалогическое дерево языков программирования приведено на рис.2 [5].
Рисунок 2 - Генеалогическое дерево исторического развития языков программирования
Все языки программирования часто классифицируют по таким поколениям [14]:
– первое поколение: применение на ЭВМ первого поколения с машинно–ориентированным использованием и ручным процессом управлением памятью;
– второе поколение: применение автокодов или мнемонических символов для представления команд программы;
– третье поколение: языки программирования высокого уровня общего типа и назначения, которые использовались в первую очередь для разработки и реализации пакетов прикладных программ в нужной предметной области (Паскаль, Бейсик, Си);
– четвертое поколение: высокоуровневые языки программирования, использованные для разработки специализированных прикладных программ и приложений, которые поддерживали механизмы использования систем управления базами данных [10];
– пятое поколение: объектно–ориентированные, декларативные и визуальные высокоуровневые языки программирования. Данные языки применяются в настоящее время и используются для разработки клиент-серверных приложений, мобильных систем и распределенных веб-ресурсов. Примерами таких языков являются Си++, Java, C#, Visual Basic, Delphi.
Языки программирования часто классифицируют на процедурные и декларативные [16].
В первом типе разработанная программа явно идентифицирует перечень действий, которые должны быть выполнены. Результат работы программы, при этом, определяется лишь способом использования помощи конкретной процедуры, представляющей собой заданную последовательность действий или алгоритм.
Среди таких языков выделяют структурные и операционные языки. В структурных языках запись целых алгоритмических структур (ветвление, циклы и др.) выполняются одним оператором. В операционных языках для решения данной задачи применяется уже несколько операций. Исторически, структурными языками являются Паскаль, Ада, Си. Операционными являются Фортран, Фокал, Бейсик [18].
К декларативным языкам программирования часто относят логические и функциональные языки.
В логических языках программирования код программы не описывает никаких действий. Программа лишь задает данные и взаимосвязи (соотношения) между ними. Затем, поддерживается возможность задания системе различные вопросы. ЭВМ осуществляет перебор доступных и заданных в программе данные, после чего находит нужный ответ и выводит его. Таким образом, непосредственный порядок перебора команд не описывается явно в программе, а задается синтаксисом самого языка. Классическим языком такого типа программирования является Пролог [17].
В функциональных языках написанный код описывает вычисление конкретной функции. Такая функция, как правило, задается в виде некоторой композиции других, являющихся более простыми, функций. Такие функции также могут подразделяться на более простые и т.д. Одной из главных особенностей элементов функциональных языков являются рекурсии. Их наличие обусловлено тем, что в функциональных языках программирования отсутствуют операторы присваивания и циклов [1].
Наиболее популярным в настоящее время классом языков программирования высокого уровня является объектно–ориентированные языки. Данные языки чаще всего не используются для описания детальной последовательности действий выполнения и решения задачи, однако, они включают соответствующие механизмы и содержат некоторые элементы процедурного программирования. За счет использования методов, классов, полей и принципов объектно-ориентированной парадигмы программирования данные языки позволяют решать широкий круг практических задач. Первым объектно-ориентированным языком принято считать язык Simula, который был создан еще в 1960-х годах Нигаардом и Далом [9].
В настоящее время наиболее востребованными языками программирования высокого уровня, поддерживаемыми объектно-ориентированную методологию, являются C, C#, Java и др (рис.3).
Рисунок 3 – Статистика востребованности современных языков программирования высокого уровня [10]
Выводы по главе 1
В рамках данной главы проведен анализ ряда литературных источников по существующим языкам программирования и методологиям написания программ. Даны определения терминов: языки программирования, высокоуровневый язык программирования.
Рассмотрены исторические аспекты возникновения языков программирования и объектно-ориентированной методологии разработки программного обеспечения. Рассмотрена классификация и специфика языков программирования высокого уровня в их историческом разрезе. Приведено генеалогическое дерево их исторического развития с 1960 по 2000 годы.
Приведена диаграмма востребованности современных языков программирования на практике.
2. СПЕЦИФИКА МЕТОДОЛОГИИ ООП В СОВРЕМЕННЫХ ЯЗЫКАХ ПРОГРАММИРОВАНИЯ
2.1 Сущность методологии ООП
Объектно-ориентированное программирование (ООП) это современная парадигма программирования, опирающаяся на такие ключевые понятия, как объект и класс, позволяющая организовать гибкую структуру программного кода проекта.
ООП появилась посредством развития идеологии функционально-процедурного программирования, в которой не было четкой связи между данными, процедурами и функциями, их вызов осуществлялся в ручную, а обработка передавалась посредством операторов типа goto [2].
Основными понятиями в ООП являются классы и объекты. Класс представляет собой формализованный, в рамках синтаксиса используемого языка программирования в составленном пространстве имен, исходный код абстрактного (неинициализированной при создании) объекта (сущности). Класс предназначен для детального описания структуры устройства объекта, т.е. это некий каркас.
При этом, когда создается объект, принято считать что он является экземпляром класса, который его описывает.
Следует отметить, что в некоторых системах, в случае выполнения программного кода интерпретатором или компилятором языка, посредством использования динамического определения типов данных, класс также может быть представлен в виде некоторого объекта [1].
Чаще всего на практике классы разрабатываются так, чтобы их будущие объекты и их описание четко соответствовало специфике исследуемой предметной области [6].
На развитие парадигмы ООП существенное значение оказало концептуальные понятия события и компонента. Взаимодействие объектов приведено на рис.4.
Рисунок 4 – Взаимодействие объектов и их структура в ООП
Таким образом, объект в выделенном адресном пространстве системы, создается при инициализации формирования отдельного экземпляра класса, а также в случае копирования существующего прототипа. Типичным примером является запуск итоговых результатов выполненного процесса компиляции, за которым следует связывание выполняемого кода [5].
Прототипом называют образцовый объект, на базе которого осуществляется создание и определение других объектов. Прототипы обладают возможностью сохранения имеющихся связей с родительскими объектами, от которых они созданы, поддерживая механизмы автоматического изменения своего состава в случае модификации структуры родительского объекта. Следует отметить, что данная особенность прототипов отлична в различных языках программирования высокого уровня [10].
Для ООП характерным является использование следующих принципов или концепций (рис.5).
Рисунок 5 – Принципы ООП
Существует 3 главных принципа парадигмы ООП [16].
1. Инкапсуляция – принцип ООП, который заключается в осуществлении объединения данных и методов, которые находятся в рамках одного класса, за счет чего достигается сокрытие детали реализации логики класса от пользователя.
Пример схемы отображения принципа инкапсуляции парадигмы ООП приведена на рис.6 [9].
Абстрагирование в данном случае позволяет обеспечить описание комплекта наиболее значимых характеристик объекта, а незначимые и неприоритетные характеристики объекта отбрасываются. Таким образом, абстракция представляет собой формализованное описание набора всех значимых параметров и характеристик объекта [2].
2. Наследование - это принцип ООП, который позволяет осуществлять описание новых классов на базе использования существующего класса (или нескольких, если поддерживается механизмы множественного наследования), которое может быть дополнено новыми функциональными возможностями (новые методы, поля).
Класс, от которого производится наследование нового класса, называют родителем, базовым или суперклассом [18].
Рисунок 6 – Пример схемы отображения принципа инкапсуляции ООП
Пример иллюстрации принципа наследования в парадигме ООП приведен на рис.7 [19]. Класс Program является родителем для класса MyCar, который в свою очередь выступает родителем для класса MySportCar, все они могут дополнять описанные методы суперкласса Program новыми функциональными возможностями.
3. Полиморфизм - это принцип ООП, заключающийся в использовании различных объектов, которые обладают идентичным интерфейсом без необходимости использования информации внутренней структуре объекта или его типе [2].
В настоящее время количество высокоуровневых прикладных языков программирования, которые поддерживают парадигму ООП, является наиболее широким. Каждый язык программирования реализует ООП по-разному, однако принципы ООП во всех языках, в целом, одинаковы [1].
Рисунок 7 – Пример иллюстрации принципа наследования в парадигме ООП
В предметной области, которая касается непосредственно системного программирования, при этом, и в настоящее время активно применяется процедурная парадигма программирования [5].
Чаще всего данная парадигма находит свое воплощение в средствах языка C или С++, которые обладают максимальной гибкостью обработки данных для микроконтроллеров и других устройств низкого архитектурного уровня [3].
2.2 Анализ современных языков программирования, базирующихся на методологии ООП
1. Java. Это популярный высокоуровневый язык программирования, который был выпущен известной ИТ компанией Sun Microsystems еще в 1995 году. В настоящее время разработкой языка Java занимается корпорация Oracle. Синтаксис данного языка во многом похож на язык C++, на котором Java и был изначально разработан. Разрабатываемые Java приложения компилируются в отдельный байт-код (формат .class), который при выполнении интерпретируется JVM (виртуальной машиной Java) для конкретной аппаратно-программной платформы или операционной системы [4].
В Java была взята за основу модель объекта из С ++ со значительной модификацией. Отсутствие возможностей множественного наследования, деструкторов и возможностей ручного управления указателями к ячейкам памяти, все это является характерными чертами языка Java. Также, устранена возможность происхождения различных конфликтных ситуаций, по причине ошибок в коде программиста, а также обеспечена большая гибкость процесс разработки классов и объектов [6].