НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
УТВЕРЖДАЮ
Директор ИДО
_______________ С.И. Качин
«____»_____________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();
}
}