ما هو الصنف أو الفئة Class؟ وما هو الكائن Object؟ مع نظرة على الوراثة Inheritance

في لغة جافا لا يوجد أهم من أن تتعرف على مفاهيم البرمجة كائنية المنحى Object Oriented Programming، وأهم مفهوم من مفاهيم البرمجة كائنية المنحى هو مفهوم الفئة Class أو ما تُدعى أيضاً بالصنف.

إذا أردت أن تفهم معنى الفئة أو الصنف Class في لغة جافا فما عليك إلا أن تستعين بفهم ترجمة هذا المصطلح. وهذا ما سأستعين به في هذه التدوينة لأوصلك إلى فهم الفئات و الأصناف في لغة جافا.

شرح الفئة و الكائن والوراثة في اللغة العربية

ما هو مقابل Class في اللغة العربية؟

إبتداءً حتى لا يختلط عليك الأمر فإنني سأعتمد كلمة فئة كترجمة لـ Class ولكن دعني أخبرك كيف أن هذين المصطلحين سيبسطان عليك فهم الـ Class.

فلنأخذ الأمر بصورة تسلسلية من حيثُ بدأت أنت فهم البرمجة:

  • نبدأ من الجافا و التي تعتمد على البرمجة كائنية المنحى.
  • هذا يعني أن هذا النوع من البرمجة يعتمد على الكائنات.
  • والكائنات تعني بالمعنى البسيط كل شيءٍ لهُ كينونة (أنا وأنت، الحاسوب والجوال، الطاولة والموقع والشركة …إلخ).

بما أننا اتفقنا على مفهوم الكائنات، يجب أن تعلم أيضاً أن لغة جافا لها طريقة مميزة في إنشاء الكائنات.

لكي تُنشئ كائناً في لغة جافا فإنك تحتاج إلى أمرين:

  1. أن تحدد الشكل العام للكائن، بمعنى أن تضعه في صنف محدد. وهذا هو ما ندعوه بالفئة Class.
  2. تعبئة هذه الفئة لتصبح كائناً.

حديثنا في هذه التدوينة عن الخطوة الأولى وهي إنشاء الكائن، مع المرور على ما تحتاجه ليكتمل لديك الفهم.

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

والآن: 

هذه الكائنات قبل أن تُنشأ لا بد أن تمتلك قوالب لتُنشأ عبرها. هذه القوالب تسمى بفئات أو أصناف.

ولتعلم أن مفهوم الأصناف و الكائنات في لغة جافا مماثل تماماً لمفهوم الأصناف و الكائنات في الحياة الحقيقية.

ولنأخذ مثالاً:

إذا أردت أن تُنشئ كائناً لصديقك في لغة الجافا فيجب أن تنشئ فئته أولاً، ما هي فئة صديقك؟ فئتُه إنسان. وإذا أردت أن تُنشئ فئةً لحاسبك ما هي فئتها؟ جهازٌ كهربائي. و هكذا تستمرُّ الحكاية.

شرح الفئة Class في لغة جافا منطقياً

تعريف الفئة في لغة الجافا من الأمور البسيطة ككلمات، ولكن المهم هو أن تكون الفكرة صحيحة.

مثال:

الفئات (الأصناف) و الكائنات في الجافا

ما هي الفئات (الأصناف) Classes:

كما ترى بالمثال بالأعلى، فإنه عملية تصنيف عادية لكل مجموعة من الكائنات بحيث تشترك في أحد شيئين على الأقل:

  • لها أفعال متشابهة (تسير، تأكل، تعيش مع الإنسان) هذه الأفعال تُحول في الفئة إلى دوال Methods.
  • لها صفات متشابهة (عمر، عدد أرجل، إسم، عدد أسنان)، هذه الصفات تُحول في الفئة إلى صفات Attributes.

أعلم أنك تتسائل الآن عن الدوال و الصفات، سأشرحها لك لاحقاً.

