SlideShare uma empresa Scribd logo
1 de 28
Курс по програмиране на C#
Занятие №8
Методи. Конструктори и деструктори

2013
Съдържание 1/2
• Обектно-ориентирано програмиране
– Какво научихме за него?
– Какво можем да добавим?

• Методи
–
–
–
–

Какво е „метод“?
Деклариране на метод
Използване на членове на същия обект
Използване на членове на друг обект
Съдържание 2/2
• Конструктори
–
–
–
–

Какво е „конструктор“?
Деклариране на конструктор
Използване на конструктори
Навързване на конструктори

• Деструктори
– Какво е „деструктор“?
– Деклариране на деструктор

• Ами структурите?!
Обектно-ориентирано програмиране
• Какво научихме за него?
– ООП е подход, който представя „света“ като множество от обекти
организирани в класове
– В .NET Framework всичко е обект!
• … един вид… 

– Организационна структура
• Класът обединява множество от сходни обекти
• Обектът е представител на класа, към който принадлежи

– Състояние (данни)
• Класът дава описание на данните характеризиращи състоянието на обектите
принадлежащи към този клас (тип и наименование на данните)
• Обектът има състояние определено от конкретните стойности за данните
характерни за класа, към който принадлежи (стойности за данните)
Обектно-ориентирано програмиране
• Какво можем да добавим?
– Поведение (програмен код)
• Класът дава възможното поведение на обектите принадлежащи към този клас
• Обектът променя своето състояние и/или състоянието на други обекти в
резултат на своето поведение

– Създаване (инициализация)
• Класът може да определи действията извършвани при създаването на обекти
принадлежащи към този клас
• Класът може да определи начините за създаването на обекти принадлежащи
към този клас

– Унищожаване (освобождаване на ресурси)
• Класът може да определи действията извършвани при унищожаването на
обекти принадлежащи към този клас
Методи
• Какво е „метод“? (преговор)
– Методът е член-функция за класа, в който е дефинирана
– Всички функции в езика C# са всъщност методи
– Функцията/методът е последователност от инструкции изпълняващи
дадена задача

• Методите в контекста на ООП
– Методът е начин с програмен код да дефинираме поведение на
обектите от класа, в който е дефиниран съответният метод
– Методът е начин да изменим данните и респективно състоянието
на обекта
– Методите могат да се декларират и съответно изпълняват в
контекста, както на обектите от даден клас, така и в контекста на
класа като цяло
Методи
• Деклариране на метод
– (ново) Клас, в който методът е
деклариран
– Тип на данните на връщаната
стойност (или „void” ако няма
такава)
– Наименование
– Описание на параметрите
– Тяло на метода

• Презаписване на методи
– Деклариране на методи с едно
и също наименование, но с
различна сигнатура

// деклариран клас
class Human
{
// …
void SayHello()
{
Console.WriteLine(“Yo, nigga!”);
}
void SayHello(Human nigga)
{
Console.WriteLine(“Yo, {0}!”, nigga);
}
// …
}
Методи
• Достъпване на членпроменливи (полета)
– Когато методът се изпълнява в
контекста на обект, ключовата
дума „this“ може да се
използва за достъп до неговите
член-променливи (полета)

class Person
{
// член-променливи (полета)
string _firstName,
_middleName, _lastName;
// член-функция с резултат
string GetFullName()
{
string fullName =
string.Format(“{0} {1} {2}”,
// достъпване на член-променливи
this._firstName,
this._middleName, this._lastName);
return fullName;
}
}
Методи
• Използване на членпроменливи (полета) на
същия обект
– Ако обръщението е еднозначно,
ключовата дума „this” може да
се пропусне

class Person
{
// член-променливи (полета)
string _firstName,
_middleName, _lastName;
// член-функция с резултат
string GetFullName()
{
string fullName =
string.Format(“{0} {1} {2}”,
// достъпване на член-променливи
_firstName,
_middleName, _lastName);
return fullName;
}
}
Методи
• Използване на член-функции
(методи) на същия обект
– Когато методът се изпълнява в
контекста на обект, ключовата
дума „this“ може да се
използва за достъп до неговите
член-функции (методи)
– Отново, ако обръщението е
еднозначно, ключовата дума
„this” може да се пропусне

