Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ-Лабораторная 3.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
235.89 Кб
Скачать

Диаграмма последовательности

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

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

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

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

Рис. Пример диаграммы последовательности

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

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

Объект является своего рода "строительным блоком" в ООП - приложении. Этот блок включает часть приложения.

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

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

Класс (поля, методы и свойства, области видимости, разработчики и пользователи класса)

В языке С# для определения классов применяется ключевое слово class:

classMyClass

{ // Члены класса }

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

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

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

public (открытый)

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

private (закрытый)

Доступ к члену можно получить только из кода в том же классе.

protected (защищенный)

Доступ к члену можно получить только из кода в том же классе или в производном классе.

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

Деструкторы используются для уничтожения экземпляров классов. Класс может иметь только один деструктор. Деструкторы невозможно вызвать. Они запускаются автоматически.

В примере показано объявление полей, конструкторов и методов классов. В нем также демонстрируется создание объекта и печать данных экземпляра. В этом примере объявляются два класса — класс Child, который содержит два закрытых поля (name и age) и два открытых метода. Второй класс, TestClass, используется для размещения функции Main.

classChild

{ private int age;

Private string name;

// Конструктор по умолчанию

public Child()

{ name = "N/A"; }

// Конструктор

public Child(string name, int age)

{ this.name = name;

this.age = age; }

// Методвывода

public void PrintChild()

{ Console.WriteLine("{0}, {1} years old.", name, age); }

}

classTestClass

{ static void Main()

{Создание объектов с помощью оператора new

Child child1 = new Child("Craig", 11);

Child child2 = new Child("Sally", 10);

// Создание объекта с использованием конструктора по умолчанию

Child child3 = new Child();

// Выводрезультатов

Console.Write("Child #1: ");

child1.PrintChild();

Console.Write("Child #2: ");

child2.PrintChild();

Console.Write("Child #3: ");

child3.PrintChild(); }}

Свойства объединяют функции полей и методов. Для пользователя класса свойство является полем, поэтому для доступа к свойству требуется тот же синтаксис, что и для поля. Для разработчика класса свойство является одним или двумя блоками кода, представляющими метод доступа get и/или метод доступа set. Блок кода для метода доступа get выполняется, когда осуществляется чтение свойства; блок кода для метода доступа set выполняется, когда свойству присваивается новое значение. Свойство без метода доступа set считается доступным только для чтения. Свойство без метода доступа get считается доступным только для записи. Свойство с обоими методами доступа доступно для чтения и для записи. Свойство, как правило, является открытым. Для доступа к значению, присваиваемому свойству в методе set, используется value

В примере класс TimePeriod хранит сведения о периоде времени. Поле seconds хранит время в секундах, но свойство с именем Hours позволяет задать время в часах. Методы доступа для свойства Hours выполняют преобразование между часами и секундами.

classTimePeriod

{ private double seconds;

public double Hours

{ get { return seconds / 3600; }

set { seconds = value * 3600; }

}

}

class Program

{ static void Main()

{ TimePeriod t = new TimePeriod();

// Присвоениесвойству Hours значения

t.Hours = 24;

// Получение значения свойства Hours.

System.Console.WriteLine("Time in hours: " + t.Hours); }}