Учебники

OOAD — объектная модель

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

Объекты и Классы

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

объект

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

  • Идентичность, которая отличает его от других объектов в системе.

  • Состояние, определяющее характерные свойства объекта, а также значения свойств, которые содержит объект.

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

Идентичность, которая отличает его от других объектов в системе.

Состояние, определяющее характерные свойства объекта, а также значения свойств, которые содержит объект.

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

Объекты могут быть смоделированы в соответствии с потребностями приложения. Объект может иметь физическое существование, например, клиент, автомобиль и т. Д .; или нематериальное концептуальное существование, такое как проект, процесс и т. д.

Учебный класс

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

Составляющие класса —

  • Набор атрибутов для объектов, которые должны быть созданы из класса. Как правило, разные объекты класса имеют некоторые различия в значениях атрибутов. Атрибуты часто называют данными класса.

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

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

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

пример

Рассмотрим простой класс Circle, представляющий круг геометрической фигуры в двумерном пространстве. Атрибуты этого класса могут быть определены следующим образом:

  • х – координата, для обозначения х – координаты центра
  • у – координата, для обозначения у – координата центра
  • а, чтобы обозначить радиус круга

Некоторые из его операций могут быть определены следующим образом:

  • findArea (), метод для расчета площади
  • findCircumference (), метод для вычисления окружности
  • scale (), метод увеличения или уменьшения радиуса

Во время создания экземпляра значения присваиваются хотя бы для некоторых атрибутов. Если мы создаем объект my_circle, мы можем присвоить значения, такие как x-коорди- наты: 2, y-координаты: 3 и a: 4, чтобы отобразить его состояние. Теперь, если операция scale () выполняется для my_circle с коэффициентом масштабирования 2, значение переменной a станет равным 8. Эта операция приводит к изменению состояния my_circle, т. Е. Объект демонстрирует определенное поведение.

Инкапсуляция и сокрытие данных

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

Инкапсуляция — это процесс связывания атрибутов и методов вместе в классе. Благодаря инкапсуляции внутренние детали класса могут быть скрыты снаружи. Он разрешает доступ к элементам класса извне только через интерфейс, предоставляемый классом.

Скрытие данных

Как правило, класс спроектирован так, что его данные (атрибуты) могут быть доступны только его методам класса и изолированы от прямого доступа извне. Этот процесс изоляции данных объекта называется сокрытием данных или сокрытием информации.

пример

В классе Circle можно скрыть данные, сделав атрибуты невидимыми вне класса и добавив в класс еще два метода для доступа к данным класса, а именно:

  • setValues ​​(), метод для присвоения значений x-координатам, y-координатам и
  • getValues ​​(), метод для получения значений x-координаты, y-координаты и

Здесь закрытые данные объекта my_circle не могут быть доступны напрямую любым методом, который не инкапсулирован в классе Circle. Вместо этого к нему следует обращаться через методы setValues ​​() и getValues ​​().

Передача сообщений

Любое приложение требует, чтобы несколько объектов взаимодействовали гармонично. Объекты в системе могут взаимодействовать друг с другом с помощью передачи сообщений. Предположим, что система имеет два объекта: obj1 и obj2. Объект obj1 отправляет сообщение объекту obj2, если obj1 хочет, чтобы obj2 выполнил один из своих методов.

Особенности передачи сообщений —

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

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

Наследование — это механизм, который позволяет создавать новые классы из существующих классов, расширяя и совершенствуя его возможности. Существующие классы называются базовыми классами / родительскими классами / суперклассами, а новые классы называются производными классами / дочерними классами / подклассами. Подкласс может наследовать или получать атрибуты и методы суперкласса (ов) при условии, что суперкласс позволяет это. Кроме того, подкласс может добавлять свои собственные атрибуты и методы и может модифицировать любой из методов суперкласса. Наследование определяет отношение «есть».

пример

