Курс по програмиране на
C#
Занятие №6

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

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

ООП е парадигма в програмирането
Програмният код се разбива на части (обекти)
...
Кратка история на ООП
•
•
•
•

Simula 67 – първи стъпки
Smalltalk – чистият ООП език
C++, Delphi, Objective-C
Java, C#.NET...
Защо използваме ООП?
• Улеснява разпределянето на разработката между
екип от разработчици
• Изолира промените в отделна ча...
Класове
• Какво е „клас“?
– Категория от обекти
– Описва характеристики и поведение – член-данни и
член-функции
– Референт...
Класове
• Деклариране на класове
– Ключова дума class
– Наименование – съществително или фраза в Pascal
case
– Базов клас ...
Класове
class Animal
{
// Членове
}

class Dog : Animal, ITrainable
{
// Членове

}
Обекти
• Какво е „обект“?
–
–
–
–

Променлива с тип данни клас
Нарича се още инстанция на класа
Съдържа конкретни стойност...
Обекти
• Създаване (инстанциране) на обекти
– Оператор new
– Наименование на класа
– Списък от аргументи
Animal beetle;
be...
Структури
• Какво е „структура“?
–
–
–
–

Нереферентен тип данни
Член-данни и член-функции
Задължително наследява System.V...
Структури
• Деклариране на структури
– Ключова дума struct
– Наименование – съществително или фраза в Pascal
case
– Блок с...
Полета
• Какво е „поле“?
–
–
–
–
–

