SlideShare a Scribd company logo
1 of 24
2013
Курс по програмиране на C#
Занятие №13
Изключения. Анотации и отражение
Съдържание
• Изключения
– Видове грешки
– Връщане на код за състояние при извикване
– Проверка на състоянието
– Изключения
• Анотации и отражение
– Програмни единици
– Анотации
– Отражение
Обработка на грешки
• Видове грешки
– Compile time
• Грешки на компилатора по време на компилиране на приложението
• В следствие на грешки на програмиста
• Отстраняват се още по време на написване на приложението
– Run time
• Грешки на CLR по време на изпълнение на приложението
• В следствие на грешки на програмиста, непредвидени проблеми в средата,
входните данни, комуникацията и други изключителни ситуации
• Не се отстраняват, а се предвиждат
Обработка на грешки
// връщане на специален резултат
DbStatus status = ExecuteDbQuery("…");
switch (status)
{
case DbStatus.Ok:
break;
case DbStatus.NetworkError:
// разбутай кабела
break;
case DbStatus.FileAccessError:
// май имаме счупен диск?
break;
case DbStatus.FilePermissionError:
// кофти права за достъп до файла?
break;
}
• Old school подходи към
обработката на грешки
– Връщане на код за състояние
при извикване
– Прекалено много код при всяко
извикване
– Нужда от допълнителни
параметри
– Преправяне при нов код за
състояние
– Вероятност за излишни,
недостатъчни проверки и/или
повтарящ се код
Обработка на грешки
// проверка на състоянието
ExecuteDbQuery("…");
DbStatus status = GetDbStatus();
switch (status)
{
case DbStatus.Ok:
break;
case DbStatus.NetworkError:
// разбутай кабела
break;
case DbStatus.FileAccessError:
// май имаме счупен диск?
break;
case DbStatus.FilePermissionError:
// кофти права за достъп до файла?
break;
}
• Old school подходи към
обработката на грешки
– Проверка на състоянието
– Прекалено много код след всяко
извикване
– Нужда от допълнително
извикване
– Вероятност за излишни,
недостатъчни проверки и/или
повтарящ се код
– Нужда от познаване на тези
състояния от външен код
Обработка на грешки
• Какво беше “call stack”?
– Спомени от темата за рекурсия
– Първо, какво беше “stack”?
• Колекция от елементи
• Операция: добавяне на елемент в края (push)
• Операция: взимане на елемент от края (pop)
• LIFO (Last-In-First-Out структура)
– Та, какво е “call stack”?
• Структура, която .NET Framework поддържа по време на изпълнение
• Записва се информация за последното извикване на метод:
– Локалните променливи по време на извикването
– Мястото на извикването
– Параметрите, с които е направено
• С други думи: дава информация от къде идваме, за да се върнем обратно
Обработка на грешки
• Какво е „изключение“?
– Изключение/изключителна ситуация
– Проверка за възникване на изключение
– Прихващане на изключения
– Финализиране след проверка за изключение
– Предизвикване на изключение
• Какво се случва при изключение?
– Прекратява се изпълнението на текущия код
– Намира се блок обработващ съответния тип изключения
– Ако не съществува такъв блок, изпълнението приключва с грешка
– Финализиране, независимо дали е възникнала грешка или не
Обработка на грешки
• Изключения в C#
– Информацията за изключения се пренася от обекти
– Обектите са от вградения клас Exception или негов наследник
• Свойства Message, StackTrace и InnerException
– .NET Framework предлага множество вградени изключения
• ArgumentException, IndexOutOfRangeException, IOException и др.
– Програмистът може да направи свой вид изключение
• Конвенцията е наименованието на класа да завършва с Exception
Обработка на грешки
try
{
// Операции при нормална работа
// …
// Предизвикване на изключение
throw new DbException("DB error.");
}
catch (ArgumentException ex)
{
// Обработване на ArgumentException
}
catch (Exception ex)
{
// Обработване на Exception
}
finally
{
// Винаги изпълнявани операции
}
• Изключения в C#
– Конструкция try … catch … finally
• Блоковете catch и finally не за
задължителни, но поне единият
трябва да присъства
• Възможно е наличието на повече от
един catch блок
• В скобите на catch блок се указва
типа на прихващаните изключения
– Предизвикване на изключение с
throw
• Възможно е предизвикване на
изключение в catch блока
• Предизвикване на оригиналното
изключение
Обработка на грешки
// почистване
FileStream stream =
File.OpenRead(@"C:File.txt");
try
{
// работа с потока stream
}
finally
{
stream.Dispose();
}
// съкратен запис на горното
using (FileStream stream =
File.OpenRead(@"C:File.txt"))
{
// работа с потока stream
}
• Конструкцията using
– Интерфейсът IDisposable
• Декларира метод Dispose
– Съкратен запис и яснота на кода
Обработка на грешки
try
{
// прекратява нишката
Thread.Abort();
}
catch (ThreadAbortException)
{
// … някакъв код…
// все едно тук пише:
throw;
// освен ако:
// Thread.ResetAbort();
}
• Какво е „нишка“?
– Отделна последователност от
инструкции независимо
управлявани от ОС
– Многонишковост
• ThreadAbortException
– Специално изключение
използвано при прекратяване на
нишка
– Предизвиква се автоматично
отново в края на catch блока
– … освен ако не се извика
Thread.ResetAbort()
Обработка на грешки
// демонстрация
Анотации и отражение
• Програмни единици
– Application domain – механизъм за
изолиране на изпълнението на
различни приложения
– Assembly – компилирана библиотека
от код (process & library assemblies)
– Module – съдържа код, метаданни
и ресурси
– …
Анотации и отражение
• Какво е „анотация“?
– Метод за асоцииране на метаданни или декларативна
информация с различни програмни единици
– Анотациите се добавят от програмиста по време на разработка на
съответните програмни единици
– Метаданните могат да съдържат информация за:
• Инструкции за работа на компилатора
• Инструкции за работа при компилиране и изпълнение
• Друга машинно обработваема информация
Анотации и отражение
• Анотации в .NET Framework
– Анотациите са реализирани като обекти (т.нар. атрибути)
– Обектите са от клас наследяващ класа Attribute
• Атрибутите могат да имат полета, свойства, методи и т.н.
• Атрибутите могат да приемат аргументи
• Към една програмна единица могат да се прилагат повече от един атрибути
– .NET Framework предлага множество вградени атрибути
• AssemblyNameAttribute, AssemblyVersionAttribute и др.
• AssemblyCompanyAttribute, AssemblyCopyrightAttribute и др.
• ObsoleteAttribute
• SerializableAttribute и NonSerializedAttribute
• AttributeUsageAttribute
Анотации и отражение
// демонстрация
Анотации и отражение
• Какво е „отражение“?
– Техника за получаване на информация за програмни единици по
време на изпълнение, обръщение към тях и достъпването им
– Отражението в частност може да се използва за обработка на
анотациите
– Отражението може да се използва за сериализиране и
десериализиране на данни
Анотации и отражение
• Отражение в .NET Framework
– Реализира се чрез използване на функционалността в
пространството на имена System.Reflection и класа System.Type
– System.Reflection.Emit дава възможност и за създаване на изпълним
CIL (Common Intermediate Language) код от приложение (напр.
написването на собствен компилатор)
– Може да се извлича разнообразна информация за различни
компоненти (assemblies, модули, типове данни, методи,
конструктори, полета, свойства, параметри, събития и др.)
Анотации и отражение
// демонстрация
Задачи за упражнение
• Модифицирайте задачата „Геометрични фигури“ от
предходните упражнения, така че:
– в началото на конструкторите и методите с параметри, да се
проверяват за коректност техните стойности и да се предизвикват
съответните изключения
– при въвеждане на данни за даден обект, да се проверява тяхната
коректност и да се предизвикват различни по вид изключения
според ситуацията
– при изчисляване на параметрите за даден обект, да се проверява
наличието на всички необходими данни и, ако липсват такива, да
се предизвиква изключение
– в основната програма, да се прихванат различните изключения, да
се изведе разбираемо съобщение и да се реагира адекватно на
различните видове изключения
Задачи за упражнение
• Създайте C# библиотека, която да съдържа атрибута
DeveloperInfoAttribute, който:
– Съдържа информация за име, e-мейл адрес и телефон за контакт
на разработчика
– Името и е-мейл адресът са задължителни, докато телефонният
номер не е
– Атрибутът да може да се прилага повече от веднъж върху всякакви
програмни единици
– Поставете така направения атрибут на всички възможни програмни
единици, като попълните информация за поне няколко
разработчика
Задачи за упражнение
• Създайте аналитично приложение, което да:
– изчита от клавиатурата наименованието на *.dll или *.exe файл
– опитва да зареди файла като assembly
– има добавена референция към проекта от предходното
упражнение
– намира програмните единици, които имат атрибут
DeveloperInfoAttribute и извежда информацията от атрибута
– има добавена референция към проекта „Геометрични фигури“
– намира всички класове наследяващи класа Object2D, извежда
тяхното наименование и техните DeveloperInfoAttribute атрибути,
ако имат такива (иначе надпис „No developer info for this class.”)
Въпроси?
Благодаря!
• Валери Дачев
– valery@david.bg
– @vdachev
– https://facebook.com/vdachev
• ДАВИД академия
– acad@david.bg
– http://acad.david.bg/
– @david_academy
– https://facebook.com/DavidAcademy

More Related Content

What's hot

Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSКурс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSDAVID Academy
 
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#DAVID Academy
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12DAVID Academy
 
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3DAVID Academy
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLDAVID Academy
 
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...DAVID Academy
 
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9DAVID Academy
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...DAVID Academy
 
JDK 1.5 New Features
JDK 1.5 New FeaturesJDK 1.5 New Features
JDK 1.5 New FeaturesSvetlin Nakov
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSDAVID Academy
 
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...DAVID Academy
 
Основни структури за управление на изчислителния процес
Основни структури за управление на изчислителния процесОсновни структури за управление на изчислителния процес
Основни структури за управление на изчислителния процесAtelier for robotics
 

What's hot (20)

Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSКурс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSS
 
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
 
Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12
 
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
 
Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTML
 
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
 
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
 
Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
 
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
 
Въведение в Perl
Въведение в PerlВъведение в Perl
Въведение в Perl
 
JDK 1.5 New Features
JDK 1.5 New FeaturesJDK 1.5 New Features
JDK 1.5 New Features
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSS
 
Скаларни типове данни
Скаларни типове данниСкаларни типове данни
Скаларни типове данни
 
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
 
Основни структури за управление на изчислителния процес
Основни структури за управление на изчислителния процесОсновни структури за управление на изчислителния процес
Основни структури за управление на изчислителния процес
 
