Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Министерство образования науки, молодёжи и спорта Украины
Севастопольский национальный технический университет
Кафедра ИС
Лабораторная работа №2
Исследование способов применения поведенческих паттернов проектирования
Выполнил:
ст. гр. И-22д
Масюк А. В.
Проверил:
Дрозин А. Ю.
Севастополь
2013
1 Цель работы.
Исследовать возможность использования поведенческих паттернов проектирования. Получить практические навыки применения паттернов поведения при объектно-ориентированном проектировании.
2. Постановка задачи с указанием моделируемой предметной области.
1. Для предметной области «обучение студента в университете» выполнить анализ заданной предметной области, построить диаграмму классов, на диаграмме классов , найти класс-клиент, запрос от которого необходимо передавать по цепочке объектов, и классы-получатели запросов, объекты которых целесообразно объединять в цепочку.
2. Выполнить перепроектирование диаграммы классов использовав паттерн Цепочка обязанностей.
3. Сравнить полученные диаграммы классов, сделать выводы и целесообразности использования паттернов проектирования для данной системы.
4. На основе UML-диаграммы выполнить синтез программного кода, скомпилировать программу и продемонстрировать ее работоспособность.
3 Словесное описание мотивации применения паттерна Цепочка обязанностей при проектировании данной системы.
Выбранная предметная область относится к сфере обучения, в которой, как правило, есть сторона учебного заведения(методист, лекторы и тп) и учащихся. Применение паттерна «Цепочка обязанностей» в данном случае аргументируется предоставление удобства в поисках преподавателей из разных стран с помощью уровня их зарплат. В данном случае из класса Преподаватель идет запрос в классы наследники на поиск и вывод информации о преподавателе(страна и зарплата).
4. ДИАГРАММЫ КЛАССОВ
Рисунок 4.1 Исходная диаграмма классов.
Рисунок 4.2 Модифицированная диаграмма классов.
5. ТЕСКТ ПРОГРАММЫ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public abstract class Lecturer {
protected Lecturer successor;
public void SetSuccesessor(Lecturer succesessor) {
this.successor = succesessor;
}
public abstract void GetSal(int salary);
}
public class Ukrainian : Lecturer
{
public override void GetSal(int salary)
{
if (salary <= 500 && salary >= 300)
Console.WriteLine("Found Ukrainian Assistant of Physics with salary: $ " + salary + "\n");
else
if (salary <= 750 && salary > 500)
Console.WriteLine("Found Ukrainian Associate Professor of Physics with salary: $ " + salary + "\n");
else
if (salary <= 1000 && salary > 750)
Console.WriteLine("Found Ukrainian Professor of Physics with salary: $ " + salary + "\n");
else if (successor != null)
{
successor.GetSal(salary);
}
}
}
public class Arabic : Lecturer
{
public override void GetSal(int salary)
{
if (salary <= 12000 && salary >= 10000)
Console.WriteLine("Found Arabic Assistant of Chemistry with salary: $ " + salary + "\n");
else
if (salary <= 15000 && salary > 12000)
Console.WriteLine("Found Arabic Associate Professor of Chemistry with salary: $ " + salary + "\n");
else
if (salary <= 17000 && salary > 15000)
Console.WriteLine("Found Arabic Professor of Chemistry with salary: $ " + salary + "\n");
else if (successor != null)
{
successor.GetSal(salary);
}
}
}
public class American : Lecturer
{
public override void GetSal(int salary)
{
if (salary <= 3000 && salary >= 1500)
Console.WriteLine("Found American Assistant of History with salary: $ "+ salary + "\n");
else
if (salary <= 5000 && salary >= 3000)
Console.WriteLine("Found American Associate Professor of History with salary: $ "+ salary + "\n");
else
if (salary <= 7000 && salary >= 5000)
Console.WriteLine("Found American Professor of Chemistry with salary: $ " +salary + "\n");
else if (successor != null)
{
successor.GetSal(salary);
}
}
}
class DemoChofRes {
static void Main() {
Lecturer prep1=new Ukrainian();
Lecturer prep2 = new Arabic();
Lecturer prep3=new American();
Random ran = new Random();
prep1.SetSuccesessor(prep2);
prep2.SetSuccesessor(prep3);
int[] salaries = new int[30];
for (int i = 0; i < 30; i++) {
salaries[i] = ran.Next(300, 17000);
}
foreach (int salary in salaries) {
prep1.GetSal(salary);
}
Console.WriteLine("Press any key to exit.\n P.S.:Treatment was successful!)");
Console.ReadKey();
}
}
ВЫВОД
На лабораторной работе изучены принципы использования паттернов проектирования. Получены практические навыки применения паттернов поведения при объектно-ориентированном проектировании. Был изучен паттерн поведения цепочка обязанностей. В данном конкретный объект обрабатывает запрос, а если не может обработать, передаёт его другому объекту.