Училищен курс по програмиране на C# (2013/2014)
Занятие №11: Полиморфизъм (част 1): Презаписване на членове. Презаписване на оператори. Предефиниране на членове
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...DAVID Academy
Занятие №2 на курса по програмиране на C# 2013 провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- Конзолен вход и изход
- Условни преходи
- Масиви
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...DAVID Academy
Занятие №2 на курса по програмиране на C# 2013 провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- Конзолен вход и изход
- Условни преходи
- Масиви
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#DAVID Academy
Занятие №1 на курса по програмиране на C# 2013 провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...DAVID Academy
Занятие №8 на курса по програмиране на C# 2013 провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- Полиморфизъм
- Абстракция
- Шаблони
- Вградени колекции
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...DAVID Academy
Занятие №7 на курса по програмиране на C# 2013 провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- Свойства
- Индексатори
- Наследяване
- Изключения
Курс по уеб програмиране (2014), занятие №2 - CSSDAVID Academy
Kурс по уеб програмиране (2014)
Занятие №2: CSS
--
Въведение в CSS
Селектор, свойство, стойност
Идентификация и групиране на селектори
Цветове и фон
Форматиране на текст, списъци, таблици
CSS Box Model
Border, margin, padding
Позициониране на елементи
Псевдокласове и псевдоелементи
Курс по уеб програмиране (2015), занятие №2 - CSSDAVID Academy
Kурс по уеб програмиране (2015)
Занятие №2: CSS
--
Въведение в CSS
Селектор, свойство, стойност
Идентификация и групиране на селектори
Цветове и фон
Форматиране на текст, списъци, таблици
CSS Box Model
Border, margin, padding
Позициониране на елементи
Псевдокласове и псевдоелементи
Курс по уеб програмиране (2015), занятие №1 - HTMLDAVID Academy
Kурс по уеб програмиране (2015)
Занятие №1: HTML
--
Въведение в HTML
Елементи и тагове
Мета съдържание
Структуриране на текст
Хипервръзки
Изображения
Таблици
Списъци
Форматиране на таблици
Форми
Въведение в HTML 5
Структуриране на страница
Форми и валидиране
Аудио и видео
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...DAVID Academy
Занятие №1 на курса по информационни технологии (2013) провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- Desktop приложения
- Windows Forms
- Windows Presentation Foundation
Това е превод на български от Теодора Берова на първият урок от поредицата уроци, които водих преди време за QA-отдела на голяма международна компания, по покана на Светлин Наков.
Искам да го споделя с всеки, който търси непреходни знания за Perl.
Обновяванията след 1ви юни 2014 и преводът са направени с подкрепата на Chain Solutions (http://chainsolutions.net/).
Таблица със съдържанието на курса може да бъде намерена на http://i-can.eu/ .
Изходният код на примерите и уроците в ODP формат се намират на адрес https://github.com/kberov/PerlProgrammingCourse/ .
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...DAVID Academy
Занятие №6 на курса по програмиране на C# 2013 провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- Обектно-ориентирано програмиране
- Класове и обекти
- Членове
- Видимост и капсулиране
Това е превод на български от Теодора Берова на втория урок от поредицата уроци, които водих преди време за QA-отдела на голяма международна компания, по покана на Светлин Наков.
Искам да го споделя с всеки, който търси непреходни знания по Perl.
Обновяванията след 1ви юни 2014 и преводът са направени с подкрепата на Chain Solutions (http://chainsolutions.net/).
Таблица със съдържанието на курса може да бъде намерена на http://i-can.eu/ .
Изходният код на примерите и уроците в ODP формат се намират на адрес https://github.com/kberov/PerlProgrammingCourse/ .
Курс по уеб програмиране (2014), занятие №1 - HTMLDAVID Academy
Kурс по уеб програмиране (2014)
Занятие №1: HTML
--
Въведение в HTML
Елементи и тагове
Мета съдържание
Структуриране на текст
Хипервръзки
Изображения
Таблици
Списъци
Форматиране на таблици
Форми
Въведение в HTML5
Структуриране на страница
Форми и валидиране
Аудио и видео
Принципи при дизайна на JDK 1.5.
Нововъведения в езика Java.
Автоматично опаковане и разопаковане (boxing и unboxing).
Разширен синтаксис на for-циклите.
Изброени типове (enumerations).
Статично включване (static import).
Методи с променлив брой аргументи.
Ковариантност на връщания тип.
Шаблонни типове (generics).
Метаданни в кода (annotations).
Разширения на стандартните библиотеки.
Класът StringBuilder.
Класовете Formatter и Scanner.
Нови контейнер-класове: Queue, Stack, PriorityQueue, ConcurentQueue.
Новo API за конкурентно програмиране.
Динамични стъбове за RMI.
Новости в JDBC – New Row Sets.
Monitoring & Manageability API (JMX).
Новости в XML библиотеките.
Подобрения във виртуалната машина.
Това е превод на български от Теодора Берова на четвъртия урок от поредицата уроци, които водих преди време за QA-отдела на голяма международна компания, по покана на Светлин Наков.
Искам да го споделя с всеки, който търси непреходни знания по Perl.
Таблица със съдържанието на курса може да бъде намерена на http://i-can.eu/ .
Изходният код на примерите и уроците в ODP формат се намират на адрес https://github.com/kberov/PerlProgrammingCourse/ .
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#DAVID Academy
Занятие №1 на курса по програмиране на C# 2013 провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...DAVID Academy
Занятие №8 на курса по програмиране на C# 2013 провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- Полиморфизъм
- Абстракция
- Шаблони
- Вградени колекции
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...DAVID Academy
Занятие №7 на курса по програмиране на C# 2013 провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- Свойства
- Индексатори
- Наследяване
- Изключения
Курс по уеб програмиране (2014), занятие №2 - CSSDAVID Academy
Kурс по уеб програмиране (2014)
Занятие №2: CSS
--
Въведение в CSS
Селектор, свойство, стойност
Идентификация и групиране на селектори
Цветове и фон
Форматиране на текст, списъци, таблици
CSS Box Model
Border, margin, padding
Позициониране на елементи
Псевдокласове и псевдоелементи
Курс по уеб програмиране (2015), занятие №2 - CSSDAVID Academy
Kурс по уеб програмиране (2015)
Занятие №2: CSS
--
Въведение в CSS
Селектор, свойство, стойност
Идентификация и групиране на селектори
Цветове и фон
Форматиране на текст, списъци, таблици
CSS Box Model
Border, margin, padding
Позициониране на елементи
Псевдокласове и псевдоелементи
Курс по уеб програмиране (2015), занятие №1 - HTMLDAVID Academy
Kурс по уеб програмиране (2015)
Занятие №1: HTML
--
Въведение в HTML
Елементи и тагове
Мета съдържание
Структуриране на текст
Хипервръзки
Изображения
Таблици
Списъци
Форматиране на таблици
Форми
Въведение в HTML 5
Структуриране на страница
Форми и валидиране
Аудио и видео
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...DAVID Academy
Занятие №1 на курса по информационни технологии (2013) провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- Desktop приложения
- Windows Forms
- Windows Presentation Foundation
Това е превод на български от Теодора Берова на първият урок от поредицата уроци, които водих преди време за QA-отдела на голяма международна компания, по покана на Светлин Наков.
Искам да го споделя с всеки, който търси непреходни знания за Perl.
Обновяванията след 1ви юни 2014 и преводът са направени с подкрепата на Chain Solutions (http://chainsolutions.net/).
Таблица със съдържанието на курса може да бъде намерена на http://i-can.eu/ .
Изходният код на примерите и уроците в ODP формат се намират на адрес https://github.com/kberov/PerlProgrammingCourse/ .
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...DAVID Academy
Занятие №6 на курса по програмиране на C# 2013 провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- Обектно-ориентирано програмиране
- Класове и обекти
- Членове
- Видимост и капсулиране
Това е превод на български от Теодора Берова на втория урок от поредицата уроци, които водих преди време за QA-отдела на голяма международна компания, по покана на Светлин Наков.
Искам да го споделя с всеки, който търси непреходни знания по Perl.
Обновяванията след 1ви юни 2014 и преводът са направени с подкрепата на Chain Solutions (http://chainsolutions.net/).
Таблица със съдържанието на курса може да бъде намерена на http://i-can.eu/ .
Изходният код на примерите и уроците в ODP формат се намират на адрес https://github.com/kberov/PerlProgrammingCourse/ .
Курс по уеб програмиране (2014), занятие №1 - HTMLDAVID Academy
Kурс по уеб програмиране (2014)
Занятие №1: HTML
--
Въведение в HTML
Елементи и тагове
Мета съдържание
Структуриране на текст
Хипервръзки
Изображения
Таблици
Списъци
Форматиране на таблици
Форми
Въведение в HTML5
Структуриране на страница
Форми и валидиране
Аудио и видео
Принципи при дизайна на JDK 1.5.
Нововъведения в езика Java.
Автоматично опаковане и разопаковане (boxing и unboxing).
Разширен синтаксис на for-циклите.
Изброени типове (enumerations).
Статично включване (static import).
Методи с променлив брой аргументи.
Ковариантност на връщания тип.
Шаблонни типове (generics).
Метаданни в кода (annotations).
Разширения на стандартните библиотеки.
Класът StringBuilder.
Класовете Formatter и Scanner.
Нови контейнер-класове: Queue, Stack, PriorityQueue, ConcurentQueue.
Новo API за конкурентно програмиране.
Динамични стъбове за RMI.
Новости в JDBC – New Row Sets.
Monitoring & Manageability API (JMX).
Новости в XML библиотеките.
Подобрения във виртуалната машина.
Това е превод на български от Теодора Берова на четвъртия урок от поредицата уроци, които водих преди време за QA-отдела на голяма международна компания, по покана на Светлин Наков.
Искам да го споделя с всеки, който търси непреходни знания по Perl.
Таблица със съдържанието на курса може да бъде намерена на http://i-can.eu/ .
Изходният код на примерите и уроците в ODP формат се намират на адрес https://github.com/kberov/PerlProgrammingCourse/ .
“Програмиране за всички” ще даде възможност на младежи да се запознаят и упражнят на програмните езици C#, Java и Python, операционните програми IOS и Android, Single Page проложения, софтуерен продукт за управление на проекти Project Management, както и ще ги въведе в Роботиката.
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияDAVID Academy
Занятие №3 на курса по програмиране на C# 2013 провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- Функции и методи
- Рекурсия
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...DAVID Academy
Занятие №1 на курса по програмиране за напреднали (2012) провеждан от ДАВИД академия в гр.Казанлък. Включва темите:
- Въведение в .NET Framework и езика C#
- Обектно-ориентирано програмиране
- Класове и обекти. Полета и методи
- Наследяване и композиция
- Абстрактни класове и интерфейси
- Видимост и конструктори
- Някои ключови думи
- Полиморфизъм
- Полезни връзки и литература
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLDAVID Academy
Занятие №3 на курса по информационни технологии (2013) провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- ADO.NET
- LINQ to SQL
Built-in testing capabilities of Go's standard library. Techniques for measuring test coverage and keeping it satisfactory and go through some mock-up techniques.
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииDAVID Academy
Занятие №9 на курса по програмиране на C# 2013 провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- Делегати
- Събития
- Ламбда функции
Курс по програмиране за напреднали (2012) - 9. Добър и лош код. Преработка и ...DAVID Academy
Занятие №9 на курса по програмиране за напреднали (2012) провеждан от ДАВИД академия в гр.Казанлък. Включва темите:
- Добър и лош код
- Преработка и оптимизиране
- Source control
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesDAVID Academy
Занятие №5 на курса по информационни технологии (2013) провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- HTTP
- Web Services
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkDAVID Academy
Занятие №4 на курса по информационни технологии (2013) провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- XML
- XSD
- XML в .NET Framework
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...DAVID Academy
Занятие №2 на курса по информационни технологии (2013) провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- Бази данни
- Системи за управление на бази данни
- SQL
3. Полиморфизъм
• Какво е „полиморфизъм“?
– Третият основен принцип на ООП
• Кои са първите два?
– Многообразие („πολύς“ и „μορφή“)
– Еднотипна работа с разнотипни данни
– Обобщаване на възможности, но с различна реализация
– Обединяване на сходни функционалности в нещо общо
– Гъвкав и лесен начин за поддръжка на кода
4. Полиморфизъм
• Полиморфизъм в C#
– Презаписване на членове
– Презаписване на оператори
– Предефиниране на членове
– Абстрактни класове и членове
– Интерфейси
– Шаблони
5. Видове полиморфизъм
• Статичен полиморфизъм (compile time)
– Ad hoc polymorphism:
• Презаписване (overload) на членове
• Презаписване (overload) на оператори
• Преобразуване на типове (coercion)
– Parametric polymorphism
• Шаблони
• Динамичен полиморфизъм (run time)
– Subtype polymorphism
• Предефиниране (override) на членове
• Абстракция
6. Презаписване на членове
• Какво е „презаписване на членове“ (member overloading)?
– Повече от един член с едно и също наименование, но различна
сигнатура (Познато?)
– Членове, които могат да се презаписват:
• Методи
• Конструктори
• Индексатори
• Оператори
– Компилаторът открива най-подходящият член, който да се използва,
в зависимост от подаваните аргументи и съответните параметри
– Неявно превръщане на типовете на аргументите
– Ако изборът на подходящ член е нееднозначен, компилаторът дава
грешка
9. Презаписване на членове
• Приложение на презаписвнето на членове
– Прилагане на сходна функционалност върху различни типове
данни
– Прави кода по-четим, тъй като сходните операции имат еднакви
наименования
– Да не се злоупотребява: прилага се, когато поведението е сходно,
а типът на резултата – един и същи
10. Презаписване на оператори
• Какво е „презаписване на оператори“?
– Операторите в C# са дефинирани за повечето вградени типове
– Повечето оператори обаче не са дефинирани за собствените ни
класове и структури
– Дава възможност в дефиницията на клас да включим оператори за
по-естествено взаимодействие с обекти от дефиниращия и/или
други класове
– Да не се злоупотребява: По-естествено не означава по-лесно!
• Видове презаписваеми оператори
– Унарни
– Бинарни
– Превръщане на данни
11. Презаписване на оператори
public struct Color
{
public int R { get; set; }
public int G { get; set; }
public int B { get; set; }
// презаписваме проверката дали е true
public static bool operator true(Color c)
{
return c.R != 0 || c.G != 0 || c.B != 0;
}
// презаписваме проверката дали е false
// забележка: винаги се презаписват в заедно
public static bool operator false(Color c)
{
return c.R == 0 && c.G == 0 && c.B == 0;
}
}
• Унарни оператори
– “+”, “-”, “~”, “!”, “++” и “--”
• Правила
– „+“, „-“ и “~” – приемат като
параметър дефиниращия тип и
връщат резултат от произволен
тип
– „++“ и “--” – приемат като
параметър и връщат
дефиниращия тип
– “true” и “false” – приемат като
параметър дефиниращия тип и
връщат bool
12. Презаписване на оператори
public struct Color
{
public int R { get; set; }
public int G { get; set; }
public int B { get; set; }
// презаписваме смесването на ДВА цвята
public static Color operator +(
Color l, Color r)
{
return new Color
{
R = l.R + r.R,
G = l.G + r.G,
B = l.B + r.B,
};
}
}
• Бинарни оператори
– „+“, „-“, „*“, „/“ и „%“
– „&“, “|”, “^”, “<<“ и “>>”
– “==“, “!=“, “<“, “>”, “<=“ и “>=“
• Правила
– Операторите за сравнение
могат да се презаписват само
по двойки
– Трябва да се има предвид
сравнението на стойности и
референции
13. Презаписване на оператори
public struct Color
{
public int R { get; set; }
public int G { get; set; }
public int B { get; set; }
// неявно превръщане от Color към число
public static implicit operator long(Color c)
{
return
((256 * c.R + c.G) * 256 + c.B);
}
// явно превръщане от Color към низ
public static explicit operator string(
Color c)
{
return string.Format("#{0:x}{1:x}{2:x}",
c.R, c.G, c.B);
}
}
• Преобразуване на данни
– неявно (implicit)
– явно (explicit)
14. Предефиниране на членове
• Какво е „предефиниране на членове“ (member overriding)?
– Възможност на клас-наследник да предостави различна
имплементация на член дефиниран в родителски клас
– Позволява промяна на поведението на член в клас-наследник
– Описване на член със същото наименования (и параметри)
– Членът на кой точно клас ще бъде използван, зависи от типа на
обекта, а не от типа на референцията
– Само виртуални членове могат да бъдат предефинирани
• Какво е „виртуален член“?
– Член, който може да бъде предефиниран в клас-наследник
– Нестатични методи, свойства и индексатори
– Виртуалността в C# се указва изрично
15. Предефиниране на членове
class Animal
{
public virtual void MakeSound()
{
// не правим нищо, защото животните
// не издават звук в общия случай
}
}
• Разлика между виртуални и
невиртуални членове
– При невиртуалните членове,
използваният член се определя
от типа на референцията
– При виртуалните членове,
използваният член се определя
от типа на обекта
• Декларирането на виртуален
член
– Използва се ключовата дума
virtual след модификатора за
достъп
16. Предефиниране на членове
class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Woof woof!");
}
}
class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Meow!");
}
}
class Fish : Animal
{
}
• Деклариране на
предефиниран член
– Използва се ключовата дума
override след модификатора за
достъп
– В родителски клас трябва да е
деклариран виртуален член със
същата сигнатура и видимост
– Не е задължително всички
виртуални членове да бъдат
предефинирани в класовете-
наследници
17. Предефиниране на членове
// взимаме _някакво_ животно от зоопарка
Animal animal = zoo.GetAnimal();
// караме животното да издаде звук
animal.MakeSound();
// какъв звук ще издаде, зависи от вида
// животно
• Използване на виртуални
членове
– Синтактично не се различава от
използването на невиртуални
членове
– Поведението може да се
различава
• Извикваният метод от
йерархията се определя от
истинския тип на обекта
18. Предефиниране на членове
class Book
{
public string Name { get; set; }
public virtual void ReadFromConsole()
{
Console.Write("Enter name: ");
Name = Console.ReadLine();
}
}
class ScientificBook : Book
{
public string ScientificField { get; set; }
public override void ReadFromConsole()
{
base.ReadFromConsole();
Console.Write("Enter scientific field: ");
ScientificField = Console.ReadLine();
}
}
• Преизползване на
родителския член
– Понякога се налага
имплементацията на
родителския член да бъде
разширена, а не подменена
– Използва се ключовата дума
base, следвана от оператора “.”
и наименованието на члена
(заедно с аргументите му)
– По същия начин могат да се
извикват и други членове на
родителския клас
20. Предефиниране на членове
• Приложение на предефинирането на членове
– Често се налага една и съща „формална“ операция да се
реализира по различен начин вътрешно в различни класове
– Осигурява гъвкавост на вътрешната реализация
– Позволява разширяемост на членовете на родителските класове
– Избягване на превръщания надолу по йерархията (downcasting)
21. Задачи за упражнение
• Преработете програмата „Геометрични фигури“ от
предишните упражнения, така че да се възползвате от
новите възможности на езика, за които научихте:
– Добавете презаписани конструктори за базовите класове Object2D
и Object3D
– Добавете нов базов клас GeometryObject съдържащ конструктор с
параметър „наименование“ и виртуален метод за генериране на
произволни параметри на обекта
– Изведете общите за различните видове обекти виртуални методи в
съответните базови класове
– Създайте нов клас GeometryStore, в който да съхранявате
геометрични обекти, индексатори за тях по номер и наименование,
както и метод за добавяне на създаден вече обект
22. Задачи за упражнение
• Преработете програмата „Библиотека“ от предишните
упражнения, така че да се възползвате от новите
възможности на езика, за които научихте:
– Създайте нов конструктор на базовия клас на всички произведения,
който да приема като параметър низ – ISBN. Добавете свойство за
това колко бройки от произведението са налични за ползване
– Изведете общите за различните видове произведения виртуални
методи в съответните базови класове
– Създайте клас Library, в който се съхраняват произведения,
индексатори за тях по номер и ISBN, както и метод за добавяне
– Добавете метод в класа Library за търсене на произведения
– Добавете метод в класа Library за показване на информацията за
подадено издание