مراجعة - سجلات الطلاب
جزء من قسم Object Oriented Programming في رحلة C# على Coddy — الدرس 35 من 70.
التحدي
سهللنقم ببناء نظام سجلات طلاب يجمع بين جميع تقنيات الكبسلة (encapsulation) التي تعلمتها في هذا الفصل. ستقوم بإنشاء نظام آمن حيث يتم حماية بيانات الطلاب بشكل صحيح، ويتم التحقق من صحة الدرجات، وتظل معلومات معينة غير قابلة للتغيير بعد إنشائها.
ستقوم بتنظيم الكود الخاص بك عبر ملفين:
Student.cs: قم بإنشاء فئةStudentداخل مساحة الأسماءRecordsوالتي توضح الكبسلة الصحيحة. يجب أن يحتوي الطالب الخاص بك على:- حقل
readonlyباسمName(سلسلة نصية) يمكن الوصول إليه علنًا ولكن لا يمكن تعيينه إلا أثناء الإنشاء. - حقل
readonlyخاص لمعرف الطالب (سلسلة نصية) - يجب ألا يكون هذا الحقل متاحًا مباشرة من الخارج أبدًا. - قائمة خاصة لتخزين الدرجات (أعداد صحيحة).
- خاصية عامة للقراءة فقط
Averageتقوم بحساب وإرجاع متوسط جميع الدرجات، أو0إذا لم تكن هناك درجات. - طريقة عامة
AddGrade(int grade)تقبل فقط الدرجات التي تتراوح بين 0 و 100 (شاملة) - يجب تجاهل الدرجات غير الصالحة بصمت. - طريقة عامة
GetGradeCount()ترجع عدد الدرجات الصالحة التي تم تسجيلها. - طريقة عامة
GetStudentInfo()ترجع سلسلة نصية بالتنسيق"{Name} (ID: {last 4 characters of student ID})"- لاحظ كيف تقوم بكشف نسخة مقنعة فقط من المعرف!
- حقل
Program.cs: في ملفك الرئيسي، قم بإنشاء طالب وأضف عدة درجات لتوضيح كيفية عمل الكبسلة. ستظهر أنه يتم قبول الدرجات الصالحة، ورفض الدرجات غير الصالحة، وحساب المتوسط بشكل صحيح.
ستتلقى خمسة مدخلات:
- اسم الطالب
- معرف الطالب (4 أحرف على الأقل)
- الدرجة الأولى المراد إضافتها (عدد صحيح)
- الدرجة الثانية المراد إضافتها (عدد صحيح، قد تكون غير صالحة مثل -5 أو 150)
- الدرجة الثالثة المراد إضافتها (عدد صحيح)
اطبع المخرجات بهذا التنسيق:
{GetStudentInfo() result}
Grades recorded: {GetGradeCount()}
Average: {Average}على سبيل المثال، إذا كانت المدخلات هي Emma Wilson، و STU12345، و 85، و 150، و 90، فيجب أن تكون المخرجات:
Emma Wilson (ID: 2345)
Grades recorded: 2
Average: 87.5لاحظ كيف تم رفض الدرجة غير الصالحة 150 بصمت، لذلك تم تسجيل درجتين فقط. معرف الطالب محمي - لا يمكن للكود الخارجي رؤية المعرف الكامل أبدًا، فقط النسخة المقنعة من خلال GetStudentInfo(). الاسم قابل للقراءة ولكنه غير قابل للتغيير. هذا هو عمل الكبسلة معًا لإنشاء فئة قوية ومحمية جيدًا!
جرّب بنفسك
using System;
using Records;
class Program
{
public static void Main(string[] args)
{
// قراءة المدخلات
string name = Console.ReadLine();
string studentId = Console.ReadLine();
int grade1 = Convert.ToInt32(Console.ReadLine());
int grade2 = Convert.ToInt32(Console.ReadLine());
int grade3 = Convert.ToInt32(Console.ReadLine());
// TODO: إنشاء كائن Student باستخدام name و studentId
// TODO: إضافة جميع الدرجات الثلاث باستخدام طريقة AddGrade
// TODO: طباعة المخرجات بالتنسيق المطلوب:
// {نتيجة GetStudentInfo()}
// الدرجات المسجلة: {GetGradeCount()}
// المتوسط: {Average}
}
}
جميع دروس 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 Injection