• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класове и обекти. Членове. Видимост и капсулиране
 

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

on

  • 195 views

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

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

Statistics

Views

Total Views
195
Views on SlideShare
195
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • Курс по програмиране на 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/