Общие сведения о проектировании и реализации моделей предметной области

НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ

ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

 

УТВЕРЖДАЮ

Директор ИДО

_______________ С.И. Качин

 

«____»_____________2012 г.

 

 

МЕТОДЫ И СРЕДСТВА ПРОЕКТИРОВАНИЯ ИНФОРМАЦИОННЫХ СИСТЕМ И ТЕХНОЛОГИЙ

Методические указания по выполнению лабораторных работ для студентов ИДО, обучающихся по направлению
220400 «Управление в технических системах»

 

 

Семестр
Лекции, часов
Лабораторные занятия, часов  
Контрольная работа  
Самостоятельная работа, часов  
Всего часов  
Форма контроля   экзамен

 

 

Томск 2014


УДК 681.3

Методы и средства проектирования информационных систем и технологий: метод. указ. по выполнению лабораторных работ для студентов ИДО, обучающихся по напр. 230100 «Информатика и вычислительная техника» / сост. П.И. Банокин; Томский политехнический университет. – Томск: Изд-во Томского политехнического университета, 2015. – 18 с.

 

 

Методические указания по выполнению лабораторных работ рассмотрены и рекомендованы к изданию методическим семинаром кафедры Автоматики и компьютерных систем «____»___________2015 года

 

Зав.кафедрой проф., д-р техн. наук _________________А.С. Фадеев

 

 


Оглавление

Лабораторная работа №1. Модульная архитектура программного обеспечения. Архитектурный шаблон Репозиторий. Модульное тестирование. 5

Общие сведения о модульном тестировании. 5

Задание. 7

Список литературы.. 8

Литература обязательная. 8

Дополнительная литература. 9

Интернет-ресурсы.. 9

 


Аннотация

Методические указания по выполнению лабораторных работ по дисциплине «Методы и средства проектирования информационныз систем и технологий» предназначены для студентов ИДО, обучающихся по направлению 230100 «Информатика и вычислительная техника». Данная дисциплина изучается один семестр.

Приведено содержание основных тем дисциплины, указан перечень лабораторных работ. Даны методические указания по выполнению лабораторных работ.

 


Лабораторная работа №1. Модульная архитектура программного обеспечения. Архитектурный шаблон Репозиторий. Модульное тестирование

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

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

Наиболее часто в отдельных модулях реализуется следующая функциональность:

1. Модель данных.

2. Доступ к данных (например, набор классов для доступа к реляционной базе данных).

3. Графический интерфейс пользователя.

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

5. Математические вычисления.

6. Компьютерной графика.

В среде разработки программного обеспечения Microft Visual Studio каждый модуль обычно реализуется в виде отдельного проекта. Отдельным модулем может быть проект многооконного программного приложения Windows Forms, консольное программное приложение и другие типы проектов. Разработчик может подключить к текущему проекту уже готовый модуль через раздел References (ссылки) инструмента Solution explorer (обозреватель решения).

Многослойная архитектура программных приложений предлагает разделение исходного кода на модули (слои) и накладывает ограничения на отношения зависимости между модулями. Модули низкого уровня не могут зависеть от модулей более высокого уровня. Часто в многослойных приложениях реализуют следующие слои:

1. Модель предметной области, реализованная в виде библиотеки классов.

2. Слой доступа к данным.

3. Логика программного приложения.

4. Графический интерфейс пользователя

Общие сведения о проектировании и реализации моделей предметной области

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

В моделях предметной области выделяют следующие основные типы элементов:

1. Сущности – абстракции группы (категории) объектов предметной области. Сущность обязательно имеет уникальный набор атрибутов, позволяющих по их значениям уникально идентифицировать ее объект. Также сущность может иметь поведение – способность изменить свое состояние или состояние других объектов.

2. Объекты значения. Идентифицируются исключительно совокупностью значений всех их атрибутов. Не имеют поведения. Пример объектов значения – адрес, цвет в формате RGB. Обычно объекты значения реализуются как составной тип данных – тип значения (struct или record).

3. Сервисы реализуют операции преобразования объектов сущностей, не относящихся ни к одной из них. Обычно реализуются в виде статических классов.

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

Помимо перечисленных выше элементов в моделях предметной области могут также реализовываться агрегаты. Агрегат обладает всеми свойствами сущности, но отличается своей сложной внутренней структурой. Агрегат состоит из управляющего объекта (корень агрегата, root) и коллекции зависимых объектов. Корень агрегат реализует методы для управления зависимыми объектами (например, операции добавления в коллекцию, исключения из коллекции и редактирования). Важной особенностью агрегата заключается в том, что он обрабатывается репозиторием как единое целое – корень агрегата и коллекция зависимых объектов сохраняются и считываются в рамках одной операции, а не по отдельности. Примером агрегата может быть «Заказ» в интернет-магазине, который включает коллекцию зависимых объектов – отдельных товарных позиций, входящих в заказ.

// Сущность Индивидуум

public class Person

{

public string PassportNumber;

public string Name;

public string Education;

public Address HomeAdress;

public List<Person> Friends;

public void AddFriend(Person p){.....}

public void Unfriend(Person p) {....}

}

 

//объект значения Адрес (идентичность определяется названием улицы и номером дома)

public struct Address

{

public string Street;

public string HouseNumber;
}

 

public class PersonRepository

{

public List<Person> Get(){....}

public void Save(Person p){....}

public void Delete(Person p){....}

}

 

//Сервис для создания уведомления для друзей индивидуума

public class FriendNotifier

{

public void Notify (Person p){

foreach (var item in p.Friends)

{

.....

}

}

}

 

Пример реализации обобщенного интерфейса репозитория и репозитория:

public interface IGenericRepository<T> where T : class

{

 

IQueryable<T> GetAll();

IQueryable<T> FindBy(Expression<Func<T, bool>> predicate);

void Add(T entity);

void Delete(T entity);

void Edit(T entity);

void Save();

}

 

 

public class GenericRepository<T> :

IGenericRepository<T>

where T : class

{

 

private JobContext _entities;

public GenericRepository(string connectionString)

{

_entities = new JobContext(connectionString);

_entities.Database.Initialize(true);

}

 

 

public virtual IQueryable<T> GetAll()

{

 

IQueryable<T> query = _entities.Set<T>();

return query;

}

 

public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate)

{

 

IQueryable<T> query = _entities.Set<T>().Where(predicate);

return query;

}

 

public virtual void Add(T entity)

{

_entities.Set<T>().Add(entity);

}

 

public virtual void Delete(T entity)

{

_entities.Set<T>().Remove(entity);

}

 

public virtual void Edit(T entity)

{

_entities.Entry(entity).State = System.Data.EntityState.Modified;

}

 

public virtual void Save()

{

_entities.SaveChanges();

}

}