SlideShare une entreprise Scribd logo
1  sur  50
Курс по програмиране на
C#
Занятие №6

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

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

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

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

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

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

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

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

Animal centipede = new Animal();
Структури
• Какво е „структура“?
–
–
–
–

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

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

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

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

Тип на връщания резултат
Наименование
Списък от параметри
Тяло (блок от операции)
Методи
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?";
}
}
Методи
• Ключовата дума this служи за достъпване на
членовете на обекта, чийто метод се изпълнява
class Animal
{
public int Age;
public bool CheckIfOld()
{
return (this.Age >= 10);
}
}
Методи
• Членовете на текущия обект могат да бъдат
достъпвани и директно – с наименованията си
class Animal
{
public int Age;
public bool CheckIfOld()
{
return (Age >= 10);
}
}
Методи
• Достъпването чрез this гарантира еднозначност
на наименованието
class Animal
{
public int Age;
public bool CheckIfOld()
{
int Age = 3;
return (this.Age >= 10);
}
}
Конструктори
• Какво е „конструктор“?
– Член, който служи за инициализация
– Не се изпълнява явно, както останалите методи
– Изпълнява се след заделянето на памет с оператора
new
– Има параметри
– Няколко конструктора с различни параметри
– Един конструктор може да изпълнява друг
– Автоматично генериран конструктор без параметри
Конструктори
• Деклариране на конструктори
– Наименование на класа
– Списък от параметри
– Тяло (блок от операции)
class Dog
{
public string Name;
public int LegsCount;
public Dog(string name, int legsCount)
{
Name = name;
LegsCount = legsCount;
}
}
Конструктори
• Изпълняване на друг конструктор – с ключовата
дума 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;
}
}
Конструктори
• Използване на конструктори
– Операторът new
– Наименование на класа или структурата
– Списък от аргументи
Dog rex = new Dog("Rex");
Dog tripod = new Dog("Tripod", 3);
Статични членове
• Какво е „статичен“ член?
– Член, който не е обвързан с инстанция на класа
– Всеки от изброените видове членове може да бъде
статичен
– Маркират се с ключовата дума static
– Достъпват се чрез наименованието на класа и
оператора .
Статични членове
• Статични полета
– Променливи в рамките на самия клас, а не на негов
обект
– Полезни за споделяне на информация между
обектите
– Полезни за съхранение на данни, използвани от
статични методи
– Константните полета са статични
Статични членове
• Статични полета
class Animal
{
public static int AnimalCount = 0;
public Animal()
{
AnimalCount++;
}
}
// Достъпване на статично поле
Console.WriteLine(Animal.AnimalCount);
Статични членове
• Статични методи
– Не се изпълняват в контекста на конкретен обект
– Не може да се прилага ключовата дума this
– Не може да се борави пряко с нестатични членове на
класа
– Главната функция на всяка програма е статичен метод
Статични членове
• Статични методи
class Animal
{
public static int AnimalCount = 0;
public Animal()
{
AnimalCount++;
}
public static bool AreThereAnyAnimals()
{
return (AnimalCount > 0);
}
}
Статични членове
• Статични конструктори
– Нямат параметри
– Не повече от един за всеки клас
– Изпълняват се при първоначално зареждане на класа
в паметта
– Служат за инициализиране на статични полета
Статични членове
• Статични конструктори
class Animal
{
public static int AnimalCount;
static Animal()
{
AnimalCount = 0;
}
public Animal()
{
AnimalCount++;
}
}
Презаписване на оператори
• Какво е „презаписване“ (overloading) на
оператори?
– Позволява на стандарните оператори да се прилагат
върху данни, декларирани от програмиста
– По подразбиране повечето оператори не могат да
бъдат прилагани върху такива класове
Презаписване на оператори
• Деклариране на презаписани оператори
–
–
–
–
–
–
–
–

Сходно с декларирането на статичен метод
Ключовата дума static
Тип на връщаните данни
Ключовата дума operator
Оператор, който ще бъде презаписан
Списък от параметри
Тяло (блок от операции)
Възможно е един оператор да бъде презаписан
няколко пъти с различни параметри
Презаписване на оператори
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);
}
}
Презаписване на оператори
• Презаписване на превръщания между типове
–
–
–
–
–
–

