
- •Основи програмної інженерії Тема 1. Поняття програмної інженерії. Вступ
- •Процес створення програмного забезпечення
- •Моделі технологічного процесу створення пз
- •Моделі процесу розробки по
- •Характеристики якісного пз
- •Тема 2. Види моделей систем. Поняття і класифікація вимог до програмної системи.
- •Способи запису специфікацій вимог.
- •Види моделей систем.
- •Мова моделювання uml.
- •Об'єктні моделі
- •Інструментальні case-засоби.
- •Тема 3. Поняття архітектурного проектування. Архітектурні моделі.
- •Архітектурний шаблон mvc.
- •Особливості шаблону mvc.
- •Модель проблемної сфери.
- •Тема 4. Важливі функціональні засоби мови c#. Автоматично реалізовані властивості.
- •Ініціалізатори об'єктів та колекцій.
- •Автоматичне виведення типу.
- •Анонімні типи.
- •Використання методів розширення Методи розширення
- •Застосування методів розширення до інтерфейсу
- •Створення фільтруючих методів розширення
- •Тема 5. Лямбда-вирази. Мова linq. Лямбда-вирази.
- •Мова linq.
- •Методи розширення linq.
- •Відкладені запити linq.
- •Тема 6. Створення слабо зв'язаних компонентів. Впровадження залежності.
- •Контейнери впровадження залежності.
- •Бібліотека Ninject.
- •Порядок роботи з Ninject.
- •Тема 7. Засоби доступу до даних. Технологія ado.Net.
- •Реалізація доступу до даних.
- •Робота з даними.
- •Тема 8. Тестування пз. Розробка через тестування. Автоматизоване тестування пз та його види.
- •Розробка через тестування. Робочий потік "червоний-зелений-рефакторинг".
- •Модель "організація.Дія.Твердження".
- •Використання бібліотеки Moq
- •Тема 9. Проектування інтерфейсу користувача. Інтерфейс користувача.
- •Переваги графічного інтерфейсу.
- •Процес проектування графічного інтерфейсу.
- •Принципи проектування інтерфейсів користувача.
- •Шаблони.
- •Тема 10. Основи інженерії вимог. Розробка вимог.
- •Формування і аналіз вимог.
- •Опорні точки зору.
- •Сценарії.
- •Атестація вимог.
- •Тема 11. Прототипування програмних систем. Поняття прототипування.
- •Переваги прототипування.
- •Види прототипування.
- •Технології швидкого прототипування.
- •Тема 12. Покомпонентна розробка. Компоненти і класи об'єктів.
- •Компоненти як постачальники послуг.
- •Рівні абстракції компонентів.
- •Вимоги до компонентів.
- •Тема 13. Шаблони проектування. Структурні шаблони.
- •Поняття шаблону проектування.
- •Основні елементи шаблону.
- •Механізми повторного використання.
- •Структурні шаблони проектування.
Тема 4. Важливі функціональні засоби мови c#. Автоматично реалізовані властивості.
Властивість C# дозволяє представляти фрагмент даних класу так, щоб дані були відокремлені від способу їх визначення та вилучення. У лістингу 1 міститься простий приклад класу на ім'я Product.
Лістинг 1. Визначення властивості
public class Product {
private string name;
public string Name {
get { return name;}
set { name = value; }
}
}
Властивість, назване Name, виділено напівжирним. Оператори блоку коду get (Званого одержувачем (getter)) виконуються при зчитуванні значення властивості, а оператори блоку set - під час надання значення властивості (присвоєне значення представлено спеціальною змінною value). Властивість використовується іншими класами так, неначе воно є полем (див. лістинг 2).
Лістинг 2. Використання властивості
using System;
class Program {
static void Main(string[] args) {
Product myProduct = new Product();
myProduct.Name = "Apple";
string productName = myProduct.Name;
Console.WriteLine("Product name: {0}", productName);
}
}
Використання властивостей краще ніж використання полів, оскільки оператори в блоках get і set можна змінювати, не змінюючи всі класи, що залежать від даної властивості. Але у випадку наявності класу зі значною кількістю однотипних описів властивостей код стає надмірно багатослівним.
Нам потрібно забезпечити гнучкість властивостей, але в даному випадку нам не потрібні спеціалізовані одержувачі і установники. Рішення полягає в застосуванні автоматично реалізованої властивості, яка також називається автоматичною властивістю. Використання автоматичної властивості дозволяє створити шаблон властивості на основі поля без визначення поля або зазначення коду в отримувачі чи установнику (див. лістинг 3).
Лістинг 3. Використання автоматично реалізованих властивостей
public class Product {
public int ProductID { get; set; }
public string Name { get; set; }
public string Description { get; set;}
public decimal Price { get; set; }
public string Category { set; get;}
}
При використанні автоматичних властивостей слід звернути увагу на декілька ключових моментів. По-перше, ми не визначаємо тіла блоків одержувача або установника. По-друге, ми не визначаємо поле, яке лежить в основі властивості. Обидва ці дії виконуються компілятором C # при збиранні класу. Застосування автоматичного властивості не відрізняється від звичайного властивості. Код, наведений у лістингу 2, як і раніше буде працювати. Використовуючи автоматичні властивості, ми позбавляємо себе від необхідності введення частини коду, створюємо більш читабельний код і при цьому зберігаємо гнучкість, запропоновану властивістю. Якщо коли-небудь буде потрібно змінити спосіб реалізації властивості, завжди можна повернутися до формату звичайного властивості. Припустимо, що потрібно змінити спосіб формування властивості, як показано в лістингу 4.
Лістинг 4. Повернення від автоматичного властивості до звичайного
public class Product {
private string name;
public int ProductID { get; set; }
public string Name {
get { return ProductID + name;}
set { name = ProductID + value; }
}
public string Description { get; set;}
public decimal Price { get; set; }
public string Category { set; get;}
}
На замітку! Зверніть увагу, що для повернення до звичайної властивості потрібно реалізувати і блок одержувача, і блок установника. Мова C# НЕ підтримує змішане застосування автоматичного і звичайного стилів одержувачів і установників.