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

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 02.04.2023

Просмотров: 302

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Var

Alocation : Location;

Apoin : Point;

Acircle : Circle;

Alocation :=oint

Apoint :=crcle;

Alocation :=circle;

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

Классы в ООП

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

Когда Вы переходите от процедурных языков (Си, Pascal, Basic) к объектно-ориентированным (C#, Java, C++), первое, что вам нужно сделать – это сломать своё мышление относительно того, что программирование – это написание функций и их последовательный вызов в некоторой главной (main). В рамках ООП вам придётся мыслить более абстрактно и работать с классами, которые являются воплощением объектов реального мира. Казалось бы, почему мыслить в рамках реальных объектов – это значит мыслить более абстрактно?

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

Обьект в ООП

Вы отлично потрудились и машины, разработанные по вашим чертежам, сходят с конвейера. Вот они, стоят ровными рядами на заводском дворе. Каждая из них точно повторяет ваши чертежи. Все системы взаимодействуют именно так, как вы спроектировали. Но каждая машина уникальна. Они все имеют номер кузова и двигателя, но все эти номера разные, автомобили различаются цветом, а некоторые даже имеют литьё вместо штампованных дисков. Эти автомобили, по сути, являются объектами вашего класса.

Объект (экземпляр) – это отдельный представитель класса, имеющий конкретное состояние и поведение, полностью определяемое классом.

Говоря простым языком, объект имеет конкретные значения атрибутов и методы, работающие с этими значениями на основе правил, заданных в классе. В данном примере, если класс – это некоторый абстрактный автомобиль из «мира идей», то объект – это конкретный автомобиль, стоящий у вас под окнами.


Ниже приведена Таблица со всеми выше перечисленными свойствами.

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

Описание свойств

1. Наследование

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

2.Инкапсуляция данных

это и есть объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются полями объекта, а алгоритмы - объектными методами.

3. Полиморфизм

это способность обьекта использовать методы производного класса, который не существует на момент создания базового

4.Абстракция данных

это способ выделить набор значимых характеристик объекта , исключая из рассмотрения не значимых.

5.Классы

это способ описания сущности, определяющий состояние и поведение, зависящее от этого состояния, а также правила для взаимодействия с данной сущностью (контракт).

6.Обьект

это отдельный представитель класса, имеющий конкретное состояние и поведение, полностью определяемое классом.

Глава 2

Виртуальные методы ООП

Наследование позволяет создавать иерархические, связанные отношениями подчинения, структуры данных. Следует, однако, заметить, что при использовании этой возможности могут возникнуть проблемы. Предположим, что в нашей графической программе необходимо определить объект Circle, который является потомком другого объекта Point:

Type

Circle =bject (point)

Radius: Integer;

Procedure Show;

Procedure Hide;

Procedure Expand(ExpandBy: Integer);

Procedure Contact(ContactBy: Integer);

End;

Новый объект Circle соответствует окружности. Поскольку свойства окружности отличаются от свойств точки, в объекте-наследнике придется изменять процедуры Show и Hide, которые отображают окружность и удаляют её изображение с экрана. Может оказаться, что метод Init (см. предыдущий пример) объекта Circle, унаследованный от объекта Point, также использует методы Show и Hide, впредь во время трансляции объекта Point использует ссылки на старые методы. Очевидно в объекте Circle они работать не будут.

Можно, конечно, попытаться «перекрыть» метод Init. Чтобы это сделать, нам придётся полностью воспроизвести текст метода. Это усложни работу, да и не всегда возможно, поскольку исходного текста программы может не оказаться под рукой (если объект-родитель уже находиться в оттранслированном модуле).


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

Чтобы использовать виртуальный метод, необходимо в описании объекта после заголовка метода добавить ключевое слово virtual. Заголовки виртуальных методов родителя и наследника должны в точности совпадать. Инициализация экземпляра объекта, имеющего виртуальные методы, должна выполняться с помощью специального метода - конструктора. Конструктор обычно присваивает полям объекта начальные значения и выполняет другие действия по инициализации объекта. В заголовке метода-конструктора слово procedure заменяется словом constructor. Действия обратные действиям конструктора, выполняет ещё один специальный метод - деструктор. Он описывается словом destructor.

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

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

Заметим, что конструктор или деструктор, могут быть «пустыми», то есть не содержать операторов. Весь необходимый код в этом случае создается при трансляции ключевых слов construct и destruct

Динамическое создание объектов

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


New(P, Construct)

или

Dispose(P, Destruct)

Где P - указатель на переменную объектного типа, а Construct или

Destruct - конструктор и деструктор этого типа.

Действие процедуры New в случае расширенного синтаксиса равносильно действию следующей пары операторов:

New(P);

P^.Construct;

Эквивалентом Dispose является следующее:P^Dispose;

Dispose(P)

Применение расширенного синтаксиса не только улучшает читаемость исходного кода, но и генерирует более короткий и эффективный исполняемый код.

Вывод

Исходя из информации что была приведена в моей курсовой работе то

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

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

Классы объектов часто удобно строить так, чтобы они образовывали иерархическую структуру. Например, класс “Студент”, описывающий абстрактного студента, может служить основой для построения классов “Студент 1 курса”, “Студент 2 курса” и т.д., которые обладают всеми свойствами студента вообще и некоторыми дополнительными свойствами, характеризующими студента конкретного курса. При разработке интерфейса с

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

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

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


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

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

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

Список используемой литературы

1. Богатырев Р. Природа и эволюция сценарных языков // МИР ПК - ДИСК. - 2011. - № 1.

2. Альтшуллер, Г.С. Поиск новых идей: от озарения к технологии (теория и практика решения изобретательских задач) / Г.С. Альтшуллер, Б.Л. Злотин, А.В. Зусман. - Кишинев: Картя Молдове-няскэ, 2010. - 111 с.

3. Бадд, Т. Объектно-ориентированное программирование в действии / Т. Бадд. - СПб.:

4. Буч, Г. Объектно-ориентированный анализ и проектирование с примерами приложений на C++ / Г. Буч; пер. с англ. И. Романовский, Ф. Андреев. - М.: Бином, 2012. - 560 с.

5. Головач В. Дизайн пользовательского интерфейса. - 2012.

6. Дал, У.И. Симула-67: Универсальный язык программирования / У.И. Дал, Б. Мюрхауг, К. Нюгорд; пер. с англ. К.С. Кузьмина, Е.И. Яковлева. - М.: Мир, 2011. - 100 с.

7. Казакова А.Е. Методологические основания развития языков программирования: диссертация по ВАК 09.00.08. - М., 2008. - Режим доступа: dissertCat.com.

8. Лутц, М. Изучаем Python / М. Лутц; пер. с англ. А. Киселев. - 4-е изд. - СПб.: Символ-Плюс, 2011. - 1280 с.

9. Акашева С.А., Балса А.Р. Парадигмы программирования как инструменты разработчика программных систем // Информационные технологии и системы: межвузовский сборник научных трудов. Выпуск 1 (12). - СПб., 2014.

10. Себеста, Р.У. Основные концепции языков программирования / Р.У. Себеста. - 5-е изд. - М.: Издательский дом «Вильямс», 2011. - 672 с.

11. Страуструп, Б. Дизайн и эволюция С++ / Б. Страуструп. - СПб.: ДМК Пресс, 2010. - 445 с.

12. Теслер Г.С. Новая кибернетика. - Киев: Логос, 2004. - Режим доступа: immsp.kiev.ua