Ключовата дума static
Една от ключовите думи implicit или explicit
Ключовата дума operator
Резултатен тип от превръщането
Параметър – начален тип на превъщането
Тяло (блок от операции)
Презаписване на оператори
• Презаписване на превръщания между типове
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;
}
Видимост
• Какво е „видимост“?
– Определя кои части на програмата имат достъп до
съответния тип данни или член
– Компилаторът следи за нарушаване на тези
органичения
– Полезно за предотвратяването на нежелани действия
с типа или члена
– Задава се с модификатори за достъп
Видимост
• Видимост на типове данни – модификаторът за
достъп се поставя в началото на декларацията
им
– Публични – public
– Вътрешни – internal

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

Публични – public
Защитени – protected
Частни – private
Вътрешни – internal
Защитени или вътрешни – protected internal

• Когато не е указан модификатор за
достъп, членът по подразбиране е частен
Капсулиране
• Какво е „капсулиране“?
– Един от основните принципи на ООП
– Предоставя се достъп единствено до
функционалността, която е проектиран да реализира
класът
– Ограничава се достъпът до данните на обектите
– Ограничава се достъпът до помощните методи, които
не са необходими на външния свят
Капсулиране
• Ползи от капсулирането
– Предотвратява нежелани намеси във вътрешната
реализация на обектите
– Опростява взаимодействието на външния свят с
обекта – видими са единствено членовете, които са
необходими за боравене с обекта
– Позволява промяна на вътрешната реализация на
обекта, без да се налагат промени в останалите части
на програмата
Капсулиране
• Конвенция за капсулиране
– Полетата на класовете са винаги частни
– Достъпът до полетата се извършва през конструктори,
методи, свойства или индексатори с необходимата
видимост
– Не се предоставят повече видими членове, отколкото
са необходими за боравене с обекта
Капсулиране
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;
}
Капсулиране
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);
}
}
Въпроси?
Благодаря!
• Александър Далемски
–
–
–
–

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/

Contenu connexe

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

Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13DAVID Academy
 
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#DAVID Academy
 
Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияКурс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияDAVID Academy
 
High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code IntroductionSvetlin Nakov
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality CodeSvetlin Nakov
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLDAVID Academy
 
Enterprise Content Management with Nuxeo EP 5.3.0 (in bulgarian)
Enterprise Content Management with Nuxeo EP 5.3.0 (in bulgarian)Enterprise Content Management with Nuxeo EP 5.3.0 (in bulgarian)
Enterprise Content Management with Nuxeo EP 5.3.0 (in bulgarian)Lubomir Chorbadjiev
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLDAVID Academy
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12DAVID Academy
 
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...DAVID Academy
 
JDK 1.5 New Features
JDK 1.5 New FeaturesJDK 1.5 New Features
JDK 1.5 New FeaturesSvetlin Nakov
 
Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1DAVID Academy
 
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииКурс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииDAVID Academy
 

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

Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11
 
Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13
 
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
 
Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияКурс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
 
High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code Introduction
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality Code
 
Въведение в Python
Въведение в PythonВъведение в Python
Въведение в Python
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
 
Enterprise Content Management with Nuxeo EP 5.3.0 (in bulgarian)
Enterprise Content Management with Nuxeo EP 5.3.0 (in bulgarian)Enterprise Content Management with Nuxeo EP 5.3.0 (in bulgarian)
Enterprise Content Management with Nuxeo EP 5.3.0 (in bulgarian)
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTML
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12
 
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
 
JDK 1.5 New Features
JDK 1.5 New FeaturesJDK 1.5 New Features
JDK 1.5 New Features
 
Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1
 
Writing tests in Go
Writing tests in GoWriting tests in Go
Writing tests in Go
 
C++ OpenFest 2015
C++ OpenFest 2015C++ OpenFest 2015
C++ OpenFest 2015
 
J-Unit тестове
J-Unit тестовеJ-Unit тестове
J-Unit тестове
 
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииКурс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
 

Plus de DAVID Academy

Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)DAVID Academy
 
Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSКурс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSDAVID Academy
 
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)DAVID Academy
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSDAVID Academy
 
Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3DAVID Academy
 
Курс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesКурс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesDAVID Academy
 
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkКурс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkDAVID Academy
 
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...DAVID Academy
 
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...DAVID Academy
 
Курс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеКурс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеDAVID Academy
 
Курс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - ПомагалоКурс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - ПомагалоDAVID Academy
 
Курс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - УпражненияКурс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - УпражненияDAVID Academy
 

Plus de DAVID Academy (15)

Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
 
Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSКурс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSS
 
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSS
 
Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTML
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - Помагало
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - Упражнения
 
Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3
 
