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



 Приложение "Органайзер" представляет собой главную форму, на которой имеется 3 кнопки для открытия калькулятора, записной книжки или календаря.

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

Рисунок 2 – Диаграмма классов системы «Органайзера»

Между представленными классами используется тип связи – композиция. Композиция характеризуется множественностью. Между классами mainMenu и myCalc и множественность 1:0..N. Между классами mainMenu и myCalendar множественность 0:1. Между классами mainMenu и myNotebook множественность 1:0..1. Между классами myNotebook и addNoteDialog множественность 1:0..1.

В описании всех атрибутов и методов классов используются пространства имен System, System.IO, System.Windows.Forms.

Класс mainMenu.

Атрибуты, описанные в классе mainMenu:

btn_Calc типа Button. Полю Text присвоено значение «Калькулятор»;

btn_Calendar типа Button. Полю Text присвоено значение «Календарь»;

btn_NoteBook типа Button. Полю Text присвоено значение «Записная книжка»;

TheCalendar типа myCalendar;

TheNotebook типа myNotebook.

Методы, описанные в классе mainMenu:

Main() – статический метод, получающий управление приложением при его запуске. Этот метод играет роль точки входа приложения, с которой и начинается его работа;

mainMenu() – метод - конструктор, вызывающий метод InitializeComponent() из этого же класса;

InitializeComponent(): void – метод вызываемый конструктором класса mainMenu, прежде всего этот метод создает новый контейнер для хранения компонентов, и записывает его в описанное ранее поле components. Далее метод InitializeComponent() создает новые экземпляры классов описанных в атрибутах класса mainMenu;

btn_Calc_Click(sender, e): void – метод, обрабатывающий событие нажатия на кнопку btn_Calc. В этом методе осуществляется создание экземпляра класса myCalc – TheCalc и вызывается метод Show() для созданного экземпляра;

btn_Calendar_Click(sender, e): void – метод, обрабатывающий событие нажатия на кнопку btn_Calendar. В этом методе осуществляется проверка наличия экземпляра класса myCalendar, и, если экземпляра не существует происходит создание экземпляра класса myCalendar – TheCalendar и вызывается метод Show() для созданного экземпляра. Если экземпляр класса уже существует, то в поле WindowState записывается значение FormWindowState.Normal и вызывается метод Activate() для этого экземпляра;

btn_Notebook_Click(sender, e): void – метод, обрабатывающий событие нажатия на кнопку btn_Notebook. В этом методе осуществляется проверка наличия экземпляра класса myNotebook, и, если экземпляра не существует происходит создание экземпляра класса myNotebook – TheNotebook и вызывается метод Show() для созданного экземпляра. Если экземпляр класса уже существует, то в поле WindowState записывается значение FormWindowState.Normal и вызывается метод Activate() для этого экземпляра.

Класс addNoteDialog.

Атрибуты, описанные в классе addNoteDialog:

OKButton типа Button. Полю Text присвоено значение «Готово»;

CancelBtn типа Button. Полю Text присвоено значение «Отмена»;

label1 типа label. Полю Text присвоено значение «Введите название»;

nameInput типа Textbox.

Методы, описанные в классе addNoteDialog:

addNoteDialog() – метод - конструктор, вызывающий метод InitializeComponent() из этого же класса;

InitializeComponent(): void – метод вызываемый конструктором класса DimensionsDialog, прежде всего этот метод создает экземпляры классов -OKButton, CancelBtn, label1, nameInput, а затем устанавливает атрибуты для этих экземпляров.

Класс myCalendar.

Атрибуты, описанные в классе myCalendar:

btn_toDate типа Button. Полю Text присвоено значение «Перейти к дате»;

label1 типа Label. Полю Text присвоено значение «Число:»;

label2 типа Label. Полю Text присвоено значение «Месяц:»;

label3 типа Label. Полю Text присвоено значение «Год:»;

dayUpDown типа NumericUpDown. Полю Maximum присвоено значение 31, а полю Minimum значение 1;

