Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Диаграмма прецедентов (use case diagram)





Любые (в том числе и программные) системы проектируются с учетом того, что в процессе своей работы они будут использоваться людьми и/или взаимодействовать с другими системами. Сущности, с которыми взаимодействует система в процессе своей работы, называются экторами, причем каждый эктор ожидает, что система будет вести себя строго определенным, предсказуемым образом. Попробуем дать более строгое определение эктора. Для этого воспользуемся замечательным визуальным словарем по UML Zicom Mentor:

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

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

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


Рис. 2.1.

Тот же внимательный читатель мог заметить промелькнувшее в определении эктора слово "прецедент". Что же это такое? Этот вопрос заинтересует нас еще больше, если вспомнить, что сейчас мы говорим о диаграмме прецедентов. Итак,

Прецедент (use-case) - описание отдельного аспекта поведения системы с точки зрения пользователя (Буч).

Определение вполне понятное и исчерпывающее, но его можно еще немного уточнить, воспользовавшись тем же Zicom Mentor 'ом:

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

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

9) Отношения в модели Use Case. Особенности их использования

 

Ассоциация (association) является одним из фундаментальных понятий в языке UML 2.х и может использоваться на различных канонических диаграммах при построении визуальных моделей

Применительно к диаграммам вариантов использования отношение ассоциации может служить только для обозначения взаимодействия актера с вариантом использования.

 

Отношение зависимости (dependency) определяется как форма взаимосвязи между двумя элементами модели, предназначенная для спецификации того обстоятельства, что изменение одного элемента модели приводит к изменению некоторого другого элемента

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

Отношение расширения (extend) определяет взаимосвязь одного варианта использования с некоторым другим вариантом использования, функциональность или поведение которого задействуется первым не всегда, а только при выполнении некоторых дополнительных условий.

ADO.NET – основные концепции

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

Одним из ключевых, по сравнению с ADO, изменений является отсутствие класса Recordset, на смену которому пришла комбинация классов DataTable, DataSet, DataAdapter и DataReader. Класс DataTable представляет собой коллекцию строк из одной таблицы, и с этой точки зрения он схож с классом Recordset. Класс DataSet представляет собой коллекцию объектов типа DataTable, вместе со связями между ними и ограничениями, что позволяет связывать вместе несколько таблиц. В целом, DataSet – это содержащаяся в памяти реляционная структура со встроенной поддержкой языка XML. Встроенная поддержка языка XML означает, что данные DataSet могут быть выгружены/загружены в XML с сохранением всех связей и ограничений.

Одной из наиболее важных характеристик класса DataSet является то, что он ничего не знает об источнике данных, который использовался для его заполнения. С этой точки зрения DataSet – это отсоединенное представление данных, которое может передаваться от компонента к компоненту через различные звенья многозвенного приложения. DataSet можно превратить в поток XML-данных и использовать его для передачи данных между гетерогенными платформами.

Класс DataAdapter используется в ADO.NET для передачи данных между DataSet и источником данных. Класс DataAdapter также поддерживает расширенные возможности пакетного обновления данных, которые ранее были реализованы в классе Recordset.

Ниже мы рассмотрим пространства имен и классы, реализующие функциональность ADO.NET, а также некоторые примеры их применения.

 

10) Режимы доступа к данным с помощью ADO.NET: назначение, компоненты, особенности.

 

Поставщики данных.NET

Подключаемая часть ADO.Net представляет собой набор объектов подключений.

Объекты подключений разделяются в ADO.NET по конкретным реализациям для различных СУБД. То есть для подключения к базе данных SQL SERVER имеется специальных класс SqlConnection.

Эти отдельные реализации для конкретных СУБД называются поставщиками данных.NET

При наличии широкого выбора доступных источников данных ADO.NET должна иметь возможность поддерживать множество источников данных. Каждый такой источник данных может иметь свои особенности или набор возможностей.

Поэтому ADO.NET поддерживает модель поставщиков. Поставщики для конкретного источника данных можно определить как совокупность классов в одном пространстве имен созданных специально для данного источника данных. Эта особенность несколько размыта для источников данных OleDb, ODBC, так как они по своей сути созданы для работы с любой базой данных совместимых с OLE и ODBC.

Подключаемые классы и объекты.

В подключаемой части ADO.NET имеются следующие основные классы:

  • Connection. Этот класс, позволяющий устанавливать подключение к источнику данных. (OleDbConnection, SqlConnection, OracleConnection)
  • Transaction. Объект транзакций (OleDbTransaction, SqlTransaction, OracleTransaction. В ADO.NET имеется пространство имен System.Transaction)
  • DataAdapter. Это своеобразный шлюз между автономными и подключенными аспектами ADO.NET. Он устанавливает подключение, и если подключение уже установлено, содержит достаточно информации, чтобы воспринимать данные автономных объектов и взаимодействовать с базой данных. (DataAdapter - SqlDataAdapter, OracleDataAdapter)
  • Command. Это класс представляющий исполняемую команду в базовом источнике данных.
  • Parameter. Объект параметр команды.
  • DataReader. Это эквивалент конвейерного курсора с возможностью только чтения данных в прямом направлении.

