Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C#
description
Transcript of Курс по програмиране на C#
![Page 1: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/1.jpg)
2013Copyright © 2013 DAVID Holding Company
Курс по програмиране на C#
Занятие №6Обектно-ориентирано
програмиране.Класове и обекти. Членове.
Видимост и капсулиране
![Page 2: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/2.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Съдържание 1/2• Обектно-ориентирано програмиране• Класове• Обекти• Структури• Полета• Методи• Конструктори• Статични членове• Презаписване на оператори
![Page 3: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/3.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Съдържание 2/2• Видимост• Капсулиране
![Page 4: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/4.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Обектно-ориентирано програмиране• ООП е парадигма в програмирането• Програмният код се разбива на части
(обекти)• Обектите се характеризират с данни и
функции• Обектите си взаимодействат• Капсулиране, наследяване и
полиморфизъм
![Page 5: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/5.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Кратка история на ООП• Simula 67 – първи стъпки• Smalltalk – чистият ООП език• C++, Delphi, Objective-C• Java, C#.NET, Python, Ruby
![Page 6: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/6.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Защо използваме ООП?• Улеснява разпределянето на
разработката между екип от разработчици
• Изолира промените в отделна част от програмата
• Човешкият ум разсъждава модулно
![Page 7: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/7.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Класове• Какво е „клас“?– Категория от обекти– Описва характеристики и поведение – член-
данни и член-функции– Референтен тип данни– Може да наследи друг клас
![Page 8: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/8.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Класове• Деклариране на класове– Ключова дума class– Наименование – съществително или фраза в
Pascal case– Базов клас и имплементирани интерфейси
(незадължително)– Блок с декларации на членове
![Page 9: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/9.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Класовеclass Animal{
// Членове}
class Dog : Animal, ITrainable{
// Членове}
![Page 10: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/10.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Обекти• Какво е „обект“?– Променлива с тип данни клас– Нарича се още инстанция на класа– Съдържа конкретни стойности на член-
данните– Може няколко променливи да сочат към един
и същи обект в паметта
![Page 11: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/11.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Обекти• Създаване (инстанциране) на обекти– Оператор new– Наименование на класа– Списък от аргументи
Animal beetle;beetle = new Animal();
Animal centipede = new Animal();
![Page 12: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/12.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Структури• Какво е „структура“?– Нереферентен тип данни– Член-данни и член-функции– Задължително наследява System.ValueType– Сравнява се по стойност
![Page 13: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/13.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Структури• Деклариране на структури– Ключова дума struct– Наименование – съществително или фраза в
Pascal case– Блок с декларации на членове
struct Book{
// Членове}
![Page 14: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/14.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Полета• Какво е „поле“?– Член-данна– Съхранява характеристика на обекта– Променлива в рамките на обекта– Тип данни и наименование– Уникалност на наименованието
![Page 15: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/15.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Полета• Деклариране на полета– Подобно на декларирането на променлива– Тип данни– Наименование
class Animal{
public int Age;}
![Page 16: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/16.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Полета• Деклариране с инициализация
class Dog{
public int LegsCount = 4;}
• При липса на инициализация – стойност по подразбиране на типа данни
![Page 17: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/17.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Полета• Полета само за четене
class Universe{
public readonly int Answer = 42;}
• Стойност се присвоява само чрез инициализация или в конструктор
![Page 18: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/18.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Полета• Достъпване на полета на обект – с
оператора .
Animal cow = new Animal();cow.Age = 5;Console.WriteLine(cow.Age);
![Page 19: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/19.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Методи• Какво е „метод“?– Член-функция– Описва поведение– Наименование, параметри и тип на връщания
резултат– Всички функции в C# са методи– Повече от един метод с еднакви наименования
но различни параметри
![Page 20: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/20.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Методи• Деклариране на методи– Тип на връщания резултат– Наименование– Списък от параметри– Тяло (блок от операции)
![Page 21: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/21.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Методи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?";}
}
![Page 22: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/22.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Методи• Ключовата дума this служи за достъпване
на членовете на обекта, чийто метод се изпълнява
class Animal{
public int Age;
public bool CheckIfOld(){
return (this.Age >= 10);}
}
![Page 23: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/23.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Методи• Членовете на текущия обект могат да
бъдат достъпвани и директно – с наименованията си
class Animal{
public int Age;
public bool CheckIfOld(){
return (Age >= 10);}
}
![Page 24: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/24.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Методи• Достъпването чрез this гарантира
еднозначност на наименованието
class Animal{
public int Age;
public bool CheckIfOld(){
int Age = 3;return (this.Age >= 10);
}}
![Page 25: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/25.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Конструктори• Какво е „конструктор“?– Член, който служи за инициализация– Не се изпълнява явно, както останалите
методи– Изпълнява се след заделянето на памет с
оператора new– Има параметри– Няколко конструктора с различни параметри– Един конструктор може да изпълнява друг– Автоматично генериран конструктор без
параметри
![Page 26: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/26.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Конструктори• Деклариране на конструктори– Наимнование на класа– Списък от параметри– Тяло (блок от операции)
class Dog{
public string Name;public int LegsCount;
public Dog(string name, int legsCount){
Name = name;LegsCount = legsCount;
}}
![Page 27: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/27.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Конструктори• Изпълняване на друг конструктор – с
ключовата дума 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;
}}
![Page 28: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/28.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Конструктори• Използване на конструктори– Операторът new– Наимнование на класа или структурата– Списък от аргументи
Dog rex = new Dog("Rex");
Dog tripod = new Dog("Tripod", 3);
![Page 29: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/29.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Статични членове• Какво е „статичен“ член?– Член, който не е обвързан с инстанция на
класа– Всеки от изброените видове членове може да
бъде статичен– Маркират се с ключовата дума static– Достъпват се чрез наименованието на класа и
оператора .
![Page 30: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/30.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Статични членове• Статични полета– Променливи в рамките на самия клас, а не на
негов обект– Полезни за споделяне на информация между
обектите– Полезни за съхранение на данни, използвани
от статични методи– Константните полета са статични
![Page 31: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/31.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Статични членове• Статични полета
class Animal{
public static int AnimalCount = 0;
public Animal(){
AnimalCount++;}
}
// Достъпване на статично полеConsole.WriteLine(Animal.AnimalCount);
![Page 32: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/32.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Статични членове• Статични методи– Не се изпълняват в контекста на конкретен
обект– Не може да се прилага ключовата дума this– Не може да се борави пряко с нестатични
членове на класа– Главната функция на всяка програма е
статичен метод
![Page 33: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/33.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Статични членове• Статични методиclass Animal{
public static int AnimalCount = 0;
public Animal(){
AnimalCount++;}
public static bool AreThereAnyAnimals(){
return (AnimalCount > 0);}
}
![Page 34: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/34.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Статични членове• Статични конструктори– Нямат параметри– Не повече от един за всеки клас– Изпълняват се при първоначално зареждане
на класа в паметта– Служат за инициализиране на статични
полета
![Page 35: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/35.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Статични членове• Статични конструкториclass Animal{
public static int AnimalCount;
static Animal(){
AnimalCount = 0;}
public Animal(){
AnimalCount++;}
}
![Page 36: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/36.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Презаписване на оператори• Какво е „презаписване“ (overloading) на
оператори?– Позволява на стандарните оператори да се
прилагат върху данни, декларирани от програмиста
– По подразбиране повечето оператори не могат да бъдат прилагани върху такива класове
![Page 37: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/37.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Презаписване на оператори• Деклариране на презаписани оператори– Сходно с декларирането на статичен метод– Ключовата дума static– Тип на връщаните данни– Ключовата дума operator– Оператор, който ще бъде презаписан– Списък от параметри– Тяло (блок от операции)– Възможно е един оператор да бъде
презаписан няколко пъти с различни параметри
![Page 38: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/38.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Презаписване на оператори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);
}}
![Page 39: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/39.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Презаписване на оператори• Презаписване на превръщания между
типове– Ключовата дума static– Една от ключовите думи implicit или explicit
– Ключовата дума operator– Резултатен тип от превръщането– Параметър – начален тип на превъщането– Тяло (блок от операции)
![Page 40: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/40.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Презаписване на оператори• Презаписване на превръщания между
типове
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;}
![Page 41: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/41.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Видимост• Какво е „видимост“?– Определя кои части на програмата имат
достъп до съответния тип данни или член– Компилаторът следи за нарушаване на тези
органичения– Полезно за предотвратяването на нежелани
действия с типа или члена– Задава се с модификатори за достъп
![Page 42: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/42.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Видимост• Видимост на типове данни –
модификаторът за достъп се поставя в началото на декларацията им– Публични – public– Вътрешни – internal
• Когато не е указан модификатор за достъп, типът данни по подразбиране е вътрешен
![Page 43: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/43.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Видимост• Видимост на членове – модификаторът за
достъп се поставя в началото на декларацията им– Публични – public– Защитени – protected– Частни – private– Вътрешни – internal– Защитени или вътрешни – protected internal
• Когато не е указан модификатор за достъп, членът по подразбиране е частен
![Page 44: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/44.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Капсулиране• Какво е „капсулиране“?– Един от основните принципи на ООП– Предоставя се достъп единствено до
функционалността, която е проектиран да реализира класът
– Ограничава се достъпът до данните на обектите
– Ограничава се достъпът до помощните методи, които не са необходими на външния свят
![Page 45: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/45.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Капсулиране• Ползи от капсулирането– Предотвратява нежелани намеси във
вътрешната реализация на обектите– Опростява взаимодействието на външния свят
с обекта – видими са единствено членовете, които са необходими за боравене с обекта
– Позволява промяна на вътрешната реализация на обекта, без да се налагат промени в останалите части на програмата
![Page 46: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/46.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Капсулиране• Конвенция за капсулиране– Полетата на класовете са винаги частни– Достъпът до полетата се извършва през
конструктори, методи, свойства или индексатори с необходимата видимост
– Не се предоставят повече видими членове, отколкото са необходими за боравене с обекта
![Page 47: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/47.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Капсулиране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;}
![Page 48: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/48.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Капсулиране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);
}}
![Page 49: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/49.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Въпроси?
![Page 50: Курс по програмиране на C#](https://reader035.fdocuments.net/reader035/viewer/2022062520/56816413550346895dd5c237/html5/thumbnails/50.jpg)
Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company
Благодаря!• Александър Далемски– [email protected]– [email protected]– Skype: musasho– https://www.facebook.com/adalemski
• ДАВИД академия– [email protected]– http://acad.david.bg/– @david_academy– https://www.facebook.com/groups/david.academy/