Дисципліна: Основи об'єктно-орієнтованого програмування
Кількість годин (кредитів ЄКТС): 240 (8)
Мета навчальної дисципліни: закріплення у студентів базових знань по об'єктно-орієнтованому програмуванню. Засвоєння основних принципів об'єктного підходу, ознайомлення з історією об’ектно-орієнтованого програмування і його еволюцією на базі існуючих парадигм програмування. Студенти повинні освоїтися з термінологією об'єктно-орієнтованого програмування і навчитися використовувати переваги об'єктно-орієнтованого програмування для комп'ютерного моделювання реальних і концептуальних систем.
Результати навчання за навчальною дисципліною:
знати:
- принципи ООП в історичному контексті;
- парадигма ООП;
- об'єктно-орієнтований підхід до створення програм;
- що таке клас;
- що таке об'єкт;
- зв'язок між об'єктами;
- переваги і цілі ООП:
o природність;
o надійність;
o повторне використання;
o супровід;
o здібність до розширення;
- інкапсуляція;
- спадкоємство:
o множинне спадкоємство;
o абстракції;
- поліморфізм;
- інтерфейси;
- об'єкти на реальному світі;
- використання попередніх технологій в ООП.
вміти:
- розбити вихідну програму на взаємозв'язаних логічних модулі відповідно до принципів ООП;
- користуватися середовищем програмування Visual Studio;
- закодувати програму і отримати виконуваний модуль.
Зміст дисципліни (тематика):
- Об'єктно-орієнтоване програмування в історичному контексті. Попередники об'єктно-орієнтованого програмування, машинні коди, асемблер, процедурні мови, модульне програмування.
- Технології програмування. Лінійне програмування, «макаронний стиль», процедури і функції модулі. Недоліки процедурного і модульного програмування.
- Парадигма ООП. Розширення модульного підходу. Заховання реалізації. Об'ектно-орієнтований підхід до створення програм, спадкоємство, поліморфізм. Багатократне використання.
- Переваги і цілі об'єктно-орієнтованого підходу. Природність, надійність, можливість повторного використання, зручність у супроводі, здатність удосконалюватися, зручність періодичного випуску (видання) нових версій.
- Типи в ООП. Необхідність використання різних типів. Достатній набір типів. Призначені для користувача типи. Розподіл пам'яті. Контроль типів компілятором. Клас – це тип.
- Клас як вираження парадигми ООП. Призначення класу. Властивості, поведінка. Оголошення класу. Члени класу. Видимість класу. Заховання реалізації. Клас – креслення для об'єкту.
- Методи. Реалізація поведінки класу. Процедури і функції. Видимість методів. Інтерфейс класу. Підтримка інкапсуляції. Виклик методу як члена класу. Назва методу, список змінних, тіло методу, повертане значення. Сигнатура методу. Використання повертаного значення. Конструктор і деструкція.
- Змінні, параметри, аргументи, повертані значення. Оголошення змінних. Використання методів для забезпечення поведінки класів. Вирішення конкретних завдань за допомогою методів. Головний метод. Допоміжні методи.
- Доступ до методів. Основні способи доступу: private, protected, public. Необхідність різних способів доступу.
- Об'єкти. Універсальне призначення об'єктів. Реалізація класу. Виконуваний фрагмент програми в пам'яті. Створення і руйнування об'єкту. Конструктори і деструкції. Зв'язок між об'єктами. Поведінка і стан об'єкту. Реальні й абстрактні об'єкти. Об'єкти допомагають розуміти складні речі. Об'єкти реального світу. Атрибути і поведінка об'єктів.
- Ініціалізація змінних. Використання конструктора для ініціалізації. Ініціалізація при оголошенні змінної. Осмислене ім'я змінної (неявний коментар). Привласнення значення. Допустимий діапазон значень.
- Доступ до змінних. Основні специфікатори доступу: private, protected, public. Необхідність різних способів доступу.
- Інкапсуляція. Три базові поняття ООП. Заховання внутрішнього вмісту. Обмеження доступу до змінних. Необхідність інкапсуляції для надійного програмування інтерфейс-класу. Об'єднання атрибутів і методів. Захист. Управління доступом. Повторне використання.
- Абстракція. Процес спрощення складного завдання. Абстракція як спосіб виділення загальних принципів поведінки. Захист об'єктів за допомогою абстрактного типа даних. Розподіл відповідальності. Обмеження абстракції.
- Спадкоємство. Друге найважливіше поняття. Навіщо використовувати спадкоємство. Надійний спосіб розширення можливостей, скорочення часу написання програм, зручність відладки. Просте спадкоємство. Багатократне спадкоємство. Множинне спадкоємство. Механіка спадкоємства. Перевизначення методів. Рівні доступу. Нові властивості і методи.
- Стосунки "Is-As" ("Є") і "Has-As" ("Містить"). Спадкоємство й агрегація. Коли використовувати спадкоємство. Спадкоємство реалізації. Спадкоємство для відмінності. Спадкоємство для заміни типів. Ієрархія спадкоємства. Переваги й обмеження. Рекурсивні методи. Вживання спадкоємства. Руйнування інкапсуляції при спадкоємстві.
- Поліморфізм. Різна поведінка одного методу. Поліморфізм включення. Перевизначення методів. Перевантаження методів. Поліморфізм у дії. Скріплення. Поліморфізм часу виконання.
- Інтерфейси. Необхідність інтерфейсу. Перетворення до класу інтерфейсу. Інтерфейси і спадкоємство.
- Технологія створення застосувань у C#. Компілятор. Компоновка застосувань. Відладчик. Можливості Visual Studio Express.
- Реалізація класів у C#. Методи в C#.
- Перевантаження методів в C#.
- Інкапсуляція в C#. Властивості. Інкапсуляція на основі методів читання і модифікації. Інкапсуляція на основі властивостей класу. Внутрішнє представлення властивостей у С#. Контекст операторів get і set для властивостей. Властивості, доступні лише для читання, і властивості, доступні лише для запису. Статичні властивості.
- Підтримка спадкоємства в С#. Просте і багаторівневе спадкоємство. Множинне спадкоємство в C# не підтримується. Вибір відповідного спадкоємства. Інтерфейси – аналог множинного спадкоємства. Управління створенням базових класів за допомогою base. Множинні базові класи. Ключове слово protected. Заборона спадкоємства: ізольовані класи. Модель локалізації/делегування. Вкладені визначення типів.
- Підтримка поліморфізму в С#. Ключові слова virtual і override. Ключове слово sealed. Абстрактні класи. Примусовий поліморфізм: абстрактні методи. Можливість приховувати члени.
- Абстрактні класи Примусовий поліморфізм – абстрактні методи. Можливість приховувати члени.
- Правила приведення типів у С#. Розпізнавання типів. Приведення числових типів.
- Парціальні типи С#.
- Документування вихідної коди в С# за допомогою XML. Символи форматування в XML-коді. Трансформація XML-кода.
- Цикли існування об'єктів. Основні відомості про існування об'єктів. Класи, об'єкти і заслання. Генерація об'єктів. Збірка сміття. Об'єкти з фіналізацією. Об'екти зі звільненням ресурсів.
- Інтерфейси і колекції в C#. Визначення інтерфейсів у С#. Реалізація інтерфейсів у С#. Інтерфейси в порівнянні з абстрактними базовими класами. Виклик членів інтерфейсу на рівні об'єкту. Здобуття інтерфейсних заслань: ключове слово as. Здобуття інтерфейсних заслань: ключове слово is. Інтерфейси як параметри. Інтерфейси як повертані значення. Масиви інтерфейсних типів. Явна реалізація інтерфейсу. Вирішення конфліктів імен. Побудова ієрархії інтерфейсів. Інтерфейси з безліччю базових інтерфейсів.
- Інтерфейси з простору імен System.Collections. Інтерфейс ICollection. Інтерфейс Dictionary. Інтерфейс IDictionaryEnumerator. Інтерфейс IList.
- Класи із простору імен System.Collections. Робота з типом ArrayList. Робота з типом Queue. Робота з типом Stack.
- Інтерфейси зворотного виклику.
- Визначення делегата в С#. Типа делегата NET. Визначення делегата в С#. Базові класи System.MulticastDelegate і System.Delegate. Простий приклад делегата. Дослідження об'єкта делегата. Реалізація групових викликів. Делегати в ролі параметрів. Аналіз програмної коди делегування. Коваріантність делегатів. Події в C#. Глибинний механізм подій. Прийом подій, що поступають.
Види робіт: лекційні заняття, практичні заняття, модульні контрольні роботи, самостійна робота студентів.
