فهرس المقرر
تدريب عملي

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

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

«interface»Printable Student Book implements

من الدرس 13. الواجهات Interface · كل التدريبات

١نص المسألة

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

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

  1. أنشئ الواجهة Printable وفيها: void printInfo();
  2. أنشئ Student بخصائصه ودالة بناء، واكتب implements Printable وجسم printInfo.
  3. أنشئ Book بالطريقة نفسها.
  4. في main أنشئ مصفوفة Printable[] فيها طالبان وكتاب.
  5. مرّ على المصفوفة بحلقة for-each واستدعِ printInfo لكل عنصر.

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

في NetBeans

  1. أنشئ مشروعًا باسم Lab17 والكلاس الرئيسي 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 lab17; public interface Printable {    void printInfo();   // دالة بلا جسم}
package lab17; 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 lab17; 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 lab17; 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 – Lab17 (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(); ؟
أجب عن الأسئلة ثم اضغط «صحّح ورقتي».