OOAD - объектная модель
Объектная модель визуализирует элементы программного приложения в виде объектов. В этой главе мы рассмотрим основные концепции и терминологию объектно-ориентированных систем.
Объекты и классы
Концепции объектов и классов неразрывно связаны друг с другом и составляют основу объектно-ориентированной парадигмы.
Объект
Объект - это элемент реального мира в объектно-ориентированной среде, который может иметь физическое или концептуальное существование. У каждого объекта есть -
Идентичность, которая отличает его от других объектов в системе.
Состояние, определяющее характерные свойства объекта, а также значения свойств, которыми обладает объект.
Поведение, которое представляет собой видимые извне действия, выполняемые объектом с точки зрения изменений его состояния.
Объекты можно моделировать в соответствии с потребностями приложения. Объект может существовать физически, например клиент, автомобиль и т. Д .; или нематериальное концептуальное существование, такое как проект, процесс и т. д.
Класс
Класс представляет собой набор объектов с одинаковыми характеристическими свойствами, которые демонстрируют общее поведение. Он дает план или описание объектов, которые могут быть созданы из него. Создание объекта как члена класса называется созданием экземпляра. Таким образом, объект - это экземпляр класса.
Составляющими класса являются -
Набор атрибутов для объектов, которые должны быть созданы из класса. Как правило, разные объекты класса имеют некоторые различия в значениях атрибутов. Атрибуты часто называют данными класса.
Набор операций, отображающих поведение объектов класса. Операции также называются функциями или методами.
Example
Рассмотрим простой класс Circle, представляющий круг геометрической фигуры в двухмерном пространстве. Атрибуты этого класса можно идентифицировать следующим образом -
- x – координата, чтобы обозначить x – координату центра.
- y – координата, чтобы обозначить y – координату центра.
- a, чтобы обозначить радиус круга
Некоторые из его операций можно определить следующим образом:
- findArea (), метод вычисления площади
- findCircumference (), метод вычисления окружности
- scale (), метод увеличения или уменьшения радиуса
Во время создания экземпляра значения присваиваются по крайней мере некоторым атрибутам. Если мы создадим объект my_circle, мы сможем присвоить такие значения, как координата x: 2, координата y: 3 и a: 4, чтобы отобразить его состояние. Теперь, если операция scale () выполняется для my_circle с коэффициентом масштабирования 2, значение переменной a станет 8. Эта операция приводит к изменению состояния my_circle, т. Е. Объект демонстрирует определенное поведение.
Инкапсуляция и скрытие данных
Инкапсуляция
Инкапсуляция - это процесс связывания атрибутов и методов вместе в классе. Благодаря инкапсуляции внутренние детали класса могут быть скрыты извне. Он разрешает доступ к элементам класса извне только через интерфейс, предоставляемый классом.
Скрытие данных
Как правило, класс спроектирован таким образом, что к его данным (атрибутам) можно получить доступ только с помощью методов его класса, и они изолированы от прямого внешнего доступа. Этот процесс изоляции данных объекта называется сокрытием данных или скрытием информации.
Example
В классе Circle скрытие данных можно включить, сделав атрибуты невидимыми извне класса и добавив в класс еще два метода для доступа к данным класса, а именно:
- setValues (), метод присвоения значений координатам x, y и
- getValues (), метод для получения значений координат x, y и
Здесь личные данные объекта my_circle не могут быть доступны напрямую никаким методом, который не инкапсулирован в классе Circle. Вместо этого к нему следует обращаться через методы setValues () и getValues ().
Сообщение передается
Любое приложение требует гармоничного взаимодействия нескольких объектов. Объекты в системе могут связываться друг с другом с помощью передачи сообщений. Предположим, в системе есть два объекта: obj1 и obj2. Объект obj1 отправляет сообщение объекту obj2, если obj1 хочет, чтобы obj2 выполнил один из своих методов.
Особенности передачи сообщений:
- Обмен сообщениями между двумя объектами обычно однонаправленный.
- Передача сообщений обеспечивает все взаимодействия между объектами.
- Передача сообщений по существу включает вызов методов класса.
- В передаче сообщений могут участвовать объекты в разных процессах.
Наследование
Наследование - это механизм, который позволяет создавать новые классы из существующих классов путем расширения и улучшения его возможностей. Существующие классы называются базовыми классами / родительскими классами / суперклассами, а новые классы называются производными классами / дочерними классами / подклассами. Подкласс может наследовать или наследовать атрибуты и методы суперкласса (ов) при условии, что суперкласс позволяет это. Кроме того, подкласс может добавлять свои собственные атрибуты и методы и может изменять любой из методов суперкласса. Наследование определяет отношения «есть - а».
Example
От класса Mammal может быть получен ряд классов, таких как Человек, Кошка, Собака, Корова и т. Д. Люди, кошки, собаки и коровы имеют отличительные характеристики млекопитающих. Кроме того, у каждого есть свои особенности. Можно сказать, что корова - это млекопитающее.
Типы наследования
Single Inheritance - Подкласс происходит от одного суперкласса.
Multiple Inheritance - Подкласс происходит от более чем одного суперкласса.
Multilevel Inheritance - Подкласс является производным от суперкласса, который, в свою очередь, является производным от другого класса и так далее.
Hierarchical Inheritance - У класса есть ряд подклассов, каждый из которых может иметь последующие подклассы, продолжающиеся на нескольких уровнях, чтобы сформировать древовидную структуру.
Hybrid Inheritance - Комбинация множественного и многоуровневого наследования для формирования решетчатой структуры.
На следующем рисунке показаны примеры различных типов наследования.
Полиморфизм
Полиморфизм - это изначально греческое слово, означающее способность принимать множественные формы. В объектно-ориентированной парадигме полиморфизм подразумевает использование операций по-разному, в зависимости от экземпляра, над которым они работают. Полиморфизм позволяет объектам с разной внутренней структурой иметь общий внешний интерфейс. Полиморфизм особенно эффективен при реализации наследования.
Example
Давайте рассмотрим два класса, Circle и Square, каждый из которых имеет метод findArea (). Хотя название и назначение методов в классах одинаковы, внутренняя реализация, т. Е. Процедура вычисления площади, различна для каждого класса. Когда объект класса Circle вызывает свой метод findArea (), операция находит область круга без какого-либо конфликта с методом findArea () класса Square.
Обобщение и специализация
Обобщение и специализация представляют собой иерархию отношений между классами, где подклассы наследуются от суперклассов.
Обобщение
В процессе обобщения общие характеристики классов объединяются, чтобы сформировать класс на более высоком уровне иерархии, т. Е. Подклассы объединяются, чтобы сформировать обобщенный суперкласс. Он представляет собой отношения «есть - вид». Например, «автомобиль - это вид наземного транспортного средства» или «корабль - это вид водного транспорта».
Специализация
Специализация - это процесс, обратный обобщению. Здесь отличительные особенности групп объектов используются для формирования специализированных классов из существующих классов. Можно сказать, что подклассы являются специализированными версиями суперкласса.
На следующем рисунке показан пример обобщения и специализации.
Ссылки и ассоциации
Ссылка
Ссылка представляет собой соединение, посредством которого объект взаимодействует с другими объектами. Рамбо определил это как «физическую или концептуальную связь между объектами». Посредством ссылки один объект может вызывать методы или перемещаться по другому объекту. Ссылка отображает отношения между двумя или более объектами.
Ассоциация
Ассоциация - это группа ссылок, имеющих общую структуру и общее поведение. Ассоциация отображает отношения между объектами одного или нескольких классов. Ссылку можно определить как экземпляр ассоциации.
Степень ассоциации
Степень ассоциации означает количество классов, участвующих в соединении. Степень может быть унарной, двоичной или троичной.
А unary relationship связывает объекты одного класса.
А binary relationship связывает объекты двух классов.
А ternary relationship связывает объекты трех и более классов.
Коэффициенты мощности ассоциаций
Мощность двоичной ассоциации обозначает количество экземпляров, участвующих в ассоциации. Есть три типа коэффициентов мощности, а именно -
One–to–One - Один объект класса A связан с одним объектом класса B.
One–to–Many - Один объект класса A связан со многими объектами класса B.
Many–to–Many - Объект класса A может быть связан со многими объектами класса B, и, наоборот, объект класса B может быть связан со многими объектами класса A.
Агрегация или состав
Агрегация или композиция - это отношения между классами, с помощью которых класс может состоять из любой комбинации объектов других классов. Он позволяет размещать объекты непосредственно в теле других классов. Агрегация называется отношением «часть из» или «имеет» с возможностью перехода от целого к его частям. Агрегатный объект - это объект, состоящий из одного или нескольких других объектов.
Example
В отношении «автомобиль имеет двигатель», автомобиль - это целый объект или совокупность, а двигатель - это «часть» автомобиля. Агрегация может обозначать -
Physical containment - Например, компьютер состоит из монитора, процессора, мыши, клавиатуры и так далее.
Conceptual containment - Например, у акционера - акция.
Преимущества объектной модели
Теперь, когда мы рассмотрели основные концепции, относящиеся к объектной ориентации, стоит отметить преимущества, которые может предложить эта модель.
Преимущества использования объектной модели:
Это помогает ускорить разработку программного обеспечения.
Легко обслуживать. Предположим, что в модуле возникла ошибка, тогда программист может исправить этот конкретный модуль, в то время как другие части программного обеспечения все еще работают.
Он поддерживает относительно простые обновления.
Это позволяет повторно использовать объекты, конструкции и функции.
Это снижает риски разработки, особенно при интеграции сложных систем.