11) Рассмотрим режим активного подключения или связного уровня доступа.

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

19) Рассмотрим режим отсоединенного подключения или связный уровень доступа.

При использовании отсоединенного подключения необходимо использовать объект DataSet для организации локального хранения данных в приложении. Для заполнения DataSet используется объект DataAdapter. Отображение данных в элементах формы в этом случае выполняется проще, так как данные хранятся в контейнере DataSet (рис.3).

20) Провайдеры данных

http://www.cnshb.ru:210/ZooPARK/Part_9.htm

21) Объект Connection служит для установления соединения с заданным источником данных. Соединение можно настроить, редактируя нужным образом значения параметров строки подключения - свойство ConnectionString.

Для подключения к базе данных необходимо использовать свойство ConnectionString и метод Open(). В следующем примере показана типичная строка подключения.

 

SqlConnection cnn = new SqlConnection (@"Persist Security Info=False; Integrated Security=true; Initial Catalog=Dogovor; server=(local)");

 

Объект Connection имеет методы Open() и Close(), которые открывают/закрывают подключение к базе данных со значениями свойств, определяемыми объектом ConnectionString.

Объект Connection имеет набор свойств, например, ServerVersion, State, которые отображают состояние объекта во время последней сетевой операции, выполненной при подключении. Пример использования свойств объекта Connection показан ниже:

 

22) Метод ExecuteReader () применяется для возвращения набора записей. В большинстве приложений для работы с базами данных именно этот метод используется чаще всего. Работа метода основана на объекте DataReader, с помощью которого записи обрабатываются последовательно одна за другой.

Объект DataReader предназначен для чтения в прямом направлении небуферизуемого потока записей, полученных от метода ExecuteReader () объекта Command.

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

Доступ к полям каждой записи данных объекта DataReader можно выполнять следующими способами:

· по индексу поля в таблице: MyReader[1];

· или по имени поля: MyReader[“Name_Column”].

23) DataAdapter играет роль связующего звена между двумя компонентами ADO.NET: подключенным к источнику данных компонентом провайдеров данных.NET и неподключенным к источнику данных компонентом объектов DataSet. Основным назначением объекта DataAdapter является управление процессом передачи данных от источника данных к объекту DataSet и от объекта DataSet к источнику данных.

Метод Fill() наполняет объект DataAdapter данными, полученными от источника данных, а метод Update() обновляет источник данных в соответствии с изменениями данных в таблицах объекта DataSet.

Данные в объекте DataSet организованы в одной или нескольких объектах DataTable. Объекты DataTable содержит коллекции объектов DataRow, DataColumn и Constraint, а также коллекции объектов DataRelation, связанные с другими родительскими и дочерними объектами.

24) Теперь рассмотрим применение объекта Command с хранимыми процедурами.

При создании запросов или команд часто требуется передавать значения параметров. Для решения этой проблемы в объекте Command предусмотрено свойство Parameters, которое является объектом ParameterCollection и содержит коллекцию объектов-параметров Parameter.

Аналогично вызываются на исполнение хранимые процедуры, за исключением того, что вместо свойства CommandType. Text используется свойство CommandType. StoredProcedure, а имя хранимой процедуры присваивается свойству CommandText 25) Управление взаимодействием с существующими источниками данных осуществляется с помощью DataAdapter.

Свойство SelectCommand объекта DataAdapter представляет собой объект Command, получающий данные из источника данных. Свойства InsertCommand, UpdateCommand и DeleteCommand, принадлежащие DataAdapter, являются объектами Command, которые управляют обновлением данных в источнике данных в соответствии с изменениями данных в DataSet.

Метод Fill() объекта DataAdapter служит для заполнения набора данных DataSet результатами выполнения метода SelectCommand объекта DataAdapter. Метод Fill() принимает в качестве аргумента подлежащий заполнению набор данных DataSet, а также объект DataTable или имя объекта DataTable, который должен быть заполнен строками, возвращенными методом SelectCommand.

25) Теперь рассмотрим применение объекта Command с параметрами

При создании запросов или команд часто требуется передавать значения параметров. Для решения этой проблемы в объекте Command предусмотрено свойство Parameters, которое является объектом ParameterCollection и содержит коллекцию объектов-параметров Parameter.

26) Метод ExecuteReader () выполняет команду и возвращает типизированный объект-читатель данных, в зависимости от используемого поставщика

27) методы объекта Command.

