Mənim bloqum

Class Nədir?

"Class" obyekt yönümlü proqramlaşdırmanın təməl daşlarından biridir. Class obyektləri təmsil etmək üçün istifadə olunan şablondur. Obyekt yönümlü proqramlaşdırmada Class-lar real dünya obyektlərini modelləşdirmək və bu obyektlər arasında əlaqələri müəyyən etmək üçün istifadə olunur.


Obyekt Modelləşdirmə

Ötən məqalədə Obyektin nə olması barədə təfəruatları ilə danışmışdıq. Class mövzusuna da azca toxunduq. İndi isə müvzuya daha geniş şəkildə nəzər yetirək. OOP-ni dəstəkləyən hər hansı proqramlaşdırma dilində obyekt yaratmaq üçün ilk olaraq onu modelləmək lazıdır. Modelləşdirmə nədir? - Modelləşdirmə, əvvəlcədən təyin edilmiş şablon deməkdir. Məsələn bir maşın dizayn etdiyimizi düşününün. Gələcəkdə istifadəyə veriləcək olan avtomabil modeli, ilkin mərhələdə hazırladığımız maket əsasında qurulur. Obyekt də həmçinin. Obyekt yaratmaq üçün onun maketinə, yəni modelə, class-a ehtiyacımız var. Class kodlarımızı yazmağımız üçün bir ortamdır. Hansı ki, içərisində field, function və digər elementlər yer alır. Bu class-ı işə salmaq üçünsə obyektini yaratmaq və çağırmaq kifayətdir.

image

Class necə yaradılır?

"Class" açar sözünün köməkliyi ilə class yaradaraq bu şəkildə "custom type" yaratmış olduq. Yəni biz aşağıda "N" tipi yaratdıq. "N" əvəzinə "Book", "Car", "Person" və s. kimi adlandırmalardan istifadə etmiş olsa idik o zaman "N"-i "Book" və ya "Person" tipi ifadələri ilə əvəz etmiş olacaqdıq. Nəticə olaraq class-ın bir tip, daha dəqiq desək referans tip yaratdığını deyə bilərik. Aşağıdakı class-dan yaradacağımız obyektlər də N tipində olacaq

                        
                                                                                                                                                                               
class N
{

}
                                                     
                                                     
                                                     
                                                                             
                                                                            

Class-ı çağırıb istifadə etmək

Aşağıdakı Car class-ı nümunəsinə nəzər yetirək. Sadə Console app-də Car class-ını içəsində field və funksiyalar təyin edərək yaratdıq. Daha sonra "Main" metodunda onun obyektini yaradıb çağırmasa idik bu class-ı istifadə etməmiş olacaqdıq. Dolayısı ilə proqramın Car class-ının varlığından xəbəri olmayacaqdı. Aşağıdakı kodları öz komputerinizdə istifadə edib işə salsanız nə demək istədiyimi anlayacqsınız. Interface, Abstract class, Record, Struct kimi anlayışların da əsasında class dayanır. Sadaladığım mövzuların hər birinin nə olduğuna növbəti məqalələrdə aydınlıq gətirəcəyik, ancaq, bu mövzulara keçməzdən öncə class-ın nə olduğunu bilmək lazımdır.

                        
                                                                                                                                
public class Car
{
    public string Color;
    public string Marka;
    public string Model;
    public double Price;
    public int Stock;

    public string CountDis(byte discount)
    {
        double totalPrice = Price * (discount / 100);
        Stock--;

        return $"{Model} model avtomobilin {discount} % endirim tətbiq olunaraq hesablanmış qiyməti {totalPrice} AZN-dir. Hazırda {Stock} ədəd möbcuddur";
    }
}


namespace Blogs.Blog_1
{
    public class Progam
    {
        public static void Main(string[] args)
        {
            Car car = new();
            car.Marka = "BMW";
            car.Color = "Black";
            car.Model = "M5";
            car.Price = 34.000;

            byte discount = 2;

           Console.WriteLine(car.CountDis(discount));

        }
    }
}
                                                     
                                                     
                                                     
                                                                             
                                                                            

Class harada təyin edilir ?

Class-lar 3 yerdə təyin edilə bilər. 1. Namespace içərisində 2. Namespace xaricində 3. Class içərisində(Nested type)


Bəs "Namespace" nədir?

C# proqramlaşdırma dilində namespace konsepti, kodunuzu düzgün qruplaşdırmaq üçün istifadə edilən bir elementdir. Namespace-lər, kodun qlobal ad məkanını təyin edir və kodda eyni adlı başqa məkanlar istifadə etdiyinizdə qarışıqlığı azaltmağa kömək edir. Əsas ideya, müəyyən funksionallığı yerinə yetirən kod hissələrini hansısa bir ad altında qruplaşdırmaq və təyin etməkdir.


Namespace içərisində yaradılan class-lar

Demək olar ki, bütün elementlər o cümlədən class da namespace içərisində yaradılır və bu yaradılan strukturları başqa yerdə istifadə edəndə birbaşa namespace-də göstərilən path(ünvan) üzərindən çağıra bilirik. Buna görə də class-lar əsasən namespace içərisində təyin edilir.


Namespace xaricində yaradılan class-lar

Bu elə də üstünlük verilən hal deyil, çünki düzgün istifadə edilmədiyi halda qarışıqlıq yara bilər. Belə hallarda class-ların necə və hansı məqsədlə yaradıla biləcəyi ilə bağlı bəzi ssenarilər: -Utility class-lar: Müəyyən bir konsepsiyaya xas olan ümumi funksionallığı təmin edən namespace xaricində köməkçi siniflər yarada bilərsiniz. Məsələn, riyazi hesablamaları yerinə yetirən köməkçi sinif, fayl əməliyyatları üçün sinif və s. -Data Models: Verilənlər bazası cədvəllərini namespace xaricindəki class-larla təyin edə bilərsiniz. Bu class-lar sadəcə məlumatları saxlamaq və emal etmək üçün istifadə olunur. Daşınması üçün yox. -Service Classes: Xüsusi funksionallığı təmin edən xidmət sinifləri namespace-dən kənarda da yaradıla bilər. Məsələn, e-poçt göndərmə xidmətini təmin edən sinif. -Helpers: Ümumiyyətlə, birdən çox class-a lazım ola biləcək əməliyyatları ehtiva edən köməkçi class-lar namespace xaricində yaradıla bilər. Bu, kodunuzu daha oxunaqlı və saxlanmasını asanlaşdıra bilər. Bu nümunələr proqramın modulluğunu artırmaq və kodu daha oxunaqlı etmək üçün namespace xaricində class-ların yaradıla biləcəyi ssenariləri göstərir. Lakin bu class-ları istifadə edərkən diqqətli olmaq şətdir yoxsa işləri daha qarışıq hala gətirmiş olarıq.


Class içərisində(Nested type) yaradılan class-lar

İç-içə class-lar başqa class daxilində müəyyən edilmiş və bu class-a daxil edilmiş alt class-dır. Onlar tez-tez "Xüsusi köməkçi class", "Ara class" və ya "Class daxilində başqa bir class-dan asılı olan digər class" kimi istifadə olunur. İç-içə class-lardan istifadə nümunəsi: -Encapsulation (Kapsullama): İç-içə class-lar class daxilində müəyyən edilə bilər və xarici dünyadan girişi məhdudlaşdırmaq və bu class-a xas olan strukturu gizlətmək üçün istifadə edilə bilər. Beləliklə, kənar class-lar bu daxili class-a birbaşa daxil ola bilməyəcək və bu class-ın xüsusiyyətləri gizli qalacaq. -Organizasiya ve Modul tipi: Əgər class başqa bir class daxilində məntiqi vahid yaradırsa və bu vahidə xaricdən daxil olmaq lazım deyilsə, o zaman təcrid olunmuş class-dan istifadə edilə bilər. Bu, kodunuzu daha mütəşəkkil və modul edə bilər. -Static ve Non-Static Nested Class-lar: İç-içə class-lar statik və ya qeyri-statik ola bilər. Statik iç-içə class-lar xarici class nümunəsi (instance) olmadan istifadə edilə bilsə də, statik olmayan daxili class-lara xarici class nümunəsi (instance, obyekt) olmadan daxil olmaq mümkün deyil. Bu nümunələr iç-içə class-lardan nə vaxt istifadə edəcəyinizi və onların fərqlərini anlamağa kömək edə bilər. Əslində, iç-içə class-lar kodun təşkilini artıra, giriş nəzarətini təmin edə və əlaqəli siniflər arasında əlaqəni gücləndirə bilər. Bununla belə, həddindən artıq istifadə etməmək və ehtiyaca uyğun olaraq balanslaşdırılmış şəkildə istifadə etmək vacibdir.