🧪 التدريب العملي الوحدة 5: البرمجة الشيئية · الدرس 14 من 17
تدريب عملي

التدريب العملي 44: واجهة الطباعة Printable

واجهة Printable ينفّذها كلاسا Student و Book، ثم نطبع بياناتهما من مصفوفة واحدة.

«interface»Printable Student Book implements

من الدرس 14. تعدد الأشكال والتجريد · كل التدريبات

١نص المسألة

أنشئ واجهة Printable فيها الدالة printInfo بلا جسم، ثم كلاسين ينفّذانها: Student (رقم واسم ودرجة) و Book (رقم وعنوان). في main ضع ثلاثة كائنات منهما في مصفوفة من نوع Printable، واطبع بيانات كل منها بحلقة.

٢الخوارزمية المقترحة

أ) تصميم الواجهة والكلاسات

  1. الواجهة Printable: دالة printInfo بلا جسم
  2. الكلاس Student ينفّذ Printable:
  3. الخصائص: الرقم، والاسم، والدرجة
  4. دالة printInfo: تطبع بيانات الطالب
  5. الكلاس Book ينفّذ Printable:
  6. الخصائص: الرقم، والعنوان
  7. دالة printInfo: تطبع بيانات الكتاب

ب) خطوات البرنامج الرئيسي

  1. ابدأ
  2. أنشئ مصفوفة من نوع Printable فيها: طالب، وكتاب، وطالب
  3. كرّر على كل عنصر في المصفوفة:
  4. استدعِ printInfo؛ فيطبع كل عنصر بياناته بطريقته
  5. توقف

٣خطوات التطبيق

في NetBeans

  1. أنشئ مشروعًا باسم Lab44 والكلاس الرئيسي Main.
  2. أنشئ الواجهة: زر أيمن على الحزمة‏ ← ‏New‏ ← ‏Java Interface، واسمها Printable.
  3. أنشئ الكلاسين Student و Book، واكتب بعد اسم كل منهما implements Printable.
  4. انقر على المصباح الذي يظهر واختر Implement all abstract methods، ثم اكتب جسم الدالة printInfo.

في OneCompiler

  1. افتح OneCompiler من زر «▶ شغّل المشروع» أسفل الحل، أو من موقع onecompiler.com/java.
  2. في OneCompiler تُكتب كل الكلاسات في ملف واحد Main.java؛ زر التشغيل يجمعها لك تلقائيًّا.
  3. إذا كان البرنامج يقرأ من لوحة المفاتيح، فاكتب المدخلات في خانة STDIN التي تظهر تحت الكود في محرّر OneCompiler، ثم اضغط Run.

٤المخرجات المطلوبة

نفّذ برنامجك، ويجب أن تظهر المخرجات التالية:

Output – (run)×
run:
Student: 4321 - Mohammed - 80.0
Book: 1 - Java in 10 days
Student: 4344 - Turki - 50.0
BUILD SUCCESSFUL (total time: 0 seconds)

٥الحل المقترح

حاول بنفسك أولًا، ثم قارن حلّك بالحل المقترح (كود التدريب من مذكرة العملي):

👁 اعرض الحل المقترح
package lab44; public interface Printable {    void printInfo();   // دالة بلا جسم}
package lab44; public class Student implements Printable {    int id;    String name;    double mark;     public Student(int id, String name, double mark) {        this.id = id;        this.name = name;        this.mark = mark;    }     @Override    public void printInfo() {        System.out.println("Student: " + id + " - " + name + " - " + mark);    }}
package lab44; public class Book implements Printable {    int id;    String title;     public Book(int id, String title) {        this.id = id;        this.title = title;    }     @Override    public void printInfo() {        System.out.println("Book: " + id + " - " + title);    }}
package lab44; public class Main {    public static void main(String[] args) {        Printable[] items = {            new Student(4321, "Mohammed", 80),            new Book(1, "Java in 10 days"),            new Student(4344, "Turki", 50)        };         for (Printable p : items) {            p.printInfo();        }    }}
مخطط المشروع مستخرج من الكود. انقر على أي كلاس لفتح كوده.
«interface»PrintableStudentBookMain
«interface»Printable+ printInfo() : voidStudent~ id : int~ name : String~ mark : double+ Student(id : int, name : String, mark : double)+ printInfo() : voidBook~ id : int~ title : String+ Book(id : int, title : String)+ printInfo() : voidMain+ main(args : String[]) : void

ملفات المشروع في تبويبات كما في NetBeans. زر التشغيل يجمعها في ملف واحد ليعمل على OneCompiler.

Output – Lab44 (run)×
run:
Student: 4321 - Mohammed - 80.0
Book: 1 - Java in 10 days
Student: 4344 - Turki - 50.0
BUILD SUCCESSFUL (total time: 0 seconds)

أسئلة المناقشة

أسئلة مناقشة على التدريب 17. إجاباتك تُحفظ تلقائيًّا على هذا الجهاز؛ أجب ثم اضغط «صحّح ورقتي».

1السؤال الأول: اختر الإجابة الصحيحة

1) لماذا وضعنا الطالب والكتاب في مصفوفة واحدة من نوع Printable؟
2) ماذا يحدث إذا حذفنا الدالة printInfo من الكلاس Book؟
3) في الحلقة for (Printable p : items) ما الذي يحدّد نسخة printInfo التي تُنفَّذ؟
4) أي سطر يُنشئ الواجهة في NetBeans؟
5) ما ناتج السطر الثاني في المخرجات؟
6) هل نستطيع كتابة Printable p = new Printable(); ؟
أجب عن الأسئلة ثم اضغط «صحّح ورقتي».