Въведение в Python
Въведение в PythonВъведение в Python
Въведение в Python
 

Viewers also liked

Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоDAVID Academy
 
Информационни технологи за V клас, изд. Булвест 2000
Информационни технологи за V клас, изд. Булвест 2000Информационни технологи за V клас, изд. Булвест 2000
Информационни технологи за V клас, изд. Булвест 2000Ангел Ангелов
 
Помагало по география за 6 клас
Помагало по география за 6 класПомагало по география за 6 клас
Помагало по география за 6 класDani Hranov
 
Годишно обобщение по география и икономика - 5 клас
Годишно обобщение по география и икономика - 5 класГодишно обобщение по география и икономика - 5 клас
Годишно обобщение по география и икономика - 5 класMilena Petkova
 
събиране на десетични дроби. свойства
събиране на десетични дроби. свойствасъбиране на десетични дроби. свойства
събиране на десетични дроби. свойстваliageorg
 
деление на дд задачи
деление на дд задачиделение на дд задачи
деление на дд задачиliageorg
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияDAVID Academy
 
събиране и изваждане на дд
събиране и изваждане на ддсъбиране и изваждане на дд
събиране и изваждане на ддliageorg
 
четене и сравняване на десетични дроби
четене и сравняване на десетични дробичетене и сравняване на десетични дроби
четене и сравняване на десетични дробиliageorg
 
всички действия с дд
всички действия с ддвсички действия с дд
всички действия с ддliageorg
 
умножение на десетични дроби
умножение на десетични дробиумножение на десетични дроби
умножение на десетични дробиliageorg
 
фигури
фигурифигури
фигуриliageorg
 