monthUpDown типа NumericUpDown. Полю Maximum присвоено значение 12, а полю Minimum значение 1;

yearUpDown типа NumericUpDown. Полю Maximum присвоено значение 2089, а полю Minimum значение 1960.

Методы, описанные в классе myCalendar:

myCalendar() – метод - конструктор, вызывающий метод InitializeComponent() из этого же класса, а также устанавливающий начальные значения поля Value для yearUpDown, monthUpDown, dayUpDown – текущие год, месяц и число;

InitializeComponent(): void – метод вызываемый конструктором класса myCalendar, прежде всего этот метод создает экземпляры классов - btn_toDate, label1, label2, label3, dayUpDown, monthUpDown, yearUpDown, monthCalendar1, а затем устанавливает атрибуты для этих экземпляров;

btn_toDate_Click(sender, e): void – метод, обрабатывающий событие нажатия на кнопку btn_Notebook. В нем выполняется вызов метода SetDate() для monthCalendar1 с параметрами yearUpDown.Value, monthUpDown.Value и dayUpDown.Value;

myCalendar_FormClosed(sender, e): void – обработчик события, вызываемого после закрытия myCalendar. В нем выполняется присваивание TheCalendar значения null.

Класс myCalc.

Атрибуты, описанные в классе myCalc:

btn1 типа Button. Полю Text присвоено значение «1»;

btn2 типа Button. Полю Text присвоено значение «2»;

btn3 типа Button. Полю Text присвоено значение «3»;

btn4 типа Button. Полю Text присвоено значение «4»;

btn5 типа Button. Полю Text присвоено значение «5»;

btn6 типа Button. Полю Text присвоено значение «6»;

btn7 типа Button. Полю Text присвоено значение «7»;

btn8 типа Button. Полю Text присвоено значение «8»;

btn9 типа Button. Полю Text присвоено значение «9»;

btn0 типа Button. Полю Text присвоено значение «0»;

btnChangeSign типа Button. Полю Text присвоено значение «+/-»;

btnPoint типа Button. Полю Text присвоено значение «.»;

btn_delenie типа Button. Полю Text присвоено значение «/»;

btn_umnojenie типа Button. Полю Text присвоено значение «*»;

btn_minus типа Button. Полю Text присвоено значение «-»;

btn_plus типа Button. Полю Text присвоено значение «+»;

btn_ravno типа Button. Полю Text присвоено значение «=»;

btn_sbros типа Button. Полю Text присвоено значение «C»;

txtOutput типа TextBox. Полю ReadOnly присвоено значение true;

txtInput типа TextBox. Поле ввода чисел;

firstNumber, secondNumber, stringToShow, curAction, curFunction типа String; calcResult типа double;

functionEntered типа bool. Начальное значение false;

В классе myCalc описаны следущие методы:

myCalc() – метод - конструктор, вызывающий метод InitializeComponent() из этого же класса, заносит в поле Text экземпляров txtInput, txtOutput значение null, а так же устанавливающий начальные значения поля Tag для btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn0, btnChangeSign, btnPoint, btn_delenie, btn_umnojenie, btn_minus, btn_plus, btn_ravno, btn_sbros – метки действий для кнопок;

InitializeComponent(): void – метод вызываемый конструктором класса myCalendar, прежде всего этот метод создает экземпляры классов - btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn0, btnChangeSign, btnPoint, btn_delenie, btn_umnojenie, btn_minus, btn_plus, btn_ravno, btn_sbros, txtOutput, txtInput, а затем устанавливает атрибуты для этих экземпляров;

btn_buttonNum_Click(sender, e): void – метод, обрабатывающий событие нажатия на одну из кнопок набора чисел btn0 – btn9. В нем выполняется вызов метода vvodNum() с параметром Convert.ToString(((System.Windows.Forms.Button)sender). Tag);

btn_buttonFunction_Click (sender, e): void – метод, обрабатывающий событие нажатия на одну из функциональных кнопок btn_plus, btn_minus, btn_delenie, btn_umnojenie. В нем выполняется вызов метода doFunction() с параметром текущего арифметического действия – curFunction;