وبما أنك الآن تستطيعُ تقسيم الكائنات إلى فئات فدعني أريك كيف تُنشئ الفئة في لغة جافا.

كيف تُنشئ فئة Class في جافا؟

إنشاء الفئة له هيكل عام. وهو ما تراهُ في الكود التالي:

public class ClassName {
    
}
  • public: هي كلمة (إختيارية) لتحديد صلاحية الوصول إلى هذه الفئة من قبل الفئات والحزم packages الأخرى.
  • class: هي كلمة لتعريف الفئة، و ما بعدها يكون إسم الفئة.
  • ClassName: إسم الفئة، ويوصى أن يبدأ دائماً بحرف كبير Capital.

لنأخذ مثالاً، فئة الصديق، ستكون شفرته المصدرية كما يلي

public class Friend {
    
}

و فئة القريب كما يلي

public class Relative {
    
}

والآن، ماذا عن الأفعال Methods و الصفات Attributes؟

التعامل مع الأفعال و الصفات بسيط جداً، خصوصاً عندما يتعلق الأمر باللغة العربية.

الأفعال Methods

لنأخذ مثالاً، إذا أردت أن تُنشئ الأفعال الخاصة بالإنسان فما عليك إلا التفكير في الأفعال التي يستطيع كُل إنسان تأديتها:

  1. يتنفس.
  2. يأكل.
  3. يمشي.

وهكذا…

لاحظ أن جميع هذه الأفعال هي في الإعراب أفعال مضارعة.

هذه الأفعال تمثل الجزء الأول من الملامح العامة للفئة التي تعمل على إنشائها. والآن لنرى كيف يمكنك إدخال هذه الأفعال في الفئة؟

ما عليك إلا كتابة دالة لكل فعل يستطيع الإنسان فعله، وهو كما يلي في هذا المثال للإنسان.

public class Human {
    public void think(){
        
    }
    
    public void eat(){
        
    }
    
    public void walk(){
        
    }
}

الصفات Attributes

أما  الصفات فأمرها أبسط من الأفعال، وهي في اللغة العربية إما أسماء أو صفات للفئة التي ترغب بإنشائها.

أمثلة صفات لفئة الإنسان:

  1. العمر.
  2. لون العيون.
  3. القدرة على قيادة السيارات.

وهكذا..

أما إدخال الصفات على فئة الإنسان فهو بسيط جداً، يعتمد فقط على نوع البيانات المتوقع لكل صفة، فمثلاً من المتوقع أن يكون نوع العمر Int ونوع لون العيون String والقدرة على قيادة السيارات boolean.

مثال لفئة الإنسان:

public class Human {
    
    private int age;
    private String eyesColor;
    private boolean canDriverCar;
    
    public void think(){
        
    }
    
    public void eat(){
        
    }
    
    public void walk(){
        
    }
}

والآن بعد أن أعددت فئة الإنسان، جاء الوقت الذي تستفيد فيه من هذه الفئة، والفائدة هي إنشاء الكائنات.

كيف تُنشئ الكائن Object بعد أن إنشاء الفئة Class؟

عملية إنشاء الكائن من الأمور البسيطة إلى أبعد حد. فجهدك الذي بذلته في تحليل و كتابة الفئة لن تحتاج إلى إعادته مرة أخرى إطلاقاً. هل تعلم كيف ذلك؟

كُل كائن تُنشئه في لغة الجافا يضم تلقائياً جميع الأسطر البرمجية المكتوبة في فئته.

مثلاً لإنشاء كائن لصديقك أحمد ما عليك إلا كتابة الشفرة البرمجية التالية:

Human Ahmed = new Human();

بهذه العبارة البسيطة تكون قد أنشأت كائناً يسمى أحمد يمتلك الخواص التالية:

  • يتنفس.
  • يأكل.
  • يمشي.
  • له عمر.
  • له لون عيون.
  • إما يستطيع أن يقود السيارة أو لا.