5 клас урок 19 НОВА ПРОГРАМА
5 клас урок 19 НОВА ПРОГРАМА5 клас урок 19 НОВА ПРОГРАМА
5 клас урок 19 НОВА ПРОГРАМАЮлія Артюх
 
Програмирането със C sharp
Програмирането със C sharpПрограмирането със C sharp
Програмирането със C sharpJulian Sapoundjiev
 

Viewers also liked (18)

Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - Помагало
 
Лице
ЛицеЛице
Лице
 
История на лакомствата1
История на лакомствата1История на лакомствата1
История на лакомствата1
 
Информационни технологи за V клас, изд. Булвест 2000
Информационни технологи за V клас, изд. Булвест 2000Информационни технологи за V клас, изд. Булвест 2000
Информационни технологи за V клас, изд. Булвест 2000
 
OOP 1 - 5
OOP 1 - 5OOP 1 - 5
OOP 1 - 5
 
Помагало по география за 6 клас
Помагало по география за 6 класПомагало по география за 6 клас
Помагало по география за 6 клас
 
Годишно обобщение по география и икономика - 5 клас
Годишно обобщение по география и икономика - 5 класГодишно обобщение по география и икономика - 5 клас
Годишно обобщение по география и икономика - 5 клас
 
събиране на десетични дроби. свойства
събиране на десетични дроби. свойствасъбиране на десетични дроби. свойства
събиране на десетични дроби. свойства
 
деление на дд задачи
деление на дд задачиделение на дд задачи
деление на дд задачи
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - Упражнения
 
събиране и изваждане на дд
събиране и изваждане на ддсъбиране и изваждане на дд
събиране и изваждане на дд
 
четене и сравняване на десетични дроби
четене и сравняване на десетични дробичетене и сравняване на десетични дроби
четене и сравняване на десетични дроби
 
всички действия с дд
всички действия с ддвсички действия с дд
всички действия с дд
 
умножение на десетични дроби
умножение на десетични дробиумножение на десетични дроби
умножение на десетични дроби
 
фигури
фигурифигури
фигури
 
5 клас урок 19 НОВА ПРОГРАМА
5 клас урок 19 НОВА ПРОГРАМА5 клас урок 19 НОВА ПРОГРАМА
5 клас урок 19 НОВА ПРОГРАМА
 
Програмирането със C sharp
Програмирането със C sharpПрограмирането със C sharp
Програмирането със C sharp
 

Similar to Училищен курс по програмиране на C# (2013/2014), занятие №13

High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code IntroductionSvetlin Nakov
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality CodeSvetlin Nakov
 
Memory problems in .NET apps
Memory problems in .NET appsMemory problems in .NET apps
Memory problems in .NET appsBorislav Ivanov
 
Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияКурс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1DAVID Academy
 
