Курс по програмиране на c# 2013 - 6. Обектно-ориентирано...

50
2013 Copyright © 2013 DAVID Holding Company Курс по програмиране на C# Занятие №6 Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост и капсулиране

Upload: david-academy

Post on 18-Nov-2014

360 views

Category:

Education


5 download

DESCRIPTION

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

TRANSCRIPT

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

2013Copyright © 2013 DAVID Holding Company

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

Занятие №6Обектно-ориентирано

програмиране.Класове и обекти. Членове.

Видимост и капсулиране

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Съдържание 1/2

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

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Съдържание 2/2

• Видимост• Капсулиране

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

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

(обекти)• Обектите се характеризират с данни и

функции• Обектите си взаимодействат• Капсулиране, наследяване и

полиморфизъм

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Кратка история на ООП

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

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Защо използваме ООП?

• Улеснява разпределянето на разработката между екип от разработчици

• Изолира промените в отделна част от програмата

• Човешкият ум разсъждава модулно

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Класове

• Какво е „клас“?– Категория от обекти– Описва характеристики и поведение – член-

данни и член-функции– Референтен тип данни– Може да наследи друг клас

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Класове

• Деклариране на класове– Ключова дума class– Наименование – съществително или фраза в

Pascal case– Базов клас и имплементирани интерфейси

(незадължително)– Блок с декларации на членове

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Класове

class Animal{

// Членове}

class Dog : Animal, ITrainable{

// Членове

}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Обекти

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

данните– Може няколко променливи да сочат към един

и същи обект в паметта

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Обекти

• Създаване (инстанциране) на обекти– Оператор new– Наименование на класа– Списък от аргументи

Animal beetle;beetle = new Animal();

Animal centipede = new Animal();

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Структури

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

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Структури

• Деклариране на структури– Ключова дума struct– Наименование – съществително или фраза в

Pascal case– Блок с декларации на членове

struct Book{

// Членове}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Полета

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

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Полета

• Деклариране на полета– Подобно на декларирането на променлива– Тип данни– Наименование

class Animal{

public int Age;}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Полета

• Деклариране с инициализация

class Dog{

public int LegsCount = 4;}

• При липса на инициализация – стойност по подразбиране на типа данни

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Полета

• Полета само за четене

class Universe{

public readonly int Answer = 42;}

• Стойност се присвоява само чрез инициализация или в конструктор

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Полета

• Достъпване на полета на обект – с оператора .

Animal cow = new Animal();cow.Age = 5;Console.WriteLine(cow.Age);

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Методи

• Какво е „метод“?– Член-функция– Описва поведение– Наименование, параметри и тип на връщания

резултат– Всички функции в C# са методи– Повече от един метод с еднакви наименования

но различни параметри

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Методи

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

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

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# 2013 - 6. Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост

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# 2013 - 6. Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Методи

• Членовете на текущия обект могат да бъдат достъпвани и директно – с наименованията си

class Animal{

public int Age;

public bool CheckIfOld(){

return (Age >= 10);}

}

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

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# 2013 - 6. Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Конструктори

• Какво е „конструктор“?– Член, който служи за инициализация– Не се изпълнява явно, както останалите

методи– Изпълнява се след заделянето на памет с

оператора new– Има параметри– Няколко конструктора с различни параметри– Един конструктор може да изпълнява друг– Автоматично генериран конструктор без

параметри

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

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# 2013 - 6. Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост

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# 2013 - 6. Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Конструктори

• Използване на конструктори– Операторът new– Наименование на класа или структурата– Списък от аргументи

Dog rex = new Dog("Rex");

Dog tripod = new Dog("Tripod", 3);

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Статични членове

• Какво е „статичен“ член?– Член, който не е обвързан с инстанция на

класа– Всеки от изброените видове членове може да

бъде статичен– Маркират се с ключовата дума static– Достъпват се чрез наименованието на класа и

оператора .

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Статични членове

• Статични полета– Променливи в рамките на самия клас, а не на

негов обект– Полезни за споделяне на информация между

обектите– Полезни за съхранение на данни, използвани

от статични методи– Константните полета са статични

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

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# 2013 - 6. Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Статични членове

• Статични методи– Не се изпълняват в контекста на конкретен

обект– Не може да се прилага ключовата дума this– Не може да се борави пряко с нестатични

членове на класа– Главната функция на всяка програма е

статичен метод

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

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# 2013 - 6. Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Статични членове

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

на класа в паметта– Служат за инициализиране на статични

полета

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

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# 2013 - 6. Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Презаписване на оператори

• Какво е „презаписване“ (overloading) на оператори?– Позволява на стандарните оператори да се

прилагат върху данни, декларирани от програмиста

– По подразбиране повечето оператори не могат да бъдат прилагани върху такива класове

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Презаписване на оператори

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

презаписан няколко пъти с различни параметри

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

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# 2013 - 6. Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Презаписване на оператори

• Презаписване на превръщания между типове– Ключовата дума static– Една от ключовите думи implicit или explicit

– Ключовата дума operator– Резултатен тип от превръщането– Параметър – начален тип на превъщането– Тяло (блок от операции)

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

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# 2013 - 6. Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Видимост

• Какво е „видимост“?– Определя кои части на програмата имат

достъп до съответния тип данни или член– Компилаторът следи за нарушаване на тези

органичения– Полезно за предотвратяването на нежелани

действия с типа или члена– Задава се с модификатори за достъп

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Видимост

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

• Когато не е указан модификатор за достъп, типът данни по подразбиране е вътрешен

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Видимост

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

• Когато не е указан модификатор за достъп, членът по подразбиране е частен

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Капсулиране

• Какво е „капсулиране“?– Един от основните принципи на ООП– Предоставя се достъп единствено до

функционалността, която е проектиран да реализира класът

– Ограничава се достъпът до данните на обектите

– Ограничава се достъпът до помощните методи, които не са необходими на външния свят

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Капсулиране

• Ползи от капсулирането– Предотвратява нежелани намеси във

вътрешната реализация на обектите– Опростява взаимодействието на външния свят

с обекта – видими са единствено членовете, които са необходими за боравене с обекта

– Позволява промяна на вътрешната реализация на обекта, без да се налагат промени в останалите части на програмата

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Капсулиране

• Конвенция за капсулиране– Полетата на класовете са винаги частни– Достъпът до полетата се извършва през

конструктори, методи, свойства или индексатори с необходимата видимост

– Не се предоставят повече видими членове, отколкото са необходими за боравене с обекта

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

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# 2013 - 6. Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост

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# 2013 - 6. Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Въпроси?

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

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/