Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Основные понятия объектно-ориентированного программирования (Появление объектно-ориентированного программирования)

Содержание:

ВВЕДЕНИЕ

Актуальность изучения объектно-ориентированного программирования (ООП) заключается в том, что оно является востребованным в настоящее время и является признанным при разработке и использовании разных систем. Как и у любого понятия, у ООП есть свои определения, основа, примеры, принципы. В ООП рассматриваются те основы, которые потом пригодятся при изучении разных языков программирования. Именно с ними связано ООП. Поэтому необходимо знать все определения, основы, принципы, а также уметь приводить примеры. Именно об этом пойдет речь в курсовой работе.

Объект работы - основные понятия объектно-ориентированного программирования

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

Цель курсовой работы - изучение основных понятий, принципов и аспектов объектно-ориентированного программирования.

Для достижения цели необходимо решить следующие задачи:

- описать значения и объекты объектно-ориентированного программирования;

- рассмотреть основные принципы объектно-ориентированного программирования;

- привести примеры задач с использованием объектно-ориентированного программирования.

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

В первой главе рассматриваются основные понятия ООП, что относится к нему, какие особенности были выделены в работах многих ученых современности.

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

В третьей главе приведены примеры, где можно встретить ООП, общее количество таких примеров равно 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#

4. C++

5. Cyclone

6. D

7. Delphi

8. Dylan

9. Eiffel

10. F#

11. Io

12. Java

13. JavaScript

14. JScript .NET

15. Object Pascal

16. Objective-C

17. Perl

18. PHP

19. PowerBuilder

20. Python

21. Ruby

22. Scala

23. Simula

24. Smalltalk

25. Swift

26. Vala

27. VB.NET

28. Visual DataFlex

29. Xbase++

30. X++

Кроме ОО-языков общего назначения существуют и узкоспециализированные ОО-языки.

 Ада — язык программирования, созданный в 1979—1980 годах в ходе проекта Министерством обороны США с целью разработать единый язык программирования для встроенных систем (то есть систем управления автоматизированными комплексами, функционирующими в реальном времени). Имелись в виду прежде всего бортовые системы управления военными объектами (кораблями, самолётами, танками, ракетами, снарядами и т. п.). Перед разработчиками не стояло задачи создать универсальный язык, поэтому решения, принятые авторами Ады, нужно воспринимать в контексте особенностей выбранной предметной области. Язык назван в честь Ады Лавлейс. [2, c.672]

 C# — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров компании Microsoft под руководством Андерса Хейлсберга и Скотта Вильтаумота как язык разработки приложений для платформы Microsoft.NET Framework. Впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270.

Объектно-ориентированное программирование (ООП) [1] является результатом развития процедурного программирования, однако предлагает другой подход к разработке программ. В ООП данные и методы объединяются в классы, то есть между ними устанавливается связь. На основе классов создаются объекты – главные элементы программы. В процессе выполнения программы объекты взаимодействуют между собой, т.е. обмениваются информацией. ООП позволяет также преодолеть трудности при создании сложных программ.

Буч Г. [5] дает следующее определение предмета курсовой работы: «Объектно-ориентированное программирование – это метод программирования, основанный на представлении программы в виде совокупности взаимодействующих объектов, каждый из которых является экземпляром определенного класса, а классы являются членами определенной иерархии наследования».[3, с. 69] Он подчеркивает, что программа будет объектно-ориентированной, если соответствует трем условиям: использует в качестве основных логических конструктивных элементов объекты, а не алгоритмы; каждый объект является экземпляром определенного класса; классы образуют иерархии.[3, с. 69]

Основную понятийную роль играют абстрактные сущности, являющиеся умозрительными конструкциями. Вопрос о том, включать абстрактные сущности в состав объективной реальности или нет, оставим философам. Заметим лишь, что абстрактные сущности не имеют места во времени и пространстве.

