- •1. Основні терміни технології програмування
- •2. Класифікація програмного забезпечення
- •Поняття життєвого циклу розробки програмного забезпечення.
- •Етапи розробки
- •Базові моделі розробки програмних продуктів.
- •Вимоги до методології та технології розробки пп
- •Каскадна модель
- •3. Модель прототипування програмного продукту
- •4. Спіральна модель
- •5. Модель rad
- •6. Модель екстремального програмування (xp)
- •7. Модель msf (Microsoft Solutions Framework)
- •Принципи й види налагодження.
- •Аксіоми налагодження.
- •Автономне налагодження модуля.
- •Комплексне налагодження програмного засобу.
- •Інструменти розробки програмних засобів.
- •Інструментальні середовища розробки й супроводу програмних засобів.
- •Інструментальні середовища програмування.
- •Поняття комп'ютерної технології розробки програмних засобів і її робочі місця.
- •Інструментальні системи технології програмування.
- •Приклад реалізації класу Log.
- •Розробка програмного продукту з двома потоками
- •Визначення крапок контролю програмного продукту.
- •Визначення кількості викликів
- •Визначення ступеня покриття
- •Фундаментальні проблеми профілювання.
- •Причини рефакторингу
- •Підстави для проведення рефакторингу
- •Прийоми рефакторингу
- •Автоматизований рефакторинг
- •1. Принципи повторного використання елементів програм
- •2. Створення шаблонів форм у вигляді файлів
- •3. Використання шаблонів форм у новому проекті
- •4. Збереження шаблонів форм в депозитарії
- •5. Використання шаблонів форм із депозитарію
- •Шаблони класів на мові програмування с#.
- •Приклади шаблонів (класів шаблонів).
- •1. Використання підпрограм в оброблювачах подій
- •2. Звертання до активного компонента не за ім’ям
- •2. Обробка групи компонентів
- •4. Обробка компонентів як масиву
- •5. Сортування даних у компонентах
- •1. Принципи модульного програмування
- •2. Принцип «приховання даних»
- •3. Поняття модуля в Object Pascal
- •4. Структура модульного файлу
- •5. Створення модуля в Object Pascal
- •6. Створення модуля з переліком стандартних діалогів
- •7. Використання текстових констант у модулях
- •8. Створення підпрограм для обробки компонентів
- •1. Поняття dll
- •2. Створення dll бібліотеки в Delphi
- •3. Внесення форм в dll
- •4. Використання dll бібліотеки
- •Питання для самоконтролю
- •Використання регулярних виразів у програмах.
- •1. Призначення зовнішніх компонентів
- •2. Установка й видалення зовнішніх компонентів
- •3. Установка й видалення бібліотек компонентів
- •4. Запуск зовнішніх програм і файлів
- •Питання для самоконтролю
- •1. Загальні принципи технології com
- •2. Робота з com-сервером Microsoft Word
- •Робота з документами в Microsoft Word
- •Використання шаблону для формування документів
- •Робота з таблицями
- •Вставка малюнків і їх форматування
- •1. Операції з Com-Сервером Microsoft Excel
- •Робота із книгами в Microsoft Excel
- •Робота з аркушами книги в Microsoft Excel
- •Використання шаблону для формування книги
- •Формування таблиці
- •6. Форматування чарунок
- •Види довідкових систем
- •Інші засоби підтримки користувача
- •2.Формати довідників
- •3.Створення довідки у форматі html Help
- •4.Створення контекстної довідки
- •5.Інтеграція довідкового файлу в додаток
- •Перелік шаблонів, що породжують
- •Перелік структурних шаблонів
- •Перелік шаблонів поведінки
- •Призначення патерну Singleton
- •Реалізація патерну Singleton
- •Результати застосування патерну Singleton
- •Призначення патерна Observer
- •Постановка проблеми, що вирішується за допомогою патерна
- •Структура патерна Observer
- •Приклад патерна Observer
- •Реалізація патерна Observer
- •Реалізація патерну Observer: до та після
- •Призначення патерну Strategy
- •Опис патерну Strategy
- •Реалізація патерну Strategy
- •Призначення патерна Factory Method
- •Опис патерну Factory Method
- •Реалізація патерна Factory Method
5. Використання шаблонів форм із депозитарію
Для вставлення шаблона форми в новий проект вам треба буде виконати команду File - New - Other і в діалоговому вікні New Items відшукати вашу форму:
У нижній частині вікна New Items розташовано три перемикачі, які визначають, як саме ви прагнете запозичити форму з Депозитарію: Copy - копіювати, Inherit - успадковувати, Use - використовувати. Якщо вибрано перемикач Copy, то файли форми просто будуть скопійовані у ваш додаток. При цьому ніякого подальшого зв'язку між вихідною формою й копією не буде. Ви можете спокійно змінювати властивості вашої копії, і це ніяк не відіб'ється на формі, що зберігається в Депозитарії. А якщо ви щось зміните у формі, що зберігається в Депозитарії, то ці зміни ніяк не торкнуться вашого додатка, куди ви до цього скопіювали форму.
При вибрано перемикач Inherit ви отримаєте у своєму проекті форму, що успадковує розміщену в Депозитарії. Це значить, що якщо ви щось зміните у формі, що зберігається в Депозитарії, то це відіб'ється при перекомпіляції у всіх проектах, які успадковують цю форму. Однак зміни в наслідуваних формах ніяк не позначаться на властивостях форми, що зберігається в Депозитарії.
При включеній кнопці Use ви отримаєте режим використання. У цьому випадку у ваш проект включиться сама форма, що зберігається в Депозитарії. Значить будь-яка зміна властивостей форми, зроблена у вашому проекті, відіб'ється й на формі в Депозитарії, і на всіх проектах, що успадковують або використовують цю форму (при їхній перекомпіляції).
Видалення шаблонів форм із Депозитарію
Якщо є механізм включення в Депозитарій форм і проектів, то повинен бути й механізм їх видалення. Видалення в Депозитарії об'єктів, що зберігаються, виконується командою Tools - Repository. При цьому відкривається вікно:
У лівій панелі вікна ви можете вибрати одну з закладок і в правій панелі побачити її склад. Ви можете додати (Add Page), вилучити (Delete Page), перейменувати (Rename Page) закладки Депозитарію, поміняти їхню послідовність за допомогою кнопок зі стрілками, виділити один з об'єктів, що зберігаються, і вилучити його (Delete Object), відредагувати (Edit Object) інформацію про об'єкт. Ви можете також виділити в правій панелі одну з форм і включити прапорець Main Form (головна форма). Тоді при відкритті нового проекту буде з'являтися не звичайна порожня форма, а саме ця позначена в Депозитарії. Якщо для однієї з форм включити прапорець New Form (нова форма), то саме ця форма, а не порожня, буде включатися в проект при виконанні команди File - New - Form.
Шаблони класів на мові програмування с#.
Універсальні класи інкапсулюють операції, що не відносяться до якогось певного типу даних. Найчастіше універсальні класи використовуються з колекціями, такими як зв'язані списки, хеш-таблиці, черги, стеки, дерева і т.п. Такі операції як додавання елементів в колекцію або їх видалення здійснюються однаково незалежно від типу збережених даних. Для більшої частини сценаріїв, в яких потрібні класи колекцій, рекомендується використовувати класи, що входять до бібліотеки класів платформи. NET Framework. Додаткові відомості про використання цих класів див Як правило, створення універсальних класів починається з запуску існуючого класу і зміни типів на параметри типів по одному доти, поки не буде досягнуто оптимальне співвідношення між універсальністю і зручністю. При створенні власних універсальних класів слід враховувати наступне:
• Які типи перетворювати в параметри.
Як правило, чим більше типів перетворено в параметри, тим більш гнучким стає програмний код. Однак, зайве узагальнення може зробити код складним для розуміння іншим розробникам.
• Які обмеження застосовуються до параметрів типів
• Рекомендується застосовувати найбільше можливе число обмежень, при якому забезпечується обробка потрібних типів. Наприклад, якщо відомо, що універсальних клас потрібен тільки для посилальних типів, можна застосувати обмеження класу. Це запобіжить використання класу з типами значень і дозволить використовувати оператор as для T і перевіряти нульові значення.
• Чи слід розділяти поведінку універсального класу на базові класи і підкласи.
Універсальні класи можуть служити базовими класами, тому при їх створенні слід враховувати такі ж обставини, як при створенні класів, які не є універсальними. Див правила успадкування від універсальних базових класів далі в цьому розділі.
• Чи слід реалізовувати один або кілька універсальних інтерфейсів.
Наприклад, при створенні класу, який буде використаний для створення елементів в універсальній колекції, може знадобитися реалізувати інтерфейс, подібний IComparable <T>, де T - тип вашого класу.
У правилах, що діють для параметрів типів і обмежень, діє кілька неявних принципів поведінки універсальних класів, особливо щодо успадкування та доступу до членів. Перед тим, як продовжити, слід усвідомити деякі моменти. Для універсального класу Node <T>, клієнтський код може посилатися на клас шляхом зазначення аргументу типу, щоб створити закритий тип (Node <int>). Також можна не вказувати параметр типу, щоб створити відкритий тип (Node <T>). Універсальні класи можуть бути успадковані від конкретних закритих або відкритих базових класів.
C#
class BaseNode { }
class BaseNodeGeneric<T> { }
// concrete type
class NodeConcrete<T> : BaseNode { }
//closed constructed type
class NodeClosed<T> : BaseNodeGeneric<int> { }
//open constructed type
class NodeOpen<T> : BaseNodeGeneric<T> { }
Класи, які не є універсальними, тобто конкретні класи, можуть бути успадковані від закритих базових класів, але не від відкритих базових класів і від параметрів типів, оскільки під час виконання клієнтський код не може надати аргумент типу, необхідний для створення екземпляра базового класу.
C#
//No error
class Node1 : BaseNodeGeneric<int> { }
//Generates an error
//class Node2 : BaseNodeGeneric<T> {}
//Generates an error
//class Node3 : T {}
Універсальні класи, успадковані від відкритих базових класів, повинні надавати аргументи типу для всіх параметрів типу базового класу, до яких немає доступу у посяде класу, як показано в наступному прикладі коду.
C#
class BaseNodeMultiple<T, U> { }
//No error
class Node4<T> : BaseNodeMultiple<T, int> { }
//No error
class Node5<T, U> : BaseNodeMultiple<T, U> { }
//Generates an error
//class Node6<T> : BaseNodeMultiple<T, U> {}
Універсальні класи, успадковані від відкритих базових класів, повинні вказувати обмеження, які відповідають обмеженням базового типу або є більш строгими.C#
class NodeItem<T> where T : System.IComparable<T>, new() { }
class SpecialNodeItem<T> : NodeItem<T> where T : System.IComparable<T>, new() { }
Універсальні типи можуть використовувати декілька параметрів типу і обмежень.C#
class SuperKeyType<K, V, U>
where U : System.IComparable<U>
where V : new()
{ }
Відкриті та закриті типи можна використовувати в якості параметрів методів.C#
void Swap<T>(List<T> list1, List<T> list2)
{
//code to swap items
}
void Swap(List<int> list1, List<int> list2)
{
//code to swap items
}
Якщо універсальних клас реалізує інтерфейс, всі екземпляри цього класу можуть бути приведені до цього інтерфейсу.
Універсальні класи інваріантні. Іншими словами, якщо вхідний параметр вказує List <BaseClass>, при спробі надати List <DerivedClass> виникне помилка компіляції.
