CodeGym /Kurslar /C# SELF /Sinif və obyekt anlayışı

Sinif və obyekt anlayışı

C# SELF
Səviyyə , Dərs
Mövcuddur

1. Giriş

Yəqin artıq eşitmisən, sinif – bu bir şablondur, obyekt isə onun nümunəsidir.
Amma gəlin sinif və obyektləri bir az daha dərindən araşdıraq!

Təsəvvür elə ki, sən avtomobil zavodunda mühəndis-konstruktorusan. Hər maşını əl ilə yığmaq əvəzinə, sən bir çertyoj yaradırsan — universal təlimat, hansı ki, bir tipli bir çox maşın yığmaq olar. Bu çertyojda göstərilir ki, maşında mühərrik, təkərlər, kuzov, rəng olmalıdır və hansı funksiyaları yerinə yetirir.

Proqramlaşdırmada bu çertyoja sinif deyilir.

İndi isə təsəvvür elə ki, bu çertyoja əsasən zavod bir partiya maşın buraxdı. Hər biri realdır, yolda gedir, öz nömrəsi, rəngi və hətta fərdi ayarları var. Amma hamısı eyni çertyoja əsasən yığılıb.

Bu real maşınlar proqramlaşdırmada obyekt (və ya sinif nümunəsi) adlanır.

Yəni, yadında saxla:

  • Sinif — bu çertyoj, şablon, sxem kimidir. O təsvir edir, hansı datalar nədə ola bilər (məsələn, marka, rəng, qapı sayı) və edə bilər (məsələn, sürmək, əyləc vermək, siqnal vermək). Sinif — sadəcə təsvir, özü yaddaşda çox yer tutmur və "canlı" bir şey deyil.
  • Obyekt — bu, sinif çertyojuna əsasən yığılmış konkret "maşındır". Bu, proqramında real, "canlı" bir varlıqdır, yaddaşda yer tutur, öz unikal dataları var (öz nömrəsi, rəngi) və sinifdə təsvir olunan hərəkətləri edə bilir.

Bir az abstrakt səsləndi? Narahat olma, indi hər şeyi aydınlaşdıracağıq.

2. Sinif nədir?

Sinif — bu, istifadəçi tərəfindən yaradılan data tipidir, hansı ki, bu tip obyektlərin necə görünəcəyini təsvir edir: hansı xüsusiyyətləri (vəziyyət/properties/fields) və hansı hərəkətləri (davranış/metodlar/funksiyalar) var.

Sinif müəyyən edir:

  • Field-lər (dəyişənlər) — obyektin içində saxlanılan datalar.
  • Metodlar (funksiyalar) — obyektin edə biləcəyi hərəkətlər.
  • Properties — dataya çıxış üçün xüsusi metodlar.
  • Hadisələr (events) — bildiriş mexanizmləri (bunu sonra danışacağıq).
  • Konstruktorlar — obyekt yaratmaq üçün xüsusi metodlar.

public class Person
{
    // Field-lər (datalar)
    public string Name;
    public int Age;

    // Metod (hərəkət)
    public void SayHello()
    {
        Console.WriteLine($"Salam! Mənim adım {Name}, mənim {Age} yaşım var.");
    }
}

Bu nümunədə biz Person sinifini elan etdik. Onun iki field-i var (NameAge) və bir SayHello() metodu var. Sadə sinif üçün lazım olan hər şey budur.

3. Obyekt nədir?

Obyekt — bu, sinifin nümunəsidir, yəni "çertyoja" (sinifə) əsasən yaddaşda yaradılmış konkret varlıqdır.

Sən Person tipində dəyişən yaradanda, sən obyekt əldə edirsən — hər field üçün unikal dəyərlərlə. Sadəcə insan yox, məsələn, adı Conni olan, 12 yaşı olan insan. Və o, bizimlə salamlaşanda (SayHello() metodu çağırılır), o, bizə özü haqqında məlumat "deyir".