btn_buttonAction_Click (sender, e): void – метод, обрабатывающий событие нажатия на одну из активных кнопок btn_sbros или btn_ravno. Если была нажата клавиша «=», то вызывается метод doFunction() с параметром текущего арифметического действия – curFunction, в поле Text для txtInput заносится результат вычислений calcResult и обнуляется значение строковых переменных firstNumber, secondNumber, curFunction. Если была нажата клавиша сброса, то выполняется обнуление строковых переменных firstNumber, secondNumber, curFunction и stringToShow, обнуляется значение переменной calcResult и в поля Text для txtInput и txtOutput заносится значение null;

vvodNum(CurrTag): void – метод осуществляющий ввод числа, знака или дробного разделителя, в зависимости от переданного параметра CurrTag;

doFunction(CurrTag): void – метод осуществляющий выполнение арифметической операции, в зависимости от переданного параметра CurrTag;

isNum(inputText): bool – метод возвращающий результат необходимый для контроля корректности ввода – проверяет проверяет возможно ли перевести введенную строку в число, или нет;

txtInput_KeyDown(sender, e): void – метод обрабатывающий событие KeyDown для txtInput. В этом методе вызываются события нажатия на функциональные кнопки в зависимости от нажатой клавиши, а так же устанавливается значение true для переменной functionEntered;

txtInput_KeyPress(sender, e): void – метод отменяющий событие KeyPress если значение functionEntered было равно true.

Класс myNotebook.

Атрибуты, описанные в классе myNotebook:

btn_add типа Button. Полю Text присвоено значение «Добавить запись»;

btn_delete типа Button. Полю Text присвоено значение «Удалить запись»;

btn_find типа Button. Полю Text присвоено значение «Найти»;

btn_delete типа Button. Полю Text присвоено значение «Сохранить изменения и выйти»;

btn_exit типа Button. Полю Text присвоено значение «Выйти без сохранения»;

txtfind типа TextBox. Поле ввода названия записи для поиска;

notesList типа ListBox. Список для хранения заголовков записей;

txtBox типа RichTextBox. Поле для редактирования текста заметки;

notesArray[] – массив переменных типа String. Массив который содержит текст всех имеющихся записей.

Методы описанные в классе myNotebook:

myNotebook() – метод - конструктор, вызывающий метод InitializeComponent() из этого же класса. Так же этот метод прочитывает файл записей «notes.txt». Первая строчка файла – число записей в файле, далее идет заголовок и текст i–ой записи. Текст записей заносится в массив notesArray[], а из заголовков формируется список названий записей;

myNotebook_FormClosed(sender, e): void – обработчик события, вызываемого после закрытия myNotebook. В нем выполняется присваивание myNotebook значения null;

btn_exit_Click(sender, e): void – метод закрывающий окно myNotebook;

btn_add_Click(sender, e): void – метод выполняющий добавление записи. В этом методе осуществляется создание экземпляра класса addNoteDialog – theDialog. Если в результате работы с диалоговым окном была нажата кнопка OKButton, то происходит проверка названия записи заданого в диалоговом окне – названия записей не могут повторятся или быть пустыми;

btn_delete_Click(sender, e): void – метод выполняющий удаление записи. В этом методе происходит удаление текста записи из массива notesArray, удаление названия из списка заголовков записей, а так же задается значение false для поля Enabled в txtBox. Если ни один из заголовков записей не был выбран, то выводится сообщение об ошибке;

btn_find_Click(sender, e): void – метод выполняющий поиск по названию записи. Первоначальный поиск происходит по записям начиная с индекса выбранной записи (выделенная) плюс один, если ничего не было найдено, то происходит поиск с начала списка. Если строка поиска не была введена, то выведется сообщение об ошибке;

notesList_SelectedIndex_Changed(sender, e): void – метод реализующий вывод текста выбранной записи. Так же включается в себя обработку исключений возникающих при попытке вывода текста удаленой записи;

