تقييم الدرس 14: تعدد الأشكال والتجريد
إجاباتك تُحفظ تلقائيًّا على هذا الجهاز. أجب ثم اضغط «صحّح ورقتي» في آخر الصفحة.
← العودة إلى الدرس 14: تعدد الأشكال والتجريد
أسئلة التقييم
أسئلة تقييم الدرس: تعدد الأشكال والتجريد. إجاباتك تُحفظ تلقائيًّا على هذا الجهاز؛ أجب ثم اضغط «صحّح ورقتي».
1السؤال الأول: اختر الإجابة الصحيحة
class Animal{ void speak() { System.out.println("Animal"); }} class Dog extends Animal{ @Override void speak() { System.out.println("Dog"); }} public class Main{ public static void main(String[] args) { Animal a = new Dog(); a.speak(); }}
2السؤال الثاني: صح أم خطأ
3السؤال الثالث: أكمل الفراغات
1) تعدد الأشكال الثابت يُحدَّد وقت .
💡 تعدد الأشكال الثابت يُحدَّد وقت ___ أي قبل التنفيذ.
2) تعدد الأشكال الديناميكي يتحقق بـ .
💡 إعادة كتابة الدالة في الابن، بالإنجليزية.
3) الربط وقت الترجمة يُسمّى الربط .
💡 الربط وقت الترجمة يُسمّى الربط ___ .
4) إنشاء مصفوفة من 3 أشكال: Shape[] s = new Shape[];
💡 عدد عناصر المصفوفة.
5) الكلمة التي تجعل الكلاس مجردًا: .
💡 الكلمة التي تُكتب قبل class لتجعله مجردًا.
6) المبادئ الأربعة: التغليف والتجريد والوراثة و .
💡 المبدأ الرابع: Polymorphism.
7) العقد التجريدي الذي ينفّذه الكلاس: .
💡 عقد تجريدي ستتعرّف عليه لاحقًا.
8) سهم «ينفّذ» في UML يكون برأس مثلث.
💡 السهم ليس متصلًا.
9) أكمل الفراغ: الواجهة بالإنجليزية .
💡 تسعة أحرف إنجليزية، تبدأ بـ inter.
10) أكمل الفراغ: نكتب بعد اسم الكلاس الكلمة ثم اسم الواجهة لتنفيذها.
💡 كلمة تعني «ينفّذ».
11) أكمل الفراغ: في UML يُكتب فوق اسم الواجهة «».
💡 الكلمة نفسها التي نعرّف بها الواجهة.
4السؤال الرابع: التوصيل
طابِق كل عنصر في العمود (أ) بما يناسبه في العمود (ب):
- 1) abstract class
- 2) abstract method
- 3) interface
- 4) implements
- 5) extends
- أ. دالة بلا جسم.
- ب. كلاس لا يُنشأ منه كائن.
- ج. يرث كلاسًا.
- د. ينفّذ واجهة.
- هـ. عقد تجريدي.
طابِق كل عنصر في العمود (أ) بما يناسبه في العمود (ب):
- 1) interface
- 2) implements
- 3) extends
- 4) abstract class
- أ. تنفيذ واجهة.
- ب. وراثة كلاس.
- ج. كلاس مجرد فيه دوال عادية ومجردة.
- د. قائمة دوال بلا أجسام.
5السؤال الخامس: أسئلة عملية
1) تتبّع الناتج:
class Shape { double area() { return 0; }}class Sq extends Shape { double s; Sq(double s) { this.s = s; } double area() { return s * s; }}class Ci extends Shape { double r; Ci(double r) { this.r = r; } double area() { return 3 * r * r; }} public class Main{ public static void main(String[] args) { Shape[] arr = { new Sq(2), new Ci(1) }; for (Shape x : arr) System.out.println(x.area()); }}
2) تتبّع الناتج:
class Shape{ String name() { return "Shape"; }} class Square extends Shape{ @Override String name() { return "Square of " + super.name(); }} public class Main{ public static void main(String[] args) { System.out.println(new Square().name()); }}
أكمل الكود من التدريب 13: الكلاس HourlyEmployee يعيد كتابة دالة الراتب
public class HourlyEmployee extends Employee { private int workingHours = 40; private double hourRate = 150; public double () { return (workingHours * hourRate); }}Employee emp = new ();System.out.println("Salary: " + emp.getSalary());
4) تتبّع الناتج:
abstract class Animal{ abstract String sound(); void say() { System.out.println("I say " + sound()); }} class Cow extends Animal{ String sound() { return "Moo"; }} public class Main{ public static void main(String[] args) { Animal a = new Cow(); a.say(); }}
5) اكتب كلاسًا مجردًا Employee فيه دالة مجردة double pay()، وكلاس Intern يرثه ويعيد 3000، ثم اطبع pay() لكائن Intern.
abstract class Employee{ abstract double pay();} class Intern extends Employee{ double pay() { return 3000; }} public class Main{ public static void main(String[] args) { Employee e = new Intern(); System.out.println(e.pay()); }}
سؤال برمجي حول Abstract و Polymorphism
لدينا كلاس مجرّد (abstract) اسمه Person يحتوي على: متغير name ودالة بناء (constructor) يستقبل الاسم
ودالة مجرّدة اسمها work
تم إنشاء كلاس Student يرث من Person ويعيد تعريف الدالة work بحيث تطبع مثل ما يلي: Student Ali is studying وتم إنشاء كلاس Teacher يرث من Person ويعيد تعريف الدالة work بحيث تعرض: Teacher Mohammed is teaching. في الدالة main:
أنشئ كائنًا من Student وآخر من Teacher كعناصر للمصفوفة التي من نوع Person (أي باستخدام polymorphism).
وتم استدعِ الدالة work لكلا الكائنين.
class Person { String name; Person(String name) { this.name = name; } void work();}class Student Person { Student(String name) { (name); } @Override void () { System.out.println("Student " + name + " is studying."); }}class Teacher Person { Teacher(String name) { super(name); } @Override void () { System.out.println("Teacher " + name + " is teaching."); }}public class Main { public static void main(String[] args) { p[ ] = { new Student("Ali"), new Teacher("Mohammed") }; p[0].work(); p[1].work(); }}
7) تتبّع الناتج:
interface Swimmer { void swim(); }interface Flyer { void fly(); }class Duck implements Swimmer, Flyer { public void swim() { System.out.println("swim"); } public void fly() { System.out.println("fly"); }}public class Main { public static void main(String[] args) { Duck d = new Duck(); d.fly(); d.swim(); }}
8) اكتب واجهة اسمها Drawable فيها الدالة draw()، وكلاسًا Circle ينفّذها ويطبع «Drawing a circle»، ثم استدعها عبر متغير من نوع Drawable.
interface Drawable { void draw();} class Circle implements Drawable { public void draw() { System.out.println("Drawing a circle"); }} public class Main { public static void main(String[] args) { Drawable d = new Circle(); d.draw(); }}
أكمل كود الواجهة Printable وتنفيذها في الكلاس Book:
public Printable { void printInfo();}public class Book Printable { public void printInfo() { System.out.println("Book: " + title); }}