الواجهة نوع يحتوي على أعضاء تُعرّف مجموعة من الوظائف المترابطة. وهي تفصل استخدامات الصنف عن التنفيذ، ما يتيح تنفيذات مختلفة متعددة أو دعم سلوك عام مثل التنسيق أو المقارنة أو التحويل.
تتشابه صياغة الواجهة مع صياغة الصنف، إلا أن الطرق تظهر كتوقيع فقط، ولا يُقدَّم لها جسم.
public interface Language {
String getLanguageName();
String speak();
}
public class ItalianTraveller implements Language, Cloneable {
// from Language interface
public String getLanguageName() {
return "Italiano";
}
// from Language interface
public String speak() {
return "Ciao mondo";
}
// from Cloneable interface
public Object clone() {
ItalianTraveller it = new ItalianTraveller();
return it;
}
}
يجب على الصنف المُنفِّذ أن ينفّذ كل العمليات التي تُعرّفها الواجهة.
تحتوي الواجهات عادةً على طرق النسخة.
ومن أمثلة الواجهات الموجودة في مكتبة أصناف Java، إلى جانب Cloneable الموضحة أعلاه، الواجهة Comparable<T>.
يمكن تنفيذ الواجهة Comparable<T> حين يُطلب ترتيب عام افتراضي في المجموعات.
في هذا التمرين، ستقوم بمزيد من العمل على سيارات التحكم عن بُعد.
طُوّرت سيارة تجريبية، ويحتاج مضمار الاختبار إلى تكييف ليتعامل مع الطرازين الإنتاجي والتجريبي. وقد صُنع نوعا السيارتين بالفعل، وعليك إيجاد أسلوب للتعامل مع كليهما على مضمار الاختبار.
إضافة إلى ذلك، بدأت السيارات الإنتاجية تحقق بعض النجاح. ويتطلع رئيس الفريق إلى الحفاظ على الروح التنافسية بنشر تصنيف للسيارات الإنتاجية.
يُرجى إضافة طريقتين إلى واجهة RemoteControlCar:
drive()، ولا تُرجع شيئًا، وgetDistanceTravelled()، وتُرجع قيمة int.ثم اجعل ProductionRemoteControlCar وExperimentalRemoteControlCar ينفّذان واجهة RemoteControlCar.
ويشمل ذلك تنفيذ جميع الطرق التي تتطلبها الواجهة.
ينبغي لكل استدعاء لـ .drive() أن يجعل السيارة تقطع مسافة معينة:
ProductionRemoteControlCar تقطع 10 وحدات،ExperimentalRemoteControlCar تقطع 20 وحدة.ينبغي أن تُرجع طريقة .getDistanceTravelled() عدد الوحدات التي قطعتها السيارة طوال عمرها.
ProductionRemoteControlCar prod = new ProductionRemoteControlCar();
prod.drive();
prod.getDistanceTravelled();
// => 10
ExperimentalRemoteControlCar exp = new ExperimentalRemoteControlCar();
exp.drive();
exp.getDistanceTravelled();
// => 20
نفّذ طريقة TestTrack.race(RemoteControlCar car)، التي تتاح فيها للسيارات car فرصة استدعاء drive().
TestTrack.race(new ProductionRemoteControlCar());
TestTrack.race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
يُرجى تنفيذ واجهة Comparable<T> في صنف ProductionRemoteControlCar.
ينبغي أن يكون ترتيب الفرز الافتراضي للسيارات تنازليًا حسب عدد الانتصارات.
نفّذ الطريقة الثابتة TestTrack.getRankedCars() لتُرجع السيارات الممرَّرة، مرتبة تنازليًا حسب عدد الانتصارات.
ProductionRemoteControlCar prc1 = new ProductionRemoteControlCar();
ProductionRemoteControlCar prc2 = new ProductionRemoteControlCar();
prc1.setNumberOfVictories(2);
prc2.setNumberOfVictories(3);
List<ProductionRemoteControlCar> unsortedCars = new ArrayList<>();
unsortedCars.add(prc1);
unsortedCars.add(prc2);
List<ProductionRemoteControlCar> rankings = TestTrack.getRankedCars(unsortedCars);
// => rankings.get(0) == prc2
// => rankings.get(1) == prc1
سجّل في Exercism لتتعلّم وتتقن Java عبر 26 مفهومًا158 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.