Лекция 8

ТЕСТЫ

Метод прогонки решения СЛАУ.

Рубежный контроль

1. Какая из перечисленных матриц является трехдиагональной?

 

а) , б) , в) , г) .

 

2. Из перечисленных матриц выбрать трехдиагональную.

 

а) , б) , в) , г) .

 

3. Выберите трехдиагональную матрицу среди перечисленных.

 

а) , б) , в) , г) .

 

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

 

а) , , , .

, ;

 

б) , , , .

, ;

 

в) , , , .

, ;

 

г) , , , .

, .

 

5. Из представленных систем линейных алгебраических уравнений (СЛАУ) третьего порядка выбрать ту, для которой возможно наверняка применение метода прогонки.

 

а) , б) ,

 

в) , г) ,

 

6. Из представленных систем линейных алгебраических уравнений (СЛАУ) четвертого порядка выбрать ту, для которой возможно наверняка применение метода прогонки.

 

а) , б) ,

в) , г) .

 

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

Среди представленных наборов прогоночных коэффициентов выбрать тот, который был получен при применении метода прогонки.

 

а)

L0 := 0,5; K0 := 2,0;

L1 := -0,8; K1 := 1,2;

L2 := 0,68; K2 := 3,11.

б)

L0 := 0,5; K0 := 2,0;

L1 := -0,9; K1 := 2,1;

L2 := 0,882352941; K2 := 3,411764706.

в)

L0 := 0,5; K0 := 2,0;

L1 := -0,8; K1 := 1,2;

L2 := 0,5882352941; K2 := 3,411764706.

г)

L0 := 0,5; K0 := 2,0;

L1 := -1,8; K1 := 1,2;

L2 := 0,8823529415; K2 := 3,117647063.

 

ДИАГРАММА КЛАССОВ (СLАSS DIАGRАМ)

 

Центральное место в ООАП занимает разработка логической модели систе­мы в виде диаграммы классов. Нотация классов в языке UМL проста и ин­туитивно понятна всем, кто когда-либо имел опыт работы с САSЕ-инструментариями. Схожая нотация применяется и для объектов — экземп­ляров класса, с тем различием, что к имени класса добавляется имя объекта и вся надпись подчеркивается.

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

Диаграмма классов (сlass diagram) служит для представления статической струк­туры модели системы в терминологии классов объектно-ориентированного программирования. Диаграмма классов может отражать, в частности, раз­личные взаимосвязи между отдельными сущностями предметной области, такими как объекты и подсистемы, а также описывает их внутреннюю структуру и типы отношений. На данной диаграмме не указывается инфор­мация о временных аспектах функционирования системы. С этой точки зрения диаграмма классов является дальнейшим развитием концептуальной модели проектируемой системы.

Диаграмма классов представляет собой некоторый граф, вершинами кото­рого являются элементы типа "классификатор", которые связаны различны­ми типами структурных отношений. Следует заметить, что диаграмма клас­сов может также содержать интерфейсы, пакеты, отношения и даже от­дельные экземпляры, такие как объекты и связи. Когда говорят о данной диаграмме, имеют в виду статическую структурную модель проектируемой системы. Поэтому диаграмму классов принято считать графическим представлением таких структурных взаимосвязей логической модели системы, которые не зависят или инвариантны от времени.

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

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

Класс

Класс (class) в языке UML служит для обозначения множества объектов, которые обладают одинаковой структурой, поведением и отношениями с объектами из других классов. Графически класс изображается в виде прямоугольника, который дополнительно может быть разделен горизонтальными линиями на разделы или секции (рис. 5.1). В этих разделах могут указываться имя класса, атрибуты (переменные) и операции (методы).

 

Рис. 5.1.Графическое изображение класса на диаграмме классов

Обязательным элементов обозначения класса является его имя. На начальных этапах разработки диаграммы отдельные классы могут обозначаться простым прямоугольником с указанием только имени соответствующего класса рис. 5.1, а). По мере проработки отдельных компонентов диаграммы описания классов дополняются атрибутами (рис. 5.1, б) и операциями (рис. 5.1, в).

Предполагается, что окончательный вариант диаграммы содержит наиболее полное описание классов, которые состоят из трех разделов или секций. Иногда в обозначениях классов используется дополнительный четвертый раздел, в котором приводится семантическая информация справочного ха­рактера или явно указываются исключительные ситуации. Даже если секция атрибутов и операций является пустой, в обозначении класса она выделяется горизонтальной линией, чтобы сразу отличить класс от других элементов языка UML. Примеры графического изображения клас­сов на диаграмме классов приведены на рис. 5.2. В первом случае для класса "Прямоугольник" (рис. 5.2, а) указаны только его атрибуты — точки на ко­ординатной плоскости, которые определяют его расположение. Для класса "Окно" (рис. 5.2, б) указаны только его операции, секция атрибутов оставле­на пустой. Для класса "Счет" (рис. 5.2, в) дополнительно изображена четвер­тая секция, в которой указано исключение — отказ от обработки просро­ченной кредитной карточки.

Рис. 5.2.Примеры графического изображения классов на диаграмме

 

Имя класса

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

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

Примерами имен классов могут быть такие существительные, как "Сотруд­ник", "Компания", "Руководитель", "Клиент", "Продавец", "Менеджер", "Офис" и многие другие, имеющие непосредственное отношение к моделируемой предметной области и функциональному назначению проектируемой системы.

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

соответствующих элементов языка UML.

 

Примечание

В некоторых случаях необходимо явно указать, к какому пакету относится тот или иной класс. Для этой цели используется специальный символ раздели­тель— двойное двоеточие "::". Синтаксис строки имени класса в этом случае будет следующий <Имя_пакета>::<Имя_класса>. Другими словами, перед именем класса должно быть явно указано имя пакета, к которому его следует отнести. Например, если определен пакет с именем "Банк", то класс "Счет" в этом банке может быть записан в виде: "Банк::Счет".

Атрибуты класса.Во второй сверху секции прямоугольника класса записываются его атрибу-ты (attributes) или свойства. В языке UML принята определенная стандарти­зация записи атрибутов класса, которая подчиняется некоторым синтакси­ческим правилам. Каждому атрибуту класса соответствует отдельная строка текста, которая состоит из квантора видимости атрибута, имени атрибута, его кратности, типа значений атрибута и, возможно, его исходного значения:

<квантор видимости><имя атрибута>[кратность]: <тип атрибута> = <исходное значение>{строка-свойство}

Квантор видимости может принимать одно из трех возможных значений и, соответственно, отображается при помощи специальных символов:

- Символ "+" обозначает атрибут с областью видимости типа общедоступ­ный (publik). Атрибут с этой областью видимости доступен или виден из любого другого класса пакета, в котором определена диаграмма.

- Символ "#" обозначает атрибут с областью видимости типа защищенный (protected). Атрибут с этой областью видимости недоступен или невиден для всех классов, за исключением подклассов данного класса.

- И, наконец, знак "-" обозначает атрибут с областью видимости типа за­крытый (private). Атрибут с этой областью видимости недоступен или не­виден для всех классов без исключения.

Квантор видимости может быть опущен. В этом случае его отсутствие просто означает, что видимость атрибута не указывается. Эта ситуация отличается от принятых по умолчанию соглашений в традиционных языках про­граммирования, когда отсутствие квантора видимости трактуется как public или private. Однако вместо условных графических обозначений можно запи­сывать соответствующее ключевое слово: public, protected, private.

Примечание

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

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

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

[нижняя_граница I.. верхняя_граница 1, нижняя_граница2.. верхняя_граница2, нижняя_границаk.. верхняя_границаk],

где нижняя_граница и верхняя_граница являются положительными целыми числами, каждая пара которых служит для обозначения отдельного замкну­того интервала целых чисел, у которого нижняя (верхняя) граница равна значению нижняя_граница (верхняя_граница). В целом данное условное обо­значение кратности соответствует теоретико-множественному объединению соответствующих интервалов. В качестве верхней__границы может использо­ваться специальный символ "*", который означает произвольное положи­тельное целое число. Другими словами, это означает неограниченное сверху значение кратности соответствующего атрибута.

Значения кратности из интервала следуют в монотонно возрастающем по­рядке без пропуска отдельных чисел, лежащих между нижней и верхней границами. При этом придерживаются следующего правила: соответствую­щие нижние и верхние границы интервалов включаются в значение кратно­сти. Если в качестве кратности указывается единственное число, то крат­ность атрибута принимается равной данному числу. Если же указывается единственный знак "*", то это означает, что кратность атрибута может быть произвольным положительным целым числом или нулем.

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

- 10.. I/ означает, что кратность атрибута может принимать значение О или 1. При этом 0 означает отсутствие значения для данного атрибута.

- [0.. *] означает, что кратность атрибута может принимать любое положи-I тельное целое значение большее или равное 0. Эта кратность может быть к записана короче в виде простого символа — [*].

