نظرة عامة على المشروع وتصميم UML
جزء من قسم Object Oriented Programming في رحلة Java على Coddy — الدرس 77 من 87.
التحدي
سهللنبدأ مشروع نظام إدارة المكتبة من خلال بناء الأساس—فئات الكيانات الأساسية التي سيعتمد عليها كل شيء آخر. يركز هذا التحدي الأول على إنشاء فئات Book و User منظمة بشكل جيد تتبع تصميم UML من الدرس.
ستقوم بتنظيم الكود الخاص بك عبر ثلاثة ملفات:
Book.java: قم بإنشاء فئةBookالتي تمثل كتاباً في المكتبة. يجب أن يحتوي كل كتاب على حقول خاصة (private) لـisbn(String)، وtitle(String)، وauthor(String)، وisAvailable(boolean، وتكون قيمته الافتراضيةtrue). قم بتضمين منشئ (constructor) يقبل isbn و title و author. وفر طرق جلب (getter methods) مناسبة لجميع الحقول، وطريقة تعيين (setter) لـisAvailable. أضف طريقةgetDetails()التي تعيد سلسلة نصية منسقة:[isbn] title by author.User.java: قم بإنشاء فئةUserالتي تمثل عضواً في المكتبة. يجب أن يحتوي كل مستخدم على حقول خاصة لـid(String) وname(String). قم بتضمين منشئ يقبل كلتا القيمتين، ووفر طرق جلب لكل حقل. أضف طريقةtoString()التي تعيد:User[id]: name.Main.java: اجمع فئاتك معاً لإثبات أنها تعمل بشكل صحيح. ستتلقى أربعة مدخلات: ISBN الخاص بالكتاب، وعنوانه، ومؤلفه، ثم معرف المستخدم واسمه.قم بإنشاء
Bookباستخدام المدخلات الثلاثة الأولى وUserباستخدام المدخلين الأخيرين. اطبع تفاصيل الكتاب باستخدامgetDetails()، ثم اطبع ما إذا كان الكتاب متاحاً بالتنسيقAvailable: trueأوAvailable: false. أخيراً، اطبع المستخدم باستخدام طريقةtoString()الخاصة به.
ستتلقى خمسة مدخلات بالترتيب: ISBN (String)، و title (String)، و author (String)، و user ID (String)، و user name (String).
على سبيل المثال، مع المدخلات 978-0-13-468599-1، و Effective Java، و Joshua Bloch، و U001، و Alice Smith، سيكون مخرجك هو:
[978-0-13-468599-1] Effective Java by Joshua Bloch
Available: true
User[U001]: Alice Smithستكون هذه الفئات التأسيسية بمثابة لبنات البناء لنظام إدارة المكتبة بالكامل. في الدروس القادمة، ستقوم بتوسيعها بوظائف الاستعارة، وإمكانيات البحث، والمزيد!
جرّب بنفسك
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// قراءة معلومات الكتاب
String isbn = scanner.nextLine();
String title = scanner.nextLine();
String author = scanner.nextLine();
// قراءة معلومات المستخدم
String userId = scanner.nextLine();
String userName = scanner.nextLine();
// TODO: إنشاء كائن Book باستخدام isbn و title و author
// TODO: إنشاء كائن User باستخدام userId و userName
// TODO: طباعة تفاصيل الكتاب باستخدام getDetails()
// TODO: طباعة ما إذا كان الكتاب متاحاً (التنسيق: "Available: true" أو "Available: false")
// TODO: طباعة المستخدم باستخدام toString()
}
}
جميع دروس 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مراجعة - الترتيب المخصص10معالجة الاستثناءات في OOP
التسلسل الهرمي لفئات الاستثناءاتالاستثناءات المخصصةالأخطاء من نوع Checked مقابل Uncheckedنمط Try With Resourcesمراجعة - Validated User13مشروع: إدارة المكتبة
نظرة عامة على المشروع وتصميم UMLفئات الكتاب والمستخدم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أنماط التصميم - الجزء الثاني
نمط الأمرنمط المحولنمط المزيننمط طريقة القالبنمط الحالةنمط التركيبنمط المكرر