TMiYaP
.pdfНотация диаграмм действий близка к стандарту блок-схем. В неѐ входят элементы начала и конца диаграммы действий, условный блок, блок действия, блоки параллельного ветвления и слияния. Отличительной особенностью диаграмм действия является наличие объектных дорожек. Объектная дорожка это вертикальная полоса, в которую помещаются все блоки, описывающие действия одного объекта. Связи между блоками могут означать передачу сообщений как внутри программы, так и по глобальной сети.
Диаграммы внедрения.
Нотация диаграмм внедрения направлена на описание того физического размещения программных компонентов и информационных ресурсов, которые имеют место в конкретной реализации системы. На диаграмме внедрения показывают серверы, персональные компоненты с привязкой к географическим картам. Каждый сервер снабжается информацией о программных компонентах и интерфейсах, которые размещены в нем, наименования баз данных и хранилищ.
Показатели качества объектной декомпозиции задачи
●Количество классов
●Число связей
●Однородность
●Регулярность
●Устойчивость к изменениям задачи
●Возможность повторного использования
Конечная объектная модель приложения оценивается рядом параметров, каждый из них имеет различную значимость в конкретном проекте. Значимость устанавливается группой, реализующей проект.
Количество классов в модели определяет затраты на тестирование и разработку и эти затраты растут по мере увеличения числа классов. Поэтому стремятся это число сокращать. Учитывая, что громоздкие классы сложнее для тестирования и более опасны на практике применяют «правило 7-ми объектов», т.е. понимание модели на определѐнном уровне детализации максимально при числе классов, не большем семи.
Число связей между классами стремятся минимизировать, поскольку их наличие говорит о взаимозависимости классов, о наличии информации обмена, что снижает безопасность системы.
Под однородностью понимается похожесть классов по структуре и интерфейсу (примером являются элементы управления в Windows).Однородность способствует повышению надѐжности программного кода.
Регулярность.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
регулярна |
|
|
|
|
нерегулярна |
|||
Регулярность – это повторяемость элементов и связей в общей структуре системы. Регулярность способствует пониманию и восприятию системы в целом.
Изменения в задаче не должны приводить к переработке нескольких классов и их связей. Наиболее эффектный вариант изменений – это добавление свойств и методов в существующие классы, добавление новых классов.
Возможность повторного использования.
Повторное использование целесообразно с точки зрения получения экономического эффекта, а также повышение надѐжности и безопасности.
Любой класс при реализации на языке программирования имеет интерфейс и реализацию. Интерфейсом называют описание свойств и методов класса с указанием их типов и типов входных параметров.
Если в языке программирования отсутствует возможность явного описания интерфейса при необходимости пользуются специальными языками только для описания интерфейсов (IDL)
Cточки зрения безопасности и качества объектной модели изменения в интерфейсе считаются наиболее приемлемыми.
Интерфейс Form1.
Public ref class Form1: public System::Windows::Forms::Form
{
public:
Form 1 (void)
{ Initialize Component ( );
//
//TODO: Add the constructor code here
//
}
protected://доступны только при наследовании
///<summary>
///Clean up any resources being used
///</summary>
~Form1 ( )//метод деструктор, так как ~
{
If (components)
{
delete components;
}
}
}
Private:System::Windows::Forms::OpenFileDialog^
Private:System::Windows::Forms::OpenFileDialog1;
Private:System::Windows::Forms::Button ^button1;
^- указатель на управляемую кучу
Винтерфейсе класса содержится важная информация о доступности свойств и методов класса в программном коде клиента.
Элементы из раздела publicдоступны как в экземплярах объекта, так и при использовании в производных класса. Элементы из раздела protectedне доступны в клиентском коде. Исключение составляют цепочки наследования. Наследование не ограничивается числом уровней иерархии.
Модификатор защиты privateограничивает доступ к свойствам и методам границами класса.
Рекомендуется максимально использовать инкапсуляцию и делать максимальное количество свойств и методов закрытыми.
Ключевое слово thisиспользуется в методах класса для указания на контекст класса. Thisэто указатель. Соответственно синтаксису использования указателей программный код получает доступ к элементам класса. Использование данного указателя важно именно при разработке
программного кода, поскольку позволяет надѐжно отобразить принадлежность свойства и метода определенному классу.
Абстрактные классы.
Класс считается абстрактным, если он содержит методы без реализации (виртуальные).
class Document
{
public:
virtualchar *Identify ( ) = 0; //у функции нет реализации virtualchar *Wherels ( )= 0;
};
Для абстрактного класса невозможно создать экземпляр объекта. Главная цель их использования это порождение иерархий наследования.
Абстрактные базовые классы.
classQueue { };
class CashierQueue: virtual public Queue { };
classLunchQueue: virtual public Queue { };
Class LunchCashierQueue: public Lunch Queue, publicCashier Queue { };
Конструкторы и деструкторы.
Конструкторов много, деструктор один.
Для иерархии наследования при создании экземпляра объекта конструкторы вызываются в порядке сверху вниз от самого высокоуровневого базового класса. Деструкторы при уничтожении объекта вызываются в обратном порядке.
FileHandler::FileHandler (void)
{
TextFileName = gcnew String (―File.txt‖); aNames = gcnewArrayList ( );
}
FileHandler::~FileHandler (void)
{
}
Конструкторы с параметрами.
String (SByte*) String (Char, Int32)
String (Char*, Int32, Int32) String (Char[ ], Int32, Int32)
String (SByte*, Int32, Int32)
String (SByte*, Int32, Int32, Ecoding)
Конструктор по умолчанию это всегда конструктор без параметров. Любой другой вариант конструктора должен содержать параметры разного типа. Любой из конструкторов возвращает конкретно построенный экземпляр. Не допускается использование в конструкторе опасных участков кода, которые могут прервать процесс конструирования. Это требование относится к уровню разработки самого кода.
Staticinta ;статическая переменная.
Если конструктор не может быть сделан безопасным за счет обработки ошибок и исключений, то вводят специальную функцию инициализации. Она может быть вызвана после создания «пустого объекта». Пустые объекты создаются конструктором по умолчанию. Пустые объекты занимают память, имеют ссылки на функции, методы, но их свойства не инициализированы. Функция инициализации x.Ini(…) может выбрасывать исключение и возвращать ошибки. Клиентский программный код должен обрабатывать их и явно принимать решение при появлении ошибки инициализации
Коллекции в .NET
К коллекциям в .NETотносятся классы, способные манипулировать множеством объектов, причем не обязательно одного типа. Такие классы часто называют контейнерными.
Классы для создания коллекций находятся в пространстве имен
System:: Collection.Класс ArrayListодин из видов коллекций.
Capacity – ѐмкость экземпляра объекта. Add – добавляет элемент в ArrayList. BinarySearch-бинарныйпоисквArrayList Contains
Добавление экземпляров в ArrayListосуществялется с помощью метода Add. Вызов этого метода следует отнести к опасным в том смысле, что запрос операционной системе на выделение ресурсов может быть не удовлетворен. Метод выбросит исключение. И если оно не будет обработано, программа завершится аварийно. Возможным способом обеспечения безопасности является проверкасвойстваCapacity. Если ресурсов не достаточно, метод Addвызывать не следует.
Поиск элементов ArrayListс заданными свойствами осуществляется одним из нескольких возможных методов поиска. В виду того, что элементы ArrayListразнотипны, методы поиска должны быть перегружены, т.е. определена их реализация для данной программы. В частности определены правила сомнения объектов.
Метод Containsдает возможность определить, входит ли в коллекцию ArrayListобъект с заданными свойствами. Для этого нужно сконструировать экземпляр объекта и передать методу Containsв качестве параметра.
Метод двоичного поиска BinarySearch реализацию не содержити должен быть перегружен.
IndexOf LastIndexOf
Предназначены для поиска элементы, содержащего некоторое значение. Методы должны быть перегружены для указания того, как интерпретировать значение величины.
Для манипулирования содержимым коллекции существует ряд методов таких как:
Отчистка коллекции clear
Создание копии существующей коллекции clone
Копирование содержимого коллекции в другую коллекцию CopyTo Метод Removeудаляет указанный объект из коллекции. Для этого
методы нужно сконструировать экземпляр удаленного объекта (удаляет первое вхождение)
RemoveAtудаляет элемент по индексу RemoveRangeудаляетинтервал.
using namespace System;
using namespace System:: Collections; Int main ( )
{
ArrayList^myALL = gcnewArrayList; //сборщикмусора myAll ->Add (―Hello‖);
myAll ->Add (―World‖);
Класс BitArray
Коллекция BitArrayпредназначена для хранения двоичных битов. В отличие от ArrayListздесь фиксируется тип элемента коллекции.
And – функция логического И.
Get – задает значение отдельного бита в указанной позиции. Многие свойства и методы BitArrayименуются и используются
подобно коллекции ListArray. Это достигнуто наследованием от общего базового класса коллекции. В качестве специализированных методов в класс введены такие, которые направлены на логическую обработку элементов коллекции.
And – И Not – не
Or – или
Xor – исключает или суммирует по модулю 2
Get, Setдают возможность явно устанавливать отдельные биты коллекции. Getпозволяет узнать значение элемента, Setпозволяет установить значение элемента.
BitArray^my BA1 = gcnewBitArray (4); BitArray^my BA2 = gcnewBitArray (4);
my BA1[0] = false; my BA1[1] = false; my BA1[2] = true; my BA1[3] = true; my BA2[0] = false; my BA2[2] = false; my BA2[1] = true; my BA2[3] = true; my BA1 -> And (my BA2);
Класс HashTable
HashTable – это структура данных, которая сохраняет любое значение, только сопровождая его значением ключа. Ключ является уникальным, т. е. в Hash – таблицу добавление значения с известным ключом приведет к замене существующего с тем же ключом.
Ключевое значение может рассматриваться как ассоциативный индекс в коллекции. Если это строка, она ассоциируется со смыслом хранящегося значения.
Count – число элемнтов в коллекции. Keys – получить все ключи
Values – какие значения есть в HashTable.
ContainsKeyи ContainsValueспециализируют данный класс. С их помощью можно проверить существование как ключевого значения, так и значения, которое ассоциируется в ключом.
Int main ( )
{
HashTable^myHT = gcnewHashTable; myHT -> Add (―First‖, ―Hello‖); myHT -> Add (―Second‖, ―World‖); myHT ->Add (―Third‖, ―!‖);
структура похожа на словарь К[―яблока‖]=30;
Класс Queue(очередь)
Данная разновидность коллекций используется в программах, которые в некотором смысле имитируют процедуры обслуживания потока заявок.
Специализированными методами очереди являются: Enqueue – добавляет объект в конец очереди Dequeue – удаляет элемент из очереди
Peek –указывает элемент с нужным номером.
В коллекции Stackспециализированными операциями являются: Push – заталкивание в вершину стэка,
Pop – извлечение из стэка
Работа с БД.
БД используются как средства долговременного хранения информации на носителях долговременной памяти. Любая информация на этих носителях хранится в виде файлов.
Отличительная особенность – специфическая структура файлов. Эта структура отражает определенную логику данных. Наиболее распространенной является модель, представление таблицы.
R0(x1,x2,..,xn)
ИД – источник данных
SQL – программирование с БД
Очевидным способом построения программы, работающей с БД, является изучение фрагмента данных и работа с файловыми потоками. Недостаток: программа «жестко» привязана к формату конкретной в сфере файлов, любое изменение формата делает еѐ неработоспособной.
Кроме того, написанная программа не будет охватывать многих важных процедур контроля целостности и безопасность хранения данных.
Для того, чтобы избежать перечисленных проблем, используют принцип визуализации. Этот принцип предполагает взаимодействие с любым нестандартным устройством с помощью драйвера.
Драйвер принимает обобщенные запросы (команды) к оборудоваанию, а с другой выдает специальные сигналы и команды соответственной модели устройства.
Сигналы состояния устройства возвращаются драйвером операционной системе в обобщенном виде.
Источник данных.
Источник данных способен принимать обобщенные команды манипулирования данными и возвращать эти данные ПП-мы.
Для манипулирования данными прикладные программы (ПП) формируют запросы источнику данных на языке SQL.
Язык SQLпредставляет собой специализированный язык для работы с реализуемыми БД.
ПП отправляет драйверу строковое выражение SQLзапроса. Драйвер выполняет грамматический набор текста запроса и при
отсутствии ошибок строит собственный план запроса (исполнения) Результатом любого запроса будет SQL таблица. Поэтому ПП всегда
получает результат, считывая строки таблицы.
Механизм считывания записей по запросу использует концепцию курсора.
Курсор – это виртуальный указатель на текущую запись. Любая операция чтения данных сопровождается перемещением к следующим записям.
Аналогично указатель к файлам не моет быть перемещен выше первой записи и ниже последней.
Набор драйверов к доступу любых файлов ODBC/ Расширение *mdb– файл БД
Exec
Для конфигурирования СД в ОС Windowsсуществует диалоговая утилита, позволяющая указать: имя источника данных, драйвер и место нахождения файлов БД.
Эта информация регистрируется в реестре и запрос любой программы на соединение с ИД инициализирует пользовательноть системы действий по загрузке и инициализации данных контролю и т.д.
Источники данных могут создаваться с помощью драйверов ОС, но и с самой среды программирования.
Краткий обзор языка SQL.
Язык SQLявляется специализированным языком для манипулирования базами данных. Конструкции языка позволяют выполнять следующее:
1)создавать и удалять БД
2)создавать, модифицировать и удалять таблицы БД
3)манипулировать данными в таблицах БД
4)управлять доступом к данным
5)создавать виртуальные представления таблиц SSSQLзапрос
ПП (прикладная |
Источник данных |
|
программа) |
||
|
||
|
Данные |
Команда Парам1 Парам2…..
Язык состоит из ключевых слов и правил построения выражений. Каждое выражение начинается с команды и содержит произвольное число параметров. Команда – это обязательное ключевое слово SQL. Среди параметров допускается использование ключевых слов.
GREAT TABLE таблица1 (
User Name text,//User Name имяполя, text – типданных UserPasswordtext,
…
,
Любой SQLзапрос – это строка, которая направляется источнику данных для исполнения. Источник выполняет грамматический разбор строки запроса. Если запрос корректен синтаксически, источник пытается выполнить указанные действия. При этом могут быть обнаружены ошибки семантического характера (указана не существующая таблица, не существующее поле таблицы, некорректно указан тип данных)
При отсутствии семантических ошибок команда SQLзавершается. Любая команда манипулирования данными в качестве результата всегда возвращает таблицу.
Инструкция Selectиспользуется для поиска данных в БД.
Select*FROM Games Select*означаетвыбратьвсестолбцы
Select name, age – выбираетname иage
Select*FROM Games;
Инструкция возвращает почти всю таблицу
SELECTUserNameFROMUsers, Games(можно указывать несколько таблиц)
WHEREUsers.ID=Games.Winner (условие отбора записи)
В таблице Users. ID и имя победителя совпадают.
Ключевое слово WHEREзадает условие отбора записей в результат, после WHEREследует логическое выражение, состоящее из операторов сравнения = <>><<= и логических связок AND, OR, NOT.
SELECT distinct UserName FROM Users, Games WHEREUsers.ID=Games.Winner
Ключевое слово distinctоказывает необходимость включения в результат только различных значений в указанной совокупности полей.
SELECT distinct UserName FROM Users, Games
WHEREUsers.ID=Games.Winnerorder by User Name desc;
Ключевоесловоorderbyуказывает на необходимость сортировки результата.
Desc – либо в порядке возрастания Asc – либо в порядке убывания
SELECT UserName, Balance //выборполей FROM Users, Games WHEREUsers.ID=Games.WinnerAnd Balance>50;
SELECT Count (UserName)
FROM Users, Games
WHEREUsers.ID=Games.WinnerAnd Balance>50;
Агрегатные функции осуществляют некоторое обобщение по столбцам, результатом которого является число. Это число возвращается в виде таблицы из одного столбца и одной строки (count, sum…)
SELECT max (Age) FROM Users, Games
WHEREUsers.ID=Games.Winner
Находит максимальный возраст победителя.
