البنية الأساسية للبرمجة كائنية التوجه في Java هي الصنف، وهو مزيج من البيانات (الحقول) والسلوك (الطرق). تُعرف حقول الصنف وطرقه باسم أعضائه.
يمكن التحكم في الوصول إلى الأعضاء عبر معدِّلات الوصول، وأكثرها شيوعًا اثنان:
public: يمكن لأي كود الوصول إلى العضو (بلا قيود).private: لا يمكن الوصول إلى العضو إلا من الكود الموجود في الصنف نفسه.يمكنك التفكير في الصنف كقالب لإنشاء نسخ منه.
لإنشاء نسخة من صنف (وتُعرف أيضًا بـ_الكائن_)، تُستخدم الكلمة المفتاحية new:
class Car {
}
// Create two car instances
Car myCar = new Car();
Car yourCar = new Car();
الحقول لها نوع واسم (يُكتب الاسم بأسلوب camelCase) ويمكن تعريفها في أي مكان داخل الصنف (وحسب العُرف تُكتب بأسلوب PascalCase):
class Car {
// Accessible by anyone
public int weight;
// Only accessible by code in this class
private String color;
}
يمكن اختياريًا إسناد قيمة ابتدائية إلى الحقل. إذا لم يحدد الحقل قيمة ابتدائية، فستُضبط على القيمة الافتراضية لنوعه. ويمكن الوصول إلى قيم حقول النسخة وتحديثها باستخدام تدوين النقطة.
class Car {
// Will be set to specified value
public int weight = 2500;
// Will be set to default value (0)
public int year;
}
Car newCar = new Car();
newCar.weight; // => 2500
newCar.year; // => 0
// Update value of the field
newCar.year = 2018;
عادةً ما تُحدَّث الحقول الخاصة كأثر جانبي لاستدعاء طريقة.
وهذه الطرق لا تُرجع عادةً أي قيمة، وفي هذه الحالة ينبغي أن يكون نوع الإرجاع void:
class CarImporter {
private int carsImported;
public void importCars(int numberOfCars)
{
// Update private field from public method
carsImported = carsImported + numberOfCars;
}
}
في هذا التمرين ستتعامل مع سيارة تعمل بالتحكم عن بُعد، وقد ادّخرت أخيرًا ما يكفي من المال لشرائها.
تبدأ السيارة ببطارية ممتلئة بالكامل (100%). وفي كل مرة تقود فيها السيارة باستخدام وحدة التحكم عن بُعد، تقطع 20 مترًا وتستهلك واحدًا في المئة من البطارية.
تحتوي السيارة التي تعمل بالتحكم عن بُعد على شاشة LED أنيقة تعرض معلومتين:
"Driven <METERS> meters"."Battery at <PERCENTAGE>%".إذا وصل شحن البطارية إلى 0%، فلن تتمكن من قيادة السيارة بعد ذلك، وستعرض شاشة البطارية "Battery empty".
لديك ست مهام، وستتعامل كل واحدة منها مع نسخ من السيارة التي تعمل بالتحكم عن بُعد.
نفّذ الطريقة (_static_) JedliksToyCar.buy() لتُرجع نسخة جديدة تمامًا من السيارة التي تعمل بالتحكم عن بُعد:
JedliksToyCar car = JedliksToyCar.buy();
نفّذ الطريقة JedliksToyCar.distanceDisplay() لتُرجع المسافة كما تُعرض على شاشة LED:
JedliksToyCar car = JedliksToyCar.buy();
car.distanceDisplay();
// => "Driven 0 meters"
نفّذ الطريقة JedliksToyCar.batteryDisplay() لتُرجع نسبة شحن البطارية كما تُعرض على شاشة LED:
JedliksToyCar car = JedliksToyCar.buy();
car.batteryDisplay();
// => "Battery at 100%"
نفّذ الطريقة JedliksToyCar.drive() التي تحدّث عدد الأمتار المقطوعة:
JedliksToyCar car = JedliksToyCar.buy();
car.drive();
car.drive();
car.distanceDisplay();
// => "Driven 40 meters"
حدّث الطريقة JedliksToyCar.drive() لتحدّث نسبة شحن البطارية:
JedliksToyCar car = JedliksToyCar.buy();
car.drive();
car.drive();
car.batteryDisplay();
// => "Battery at 98%"
حدّث الطريقة JedliksToyCar.drive() بحيث لا تزيد المسافة المقطوعة ولا تنقص نسبة شحن البطارية عند نفاد شحن البطارية (عند 0%):
JedliksToyCar car = JedliksToyCar.buy();
// Drain the battery
// ...
car.distanceDisplay();
// => "Driven 2000 meters"
car.batteryDisplay();
// => "Battery empty"
سجّل في Exercism لتتعلّم وتتقن Java عبر 26 مفهومًا158 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.