مراجعة - حاسبة الأشكال
جزء من قسم Object Oriented Programming في رحلة Java على Coddy — الدرس 33 من 87.
التحدي
سهللنقم ببناء حاسبة أشكال تجمع بين جميع مفاهيم تعدد الأشكال (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
1أساسيات الـ OOP
الملفات الخارجيةمقدمة في الـ OOPالفئات (Classes) مقابل الكائنات (Objects)الكلمة المفتاحية thisالدوال (Methods)الحقول (Attributes)دالة البناء (Constructor)تعدد أشكال دالة البناء (Constructor Overloading)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسية (extends)الكلمة المفتاحية superإعادة تعريف الدوال (@Override)تسلسل المنشئات (Constructor Chaining)كلاس Objectالوراثة الأحادية ومتعددة المستوياتلماذا لا توجد وراثة متعددة للكلاساتمراجعة - هيكلية الموظفين7الدوال الخاصة وفئة Object
دالة toString()equals() و hashCode()دالة clone()compareTo() و Comparableواجهة Comparatorمراجعة - الترتيب المخصص2محددات الوصول والتغليف
نظرة عامة على مستويات الوصولدوال Getter و Setterإخفاء البياناتالكلمة المفتاحية finalمراجعة - مدير الحساب البنكي5تعدد الأشكال (Polymorphism)
أساسيات الـ Method Overloadingالـ Method Overriding (في وقت التشغيل)الـ Upcasting والـ Downcastingمعامل الـ instanceofالفئات والدوال المجردة (Abstract)مراجعة - حاسبة الأشكال8مفاهيم OOP المتقدمة
الـ Composition مقابل الـ Inheritanceالـ Aggregation مقابل الـ Compositionالفئات الداخلية والمتداخلة والمجهولة (Inner, Nested & Anonymous)الـ Enums ودوالهاالـ Records (Java 16+)الـ Sealed Classes (Java 17+)11أنماط التصميم - الجزء الأول
مقدمة في أنماط التصميمنمط Singletonنمط Factoryنمط Builderنمط Observerنمط Strategy3خصائص الفئة والعضو الساكن
المتغيرات الخاصة بالكائن مقابل المتغيرات الساكنةالدوال الساكنةالكتل البرمجية الساكنةالثوابت (static final)ملخص - العداد والأدوات المساعدة6الواجهات (Interfaces) والأصناف المجردة (Abstract Classes)
مقدمة في الواجهات (Interfaces)تنفيذ الواجهات (Interfaces)تنفيذ واجهات متعددةالـ Default و Static في الواجهاتالأصناف المجردة مقابل الواجهاتالواجهات الوظيفية (Functional Interfaces)مراجعة - نظام الدفع9الأنواع العامة (Generics)
مقدمة في الأنواع العامةالأصناف العامة (Generic Classes)الدوال العامة (Generic Methods)معاملات الأنواع المقيدةالرموز البديلة (?, extends, super)مراجعة - الحاويات العامة12أنماط التصميم - الجزء الثاني
نمط الأمرنمط المحولنمط المزيننمط طريقة القالبنمط الحالةنمط التركيبنمط المكرر