
- •Основи програмної інженерії Тема 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. Шаблони проектування. Структурні шаблони.
- •Поняття шаблону проектування.
- •Основні елементи шаблону.
- •Механізми повторного використання.
- •Структурні шаблони проектування.
Мова linq.
Всі раніше розглянуті функціональні засоби знаходять хороше застосування в мові LINQ. LINQ – це SQL-подібний синтаксис запиту даних у класах. Припустимо, що у нас є колекція об'єктів Product і нам потрібно знайти три об'єкти з найвищими цінами і вивести їх назви та ціни. Не маючи LINQ , нам довелося б використовувати код, подібний до наведеного в лістингу 6.
Лістинг 6. Запит без застосування LINQ
using System ;
using System.Coolections.Generic;
class Program {
static void Main (string [] args) {
Product [] products = {
new Product {Name = "Kayak", Category = "Watersports", Price = 275M},
new Product {Name = "Lifejacket", Category = "Watersports", Price = 48.95M},
new Product {Name = "Soccer ball", Category = "Soccer", Price = 19.50M},
new Product {Name = "Corner flag", Category = "Soccer", Price = 34.95M}
};
// Визначення масиву для зберігання результатів
Product [] results = New Product [3];
// Сортування вмісту масиву
Array.Sort ( products , ( item1 , item 2) => {
return Comparer <decimal>. Default.Comppare(item1.Price, item2.Price);
});
// Отримання трьох перших елементів масиву у якості результатів
Array.Copy ( products , results , 3);
// Виведення назв
foreach (Product р in results) {
Console.WriteLine ("Item: {0}, Cost: {1} ", p.Name, p.Price);
}
}
}
LINQ дозволяє значно спростити процес запиту, як показано в лістингу 7.
Лістинг 7. Використання LINQ для запиту даних
using System ;
using System.Linq;
class Program {
static void Main (string [] args) {
Product [] products = {
new Product {Name = "Kayak", Category = "Watersports", Price = 275M},
new Product {Name = "Lifejacket", Category = "Watersports", Price = 48.95M},
new Product {Name = "Soccer ball", Category = "Soccer", Price = 19.50M},
new Product {Name = "Corner flag", Category = "Soccer", Price = 34.95M}
};
var results = from product in products
orderby product.Price descending
select new {
product.Name,
product.Price
};
// Виведення назв
int count = 0;
foreach (var р in results) {
Console.WriteLine ("Item: {0}, Cost: {1} ", p.Name, p.Price);
if (++count == 3) {
break ;
}
}
}
}
Цей код значно лаконічніший. SQL-подібний запит виділений напівжирним. Ми запитуємо об'єкти Product у порядку зниження ціни і використовуємо ключове слово select , щоб повернути анонімний тип, який містить лише ті властивості, які нам потрібні. Цей стиль LINQ відомий як синтаксис запиту, і з ним знайома більшість розробників. Недолік цього запиту в тому, що він повертає по одному анонімно типізованому об'єкту для кожного елемента Product масиву, який був використаний у вихідному запиті. Тому доводиться повозитися з результатами, щоб отримати перші три з них і вивести необхідні відомості.
Однак при готовності принести в жертву простоту синтаксису запиту, від LINQ можна домогтися значно більшого. Альтернативою є синтаксис точкового запису, або просто точковий запис, побудований на основі методів розширення. Використання цього альтернативного синтаксису для обробки об'єктів Product продемонстровано в лістингу 8.
Лістинг 8. Використання точкової запису LINQ
using System ;
using System.Linq;
class Program {
static void Main (string [] args) {
Product [] products = {
new Product {Name = "Kayak", Category = "Watersports", Price = 275M},
new Product {Name = "Lifejacket", Category = "Watersports", Price = 48.95M},
new Product {Name = "Soccer ball", Category = "Soccer", Price = 19.50M},
new Product {Name = "Corner flag", Category = "Soccer", Price = 34.95M}
};
var results = products
.OrderByDescending (e => e.Price)
.Take (3)
.Select (e => new { e.Name, e.Price });
foreach (var р in results) {
Console.WriteLine ("Item: {0}, Cost: {1} ", p.Name, p.Price);
}
}
}
Перш за все, слід визнати, що цей запит LINQ , виділений напівжирним, виглядає не таким чітким, як виражений у відповідності з синтаксисом запитів, але не всі функціональні засоби LINQ мають відповідні ключові слова С#. Для вирішення серйозних завдань програмування LINQ доведеться перейти до використання методів розширення. Кожен з методів розширення LINQ, представлений в лістингу 8, застосовується до IEnumerable < T > і повертає IEnumerable < T >, що дозволяє об'єднувати методи в ланцюжки для створення складних запитів.