ماذا عن الوراثة Inheritance وعلاقتها بالفئات والكائنات؟

المعنى الشائع للوراثة هو انتقال الصفات الجينية من الآباء إلى الجيل الجديد، وهو معنى مشابه تماماً للمعنى المقصود في لغة جافا.

الوراثة في جافا تعني إنتقال الصفات و الأفعال الخاصة بفئات الآباء إلى فئات الأبناء.

عد معي إلى المثال السابق

الفئات (الأصناف) و الكائنات في الجافا

كُنتَ قد أنشأت مسبقاً فئة للإنسان، و أصبحت مُعدّة للإستخدام. صحيح؟

الآن إذا أردت أن تُنشئ فئة للأقارب، ستضطر إلى كتابة جميع الصفات والأفعال الخاصة بالإنسان وإضافة بعض الخواص إليها، صحيح؟

جافا بجانبك دوماً، بدلاً من ذلك وفرت لك جافا خاصية جميلة جداً تسمى الوراثة بحيث لا تحتاج إلى إعادة كتابة ما كتبته سابقاً و تيسر لك نقل جميع صفات و أفعال الفئات إلى فئات أخرى ببساطة جداً.

هل ننتقل إلى التجربة بالمثال؟ هيا بنا.

كما تعلم لإنشاء فئة للأقارب ما عليك إلا كتابة الشفرة البرمجية التالية:

public class Relative {
    
}

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

public class Relative extends Human {
    
}

هل لاحظت عبارة extends Human بعد إسم الفئة Relatives؟ هذه العبارة تعني أن القريب يرث جميع الأفعال والصفات الخاصة بالإنسان.

أي أن هذه الجملة البسيطة تجعلك كأنك كتبت هذه الشفرة البرمجية

public class Relative {
    
    private int age;
    private String eyesColor;
    private boolean canDriverCar;
    
    public void think(){
        
    }
    
    public void eat(){
        
    }
    
    public void walk(){
        
    }
}

وهكذا تكون قد جمعت المفاهيم الضرورية للفئات و الكائنات والوراثة. أليست لغة جافا رائعة عندما تطبق مفاهيم البرمجة كائنية المنحى؟ 🙂

ولكن.. إستخدام البرمجة كائنية المنحى يقلل عدد الأسطر البرمجية، ولكن هل يجعل البرمجة و تطوير البرامج أسرع؟ أرجو وضع رأيك بالتعليقات أدناه.

مصطفى الطيب

صديقٌ لنُظمِ المعلُومات و عُلومِ الحَاسِب و مُختصٌ بهما، مُحبٌ للعِلمِ و نَشرِه. أُشاركُ معارفي و تَجاربي و خِبراتي في تَدويناتٍ و دوراتٍ من خلال مُدونةِ عُلوم.

‫20 تعليقات

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

    1. أهلاً ومرحباً بك أخي أنور،

      أشكرك عظيم الشكر لتعليقك المهم جداً والمفيد والذي يوفر التغذية العكسية التي تؤثر على مسار موقع علوم وتدويناته.
      اعلم أخي انور أن أغلب تدويناتي حتى الآن موجّهة للمبتدئن، إلا أن بعضاً منها موجّهٌ إلى من هم في درجةٍ أكثر تقدماً، وبالتالي يستطيعُ الإستفادة دون أن يعيد ما يعلم مسبقاً.
      وعلى الرغم من ذلك، أتمنى أن تصلني آرائُك وطلباتُك دوماً (بإمكانك إستخدام صفحة تواصل معي) ولكَ منّي عظيم الشكر.

  2. صدقني امثلتك حضرتك احتجتها بشده لان الترجمه من الانجليزيه بشعه.. لكنك جزاك الله خيرا ابدعت.. فتح الله عليك ابواب الخير كلها.
    استمر رجاء.

اترك تعليقاً

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