btn_save_Click() – метод, выполняющий сохранение всех изменений, которые были внесены пользователем в процессе работы записной книжки. Это осуществляется перезаписью файла «notes.txt». В первую строчку файла записывается число строк объекта notesList, а далее заголовок и текст i-ой записи из массива notesArray[], где i – общее число записей.;

txtBox_TextChanged(sender, e): void – метод сохраняющий любые изменения текста текущей записи.

 

Для более подробного описания взаимодействия компонентов системы и пользователя были построены диаграммы последовательности (Interaction Diagram), На диаграмме последовательности ось времени направлена сверху вниз. На диаграмме располагаются объекты классов, созданных в диаграмме классов. Каждый объект имеет линию жизни. На этих диаграммах показано, в какой последовательности будут выполняться действия для вариантов использования «Работать с калькулятором», «Работать с календарем», «Работать с записной книжкой», которые представлены на рисунках 3, 4 и 5 соответственно.

Рисунок 3 – Диаграмма последовательности для варианта использования «Работать с калькулятором»

Сначала передаётся сообщение от объекта «Пользователь» класса «Пользователь органайзера» к объекту mainMenu класса mainMenu – «btn_Calc_Click()».После чего передается сообщение объекту TheCalc класса myCalc – «myCalc()». Затем объект TheCalc передает сообщение сам себе – «InitializeComponent()». Далее пользователь передает сообщение «buttonNum_Click()» объекту TheCalc. Далее объект TheCalc передает сообщение сам себе – «vvodNum()». Затем пользователь передает сообщение «buttonFunction_Click()» объекту TheCalc. Далее объект TheCalc передает сообщение сам себе – «doFunction()».Далее пользователь передает сообщение «buttonNum_Click()» объекту TheCalc. Затем объект TheCalc передает сообщение сам себе – «vvodNum()». После чего пользователь передает сообщение buttonAction_Click() объекту TheCalc класса myCalc.


 

Рисунок 4 – Диаграмма последовательности для варианта использования «Работать с календарем»

Сначала передаётся сообщение от объекта «Пользователь» класса «Пользователь органайзера» к объекту mainMenu класса mainMenu – «btn_Calendar_Click()».После чего объект mainMenu передает сообщение объекту TheCalendar класса myCalendar – «myCalendar()». Затем объект TheCalendar передает сообщение сам себе – «InitializeComponent()». Далее объект «Пользователь» передает сообщение объекту TheCalendar– «btn_toDate_Click()».

 

 

Рисунок 5 – Диаграмма последовательности для варианта использования «Работать с записной книжкой»

Сначала передаётся сообщение от объекта «Пользователь» класса «Пользователь органайзера» к объекту mainMenu класса mainMenu – «btn_Notebook_Click()». Затем объект mainMenu передает сообщение объекту TheNotebook класса myNotebook – «myNotebook()». Затем объект TheNotebook передает сообщение сам себе – «InitializeComponent()». Далее объект «Пользователь» передает сообщение объекту TheNotebook – «btn_add_Click()». После передачи последнего сообщения, происходит передача сообщения «addNoteDialog()» объекту theDialog класса addNoteDialog. Затем объект theDialog передает сообщение сам себе – «InitializeComponent()» и, передав сообщение «btn_add_Click()» объекту TheNotebook, завершает свою линию жизни. Далее объект «Пользователь» передает сообщения «noteList_SelectedIndexChanged()» и «txtBox_textChanged()».

 

Для объекта txtBox, описанного в классе myNotebook была составлена диаграмма состояний (Statechart Diagram), которая показывает состояние объекта во время работы системы. Эта диаграмма представляет собой граф, в котором вершины являются состояниями объекта, а дуги – возможными переходами. Диаграмма состояний представлена на рисунке 6.

Рисунок 6 – Диаграмма состояний объекта txtBox

 


Дата добавления: 2018-05-12; просмотров: 344; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!