‫في هذا الفيديو ، سوف تتعرف على الوراثة بلغة C الحادة أو في البرمجة بشكل عام.
‫سأحاول أن أبقيه بسيطًا للغاية لأنه قد يصبح معقدًا للغاية إذا نظرت إليه لأن هناك الكثير
‫مما يحدث.
‫لكنني سأبسطها قدر الإمكان لأن فكرة الوراثة هي حقًا قابلية إعادة استخدام
‫الكود.
‫وهذا لا يسمح لنا بتقليل الكود الخاص بنا فحسب ، بل يقلل أيضًا من التعليمات البرمجية للمطورين الآخرين أو حتى
‫مساحات الأسماء الأخرى مباشرةً دون الحاجة إلى كتابة الكثير من التعليمات البرمجية يدويًا مرارًا وتكرارًا ، وهو
‫ما كان موجودًا من قبل.
‫وهذا بالفعل يقلل من التعليمات البرمجية المتكررة أو الزائدة عن الحاجة.
‫لذا فإن فكرة الوراثة هي في الأساس مفهوم أساسي للبرمجة الشيئية.
‫يسمح لك بتعريف فئة فرعية تعيد استخدام أو ترث أو توسع أو تعدل سلوك فئة الأصل.
‫تسمى الفئة التي يتم توريث أعضائها بالفئة الأساسية.
‫الفئة التي ترث أعضاء الفئة الأساسية تسمى الفئة المشتقة.
‫حسنًا ، ماذا يعني هذا؟
‫حسنًا ، بعبارات بسيطة ، إذا كان لديك أكثر من فئة واحدة بنفس الكود أو الوظيفة
‫، لكنها تختلف قليلاً ، فيمكننا في الواقع وضع هذا الرمز المكرر أو الزائد في
‫فئة منفصلة ثم جعل هذا الفصل يرث منه.
‫يمكن أن يكون هذا الرمز وظيفة الطريقة ، إذا جاز التعبير ، أو الخصائص التي هي سمات
‫فئاتنا.
‫لنلق نظرة على مثال.
‫وبالتالي قمت بإنشاء مشروع جديد هنا ، والذي أسميه عرض التوريث.
‫حسنًا ، فلنبدأ ونلقي نظرة على هذا المثال.
‫لذلك عادة عندما تعمل مع فصول متعددة ، يمكنك المضي قدمًا وإنشاء فصل دراسي جديد هنا.
‫لذلك دعونا نفعل ذلك هنا أيضًا.
‫يمكنك بالطبع إنشاء الفصل في نفس الملف ، لكن هذا ليس ممارسة جيدة.
‫لذلك دعونا نمضي قدمًا ونطلق على هذا الفصل راديو.
‫حسنا.
‫إذن ها هو الفصل ، لنقل إعلان إذاعي.
‫والآن لدينا هذه الفئة الشعاعية الموجودة في نفس مساحة الاسم.
‫إذن ، كلا الفئتين ، البرنامج C هو المكان الذي لدينا فيه طريقتنا الرئيسية ، وهي نقطة
‫البداية لتطبيقنا والفئة الشعاعية في نفس الملف.
‫لذلك سيكون لدينا فصلين.
‫سيكون أحدهما راديو والآخر تلفزيون.
‫لنفترض فقط أن لدينا بعض الخصائص.
‫على سبيل المثال ، منطقية تحدد حالة الراديو قيد التشغيل ، ثم العلامة التجارية
‫للراديو.
‫فهل هي باناسونيك أو أي ماركات أخرى موجودة؟
‫ومن ثم لدينا مُنشئ بسيط هنا ، لذا يجب أن يكون لديك بالتأكيد فهم للمفاهيم الأساسية
‫للفئات.
‫إذا كنت تريد أن تفهم الميراث بشكل كامل ، فهذا بشكل عام شيء أود أن أوصي بفهمه قبل
‫الوصول إلى الميراث لأنه يبني فوق بعضها البعض.
‫تمام.
‫إذن فأنا أريد أن يكون لدي طريقتان لأن هذه ستكون الوظيفة في الأساس.
‫لذلك ، سيقوم أحدهم بتشغيل الراديو ، وستكون طريقة التشغيل والأخرى ستكون طريقة إيقاف
‫التشغيل.
‫لذا يمكنك تشغيل الراديو وإيقافه أو إيقاف تشغيله باستخدام هاتين الطريقتين.
‫وبعد ذلك سيكون لدينا طريقة أخرى تسمح لنا بالاستماع إلى الراديو.
‫لذلك لدينا هذه الطريقة هنا تسمى الاستماع للراديو وسوف يتم التحقق منها.
‫هل الراديو قيد التشغيل الآن؟
‫إذن هل هذا موجود هنا ، هذا منطقي ، هل سيكون في الواقع صحيحًا؟
‫وإذا كان هذا صحيحًا ، فيمكننا الاستماع إلى الراديو والطريقة التي سنشير بها إلى
‫أننا نستمع إلى الراديو ستكون فقط مع عبارة خط أحمر لوحدة التحكم تقول الاستماع
‫إلى الراديو وإلا سنقوم بطباعة هذا رسالة خطأ تفيد بأن الراديو مغلق ، قم بتشغيله أولاً.
‫تمام.
‫لذا قبل أن نتمكن من الاستماع إليه ، نحتاج إلى تشغيله.
‫حسنا.
‫إذن هذا هو الراديو الخاص بنا الآن.
‫الآن ، تخيل أن لديك فصلًا آخر ، سيكون.
‫التلفاز.
‫لذلك دعونا نمضي قدمًا وننشئ فصلًا جديدًا.
‫وبالتالي يمكنك الانتقال هنا لإضافة فئة ثم إضافتها وإعطاء هذا الفصل اسمًا.
‫سأسميه التلفزيون.
‫والآن في هذا الفصل ، سأمضي قدمًا وأمتلك بعض الخصائص المشابهة لما لدينا هنا.
‫لذلك ، في الأساس ، سأحصل أيضًا على الحالة إذا تم تشغيلها أو إيقاف تشغيلها.
‫لذلك دعونا نضيف هاتين الخاصيتين هنا.
‫ثم سيكون لدي مُنشئ بسيط يسمح لي بتعيين هذه القيم عندما أقوم بإنشاء كائن جديد من
‫التلفزيون.
‫لذا فإن السحب هنا بالإضافة إلى العلامة التجارية الخيطية ، التي تحدد الخصائص.
‫بعد ذلك ، سأحصل على الطرق الفردية الأخرى حتى أتمكن من تشغيل التلفزيون وإيقاف تشغيله على غرار ما فعلته في الراديو
‫حتى أتمكن من نسخ هذا الرمز بشكل أساسي.
‫لكن الأمر سيكون مختلفًا بعض الشيء لأن لدينا التعليقات التي ذكرت الراديو هنا ، ولكن الآن سيكون هذا
‫تلفزيونًا.
‫لذلك ستعمل هذه الطريقة على تشغيل التلفزيون وستقوم هذه الطريقة بإيقاف تشغيله أو إيقاف تشغيله.
‫إذن نحن بحاجة فقط إلى طريقة أخرى تسمح لنا بمشاهدة التلفزيون وستقوم بشيء مشابه جدًا لما يفعله
‫الراديو الخاص بنا.
‫يسمح لنا بمشاهدة التلفزيون فقط إذا كان التلفزيون قيد التشغيل.
‫إذا تم إيقاف تشغيله ، فسنحتاج إلى تشغيل التلفزيون أولاً.
‫حسنًا ، لدينا الآن هاتان الفئتان ، وإذا نظرت إليهما ، فهما متشابهان إلى حد كبير.
‫لذلك هناك الكثير من الأشياء التي هي نفسها تمامًا ، لأن هذه الخاصية موجودة بالإضافة إلى هذه العلامة
‫التجارية ، فهي متشابهة.
‫لدينا هذه الرموز في كلا الفئتين ، لذلك لدينا في الأساس كود فائض عن الحاجة.
‫كان علينا نسخ ولصق مجموعة من التعليمات البرمجية وهي متشابهة إلى حد ما.
‫إذن كيف يمكننا عمل ذلك بحيث لا نضطر إلى نسخ ولصق الكثير من التعليمات البرمجية وإعادة كتابة التعليمات البرمجية والحصول على رمز فائض
‫بشكل أساسي؟
‫حسنًا ، هذا هو بيت القصيد من مفهوم الميراث.
‫لذا فإن الميراث يأتي للإنقاذ.
‫يمكننا حل هذه المشكلة عن طريق إنشاء فئة ثالثة تسمى الجهاز الكهربائي.
‫سيحتوي هذا على جميع الوظائف والخصائص المشتركة لجهاز كهربائي لدينا.
‫لذلك دعونا ننظر إلى هؤلاء.
‫ما هي تلك التي لدينا هي نفسها؟
‫إذن ما هي الخصائص المتشابهة في جهاز التلفزيون والراديو؟
‫حسنًا ، في حالتنا جميع الخصائص ، في الواقع ، لكن لا يجب أن تكون جميعها.
‫في هذه الحالة سيكون السبب هو أنه ليس لدينا المزيد من الخصائص.
‫لكن الخاصيتين اللتين لدينا ستكونان هي نفسها.
‫So is on and brand كلاهما خصائص موجودة في التلفزيون وكذلك في الراديو.
‫لذا يجب أن يمتلك فصلنا الجديد هاتين الخاصيتين ومن ثم لدينا الطريقتان اللتان تسمحان لنا
‫بتشغيل التلفزيون ، وتشغيل الراديو أو إيقاف تشغيل الراديو وإيقاف تشغيل التلفزيون أيضًا.
‫لذا بالنسبة لك ، تمرن قليلًا إذا كنت ترغب في تجربة ذلك ، لأنني أفترض أنك لست محترفًا وبرمجًا في
‫تلك المرحلة ، لكنك ستشعر بثقة أكبر عند تجربة ذلك.
‫لذا انطلق وأنشئ فصلًا يحتوي على كل هذه الخصائص وهذه الطرق التي يمكننا أو التي يتم مشاركتها بين الفئتين
‫، قم بإنشائها في فئة منفصلة واستدعاء هذه الفئة جهاز كهربائي.
‫في الواقع ، يمكنك تسميتها كيفما تشاء ، لكنني سأسميها جهازًا كهربائيًا مثل هذا.
‫تمام.
‫لذلك أتمنى أن تكون قد مررت بالفيديو وجربته.
‫لذلك سأقوم بإنشاء فصل جديد ووضع طريقة ، بالطبع ، كما ترى ، يمكنك استخدام حالة التحكم في
‫الاختصار ، لذلك دعونا نفعل ذلك.
‫في هذه الحالة ، Control K C وهذا سيفتح هذه النافذة هنا ويسمح لي بتغييرها إلى كهربائي.
‫جهاز مثل ذلك.
‫والآن سيكون لهذه الفئة الخصائص التي نشاركها بين الفئتين الأخريين.
‫لذا اسمحوا لي أن أضعهم هنا.
‫القيمة المنطقية التي تحدد حالة الجهاز الكهربائي هل تم تشغيلها أم لا؟
‫ثم العلامة التجارية للجهاز.
‫وبعد ذلك بالطبع ، نحتاج إلى مُنشئ.
‫إذن الجهاز الكهربائي قيد التشغيل.
‫وأخيرًا ، لدينا برنت الوظائف التي تتمثل في الطرق.
‫لذلك كلما كان لديك وظائف ، يمكنك وضعها في طرق والوظيفة هي تشغيل شيء ما
‫أو إيقاف تشغيله.
‫لذلك كلما حدث فعل ما مع فصلك الدراسي أو مع الكائن الذي تستخدمه ، ستحتاج إلى
‫استخدام الأساليب.
‫وهذا ما نفعله هنا.
‫لذلك نحن نستخدم طريقة لتشغيل شيء ما ، في هذه الحالة الجهاز الكهربائي ، وإيقاف تشغيله أو
‫تشغيله وإيقاف تشغيله.
‫تمام.
‫هذا ما نفعله هنا أساسًا.
‫والآن بعد أن أصبح لدينا خصائصنا وأساليبنا المشتركة في فصل واحد ، فلنجعل
‫الطبقة الأخرى من فصول التلفزيون والراديو ترث من هذه الفئة أو بعبارة أخرى ، نوسع هذه الفئة.
‫إذن هذا مجرد مصطلح مختلف يمكنك استخدامه هنا.
‫لذا فإن جهاز التلفزيون والراديو الخاص بنا سيوسعان الآن فئة الأجهزة الكهربائية.
‫فكيف يمكننا فعل ذلك؟
‫حسنًا ، لنبدأ بالراديو ، لأن التلفزيون سينتهي.
‫تحد صغير لك.
‫ماذا؟
‫سيكون عليك أن تفعل ذلك بنفسك.
‫هنا تستخدم النقطتين ثم اسم الفئة التي تريد أن ترثها من الجهاز الكهربائي هو الفئة
‫التي سيرثها الراديو الآن ، أو سوف يوسع الراديو الخاص بنا وظائف فئة الجهاز
‫الكهربائي.
‫تمام.
‫إذن كولون ثم اسم الفصل الذي تريد تمديده.
‫والمهم ، بالطبع ، أن هذه الفئة يجب أن تكون إما في نفس مساحة الاسم أو أن
‫تضيف مساحة الاسم هنا.
‫لذلك في حالتنا ، نحن لا نستخدم أيًا من هؤلاء ، نحن فقط نستخدم النظام ، ولكن نظرًا لأننا في نفس
‫مساحة الاسم ، لذلك يقول الجهاز الكهربائي أن الفصل في نفس مساحة الاسم مثل الراديو والتلفزيون.
‫يمكننا أن نفعل ذلك على هذا النحو ، ولكن يمكننا الآن أن نرى أن منطقتنا المنطقية لديها تحذير هنا.
‫لذلك عندما تحوم فوق المعرّف الخاص بك ، سيخبرك Visual Studio أن Radio DOT في حالة إخفاء ، الأجهزة الكهربائية الأعضاء
‫الموروثة قيد استخدام الكلمة الرئيسية الجديدة إذا كان الإخفاء مقصودًا.
‫لذلك نحن في الأساس نستخدم نفس اسم الخاصية وهنا تريد تجنب ذلك لأن لديك هذه الخاصية ، إذا جاز
‫التعبير ، لأنك ترثها من الجهاز الكهربائي.
‫لذا يمكنك الآن إخفاءه أو تجاوزه بهذا الذي قمت بإنشائه هنا إذا كنت تريد استخدام شيء ما بنفس الاسم
‫بالضبط ، ولكن يجب أن يتصرف بطريقة مختلفة ، ثم يمكنك القيام بذلك.
‫على الرغم من أن هذه ليست ممارسة جيدة تعتمد بالضرورة على حالة الاستخدام ، بالطبع.
‫هذا لأن فئة الراديو تحتوي الآن على خاصيتين بنفس الاسم نخفيه أو نغطيهما.
‫هذا مصطلح مختلف هنا.
‫الخصائص التي ورثناها من فئة الأجهزة الكهربائية.
‫لذلك سنقوم بإزالة الكود الزائد الذي لم نعد بحاجة إليه.
‫لذلك دعونا نتخلص من ذلك.
‫وبالطبع فإن الكود المكرر لا يقتصر فقط على تعيين أو إنشاء الخصائص ولكن أيضًا باستخدام هذه
‫الطرق هنا.
‫لذلك دعونا نتخلص من هؤلاء أيضًا.
‫الآن لدينا خطأ آخر يظهر هنا وهو مُنشئ الراديو الذي يبدو أنه لديه مشكلة.
‫وتقول إنه لا توجد حجة بالنظر إلى أن المعلمة الرسمية المطلوبة موجودة على الجهاز الكهربائي ، أو الجهاز
‫الكهربائي ، أو سلسلة البركة.
‫إذن ما هو هذا الجهاز الكهربائي أو الجهاز الكهربائي؟
‫سلسلة البلياردو حسنًا ، إنها هذه هنا.
‫إنه هذا المُنشئ.
‫نظرًا لأن خصائصنا تأتي من الفئة الأساسية وتحتوي الفئة الأساسية الخاصة بنا على مُنشئ ، يمكننا استخدام الكلمة
‫الأساسية الأساسية لتمرير الفئة الأساسية الخاصة بنا.
‫إنها حجج المُنشئ لأن هاتين الخاصيتين الوحيدتين لدينا وسيكون للمنشئ الخاص بنا في
‫الفصل الفرعي جسمًا فارغًا.
‫لذلك هذا كلام كثير.
‫ولكن ما يعنيه هذا أساسًا هو أن مُنشئ الراديو الخاص بنا ليس أكثر
‫تعقيدًا من الأساس ، يمكننا فقط المضي قدمًا والقول القاعدة وهنا على والعلامة التجارية.
‫مثل ذلك.
‫وبعد ذلك لا نحتاج إلى جثة لجهاز الراديو الخاص بنا.
‫لذلك سيقول هذا المُنشئ بشكل أساسي ، يرجى تمرير علامة التشغيل بالإضافة إلى خصائص
‫العلامة التجارية التي يتم تمريرها إلى كائن الراديو والتي عند إنشائها ، قم بتمريرها إلى مُنشئ الجهاز الكهربائي
‫لأن الراديو الخاص بنا في الأساس يرث من الجهاز الكهربائي وبالتالي يمكننا القيام به حتى نتمكن من تمريره
‫إلى جهاز كهربائي.
‫وما سيفعله ذلك هو أنه سيعمل بشكل أساسي على تعيين الخصائص بالإضافة إلى العلامة التجارية بناءً على القيم التي
‫يتم تمريرها.
‫اذن هذا هو.
‫الجزء الأكثر تعقيدًا.
‫لكن القوة هنا تكمن حقًا في أننا لسنا مضطرين إلى إنشاء تعليمات برمجية زائدة عن الحاجة ، كما أن العمل يتم من
‫أجلنا.
‫لذلك فهو يوفر لنا الكثير من الوقت وكتابة الكود أيضًا.
‫في مثال لاحق ، سنرى كيفية استخدام البنية البانية في فئة الأطفال لتهيئة خصائصها
‫الفريدة.
‫لمجرد إعادة التأكيد بسرعة على فئة الراديو هنا.
‫هي فئة الأطفال لدينا.
‫لذا فإن فئة الوراثة والجهاز الكهربائي هما صنفنا الأم.
‫لذا فإن الطبقة الأساسية.
‫لذلك سوف نرث.
‫لذا فإن راديونا يرث من الجهاز الكهربائي.
‫لذلك يرث الطفل من الأب.
‫في الأساس ، يمتلك والداك حمضًا نوويًا معينًا ولديك نفس الحمض النووي ، لكن لديك المزيد منه ، إذا جاز
‫التعبير.
‫هكذا يمكنك التفكير في الأمر.
‫حسنا.
‫حتى الآن تحد صغير بالنسبة لك.
‫اضبط فئة التلفزيون بحيث ترث من الجهاز الكهربائي أيضًا.
‫لذا أوقف الفيديو وجرب ذلك من فضلك.
‫حسنا.
‫أتمنى أن تكون قد جربتها.
‫لذلك نحتاج أولاً إلى إضافة جهاز كهربائي للقولون.
‫ثم يمكننا التخلص من الشفرة الزائدة عن الحاجة.
‫إذن ، الكود المتكرر ، لأنه لدينا بالفعل في صنفنا الأساسي ، وهذا يعني أنه يمكننا استخدامه في
‫دليل فئة التلفزيون أيضًا.
‫والآن يمكننا أيضًا تعديل هذا هنا ، بالقول إننا سنمرر البيانات إلى صنفنا الأساسي.
‫وبالطبع ، لسنا بحاجة إلى تعيين ذلك هنا أيضًا.
‫ولكن كما قلت في المثال التالي ، سنرى كيف لا يزال بإمكاننا استخدام الجسم بكفاءة
‫وهذا سيكون أساسًا.
‫الآن يمكننا المضي قدمًا إلى ملف CSV لبرنامجنا والتحقق فعليًا من الكود الخاص بنا هنا.
‫ومن خلال التحقق من الكود الخاص بنا ، أعني إنشاء كائنات من الراديو الخاص بنا واختبارها.
‫لذلك دعونا نمضي قدمًا ، نصنع كائنًا لاسلكيًا.
‫سأسمي هذا الراديو الخاص بي وسيكون هذا كائنًا لاسلكيًا جديدًا.
‫الآن ، بالطبع ، أحتاج إلى تمرير ما إذا كان يعمل.
‫لذلك سأقوم بإيقاف تشغيله في البداية وسأقول أنه سيتم تصنيعه بواسطة Sony ، لذلك ستكون العلامة
‫التجارية Sony.
‫الآن يمكنني الوصول إلى الخصائص.
‫يمكنك أن ترى هنا عنصر الأداة هذا ، خصائص الراديو الخاص بي ، وهي العلامة التجارية والملكية الخاصة ويمكنني أيضًا
‫الوصول إلى طرق تكنولوجيا المعلومات.
‫لذا قم بتشغيل ، إيقاف ، الاستماع إلى الراديو.
‫وبعد ذلك يمكنك أيضًا أن ترى أن هناك بعض الطرق التي لم ننشئها بأنفسنا
‫أبدًا وهي موجودة فقط منذ البداية ، لأن كل فئة ترث من فئة الكائن وفئة الكائن لديها
‫طريقة سلسلتين بالإضافة إلى نوع get get hashCode و يساوي.
‫إذاً هذه الطرق موجودة لكل فئة تقوم بإنشائها بلغة C حادة لأننا
‫في الأساس لا نراها ، لكنها داخليًا ترث من فئة الكائن مثل ذلك.
‫لذا فإن كل فئة ترث من فئة الكائن وهذا هو سبب وجود هذه الطرق المختلفة.
‫لكن دعونا الآن أولاً وقبل كل شيء نقوم بتشغيله.
‫حتى هنا ، قم بتشغيل.
‫سيؤدي هذا إلى تشغيل الراديو الخاص بنا ويمكننا الآن الاستماع إلى الراديو الخاص بنا.
‫لذا اسمع الراديو الخاص بي.
‫دوت ، استمع.
‫مذياع.
‫الآن دعنا ندير هذا وسيسمح لنا هذا بالاستماع إلى الراديو الخاص بنا.
‫حتى نستمع إلى الراديو.
‫لذلك ننتقل إلى الراديو.
‫دعنا الآن لا نشغل الراديو ونستمع إليه.
‫وستقول أن الراديو مغلق.
‫قم بتشغيله أولاً.
‫حسنًا ، لنفعل الآن نفس الشيء مع تلفزيوننا.
‫دعنا نمضي قدمًا وننشئ كائن تلفزيون.
‫سأقوم باستدعاء هذا على جهاز التلفزيون الخاص بي ، والذي سيكون كائنًا جديدًا للتلفزيون ، وسيتم إيقاف تشغيل هذا
‫أيضًا.
‫وسيكون جهاز Samsung.
‫والآن دعنا نمضي قدمًا ونستخدم مفتاح نقطة التلفزيون الخاص بي لتشغيله.
‫ثم دعونا نسمي طريقة مشاهدة التلفزيون.
‫مايك.
‫لنقم الآن بتشغيل هذا وسنرى أنه تم تشغيل تلفزيوننا الآن ونحن نشاهده أثناء الاستماع إلى
‫الراديو.
‫لذلك هناك مهمة لا بأس بها.
‫لكن الكود الخاص بنا يقوم بما نريده.
‫الآن ترى أننا نسمي طريقة التبديل للراديو وكذلك التلفزيون.
‫على الرغم من أننا إذا نظرنا إلى فصل التليفزيون ، فإنه لا يحتوي على هذه الطريقة ، لذلك لا يحتوي على مفتاح تشغيل
‫بطريقة جيدة أو تشغيل أو إيقاف تشغيل.
‫لا يحتوي الراديو على هذه الطرق أيضًا ، ولكن هذا بسبب أنهم يرثون من الجهاز الكهربائي
‫الذي يعمل على تشغيل هذه الطرق وإيقاف تشغيلها بحيث يمكننا استخدامها.
‫لذلك نحن هنا نستخدم طريقة ال.
‫فئة أساسية.
‫حتى هنا.
‫طريقة الطبقة الأساسية.
‫وها نحن نستخدم طريقة فصل الأطفال.
‫لذا فإن طريقة التبديل هذه تأتي من الفصل الدراسي الرئيسي وطريقة مشاهدة التلفزيون من فئة الأطفال.
‫لذا يمكننا الآن إنشاء الكود الخاص بالفصل ، وهو ليس متكررًا ، إذا جاز التعبير ، مباشرة في
‫فصل التلفزيون وكذلك في فصل الراديو.
‫لكن كل ما هو متماثل وسيكون مناسبًا للأجهزة الكهربائية بشكل عام هو شيء يمكننا
‫إنشاؤه هنا.
‫هناك الكثير في الميراث وبالطبع سننظر في كل ذلك خلال هذا الفصل.
‫لذلك نراكم في الفيديو التالي.