هيكلة المشروع
جزء من قسم Object Oriented Programming في رحلة C# على Coddy — الدرس 62 من 70.
التحدي
سهللنقم بإرساء الأساس لمشروع نظام المكتبة الخاص بك! ستقوم بإنشاء هيكل الملفات الأساسي الذي سينمو ليصبح تطبيقاً كاملاً لإدارة المكتبات خلال الدروس القادمة.
ستقوم بتنظيم الكود الخاص بك عبر أربعة ملفات، لكل منها مسؤولية محددة:
Book.cs: سيحتوي هذا الملف على نموذج الكتاب (Book model). في الوقت الحالي، قم بإنشاء فئةBookداخل مساحة الأسماءLibrarySystemمع ثلاث خصائص تلقائية التنفيذ (auto-implemented properties):Title(string)، وAuthor(string)، وIsAvailable(bool، وتكون قيمتها الافتراضيةtrue). أضف منشئاً (constructor) يأخذ العنوان والمؤلف كمعاملات.User.cs: سيحتوي هذا الملف على نموذج المستخدم (User model). قم بإنشاء فئةUserفي نفس مساحة الأسماء مع خاصيتين:Name(string) وMemberId(int). قم بتضمين منشئ يقبل كلتا القيمتين.Library.cs: هذا هو المكان الذي سيعيش فيه منطقك الأساسي. قم بإنشاء فئةLibraryمع خاصيةName(string) ومنشئ لتعيينها. أضف طريقة تسمىGetInfo()تعيد سلسلة نصية بتنسيق"{Name} Library System Initialized".Program.cs: اجمع كل شيء معاً هنا. هذه هي نقطة الدخول الخاصة بك حيث ستنشئ مثيلات (instances) من فئاتك وتتحقق من أن الهيكل يعمل بشكل صحيح.
ستتلقى ثلاثة مدخلات:
- اسم المكتبة
- إدخال كتاب بتنسيق
title|author - إدخال مستخدم بتنسيق
name|memberId
قم بإنشاء مثيل Library بالاسم المعطى، ومثيل Book بالعنوان والمؤلف المقدمين، ومثيل User بالاسم ومعرف العضو المقدمين. ثم اطبع ثلاثة أسطر:
- نتيجة استدعاء
GetInfo()على مكتبتك - معلومات الكتاب بتنسيق
Book: {Title} by {Author} - Available: {IsAvailable} - معلومات المستخدم بتنسيق
User: {Name} (ID: {MemberId})
على سبيل المثال، إذا كانت المدخلات هي:
City Central
The Great Gatsby|F. Scott Fitzgerald
Alice Johnson|1001يجب أن يكون المخرج:
City Central Library System Initialized
Book: The Great Gatsby by F. Scott Fitzgerald - Available: True
User: Alice Johnson (ID: 1001)يتبع هذا الهيكل مبدأ المسؤولية الواحدة (Single Responsibility Principle) - حيث يتعامل كل ملف مع جانب محدد واحد. في الدروس القادمة، ستوسع هذه الفئات بمنطق الاستعارة، ووظائف البحث، وواجهة وحدة تحكم كاملة!
جرّب بنفسك
using System;
namespace LibrarySystem
{
class Program
{
public static void Main(string[] args)
{
// قراءة المدخلات
string libraryName = Console.ReadLine();
string bookInput = Console.ReadLine();
string userInput = Console.ReadLine();
// تحليل مدخلات الكتاب (التنسيق: title|author)
string[] bookParts = bookInput.Split('|');
string bookTitle = bookParts[0];
string bookAuthor = bookParts[1];
// تحليل مدخلات المستخدم (التنسيق: name|memberId)
string[] userParts = userInput.Split('|');
string userName = userParts[0];
int memberId = Convert.ToInt32(userParts[1]);
// TODO: إنشاء مثيل Library باستخدام اسم المكتبة
// TODO: إنشاء مثيل Book باستخدام العنوان والمؤلف
// TODO: إنشاء مثيل User باستخدام الاسم و memberId
// TODO: طباعة معلومات المكتبة باستخدام GetInfo()
// TODO: طباعة معلومات الكتاب بالتنسيق: Book: {Title} by {Author} - Available: {IsAvailable}
// TODO: طباعة معلومات المستخدم بالتنسيق: User: {Name} (ID: {MemberId})
}
}
}
جميع دروس Object Oriented Programming
1أساسيات OOP
الملفات الخارجيةNamespaces والتوجيهاتمقدمة في Classes و Objectsالكلمة المفتاحية 'this'Methods والمعاملاتFields مقابل PropertiesConstructorsObject Initializersمراجعة - آلة حاسبة بسيطة4الوراثة
صيغة الوراثة الأساسية (:)الكلمة المفتاحية 'base'الكلمات المفتاحية Virtual و Overrideالأصناف المختومة (Sealed Classes)الفئة الأساسية 'object'مراجعة - هيكلية الموظفين7ميزات متقدمة
تحميل العوامل (Operator Overloading)المفهرسات (Indexers (this[]))إعادة تعريف ()ToStringدوال التوسعة (Extension Methods)ملخص - Custom List2الخصائص والأعضاء الساكنة (Static Members)
الخصائص المطبقة تلقائيًا (Auto-Implemented Properties)خصائص القراءة فقط والكتابة فقطالحقول والدوال الساكنة (Static)الفئات الساكنة (Static Classes)الأعضاء ذات البنية التعبيرية (Expression-Bodied Members)5تعدد الأشكال والواجهات (Polymorphism & Interfaces)
تعدد الأشكال: وقت التجميع مقابل وقت التشغيلالواجهة مقابل الفئة المجردة (Abstract Class)الواجهات المتعددةالواجهات الصريحةUpcasting و Downcastingملخص - حاسبة الأشكال8مفاهيم البرمجة كائنية التوجه (OOP) المتقدمة
التركيب بدلاً من الوراثةالـ Generics (الأصناف والدوال)الـ Delegates والأحداثالـ Attributes والـ Reflectionواجهة IDisposable وجملة usingأساسيات Dependency Injection3بنية الكلاسات
بيانات الـ Instance مقابل البيانات الـ Staticالكلمات المفتاحية 'readonly' و 'const'الحقول الخلفية (Backing Fields)مراجعة - مدير الحساب البنكي6التغليف
معدلات الوصولالخصائص من أجل التغليفتنفيذ إخفاء البياناتأنماط عدم القابلية للتغييرمراجعة - سجلات الطلاب12مشروع: نظام المكتبة
هيكلة المشروعنماذج الكتاب والمستخدم