Из класса млекопитающих может быть получен ряд классов, таких как человек, кошка, собака, корова и т. Д. Люди, кошки, собаки и коровы имеют отличительные характеристики млекопитающих. Кроме того, у каждого есть свои особенности. Можно сказать, что корова — это млекопитающее.

Типы Наследования

  • Одиночное наследование — подкласс происходит от одного суперкласса.

  • Множественное наследование — подкласс происходит от нескольких суперклассов.

  • Многоуровневое наследование — подкласс наследуется от суперкласса, который, в свою очередь, наследуется от другого класса и так далее.

  • Иерархическое наследование — класс имеет несколько подклассов, каждый из которых может иметь последующие подклассы, продолжающиеся в течение ряда уровней, чтобы сформировать древовидную структуру.

  • Гибридное наследование — комбинация множественного и многоуровневого наследования для формирования решетчатой ​​структуры.

Одиночное наследование — подкласс происходит от одного суперкласса.

Множественное наследование — подкласс происходит от нескольких суперклассов.

Многоуровневое наследование — подкласс наследуется от суперкласса, который, в свою очередь, наследуется от другого класса и так далее.

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

Гибридное наследование — комбинация множественного и многоуровневого наследования для формирования решетчатой ​​структуры.

На следующем рисунке изображены примеры различных типов наследования.

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

Полиморфизм

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

пример

Давайте рассмотрим два класса, Circle и Square, каждый из которых имеет метод findArea (). Хотя имя и назначение методов в классах одинаковы, внутренняя реализация, т. Е. Процедура вычисления площади, различна для каждого класса. Когда объект класса Circle вызывает свой метод findArea (), операция находит область круга без какого-либо конфликта с методом findArea () класса Square.

Обобщение и специализация

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

Обобщение

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

специализация

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

На следующем рисунке показан пример обобщения и специализации.

специализация

Ссылки и ассоциации

Ссылка на сайт

Ссылка представляет собой соединение, посредством которого объект взаимодействует с другими объектами. Рамбо определил это как «физическую или концептуальную связь между объектами». Через ссылку один объект может вызывать методы или перемещаться по другому объекту. Ссылка отображает отношения между двумя или более объектами.

ассоциация

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

Степень ассоциации

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

  • Унарные отношения связывают объекты одного класса.

  • Бинарные отношения связывают объекты двух классов.

  • Тройные отношения связывают объекты трех или более классов.

Унарные отношения связывают объекты одного класса.

Бинарные отношения связывают объекты двух классов.

Тройные отношения связывают объекты трех или более классов.

Коэффициент кардинальности ассоциаций

Мощность бинарной ассоциации обозначает количество экземпляров, участвующих в ассоциации. Существует три типа коэффициентов кардинальности, а именно:

  • Один-к-одному — один объект класса A связан с одним объектом класса B.

  • Один-ко-многим — один объект класса A связан со многими объектами класса B.

  • Многие ко многим — объект класса A может быть связан со многими объектами класса B, и наоборот, объект класса B может быть связан со многими объектами класса A.

Один-к-одному — один объект класса A связан с одним объектом класса B.

Один-ко-многим — один объект класса A связан со многими объектами класса B.

Многие ко многим — объект класса A может быть связан со многими объектами класса B, и наоборот, объект класса B может быть связан со многими объектами класса A.

Агрегация или состав

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

пример

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

  • Физическое ограничение — например, компьютер состоит из монитора, процессора, мыши, клавиатуры и т. Д.

  • Концептуальное сдерживание — пример, акционер имеет долю.

Физическое ограничение — например, компьютер состоит из монитора, процессора, мыши, клавиатуры и т. Д.

Концептуальное сдерживание — пример, акционер имеет долю.

Преимущества объектной модели

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

Преимущества использования объектной модели:

Это помогает в более быстрой разработке программного обеспечения.

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

Он поддерживает относительно беспроблемные обновления.

Это позволяет повторно использовать объекты, проекты и функции.

Это снижает риски развития, особенно при интеграции сложных систем.