Курс по програмиране на C#
Занятие №8
Методи. Конструктори и деструктори

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

• Методи
–
–
–
–

К...
Съдържание 2/2
• Конструктори
–
–
–
–

Какво е „конструктор“?
Деклариране на конструктор
Използване на конструктори
Навърз...
Обектно-ориентирано програмиране
• Какво научихме за него?
– ООП е подход, който представя „света“ като множество от обект...
Обектно-ориентирано програмиране
• Какво можем да добавим?
– Поведение (програмен код)
• Класът дава възможното поведение ...
Методи
• Какво е „метод“? (преговор)
– Методът е член-функция за класа, в който е дефинирана
– Всички функции в езика C# с...
Методи
• Деклариране на метод
– (ново) Клас, в който методът е
деклариран
– Тип на данните на връщаната
стойност (или „voi...
Методи
• Достъпване на членпроменливи (полета)
– Когато методът се изпълнява в
контекста на обект, ключовата
дума „this“ м...
Методи
• Използване на членпроменливи (полета) на
същия обект
– Ако обръщението е еднозначно,
ключовата дума „this” може д...
Методи
• Използване на член-функции
(методи) на същия обект
– Когато методът се изпълнява в
контекста на обект, ключовата
...
Методи
• Използване на член-функции
(методи) на друг обект

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

– Методи н...
Методи - демо
// Демонстрация
Конструктори
• Какво е „конструктор“?
– Конструкторът е метод, който се изпълнява при създаването на
обект от съответния к...
Конструктори
• Деклариране на конструктор
– Не се упоменава връщан тип
данни
– Наименованието на
конструктора съвпада с
на...
Конструктори
• Деклариране на конструктор

// триъгълник
class Triangle
– Един клас може да има повече
{
от един конструкт...
Конструктори
• Използване на конструктори
– Оператор „new”
– Наименованието на
класа/конструктора
– Списък от аргументи

/...
Конструктори
• Навързване на конструктори
– Понякога имаме няколко
конструктора с повтаряща се
логика
– За да спестим повт...
Конструктори
• Навързване на конструктори
– Понякога имаме няколко
конструктора с повтаряща се
логика
– За да спестим повт...
Конструктори - демо
// Демонстрация
Деструктори
• „Човек и добре да живее, умира и друг се ражда.“ –
Омуртаг
– Приживе обектите могат да заемат ресурси, които...
Деструктори
• Деклариране на деструктор
– Символ “~” (тилда)
– Наименованието на
деструктора съвпада с
наименованието на к...
Ами структурите?!
• Структурите имат особености/ограничения в сравнение с
класовете
– Структурите могат да декларират мето...
Задачи за упражнение
• Създайте структура Point2D, която описва точка в
двумерното пространство
– Изберете подходящо вътре...
Задачи за упражнение
• Създайте клас Vector2D, който описва вектор в двумерното
пространство
– Изберете подходящо вътрешно...
Задачи за упражнение
• Създайте програма съдържаща класове за различни
основни двумерни и тримерни геометрични фигури
– До...
Задачи за упражнение
• Създайте програма за управление на софтуерна академия
–
–
–
–

Създайте клас Student, който описва ...
Въпроси?
Благодаря!
• Валери Дачев
– valery@david.bg
– @vdachev
– https://facebook.com/vdachev

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

acad@davi...
Upcoming SlideShare
Loading in …5
×

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

571 views

Published on

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

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
571
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Неуправлявани ресурси – прозорци, файлове, мрежови връзки, COM обекти и т.н.
  • Училищен курс по програмиране на C# (2013/2014), занятие №8

    1. 1. Курс по програмиране на C# Занятие №8 Методи. Конструктори и деструктори 2013
    2. 2. Съдържание 1/2 • Обектно-ориентирано програмиране – Какво научихме за него? – Какво можем да добавим? • Методи – – – – Какво е „метод“? Деклариране на метод Използване на членове на същия обект Използване на членове на друг обект
    3. 3. Съдържание 2/2 • Конструктори – – – – Какво е „конструктор“? Деклариране на конструктор Използване на конструктори Навързване на конструктори • Деструктори – Какво е „деструктор“? – Деклариране на деструктор • Ами структурите?!
    4. 4. Обектно-ориентирано програмиране • Какво научихме за него? – ООП е подход, който представя „света“ като множество от обекти организирани в класове – В .NET Framework всичко е обект! • … един вид…  – Организационна структура • Класът обединява множество от сходни обекти • Обектът е представител на класа, към който принадлежи – Състояние (данни) • Класът дава описание на данните характеризиращи състоянието на обектите принадлежащи към този клас (тип и наименование на данните) • Обектът има състояние определено от конкретните стойности за данните характерни за класа, към който принадлежи (стойности за данните)
    5. 5. Обектно-ориентирано програмиране • Какво можем да добавим? – Поведение (програмен код) • Класът дава възможното поведение на обектите принадлежащи към този клас • Обектът променя своето състояние и/или състоянието на други обекти в резултат на своето поведение – Създаване (инициализация) • Класът може да определи действията извършвани при създаването на обекти принадлежащи към този клас • Класът може да определи начините за създаването на обекти принадлежащи към този клас – Унищожаване (освобождаване на ресурси) • Класът може да определи действията извършвани при унищожаването на обекти принадлежащи към този клас
    6. 6. Методи • Какво е „метод“? (преговор) – Методът е член-функция за класа, в който е дефинирана – Всички функции в езика C# са всъщност методи – Функцията/методът е последователност от инструкции изпълняващи дадена задача • Методите в контекста на ООП – Методът е начин с програмен код да дефинираме поведение на обектите от класа, в който е дефиниран съответният метод – Методът е начин да изменим данните и респективно състоянието на обекта – Методите могат да се декларират и съответно изпълняват в контекста, както на обектите от даден клас, така и в контекста на класа като цяло
    7. 7. Методи • Деклариране на метод – (ново) Клас, в който методът е деклариран – Тип на данните на връщаната стойност (или „void” ако няма такава) – Наименование – Описание на параметрите – Тяло на метода • Презаписване на методи – Деклариране на методи с едно и също наименование, но с различна сигнатура // деклариран клас class Human { // … void SayHello() { Console.WriteLine(“Yo, nigga!”); } void SayHello(Human nigga) { Console.WriteLine(“Yo, {0}!”, nigga); } // … }
    8. 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. 9. Методи • Използване на членпроменливи (полета) на същия обект – Ако обръщението е еднозначно, ключовата дума „this” може да се пропусне class Person { // член-променливи (полета) string _firstName, _middleName, _lastName; // член-функция с резултат string GetFullName() { string fullName = string.Format(“{0} {1} {2}”, // достъпване на член-променливи _firstName, _middleName, _lastName); return fullName; } }
    10. 10. Методи • Използване на член-функции (методи) на същия обект – Когато методът се изпълнява в контекста на обект, ключовата дума „this“ може да се използва за достъп до неговите член-функции (методи) – Отново, ако обръщението е еднозначно, ключовата дума „this” може да се пропусне class Person { // … предишният ни код е някъде тук // член-функция извикваща друга void ShowFullName() { string fullName = this.GetFullName(); Console.Write(fullName); } }
    11. 11. Методи • Използване на член-функции (методи) на друг обект class Person { // … предишният ни код е някъде тук – Методи на друг обект се извикват с използването на променливата, в която той е съхранен // член-функция извикваща друга void Meet(Person thatPerson) { string thisName = this.GetFullName(); string thatName = thatPerson.GetFullName(); Console.Write( “♥ {0} ♥ {1} ♥”, thisName, thatName); } }
    12. 12. Методи - демо // Демонстрация
    13. 13. Конструктори • Какво е „конструктор“? – Конструкторът е метод, който се изпълнява при създаването на обект от съответния клас и служи за инициализация на обекта – Конструкторът не се извиква явно, а неявно при създаване на обект с оператора „new”, след заделяне на памет за него – Конструкторът може да има параметри – Конструкторът не може да връща резултат – Конструкторът може да бъде презаписван – Конструкторът може да извиква други конструктори – За класовете без изрично деклариран конструктор, се генерира автоматичен подразбиращ се конструктор (без параметри)
    14. 14. Конструктори • Деклариране на конструктор – Не се упоменава връщан тип данни – Наименованието на конструктора съвпада с наименованието на класа – Описание на параметрите – Тяло на конструктора // кръгов конус class CircularCone { // радиус на основата и височина double _radius, _height; // ъгъл между височината и оста double _angle; CircularCone(double radius, double height, double angle = 0) { // инициализация _radius = radius; _height = height; _angle = angle; } }
    15. 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. 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. 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. 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. 19. Конструктори - демо // Демонстрация
    20. 20. Деструктори • „Човек и добре да живее, умира и друг се ражда.“ – Омуртаг – Приживе обектите могат да заемат ресурси, които .NET Framework не може да управлява – наследство, което трябва да се освободи • Какво е „деструктор”? – Деструкторът е метод, който се изпълнява при изчистването и освобождаването на паметта заемана от обекта – Деструкторът не се извиква явно, а автоматично т.нар. “garbage collector” – Деструкторът може да бъде само един за даден клас – Деструкторът няма параметри – Деструкторите не могат да бъдат презаписвани
    21. 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. 22. Ами структурите?! • Структурите имат особености/ограничения в сравнение с класовете – Структурите могат да декларират методи – Структурите могат да се конструират и без оператора “new” – Структурите не могат да декларират подразбиращ се конструктор (без параметри) – Структурите могат да декларират конструктори – Структурите не могат да декларират деструктори
    23. 23. Задачи за упражнение • Създайте структура Point2D, която описва точка в двумерното пространство – Изберете подходящо вътрешно представяне на точката – Добавете конструктор с два параметъра – планарни координати на точката (x, y) – Добавете конструктор с три параметъра – един от изброим списък указващ координатната система и два за самите координати (планарни (x,y) или полярни (r, phi)) – Добавете метод, който връща планарните координати (x, y) на точката – Добавете метод, който връща полярните координати (r, phi) на точката – Добавете метод, който връща разстоянието до друга точка Point2D
    24. 24. Задачи за упражнение • Създайте клас Vector2D, който описва вектор в двумерното пространство – Изберете подходящо вътрешно представяне на вектора – Добавете конструктор с два параметъра – компоненти на вектора в декартова координатна система (x, y) – Добавете конструктор с три параметъра – един от изброим списък указващ координатната система и два за самите компоненти (планарни (x,y) или полярни (r, phi)) – Добавете методи за транслация и ротация на вектора – Добавете метод, който прибавя/изважда друг вектор – Добавете метод, който връща точка получена от преместването на подадена точка с настоящия вектор
    25. 25. Задачи за упражнение • Създайте програма съдържаща класове за различни основни двумерни и тримерни геометрични фигури – Добавете подходящите конструктори – Добавете полета описващи характеристиките на съответните фигури – Добавете методи за изчисляване на повърхнина и обем на тези, които имат такива – Такива класове могат да бъдат: • • • • Point2D и Vector2D съответно за точка и вектор в двумерното пространство Parallelogram за успоредник, Ellipse за елипса Point3D и Vector3D съответно за точка и вектор в тримерното пространство Cone за конус, Parallelepiped за паралелепипед, Pyramid за пирамида, Ellipsoid за елипсоид
    26. 26. Задачи за упражнение • Създайте програма за управление на софтуерна академия – – – – Създайте клас Student, който описва учащ Създайте клас Course, който описва курс Създайте клас Academy, който описва софтуерна академия Класът Student: • Съдържа пореден номер, имена и списък от курсове • Декларира метод за записване на курс, подаден като параметър – Класът Course: • Съдържа наименование, e-mail и списък от записани учащи • Декларира метод за записване на учащ, подаден като параметър – Класът Academy: • Съдържа наименование, списък от курсове и учащи • Декларира методи за добавяне на курс/учащ и записване
    27. 27. Въпроси?
    28. 28. Благодаря! • Валери Дачев – valery@david.bg – @vdachev – https://facebook.com/vdachev • ДАВИД академия – – – – acad@david.bg http://acad.david.bg/ @david_academy https://facebook.com/DavidAcademy

    ×