Член-данна
Съхранява характеристика на обекта
Променлива в рамките на обекта
Тип данни...
Полета
• Деклариране на полета
– Подобно на декларирането на променлива
– Тип данни
– Наименование
class Animal
{
public i...
Полета
• Деклариране с инициализация
class Dog
{
public int LegsCount = 4;
}

• При липса на инициализация – стойност по
п...
Полета
• Полета само за четене
class Universe
{
public readonly int Answer = 42;
}

• Стойност се присвоява само чрез
иниц...
Полета
• Достъпване на полета на обект – с оператора .
Animal cow = new Animal();
cow.Age = 5;
Console.WriteLine(cow.Age);
Методи
• Какво е „метод“?
– Член-функция
– Описва поведение
– Наименование, параметри и тип на връщания
резултат
– Всички ...
Методи
• Деклариране на методи
–
–
–
–

Тип на връщания резултат
Наименование
Списък от параметри
Тяло (блок от операции)
Методи
class Dog
{
public void Bark()
{
Console.WriteLine("Woof woof!");
}
public void Bite(string someone)
{
Console.Writ...
Методи
• Ключовата дума this служи за достъпване на
членовете на обекта, чийто метод се изпълнява
class Animal
{
public in...
Методи
• Членовете на текущия обект могат да бъдат
достъпвани и директно – с наименованията си
class Animal
{
public int A...
Методи
• Достъпването чрез this гарантира еднозначност
на наименованието
class Animal
{
public int Age;
public bool CheckI...
Конструктори
• Какво е „конструктор“?
– Член, който служи за инициализация
– Не се изпълнява явно, както останалите методи...
Конструктори
• Деклариране на конструктори
– Наименование на класа
– Списък от параметри
– Тяло (блок от операции)
class D...
Конструктори
• Изпълняване на друг конструктор – с ключовата
дума this и списък от аргументи преди тялото
class Dog
{
publ...
Конструктори
• Използване на конструктори
– Операторът new
– Наименование на класа или структурата
– Списък от аргументи
D...
Статични членове
• Какво е „статичен“ член?
– Член, който не е обвързан с инстанция на класа
– Всеки от изброените видове ...
Статични членове
• Статични полета
– Променливи в рамките на самия клас, а не на негов
обект
– Полезни за споделяне на инф...
Статични членове
• Статични полета
class Animal
{
public static int AnimalCount = 0;
public Animal()
{
AnimalCount++;
}
}
...
Статични членове
• Статични методи
– Не се изпълняват в контекста на конкретен обект
– Не може да се прилага ключовата дум...
Статични членове
• Статични методи
class Animal
{
public static int AnimalCount = 0;
public Animal()
{
AnimalCount++;
}
pu...
Статични членове
• Статични конструктори
– Нямат параметри
– Не повече от един за всеки клас
– Изпълняват се при първонача...
Статични членове
• Статични конструктори
class Animal
{
public static int AnimalCount;
static Animal()
{
AnimalCount = 0;
...
Презаписване на оператори
• Какво е „презаписване“ (overloading) на
оператори?
– Позволява на стандарните оператори да се ...
Презаписване на оператори
• Деклариране на презаписани оператори
–
–
–
–
–
–
–
–

Сходно с декларирането на статичен метод...
Презаписване на оператори
class Rational
{
public int Numerator;
public int Denominator;
public Rational(int numerator, in...
Презаписване на оператори
• Презаписване на превръщания между типове
–
–
–
–
–
–

Ключовата дума static
Една от ключовите ...
Презаписване на оператори
• Презаписване на превръщания между типове
public static implicit operator double(Rational numbe...
Видимост
• Какво е „видимост“?
– Определя кои части на програмата имат достъп до
съответния тип данни или член
– Компилато...
Видимост
• Видимост на типове данни – модификаторът за
достъп се поставя в началото на декларацията
им
– Публични – public...
Видимост
• Видимост на членове – модификаторът за достъп
се поставя в началото на декларацията им
–
–
–
–
–

Публични – pu...
Капсулиране
• Какво е „капсулиране“?
– Един от основните принципи на ООП
– Предоставя се достъп единствено до
функционално...
Капсулиране
• Ползи от капсулирането
– Предотвратява нежелани намеси във вътрешната
реализация на обектите
– Опростява вза...
Капсулиране
• Конвенция за капсулиране
– Полетата на класовете са винаги частни
– Достъпът до полетата се извършва през ко...
Капсулиране
public class Dog
{
private readonly string _name;
private readonly int _age;
private readonly int _legsCount;
...
Капсулиране
public int GetAge()
{
return _age;
}
public int GetLegsCount()
{
return _legsCount;
}
public void Bark()
{
Con...
Въпроси?
Благодаря!
• Александър Далемски
–
–
–
–

sasho@david.bg
musashi.bg@gmail.com
Skype: musasho
https://www.facebook.com/adal...
Upcoming SlideShare
Loading in …5
×

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

551 views

Published on

Занятие №6 на курса по програмиране на C# 2013 провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- Обектно-ориентирано програмиране
- Класове и обекти
- Членове
- Видимост и капсулиране

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
551
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Курс по програмиране на C# Занятие №6 Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост и капсулиране 2013
  2. 2. Съдържание 1/2 • • • • • • • • • Обектно-ориентирано програмиране Класове Обекти Структури Полета Методи Конструктори Статични членове Презаписване на оператори
  3. 3. Съдържание 2/2 • Видимост • Капсулиране
  4. 4. Обектно-ориентирано програмиране • • • • • ООП е парадигма в програмирането Програмният код се разбива на части (обекти) Обектите се характеризират с данни и функции Обектите си взаимодействат Капсулиране, наследяване и полиморфизъм
  5. 5. Кратка история на ООП • • • • Simula 67 – първи стъпки Smalltalk – чистият ООП език C++, Delphi, Objective-C Java, C#.NET, Python, Ruby
  6. 6. Защо използваме ООП? • Улеснява разпределянето на разработката между екип от разработчици • Изолира промените в отделна част от програмата • Човешкият ум разсъждава модулно
  7. 7. Класове • Какво е „клас“? – Категория от обекти – Описва характеристики и поведение – член-данни и член-функции – Референтен тип данни – Може да наследи друг клас
  8. 8. Класове • Деклариране на класове – Ключова дума class – Наименование – съществително или фраза в Pascal case – Базов клас и имплементирани интерфейси (незадължително) – Блок с декларации на членове
  9. 9. Класове class Animal { // Членове } class Dog : Animal, ITrainable { // Членове }
  10. 10. Обекти • Какво е „обект“? – – – – Променлива с тип данни клас Нарича се още инстанция на класа Съдържа конкретни стойности на член-данните Може няколко променливи да сочат към един и същи обект в паметта
  11. 11. Обекти • Създаване (инстанциране) на обекти – Оператор new – Наименование на класа – Списък от аргументи Animal beetle; beetle = new Animal(); Animal centipede = new Animal();
  12. 12. Структури • Какво е „структура“? – – – – Нереферентен тип данни Член-данни и член-функции Задължително наследява System.ValueType Сравнява се по стойност
  13. 13. Структури • Деклариране на структури – Ключова дума struct – Наименование – съществително или фраза в Pascal case – Блок с декларации на членове struct Book { // Членове }
  14. 14. Полета • Какво е „поле“? – – – – – Член-данна Съхранява характеристика на обекта Променлива в рамките на обекта Тип данни и наименование Уникалност на наименованието
  15. 15. Полета • Деклариране на полета – Подобно на декларирането на променлива – Тип данни – Наименование class Animal { public int Age; }
  16. 16. Полета • Деклариране с инициализация class Dog { public int LegsCount = 4; } • При липса на инициализация – стойност по подразбиране на типа данни
  17. 17. Полета • Полета само за четене class Universe { public readonly int Answer = 42; } • Стойност се присвоява само чрез инициализация или в конструктор
  18. 18. Полета • Достъпване на полета на обект – с оператора . Animal cow = new Animal(); cow.Age = 5; Console.WriteLine(cow.Age);
  19. 19. Методи • Какво е „метод“? – Член-функция – Описва поведение – Наименование, параметри и тип на връщания резултат – Всички функции в C# са методи – Повече от един метод с еднакви наименования но различни параметри
  20. 20. Методи • Деклариране на методи – – – – Тип на връщания резултат Наименование Списък от параметри Тяло (блок от операции)
  21. 21. Методи class Dog { public void Bark() { Console.WriteLine("Woof woof!"); } public void Bite(string someone) { Console.WriteLine("I bit {0} and I liked it.", someone); } public string AskForDirections() { return "Woof?"; } }
  22. 22. Методи • Ключовата дума this служи за достъпване на членовете на обекта, чийто метод се изпълнява class Animal { public int Age; public bool CheckIfOld() { return (this.Age >= 10); } }
  23. 23. Методи • Членовете на текущия обект могат да бъдат достъпвани и директно – с наименованията си class Animal { public int Age; public bool CheckIfOld() { return (Age >= 10); } }
  24. 24. Методи • Достъпването чрез this гарантира еднозначност на наименованието class Animal { public int Age; public bool CheckIfOld() { int Age = 3; return (this.Age >= 10); } }
  25. 25. Конструктори • Какво е „конструктор“? – Член, който служи за инициализация – Не се изпълнява явно, както останалите методи – Изпълнява се след заделянето на памет с оператора new – Има параметри – Няколко конструктора с различни параметри – Един конструктор може да изпълнява друг – Автоматично генериран конструктор без параметри
  26. 26. Конструктори • Деклариране на конструктори – Наименование на класа – Списък от параметри – Тяло (блок от операции) class Dog { public string Name; public int LegsCount; public Dog(string name, int legsCount) { Name = name; LegsCount = legsCount; } }
  27. 27. Конструктори • Изпълняване на друг конструктор – с ключовата дума this и списък от аргументи преди тялото class Dog { public string Name; public int LegsCount; public Dog(string name) : this(name, 4) { } public Dog(string name, int legsCount) { Name = name; LegsCount = legsCount; } }
  28. 28. Конструктори • Използване на конструктори – Операторът new – Наименование на класа или структурата – Списък от аргументи Dog rex = new Dog("Rex"); Dog tripod = new Dog("Tripod", 3);
  29. 29. Статични членове • Какво е „статичен“ член? – Член, който не е обвързан с инстанция на класа – Всеки от изброените видове членове може да бъде статичен – Маркират се с ключовата дума static – Достъпват се чрез наименованието на класа и оператора .
  30. 30. Статични членове • Статични полета – Променливи в рамките на самия клас, а не на негов обект – Полезни за споделяне на информация между обектите – Полезни за съхранение на данни, използвани от статични методи – Константните полета са статични
  31. 31. Статични членове • Статични полета class Animal { public static int AnimalCount = 0; public Animal() { AnimalCount++; } } // Достъпване на статично поле Console.WriteLine(Animal.AnimalCount);
  32. 32. Статични членове • Статични методи – Не се изпълняват в контекста на конкретен обект – Не може да се прилага ключовата дума this – Не може да се борави пряко с нестатични членове на класа – Главната функция на всяка програма е статичен метод
  33. 33. Статични членове • Статични методи class Animal { public static int AnimalCount = 0; public Animal() { AnimalCount++; } public static bool AreThereAnyAnimals() { return (AnimalCount > 0); } }
  34. 34. Статични членове • Статични конструктори – Нямат параметри – Не повече от един за всеки клас – Изпълняват се при първоначално зареждане на класа в паметта – Служат за инициализиране на статични полета
  35. 35. Статични членове • Статични конструктори class Animal { public static int AnimalCount; static Animal() { AnimalCount = 0; } public Animal() { AnimalCount++; } }
  36. 36. Презаписване на оператори • Какво е „презаписване“ (overloading) на оператори? – Позволява на стандарните оператори да се прилагат върху данни, декларирани от програмиста – По подразбиране повечето оператори не могат да бъдат прилагани върху такива класове
  37. 37. Презаписване на оператори • Деклариране на презаписани оператори – – – – – – – – Сходно с декларирането на статичен метод Ключовата дума static Тип на връщаните данни Ключовата дума operator Оператор, който ще бъде презаписан Списък от параметри Тяло (блок от операции) Възможно е един оператор да бъде презаписан няколко пъти с различни параметри
  38. 38. Презаписване на оператори class Rational { public int Numerator; public int Denominator; public Rational(int numerator, int denominator) { Numerator = numerator; Denominator = denominator; } public static Rational operator +(Rational number1, int number2) { return new Rational(number1.Numerator * number2, number1.Denominator); } public static Rational operator +(Rational number1, Rational number2) { int sumNumerator = number1.Numerator * number2.Denominator + number2.Numerator * number1.Denominator; int sumDenominator = number1.Denominator * number2.Denominator; return new Rational(sumNumerator, sumDenominator); } }
  39. 39. Презаписване на оператори • Презаписване на превръщания между типове – – – – – – Ключовата дума static Една от ключовите думи implicit или explicit Ключовата дума operator Резултатен тип от превръщането Параметър – начален тип на превъщането Тяло (блок от операции)
  40. 40. Презаписване на оператори • Презаписване на превръщания между типове public static implicit operator double(Rational number) { return (double)number.Numerator / (double)number.Denominator; } public static explicit operator int(Rational number) { return number.Numerator / number.Denominator; }
  41. 41. Видимост • Какво е „видимост“? – Определя кои части на програмата имат достъп до съответния тип данни или член – Компилаторът следи за нарушаване на тези органичения – Полезно за предотвратяването на нежелани действия с типа или члена – Задава се с модификатори за достъп
  42. 42. Видимост • Видимост на типове данни – модификаторът за достъп се поставя в началото на декларацията им – Публични – public – Вътрешни – internal • Когато не е указан модификатор за достъп, типът данни по подразбиране е вътрешен
  43. 43. Видимост • Видимост на членове – модификаторът за достъп се поставя в началото на декларацията им – – – – – Публични – public Защитени – protected Частни – private Вътрешни – internal Защитени или вътрешни – protected internal • Когато не е указан модификатор за достъп, членът по подразбиране е частен
  44. 44. Капсулиране • Какво е „капсулиране“? – Един от основните принципи на ООП – Предоставя се достъп единствено до функционалността, която е проектиран да реализира класът – Ограничава се достъпът до данните на обектите – Ограничава се достъпът до помощните методи, които не са необходими на външния свят
  45. 45. Капсулиране • Ползи от капсулирането – Предотвратява нежелани намеси във вътрешната реализация на обектите – Опростява взаимодействието на външния свят с обекта – видими са единствено членовете, които са необходими за боравене с обекта – Позволява промяна на вътрешната реализация на обекта, без да се налагат промени в останалите части на програмата
  46. 46. Капсулиране • Конвенция за капсулиране – Полетата на класовете са винаги частни – Достъпът до полетата се извършва през конструктори, методи, свойства или индексатори с необходимата видимост – Не се предоставят повече видими членове, отколкото са необходими за боравене с обекта
  47. 47. Капсулиране public class Dog { private readonly string _name; private readonly int _age; private readonly int _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; } public string GetName() { return _name; }
  48. 48. Капсулиране public int GetAge() { return _age; } public int GetLegsCount() { return _legsCount; } public void Bark() { Console.WriteLine("{0} barks: Woof woof!", _name); } public void Lick(string someone) { Console.WriteLine("{0} licks {1}'s face. Yuck!", _name, someone); } }
  49. 49. Въпроси?
  50. 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/

×