proqramlaşdırma

Yəqin siz də bir çox məqalə başlığında bu adı görmüsüz. Amma bir çox hallarda daxil olub ya obyekt yönümlü proqramlaşdırmanın tarixi haqqında yada əsas konseptləri haqqında məlumat olduğunu görürsüz. Ona görə də bir çox yeni başlayanlar və hətta bəzi proqramçı kimi işləyənlər obyekt yönümlü proqramlaşdırmanın nə olduğun və nə üçün yaradıldığını həqqiqətən dərk edə bilmirlər. Bunu nəzərə alaraq mən də bu məqaləni yazmağa qərara gəldim.

Bildiyiniz kimi bütün proqrmalşdırma məntiqi real həyata əsaslanır. Yəni məsələlər real həyatdakı yanaşma tərzində yanaşılır. Bir misala baxaq. Bir market təssəvür edin. Siz ət satılan yerdən kitab və ya əksinə ala bilmərsiz. Bir-biri ilə əlaqəli məhsullar bir yerdə yığılıb. Təssəvür edin hər şey qarşıqıdır. Eyni kateqoriyalı məhsullar ayırılmayıb. Heç bir məhsulun yeri bilinmir. Belə olan halda nə problemlər yaranır.

  1. Market sahibi hansı məhsuldan nə qədər qaldığını hesablaya bilmir
  2. Yeni məhsullar gələndə yerləşdirmə prosesində çətinlik çəkir
  3. Market orda uzun müddət işləyən və bəzi məhsulların yerini əzbərləyən işçidən asılı olur. 
  4. Müştərilər istədikləri məhsulları tapmaqda çətinlik çəkirlər
  5. Müştərilər istədikləri məhsulları tapmaqda çətinlik çəkdiklərinə görə daha çox işçiyə yəni maliyəyə ehtiyac yaranir və s. bu listi artırmaq olar

Bunun proqramlaşdırma qarışığın desək aşağıdakı kimi olar.

  1. Proqramı sahibi reportları düzgün alınmır.
  2. Proqramı yeni funksionallıq əlavə etmək lazım gəldikdə bu çox çətin olur bəzən də mümkün olmur.
  3. Proqram sahibi proqrmı hazırlayan proqramçıdan asılı qalır.
  4. Proqramın istidadəçiləri istədikləri məlumatları düzgün şəkildə ala bilmirlər.
  5. Proqram böyüdükcə problemlər də böyür nəticədə daha çox proqrmçı tələb olunur.

Bəzən proqramçılar ”Mən obyekt yönümlü proqramlaşdırma dilində proqram hazırlayıram mənim digər növ proqramlaşdırma tətbiq etməm mümkün deyil” kimi düşünür. Qeyd etmək istəyirəm ki, misal üçün C# həm prosedural həm də obyekt yönümlü proqramlaşdırmanı dəstəkləyir. Yəni proqramçının obyekt yönümlü proqramlaşdırma dilini bilməyi onun bu yanaşma ilə proqram hazırladığı mənasına gəlmir.

Gəlin obyekt yönümlü proqramlaşdırmanı anlamaq üçün sadə bir koda baxaq.

namespace OOP
{
    class Program
    {
         static void Main(string[] args)
        {
            string personName = "Eldaniz";
            string personSurname = "Ismayilov";
            DateTime personBirthdate = new DateTime(1994, 9, 20);

            Console.WriteLine(CalculatePersonAge(personBirthdate));

            Console.ReadKey();
        }

        static int CalculatePersonAge(DateTime personBirthdate)
        {
            return (int)(DateTime.Now - personBirthdate).TotalDays / 365; // Təqribi hesablamadır
        }
    }
}

Bu kod çox sadə və gözəl görünə bilər amma təssəvür edin böyük bir proqramı bu formada hazırlayırsınız. Bu zaman fieldlərin və metodların sayı artacaq. Bir birinə aid olmayan metodlar və fieldlər bir yerdə olacaq. Bir faylda minlərlə sətir kodlar olacaq. Bu da kodun çox qarışıq olmasına gətirib çıxarıracaq. Proqram böyüdükcə özü ilə böyük problemlər gətirəcək və bir müddətdən sonra yeni funksionalıq yaratmaq mümkün olmayacaq. Proqramda bir yerdə dəyişiklik edən kimi digər yerlərdə problemlər yaranacaq. Yuxarıda danışdığımız market məsələsinə gəlib çıxacaq.

Bu problemi həll etmək üçün obyekt yönümlü proqramlaşdırma məntiqi yaradılıb. Belə ki, bir-bir ilə əlaqəli metodları və data fieldləri bir blokun icərisində yazılmalıdır. Bu kimi bloklar class deyilir.

Class məlumat və metodlar saxlayan bir konteynerdir. Metodlar hansısa bir əməliyyat yerinə yetirmək üçün hazırlanır. Class-lar bir-biri ilə əlaqəli işləyərək müəyyən funksionallıq yaradır. Aşağıdakı bank müştərisi üçün Müştəri hesabı adlanan class-a baxaq.

Hər müştərinin adı, soyadı, ata adı və s.  xüsusiyyətləri vardır. Həmçinin müştəri üçün xüsusi funksiyaları var. Məsələn müştəri nömrəsin yaratmaq, müştəri yaşını hesablamaq, hesabında olan cəm məbləği hesablamaq və s.

İndi isə yuxarıdakı kodun obyekt yönümlü proqramlaşdırma məntiqi ilə yazılmış qarşılığına baxaq.

namespace OOP
{
    class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person();
            person.Name = "Eldaniz";
            person.Surname = "Ismayilov";
            person.Birthdate = new DateTime(1994, 9, 20);

            Console.WriteLine(person.CalculateAge());

            Console.ReadKey();
        }

    }

    class Person
    {
        public string Name { get; set; }

        public string Surname { get; set; }

        public DateTime Birthdate { get; set; }

        public int CalculateAge()
        {
            return (int)(DateTime.Now - Birthdate).TotalDays / 365; // Təqribi hesablamadır
        }
    }
}

Yuxarıdakı kodda Person adlı bir class yaradılıb. Main metodunun içərisində isə həmin classın obyektini yaradılıb. Bir class-ın birdən çox obyektləri yaradıla bilər. Obyektlərə aid olduğu class-ın instance da deyilir.

Qeyd: Field və metodları məntiqsiz şəkildə class-lara ayırmaq marketdə ayrı-ayrı sahələr ayırmaq amma həmin sahələrdə yenə də qarışıq məhsullar satmağa bənzəyəcək. Ət məhsulları sahəsində kitab satmaq kimi olacaq. Başqa sözlə desək çoxlu class-lar yaratmaq hələ obyekt yönümlü proqramlaşdırma demək deyil.

Obyekt yönümlü proqramlaşdırmanın aşağıdakı konseptləri vardır.

  1. Kapsülləmə (Encapsulation)
  2. Miras alma (Inheritance)
  3. Abstraklaşdırma (Abstraction)
  4. Polimorfizm (Polymorphism)

Bu konseptlər ancaq iş inertview-larında lazım olmur. Obyekt yönümlü proqramlaşdırmanın haqqını vermək üçün kodlaşdırma zamanı məntiqi şəkildə bunlardan istifadə etmək lazımdır. Növbəti məqalələrdə bunlar haqqında ətraflı məlumat verəcəm.

Bir cavab yazın

Sizin e-poçt ünvanınız dərc edilməyəcəkdir. Gərəkli sahələr * ilə işarələnmişdir