class Person
{
// … предишният ни код е някъде тук

// член-функция извикваща друга
void ShowFullName()
{
string fullName = this.GetFullName();
Console.Write(fullName);
}
}
Методи
• Използване на член-функции
(методи) на друг обект

class Person
{
// … предишният ни код е някъде тук

– Методи на друг обект се
извикват с използването на
променливата, в която той е
съхранен

// член-функция извикваща друга
void Meet(Person thatPerson)
{
string thisName =
this.GetFullName();
string thatName =
thatPerson.GetFullName();
Console.Write(
“♥ {0} ♥ {1} ♥”,
thisName, thatName);
}
}
Методи - демо
// Демонстрация
Конструктори
• Какво е „конструктор“?
– Конструкторът е метод, който се изпълнява при създаването на
обект от съответния клас и служи за инициализация на обекта
– Конструкторът не се извиква явно, а неявно при създаване на обект
с оператора „new”, след заделяне на памет за него
– Конструкторът може да има параметри
– Конструкторът не може да връща резултат
– Конструкторът може да бъде презаписван
– Конструкторът може да извиква други конструктори
– За класовете без изрично деклариран конструктор, се генерира
автоматичен подразбиращ се конструктор (без параметри)
Конструктори
• Деклариране на конструктор
– Не се упоменава връщан тип
данни
– Наименованието на
конструктора съвпада с
наименованието на класа
– Описание на параметрите
– Тяло на конструктора

// кръгов конус
class CircularCone
{
// радиус на основата и височина
double _radius, _height;
// ъгъл между височината и оста
double _angle;
CircularCone(double radius,
double height, double angle = 0)
{
// инициализация
_radius = radius;
_height = height;
_angle = angle;
}
}
Конструктори
• Деклариране на конструктор

// триъгълник
class Triangle
– Един клас може да има повече
{
от един конструктор
// страни на триъгълника
double _a, _b, _c;
– Конструкторът може да бъде
Triangle(double a, double b, double c)
презаписан, както обикновените
{
методи
// …
}
Triangle(double ax, double ay,
double bx, double by,
double cx, double cy)
{
// …
}
}
Конструктори
• Използване на конструктори
– Оператор „new”
– Наименованието на
класа/конструктора
– Списък от аргументи

// извикване на конструктор без параметър
Person person = new Person();
// извикване на конструктор с параметри
CircularCone cone = new CircularCone(
0.5, 1);
// извикване на презаписан конструктор
Triangle triangle1 = new Triangle(
3, 4, 5);
Triangle triangle2 = new Triangle(
0, 0,
4, 0,
4, 3);
Конструктори
• Навързване на конструктори
– Понякога имаме няколко
конструктора с повтаряща се
логика
– За да спестим повторението на
код, можем да използваме
навързване на конструктори
– Навързването на конструктори
представлява извикване на един
конструктор от друг

class GeoLocation
{
// геогр. дължина, широчина и височина
double _lng, _lat, _alt;
// само с геор. дължина и широчина
GeoLocation(double lng, double lat)
{
_lng = lng; _lat = lat; _alt = 0;

}
// с геогр. дължина, широчина и височина
GeoLocation(double lng, double lat,
double alt)
{
_lng = lng; _lat = lat; _alt = alt;
}
}
Конструктори
• Навързване на конструктори
– Понякога имаме няколко
конструктора с повтаряща се
логика
– За да спестим повторението на
код, можем да използваме
навързване на конструктори
– Навързването на конструктори
представлява извикване на един
конструктор от друг

class GeoLocation
{
// геогр. дължина, широчина и височина
double _lng, _lat, _alt;
// само с геор. дължина и широчина
GeoLocation(double lng, double lat)
: this(lng, lat, 0)
{

}
// с геогр. дължина, широчина и височина
GeoLocation(double lng, double lat,
double alt)
{
_lng = lng; _lat = lat; _alt = alt;
}
}
Конструктори - демо
// Демонстрация
Деструктори
• „Човек и добре да живее, умира и друг се ражда.“ –
Омуртаг
– Приживе обектите могат да заемат ресурси, които .NET Framework
не може да управлява – наследство, което трябва да се освободи