Курс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesКурс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web Services
 
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkКурс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
 
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
 
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
 
Курс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеКурс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. Представяне
 
Курс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - ПомагалоКурс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - Помагало
 
Курс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - УпражненияКурс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - Упражнения
 

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

  • 1. Курс по програмиране на C# Занятие №6 Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост и капсулиране 2013
  • 4. Обектно-ориентирано програмиране • • • • • ООП е парадигма в програмирането Програмният код се разбива на части (обекти) Обектите се характеризират с данни и функции Обектите си взаимодействат Капсулиране, наследяване и полиморфизъм
  • 5. Кратка история на ООП • • • • Simula 67 – първи стъпки Smalltalk – чистият ООП език C++, Delphi, Objective-C Java, C#.NET, Python, Ruby
  • 6. Защо използваме ООП? • Улеснява разпределянето на разработката между екип от разработчици • Изолира промените в отделна част от програмата • Човешкият ум разсъждава модулно
  • 7. Класове • Какво е „клас“? – Категория от обекти – Описва характеристики и поведение – член-данни и член-функции – Референтен тип данни – Може да наследи друг клас
  • 8. Класове • Деклариране на класове – Ключова дума class – Наименование – съществително или фраза в Pascal case – Базов клас и имплементирани интерфейси (незадължително) – Блок с декларации на членове
  • 9. Класове class Animal { // Членове } class Dog : Animal, ITrainable { // Членове }
  • 10. Обекти • Какво е „обект“? – – – – Променлива с тип данни клас Нарича се още инстанция на класа Съдържа конкретни стойности на член-данните Може няколко променливи да сочат към един и същи обект в паметта
  • 11. Обекти • Създаване (инстанциране) на обекти – Оператор new – Наименование на класа – Списък от аргументи Animal beetle; beetle = new Animal(); Animal centipede = new Animal();
  • 12. Структури • Какво е „структура“? – – – – Нереферентен тип данни Член-данни и член-функции Задължително наследява System.ValueType Сравнява се по стойност
  • 13. Структури • Деклариране на структури – Ключова дума struct – Наименование – съществително или фраза в Pascal case – Блок с декларации на членове struct Book { // Членове }
  • 14. Полета • Какво е „поле“? – – – – – Член-данна Съхранява характеристика на обекта Променлива в рамките на обекта Тип данни и наименование Уникалност на наименованието
  • 15. Полета • Деклариране на полета – Подобно на декларирането на променлива – Тип данни – Наименование class Animal { public int Age; }
  • 16. Полета • Деклариране с инициализация class Dog { public int LegsCount = 4; } • При липса на инициализация – стойност по подразбиране на типа данни
  • 17. Полета • Полета само за четене class Universe { public readonly int Answer = 42; } • Стойност се присвоява само чрез инициализация или в конструктор
  • 18. Полета • Достъпване на полета на обект – с оператора . Animal cow = new Animal(); cow.Age = 5; Console.WriteLine(cow.Age);
  • 19. Методи • Какво е „метод“? – Член-функция – Описва поведение – Наименование, параметри и тип на връщания резултат – Всички функции в C# са методи – Повече от един метод с еднакви наименования но различни параметри
  • 20. Методи • Деклариране на методи – – – – Тип на връщания резултат Наименование Списък от параметри Тяло (блок от операции)
  • 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. Методи • Ключовата дума this служи за достъпване на членовете на обекта, чийто метод се изпълнява class Animal { public int Age; public bool CheckIfOld() { return (this.Age >= 10); } }
  • 23. Методи • Членовете на текущия обект могат да бъдат достъпвани и директно – с наименованията си class Animal { public int Age; public bool CheckIfOld() { return (Age >= 10); } }
  • 24. Методи • Достъпването чрез this гарантира еднозначност на наименованието class Animal { public int Age; public bool CheckIfOld() { int Age = 3; return (this.Age >= 10); } }
  • 25. Конструктори • Какво е „конструктор“? – Член, който служи за инициализация – Не се изпълнява явно, както останалите методи – Изпълнява се след заделянето на памет с оператора new – Има параметри – Няколко конструктора с различни параметри – Един конструктор може да изпълнява друг – Автоматично генериран конструктор без параметри
  • 26. Конструктори • Деклариране на конструктори – Наименование на класа – Списък от параметри – Тяло (блок от операции) class Dog { public string Name; public int LegsCount; public Dog(string name, int legsCount) { Name = name; LegsCount = legsCount; } }
  • 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. Конструктори • Използване на конструктори – Операторът new – Наименование на класа или структурата – Списък от аргументи Dog rex = new Dog("Rex"); Dog tripod = new Dog("Tripod", 3);
  • 29. Статични членове • Какво е „статичен“ член? – Член, който не е обвързан с инстанция на класа – Всеки от изброените видове членове може да бъде статичен – Маркират се с ключовата дума static – Достъпват се чрез наименованието на класа и оператора .
  • 30. Статични членове • Статични полета – Променливи в рамките на самия клас, а не на негов обект – Полезни за споделяне на информация между обектите – Полезни за съхранение на данни, използвани от статични методи – Константните полета са статични
  • 31. Статични членове • Статични полета class Animal { public static int AnimalCount = 0; public Animal() { AnimalCount++; } } // Достъпване на статично поле Console.WriteLine(Animal.AnimalCount);
  • 32. Статични членове • Статични методи – Не се изпълняват в контекста на конкретен обект – Не може да се прилага ключовата дума this – Не може да се борави пряко с нестатични членове на класа – Главната функция на всяка програма е статичен метод
  • 33. Статични членове • Статични методи class Animal { public static int AnimalCount = 0; public Animal() { AnimalCount++; } public static bool AreThereAnyAnimals() { return (AnimalCount > 0); } }
  • 34. Статични членове • Статични конструктори – Нямат параметри – Не повече от един за всеки клас – Изпълняват се при първоначално зареждане на класа в паметта – Служат за инициализиране на статични полета
  • 35. Статични членове • Статични конструктори class Animal { public static int AnimalCount; static Animal() { AnimalCount = 0; } public Animal() { AnimalCount++; } }
  • 36. Презаписване на оператори • Какво е „презаписване“ (overloading) на оператори? – Позволява на стандарните оператори да се прилагат върху данни, декларирани от програмиста – По подразбиране повечето оператори не могат да бъдат прилагани върху такива класове
  • 37. Презаписване на оператори • Деклариране на презаписани оператори – – – – – – – – Сходно с декларирането на статичен метод Ключовата дума static Тип на връщаните данни Ключовата дума operator Оператор, който ще бъде презаписан Списък от параметри Тяло (блок от операции) Възможно е един оператор да бъде презаписан няколко пъти с различни параметри
  • 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. Презаписване на оператори • Презаписване на превръщания между типове – – – – – – Ключовата дума static Една от ключовите думи implicit или explicit Ключовата дума operator Резултатен тип от превръщането Параметър – начален тип на превъщането Тяло (блок от операции)
  • 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. Видимост • Какво е „видимост“? – Определя кои части на програмата имат достъп до съответния тип данни или член – Компилаторът следи за нарушаване на тези органичения – Полезно за предотвратяването на нежелани действия с типа или члена – Задава се с модификатори за достъп
  • 42. Видимост • Видимост на типове данни – модификаторът за достъп се поставя в началото на декларацията им – Публични – public – Вътрешни – internal • Когато не е указан модификатор за достъп, типът данни по подразбиране е вътрешен
  • 43. Видимост • Видимост на членове – модификаторът за достъп се поставя в началото на декларацията им – – – – – Публични – public Защитени – protected Частни – private Вътрешни – internal Защитени или вътрешни – protected internal • Когато не е указан модификатор за достъп, членът по подразбиране е частен
  • 44. Капсулиране • Какво е „капсулиране“? – Един от основните принципи на ООП – Предоставя се достъп единствено до функционалността, която е проектиран да реализира класът – Ограничава се достъпът до данните на обектите – Ограничава се достъпът до помощните методи, които не са необходими на външния свят
  • 45. Капсулиране • Ползи от капсулирането – Предотвратява нежелани намеси във вътрешната реализация на обектите – Опростява взаимодействието на външния свят с обекта – видими са единствено членовете, които са необходими за боравене с обекта – Позволява промяна на вътрешната реализация на обекта, без да се налагат промени в останалите части на програмата
  • 46. Капсулиране • Конвенция за капсулиране – Полетата на класовете са винаги частни – Достъпът до полетата се извършва през конструктори, методи, свойства или индексатори с необходимата видимост – Не се предоставят повече видими членове, отколкото са необходими за боравене с обекта
  • 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. Капсулиране 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); } }
  • 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/