Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - حاسبة الأشكال

جزء من قسم Object Oriented Programming في رحلة Java على Coddy — الدرس 33 من 87.

challenge icon

التحدي

سهل

لنقم ببناء حاسبة أشكال تجمع بين جميع مفاهيم تعدد الأشكال (polymorphism) التي تعلمتها في هذا الفصل. ستقوم بإنشاء فئة مجردة Shape مع فئات فرعية ملموسة، ثم تستخدم تعدد الأشكال لحساب وعرض المساحات بشكل موحد.

ستقوم بتنظيم الكود الخاص بك عبر أربعة ملفات:

  • Shape.java: أنشئ فئة مجردة (abstract class) تعمل كأساس لجميع الأشكال. كل شكل له حقل name (String). قم بتضمين منشئ (constructor) لتهيئته، وطريقة جلب getName()، وطريقة مجردة getArea() تعيد قيمة من نوع double. أضف أيضاً طريقة describe() تعيد: [name]: [area] (حيث يتم تنسيق المساحة إلى منزلتين عشريتين باستخدام String.format("%.2f", getArea())).
  • Circle.java: أنشئ فئة ملموسة ترث من Shape. الدوائر لها حقل radius (double). استخدم super لتمرير "Circle" كاسم. قم بتنفيذ getArea() لتعيد المساحة باستخدام Math.PI * radius * radius.
  • Rectangle.java: أنشئ فئة ملموسة أخرى ترث من Shape. المستطيلات لها حقول width و height (كلاهما double). مرر "Rectangle" كاسم إلى منشئ الفئة الأب. قم بتنفيذ getArea() لتعيد العرض مضروباً في الارتفاع.
  • Main.java: ابنِ حاسبة أشكال توضح تعدد الأشكال في العمل. ستتلقى ثلاثة مدخلات: نصف قطر للدائرة، وعرض، وارتفاع للمستطيل.

    أنشئ Circle و Rectangle، ثم قم بتخزينهما في مصفوفة من مراجع Shape. قم بالمرور عبر المصفوفة واطبع وصف كل شكل باستخدام طريقة describe().

    بعد الحلقة، احسب واطبع المساحة الإجمالية لجميع الأشكال بالتنسيق: Total area: [sum] (منسقة أيضاً إلى منزلتين عشريتين). استخدم حلقة منفصلة أو مجمعاً (accumulator) لجمع المساحات عن طريق استدعاء getArea() على مرجع كل شكل.

ستتلقى ثلاثة مدخلات: نصف قطر الدائرة (double)، وعرض المستطيل (double)، وارتفاع المستطيل (double).

يجب أن يظهر مخرجك ثلاثة أسطر - وصف واحد لكل شكل يليه المساحة الإجمالية. لاحظ كيف يمكنك التعامل مع أشكال مختلفة بشكل موحد من خلال النوع المجرد Shape بينما يحسب كل شكل مساحته بطريقته الخاصة!

جرّب بنفسك

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // قراءة المدخلات
        double radius = scanner.nextDouble();
        double width = scanner.nextDouble();
        double height = scanner.nextDouble();
        
        // TODO: إنشاء كائن Circle باستخدام radius
        
        // TODO: إنشاء كائن Rectangle باستخدام width و height
        
        // TODO: إنشاء مصفوفة من مراجع Shape وتخزين كلا الشكلين فيها
        
        // TODO: التكرار عبر المصفوفة وطباعة وصف كل شكل باستخدام describe()
        
        // TODO: حساب المساحة الإجمالية لجميع الأشكال
        // استخدم حلقة تكرار أو مجمع (accumulator) لجمع المساحات عن طريق استدعاء getArea() لكل شكل
        
        // TODO: طباعة المساحة الإجمالية بالتنسيق: "Total area: [sum]"
        // استخدم String.format("%.2f", totalArea) للتنسيق
    }
}

جميع دروس Object Oriented Programming