Файл: Основные понятия объектно-ориентированного программирования (Появление объектно-ориентированного программирования).pdf
Добавлен: 28.03.2023
Просмотров: 244
Скачиваний: 9
ВВЕДЕНИЕ
Актуальность изучения объектно-ориентированного программирования (ООП) заключается в том, что оно является востребованным в настоящее время и является признанным при разработке и использовании разных систем. Как и у любого понятия, у ООП есть свои определения, основа, примеры, принципы. В ООП рассматриваются те основы, которые потом пригодятся при изучении разных языков программирования. Именно с ними связано ООП. Поэтому необходимо знать все определения, основы, принципы, а также уметь приводить примеры. Именно об этом пойдет речь в курсовой работе.
Объект работы - основные понятия объектно-ориентированного программирования
Предмет исследования - объектно-ориентированное программирование.
Цель курсовой работы - изучение основных понятий, принципов и аспектов объектно-ориентированного программирования.
Для достижения цели необходимо решить следующие задачи:
- описать значения и объекты объектно-ориентированного программирования;
- рассмотреть основные принципы объектно-ориентированного программирования;
- привести примеры задач с использованием объектно-ориентированного программирования.
Курсовая работа состоит из введения, трех глав, делящихся на параграфы, заключения, списка использованных источников.
В первой главе рассматриваются основные понятия ООП, что относится к нему, какие особенности были выделены в работах многих ученых современности.
Во второй главе разбираются основные принципы ООП, чем они отличаются, а также, где используется.
В третьей главе приведены примеры, где можно встретить ООП, общее количество таких примеров равно 6, так как они являются главными и важными в области программирования.
Таким образом, все описанные элементы необходимы для того, чтобы полностью раскрыть тему курсовой работы.
Глава 1. Основные понятия объектно-ориентированного программирования
1.1 Появление объектно-ориентированного программирования
В начале 1960 годов появился термин «объект», который положил начало новой компьютерной эры, а именно появление специалистов по искусственному интеллекту.[21]
Еще одним примером использования терминов «объект» и «экземпляр» можно считать их применение к описанию графических объектов в Sketchpad. Впервые о таких объектах было написано в техническом отчете, основанном на диссертации Ивана Сазерленда в 1963 г. Впервые о процедурах, которые позднее получили название функций-членов, было упомянуто в ALGOL AED-0. Здесь же впервые говорится о «методах» и «сообщениях» в современном понимании.
Следующим шагом к появлению объектно-ориентированного программирования стала формализация концепции «объект».[10] Это произошло с выходом в 1960-х годах Simula 67, которая стала очередной версией языка Simula. Ее основными разработчиками стали Оле-Йохан Даль и Кристен Нюгорд. Главным методом в Simula стало дискретно-событийное моделирование.
Понятие «класс» впервые было использовано в языке SIMSCRIPT, под влиянием которого и появилась Simula. Автором, реализованной здесь концепции записей-классов, стал Чарльз Хоар. В Simula появилось не только понятие «класс», но и «экземпляр класса» (объект), «сопрограмма», «подкласс», «виртуальный метод», и, как часть собственной парадигмы программирования, реализовано дискретно-событийное моделирование. В языке использовался автоматический сборщик мусора, который впервые был использован с Lisp. Но преимущественно Simula использовалась тогда для физического моделирования. Идеи этого языка оказали серьезное влияние на более поздние языки, такие как Smalltalk, Object Pascal и C++.[24]
Следующей знаковой фигурой в подвижении понятия «объект» стал Алан Кей. Под его руководством появился язык Smalltalk, в котором понятия «объект» и «сообщения» стали использоваться как базиса для вычислений. Язык Smalltalk разрабатывался как полностью динамичная система, в которой классы могут создаваться и изменяться динамически. Разработчиков Smalltalk во многом вдохновляли идеи Simula, где классы также существовали, но создавались и изменялись только статически. Датой первого релиза Smalltalk стал август 1981 г, когда в журнале Byte magazine были опубликованы основные идеи Smalltalk в целом, и идеи ООП, реализованные с его помощью.
Одним из отцов-основателей объектно-ориентированного подхода в программировании считается Никлаус Вирт, который, работал в ETH Zurich.[7] Он вместе с коллегами исследовал такие предметы, как абстракция данных и модульное программирование. Но эти подходы широко использовались и в 60-х годах. Modula-2, вышедшая в 1978 включала в себя оба эти подхода, а ее последователь Oberon имел собственный подход к объектно-ориентированности и классам, непохожий на подход Smalltalk и C++.[24]
В 1970-х появился первый стандартизированный объектно-ориентированный язык ANSICommon Lisp, частью которого была общая система объектов Lisp (Common Lisp Object System (CLOS)). Она стала результатом экспериментов с различными расширениями Lisp, с целью внедрить в язык объектно-ориентированные техники. ANSICommon Lisp органично включал в себя как объектно-ориентированное, так и функциональное программирование. Позже, в 1980-х годах, появилась идея реализовать работу с объектами памяти, используя аппаратную поддержку, которая бы входила в дизайн архитектуры процессора. Но все попытки оказались безрезультатными.
В 1990-х годах объектно-ориентированное программирование стало доминирующей методологией программирования. Это случилось из-за большого роста популярности графических интерфейсов пользователя, которые основывались на техниках ООП. Их реализация стала возможной в связи с появлением языков, поддерживающих объектно-ориентированную концепцию, таких как Visual FoxPro 3.0, С++, и Object Pascal, реализованный в Delphi.[10] Инструментарии ООП повлияли на популярность событийно-ориентированного программирования (хотя, эта концепция не ограничивается одним ООП). Кроме того, считалось, что кажущаяся или реальная связь с графическими интерфейсами – это то, что вынесло ООП на передний план технологий. С момента возникновения и формализации объектно-ориентированной технологии программирования ее возможности стали реализовываться во многих языках, включая Ada, Pascal, Fortran, Basic и другие. Добавление объектно-ориентированного подхода в изначально не разрабатывавшиеся для этого языки, часто приводило к проблемам с совместимостью и поддержкой кода.[23] Позднее стали появляться языки, поддерживающие как объектно-ориентированный подход, так и процедурный. Наиболее популярными языками, реализующими оба подхода, являются Ruby и Python. Самыми коммерчески успешными объектно-ориентированными языками на сегодняшний день являются Visual Basic.NET, C# и Java. A в .NET и Java, демонстрируется превосходство ООП над другими подходами.
Рассмотрев историю становления объектно-ориентированного подхода в программировании, вернемся к появлению самого объектно-ориентированного программирования. История структурного программирования берет свое начало от процедурного программирования, когда количество команд в коде возросло и появилась необходимость выделять фрагменты в некие логические единицы. С дальнейшим увеличением программ стало необходимым выделять более крупные структурные единицы и уменьшить между ними количество связей для более удобной реализации отладки.[2] Так появилось модульное программирование. Дальнейшее стремление уменьшить количество связей между структурными единицами и укрупнение кода привело к появлению объектно-ориентированного программирования. В основу этой концепции легло понятие класса (некоторой структурной единицы, описывающей поведение и состояние группы элементов, схожих по строению и поведению). В качестве аналога реальным объектам решаемой задачи в объектно-ориентированном программировании используются объекты класса, которые обладают своими личными свойствами и методами
ООП — это методология программирования, которая основана на представлении программы в виде совокупности объектов, каждый из которых является реализацией определенного класса (типа особого вида), а классы образуют иерархию на принципах наследуемости.
При разработке приложений с использованием ООП может применяться объектно-ориентированная декомпозиция, тогда как прежде, в случае применения процедурного подхода к программированию, имела место алгоритмическая декомпозиция. Первым бросающимся в глаза отличием ООП от структурного программирования является использование классов. Класс — это тип, определяемый программистом, в котором объединяются структуры данных и функции их обработки. Конкретные переменные типа данных «класс» называются экземплярами класса, или объектами [6, с. 162].
Класс содержит константы и переменные, называемые полями, а также выполняемые над ними операции и функции. Функции класса называются методами (другое название — функции-члены). Предполагается, что доступ к полям класса возможен только через вызов соответствующих методов. Поля и методы являются элементами (членами) класса. Методы, расположенные в открытой части, формируют интерфейс класса и могут свободно вызываться клиентом через соответствующий объект класса. Доступ к закрытой секции класса возможен только из его собственных методов, а к защищенной — из его собственных методов, а также из методов классов-потомков. Класс, согласно Гради Буч — это «Совокупность свойств, методов и событий». При этом «совокупность» означает, что функционирование класса обеспечивается в совокупности методами, свойствами и событиями. Под объектом понимается экземпляр класса. Объект функционирует как единое целое, реагируя соответствующими методами на соответствующие события класса. Разница между понятиями объекта и класса заключается в том, что посредством класса осуществляется описание какой-либо сущности, что работает как шаблон, основа. [8] Например, в случае с Delphi, для того, чтобы добавить на форму кнопку, следует объявить класс, описать свойства, методы и события, и, при переносе кнопки на форму, создается экземпляр этой кнопки, т.е. объект. Немаловажно, что каждый класс должен включать в себя два обязательных метода: создать объект (конструктор), уничтожить объект (деструктор), а процесс создания объекта именуется инициализацией. [8, с. 45] Эти методы выделяют под свойства объекта память и освобождают ее, а также заполняют свойства значениями по умолчанию.
Существует так называемые права доступа, в зависимости от которых методы и классы видны другим классам. В Delphi, например, это public, private, protected, published.[8, с. 51] Открытыми для доступа должны быть лишь некоторые возможности класса. Роль классов в ООП заключается в том, что они выполняют две функции, всегда разделенные до появления объектно-ориентированных технологий: класс — это одновременно и модуль и тип.[1] Под модулями понимаются структурные единицы, из которых состоит программа. Поскольку модуль всегда рассматривается как синтаксическая концепция, то разбиение на них влияет только на форму записи исходных кодов, не определяя их функциональность. Тип — это статистическое описание определенных динамических объектов — элементов данных, обрабатываемых в процессе выполнения программы.
1.2 Объекты объектно-ориентированного программирования
В основе концепции объектно-ориентированного программирования лежит понятие объекта — некой сущности, которая объединяет в себе поля (данные) и методы (выполняемые объектом действия).[11] Например, объект человек может иметь поля имя, фамилия и методы есть и спать. Соответственно, в программе можем использовать операторы Человек.Имя:="Иван" и Человек.Есть(пища).
В современных ОО языках используются механизмы:
- наследование. Создание нового класса объектов путём добавления новых элементов (методов) [15]. Некоторые ОО языки позволяют выполнять множественное наследование, то есть объединять в одном классе возможности нескольких других классов.
Инкапсуляция. Сокрытие деталей реализации, которое позволяет вносить изменения в части программы безболезненно для других её частей, что существенно упрощает сопровождение и модификацию ПО.
Полиморфизм.[22] При полиморфизме некоторые части (методы) родительского класса заменяются новыми, реализующими специфические для данного потомка действия. Таким образом, интерфейс классов остаётся прежним, а реализация методов с одинаковым названием и набором параметров различается. В ООП обычно применяется полиморфизм подтипов (называемый при этом просто «полиморфизмом»), нередко в форме позднего связывания. [1, c.880]
Неполный список объектно-ориентированных языков программирования:
1. ActionScript (3.0)
2. Ada
3. C#