• Какво е „деструктор”?
– Деструкторът е метод, който се изпълнява при изчистването и
освобождаването на паметта заемана от обекта
– Деструкторът не се извиква явно, а автоматично т.нар. “garbage
collector”
– Деструкторът може да бъде само един за даден клас
– Деструкторът няма параметри
– Деструкторите не могат да бъдат презаписвани
Деструктори
• Деклариране на деструктор
– Символ “~” (тилда)
– Наименованието на
деструктора съвпада с
наименованието на класа
– Празен списък от параметри
– Тяло на деструктора

class Marriage
{
// конструктор на брак
Marriage(string husband, string wife)
{
Console.WriteLine(
”And they lived happily ever
after…”);
}
// деструктор на брак
~Marriage()
{
Console.WriteLine(
“Till death did them part!“);
}
}
Ами структурите?!
• Структурите имат особености/ограничения в сравнение с
класовете
– Структурите могат да декларират методи
– Структурите могат да се конструират и без оператора “new”
– Структурите не могат да декларират подразбиращ се конструктор
(без параметри)
– Структурите могат да декларират конструктори
– Структурите не могат да декларират деструктори
Задачи за упражнение
• Създайте структура Point2D, която описва точка в
двумерното пространство
– Изберете подходящо вътрешно представяне на точката
– Добавете конструктор с два параметъра – планарни координати
на точката (x, y)
– Добавете конструктор с три параметъра – един от изброим списък
указващ координатната система и два за самите координати
(планарни (x,y) или полярни (r, phi))
– Добавете метод, който връща планарните координати (x, y) на
точката
– Добавете метод, който връща полярните координати (r, phi) на
точката
– Добавете метод, който връща разстоянието до друга точка Point2D
Задачи за упражнение
• Създайте клас Vector2D, който описва вектор в двумерното
пространство
– Изберете подходящо вътрешно представяне на вектора
– Добавете конструктор с два параметъра – компоненти на вектора
в декартова координатна система (x, y)
– Добавете конструктор с три параметъра – един от изброим списък
указващ координатната система и два за самите компоненти
(планарни (x,y) или полярни (r, phi))
– Добавете методи за транслация и ротация на вектора
– Добавете метод, който прибавя/изважда друг вектор
– Добавете метод, който връща точка получена от преместването на
подадена точка с настоящия вектор
Задачи за упражнение
• Създайте програма съдържаща класове за различни
основни двумерни и тримерни геометрични фигури
– Добавете подходящите конструктори
– Добавете полета описващи характеристиките на съответните
фигури
– Добавете методи за изчисляване на повърхнина и обем на тези,
които имат такива
– Такива класове могат да бъдат:
•
•
•
•

Point2D и Vector2D съответно за точка и вектор в двумерното пространство
Parallelogram за успоредник, Ellipse за елипса
Point3D и Vector3D съответно за точка и вектор в тримерното пространство
Cone за конус, Parallelepiped за паралелепипед, Pyramid за пирамида,
Ellipsoid за елипсоид
Задачи за упражнение
• Създайте програма за управление на софтуерна академия
–
–
–
–

Създайте клас Student, който описва учащ
Създайте клас Course, който описва курс
Създайте клас Academy, който описва софтуерна академия
Класът Student:
• Съдържа пореден номер, имена и списък от курсове
• Декларира метод за записване на курс, подаден като параметър

– Класът Course:
• Съдържа наименование, e-mail и списък от записани учащи
• Декларира метод за записване на учащ, подаден като параметър

– Класът Academy:
• Съдържа наименование, списък от курсове и учащи
• Декларира методи за добавяне на курс/учащ и записване
Въпроси?
Благодаря!
• Валери Дачев
– valery@david.bg
– @vdachev
– https://facebook.com/vdachev

• ДАВИД академия
–
–
–
–

acad@david.bg
http://acad.david.bg/
@david_academy
https://facebook.com/DavidAcademy

Mais conteúdo relacionado

Mais procurados

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

Mais procurados (20)

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

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

Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияКурс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияDAVID Academy
 
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
 
Информационни системи - упражнение № 1
Информационни системи - упражнение № 1Информационни системи - упражнение № 1
Информационни системи - упражнение № 1Tsvetelin Pavlov
 
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...DAVID Academy
 
Конкурентни софтуерни архитектури
Конкурентни софтуерни архитектуриКонкурентни софтуерни архитектури
Конкурентни софтуерни архитектуриbraintechd
 
Web applications with Catalyst BG
Web applications with Catalyst BGWeb applications with Catalyst BG
Web applications with Catalyst BGsvilen.ivanov
 
Introduction to-rdbms-systems
Introduction to-rdbms-systemsIntroduction to-rdbms-systems
Introduction to-rdbms-systemsRosen Spasov
 
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
 
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииКурс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииDAVID Academy
 
Introduction To Object Oriented Design and UML
Introduction To Object Oriented Design and UMLIntroduction To Object Oriented Design and UML
Introduction To Object Oriented Design and UMLSvetlin Nakov
 
3D4AUTO_R4_Virtual Seminars- BULGARIAN
3D4AUTO_R4_Virtual Seminars- BULGARIAN3D4AUTO_R4_Virtual Seminars- BULGARIAN
3D4AUTO_R4_Virtual Seminars- BULGARIAN3d4auto
 
Grammars for Generative Art - Lectures @ Sofia University #8
Grammars for Generative Art - Lectures @ Sofia University #8Grammars for Generative Art - Lectures @ Sofia University #8
Grammars for Generative Art - Lectures @ Sofia University #8stelf
 
Nakov - RDBMS Systems - Intro
Nakov - RDBMS Systems - IntroNakov - RDBMS Systems - Intro
Nakov - RDBMS Systems - IntroSvetlin Nakov
 
18 operatori i funkcii
18 operatori i funkcii18 operatori i funkcii
18 operatori i funkciiIvan Peev
 
Grammars for Generative Art - Lectures @ Sofia University #5
Grammars for Generative Art - Lectures @ Sofia University #5Grammars for Generative Art - Lectures @ Sofia University #5
Grammars for Generative Art - Lectures @ Sofia University #5stelf
 

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

Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияКурс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
 
.NET/C#_4
.NET/C#_4.NET/C#_4
.NET/C#_4
 
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
 
Информационни системи - упражнение № 1
Информационни системи - упражнение № 1Информационни системи - упражнение № 1
Информационни системи - упражнение № 1
 
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
 
Конкурентни софтуерни архитектури
Конкурентни софтуерни архитектуриКонкурентни софтуерни архитектури
Конкурентни софтуерни архитектури
 
Web applications with Catalyst BG
Web applications with Catalyst BGWeb applications with Catalyst BG
Web applications with Catalyst BG
 
Introduction to-RDBMS-systems
Introduction to-RDBMS-systemsIntroduction to-RDBMS-systems
Introduction to-RDBMS-systems
 
Introduction to-rdbms-systems
Introduction to-rdbms-systemsIntroduction to-rdbms-systems
Introduction to-rdbms-systems
 
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
 
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииКурс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
 
Introduction To Object Oriented Design and UML
Introduction To Object Oriented Design and UMLIntroduction To Object Oriented Design and UML
Introduction To Object Oriented Design and UML
 
3D4AUTO_R4_Virtual Seminars- BULGARIAN
3D4AUTO_R4_Virtual Seminars- BULGARIAN3D4AUTO_R4_Virtual Seminars- BULGARIAN
3D4AUTO_R4_Virtual Seminars- BULGARIAN
 
Writing tests in Go
Writing tests in GoWriting tests in Go
Writing tests in Go
 
Grammars for Generative Art - Lectures @ Sofia University #8
Grammars for Generative Art - Lectures @ Sofia University #8Grammars for Generative Art - Lectures @ Sofia University #8
Grammars for Generative Art - Lectures @ Sofia University #8
 
Nakov - RDBMS Systems - Intro
Nakov - RDBMS Systems - IntroNakov - RDBMS Systems - Intro
Nakov - RDBMS Systems - Intro
 
18 operatori i funkcii
18 operatori i funkcii18 operatori i funkcii
18 operatori i funkcii
 
Grammars for Generative Art - Lectures @ Sofia University #5
Grammars for Generative Art - Lectures @ Sofia University #5Grammars for Generative Art - Lectures @ Sofia University #5
Grammars for Generative Art - Lectures @ Sofia University #5
 
Tema13
Tema13Tema13
Tema13
 

Mais de DAVID Academy

Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияDAVID 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) - 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
 
Курс по информационни технологии (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
 

Mais de DAVID Academy (10)

Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTML
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - Помагало
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - Упражнения
 
Курс по информационни технологии (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) - 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
 
Курс по информационни технологии (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/2014), занятие №8

  • 1. Курс по програмиране на C# Занятие №8 Методи. Конструктори и деструктори 2013
  • 2. Съдържание 1/2 • Обектно-ориентирано програмиране – Какво научихме за него? – Какво можем да добавим? • Методи – – – – Какво е „метод“? Деклариране на метод Използване на членове на същия обект Използване на членове на друг обект
  • 3. Съдържание 2/2 • Конструктори – – – – Какво е „конструктор“? Деклариране на конструктор Използване на конструктори Навързване на конструктори • Деструктори – Какво е „деструктор“? – Деклариране на деструктор • Ами структурите?!
  • 4. Обектно-ориентирано програмиране • Какво научихме за него? – ООП е подход, който представя „света“ като множество от обекти организирани в класове – В .NET Framework всичко е обект! • … един вид…  – Организационна структура • Класът обединява множество от сходни обекти • Обектът е представител на класа, към който принадлежи – Състояние (данни) • Класът дава описание на данните характеризиращи състоянието на обектите принадлежащи към този клас (тип и наименование на данните) • Обектът има състояние определено от конкретните стойности за данните характерни за класа, към който принадлежи (стойности за данните)
  • 5. Обектно-ориентирано програмиране • Какво можем да добавим? – Поведение (програмен код) • Класът дава възможното поведение на обектите принадлежащи към този клас • Обектът променя своето състояние и/или състоянието на други обекти в резултат на своето поведение – Създаване (инициализация) • Класът може да определи действията извършвани при създаването на обекти принадлежащи към този клас • Класът може да определи начините за създаването на обекти принадлежащи към този клас – Унищожаване (освобождаване на ресурси) • Класът може да определи действията извършвани при унищожаването на обекти принадлежащи към този клас
  • 6. Методи • Какво е „метод“? (преговор) – Методът е член-функция за класа, в който е дефинирана – Всички функции в езика C# са всъщност методи – Функцията/методът е последователност от инструкции изпълняващи дадена задача • Методите в контекста на ООП – Методът е начин с програмен код да дефинираме поведение на обектите от класа, в който е дефиниран съответният метод – Методът е начин да изменим данните и респективно състоянието на обекта – Методите могат да се декларират и съответно изпълняват в контекста, както на обектите от даден клас, така и в контекста на класа като цяло
  • 7. Методи • Деклариране на метод – (ново) Клас, в който методът е деклариран – Тип на данните на връщаната стойност (или „void” ако няма такава) – Наименование – Описание на параметрите – Тяло на метода • Презаписване на методи – Деклариране на методи с едно и също наименование, но с различна сигнатура // деклариран клас class Human { // … void SayHello() { Console.WriteLine(“Yo, nigga!”); } void SayHello(Human nigga) { Console.WriteLine(“Yo, {0}!”, nigga); } // … }
  • 8. Методи • Достъпване на членпроменливи (полета) – Когато методът се изпълнява в контекста на обект, ключовата дума „this“ може да се използва за достъп до неговите член-променливи (полета) class Person { // член-променливи (полета) string _firstName, _middleName, _lastName; // член-функция с резултат string GetFullName() { string fullName = string.Format(“{0} {1} {2}”, // достъпване на член-променливи this._firstName, this._middleName, this._lastName); return fullName; } }
  • 9. Методи • Използване на членпроменливи (полета) на същия обект – Ако обръщението е еднозначно, ключовата дума „this” може да се пропусне class Person { // член-променливи (полета) string _firstName, _middleName, _lastName; // член-функция с резултат string GetFullName() { string fullName = string.Format(“{0} {1} {2}”, // достъпване на член-променливи _firstName, _middleName, _lastName); return fullName; } }
  • 10. Методи • Използване на член-функции (методи) на същия обект – Когато методът се изпълнява в контекста на обект, ключовата дума „this“ може да се използва за достъп до неговите член-функции (методи) – Отново, ако обръщението е еднозначно, ключовата дума „this” може да се пропусне class Person { // … предишният ни код е някъде тук // член-функция извикваща друга void ShowFullName() { string fullName = this.GetFullName(); Console.Write(fullName); } }
  • 11. Методи • Използване на член-функции (методи) на друг обект class Person { // … предишният ни код е някъде тук – Методи на друг обект се извикват с използването на променливата, в която той е съхранен // член-функция извикваща друга void Meet(Person thatPerson) { string thisName = this.GetFullName(); string thatName = thatPerson.GetFullName(); Console.Write( “♥ {0} ♥ {1} ♥”, thisName, thatName); } }
  • 12. Методи - демо // Демонстрация
  • 13. Конструктори • Какво е „конструктор“? – Конструкторът е метод, който се изпълнява при създаването на обект от съответния клас и служи за инициализация на обекта – Конструкторът не се извиква явно, а неявно при създаване на обект с оператора „new”, след заделяне на памет за него – Конструкторът може да има параметри – Конструкторът не може да връща резултат – Конструкторът може да бъде презаписван – Конструкторът може да извиква други конструктори – За класовете без изрично деклариран конструктор, се генерира автоматичен подразбиращ се конструктор (без параметри)
  • 14. Конструктори • Деклариране на конструктор – Не се упоменава връщан тип данни – Наименованието на конструктора съвпада с наименованието на класа – Описание на параметрите – Тяло на конструктора // кръгов конус class CircularCone { // радиус на основата и височина double _radius, _height; // ъгъл между височината и оста double _angle; CircularCone(double radius, double height, double angle = 0) { // инициализация _radius = radius; _height = height; _angle = angle; } }
  • 15. Конструктори • Деклариране на конструктор // триъгълник class Triangle – Един клас може да има повече { от един конструктор // страни на триъгълника double _a, _b, _c; – Конструкторът може да бъде Triangle(double a, double b, double c) презаписан, както обикновените { методи // … } Triangle(double ax, double ay, double bx, double by, double cx, double cy) { // … } }
  • 16. Конструктори • Използване на конструктори – Оператор „new” – Наименованието на класа/конструктора – Списък от аргументи // извикване на конструктор без параметър Person person = new Person(); // извикване на конструктор с параметри CircularCone cone = new CircularCone( 0.5, 1); // извикване на презаписан конструктор Triangle triangle1 = new Triangle( 3, 4, 5); Triangle triangle2 = new Triangle( 0, 0, 4, 0, 4, 3);
  • 17. Конструктори • Навързване на конструктори – Понякога имаме няколко конструктора с повтаряща се логика – За да спестим повторението на код, можем да използваме навързване на конструктори – Навързването на конструктори представлява извикване на един конструктор от друг class GeoLocation { // геогр. дължина, широчина и височина double _lng, _lat, _alt; // само с геор. дължина и широчина GeoLocation(double lng, double lat) { _lng = lng; _lat = lat; _alt = 0; } // с геогр. дължина, широчина и височина GeoLocation(double lng, double lat, double alt) { _lng = lng; _lat = lat; _alt = alt; } }
  • 18. Конструктори • Навързване на конструктори – Понякога имаме няколко конструктора с повтаряща се логика – За да спестим повторението на код, можем да използваме навързване на конструктори – Навързването на конструктори представлява извикване на един конструктор от друг class GeoLocation { // геогр. дължина, широчина и височина double _lng, _lat, _alt; // само с геор. дължина и широчина GeoLocation(double lng, double lat) : this(lng, lat, 0) { } // с геогр. дължина, широчина и височина GeoLocation(double lng, double lat, double alt) { _lng = lng; _lat = lat; _alt = alt; } }
  • 19. Конструктори - демо // Демонстрация
  • 20. Деструктори • „Човек и добре да живее, умира и друг се ражда.“ – Омуртаг – Приживе обектите могат да заемат ресурси, които .NET Framework не може да управлява – наследство, което трябва да се освободи • Какво е „деструктор”? – Деструкторът е метод, който се изпълнява при изчистването и освобождаването на паметта заемана от обекта – Деструкторът не се извиква явно, а автоматично т.нар. “garbage collector” – Деструкторът може да бъде само един за даден клас – Деструкторът няма параметри – Деструкторите не могат да бъдат презаписвани
  • 21. Деструктори • Деклариране на деструктор – Символ “~” (тилда) – Наименованието на деструктора съвпада с наименованието на класа – Празен списък от параметри – Тяло на деструктора class Marriage { // конструктор на брак Marriage(string husband, string wife) { Console.WriteLine( ”And they lived happily ever after…”); } // деструктор на брак ~Marriage() { Console.WriteLine( “Till death did them part!“); } }
  • 22. Ами структурите?! • Структурите имат особености/ограничения в сравнение с класовете – Структурите могат да декларират методи – Структурите могат да се конструират и без оператора “new” – Структурите не могат да декларират подразбиращ се конструктор (без параметри) – Структурите могат да декларират конструктори – Структурите не могат да декларират деструктори
  • 23. Задачи за упражнение • Създайте структура Point2D, която описва точка в двумерното пространство – Изберете подходящо вътрешно представяне на точката – Добавете конструктор с два параметъра – планарни координати на точката (x, y) – Добавете конструктор с три параметъра – един от изброим списък указващ координатната система и два за самите координати (планарни (x,y) или полярни (r, phi)) – Добавете метод, който връща планарните координати (x, y) на точката – Добавете метод, който връща полярните координати (r, phi) на точката – Добавете метод, който връща разстоянието до друга точка Point2D
  • 24. Задачи за упражнение • Създайте клас Vector2D, който описва вектор в двумерното пространство – Изберете подходящо вътрешно представяне на вектора – Добавете конструктор с два параметъра – компоненти на вектора в декартова координатна система (x, y) – Добавете конструктор с три параметъра – един от изброим списък указващ координатната система и два за самите компоненти (планарни (x,y) или полярни (r, phi)) – Добавете методи за транслация и ротация на вектора – Добавете метод, който прибавя/изважда друг вектор – Добавете метод, който връща точка получена от преместването на подадена точка с настоящия вектор
  • 25. Задачи за упражнение • Създайте програма съдържаща класове за различни основни двумерни и тримерни геометрични фигури – Добавете подходящите конструктори – Добавете полета описващи характеристиките на съответните фигури – Добавете методи за изчисляване на повърхнина и обем на тези, които имат такива – Такива класове могат да бъдат: • • • • Point2D и Vector2D съответно за точка и вектор в двумерното пространство Parallelogram за успоредник, Ellipse за елипса Point3D и Vector3D съответно за точка и вектор в тримерното пространство Cone за конус, Parallelepiped за паралелепипед, Pyramid за пирамида, Ellipsoid за елипсоид
  • 26. Задачи за упражнение • Създайте програма за управление на софтуерна академия – – – – Създайте клас Student, който описва учащ Създайте клас Course, който описва курс Създайте клас Academy, който описва софтуерна академия Класът Student: • Съдържа пореден номер, имена и списък от курсове • Декларира метод за записване на курс, подаден като параметър – Класът Course: • Съдържа наименование, e-mail и списък от записани учащи • Декларира метод за записване на учащ, подаден като параметър – Класът Academy: • Съдържа наименование, списък от курсове и учащи • Декларира методи за добавяне на курс/учащ и записване
  • 28. Благодаря! • Валери Дачев – valery@david.bg – @vdachev – https://facebook.com/vdachev • ДАВИД академия – – – – acad@david.bg http://acad.david.bg/ @david_academy https://facebook.com/DavidAcademy

Notas do Editor

  1. Неуправлявани ресурси – прозорци, файлове, мрежови връзки, COM обекти и т.н.