أنشئ كلاسًا مجردًا Shape فيه خاصية اللون مع دالتي get و set عاديتين، ودالتين مجردتين getArea و getPerimeter. ثم أنشئ Circle و Rectangle يرثانه ويكتبان الدالتين المجردتين، واستخدم متغيرًا من نوع Shape لحساب مساحة كل شكل ومحيطه.
٢الخوارزمية المقترحة
public abstract class Shape: الخاصية private String color مع getColor و setColor.
الدالتان المجردتان: public abstract double getArea(); و public abstract double getPerimeter();
Circle extends Shape: المساحة Math.PI * r * r، والمحيط Math.PI * 2 * r.
package lab15;publicclass Main {publicstaticvoid main(String[] args) {// Shape is abstract; cannot be instantiated// الكلاس مجرد: فلا يمكن إنشاء نسخة منه// Shape s = new Shape(); Shape s = new Circle(5); s.setColor("red");System.out.println("Circle area: " + s.getArea());System.out.println("Circle perimeter: " + s.getPerimeter()); s = new Rectangle(4, 6);System.out.println("Rectangle area: " + s.getArea());System.out.println("Rectangle perimeter: " + s.getPerimeter()); }}
مخطط المشروع مستخرج من الكود. انقر على أي كلاس لفتح كوده.
ملفات المشروع في تبويبات كما في NetBeans. زر التشغيل يجمعها في ملف واحد ليعمل على OneCompiler.
Output – Lab15 (run)×
run:
Circle area: 78.53981633974483
Circle perimeter: 31.41592653589793
Rectangle area: 24.0
Rectangle perimeter: 20.0
BUILD SUCCESSFUL (total time: 0 seconds)
أسئلة المناقشة
أسئلة مناقشة على التدريب 15. إجاباتك تُحفظ تلقائيًّا على هذا الجهاز؛ أجب ثم اضغط «صحّح ورقتي».
1السؤال الأول: اختر الإجابة الصحيحة
1) لماذا عرّفنا الكلاس Shape في هذا التدريب بالكلمة abstract؟
2) ماذا يحدث إذا أزلنا علامة التعليق من السطر
snippet×
SourceHistory⟲⟳🔍
Shape s = new Shape();
3) ما الذي يميز الدالة
snippet×
SourceHistory⟲⟳🔍
publicabstractdouble getArea();
4) لماذا لم نكتب الدالتين getColor و setColor في الكلاسين Circle و Rectangle؟
5) ماذا يحدث إذا حذفنا الدالة getPerimeter من الكلاس Circle؟