Your SlideShare is downloading. ×
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

197
views

Published on

Училищен курс по програмиране на C# (2013/2014) …

Училищен курс по програмиране на 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
197
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Неуправлявани ресурси – прозорци, файлове, мрежови връзки, COM обекти и т.н.
  • Transcript

    • 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: • Съдържа наименование, списък от курсове и учащи • Декларира методи за добавяне на курс/учащ и записване
    • 27. Въпроси?
    • 28. Благодаря! • Валери Дачев – valery@david.bg – @vdachev – https://facebook.com/vdachev • ДАВИД академия – – – – acad@david.bg http://acad.david.bg/ @david_academy https://facebook.com/DavidAcademy