- [1.. *] означает, что кратность атрибута может принимать любое положительное целое значение большее или равное 1.

- [1-5] означает, что кратность атрибута может принимать любое значение из чисел: 1, 2, 3, 4, 5.

- [1..3,5,7/означает, что кратность атрибута может принимать любое значение из чисел: 1, 2, 3, 5, 7.

- [1..3,7..10] означает, что кратность атрибута может принимать любое значение из чисел: 1, 2, 3, 7, 8, 9, 10.

- [1..3,7..*] означает, что кратность атрибута может принимать любое значение из чисел: 1, 2, 3, а также любое положительное целое значение Щ большее или равное 7.

Если кратность атрибута не указана, то по умолчанию принимается ее значение равное 1..1, т. е. в точности 1.

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

рассматриваемый класс.

Можно привести следующие примеры задания имен и типов атрибутов классов:

- цвет:Со1ог — здесь цвет является именем атрибута, Со1ог — именем типа данного атрибута. Указанная запись может определять традиционно используемую RGB-модель (красный, зеленый, синий) для представления цвета. В этом случае имя типа Со1ог как раз и характеризует семантическую конструкцию, которая применяется в большинстве языков про-граммирования для представления цвета.

- имя_сотрудника[1..2]:String — здесь имя_сотрудника является именем атрибута, который служит для представления информации об имени, а возможно, и отчестве конкретного сотрудника. Тип атрибута String (Стро-ка) как раз и указывает на тот факт, что отдельное значение имени представляет собой строку текста из одного или двух слов (например,

"Кирилл" или "Дмитрий Иванович"). Поскольку во многих языках программирования существует тип данных String, использование соответствующего англоязычного термина не вызывает недоразумения у большинства программистов. Однако, хотя в языке UML все термины даются в англоязычном представлении, использование в качестве типа атрибута

Строка в данной ситуации не исключается и определяется только сооб­ражениями удобства.

- видимость:Воо1еап — здесь видимость есть имя абстрактного атрибута (курсив здесь не случаен), который может характеризовать наличие визу­ального представления соответствующего класса на экране монитора. В этом случае тип Воо1еап означает, что возможными значениями дан­ного атрибута является одно из двух логических значений: истина (true) или ложь (false). При этом значение истина может соответствовать нали­чию графического изображения на экране монитора, а значение ложь — его отсутствию, о чем дополнительно указывается в пояснительном тек­сте. Поскольку кратность атрибута видимость не указана, она принимает значение 1 по умолчанию. В этой ситуации англоязычное имя типа атри­бута вполне оправдано наличием соответствующего базового типа в язы­ках программирования. Абстрактный характер данного атрибута обозна­чается курсивным текстом в записи данного атрибута.

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

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

В качестве примеров исходных значений атрибутов можно привести сле­дующие дополненные выше варианты задания атрибутов:

- цвет:Color = (255, 0, 0) — в RGB-модели цвета это соответствует чистому красному цвету в качестве исходного значения для данного атрибута.

- имя_сотрудника[1..2]:5String = Иван Иванович — возможно, это нетипич­ный случай, который, скорее, соответствует ситуации имя_руководителя[2]:String = Иван Иванович.

- видимость:Воо1еап = истина — может соответствовать ситуации, когда в момент создания экземпляра класса создается видимое на экране мони­тора окно, соответствующее данному объекту.

Строка-свойство служит для указания значений атрибута, которые не могут быть изменены в программе при работе с данным типом объектов. Фигурные скобки как раз и обозначают фиксированное значение соответствующего атрибута для класса в целом, которое должны принимать все вновь создаваемые экземпляры класса без исключения. Это значение принимается за исходное значение атрибута, которое не может быть переопределено в последующем. Отсутствие строки-свойства по умолчанию трактуется так, что значение соответствующего атрибута может быть изменено в программе. Например, строка-свойство в записи атрибута заработная_плата:Currency = = {$500} может служить для обозначения фиксированной заработной платы для каждого объекта класса "Сотрудник" определенной должности в некото-рой организации. С другой стороны, запись данного атрибута в виде зара-ботная_плата:Currency = $500 означает уже нечто иное, а именно — при создании нового экземпляра Сотрудник (аналогия— прием на работу нового сотрудника) для него устанавливается по умолчанию заработная плата в $500. Однако для отдельных сотрудников могут быть сделаны исключения как в большую, так и в меньшую сторону, о чем необходимо позаботиться дополнительно в программе.