За въпроси: 02 468 29 53, 02 971 83 90
ОБЕКТНО-ОРИЕНТИРАНО ПРОГРАМИРАНЕ
Васил Тотев, Ива Костадинова
Част 2
София • 2020
Предговор
Един от най-важните аспекти от ученето е упражняването и прилагане на преподаденото. Няма как да се научите да карате ко-лело, ако не се качите на колелото. По същия начин - няма как да се научите да програмирате, без да напишете и тествате програм-ния код. Всеки един успешен курс на обучение трябва да включва както теоретичен компонент, така и практически елементи.
В настоящия учебник са включени и теоретична част, и прак-тически задачи. За по-добро усвояване на изложения материал се изисква внимателно и многократно повторение на разгледаните за-дачи. Противно на мнението на някои обучаеми, че тези дейности са „упражнения за писане“, поставените задачи са мястото, където имате възможност да направите теорията конкретна и където се случва истинската симулация на понятията. Добре би било да напра-вите опити и да промените кода, за да разберете до какви резултати ще доведе това. Някои от най-добре усвоените знания се случват, когато обучаемите „оцветяват“ извън на програмния код.
За да започнете да пишете програмен код ще ви трябва среда, в която да пишете. В настоящия учебник използваме Visual Studio 2015 или следваща версия с инсталиран C# език за програмиране.
Почти всяка тема включва много примери и задачи, както и „Задачи за самоконтрол“. С тях студентите имат възможност да проверят знанията и практическите си умения, прилагайки различна сложност. В случай че знанията и уменията им позволяват, те могат да усъвършенстват предложените варианти за решение, както и да разработят други подобни примери. Разгледаните примери са част от подготовката за предвидените контролни занятия и семестриал-ните изпити.
В учебния материал е използвана терминология на английски език с цел по-точно разбиране на смисъла на термините и определе-нията. Това е направено и с разбирането, че без да се владее анг-лийски език на сравнително добро ниво е трудно да се изградят зна-ния и умения на нивото на сложност на предлагания в учебника ма-териал.
Учебникът е предназначен за студенти, изучаващи дисципли-ната Обектно-ориентирано програмиране в Университета по библиотекознание и информационни технологии. Може да се изпол-зва и от докторанти и от всички желаещи да изучават програмния език С#.
Съдържание
ПРЕДГОВОР
ГЛАВА 1. СЪЩНОСТ НА ОБЕКТНО-ОРИЕНТИРАНОТО ПРОГРАМИРАНЕ
1.1. Какво представлява ООП? История.
1.2. Характеристики на ООП
ГЛАВА 2. НАСЛЕДЯВАНЕ В C# - СПЕЦИАЛИЗАЦИЯ, РАЗШИРЕНИЕ И НАСЛЕДЯВАНЕ НА КЛАСОВЕ
2.1. Специализация на клас
2.1.1. Композиция и декомпозиция
2.1.2. Генерализация и специализация
2.1.3. Генерализация и специализация при класовете от ООП
2.1.4. Разширяване (продължаване) и специализация на клас
2.1.5. Пример: C# classes Bank Accounts
2.1.6. Пример: Геометрични фигури
2.1.7. Специализация на класове - обобщение
2.1.8. Принцип на заместването (Substitution)
2.2. Разширяване на клас
2.3. Наследяване на класове в ООП
2.3.1. Наследяване по принцип
2.3.2. Видимост при наследяване
2.3.3. Видове наследяване
2.3.4. Още за множественото наследяване
2.4. Наследяване на класове в C#
2.4.1. Наследяване в C#. Общи положения
2.4.2. Класът Object - на върха на йерархията
2.4.3. Методи на class Object в C#
2.4.4. Наследяване и конструктори
2.4.5. Упражнение: Конструктори
2.4.6. Конструктори и ред за инициализация
2.4.7. Наследяване и модификатори за видимост в C#
2.4.8. Упражнение: Private и Protected модификатори за видимост при наследяване
2.4.9. Наследяване на операции - методи, свойства и индексатори
2.4.10. Упражнение: Наследяване на операции и методи
2.4.11. Упражнение: Наследяване на свойства в C#
2.4.12. Задачи за самоконтрол
ГЛАВА 3. ПОЛИМОРФИЗЪМ В C#
3.1. Полиморфизъм. Пренаписване и скриване на методи в C#
3.1.1. Планирано предефиниране
3.1.2. Ново (друго) дефиниране. Скриване на методи в C# (Method Hiding )
3.2. Полиморфизъм. Статични и динамични типове данни в C#
3.2.1. Статични и динамични типове в C#
3.2.2. Проверка и конвертиране на тип в C#
3.2.3. Динамично свързване и virtual методи в C#
3.2.4. Практическо използване на virtual методи в C#
3.2.5. Метод Equals - предефиниране (overriding)
3.2.6. Upcasting and downcasting в C#
3.2.7. Наследяване и променливи
3.2.8. Задачи за самоконтрол
ГЛАВА 4. АБСТРАКЦИЯ В C#
4.1. Абстракция по принцип
4.2. Абстрактни класове (Abstract Classes)
4.2.1. Абстрактни класове и абстрактни методи в C#
4.2.2. Специализация на Stack
4.2.3. Още една имплементация на абстрактен клас - класове Course and Project
4.2.4. Абстрактни свойства в C#
4.2.5. Продължение - упражнение
4.2.6. Запечатани (sealed) класове и запечатани методи
4.2.7. Задачи за самоконтрол
ГЛАВА 5. АБСТРАКЦИЯ И ИНТЕРФЕЙСИ В C#
5.1. Интерфейси
5.1.1. Представа за интерфейс
5.1.2. Въведение и общи понятия за интерфейс
5.1.3. Упражнение: интерфейсът ITaxable
5.1.4. Интерфейси в C#
5.1.5. Примери на интерфейси в C#
5.1.6. Упражнение: abstract class GameObject
5.2. Интерфейси от библиотеките на C#
5.2.1. Основни интерфейси в C#
5.2.2. Пример на характерно използване на IComparable
5.2.3. Пример на използване на IEnumerator and IEnumerable
5.2.4. Пример на използване на IFormattable
5.2.5. Изрично (explicit) имплементиране на членове на интерфейс
5.2.6. Задачи за самоконтрол
ГЛАВА 6. КАПСУЛАЦИЯ В C#
6.1. Същност на принципа капсулация
6.2. Модификатори за достъп до членове на клас
6.3. Модификатор за пълен достъп - public
6.4. Модификатор за скриване на член на клас - private
6.5. Достъп за производните (наследниците) типове - модификатор protected
6.6. Накратко за модификаторите за достъп - internal и protected internal
6.7. Модификатори за достъп на типове (класове)
6.8. Задачи за самоконтрол
ЛИТЕРАТУРА