Метод ExecuteNonQuery применяется для выполнения запросов, не возвращающих данные, таких как UPDATE, INSERT и DELETE - они вносят изменения в таблицу базы данных, не возвращая ничего назад в результате выполнения.

Создадим новое консольное приложение. Ниже приведен его полный листинг:

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
namespace ConsoleApplication3 {
class Program {
static void Main(string[] args) {
string connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename="+ @"D:\ВМИ\For ADO\BDTur_firmSQL2.mdf" + "integrated Security=True;Connect Timeout=30;User Instance=True"; string commandText = "SELECT * FROM Туры";
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();
SqlCommand myCommand = conn.CreateCommand();
myCommand.CommandText = "UPDATE Туристы " + "SET Фамилия = 'Сергеева' WHERE [Код туриста] = 3";
myCommand.ExecuteNonQuery();
conn.Close();
}
}
}

В свойстве CommandText указывается непосредственно текст запроса, который устанавливает значение «Сергеева» поля «Фамилия» для записи с полем «Код Туриста» = 3. Для выполнения запроса просто вызываем метод ExecuteNonQuery:

myCommand.ExecuteNonQuery();

Запускаем приложение, нажимая F5. При успешном выполнении запроса консольное окно приложения появляется и тут же исчезает. Запускаем Management Studio, открываем таблицу «Туристы» и убеждаемся в том, что запись изменилась (рис. 77).

Рис. 77. Таблица «Туристы», изменение записи

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

int UspeshnoeIzmenenie = myCommand.ExecuteNonQuery();
if (UspeshnoeIzmenenie!=0) {
Console.WriteLine ("Изменения внесены");
}
else {
Console.WriteLine(“Не удалось внести изменения");
}

Отметим, что данный вариант текста не позволяет отличить обновление одной строки и нескольких строк.

Закомментируем имеющееся свойство CommandText и добавим новое:

myCommand.CommandText = "INSERT " +
"INTO Туристы ([Код туриста], Фамилия, Имя, Отчество) " +
"VALUES (6, 'Тихомиров', 'Андрей', 'Борисович')";

Запускаем приложение, затем переходим в SQL Server Enterprise Manager - запрос добавил новую запись (рис. 78).

Рис. 78. Таблица «Туристы», добавление записи

Снова закомментируем свойство CommandText, добавим теперь запрос на удаление записи:

myCommand.CommandText = "DELETE FROM Туристы WHERE [Код туриста] = 4";

Запускаем приложение - из таблицы удалена четвертая запись (рис. 79). Метод ExecuteNonQuery применяется также для выполнения запросов, относящихся к категории DDL языка SQL. Язык определения данных (Data Definition Language, DDL) позволяет создавать и изменять структуру объектов базы данных, например, создавать и удалять таблицы. Основными операторами этого языка являются CREATE, ALTER, DROP. В результате выполнения запросов DDL не возвращаются данные - именно поэтому можно применять метод ExecuteNonQuery.

Рис. 79. Таблица «Туристы», удаление записи

Закомментируем имеющееся свойство CommandText и напишем новое, создающее в базе BDTur_firm2 новую таблицу «Отзывы»:

myCommand.CommandText = "CREATE TABLE Отзывы (Кодотзыва INT NOT NULL, " +
"Кодтуриста INT NOT NULL, Комментарий VARCHAR(50))";

Запускаем приложение, затем переходим в Management Studio, нажимаем кнопку обновить на панели инструментов - в базе появляется новая таблица (рис. 80).

Рис. 80. Свойства таблицы "Отзывы"

Для добавления нового столбца «Отзыв туриста» строка CommandText должна иметь следующий вид:

myCommand.CommandText = "ALTER TABLE Отзывы ADD Отзывтуриста VARCHAR(50)";

В Management Studio в списке столбцов таблицы видим новое поле «Отзывтуриста» (рис. 81).

Рис. 81. База данных BDTur_firm2, новая таблица "Отзывы"

Для удаления таблицы «Отзывы» запускаем приложение, содержащее следующую строку CommandText:

myCommand.CommandText = "DROP TABLE Отзывы";

В Management Studio видно, что таблица полностью исчезла из базы данных. Если нужно лишь удалить данные из таблицы, сохранив структуру, то необходимо воспользоваться следующей командой:

myCommand.CommandText = "DELETE FROM Отзывы";

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

Метод ExecuteNonQuery может применяться и для выполнения запросов, относящихся к категории DCL. Язык управления данными (Data Control Language, DCL) предназначен для управления доступом (определения полномочий) к объектам базы данных. Основными операторами этого языка являются GRANT, DENY, REVOKE. Данные запросы рассматриваться не будут - использование в данном случае объекта Commnad не отличается ничем от рассмотренного выше.

Date: 2015-06-08; view: 806; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию