1 / 50

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

Курс по програмиране на C#. Занятие № 6 Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост и капсулиране. Съдържание 1/2. Обектно-ориентирано програмиране Класове Обекти Структури Полета Методи Конструктори Статични членове Презаписване на оператори.

lavey
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Курс по програмиране на C# Занятие №6Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост и капсулиране

  2. Съдържание 1/2 • Обектно-ориентирано програмиране • Класове • Обекти • Структури • Полета • Методи • Конструктори • Статични членове • Презаписване на оператори

  3. Съдържание 2/2 • Видимост • Капсулиране

  4. Обектно-ориентирано програмиране • ООП е парадигма в програмирането • Програмният код се разбива на части (обекти) • Обектите се характеризират с данни и функции • Обектите си взаимодействат • Капсулиране, наследяване и полиморфизъм

  5. Кратка история на ООП • Simula 67 – първи стъпки • Smalltalk – чистият ООП език • C++, Delphi, Objective-C • Java, C#.NET, Python, Ruby

  6. Защо използваме ООП? • Улеснява разпределянето на разработката между екип от разработчици • Изолира промените в отделна част от програмата • Човешкият ум разсъждава модулно

  7. Класове • Какво е „клас“? • Категория от обекти • Описва характеристики и поведение – член-данни и член-функции • Референтен тип данни • Може да наследи друг клас

  8. Класове • Деклариране на класове • Ключова дума class • Наименование – съществително или фраза в Pascal case • Базов клас и имплементирани интерфейси (незадължително) • Блок с декларации на членове

  9. Класове classAnimal{// Членове} classDog : Animal, ITrainable{// Членове}

  10. Обекти • Какво е „обект“? • Променлива с тип данни клас • Нарича се още инстанция на класа • Съдържа конкретни стойности на член-данните • Може няколко променливи да сочат към един и същи обект в паметта

  11. Обекти • Създаване (инстанциране) на обекти • Оператор new • Наименование на класа • Списък от аргументи Animalbeetle;beetle = newAnimal(); Animal centipede = newAnimal();

  12. Структури • Какво е „структура“? • Нереферентен тип данни • Член-данни и член-функции • Задължително наследява System.ValueType • Сравнява се по стойност

  13. Структури • Деклариране на структури • Ключова дума struct • Наименование – съществително или фраза в Pascal case • Блок с декларации на членове structBook{// Членове}

  14. Полета • Какво е „поле“? • Член-данна • Съхранява характеристика на обекта • Променлива в рамките на обекта • Тип данни и наименование • Уникалност на наименованието

  15. Полета • Деклариране на полета • Подобно на декларирането на променлива • Тип данни • Наименование classAnimal{publicint Age;}

  16. Полета • Деклариране с инициализация classDog{publicint LegsCount = 4;} • При липса на инициализация – стойност по подразбиране на типа данни

  17. Полета • Полета само за четене classUniverse{publicreadonlyint Answer = 42;} • Стойност се присвоява само чрез инициализация или в конструктор

  18. Полета • Достъпване на полета на обект – с оператора . Animal cow = newAnimal();cow.Age = 5;Console.WriteLine(cow.Age);

  19. Методи • Какво е „метод“? • Член-функция • Описва поведение • Наименование, параметри и тип на връщания резултат • Всички функции в C# са методи • Повече от един метод с еднакви наименования но различни параметри

  20. Методи • Деклариране на методи • Тип на връщания резултат • Наименование • Списък от параметри • Тяло (блок от операции)

  21. Методи class Dog{publicvoid Bark() {Console.WriteLine("Woof woof!"); }publicvoid Bite(string someone) {Console.WriteLine("I bit {0} and I liked it.", someone); }publicstring AskForDirections() {return"Woof?"; }}

  22. Методи • Ключовата дума thisслужи за достъпване на членовете на обекта, чийто метод се изпълнява classAnimal{publicint Age;publicbool CheckIfOld() {return (this.Age >= 10); }}

  23. Методи • Членовете на текущия обект могат да бъдат достъпвани и директно – с наименованията си classAnimal{publicint Age;publicbool CheckIfOld() {return (Age >= 10); }}

  24. Методи • Достъпването чрез this гарантира еднозначност на наименованието classAnimal{publicint Age;publicbool CheckIfOld() {int Age = 3;return (this.Age >= 10); }}

  25. Конструктори • Какво е „конструктор“? • Член, който служи за инициализация • Не се изпълнява явно, както останалите методи • Изпълнява се след заделянето на памет с оператора new • Има параметри • Няколко конструктора с различни параметри • Един конструктор може да изпълнява друг • Автоматично генериран конструктор без параметри

  26. Конструктори • Деклариране на конструктори • Наимнование на класа • Списък от параметри • Тяло (блок от операции) classDog{publicstring Name;publicint LegsCount;public Dog(string name, int legsCount) { Name = name; LegsCount = legsCount; }}

  27. Конструктори • Изпълняване на друг конструктор – с ключовата дума this и списък от аргументи преди тялото classDog{publicstring Name;publicint LegsCount;public Dog(string name) : this(name, 4) { }public Dog(string name, int legsCount) { Name = name; LegsCount = legsCount; }}

  28. Конструктори • Използване на конструктори • Операторът new • Наимнование на класа или структурата • Списък от аргументи Dog rex = newDog("Rex"); Dog tripod = newDog("Tripod", 3);

  29. Статични членове • Какво е „статичен“ член? • Член, който не е обвързан с инстанция на класа • Всеки от изброените видове членове може да бъде статичен • Маркират се с ключовата дума static • Достъпват се чрез наименованието на класа и оператора .

  30. Статични членове • Статични полета • Променливи в рамките на самия клас, а не на негов обект • Полезни за споделяне на информация между обектите • Полезни за съхранение на данни, използвани от статични методи • Константните полета са статични

  31. Статични членове • Статични полета classAnimal{publicstaticint AnimalCount = 0;public Animal() { AnimalCount++; }} // Достъпване на статично полеConsole.WriteLine(Animal.AnimalCount);

  32. Статични членове • Статични методи • Не се изпълняват в контекста на конкретен обект • Не може да се прилага ключовата дума this • Не може да се борави пряко с нестатични членове на класа • Главната функция на всяка програма е статичен метод

  33. Статични членове • Статични методи classAnimal{publicstaticint AnimalCount = 0;public Animal() { AnimalCount++; }publicstaticbool AreThereAnyAnimals() {return (AnimalCount > 0); }}

  34. Статични членове • Статични конструктори • Нямат параметри • Не повече от един за всеки клас • Изпълняват се при първоначално зареждане на класа в паметта • Служат за инициализиране на статични полета

  35. Статични членове • Статични конструктори classAnimal{publicstaticint AnimalCount;static Animal() { AnimalCount = 0; }public Animal() { AnimalCount++; }}

  36. Презаписване на оператори • Какво е „презаписване“ (overloading) на оператори? • Позволява на стандарните оператори да се прилагат върху данни, декларирани от програмиста • По подразбиране повечето оператори не могат да бъдат прилагани върху такива класове

  37. Презаписване на оператори • Деклариране на презаписани оператори • Сходно с декларирането на статичен метод • Ключовата дума static • Тип на връщаните данни • Ключовата дума operator • Оператор, който ще бъде презаписан • Списък от параметри • Тяло (блок от операции) • Възможно е един оператор да бъде презаписан няколко пъти с различни параметри

  38. Презаписване на оператори classRational{publicintNumerator;publicint Denominator;public Rational(intnumerator, int denominator) {Numerator = numerator; Denominator = denominator; }publicstaticRationaloperator +(Rational number1, int number2) {returnnewRational(number1.Numerator * number2, number1.Denominator); }publicstaticRationaloperator +(Rational number1, Rational number2) {intsumNumerator = number1.Numerator * number2.Denominator+ number2.Numerator * number1.Denominator;int sumDenominator = number1.Denominator * number2.Denominator;returnnewRational(sumNumerator, sumDenominator); }}

  39. Презаписване на оператори • Презаписване на превръщания между типове • Ключовата дума static • Една от ключовите думи implicit или explicit • Ключовата дума operator • Резултатен тип от превръщането • Параметър – начален тип на превъщането • Тяло (блок от операции)

  40. Презаписване на оператори • Презаписване на превръщания между типове publicstaticimplicitoperatordouble(Rational number){return (double)number.Numerator / (double)number.Denominator;} publicstaticexplicitoperatorint(Rational number){returnnumber.Numerator / number.Denominator;}

  41. Видимост • Какво е „видимост“? • Определя кои части на програмата имат достъп до съответния тип данни или член • Компилаторът следи за нарушаване на тези органичения • Полезно за предотвратяването на нежелани действия с типа или члена • Задава се с модификатори за достъп

  42. Видимост • Видимост на типове данни – модификаторът за достъп се поставя в началото на декларацията им • Публични – public • Вътрешни – internal • Когато не е указан модификатор за достъп, типът данни по подразбиране е вътрешен

  43. Видимост • Видимост на членове – модификаторът за достъп се поставя в началото на декларацията им • Публични – public • Защитени – protected • Частни – private • Вътрешни – internal • Защитени или вътрешни – protected internal • Когато не е указан модификатор за достъп, членът по подразбиране е частен

  44. Капсулиране • Какво е „капсулиране“? • Един от основните принципи на ООП • Предоставя се достъп единствено до функционалността, която е проектиран да реализира класът • Ограничава се достъпът до данните на обектите • Ограничава се достъпът до помощните методи, които не са необходими на външния свят

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

  46. Капсулиране • Конвенция за капсулиране • Полетата на класовете са винаги частни • Достъпът до полетата се извършва през конструктори, методи, свойства или индексатори с необходимата видимост • Не се предоставят повече видими членове, отколкото са необходими за боравене с обекта

  47. Капсулиране publicclassDog{privatereadonlystring _name;privatereadonlyint _age;privatereadonlyint _legsCount;public Dog(string name, int age) : this(name, age, 4) { }public Dog(string name, int age, int legsCount) { _name = name; _age = age; _legsCount = legsCount; }publicstring GetName() {return _name; }

  48. Капсулиране publicint GetAge() {return _age; }publicint GetLegsCount() {return _legsCount; }publicvoid Bark() {Console.WriteLine("{0} barks: Woof woof!", _name); }publicvoid Lick(string someone) {Console.WriteLine("{0} licks {1}'s face. Yuck!", _name, someone); }}

  49. Въпроси?

  50. Благодаря! • Александър Далемски • sasho@david.bg • musashi.bg@gmail.com • Skype: musasho • https://www.facebook.com/adalemski • ДАВИД академия • acad@david.bg • http://acad.david.bg/ • @david_academy • https://www.facebook.com/groups/david.academy/

More Related