Примеры абстрактных сущностей: число 7г; прямой угол; точка плоскости с координатами (—1,2). Математика — это язык описания абстрактных сущностей. Математическая модель — конструкция, приближенно отражающая часть реального мира, опираясь на абстрактные сущности. Занимаясь программированием, разработчики вынуждены строить математические модели. Для описания конкретных сущностей вводятся атрибуты — соответствия с абстрактными сущностями, позволяющие «закодировать» качества конкретных сущностей и встроить их в математическую модель (что и составляет суть абстракции, так как «за бортом» такого описания остается множество малозначимых или вовсе неизвестных деталей). Примерами атрибутов могут служить физические величины, цвета, количества составляющих частей.[10]

В математике абстрактные сущности организованы в абстрактные виды. Абстрактные виды могут быть определены путем ввода наборов аксиом. Примеры абстрактных видов: двоичное дерево, абелева группа, натуральное число, цвет (в рамках некоторой цветовой модели). Наборы атрибутов позволяют выделить конкретные виды. Абстрагируясь от видов, можно вводить роды сходных видов. Примеры абстрактных родов: линейное пространство, число, множество, граф.[10] Примеры конкретных родов: участник дорожного движения, неподвижный объект, предмет посуды. Сущность принадлежит одному виду, но может быть отнесена к нескольким родам. При этом не существует единственно правильного членения сущностей на виды и роды, все зависит от конкретики строимой модели и решаемых задач. В объектно-ориентированном программировании мы имеем значения, которые представляют абстрактные сущности. Можно считать, что значения как таковые неизменны (число 3 всегда и везде одно и то же). В разное время одно и то же имя просто «привязано» к тому или иному значению, либо (в процедурном программировании) значение может храниться в переменной (которая играет роль места размещения представления значения). Типы значений отвечают абстрактным видам (в языках с автоматическим выводом типов явно указанные «типы» могут на деле отвечать абстрактным родам). [21] Как правило, типы описываются как абстрактные типы данных. Пример: целые числа и арифметические операции.

Множество значений может быть формально бесконечным и не существовать физически. В рамках обобщенного программирования абстрактные роды (и иногда виды, если им не отвечают имеющиеся в распоряжении типы) называют концепциями (англ. concept). Типы, вкладывающиеся в некоторую концепцию, называются моделями этой концепции. В объектно-ориентированном программировании объекты отвечают конкретным сущностям. Множества объектов всегда конечны и разбиваются на классы, определяющие полный (в рамках нашей модели) набор атрибутов некоторого конкретного вида. [25] Класс можно считать «чертежом», по которому можно создать объект нужного вида и по которому же ненужный более объект можно корректно удалить. В свою очередь, абстрагируясь от конкретики создания, существования (физического представления) и удаления объектов, только на основе ограниченного набора атрибутов можно определить интерфейс — отражение конкретного рода в объектно-ориентированном проектировании. Класс может служить реализацией набора интерфейсов.

В свою очередь, объекты также кодируются конечными последовательностями бит. [10] Свойство идентичности объектов выполняется благодаря уникальным адресам, по которым их представления расположены в компьютерной памяти. Поэтому, даже если есть два одинаковых представления, но они расположены по разным адресам, они отвечают двум разным объектам (представляют две разные конкретные сущности). [11] Копирование объекта создает новый объект. Более того, исходный объект и копия могут иметь различные представления, так как объект может состоять из других объектов, которые могут находиться в отдельной части памяти и представляться своими адресами. У объекта-копии будут копии этих объектов-частей, занимающие другие адреса. Вследствие свойства идентичности даже объекты, лишенные состояния (например, объекты типа s tr u c t А {> не имеют состояния), в C++ занимают отдельную память (проверьте sizeof(A) и sizeof (В), где s tru c t В { А а, Ъ; }). [23] Понятие равенства разных объектов друг другу приравнивается к отношению «являться копией». Равные объекты находятся в одинаковом состоянии и имеют равные атрибуты. Отклонение от этого принципа обычно влечет ошибки. Формирование специального представления объекта, позволяющего создать эквивалентный объект уже в другом адресном пространстве (другой памяти), называется сериализацией. [22]

Воссоздание объекта по сериализованному представлению называется десериализацией. Сериализация требуется, когда необходимо передать объект по сети или сохранить на носителе данных. Необходимо отметить, что компьютер является реальным физическим устройством, поэтому представления значений и объектов в памяти реального компьютера можно считать конкретными сущностями, возможно, моделирующими сущности абстрактные. Соответственно типы значений в языках программирования могут быть более ограничены, чем предполагается для соответствующих абстрактных видов. Например, в языке C++ нет встроенного типа «целое число», зато есть тип int, множество значений которого конечно.

Ограниченность реальных представлений ведет к тому, что концепции в C++ могут отвечать как абстрактным родам, так и видам, например, может быть введена концепция «целое число», моделью которой является любой тип, предоставляющий необходимый набор действий над своими значениями и предназначенный для представления (подмножества) целых чисел, в то время как, строго говоря, абстрактным родом вида «целое число» является, например, «кольцо». [20]

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

Итак, в начале 1960 годов стали появляться новые слова, которые составили основу ООП, появилась новая компьютерная эра, возникли новые специальности, в которых нужны были люди, способные разбираться в новом, называемом искусственным интеллектом.

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

Кроме этого, под объектно-ориентированным программированием (ООП) понимается программирование, оперирующее конкретными сущностями (объектами) и конкретными видами и родами (классами, абстрактными классами, интерфейсами). Математически интерфейсы можно представлять как наборы функций, отображающих объект и необязательный кортеж параметров в некоторое множество результатов. Эти функции называют методами. Можно считать, что значения кодируются с помощью конечных последовательностей бит, которые называются представлениями значений. Из равенства представлений следует равенство значений (хотя, строго говоря, не всегда это означает равенство исходных абстрактных сущностей, потому что представления иногда могут быть неоднозначными2). Из равенства значений следует равенство представлений, если каждой абстрактной сущности этого вида (типа) соответствует единственное представление. Таким образом, копирование представления возвращает нам значение, отвечающее той же самой абстрактной сущности, что и исходное.

Глава 2. Принципы объектно-ориентированного программирования

2.1 Инкапсуляция

В 80-х годах XX века появилась такая парадигма программирования как ООП. Как известно, в процедурных языках программирования данные и инструкции по их обработке существуют отдельно, а в ООП эта информация объединяется в единую сущность. Объектно-ориентированное программирование – это стиль программирования, где программа состоит из компонентов, которые соответствуют объектам реального мира. [1]

На сегодняшний день ООП является востребованным по ряду причин. Одной из них является облегчение установления связи между объектом реального мира и программой так, как это ожидается. Подобное развитие можно заметить по мере того, как множество объектов взаимодействуют друг с другом, а приложение в свою очередь улучшается. Данный подход распределяет ответственность внутри объективного мира, тем самым, позволяя сфокусироваться на осмыслении приложения. Другой важной причиной является классификация объектов. Поскольку мир как реальный, так и виртуальный полон объектов, ими невозможно управлять по отдельности. Потому появляется необходимость в классификации этих объектов (то есть разделение их на классы). Этот способ способствует объединению различных объектов и их свойств. [6]

Объектно-программное программирование имеет свои постулаты. Наследование, полиморфизм и инкапсуляция – главные из них. Основы программирования на языках ООП заключаются в использовании объектов и классов. Инкапсуляция – это способ скрытия внутренних деталей при предоставлении открытого интерфейса к определяемому пользователем типу. [2] То есть пользователь имеет доступ только к интерфейсу объекта. Взаимодействие может происходить непосредственно через этот интерфейс, реализуемый ключевым словом: public. Закрытые данные и методы, реализующиеся посредством ключевых слов: private, protected, internal, пользователю использовать запрещается. Принцип инкапсуляции обеспечивает безопасность данных и методов их реализации от внешних воздействий. Внешними воздействиями могут являться воздействия со стороны других классов, которые не относятся к этому объекту. Данные надежно защищены от несанкционированного доступа извне, при том, что внутри сущности они успешно взаимодействуют друг с другом (рисунок 1).

Рисунок 1 - Пример инкапсуляции

Зачастую сокрытие реализации применяют при [3]:

 предельной локализации изменений (в случае необходимости);

 прогнозируемости изменений (какие изменения необходимо сделать в коде, для заданного изменения функциональности) и прогнозируемости последствий изменений.

2.2 Наследование

Вторым принципом ООП является наследование. Наследование – это способ использования одним классом методов другого класса без повторения их фактической реализации. [4] Иными словами, использование наследования даёт возможность описания нового класса на основе уже существующего (базового) (рисунок 2). Это помогает избавиться от избыточности исходного кода.

Рисунок 2 - Пример наследования

Наследование в Java достигается с помощью ключевых слов «extends» и «implements» (рисунок 3).

Рисунок 3 - Листинг – наследование в Java

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

2.3 Полифорфизм

Третий принцип ООП – полиморфизм. Полиморфизмом называют возможность объектов с одинаковой спецификацией иметь различную реализацию. [5] То есть, можно создать один интерфейс для манипуляции с объектами различной степени сложности (рисунок 4). Этот интерфейс будет по-разному реагировать на события, и в то же время будет происходить правильная реализация поставленных задач.

Рисунок 4 - Пример полиморфизма

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

В программировании полиморфизм может быть воплощен в нескольких местах: классы, методы, операторы. [20]

Рисунок 5 - Листинг полиморфизма в Java

2.4 Абстракция

Последним основным принципом ООП является абстракция. Абстракцией в объектно-ориентированном программировании называют придание объекту характеристик, отличающих его от остальных объектов, конкретно определяя его концептуальные границы. [4] Основной идеей является отделение способа использования составных объектов данных от деталей их реализации в виде более простых объектов (рисунок 6).

Рисунок 6 - Пример абстрагирования

Подобно тому, как функциональная абстракция разделяет способ использования функции и деталей её реализации в терминах более примитивных функций, таким образом, данные обрабатываются функцией высокого уровня с помощью вызова функций низкого уровня (рисунок 7).

Рисунок 7 - Листинг абстрагирования

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

2.5 Другие принципы

Борисова М.В. выделяет следующие принципы, положенные в основу объектно-ориентированного программирования, являются абстрагирование, ограничение доступа, модульность, иерархичность, типизация, параллелизм и устойчивость. [4, с. 37]

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

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

Принцип иерархичности позволяет разработчикам использовать два вида иерархии: иерархия «общее-частное» и иерархия «целое-часть». При использовании иерархии «общее-частное» некоторая абстракция является частным случаем другой абстракции. Например, абстракция «РАБОЧИЙ СТОЛ» является частным случаем абстракции «СТОЛ». Иерархия «целое-часть» используется, когда некоторые абстракции могут включаться в другие как ее части. Например, абстракция «Стол» состоит из абстракций «Столешница» и «Ножки».

Принцип модульности [22] предполагает разработку системы в качестве отдельных модулей. Это упрощает проектирование и отладку программы. Этот принцип унаследован из модульного программирования и позволяет сокращать количество внешних связей между модулями. Принцип типизации предполагает накладывание ограничений на свойства объектов и препятствующее взаимозаменяемости абстракций различных типов. Использование этого принципа обеспечивает раннее обнаружение ошибок, связанных с недопустимыми операциями над объектами; упрощение документирования; возможность генерации более эффективного кода. Принцип параллелизма [1] предполагает возможность находиться в активном состоянии одновременно нескольким абстракциям. Реализация параллелизма возможна двумя способами: либо при использовании многопроцессорных систем, либо за счет разделения времени процессора между разными процессами. Принцип устойчивости предполагает существование абстракции независимо от процесса ее породившего. В рамках этого принципа разделяют временные, локальные, глобальные и сохраняемые объекты.

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

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

Кроме этого, можно в основу объектно-ориентированного программирования взять ограничение доступа, модульность, иерархичность, типизация, параллелизм и устойчивость

Глава 3. Примеры объектно-ориентированного программирования

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

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

Пример 1. Пусть дан автомобиль марки BMW. [5] В данном случае он является объектом программирования, так как у него своя, особая конфигурация, отличающаяся от других машин. Стоит отметить, что каждый автомобиль «BMW» будет являться объектом, порожденным из класса, представленного из всех существующих автомобилей. Каждому классу присущи свои поля и методы. Полем класса считается информация, данные, созданные и используемые при реализации методов класса. Говоря о полях класса, имеются в виду константы и переменные, над которыми производятся действия внутри класса. Значит, полями класса Автомобили является вес, среднюю скорость, расход топлива, вместимость кузова. Говоря о методах класса, имеются в виду функции, работающие как с внешними данными, так и с полями класса. Например, функции автомобиля:

- Добавление пассажира;

- Поменять колесо.

Более того, в ООП существуют ограничения, соответствующие данному стилю и их нарушение может привести к неразборчивому коду. [3] Согласно ООП все данные представляются объектами (а в объектно-ориентированных языках каждая команда представляет собой объект какого-нибудь глобального класса), обменивающимися друг с другом сообщениями. Необходимо добавить, что каждый объект занимает свою область памяти, а также имеет свой тип и может состоять из других объектов, объединяя их атрибуты в композицию. Через объект можно обращаться к открытым атрибутам класса, а также атрибутам объектов, из которых он состоит. Важно понимать, что объекты одного класса должны выполнять схожие действия и придерживаться единой структуры. Заметим, что ООП создано и используется исключительно для упрощения воплощения программной мысли. Многие ошибочно считают, что ООП также предназначено для реализации протоколов и построения процессов, однако реализовать все можно не только с помощью ООП, а, к примеру, в функциональном стиле. Перед тем, как сесть за написание объектно-ориентированного кода необходимо практиковать объектное мышление, ведь именно им определяется сложность системы, которую возможно запрограммировать. [10]

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

Например, в Java объекты описываются так [2, с. 98]:

{ . . . public class MyJavaClass

{ static String str="Hello World!!!"; static void printHelloWorld (String s){ System.out.println(s); }

public static void main(String[] args) { printHelloWorld (str); }} MyJavaClass MyJavaObject; . . .}

В С++, описание объекта выглядит следующим образом:

. . . class MyCppClass { public: std::string fStr; MyCppClass (): fStr("Hello World!!!”) {} void printHelloWorld (){std::cout << fStr<

Пример 3. В.Л. Дмитриев предлагает для изучения ООП применять поэтапный подход к разработке классов (на примере графических объектов – прямоугольников) в среде Delphi, сущность которого заключается в создании и последовательном усовершенствовании класса, что позволяет продемонстрировать преимущества объектно-ориентированного подхода. На каждом этапе создания класса и его экземпляров добавляются новые методы, что позволяет неограниченно усложнять задачу. [9]

Пример 4. Интересный методический прием, который также позволяет показать преимущества ООП, предлагает Д.Н. Лавров [15], решить одну и ту же задачу нахождения корней квадратного уравнения с использованием императивного и объектно-ориентированного подходов. Несмотря на большие затраты времени и сложность, становится понятно, что во втором случае будет намного проще усовершенствовать программу в дальнейшем. [6, с. 179-181]

Хатаева Р.С отмечает в своей работе, что разработка объектно-ориентированных программ состоит из следующих последовательных работ:

- определение основных объектов, необходимых для решения данной задачи;

- определение закрытых данных (данных состояния) для выбранных объектов;

- определение второстепенных объектов и их закрытых данных;

- определение иерархической системы классов, представляющих выбранные объекты;

- определение ключевых сообщений, которые должны обрабатывать объекты каждого класса;

- разработка последовательности выражений, которые позволяют решить поставленную задачу;

- разработка методов, обрабатывающих каждое сообщение;

- очистка проекта, то есть устранение всех вспомогательных промежуточных материалов, использовавшихся при проектировании;

- кодирование, отладка, компоновка и тестирование. [25]

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

Пример 5. Решение задачи полета ядра [12, с. 24] начинается с определения необходимых условий, которые должны быть отображены на экране:

• Положение цели привязать к положению горизонтального скрола (HScroll);

• Задание угла стрельбы привязать к положению вертикального скрола (VScroll);

• Максимально отобразить наиболее важные числовые параметры.

Более подробно, что получается в результате решения этой задачи представлено на рисунке 8.

Рисунок 8 - Решение задачи с ядром

Можно привести большое количество примеров решения математических задач с использованием технологии объектно-ориентированного программирования. Например, задача решения квадратного уравнения, описанная Мухамедзяновым [20], позволяет сделать вывод о необходимости использования объектно-ориентированного программирования. Он дает другой взгляд на математические уравнения, геометрические фигуры и другие математические объекты, которые становятся с точки зрения объектно-ориентированного программирования такими же классами и объектами, как Автомобиль, Студент, Книга. Решение задач из практики математики позволит детально рассмотреть базовые принципы конструирования пользовательских классов в объектно-ориентированном программировании, таких как инкапсуляция, полиморфизм и наследование. [19]

Пример 6. Емельянов Д.А. [10] описывает игры «Шахматы» с использованием объектно-ориентированного программирования. Эта игра дает возможность прекрасно проиллюстрировать возможности современного программирования с использованием объектно-ориентированного подхода. Перед тем как начать создавать программу, сформулируем основные требования, которые необходимо выполнить. Цели и задачи программы будут заключаться в том, чтобы обеспечить:

 создание шахматной доски с буквенно-цифровой разметкой;

 начальную расстановку шахматных фигур на доске;

 реализацию ходов всех шахматных фигур по правилам;

 возможность «срубить» фигуру по правилам;

 счет количества ходов и их очередность;

 обработку ситуаций «ШАХ», «МАТ» и «ПАТ».

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

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

В главе 3 приведены основные примеры применения ООП:

Пример 1 об автомобиле марки BMW - это объект программирования, так как у него своя, особая конфигурация, отличающаяся от других машин.

Пример 2 об описании объектов класса, которые обладают своими личными свойствами и методами.

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

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

Пример 5 описывает задачу полета ядра, и она является описанием объектно-ориентированного подхода.

Пример 6 игры «Шахматы» так же используется объектно-ориентированного программирование.

Итак, в главе 3 приведено достаточное количество разных примеров на ООП.

ЗАКЛЮЧЕНИЕ

Итак, подведем итог курсовой работы.

В первой главе рассматриваются основные понятия ООП, что относится к нему, какие особенности были выделены в работах многих ученых современности.

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

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

На основании этого можно сказать, что объектно-ориентированное программирование (ООП) оперирует сущностями (объектами), конкретными видами и родами (классами, абстрактными классами, интерфейсами).

Каждый из понятий ООП подчиняется определенным принципам:

наследование, например, запоминание той или иной информации, которая была, например, загружена в память искусственного интеллекта;

абстрагирование или понимание общности, как абстрактного явления.

полиморфизм, например, одинаковым объекту выдается разное количество информации, которая ими по-разному воспринимается.

инкапсуляция, т.е. прогноз на будущее, как будет себя вести сущность ООП в той или иной ситуации.

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

Применение ООП многообразно. Если приводить много примеров, то это будет слишком разнообразно. Поэтому можно почитать работы ученых из библиографического списка и понять каждый пример ООП. В курсовой же работе рассмотрены такие объекты программирования, как автомобиль, графические объекты, корни квадратного уравнения, полет ядра, игра «Шахматы». Именно они интересны для всех, кто интересуется ООП.

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

Авдиль С.Л. Основные принципы объектно-ориентированного программирования

Антони Синтес. Освой самостоятельно объектно-ориентированное программирование за 21 день. М.: Вильямс, 2002. - 672 с.

Борисова М.В. Реализация основных объектно-ориетированных принципов в Java // Провинциальные научные записки. ‒ 2018. ‒ №1 (7). ‒ С. 97-101.

  1. Буковски, Е. Инкапсуляция, наследование, полиморфизм [Электронный ресурс] / Е. Буковски. – Режим доступа: http://codrob. ru/lesson/26.

Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений, 3-е изд.: Пер. с англ. / Г. Буч, Роберт А. Максимчук и др. – М.: ООО «И.Д. Вильямс», 2008. – 720 с.

  1. Вайсфельд М. Объектно-ориентированное мышление. / М. Вайфсфельд – СПб: Питер, 2014. – 304 с.

Гради Буч, Роберт А. Максимчук, Майкл У. Энгл, Бобби Дж. Янг, Джим Коналлен, Келли А. Хьюстон. Объектно ориентированный анализ и проектирование с примерами приложений. М.: Вильямс, 2010. 720 c.

Гради Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на С++. - Бином, 1998. - 334 с.

Дмитриев В.Л. Поэтапная разработка классов в среде Delphi при обучении программированию / В.Л. Дмитриев // Смальта. – 2014. – № 3. – С. 70-76.

Емельянов Д. А., Лапенок М. В. Технология объектно-ориентированного программирования в среде Delphi : учебное пособие. Екатеринбург : Изд-во УрГПУ, 2006. 92 с.

Иан Грэхем. Объектно-ориентированные методы. Принципы и практика-3-е изд. М.: Вильямс, 2004. — 880 с.

  1. Информатика. Задачник по моделированию / Под редакцией Макаровой Н.В. – М., 2001.
  2. Информатика и информационные технологии / Под ред. Романовой Ю.Д. ― М.: Эксмо, 2008. ― 592 с.
  3. Использование полиморфизма в объектно-ориентированном программировании [Электронный ресурс]. – Режим доступа: http:// mykonspekts.ru/2-298.html.

Лавров Д.Н. От императивного к объектноориентированному программированию вместе с Java и NetBeans: объектная декомпозиция и инкапсуляция / Д.Н. Лавров // Математические структуры и моделирование. – 2009. – Вып. 20. – С. 178-190.

  1. Meyer B. Touch of class / B. Meyer ― М.: Национальный Открытый Университет «ИНТУИТ»: БИНОМ. Лаборатория знаний, 2011. ― 775 с.
  2. Меняев, М.Ф. Информатика и основы программирования / М.Ф. Меняев. - М.: Омега-Л, 2007. ― 458 с.
  3. Можаров, Р.В., Можарова, Н.Р. Программное обеспечение персональных компьютеров / Р.В. Можаров, Н.Р. Можарова. ― М.: Финстатинформ, 2003. ― 512 с.

Мухаметзянов Р.Р. Высокоуровневые методы информатики и программирования в Delphi: учеб. пособие. — Набережные Челны: ФГБОУ ВПО «НИСПТР», 2013. — 209 с.

Мухаметзянов Р.Р. Объектно-ориентированный подход для изучения массивов // Информатика и образование. - 2013. - №3.

Объектно-ориентированное программирование [Электронный ресурс]: учеб.-метод. комплекс по дисциплине для студентов специальности 230201 "Информационные системы и технологии" всех форм обучения : самост. учеб. электрон. изд. / Сыкт. лесн. ин-т; сост.: Л.Р. Камалова. – Электрон. дан. – Сыктывкар: СЛИ, 2012. – Режим доступа: http://lib.sfi.komi.com. – Загл. с экрана.

Основные принципы ООП: инкапсуляция, наследование, полиморфизм [Электронный ресурс]. – Режим доступа: http://mylektsii. ru/14-6957.html.

  1. Пол, А. Объектно-ориентированное программирование на C++ / А. Пол. – 2-е изд. – М.: Бином, СПб.: Невский Диалект, 2001. – 464 с.
  2. Рахимова, А. Основные принципы ООП и их использование [Электронный ресурс] / А. Рахимова. – Режим доступа: http://fb. ru/article/91926/osnovnyie-printsipyi-oop-i-ih-ispolzovanie.
  3. Хатаева Р.С. Объектно-ориентированное программирование как средство компьютерного моделирования, СПб.: Невский Диалект, 2018. – 464 с.