Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Результати виконання практичних завдань. Завдання 1. Створення рішення Visual Studio і підключення бібліотек базових класів





Завдання 1. Створення рішення Visual Studio і підключення бібліотек базових класів.

 

Роботу над реалізацією програми починаємо зі створення рішення Visual Studio з назвою SubjectAreas та з проектом бібліотеки класів ПО. У даному випадку це проект з назвою WorldDivision для ПО «Поділ Світу».

Для спрощення реалізації бібліотеки класів, що представляють сутності предметної області (ПО) можна скористатись навчальною бібліотекою базових класів сутностей Entities (рисунок 1). Класи даної бібліотеки реалізують інтерфейси, що визначені у навчальній бібліотеці класів загального призначення Common.

В навчальних цілях для використання засобів бібліотек Entities та Common ми включимо у рішення не файли бібліотек DLL, а безпосередньо копії проектів цих бібліотек. Після чого у проект бібліотеки класів ПО додаємо посилання на обидва проекти бібліотек класів.

Рисунок 1 – Діаграма класів бібліотеки базових класів сутностей Entities

Завдання 2. Створення класів для представлення сутностей предметної області.

 

Перед створенням класів для сутностей доцільно проаналізувати можливості повторного використання раніше створеного коду за рахунок успадкування класів або композиції об’єктів.

Реалізацію атрибутів Назва, Опис, URL можна успадкувати від базових класів бібліотеки Entities. Атрибут Цифровий код характеризує екземпляри трьох класів сутностей і є специфічним для ПО «Поділ Світу». Для його реалізації доцільно створити окремий абстрактний базовий клас UNDivisionObject, який представлятиме усі види об’єктів статистичної класифікації ООН.

Загальна діаграма класів бібліотеки WorldDivision представлена на рисунку 2.

 

 

Рисунок 1 – Ієрархія класів бібліотеки WorldDivision (ПО «Поділ Світу»)

 

Детальна схема класу UNDivisionObject наведена на рисунку 3.

Створення класів для сутностей починаємо із створення класів, які не залежать від класів інших сутностей. Для ПО «Поділ Світу» такими є сутності Географічний регіон та Статус члена МО. Далі краще створювати класи для сутностей, що залежать від незалежних сутностей і т. д. Для ПО «Поділ Світу» доцільним є створення класів по порядку для сутностей:

1) Географічний регіон – клас Region;

2) Країна – клас Country: містить обов’язкове посилання на об’єкт класу Region;

3) Міжнародна організація – клас Organization: містить колекцію посилань на об’єкти класу Region;

4) Статус члена МО – клас MembershipStatus;

5) Членство країни у МО – клас CountriesMembership; містить обов’язкові посилання на об’єкти класів Organization, Country та MembershipStatus.

 

Рисунок 3 – Схема абстрактного класу UNDivisionObject, який є базовим для сутностей, що представляють об’єкти статистичної класифікації ООН

 

Перші три класи представляють об’єкти статистичної класифікації ООН і успадковують клас UNDivisionObject з реалізацією атрибутів Назва, Опис, URL та Цифровий код. Клас MembershipStatus успадковує клас DescribedNamedEntity з реалізацією атрибутів Назва, Опис та URL. Клас CountriesMembership успадковує клас DescribedEntity з реалізацією атрибутів Опис та URL.

Усі класи сутностей опосередковано успадковують базовий клас сутностей Entity, який реалізує атрибут Id (унікальний числовий ідентифікатор, який забезпечує можливість роботи зі сховищами даних, що використовують технології доступу до даних, які зберігаються у базах даних, зокрема ADO.NET). Крім цього, клас Entity реалізує логічне поле isChanged, яке інкапсульоване у властивості IsChanged. Значення true даного поля свідчить про наявність змін у стані об’єкту після останньої операції збереження даних. При його встановленні методами похідних класів за допомогою захищеного методу доступу set генерується подія Changed, на яку можна підписатись при потребі реагування на зміни стану окремих сутностей. Скинути значення ознаки змін можна шляхом виклику загальнодоступного методу ClearEditingFlags() (назва вказує на можливість включення в подальшому у клас додаткових службових полів).

Клас Entity визначає також загальну структуру текстового представлення об’єктів сутностей у реалізації загальнодоступного методу ToDataString(). Цей метод повертає текстові дані, які отримує від віртуальних методів ToShortDataString() та CreateCollectionsDataString(), доповнюючи їх значенням поля Id.

Загальнодоступний віртуальний метод ToShortDataString() базового класу повертає ім'я типу для екземпляру сутності і призначений для перевизначення у похідних класах для формування текстового представлення об’єкту на основі значень його основних атрибутів.

Захищений віртуальний метод CreateCollectionsDataString() базового класу повертає порожній рядок і призначений для перевизначення у похідних класах, що містять колекції посилань на асоційовані об’єкти сутностей, з метою формування текстового представлення про вміст цих колекцій. Зокрема, цей метод перевизначений у класі Organization для формування списку назв географічних регіонів, країни з яких є членами організації. Вміст даної колекції передбачається використовувати в процесі формування списку вибору країн для об’єктів, що представляють членство країн у міжнародних організаціях (у список будуть включатись назви не усіх країн, а лише тих, що розташовані у заданих для вибраної організації регіонах).

Формат текстового представлення сутностей у реалізаціях методів ToShortDataString() та CreateCollectionsDataString() довільний, але рекомендується формувати представлення з врахуванням контексту абзацного відступу, який визначається реалізацією поточного об’єкту класу, похідного від класу Common.Context.LineIndent (за замовчанням це об’єкт класу Common.Context. DefaultLineIndent).

Для доступу до об’єкту використовується статичне посилання current, яке інкапсульване у статичній властивості Current класу LineIndent. Властивість Value об’єкта, яка доступна тільки для читання, повертає рядок символів (за замовчанням, пробілів), довжина якого визначає поточний абзацний відступ. Методи Increase() та Decrease() поточного об’єкту забезпечують відповідно збільшення та зменшення величини відступу на заданий крок (за замовчанням, 2 символи), але не більше максимального значення (за замовчанням, 40 символів). Параметри відступів можна змінити лише шляхом створення нового об’єкту і присвоєння його властивості Current контексту. Повернути початкові значення можна шляхом виклику статичного методу ResetToDefault().

Схеми класів сутностей представлені на рисунках 4 – 8.

Приклад реалізації класу ПО наведений у лістингу 1.

 

Рисунок 4 – Схема класу Macroregion, який представляє об’єкти сутності Макрогеографічний регіон

 

Лістинг 1 – Реалізація класу Macroregion

 

using System;

 

namespace WorldDivision.Domain {

 

/// <summary>

/// Представляє макрогеографічний (континентальний)

/// або географічний регіон як об'єкт

/// статистичної класифікації ООН

/// </summary>

[Serializable]

public class Macroregion: UNDivisionObject {

 

// Посилання на макрогеографічний регіон

private Macroregion parent;

 

/// <summary>

/// Повертає і встановлює посилання на

/// макрогеографічний регіон

/// </summary>

public Macroregion Parent {

get { return parent; }

set {

if (value == this) {

throw new InvalidOperationException(

"Спроба встановити для об'єкту, що "

+ "представляє макрогеографічний регіон "

+ "з іменем " + this.Name

+ ", посилання на поточний об'єкт "

+ "у якості посилання на макрогеографічний "

+ "регіон вищого рівня ієрархії"

);

}

parent = value;

this.IsChanged = true;

}

}

 

/// <summary>

/// Ініціалізує екземпляр сутності, що представляє

/// макрогеографічний (континентальний)

/// або географічний регіон

/// </summary>

/// <param name="name">назва</param>

/// <param name="numericCode">цифровий код</param>

/// <param name="parent">макрорегіон</param>

public Macroregion(string name,

string numericCode, Macroregion parent)

: base(name, numericCode) {

this.Parent = parent;

}

 

/// <summary>

/// Ініціалізує екземпляр сутності, що представляє

/// макрогеографічний (континентальний)

/// або географічний регіон

/// без визначення обов'язкових полів

/// (потрібен для функціонування сховища даних)

/// </summary>

internal Macroregion() { }

 

}

}

 

Рисунок 5 – Схема класу Country, який представляє об’єкти сутності Країна

 

Рисунок 6 – Схема класу Organization, який представляє об’єкти сутності Міжнародна організація

 

Рисунок 7 – Схема класу MembershipStatus, який представляє об’єкти сутності Статус членства країни у МО

 

Рисунок 8 – Схема класу CountriesMembership, який представляє об’єкти сутності Членство країни у МО

Date: 2015-09-02; view: 516; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию