صفحات

samedi 30 novembre 2013

دوال الوصول و التغير

بسم الله الرحمان الرحيم:
السلام عليكم و رحمة الله،سنتطرق إلى ما نسميه بتعريف دوال الوصول إلى خصائص فئة ما كما سنتطرق إلى درجات إمكانية الوصول إلى الخصائص.
 public class Car {
 
 private String brand;
 private String color;
 private int model;
 
 public Car(){
  System.out.println("Car created with default constructor");
  this.brand = "";
  this.color = "";
  this.model = 2000;
 }
 
 public Car(String _brand,String _color,int _model){
  System.out.println("Car created with specific constructor");
  this.brand = _brand;
  this.color = _color;
  this.model = _model;
 }

}

هناك كلمة تم إضافتها قبل نوع كل من نوع خصائص الفئة هي private ، وتعني "خاصة" أي أن هذه الخصائص لا يمكننا الوصول إليها خارج الفئة،وبالتالي لا يمكن تغيير أو قراءة قيمتها خارج الفئة Car .كيف ذلك؟لنفهم أكثر،لنجعل الوضعية عكس ما هي عليه الآن: إذن لنضف عليها كلمة public ، وتعني للعموم أي الجميع يمكنه تغيير و قراءة قيمة الخاصية التي تم تعريفها بإمكانية وصول للعموم.

لكن أين يمكننا أن نغير قيمتها؟بمعنى آخر أين يوجد "خارج الفئة" الذي ذكرته؟

جميل،خارج الفئة نعني به كل فئة أخرى تحتوي على كائنات من فئة Car ،مثلا الفئة الرئيسية للبرنامج.

إذن إذا عرفنا الخصائص كلها بإمكانية الوصول public يمكننا مثلا فعل ما يلي:

public class MainClass {

   public static void main(String args[]) {
      Car car1 = new Car();
      Car car2 = new Car("Mercedes", "Black", 2009);
      
      car1.color = "red";
      car1.model = 2006;
      
      System.out.println("the color of car2 is :" + car2.color);
      System.out.println("the model of car2 is :" + car2.model);
      
   }
}

كما هو مبين في الشيفرة،عرفنا كائنين من فئة Car ثم وصلنا إلى خاصية color الكائن car1 بتحديد اسم الكائن ثم نقطة ثم اسم الخاصية التي نريد الوصول إليها لتغيير أو قراءة قيمتها،في حالتنا الأولى قمنا بتغيير قيمة لون الكائن car1 إلى red و قيمة model إلى 2006 ،بالنسبة لما تبقى قمنا بقراءة قيمتي خاصيتين من خاصيات الكائن car2 ، لا تنسوا أن هذا كلها صالح فقط لأننا قمنا بتعريف الخصائص بإمكانية وصول public .لهذا أمكننا الوصول إلى الخصائص مباشرة خارج الفئة.

لكن،من الضروري أن نذكر أنه لايجب ترك خصائص فئاتكم بإمكانية وصول public أبدا،دائما نجعلها private.

إذن نعود إلى الكود الأول لفئة Car حيث جميع الخصائص معرفة بإمكانية الوصول private ،السؤال الذي يجب أن يطرح الآن هو : كيف إذن يمكننا تغيير و قراءة قيم هذه الخصائص؟

هذا هو موضوعنا اليوم،إنها دوال الوصول ودوال التغيير أو ما يسمى getters and setters . هي دوال عادية و بسيطة تمكننا من تغيير و قراءة قيم الخصائص،من خلالها يمكننا التحكم في طريقة تغيير و طريقة قراءة قيم الخصائص حسب ما نريد،وهذا مثال :

public class Car {
 
 private String brand;
 private String color;
 private int model;
 
 public Car(){
  System.out.println("Car created with default constructor");
  this.brand = "";
  this.color = "";
  this.model = 2000;
 }
 
 public Car(String _brand,String _color,int _model){
  System.out.println("Car created with specific constructor");
  this.brand = _brand;
  this.color = _color;
  this.model = _model;
 }
 
 public String getBrand() {
  return brand;
 }

 public void setBrand(String brand) {
  this.brand = brand;
 }

 public String getColor() {
  return color;
 }

 public void setColor(String color) {
  this.color = color;
 }

 public int getModel() {
  return model;
 }

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

}

تلاحظون أن الدوال بسيطة جداا وغالبا ما نسمي دوال الوصول getColor او getModel .... و دوال التغيير setColor أو setModel ....لكن يمكننا أن نسميها ما نشاء لكن لاحترافية أكبر و توحيد للمصطلحات بين المبرمجين نستخدم المصططلحات المتعارف عليها....

الآن بقي أن نرى كيف نستخدمها خارج الفئة :

public class MainClass {

   public static void main(String args[]) {
      Car car1 = new Car();
      Car car2 = new Car("Mercedes", "Black", 2009);
      
      car1.setColor("red");
      car1.setModel(1987);
      
      System.out.println("the color of car1 is "+car1.getColor());
      System.out.println("the model of car1 is "+car1.getModel());
      
   }
}

وهذه هي النتيجة :

Car created with default constructor
Car created with specific constructor
the color of car1 is red
the model of car1 is 1987

هكذا نكون قد أنهينا هذا الدرس ولا تنسوا ان تتفاعلوا مع الموضوع.

دمتم في رعاية الله.

1 commentaire: