Файл: История и развитие методологии объектно-ориентированного программирования. Сферы применения (История и развитие).pdf
Добавлен: 30.03.2023
Просмотров: 171
Скачиваний: 1
ВВЕДЕНИЕ
Методология объектно-ориентированного программирования давно и широко вошла в общераспространенную практику разработки программных продуктов.
Именно эта тема курсовой работы выбрана, поскольку объектно-ориентированный подход дает ключ к разработке прикладных программ и является успешно используемым многими разработчиками.
Целью курсовой работы является исследование и доступное изложение ключевых моментов методологии ООП и применение на практике основных её моментов в текущем проекте на движке Unreal Engine, а также рассмотрение истории её формирования и сфер применения.
При написании курсовой работы я исследовала и опиралась на труды современных ученых Аузяк А.Г., Богомолов Ю.А., Маликов А.И., Старостин Б.А., Биллиг В.А., Кудрина Е.В., Огнева В.М., Портенко М.С., Кожемяченко В.И. Красноперов С.Ю , Кадырова Г. Р., Казакова А.Е., Макаров В.Л., Г.Буч, Д.Шарп . Наиболее доходчивым изложением материала для меня оказалась книги Биллига В.А и Джона Шарпа (в переводе).
Практическая ценность курсовой работы может быть в возможности получения из нее теоретических знаний ООП в сжатом виде, но простом изложении, а также пример практического применения в недавно открытой для бесплатного использования и интересной для многих среде Unreal Engine.
Глава 1. История и развитие
Методологией программирования называют совокупность способов, принципов, понятий и идей, которая задает тон написания программ, их отладки и сопровождения. Основными методологиями программирования являются: процедурно-ориентированное, объектно-ориентированное, логически-ориентированное и параллельное программирование. Сегодня структурное программирование стало активно дополняться объектно-ориентированным в противоположность декларативному подходу. [7]
Поскольку программы описывают действия над объектами, то это можно было взять за основу, внести модульность, что дало возможность в дальнейшем модифицировать программный продукт путем его дополнения и расширения , а не «перекраивать» заново, что упрощает его отладку и разработку. Так возникло ООП.
Объектно-ориентированное программирование разработано в середине 1970-х годах Б.Керниганом и Д.Риччи, в дальнейшем оно развивалось, став одной из ведущих технологий программирования. Цель ООП - повышение эффективности разработки.
Большинство идей, служащих основанием для языков программирования современности, появились в 1970-х годах. В то время программирование не было особо популярной профессией, им занимался довольно узкий круг людей, горячо увлеченных своим занятием. Первые машины, на которых работали программисты, такие как, например, PDP-1, PDP-6,Altair, Sol, Apple, PET, TRS-80, управлялись на уровне двоичных кодов и самыми низкоуровневыми языками программирования, а значит, требовали высококвалифицированных специалистов. Первые машины отличались несовершенной системой ввода-вывода и небольшим объемом оперативной памяти. Разнотипные данные языка не разделялись на соответствующие типы, и программа состояла и из данных и подпрограмм. Постепенно подпрограммы стали играть роль структур абстрагирования, а коллективная работа над большими проектами привела к возникновению модульности. Однако возникала проблема, когда на данные одного модуля влияла процедура другого.
Потомком Algol-60 стал строго типизированный язык Pascal как представитель структурного (процедурного) программирования. К 1980 –м годам Pascal стал основой многих учебных программ. Затем фирмой «Borland» был разработан Turbo Pascal, который вырос в объектный Pascal для DOS и Windows и потом в Delphi.
Потомком языка Pascal стал язык Ada,, имеющий поддержку модульности и абстрактных типов данных. Также на основе языка Algol-60 был построен язык Simula-67. [9]
В первых языках программирования отсутствовало понятие класса, построение приложения рассматривалось с точки зрения типа данных. Однако, набор разрешенных операций неявно с типом всегда связывался и в типизированных языках естественно связывалось понятие переменной с типом данных. Например, переменная х, типа Т, принимает значения множества Т.[2]
Впервые классы и объекты появились в программировании в языке Simula-67. В нем определение классов содержало четкое определение методов, операций, применимых к данным. [2] Таким образом, первым объектно-ориентированным языком стал Simula-67(1967год) и его концепции стали основой последующих объектно-ориентированных языков. В Simula-67 объект имеет параметры. Но возникали трудности, например, при выполнении одинаковых операций, но с разными типами данных, увеличивалось количество функций, относящихся по-сути, к одному и тому же действию. Кроме того, трудностью было отсутствие средств отладки и необходимость перезапуска программы, что при увеличении сложности программы и объема кода неудобно в плане времени поиска ошибки. Также увеличивалось количество дублируемых данных при увеличении родительских классов при одиночном наследовании. В Smalltalk-80, Eiffel и С++, эти проблемы были решены.В Eiffel нет возможности сочетать в одной программе несколько стилей, он менее вариабелен, но в нем были исправлены некоторые недостатки С++. В Smalltalk-72,-74,-76,-80 концепции ООП были развиты Аланом Кэйем и Дэном Ингаллсом. Взаимодействие межу объектами (переменными) происходит путем обмена сообщениями. Классы связаны отношением наследования, имеют иерархию и находятся в дереве классов. Среда разработки программы имеет средства отладки и пользовательский интерфейс. Этот язык стал широко распространенным объектно-ориентированным языком.
Язык Self ввел в ООП понятие прототипа.
Наследником языков Algol-60 (1960год) и Pascal (1970 год) стал язык Oberon. Разработанный создателем Pascal и Modula, Никлаусом Виртом и его коллегами, собрал в себе исследования по методологии и языкам программирования и сочетал в себе возможности структурного и модульного программирования с объектно-ориентированными средствами. В 1992 году Н.Вирт с Х.Мёссенбёком добавили в него новые средства для разработки, создав Oberon-2.[6]
Язык С, не имеющий вложенных процедур и отличающийся минимализмом, легко компилируемый с помощью однопроходного компилятора, стал очень популярным языком программирования. Иногда его называют «ассемблером высокого уровня» и он доступен на самых разных платформах.
На основе языка С был создан С++ в 1980-1983 году Бьерном Страуструпом. В отличие от С он дает возможность объектно-ориентированного программирования, он является гибридным языком, дающим возможность программировать и стиле С, и в объектном, и в обоих стилях одновременно. [7, 6,8] В плане отладки в С++ к языку была добавлена возможность обработки исключительных ситуаций. Этот механизм описывает реакцию программы на ошибки во время её выполнения. Есть возможность описания шаблонов без привязки к конкретным параметрам для кодирования общих алгоритмов, используемых под разные данные (что было проблемой в Simula-67). Появилась возможность множественного наследования, что, впрочем, может вызывать противоречия.
В начале 90-х годов на основе С++ фирмой «Sun Microsystems» был разработан объектно-ориентированный язык программирования Java. В нем была упрощена разработка приложений путем удаления из него низкоуровневых возможностей. [6] Это объектно-ориентированный язык. Приложения , разработанные на Java могут работать на любой виртуальной машине независимо от архитектуры компьютера.
В 1998-2001 годах под руководством Андерса Хейлсберга группой инженеров фирмы Microsoft был разработан объектно-ориентированный язык С# для платформы .NET Framework и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270. Он обладает таким же понятным синтаксисом , как С и С++ и Java, но некоторые вещи в нем упрощены и удалены проблематичные при разработке модели. [6] В частности, в отличие от С++ не поддерживает множественное наследование классов. Он разрабатывался как язык программирования прикладного уровня для CLR и зависит от его развития.
Из истории программирования я вижу, что она делалась горячими энтузиастами, и решение возникающих перед ними задач приводило к улучшению имеющихся методологий программирования и распределению каждой их них под соответствующие цели.
Глава 2. Суть методологии объектно-ориентированного программирования
Разработка программного обеспечения, использующая методологию ООП, основывается на объектах, а не на процедурах. Отличие объектно-ориентированного программирования от процедурного в том, что в нем объектам передаются сообщения, на которые они должны реагировать при выполнении программы, а , значит, объекты должны определяться совместно с ними. В процедурном программировании определенные структуры данных в виде параметров передаются в функции (процедуры), порядок выполнения операторов зависит от команд управления и порядка следования операторов. Отличие объектно-ориентированного подхода состоит в том, что порядок выполнения процедур зависит от событийных факторов.[6]
Процедурное программирование используется, когда нужно быстродействие и ресурсы, используемые программой, но это потребует времени на разработку. Объектное – когда проект должен быть управляем с возможностью модификации и скорость разработки имеет значение. Для этого используется правильное применение основных инструментов ООП – абстрагирования, инкапсуляции, полиморфизма и наследования. Итак, что представляет собой объектно-ориентированное программирование?
Объекты, классы, методы
В объектно-ориентированном языке создается окружение из отдельных объектов, в котором каждый из них можно сравнить с отдельным компьютером, механизмы функционирования которого не обязательны для исследования в ходе решаемой задачи . Объект обладает собственными свойствами, методами, поведением, он объединяет данные и процедуры их обработки, и сам относится к определенному классу объектов. [6] Или, другими словами, класс со своей стороны является образцом для создания объектов.[3] Методологией ООП отображаются объекты реального мира, их свойства (атрибуты) и связи между ними при помощи структурных данных.
Индивидуальность объекта- свойство, позволяющее отличить его от других объектов с такими же атрибутами. Например: у двух котов есть шерсть, но она разного цвета. [3]
В противоположность индивидуальности объекта, абстрагирование - это способ выделить набор значимых характеристик объекта, исключив из рассмотрения незначимые. Соответственно, абстракция - это набор всех таких характеристик. Класс называют абстрактным, если он имеет хотя бы один абстрактный метод. Метод называется абстрактным, если при определении метода задана его сигнатура, но не реализация метода. [2]
Для объекта создается своя структура данных (класс), содержащая свойства объекта (поля), процедуры для управления объектом (методы), Проще говоря, если есть объект, то у него могут быт признаки, свойства и методы, которыми он решает определенные задачи. Задачи программы можно распределить между объектами программы.
Итак, программа, реализующая концепции ООП, состоит из объектов - специальных фрагментов кода, обрабатывающего данные, которые взаимодействуют друг с другом через свои интерфейсы. [2] Интерфейс объекта - это совокупность правил доступа. [3] Это позволяет смоделировать объекты, программируя их содержание и поведение в пределах класса. С помощью класса реализуется механизм инкапсуляции, то есть детали реализации остаются скрытыми. Класс является обобщенным понятием для характеристики определенного множества объектов-экземпляров класса. Все классы, создаваемые программистом в среде .Net и все классы библиотеки этой среды имеют общий класс - предок object. Если класс описывается внутри другого класса, его называют вложенным. [3]
Классы содержат определяемые программистом данные, а также функции, которые с ними взаимодействуют, то и другое называют элементами класса. Элементы класса своей областью действия имеют класс и, соответственно, доступны функциям - элементам этого класса.[1]
Имя программного элемента ( переменной, константы, класса, объекта, метода и т.д.) называется идентификатором. Сами элементы класса могут быть не только данными, но и, например, функциями. Классы могут выступать в двух ролях, и как типы данных и как основные модули построения архитектуры программы. Таким образом, класс не только несет на себе смысловую нагрузку архитектурной единицы, но и задает определенный тип данных. Полями класса называют определённого типа данные, для описания атрибутов. [3] Синтаксически поля класса являются переменными (объектами) языка, а методы – процедурами (функциями). Объекты одного класса будут иметь и одинаковые методы [2]
Например:
string firstFriend = "Leila";
string secondFriend = "Angela";
string trirdFriend = "Andrew";
Console.WriteLine($"My Friends are {firstFriend} and {secondFriend} and {trirdFriend}.");
Здесь (My Friends)- класс, , (firstFriend), (secondFriend), (trirdFriend) – переменные этого класса объектов, (Leila), (Angela), (Andrew)- значения этих переменных.
Переменная является символом, значения которого могут быть разными при выполнении одного и того же кода.
При объявлении переменной её можно инициализировать и необходимо присвоить ей начальное значение, в нижеприведенном примере переменной х присваивается начальное значение равное нулю.
static void Main()
{
int х=0; //объявление и инициализация переменной х
Console.WriteLine(х); //просмотр значения переменной
х=100; //изменение значение переменной
Console.WriteLine(х);
}
Переменные объектного типа формально называют экземплярами объекта, но, по сути, это больше, чем переменная. Переменные объектного типа могут быть динамическими, то есть размещаться в памяти только во время их использования.
В описании объекта содержатся шаблоны обращения к методам, которые необходимы компилятору для проверки соответствия количества параметров и их типов при обращении к методам. Воздействие одного объекта на другой называют операцией, в ООП операции называют методами.
Метод — это функциональный элемент класса, блок кода, реализующий действие. Ему присваивается имя, чтобы мы могли получить к нему доступ, обратиться по имени. Описывается он один раз, но вызывать его можно многократно. То, что может делать класс, определяется совокупностью этих методов. [3]