// Person sinifindən obyekt yaradırıq
Person person1 = new Person();
person1.Name = "Alisa";
person1.Age = 28;
person1.SayHello(); // => Salam! Mənim adım Alisa, mənim 28 yaşım var.

// Başqa bir "insan" yaradırıq
Person person2 = new Person();
person2.Name = "Bob";
person2.Age = 32;
person2.SayHello(); // => Salam! Mənim adım Bob, mənim 32 yaşım var.

Hər obyekt — sadəcə bir kopiya deyil: bu, öz dataları ilə müstəqil bir varlıqdır (bizim nümunədə — adlar və yaş).

4. Sinif və obyektin əsas fərqi

Əsas fərq:

  • Sinif — "çertyoj", təlimat, data tipi.
  • Obyekt — bu tipin konkret nümayəndəsi; plana əsasən yığılmış real "ev"; çertyoja əsasən istehsal olunmuş "maşın".

Bir sinifdən istədiyin qədər obyekt yarada bilərsən. Məsələn, səndə Person sinifi varsa, proqramda milyonlarla "insan" yarada bilərsən.

Niyə bu rahat və vacibdir?

Gəlin təsəvvür edək ki, proqramda siniflər yoxdur. Əgər bizdə tələbə siyahısı olsaydı, ad, yaş, qiymət və digər dataları hər parametr üçün ayrı massivdə saxlamaq lazım olardı:

string[] studentNames = { "Sergey", "Grisha", "Masha" };
int[] studentAges = { 20, 19, 21 };

// Əlavə property əlavə etmək lazım olsa, daha bir massiv yaranacaq.
// Bir neçə adamın yerini dəyişmək tam bir kabusa çevrilir!

Siniflərdən istifadə edəndə, datalar müxtəlif massivlərdə dağılmır, məntiqli şəkildə qruplaşır:

public class Student
{
    public string Name;
    public int Age;
}

Student[] students = new Student[3];
students[0] = new Student { Name = "Sergey", Age = 20 };
students[1] = new Student { Name = "Grisha", Age = 19 };
students[2] = new Student { Name = "Masha", Age = 21 };

Daha başadüşülən və rahat! Üstəlik, hər tələbəyə indi metodlar əlavə edə bilərsən (məsələn, "salamlaşmaq" və ya "orta qiyməti hesablamaq").

Şəkil: sinif və obyektin əlaqəsi

+------------------+          +----------------+
|   class Person   |=========>|  person1:      | 
| (çertyoj/tip)    |          |  Name = "Alisa"|
|                  |         /|  Age = 28      |
+------------------+        / +----------------+
                          /
+------------------------/----------------------+
                        /
                  +----------------+
                  |  person2:      |
                  |  Name = "Bob"  |
                  |  Age = 32      |
                  +----------------+

5. Siniflər və obyektlər real həyatda harada istifadə olunur?

Siniflər və obyektlər — C#-da istənilən tətbiqin əsasını təşkil edir. Ətrafında .NET-də gördüyün hər şey: pəncərələr, düymələr, formalar, massivlər, kolleksiyalar, database bağlantıları, loglar — bunlar müəyyən siniflərə əsasən yaradılmış obyektlərdir.

Nümunələr:

  • Button sinifi — ekranda düymənin necə görünməli olduğunu göstərən təlimatdır. Hər dəfə yeni düymə yaradırsansa — bu, sinifin obyektidir.
  • Stream sinifi (input/output sistemindən): sən fayllarla işləyən obyekt əldə edirsən.
  • Gələcəkdə yaradacağın User sinifi — istifadəçi məlumatlarını saxlamaq üçün yenə həmin şablondur.

Adlar, modifikatorlar və konvensiyalar haqqında qısa

  • Siniflər üçün adlar adətən böyük hərflə yazılır, məsələn Person, Order, Product.
  • Dəyişənlər üçün — kiçik hərflə, məsələn person, user1, orderList.
  • Əksər hallarda sinif public olur — yəni layihənin hər yerində əlçatan olur.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION