Thursday, 9 August 2018

Obyekt Yönümlü Proqramlaşdırmada abstraksiya və kapsulasiya (Abstraction, encapsulation)

Abstraksiya və kapsulasiya OOP-nin bir-birini tamamlayan iki mühüm prinsipidir. Əsas məqsəd isə proqramın pərdə arxasında gedən prosesləri son istifadəçidən gizləmək və obyektin dəyişənlərinə birbaşa müraciətin qarşısını almaqdır (data hiding). Maşın nümunəsinə müraciət etməklə bunu daha açıq izah etmək olar. Maşını istifadə edən şəxs bunun üçün nəzərdə tutulmuş hissələri funksiyasına uyğun şəkildə hərəkət etdirməklə maşını öz istəyinə uyğun yönləndirə bilər. Amma maşının daxilində hansı detalların olmasını və orada gedən prosesləri bilməsi vacib deyil. Bunlar ətrad mühitdən gizlədilərək daha təhlükəsiz bir formada mühafizə edilir.
Eynilə, proqram yazarkən bu prinsiplərə əməl edilməsi proqramın daha güvənli və dayanıqlı olmasını təmin edir. Bu məqsədlə dəyişənlər üçün private  və protected açar sözlərindən istifadə edilməsi geniş qəbul görmüş bir üsuldur. Dəyişənlərin dəyərlərində dəyişiklik lazım gələrsə, "setter" metodu yazılır. Bununla yanaşı dəyişənin dəyərini almaq üçün də "getter" metodu nəzərdə tutula bilər.

Class.java faylı
public class Car
{
    private String name;
    private String model;
    private int year;
    private double engine;

    public void setName(String name)
    {
       this.name=name;
    }

    public String getName()
    {
       return name;
    }

    public void setModel(String model)
    {
       this.model=model;
    }

    public String getModel()
    {
       return model;
    }

    public void setYear(int year)
    {
       this.year=year;
    }

    public int getYear()
    {
       return year;
    }

    public void setEngine(double engine)
    {
       this.engine=engine;
    }

    public double getEngine()
    {
       return engine;
    }
}

Test.java faylı
public class Test
{
   public static void main (String [] arg)
   {
      //Car sinfindən bir nümunə yaradılır
      Car car=new Car();

      //Uyğun dəyişənlərə dəyərlər verilir
      car.setName("Mercedes Benz");
      car.setModel("C class");
      car.setYear(1995);
      car.setEngine(2.3);

      System.out.println("Maşının markası: "+car.getName());
      System.out.println("Maşının modeli: "+car.getModel());
      System.out.println("İstehsal ili: "+car.getYear());
      System.out.println("Mühərrik həcmi: "+car.getEngine());
   }
}

Mahiyyətini daha aydın başa düşmək üçün CarTest siniflərini ayrı ayrılıqda yazdım. Çünki Car sinfi içərisindən onun private olan sahələrinə müraciət etmək olur və belədə abstraksiya-kapsulasiya prinsipinin heç bir mənası qalmır. Daha yüksək səviyyəli proqramlarda da siniflər bu cür ayrı-ayrılıqda yazılır. Yuxarıdakı nümunədə Test sinfi içərisində yaradılmış Car tipindən obyekt onun private sahələrinə birbaşa müraciət edə bilməz. Buna görə setName(), setModel(), setYear(), setEngine() metodları vasitəsilə uyğun dəyişənlərin dəyərini istədiyimiz kimi dəyişə bilərik. Eyni qaydada, getName(), getModel(), getYear(), getEngine() metodları ilə də bu dəyərləri çıxışa vermək imkanımız var.

No comments:

Post a Comment