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

28
2013 Copyright © 2013 DAVID Holding Company Курс по програмиране на C# Занятие №8 Методи. Конструктори и деструктори

description

Училищен курс по програмиране на C# (2013/2014) Занятие №8: Методи. Конструтори и деструктори.

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

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

2013Copyright © 2013 DAVID Holding Company

Курс по програмиране на C#

Занятие №8Методи. Конструктори и деструктори

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

Copyright © 2013 DAVID Holding Company

Съдържание 1/2

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

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

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

Copyright © 2013 DAVID Holding Company

Съдържание 2/2

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

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

• Ами структурите?!

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

Copyright © 2013 DAVID Holding Company

Обектно-ориентирано програмиране

• Какво научихме за него?– ООП е подход, който представя „света“ като множество от

обекти организирани в класове– В .NET Framework всичко е обект!

• … един вид…

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

– Състояние (данни)• Класът дава описание на данните характеризиращи състоянието на

обектите принадлежащи към този клас (тип и наименование на данните)• Обектът има състояние определено от конкретните стойности за данните

характерни за класа, към който принадлежи (стойности за данните)

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

Copyright © 2013 DAVID Holding Company

Обектно-ориентирано програмиране

• Какво можем да добавим?– Поведение (програмен код)

• Класът дава възможното поведение на обектите принадлежащи към този клас

• Обектът променя своето състояние и/или състоянието на други обекти в резултат на своето поведение

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

обекти принадлежащи към този клас• Класът може да определи начините за създаването на обекти

принадлежащи към този клас

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

обекти принадлежащи към този клас

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

Copyright © 2013 DAVID Holding Company

Методи

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

изпълняващи дадена задача

• Методите в контекста на ООП– Методът е начин с програмен код да дефинираме поведение

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

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

контекста, както на обектите от даден клас, така и в контекста на класа като цяло

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

Copyright © 2013 DAVID Holding Company

Методи

// деклариран класclass Human{ // … void SayHello() { Console.WriteLine(“Yo, nigga!”); } void SayHello(Human nigga) { Console.WriteLine(“Yo, {0}!”, nigga); } // …}

• Деклариране на метод– (ново) Клас, в който методът е

деклариран– Тип на данните на връщаната

стойност (или „void” ако няма такава)

– Наименование– Описание на параметрите– Тяло на метода

• Презаписване на методи– Деклариране на методи с едно

и също наименование, но с различна сигнатура

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

Copyright © 2013 DAVID Holding Company

Методи

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

• Достъпване на член-променливи (полета)– Когато методът се изпълнява в

контекста на обект, ключовата дума „this“ може да се използва за достъп до неговите член-променливи (полета)

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

Copyright © 2013 DAVID Holding Company

Методи

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

• Използване на член-променливи (полета) на същия обект– Ако обръщението е

еднозначно, ключовата дума „this” може да се пропусне

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

Copyright © 2013 DAVID Holding Company

Методи

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

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

• Използване на член-функции (методи) на същия обект– Когато методът се изпълнява в

контекста на обект, ключовата дума „this“ може да се използва за достъп до неговите член-функции (методи)

– Отново, ако обръщението е еднозначно, ключовата дума „this” може да се пропусне

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

Copyright © 2013 DAVID Holding Company

Методи

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

// член-функция извикваща друга void Meet(Person thatPerson) { string thisName = this.GetFullName(); string thatName = thatPerson.GetFullName(); Console.Write( “♥ {0} ♥ {1} ♥”, thisName, thatName); }}

• Използване на член-функции (методи) на друг обект– Методи на друг обект се

извикват с използването на променливата, в която той е съхранен

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

Copyright © 2013 DAVID Holding Company

Методи - демо

// Демонстрация

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

Copyright © 2013 DAVID Holding Company

Конструктори

• Какво е „конструктор“?– Конструкторът е метод, който се изпълнява при създаването на

обект от съответния клас и служи за инициализация на обекта– Конструкторът не се извиква явно, а неявно при създаване на

обект с оператора „new”, след заделяне на памет за него– Конструкторът може да има параметри– Конструкторът не може да връща резултат– Конструкторът може да бъде презаписван– Конструкторът може да извиква други конструктори– За класовете без изрично деклариран конструктор, се генерира

автоматичен подразбиращ се конструктор (без параметри)

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

Copyright © 2013 DAVID Holding Company

Конструктори

// кръгов конусclass CircularCone{ // радиус на основата и височина double _radius, _height; // ъгъл между височината и оста double _angle;

CircularCone(double radius, double height, double angle = 0) { // инициализация _radius = radius; _height = height; _angle = angle; }}

• Деклариране на конструктор– Не се упоменава връщан тип

данни– Наименованието на

конструктора съвпада с наименованието на класа

– Описание на параметрите– Тяло на конструктора

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

Copyright © 2013 DAVID Holding Company

Конструктори

// триъгълник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) { // … }}

• Деклариране на конструктор– Един клас може да има повече

от един конструктор– Конструкторът може да бъде

презаписан, както обикновените методи

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

Copyright © 2013 DAVID Holding Company

Конструктори

// извикване на конструктор без параметър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);

• Използване на конструктори– Оператор „new”– Наименованието на

класа/конструктора– Списък от аргументи

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

Copyright © 2013 DAVID Holding Company

Конструктори

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; }}

• Навързване на конструктори– Понякога имаме няколко

конструктора с повтаряща се логика

– За да спестим повторението на код, можем да използваме навързване на конструктори

– Навързването на конструктори представлява извикване на един конструктор от друг

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

Copyright © 2013 DAVID Holding Company

Конструктори

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; }}

• Навързване на конструктори– Понякога имаме няколко

конструктора с повтаряща се логика

– За да спестим повторението на код, можем да използваме навързване на конструктори

– Навързването на конструктори представлява извикване на един конструктор от друг

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

Copyright © 2013 DAVID Holding Company

Конструктори - демо

// Демонстрация

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

Copyright © 2013 DAVID Holding Company

Деструктори

• „Човек и добре да живее, умира и друг се ражда.“ – Омуртаг– Приживе обектите могат да заемат ресурси, които .NET

Framework не може да управлява – наследство, което трябва да се освободи

• Какво е „деструктор”?– Деструкторът е метод, който се изпълнява при изчистването и

освобождаването на паметта заемана от обекта– Деструкторът не се извиква явно, а автоматично т.нар. “garbage

collector”– Деструкторът може да бъде само един за даден клас– Деструкторът няма параметри– Деструкторите не могат да бъдат презаписвани

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

Copyright © 2013 DAVID Holding Company

Деструктори

class Marriage{ // конструктор на брак Marriage(string husband, string wife) { Console.WriteLine( ”And they lived happily ever after…”); } // деструктор на брак ~Marriage() { Console.WriteLine( “Till death did them part!“); }}

• Деклариране на деструктор– Символ “~” (тилда)– Наименованието на

деструктора съвпада с наименованието на класа

– Празен списък от параметри– Тяло на деструктора

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

Copyright © 2013 DAVID Holding Company

Ами структурите?!

• Структурите имат особености/ограничения в сравнение с класовете– Структурите могат да декларират методи– Структурите могат да се конструират и без оператора “new”– Структурите не могат да декларират подразбиращ се

конструктор (без параметри)– Структурите могат да декларират конструктори– Структурите не могат да декларират деструктори

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

Copyright © 2013 DAVID Holding Company

Задачи за упражнение

• Създайте структура Point2D, която описва точка в двумерното пространство– Изберете подходящо вътрешно представяне на точката– Добавете конструктор с два параметъра – планарни координати

на точката (x, y)– Добавете конструктор с три параметъра – един от изброим

списък указващ координатната система и два за самите координати (планарни (x,y) или полярни (r, phi))

– Добавете метод, който връща планарните координати (x, y) на точката

– Добавете метод, който връща полярните координати (r, phi) на точката

– Добавете метод, който връща разстоянието до друга точка Point2D

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

Copyright © 2013 DAVID Holding Company

Задачи за упражнение

• Създайте клас Vector2D, който описва вектор в двумерното пространство– Изберете подходящо вътрешно представяне на вектора– Добавете конструктор с два параметъра – компоненти на

вектора в декартова координатна система (x, y)– Добавете конструктор с три параметъра – един от изброим

списък указващ координатната система и два за самите компоненти (планарни (x,y) или полярни (r, phi))

– Добавете методи за транслация и ротация на вектора– Добавете метод, който прибавя/изважда друг вектор– Добавете метод, който връща точка получена от преместването

на подадена точка с настоящия вектор

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

Copyright © 2013 DAVID Holding Company

Задачи за упражнение

• Създайте програма съдържаща класове за различни основни двумерни и тримерни геометрични фигури– Добавете подходящите конструктори– Добавете полета описващи характеристиките на съответните

фигури– Добавете методи за изчисляване на повърхнина и обем на тези,

които имат такива– Такива класове могат да бъдат:

• Point2D и Vector2D съответно за точка и вектор в двумерното пространство

• Parallelogram за успоредник, Ellipse за елипса• Point3D и Vector3D съответно за точка и вектор в тримерното

пространство• Cone за конус, Parallelepiped за паралелепипед, Pyramid за пирамида, Ellipsoid за елипсоид

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

Copyright © 2013 DAVID Holding Company

Задачи за упражнение

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

• Съдържа пореден номер, имена и списък от курсове• Декларира метод за записване на курс, подаден като параметър

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

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

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

Copyright © 2013 DAVID Holding Company

Въпроси?

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

Copyright © 2013 DAVID Holding Company

Благодаря!

• Валери Дачев– [email protected]– @vdachev– https://facebook.com/vdachev

• ДАВИД академия– [email protected]– http://acad.david.bg/– @david_academy– https://facebook.com/DavidAcademy