Файл: Основные понятия объектно-ориентированного программирования.pdf
Добавлен: 03.04.2023
Просмотров: 355
Скачиваний: 2
СОДЕРЖАНИЕ
1. Основные понятия объектно-ориентированного подхода
1.1. Объектно-ориентированный класс
1.7.3 Объектно-ориентированная модель проектирования
2. Разработка интернет магазина с помощью объектно-ориентированного подхода
2.1 Выбранное средство для моделирования
2.2 Преимущества Rational Rose
2.3. Анализ предметной области
2.4.1. Диаграмма вариантов использования
2.4.2 Диаграмма последовательности по решаемой задаче
2.4.3 Диаграмма деятельности по решаемой задаче
2.4.4 Диаграмма состояний по решаемой задаче
Введение
Объектно-ориентированное программирование (ООП) - это термин, используемый для описания подхода к программированию, основанного на объектах и классах. Объектно-ориентированная парадигма позволяет нам организовывать программное обеспечение как совокупность объектов, состоящих как из данных, так и из поведения. Это в отличие от обычной практики функционального программирования, которая лишь слабо связывает данные и поведение.
С 1980-х годов слово «объект» появилось по отношению к языкам программирования, причем почти все языки, разработанные с 1990 года, обладают объектно-ориентированными функциями. Некоторые языки даже имеют объектно-ориентированные функции, встроенные в ретро. Широко признано, что объектно-ориентированное программирование является наиболее важным и мощным способом создания программного обеспечения.
Подход объектно-ориентированного программирования поощряет:
1. Модуляризацию, где приложение может быть разложено на модули.
2. Повторное использование программного обеспечения: где приложение может быть составлено из существующих и новых модулей.
Объектно-ориентированный язык программирования обычно содержит пять основных элементов:
1. Классы.
2. Объекты.
2. Инкапсуляция.
3. Полиморфизм.
4. Наследование.
Предметом исследования в данной курсовой работе является объектно-ориентированный подход, используемый при построении различных приложений.
Целью данной курсовой работы является изучение понятий объектно-ориентированного программирования.
Для выполнения данной цели, необходим решить следующие задачи:
1. Изучить теорию ООП.
2. Применить данный подход на реальной задаче, а именно спроектировать небольшое приложение и реализовать его.
1. Основные понятия объектно-ориентированного подхода
1.1. Объектно-ориентированный класс
Если мы подумаем об объекте реального мира, таком как телевизор (как на рисунке 1), он будет иметь несколько функций и свойств:
1. Нам не нужно вскрывать телевизор для его использования.
2. У нас есть некоторые элементы управления, чтобы использовать его (кнопки на телевизоре или пульт дистанционного управления).
3. Мы все еще можем понять концепцию телевизора, даже если он подключен к DVD-плееру.
4. Когда мы приобретаем телевизор, то он хорошо укомплектован и имеется соответствующая документация.
5. Телевизор не сломается!
Во многих отношениях это очень хорошо сравнивается с понятием класса.
Рисунок - Понятие класса – телевизор в качестве примера
Класс должен:
1. Предоставьте четко определенный интерфейс - например, пульт дистанционного управления телевизором.
2. Представлять четкую концепцию – например, концепцию телевидения.
3. Быть укомплектованным и хорошо задокументированным – у телевизора должна быть вилка и руководство, которое документирует все функции.
4. Код должен быть надежным - он не должен падать, как телевизор.
С функциональным языком программирования (например, C) мы бы разбросали составные части телевизора повсюду, и мы были бы ответственны за то, чтобы они работали правильно.
Классы позволяют нам представлять сложные структуры в языке программирования. У них есть два компонента:
Свойства – это значения, которые имеет объект.
Методы – это способы, которыми объект может взаимодействовать со своими данными, действиями.
Обозначение, используемое на рисунке 2 справа, представляет собой представление Телевизора диаграммы UML для класса объектно-ориентированного моделирования и программирования.
Экземпляр класса называется объектом.
Рисунок – Пример класса
1.2. Объект
Объект является экземпляром класса. Вы можете рассматривать класс как описание концепции, а объект – как реализацию этого описания, чтобы создать независимую различимую сущность. Например, в случае телевидения класс – это набор планов (или чертежей) для общего телевидения, тогда как телевизионный объект - это реализация этих планов в реальном физическом телевидении. Таким образом, будет один набор планов (класс), но могут быть тысячи реальных телевизоров (объектов).
Объекты могут быть конкретными (объект реального мира, файл на компьютере) или могут быть концептуальными (например, структура базы данных), каждый из которых имеет свою индивидуальную индивидуальность. На рисунке 3 показан пример, в котором описание класса реализовано в нескольких телевизионных объектах. Эти объекты должны иметь свою индивидуальность и быть независимыми друг от друга. Например, если канал меняется на одном телевизоре, он не будет меняться на других телевизорах.
Рисунок – Пример класса и объектов
1.3. Инкапсуляция
Объектно-ориентированная парадигма поощряет инкапсуляцию. Инкапсуляция используется, чтобы скрыть механику объекта, позволяя скрыть фактическую реализацию объекта, поэтому нам не нужно понимать, как работает объект. Все, что нам нужно понять, это интерфейс, который предоставляется для нас.
Вы можете подумать об этом в случае Television класса, где функциональность телевизора скрыта от нас, но нам предоставляется пульт дистанционного управления или набор средств управления для взаимодействия с телевизором, обеспечивающий высокий уровень абстракции. Таким образом, как и на рисунке 4, нет необходимости понимать, как сигнал декодируется с антенны и преобразуется в изображение для отображения на экране, прежде чем вы сможете использовать телевизор.
Существует подмножество функциональных возможностей, которые пользователю разрешено вызывать, называемое интерфейсом. В случае телевизора, это была бы функциональность, которую мы могли бы использовать через пульт дистанционного управления или кнопки на передней панели телевизора.
Полная реализация класса - это сумма открытого интерфейса плюс частная реализация.
Рисунок – Пример интерфейса
Инкапсуляция - это термин, используемый для описания способа отделения интерфейса от реализации. Вы можете думать о инкапсуляции как о «сокрытии данных», позволяющем видеть определенные части объекта, в то время как другие части остаются скрытыми. Это имеет преимущества как для пользователя, так и для программиста.
Для пользователя (который может быть другим программистом):
- Пользователю нужно только понять интерфейс.
- Пользователь не должен понимать, как реализация работает или была создана.
Для программиста:
- Программист может изменить реализацию, но не должен уведомлять пользователя.
Таким образом, при условии, что программист не изменяет интерфейс каким-либо образом, пользователь не будет знать о каких-либо изменениях, за исключением, возможно, незначительного изменения в реальной функциональности приложения.
Мы можем определить уровень «прячась» конкретных методов или состояний в пределах одного класса, используя public, private и protected ключевые слова:
1. public методы - описывают интерфейс.
2. private методы - описывают реализацию.
На рисунке 5 показана инкапсуляция в отношении Television класса. Согласно нотации UML, частные методы обозначаются знаком минус, а открытые методы обозначаются знаком плюс. Приватные методы – это написанные методы, которые являются частью внутренней работы телевидения, но не должны быть понятны пользователю. Например, пользователь должен будет вызвать powerOn() метод, но частный displayPicture() метод также будет вызван, но внутри, как требуется, а не напрямую пользователем. Поэтому этот метод не добавляется в интерфейс, а скрывается внутри реализации с использованием private ключевого слова.
Рисунок – Пример класса, показывающего инкапсуляцию
1.4 Наследование
Если у нас есть несколько описаний с некоторой общностью между этими описаниями, мы можем сгруппировать описания и их общность, используя наследование, чтобы обеспечить компактное представление этих описаний. Подход объектно-ориентированного программирования позволяет нам группировать общие черты и создавать классы, которые могут описывать их отличия от других классов.
Люди используют эту концепцию в категоризации объектов и описаний. Например, вы, возможно, ответили на вопрос - «Что такое утка?», С «птицей, которая плавает», или, еще точнее, «птицей, которая плавает, с перепончатыми ногами и счетом вместо клюва». Таким образом, мы можем сказать, что утка - это птица, которая плавает, поэтому мы могли бы описать это как на рисунке 6. Этот рисунок иллюстрирует отношения наследования между a Duck и a Bird. По сути, мы можем сказать, что Duck это особый тип Bird.
Рисунок – Класс, демонстрирующий наследование
Например: если нужно было дать неструктурированную группу описаний, таких как «Автомобиль», «Салон», «Универсал», «Фургон», «Автомобиль», «Мотоцикл» и «Скутер», и попросить упорядочить эти описания по их различиям. Вы можете сказать, что автомобиль Saloon - это Автомобиль, но имеет длинный багажник, тогда как автомобиль-универсал - это автомобиль с очень большим багажником. На рисунке 7 показан пример того, как мы можем организовать эти описания, используя наследование.
Рисунок – Сгруппированный набор классов
Таким образом, мы можем описать это отношение как отношение ребенок / родитель, где рисунок 8 иллюстрирует отношение между базовым классом и производным классом. Производный класс наследует от базового класса, поэтому на рисунке 7 Car класс является дочерним по отношению к Vehicle классу, поэтому Car наследуется от Vehicle.
Рисунок - Базовый класс и Производный класс
Один из способов определить, правильно ли вы организовали свои классы, - это проверить их с помощью проверок отношений «IS-A» и «IS-A-PART-OF». Легко спутать объекты внутри класса и потомков классов, когда вы впервые начинаете программирование с методологией ООП. Итак, чтобы проверить предыдущие отношения между Car и Vehicle, мы можем увидеть это на рисунке 9.
Рисунок 9 - Отношения IS-A / IS-A-PART-OF и Vehicle класс
1.5 Полиморфизм
Когда класс наследует от другого класса, он наследует как состояния, так и методы этого класса, поэтому в случае, когда Car класс наследует от Vehicle класса, Car класс наследует методы Vehicle класса, такие как engineStart(), gearChange() и lightsOn() и т.д. Car класс также наследует состояния Vehicle класса, такие как isEngineOn, isLightsOnи numberWheels и т. д.
Полиморфизм означает «множественные формы». В ООП эти множественные формы относятся к нескольким формам одного и того же метода, где одно и то же имя метода может использоваться в разных классах или одно и то же имя метода может использоваться в одном и том же классе с немного отличающимися параметрами. Существует две формы полиморфизма: перегрузка и переопределение.
1.5.1 Переопределение методов
Как уже говорилось, производный класс наследует свои методы от базового класса. Может потребоваться переопределить унаследованный метод, чтобы обеспечить определенное поведение для производного класса - и тем самым изменить реализацию. Итак, переопределение – это термин, используемый для описания ситуации, когда одно и то же имя метода вызывается для двух разных объектов, и каждый объект реагирует по-разному.
Переопределение позволяет использовать в коде различные типы объектов, которые имеют общее поведение, для которого требуется только такое общее поведение.
Рисунок – Переопределение метода
Рассмотрим предыдущий пример Vehicle диаграммы классов на рисунке 7. В этом случае Car наследуется от Vehicle и от этого класса, Car существуют дополнительные производные классы SaloonCar и EstateCar. Если draw()метод добавлен к Car классу, это необходимо для рисования общего автомобиля. Этот метод не сможет адекватно нарисовать универсал или другие детские классы. Over-Riding позволяет нам написать специализированный draw() метод для EstateCar класса. Нет необходимости писать новый draw() метод для SaloonCar класса, поскольку Car класс предоставляет достаточно подходящий draw() метод. Все, что нам нужно сделать, это написать новый draw() метод в EstateCar классе с точно таким же именем метода. Итак, Over-Riding позволяет: