كوتلين – الأساسيات : الكلاسات والكائنات Classes and Objects

الـ Class بالعربية كترجمة غير حرفية  تعنى صنف أو فئة أو مخطط وفى البرمجة الكائنية هو عباره عن قالب او تخطيط أو بنية اساسية او هيكل او مخطط معين يتم على اساسه إنشاء الـكائنات مستقبلا الـ Objects مثل المهندس الذى يرسم ويخطط بناء مبنى معين وبناءا على هذا الرسم والتخطيط يتم بناء المبنى اى ان الكلاس هو مجرد هيكل او مخطط برمجة تبنى على اساسه الـ Objects وكما هو الحال فى فى معظم لغات البرمجة كائنية التوجه كوتلين لديها سلوك خاص لإنشاء الكلاسات وكذلك لبناء الكائنات

 

الـكلاسات Classes 

تعرف الكلاسات فى كوتلين باستخدام كلمة كلاس فيمكننا إنشاء كلاس بكل سهولة باستخدام كلمة class يليها اسم الكلاس ثم {  ثم محتوى الكلاس من متغيرات وميثودث واى اشياء اخرى ثم } وبذلك تكون انتهت الكلاس

ملحوظة : الرمز { او } يطلق عليه bracket  وعند الفتح نقول open bracket وعند الاغلاق نقول close bracket

مثال على تعريف كلاس

وهذا الكلاس عباره عن كلاس فارغ حاليا سوف نقوم بملئه لاحقا لكن الان لنتعرف على كيفية انشاء أوبجكت من هذا الكلاس وسيكون كذلك

اي اننا  عرفنا متغير جديد عباره عن human وهو ahmed و ahmed هو عباره عن الـ reference الخاص به تخيل اننا لدينا مخطط لبناء مبنى معين وسنبنى مبنى معتمد عليه فى احد الاماكن وليكن منطقة السلام لذلك عندما نبنى المبنى هناك سنطلق عليه مبنى السلام او السلام ولكن المبنى نفسه لايعتبر سلام بل السلام مجرد اسم يشير لهذا المبنى كذلك الـ reference يشير للأوبجكت وليس الاوبجكت نفسه .

يمكنك انشاء اى عدد تريد من الاوبجكتس باستخدام الكلاس

 

لاحظ أنه لا توجد كلمة new فى لغة كوتلين 

 

الكونستراكتورز Constructors 

الكونستراكتور هو عباره عن شىء نستخدمه لابتداء الكلاس بطريقة معينة حيث احيانا نريد تمرير متغيرات ابتدائية لبدأ الكائن  على سيبيل المثال نريد عند انشاء كلاس من human تحديد الجنسية لدينا كلاس يقوم بعملية حسابية معينة ويعتمد على بعض الثوابت تختلف من مسألة لاخرى فنريد تمرير هذه الثوابت ليبدأ منها العمل فى الاوبجكت او لدينا كلاس يقوم برسم شىء معين ويريد منا الاحداثيات x,y التى سيبدأ الرسم منها والى غير ذلك من امور نحتاج فيها لتمرير قيم بدائية للكود لذلك توفر لنا لغات البرمجة ما يعرف بالـ Contructor والذى يتم فيه ابتداء كلاس بطريقة معينه .

 

توفر لكنا كوتلين إمكانية عمل 2 كونستراكتور الاول هو primary constructor والثانى هو secondary constructor الـ primary يكون فى نفس سطر تعريف الكلاس كالتالى

بعد اسم الكلاس نكتب كلمة constructor يليها البارانسيسز وهو قوسى فتح واغلاق الباراميترز وبداخلهم الباراميترز التى نريدها حيث هنا قمنا بتحديد باراميتر واحد وهو الجنسية وهى عباره عن متغير من النوع String  لذلك الان عندما نريد انشاء اوبجكت يكون واجب علينا ان نقوم بادخال الجنسية هكذا

 

أما بالنسبة لإنشاء constructor فرعى فيكون كالتالى :

 

ولاحظ ان الكونستراكتور الفرعى يجب أن يرث من الكونستراكتور الاساسى وذلك عن طريق الكولن : يليلها this ثم نفس الباراميتر او الباراميترز الخاصة بالكونستراكتور الرئيسيى

اي ان الكونستراكتور الرئيسى بالمثال السابق أخذ باراميتر String فقط أما الكونستراكتور الفرعى يرث الرئيسيى وبالاضافة لذلك يتميز ببارميتر العمر

وعند انشاء كائنات جديدة (objects) نستخدم اى Constructor نريده

 

يمكنك ايضا الاستغناء عن كلة constructor فى الـ primary contructor كالتالى

 

يمكنك استخدام secondary contractor  (كونستراكتور ثانوى )  فقط بدون الحاجه لاستخدام primary constructor   كالتالى :

 

وأخيرا قد نحتاج لتنفيذ كود معين كل مرة يتم فهيا انشاء اوبجكت جديد يمكنك فعل ذلك عن طريق البروك init التى توفره لنا كوتلين كالتالى

 

 

الوراثة

الوراثة فى البرمجة تشبه الوراثة فى الكائنات الحية فأحيانا تجد فتاة تشبه والدتها نفس العينان ونفس نعومة الشعر ونفس درجة البشرة و…. و … لكن بالتأكيد تمتلك الفتاة بعض الخواص التى تميزها عن والدتها نفس الامر مع فتى يشبه والده تجده ورث صفاته منه وفى البرمجة نستخدم الوراثة اختصارا للوقت والمجهود فعلى سبيل المثال ان كان هناك احد المهام البرمجية  تريد انجازها برمجيا تتعلق بالهواتف الذكية لشركات مختلفة فعند التنفيذ تحتاج كلاسات للهواتف كلاس لهاتف سامسونج وكلاس لهاتف هواوى وكلاس لهاتف الايفون وكلاس لهاتف موتورلا الخ … وفى حالة كهذه لديك الكثير من الأشياء المشتركة فى كل هذه الهواتف كالمايك والشاشة والتاتش والرامات والكاميرا والفلاش الخ وبالتأكيد كتابة كل هذه الاشياء المشتركة فى كل الكلاسات التى ستنشئها يعتبر تكرار وتضييع للوقت واسلوب سىء لذلك توفر لك الوراثة انشاء كلاس يعتبر اب به كل الصفات المشتركة بين هذه الهواتف او بين الكلاسات التى تريد ان تنشئها فى حالة اخرى ثم يرث كل كلاس الكلاس الاب ونقوم فيه باضافة المميزات المختلفة عن الهواتف الاخرى فقط .

 

لنفترض ان هذا كلاس الهاتف

وبه عدة خصائص كالموضحة والتى يمكن أن تتوافق مع اى هاتف و الان اننا نريد عمل كلاس لسامسونج وبالتالى كل ما سنفعله انان سنرث الخواص السابقة ونكمل عليها ما تتميز به سامسونج فقط

وتتم الوراثة باستخدام الكولن ثم اسم الكلاس لكن الطبيعى فى الكلاسات بشكل عام هو أن تكون final بعكس الجافا التى طبيعة الكلاسات فيها انها ليست final ويمكن الوراثة من اى كلاس بشكل افتراضى لكن بكوتلين يجب عليك اضافة كلمة open قبل كلمة كلاس لتعريف الكلاس بأنها يمكن الوراثة منها كالتالى :

وبالتالى يمكننا وراثتها بسهولة

نقوم الان بعمل كلاس samsung وسترث من كلاس الـ phone بالشكل التالى

والان تكون الكلاس سامسونج لدينا تحتوى على كافة الصفات السابقة الخاصة بالـ phone بالإضافة لهذه الصفة ويمكننا إنشاء موبايل سامسونج او بمعنى اصح كائن سامسونج جديد  ونبدأ باستخدامه

لاحظ ان الصفة height هى من مواصفات الهاتف نفسه وغير مكتوبة فى الكلاس samsung لكن الكلاس ورثت هذه الصفة من الكلاس الاب .

 

الـ Override 

فى بعض الاحيان يوجد ميثود فى الكلاس الاب الذى قمت بالوراثة منه وتريد التعديل عليها فى الكلاس الذى قام بالوراثة على سبيل المثال لدينا هاتف معين لا يقوم بعمل boot بالطريقة العادية التى تعمل بها الهواتف لذلك نريد بداخل كلاس سامسونج التعديل على هذه الميثود ولهذا فى الوراثة العملية مرنة وليس معنى انك ورثت phone انك ورثته بكل ما فيه من مميزات وخصائص اجباريا فالامر فيه مرونة تمكنك من التعامل بشكل سلس فى الحالات المختلفة لذلك الـ override ببساطه هو عباره عن استبدال الميثود الموجودة بالكلاس الاب بميثود اخرى بنفس الاسم فى الكلاس الابن ولعمل ذلك نبدأ بكلاس الـأب يجب ان تكون الميثود open حتى يمكن عمل override لها غير ذلك لا يمكنك عمل override بدون اضافة كلمة open قبل اسم الميثود او العنصر الذى يمكن عمل override له

وستلاحظ أننا نضع كلمة override بشكل صريح وليس مثل الجافا او بعض اللغات نضعها ك Annotation

بالاضافة لعمل override للميثودث فى الكلاس الاب يمكنك عمل override ايضا للخصائص او الثوابت والمتغيرات بنفس الطريقة السابقة مع اختلاف بسيط فى الصغية كالتالى

 

الدرس السابق 

الدرس التالى

أرسل

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *