Главная страница
Навигация по странице:

  • Индивидуальность

  • Класс

  • Виды отношений между классами

  • лекция. Сборник лекций по МДК _Технология разработки программного обеспе. Курс лекций для специальности спо базовой подготовки


    Скачать 4.41 Mb.
    НазваниеКурс лекций для специальности спо базовой подготовки
    Анкорлекция
    Дата02.09.2022
    Размер4.41 Mb.
    Формат файлаdocx
    Имя файлаСборник лекций по МДК _Технология разработки программного обеспе.docx
    ТипКурс лекций
    #660044
    страница40 из 62
    1   ...   36   37   38   39   40   41   42   43   ...   62

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


    Объекты — конкретные сущности, которые существуют во времени и пространстве.

    Общая характеристика объектов

    Объект — это конкретное представление абстракции.

    Объект обладает:

    • индивидуальностью;

    • состоянием;

    • поведением.

    Структура и поведение подобных объектов определены в их общем классе.



    Рис. 1. Характеристики объекта - стула

    Термины "экземпляр класса" и "объект" взаимозаменяемы.

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

    Состояние объекта характеризуется перечнем всех свойств объекта и текущими значениями каждого из этих свойств.

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

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

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

    Виды операций клиента над объектом:

    1. модификатор (изменяет состояние объекта);

    2. cелектор (дает доступ к состоянию, но не изменяет его);

    3. итератор (доступ к содержанию объекта по частям, в строго определенном порядке);

    4. конструктор (создает объект и инициализирует его состояние);

    5. деструктор (разрушает объект и освобождает занимаемую им память).

     

    Табл. 1.




    Вид операции

    Пример операции

    Модификатор

    пополнеть (кг)

    Селектор

    какойВес():integer

    Итератор

    показатьАссортиментТоваров():string

    Конструктор

    создатьРобот(параметры)

    Деструктор

    уничтожитьРобот()




    В объектно-ориентированных языках программирования операции объявляются как методы — элементы классов, экземплярами которых являются объекты. Гибридные языки (C++, Ada 95) позволяют писать операции как свободные подпрограммы (вне классов). Методы и свободные подпрограммы, ассоциированные с конкретным объектом, образуют его протокол. Таким образом, протокол определяет оболочку допустимого поведения объекта и заключает в себе цельное (статическое и динамическое) представление объекта.

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



    Рис. 2. Протокол объектов

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

    По аналогии с автоматами выделяют:

    1. активные объекты (самостоятельное поведение);

    2. пассивные объекты (поведение по заказу).

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

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

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

    Виды отношений между объектами:

    1. Связь;

    2. Агрегация.

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

    Связь обозначает соединение, с помощью которого:

    • объект-клиент вызывает операции объекта-поставщика;

    • один объект перемещает данные к другому объекту.

    Объект может играть одну из трех ролей:

    1. актер — объект, который может воздействовать на другие объекты, но никогда не подвержен воздействию других объектов;

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

    3. агент — объект, который может как воздействовать на другие объекты, так и использоваться ими. Агент создается для выполнения работы от имени актера или другого агента.



    Рис. 3. Роли

    Для того чтобы объект А мог послать сообщение в объект В, надо, чтобы В был виден для А.

    Формы видимости между объектами:

    1. Объект-поставщик (сервер) глобален для клиента.

    2. Объект-поставщик (сервер) является параметром операции клиента.

    3. Объект-поставщик (сервер) является частью объекта-клиента.

    4. Объект-поставщик (сервер) является локально объявленным объектом в операции клиента.

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

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



    Рис. 4. Перемещение от целого (агрегата) к его частям (свойствам).

    Агрегация может обозначать, а может и не обозначать физическое включение части в целое. Студент и Преподаватель являются элементами Вуза, но они не входят в него физически. В этом случае говорят, что части включены в агрегат по ссылке (рис. 5).



    Рис. 5. Агрегация по ссылке

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

    Класс — это абстракция существенных характеристик объекта. Любой объект - экземпляр класса.

     

    Общая характеристика классов

    Класс — описание множества объектов, которые разделяют одинаковые свойства, операции, отношения и семантику (смысл).



    Рис. 6. Класс

    Различают внутреннее представление класса (реализацию) и внешнее представление класса (интерфейс).

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

    Интерфейс состоит из:

    • объявлений всех операций, применимых к экземплярам класса;

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

    Интерфейс разделен на 3 части:

    1. публичную (public), объявления которой доступны всем клиентам;

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

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

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

     

    Виды отношений между классами

    Классы, как и объекты, существуют во взаимосвязи и формируют структуры из классов системы с помощью отношений:

    • ассоциация (фиксирует структурные отношения — связи между экземплярами классов);

    • зависимость (отображает влияние одного класса на другой класс);

    • обобщение-специализация ("is а"-отношение);

    • целое-часть ("part оf"-отношение).

    Большинство объектно-ориентированных языков программирования поддерживает следующие отношения:

    1. ассоциацию;

    2. наследование;

    3. агрегацию;

    4. зависимость;

    5. конкретизацию;

    6. метакласс;

    7. реализацию;

    8. полиморфизм.

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

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

    Ассоциация обозначает семантическое соединение классов.

    Пример: в системе обслуживания читателей имеются две ключевые абстракции — Книга и Библиотека.

    Класс Книга играет роль элемента, хранимого в библиотеке.

    Класс Библиотека играет роль хранилища для книг.



    Рис. 7. Пример

    Ассоциация предполагает двухсторонние отношения:

    • для данного экземпляра Книги выделяется экземпляр Библиотеки, обеспечивающий ее хранение;

    • для данного экземпляра Библиотеки выделяются все хранимые Книги.

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

    Мощность ассоциации бывает одного из трех типов:

    1. один-к-одному;

    2. один-ко-многим;

    3. многие-ко-многим.



    Рис. 8. Типы мощности

    Наследование — это отношение, при котором один класс разделяет структуру и поведение, определенные в одном другом (простое наследование) или во многих других (множественное наследование) классах.

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

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

    Агрегация. Отношения агрегации между классами аналогичны отношениям агрегации между объектами.

    Пример агрегации по ссылке и по величине (композиции) (рис. 9):

    класс-агрегат Дом и класс-агрегат Окно, причем указаны роли и множественность частей агрегата.



    Рис. 9. Пример

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



    Рис. 10. Зависимость

    Конкретизация - процесс наполнения шаблона (родового или параметризованного класса).

    Цель - получение класса, от которого возможно создание экземпляров.

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



    Рис. 11. Конкретизация
    1   ...   36   37   38   39   40   41   42   43   ...   62


    написать администратору сайта