مراجعة - الترتيب المخصص
جزء من قسم Object Oriented Programming في رحلة Java على Coddy — الدرس 46 من 87.
التحدي
سهللنقم ببناء مدير لمجموعة كتب يجمع كل ما تعلمته حول الأساليب الخاصة والفرز. ستقوم بإنشاء فئة Book مع تطبيق مناسب لـ toString() و equals() و hashCode()، والترتيب الطبيعي عبر Comparable، بالإضافة إلى مقارنات خارجية لخيارات فرز مرنة.
ستقوم بتنظيم الكود الخاص بك عبر أربعة ملفات:
Book.java: أنشئ فئة تمثل كتاباً بثلاثة حقول خاصة:title(String)، وauthor(String)، وyear(int). قم بتضمين منشئ (constructor) ودوال جلب (getters) لجميع الحقول.يجب أن تقوم فئة Book بتنفيذ
Comparable<Book>مع ترتيب طبيعي حسبyearبـ ترتيب تصاعدي (الأقدم أولاً).قم بإعادة تعريف
toString()لتعيد:[title] by [author] ([year])قم بإعادة تعريف
equals()بحيث يتساوى كتابان عندما يكون لهما نفسtitleوَauthor. قم بإعادة تعريفhashCode()باستخدامObjects.hash()مع نفس الحقول.TitleComparator.java: أنشئ مقارناً (comparator) يقوم بفرز الكتب أبجدياً حسب العنوان بـ ترتيب تصاعدي (من A إلى Z).AuthorComparator.java: أنشئ مقارناً يقوم بفرز الكتب أبجدياً حسب المؤلف بـ ترتيب تصاعدي (من A إلى Z).Main.java: اجمع كل شيء معاً! ستتلقى مدخلات لثلاثة كتب، كل منها في سطر منفصل بالتنسيق التالي:title,author,yearأنشئ
ArrayListمن الكتب واستعرض جميع طرق الفرز الثلاثة:- الفرز باستخدام الترتيب الطبيعي (حسب السنة) وطباعة كل كتاب
- طباعة سطر فارغ
- الفرز حسب العنوان باستخدام
TitleComparatorوطباعة كل كتاب - طباعة سطر فارغ
- الفرز حسب المؤلف باستخدام
AuthorComparatorوطباعة كل كتاب
ستتلقى ثلاثة أسطر من المدخلات، يحتوي كل منها على بيانات الكتاب بالتنسيق: title,author,year
على سبيل المثال: 1984,George Orwell,1949
تذكر استيراد java.util.Objects في Book.java، و java.util.Comparator في ملفات المقارن الخاصة بك، و java.util.ArrayList و java.util.Collections و java.util.Scanner في Main.java.
جرّب بنفسك
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// قراءة ثلاثة كتب من المدخلات
String line1 = scanner.nextLine();
String line2 = scanner.nextLine();
String line3 = scanner.nextLine();
// TODO: تحليل كل سطر لاستخراج العنوان، والمؤلف، والسنة
// تلميح: استخدم split(",") لفصل القيم
// TODO: إنشاء كائنات Book من البيانات التي تم تحليلها
// TODO: إنشاء ArrayList وإضافة الكتب الثلاثة جميعها
// TODO: الفرز باستخدام الترتيب الطبيعي (حسب السنة) وطباعة كل كتاب
// TODO: طباعة سطر فارغ
// TODO: الفرز حسب العنوان باستخدام TitleComparator وطباعة كل كتاب
// TODO: طباعة سطر فارغ
// TODO: الفرز حسب المؤلف باستخدام AuthorComparator وطباعة كل كتاب
}
}جميع دروس 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أنماط التصميم - الجزء الثاني
نمط الأمرنمط المحولنمط المزيننمط طريقة القالبنمط الحالةنمط التركيبنمط المكرر