[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with Jenkins[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with JenkinsBorislav Traykov
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLDAVID Academy
 
Svetlin Nakov - .NET Framework Overview
Svetlin Nakov - .NET Framework OverviewSvetlin Nakov - .NET Framework Overview
Svetlin Nakov - .NET Framework OverviewSvetlin Nakov
 
FABRIQ - Short - Svetlin Nakov
FABRIQ - Short - Svetlin NakovFABRIQ - Short - Svetlin Nakov
FABRIQ - Short - Svetlin NakovSvetlin Nakov
 
Rykowodstwo po programirane_na_bazata_na_ezika_java
Rykowodstwo po programirane_na_bazata_na_ezika_javaRykowodstwo po programirane_na_bazata_na_ezika_java
Rykowodstwo po programirane_na_bazata_na_ezika_javaSonia Lichkova
 
Web applications with Catalyst BG
Web applications with Catalyst BGWeb applications with Catalyst BG
Web applications with Catalyst BGsvilen.ivanov
 
18 operatori i funkcii
18 operatori i funkcii18 operatori i funkcii
18 operatori i funkciiIvan Peev
 
Drupal course-plovdiv-week1-day-1
Drupal course-plovdiv-week1-day-1Drupal course-plovdiv-week1-day-1
Drupal course-plovdiv-week1-day-1Kalin Chernev
 
Acceptance testing with Selenium 2 and PHPUnit
Acceptance testing with Selenium 2 and PHPUnitAcceptance testing with Selenium 2 and PHPUnit
Acceptance testing with Selenium 2 and PHPUnitBisser Todorov
 
Drupal security lecture
Drupal security lectureDrupal security lecture
Drupal security lectureslide9991
 
Python choreographe NAOqi Framework
Python choreographe NAOqi FrameworkPython choreographe NAOqi Framework
Python choreographe NAOqi FrameworkAtelier for robotics
 

Similar to Училищен курс по програмиране на C# (2013/2014), занятие №13 (20)

High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code Introduction
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality Code
 
Memory problems in .NET apps
Memory problems in .NET appsMemory problems in .NET apps
Memory problems in .NET apps
 
Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияКурс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
 
Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1
 
C++ OpenFest 2015
C++ OpenFest 2015C++ OpenFest 2015
C++ OpenFest 2015
 
[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with Jenkins[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with Jenkins
 
Writing tests in Go
Writing tests in GoWriting tests in Go
Writing tests in Go
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
 
Svetlin Nakov - .NET Framework Overview
Svetlin Nakov - .NET Framework OverviewSvetlin Nakov - .NET Framework Overview
Svetlin Nakov - .NET Framework Overview
 
FABRIQ - Short - Svetlin Nakov
FABRIQ - Short - Svetlin NakovFABRIQ - Short - Svetlin Nakov
FABRIQ - Short - Svetlin Nakov
 
Rykowodstwo po programirane_na_bazata_na_ezika_java
Rykowodstwo po programirane_na_bazata_na_ezika_javaRykowodstwo po programirane_na_bazata_na_ezika_java
Rykowodstwo po programirane_na_bazata_na_ezika_java
 
Web applications with Catalyst BG
Web applications with Catalyst BGWeb applications with Catalyst BG
Web applications with Catalyst BG
 
Why do we need a language like go?
Why do we need a language like go?Why do we need a language like go?
Why do we need a language like go?
 
SVN
SVNSVN
SVN
 
18 operatori i funkcii
18 operatori i funkcii18 operatori i funkcii
18 operatori i funkcii
 
Drupal course-plovdiv-week1-day-1
Drupal course-plovdiv-week1-day-1Drupal course-plovdiv-week1-day-1
Drupal course-plovdiv-week1-day-1
 
Acceptance testing with Selenium 2 and PHPUnit
Acceptance testing with Selenium 2 and PHPUnitAcceptance testing with Selenium 2 and PHPUnit
Acceptance testing with Selenium 2 and PHPUnit
 
Drupal security lecture
Drupal security lectureDrupal security lecture
Drupal security lecture
 
Python choreographe NAOqi Framework
Python choreographe NAOqi FrameworkPython choreographe NAOqi Framework
Python choreographe NAOqi Framework
 

More from DAVID Academy

Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLDAVID Academy
 
Курс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesКурс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesDAVID Academy
 
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkКурс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkDAVID Academy
 
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...DAVID Academy
 
Курс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеКурс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеDAVID Academy
 
Курс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - ПомагалоКурс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - ПомагалоDAVID Academy
 
Курс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - УпражненияКурс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - УпражненияDAVID Academy
 
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииКурс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииDAVID Academy
 

More from DAVID Academy (8)

Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTML
 
Курс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesКурс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web Services
 
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkКурс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
 
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
 
Курс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеКурс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. Представяне
 
Курс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - ПомагалоКурс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - Помагало
 
Курс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - УпражненияКурс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - Упражнения
 
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииКурс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
 

Училищен курс по програмиране на C# (2013/2014), занятие №13

  • 1. 2013 Курс по програмиране на C# Занятие №13 Изключения. Анотации и отражение
  • 2. Съдържание • Изключения – Видове грешки – Връщане на код за състояние при извикване – Проверка на състоянието – Изключения • Анотации и отражение – Програмни единици – Анотации – Отражение
  • 3. Обработка на грешки • Видове грешки – Compile time • Грешки на компилатора по време на компилиране на приложението • В следствие на грешки на програмиста • Отстраняват се още по време на написване на приложението – Run time • Грешки на CLR по време на изпълнение на приложението • В следствие на грешки на програмиста, непредвидени проблеми в средата, входните данни, комуникацията и други изключителни ситуации • Не се отстраняват, а се предвиждат
  • 4. Обработка на грешки // връщане на специален резултат DbStatus status = ExecuteDbQuery("…"); switch (status) { case DbStatus.Ok: break; case DbStatus.NetworkError: // разбутай кабела break; case DbStatus.FileAccessError: // май имаме счупен диск? break; case DbStatus.FilePermissionError: // кофти права за достъп до файла? break; } • Old school подходи към обработката на грешки – Връщане на код за състояние при извикване – Прекалено много код при всяко извикване – Нужда от допълнителни параметри – Преправяне при нов код за състояние – Вероятност за излишни, недостатъчни проверки и/или повтарящ се код
  • 5. Обработка на грешки // проверка на състоянието ExecuteDbQuery("…"); DbStatus status = GetDbStatus(); switch (status) { case DbStatus.Ok: break; case DbStatus.NetworkError: // разбутай кабела break; case DbStatus.FileAccessError: // май имаме счупен диск? break; case DbStatus.FilePermissionError: // кофти права за достъп до файла? break; } • Old school подходи към обработката на грешки – Проверка на състоянието – Прекалено много код след всяко извикване – Нужда от допълнително извикване – Вероятност за излишни, недостатъчни проверки и/или повтарящ се код – Нужда от познаване на тези състояния от външен код
  • 6. Обработка на грешки • Какво беше “call stack”? – Спомени от темата за рекурсия – Първо, какво беше “stack”? • Колекция от елементи • Операция: добавяне на елемент в края (push) • Операция: взимане на елемент от края (pop) • LIFO (Last-In-First-Out структура) – Та, какво е “call stack”? • Структура, която .NET Framework поддържа по време на изпълнение • Записва се информация за последното извикване на метод: – Локалните променливи по време на извикването – Мястото на извикването – Параметрите, с които е направено • С други думи: дава информация от къде идваме, за да се върнем обратно
  • 7. Обработка на грешки • Какво е „изключение“? – Изключение/изключителна ситуация – Проверка за възникване на изключение – Прихващане на изключения – Финализиране след проверка за изключение – Предизвикване на изключение • Какво се случва при изключение? – Прекратява се изпълнението на текущия код – Намира се блок обработващ съответния тип изключения – Ако не съществува такъв блок, изпълнението приключва с грешка – Финализиране, независимо дали е възникнала грешка или не
  • 8. Обработка на грешки • Изключения в C# – Информацията за изключения се пренася от обекти – Обектите са от вградения клас Exception или негов наследник • Свойства Message, StackTrace и InnerException – .NET Framework предлага множество вградени изключения • ArgumentException, IndexOutOfRangeException, IOException и др. – Програмистът може да направи свой вид изключение • Конвенцията е наименованието на класа да завършва с Exception
  • 9. Обработка на грешки try { // Операции при нормална работа // … // Предизвикване на изключение throw new DbException("DB error."); } catch (ArgumentException ex) { // Обработване на ArgumentException } catch (Exception ex) { // Обработване на Exception } finally { // Винаги изпълнявани операции } • Изключения в C# – Конструкция try … catch … finally • Блоковете catch и finally не за задължителни, но поне единият трябва да присъства • Възможно е наличието на повече от един catch блок • В скобите на catch блок се указва типа на прихващаните изключения – Предизвикване на изключение с throw • Възможно е предизвикване на изключение в catch блока • Предизвикване на оригиналното изключение
  • 10. Обработка на грешки // почистване FileStream stream = File.OpenRead(@"C:File.txt"); try { // работа с потока stream } finally { stream.Dispose(); } // съкратен запис на горното using (FileStream stream = File.OpenRead(@"C:File.txt")) { // работа с потока stream } • Конструкцията using – Интерфейсът IDisposable • Декларира метод Dispose – Съкратен запис и яснота на кода
  • 11. Обработка на грешки try { // прекратява нишката Thread.Abort(); } catch (ThreadAbortException) { // … някакъв код… // все едно тук пише: throw; // освен ако: // Thread.ResetAbort(); } • Какво е „нишка“? – Отделна последователност от инструкции независимо управлявани от ОС – Многонишковост • ThreadAbortException – Специално изключение използвано при прекратяване на нишка – Предизвиква се автоматично отново в края на catch блока – … освен ако не се извика Thread.ResetAbort()
  • 12. Обработка на грешки // демонстрация
  • 13. Анотации и отражение • Програмни единици – Application domain – механизъм за изолиране на изпълнението на различни приложения – Assembly – компилирана библиотека от код (process & library assemblies) – Module – съдържа код, метаданни и ресурси – …
  • 14. Анотации и отражение • Какво е „анотация“? – Метод за асоцииране на метаданни или декларативна информация с различни програмни единици – Анотациите се добавят от програмиста по време на разработка на съответните програмни единици – Метаданните могат да съдържат информация за: • Инструкции за работа на компилатора • Инструкции за работа при компилиране и изпълнение • Друга машинно обработваема информация
  • 15. Анотации и отражение • Анотации в .NET Framework – Анотациите са реализирани като обекти (т.нар. атрибути) – Обектите са от клас наследяващ класа Attribute • Атрибутите могат да имат полета, свойства, методи и т.н. • Атрибутите могат да приемат аргументи • Към една програмна единица могат да се прилагат повече от един атрибути – .NET Framework предлага множество вградени атрибути • AssemblyNameAttribute, AssemblyVersionAttribute и др. • AssemblyCompanyAttribute, AssemblyCopyrightAttribute и др. • ObsoleteAttribute • SerializableAttribute и NonSerializedAttribute • AttributeUsageAttribute
  • 16. Анотации и отражение // демонстрация
  • 17. Анотации и отражение • Какво е „отражение“? – Техника за получаване на информация за програмни единици по време на изпълнение, обръщение към тях и достъпването им – Отражението в частност може да се използва за обработка на анотациите – Отражението може да се използва за сериализиране и десериализиране на данни
  • 18. Анотации и отражение • Отражение в .NET Framework – Реализира се чрез използване на функционалността в пространството на имена System.Reflection и класа System.Type – System.Reflection.Emit дава възможност и за създаване на изпълним CIL (Common Intermediate Language) код от приложение (напр. написването на собствен компилатор) – Може да се извлича разнообразна информация за различни компоненти (assemblies, модули, типове данни, методи, конструктори, полета, свойства, параметри, събития и др.)
  • 19. Анотации и отражение // демонстрация
  • 20. Задачи за упражнение • Модифицирайте задачата „Геометрични фигури“ от предходните упражнения, така че: – в началото на конструкторите и методите с параметри, да се проверяват за коректност техните стойности и да се предизвикват съответните изключения – при въвеждане на данни за даден обект, да се проверява тяхната коректност и да се предизвикват различни по вид изключения според ситуацията – при изчисляване на параметрите за даден обект, да се проверява наличието на всички необходими данни и, ако липсват такива, да се предизвиква изключение – в основната програма, да се прихванат различните изключения, да се изведе разбираемо съобщение и да се реагира адекватно на различните видове изключения
  • 21. Задачи за упражнение • Създайте C# библиотека, която да съдържа атрибута DeveloperInfoAttribute, който: – Съдържа информация за име, e-мейл адрес и телефон за контакт на разработчика – Името и е-мейл адресът са задължителни, докато телефонният номер не е – Атрибутът да може да се прилага повече от веднъж върху всякакви програмни единици – Поставете така направения атрибут на всички възможни програмни единици, като попълните информация за поне няколко разработчика
  • 22. Задачи за упражнение • Създайте аналитично приложение, което да: – изчита от клавиатурата наименованието на *.dll или *.exe файл – опитва да зареди файла като assembly – има добавена референция към проекта от предходното упражнение – намира програмните единици, които имат атрибут DeveloperInfoAttribute и извежда информацията от атрибута – има добавена референция към проекта „Геометрични фигури“ – намира всички класове наследяващи класа Object2D, извежда тяхното наименование и техните DeveloperInfoAttribute атрибути, ако имат такива (иначе надпис „No developer info for this class.”)
  • 24. Благодаря! • Валери Дачев – valery@david.bg – @vdachev – https://facebook.com/vdachev • ДАВИД академия – acad@david.bg – http://acad.david.bg/ – @david_academy – https://facebook.com/DavidAcademy