نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.
مفهوم البرمجة كائنية التوجه (OOP: Blueprint vs Object) 🏛️ من الإجرائية إلى الكائنية: في البرمجة الإجرائية كنا نكتب متغيرات متناثرة ودوال منفصلة؛ في OOP نجمع البيانات والوظائف داخل كيان واحد متكامل يمثل العالم الحقيقي. التشبيه الذهبي (Blueprint vs Building): الفئة (Class) هي الرسم الهندسي أو القالب النظري (Blueprint)، والكائن (Object) هو المنتج الحقيقي الملموس المصنوع في الذاكرة بناءً على ذلك القالب. المزايا المعمارية الكبرى: محاكاة الواقع الحقيقي، تجميع البيانات وسلوكياتها معاً، وسهولة التوسع وإعادة الاستخدام وحماية البيانات. تشريح الفئة وبناء الكائنات في الذاكرة (Class Anatomy & Instantiation) 🧱 أركان الفئة الأساسية: اسم الفئة (PascalCase مثل ElectricCar)، الحقول والبيانات (Fields) لحفظ الحالة، والسلوكيات والدوال (Methods) لتنفيذ الأفعال. إنشاء الكائن بالكلمة المفتاحية new: كود ElectricCar myCar = new ElectricCar(); يقوم بحجز الكائن في الذاكرة. كواليس الذاكرة الحقيقية (Stack vs Heap): اسم المتغير myCar يعيش في الـ Stack كمؤشر مرجعي، بينما جسم الكائن وبياناته الحقيقية تُحجز داخل الـ Heap. معامل النقطة (.): يُستخدم للوصول إلى حقول ودوال الكائن مثل myCar.Drive(). مفهوم البرمجة كائنية التوجه (OOP: Blueprint vs Object) 🏛️ من الإجرائية إلى الكائنية: في البرمجة الإجرائية كنا نكتب متغيرات متناثرة ودوال منفصلة؛ في OOP نجمع البيانات والوظائف داخل كيان واحد متكامل يمثل العالم الحقيقي. التشبيه الذهبي (Blueprint vs Building): الفئة (Class) هي الرسم الهندسي أو القالب النظري (Blueprint)، والكائن (Object) هو المنتج الحقيقي الملموس المصنوع في الذاكرة بناءً على ذلك القالب. المزايا المعمارية الكبرى: محاكاة الواقع الحقيقي، تجميع البيانات وسلوكياتها معاً، وسهولة التوسع وإعادة الاستخدام وحماية البيانات. تشريح الفئة وبناء الكائنات في الذاكرة (Class Anatomy & Instantiation) 🧱 أركان الفئة الأساسية: اسم الفئة (PascalCase مثل ElectricCar)، الحقول والبيانات (Fields) لحفظ الحالة، والسلوكيات والدوال (Methods) لتنفيذ الأفعال. إنشاء الكائن بالكلمة المفتاحية new: كود ElectricCar myCar = new ElectricCar(); يقوم بحجز الكائن في الذاكرة. كواليس الذاكرة الحقيقية (Stack vs Heap): اسم المتغير myCar يعيش في الـ Stack كمؤشر مرجعي، بينما جسم الكائن وبياناته الحقيقية تُحجز داخل الـ Heap. معامل النقطة (.): يُستخدم للوصول إلى حقول ودوال الكائن مثل myCar.Drive(). محددات الوصول ومبدأ التغليف (Encapsulation: Public vs Private) 🛡️ محددات الوصول الأساسية: عام (public) متاح للاستخدام من أي مكان، وخاص (private) محصور ومحمي تماماً داخل الفئة فقط. كابوس الحقول العامة المكشوفة: لو تركنا الحقل عاماً public int Battery = 100; يستطيع أي مبرمج كتابة car.Battery = -999; أو 5000% مما يدمر سلامة النظام! الحل بمبدأ التغليف (Encapsulation): تشفير الحقل بالـ private int _battery; ومنع التعديل العشوائي لحماية الحالة الداخلية للكائن من الانهيار. دوال الإنشاء والكلمة المفتاحية this (Constructors & this Keyword) ⚙️ دالة الإنشاء (Constructor): دالة خاصة تُستدعى تلقائياً لحظة ولادة الكائن لتهيئة بياناته، وتحمل نفس اسم الفئة تماماً وبدون أي نوع إرجاع (حتى void ممنوعة!). أنواع دوال الإنشاء: دالة مخصصة بالمعاملات (Parameterized) لإجبار المستخدم على تمرير قيم أولية، ودالة افتراضية (Default Constructor) تبدأ بقيم قياسية. الكلمة المفتاحية this: مؤشر يشير إلى النسخة الحالية من الكائن، وتُستخدم للتفريق بين اسم المعامل الممرر وحقل الفئة: this.Brand = brand; الخصائص الذكية وحماية البيانات (Properties: Auto, Full & Read-Only) 💎 الخصائص (Properties): البوابات الذكية التي تدمج مرونة الحقول مع أمان الدوال. الخصائص التلقائية (Auto-Implemented): public string Brand { get; set; } سريعة ومختصرة للبيانات الآمنة. الخصائص الكاملة (Full Properties): تحتوي على get و set مع كود تحقق (Validation) يمنع الأرقام السالبة أو تجاوز 100%. خصائص القراءة فقط (Read-Only): public int TotalDistance { get; private set; } تُقرأ من الخارج ولا تتعدل إلا بدوال الفئة الداخلية. دوال الإنشاء والكلمة المفتاحية this (Constructors & this Keyword) ⚙️ دالة الإنشاء (Constructor): دالة خاصة تُستدعى تلقائياً لحظة ولادة الكائن لتهيئة بياناته، وتحمل نفس اسم الفئة تماماً وبدون أي نوع إرجاع (حتى void ممنوعة!). أنواع دوال الإنشاء: دالة مخصصة بالمعاملات (Parameterized) لإجبار المستخدم على تمرير قيم أولية، ودالة افتراضية (Default Constructor) تبدأ بقيم قياسية. الكلمة المفتاحية this: مؤشر يشير إلى النسخة الحالية من الكائن، وتُستخدم للتفريق بين اسم المعامل الممرر وحقل الفئة: this.Brand = brand; الخصائص الذكية وحماية البيانات (Properties: Auto, Full & Read-Only) 💎 الخصائص (Properties): البوابات الذكية التي تدمج مرونة الحقول مع أمان الدوال. الخصائص التلقائية (Auto-Implemented): public string Brand { get; set; } سريعة ومختصرة للبيانات الآمنة. الخصائص الكاملة (Full Properties): تحتوي على get و set مع كود تحقق (Validation) يمنع الأرقام السالبة أو تجاوز 100%. خصائص القراءة فقط (Read-Only): public int TotalDistance { get; private set; } تُقرأ من الخارج ولا تتعدل إلا بدوال الفئة الداخلية. أساليب وسلوكيات الكائن (Methods & State Mutation) ⚡ السلوكيات (Methods): الدوال التي تُعطي الكائن حياته وتتحكم في تغيير حالته المحمية وفق قواعد منطقية محكمة. دالة القيادة Drive(distance): تزيد المسافة المقطوعة، تستهلك البطارية بالنسبة المحسوبة، وتوقف السيارة إذا نفدت الطاقة تماماً. دالة الشحن Charge(): تعيد ملء بطارية السيارة إلى 100%. دالة إرجاع التقارير DisplayStatus(): تطبع تقريراً منسقاً ببيانات الكائن ومسافته وشحن بطاريته. سلوك الأنواع المرجعية في الذاكرة (Reference Types: Aliasing in Heap) 🧠 الكائنات هي أنواع مرجعية (Reference Types): المتغير لا يحمل محتوى الكائن بنفسه، بل يحمل عنوان مكانه الفيزيائي في الـ Heap! مفاجأة النسخ (Reference Aliasing): السطر ElectricCar sharedCar = myCar; لا يصنع سيارة جديدة، بل يصنع مفتاحاً ثانياً لنفس السيارة في الذاكرة! النتيجة العملية: قيادة السيارة عبر sharedCar.Drive(25); تزيد المسافة في myCar أيضاً، لأنهما يشيران لنفس الكائن تماماً في الرام. دوال الإنشاء الأساسية الحديثة (Primary Constructors in C# 12) 🚀 الحداثة والرشاقة في C# الحديثة: تعريف معاملات الإنشاء مباشرة في رأس الفئة بجانب اسمها! الصيغة المختصرة: public class SmartDrone(string modelName, double price) الفوائد الكبرى: التخلص من الأكواد المكررة والروتينية (Boilerplate Code)، وإنتاج كود نظيف ورشيق وسهل الصيانة. الاستخدام المثالي: الفئات الخفيفة، الخدمات، ونماذج نقل البيانات (DTOs). سلوك الأنواع المرجعية في الذاكرة (Reference Types: Aliasing in Heap) 🧠 الكائنات هي أنواع مرجعية (Reference Types): المتغير لا يحمل محتوى الكائن بنفسه، بل يحمل عنوان مكانه الفيزيائي في الـ Heap! مفاجأة النسخ (Reference Aliasing): السطر ElectricCar sharedCar = myCar; لا يصنع سيارة جديدة، بل يصنع مفتاحاً ثانياً لنفس السيارة في الذاكرة! النتيجة العملية: قيادة السيارة عبر sharedCar.Drive(25); تزيد المسافة في myCar أيضاً، لأنهما يشيران لنفس الكائن تماماً في الرام. دوال الإنشاء الأساسية الحديثة (Primary Constructors in C# 12) 🚀 الحداثة والرشاقة في C# الحديثة: تعريف معاملات الإنشاء مباشرة في رأس الفئة بجانب اسمها! الصيغة المختصرة: public class SmartDrone(string modelName, double price) الفوائد الكبرى: التخلص من الأكواد المكررة والروتينية (Boilerplate Code)، وإنتاج كود نظيف ورشيق وسهل الصيانة. الاستخدام المثالي: الفئات الخفيفة، الخدمات، ونماذج نقل البيانات (DTOs). أشهر فخاخ الفئات والكائنات (OOP Pitfalls) 🛑 فخ المؤشر الفارغ (NullReferenceException): إعلان متغير دون تهيئته بـ new ثم محاولة استدعاء دواله! الوقاية: فحص الأمان if (car != null) أو car?.Drive(). فخ كسر التغليف (Broken Encapsulation): ترك الحقول الحساسة public بدلاً من حمايتها بالخصائص، مما يسبب حالات بيانات مستحيلة. فخ التعديل غير المقصود (Unintended Shared Mutation): تمرير الكائن لدالة وتعديله دون إدراك أن التعديل ينعكس على النسخة الأصلية لدى الجميع.