Клас (class) в ООП наричаме описание (спецификация) на даден клас обекти от реалността. Класът представлява шаблон, който описва видовете състояния и поведението на конкретните обекти (екземплярите), които биват създавани от този клас (шаблон).
Обект (object) наричаме екземпляр създаден по дефиницията (описанието) на даден клас. Когато един обект е създаден по описанието, което един клас дефинира, казваме, че обектът е от тип "името на този клас".
Например, ако имаме клас Dog, описващ някакви характеристики на куче от реалния свят, казваме, че обектите, които са създадени по описанието на този клас (например кученцата "Шаро" и "Рекс") са от тип класa Dog. Това означение е същото, както когато казваме, че низът "some string" е от класа String. Разликата е, че обектът от тип Dog е екземпляр от клас, който не е част от библиотеката с класове на .NET Framework, а е дефиниран от самите нас.
Какво съдържа един клас?
Всеки клас съдържа дефиниция на това какви данни трябва да се съдържат в един обект, за да се опише състоянието му. Обектът (конкретния екземпляр от този клас) съдържа самите данни. Тези данни дефинират състоянието му.
Освен състоянието, в класа също се описва и поведението на обектите. Поведението се изразява в действията, които могат да бъдат извършвани от обектите. Средството на ООП, чрез което можем да описваме поведението на обектите от даден клас, е декларирането на методи в класа.
Елементи на класа
Сега ще изброим основните елементи на един клас, а по-късно ще разгледаме подробно всеки един от тях.
Основните елементи на класовете в C# са следните:
- Декларация на класа (class declaration) – това е редът, на който декларираме името на класа. Например:
- Тяло на клас – по подобие на методите, класовете също имат част, която следва декларацията им, оградена с фигурни скоби – "{" и "}" между които се намира съдържанието на класа. Тя се нарича тяло на класа. Елементите на класа, които се описват в тялото му са изброени в следващите точки.
public class Dog
{
// ... The body of the class comes here ...
}
|
- Конструктор (constructor) – това е псевдометод, който се използва за създаване на нови обекти. Така изглежда един конструктор:
public Dog()
{
// ... Some code ...
}
|
- Полета (fields) – те са променливи, декларирани в класа (някъде в литературата се срещат като член-променливи). В тях се пазят данни, които отразяват състоянието на обекта и са нужни за работата на методите на класа. Стойността, която се пази в полетата, отразява конкретното състояние на дадения обект, но съществуват и такива полета, наречени статични, които са общи за всички обекти.
// Field definition
private string name;
|
- Свойства (properties) – така наричаме характеристиките на даден клас. Обикновено стойността на тези характеристики се пази в полета. Подобно на полетата, свойствата могат да бъдат притежавани само от конкретен обект или да са споделени между всички обекти от тип даден клас.
- Методи (methods) – от главата "Методи", знаем, че методите представляват именувани блокове програмен код. Те извършват някакви действия и чрез тях реализират поведението на обектите от този клас. В методите се изпълняват алгоритмите и се обработват данните на обекта.
Ето как изглежда един клас, който сме дефинирали сами и който притежава елементите, които описахме току-що:
// Class declaration
public class Dog
{ // Opening brace of the class body
// Field declaration
private string name;
// Constructor declaration
public Dog()
{
this.name = "Balkan";
}
// Another constructor declaration
public Dog(string name)
{
this.name = name;
}
// Property declaration
public string Name
{
get { return name; }
set { name = value; }
}
// Method declaration
public void Bark()
{
Console.WriteLine("{0} said: Wow-wow!", name);
}
} // Closing brace of the class body
|
За момента няма да обясняваме в по-големи детайли изложения код, тъй като подробна информация ще бъде дадена при обяснението как се декларира всеки един от елементите на класа.
Използване на класове и обекти
В главата "Създаване и използване на обекти" видяхме подробно как се създават нови обекти от даден клас и как могат да се използват. Сега накратко ще си припомним как ставаше това.
Как да използваме дефиниран от нас клас?
За да можем да използваме някой клас, първо трябва да създадем обект от него. За целта използваме ключовата дума new в комбинация с някой от конструкторите на класа. Това ще създаде обект от дадения клас (тип).
За да можем да манипулираме новосъздадения обект, ще трябва да го присвоим на променлива от типа на неговия клас. По този начин в тази променлива ще бъде запазена връзка (референция) към него.
Чрез променливата, използвайки точкова нотация, можем да извикваме методите, свойствата на обекта, както и да достъпваме полетата (член-променливите) и свойствата му.
Пример – кучешка среща
Нека вземем примера от предходната секция на тази глава, където дефинирахме класа Dog, който описва куче, и добавим метод Main() към него. В него ще онагледим казаното току-що:
static void Main()
{
string firstDogName = null;
Console.WriteLine("Write first dog name: ");
firstDogName = Console.ReadLine();
// Using a constructor to create a dog with specified name
Dog firstDog = new Dog(firstDogName);
// Using a constructor to create a dog wit a default name
Dog secondDog = new Dog();
Console.WriteLine("Write second dog name: ");
string secondDogName = Console.ReadLine();
// Using property to set the name of the dog
secondDog.Name = secondDogName;
// Creating a dog with a default name
Dog thirdDog = new Dog();
Dog[] dogs = new Dog[] { firstDog, secondDog, thirdDog };
foreach (Dog dog in dogs)
{
dog.Bark();
}
}
|
Съответно изходът от изпълнението ще бъде следният:
Сподели с приятели: |