الأربعاء، 17 أكتوبر 2012

فئات وكائنات جافا

مقدمة لفئات جافا Java Classes 


الفئة "class" ليست سوى مخطط أو قالب لإنشاء كائنات "objects" مختلفة و التي تحدد الخصائص والسلوكيات للكائنات. كائنات الفئة لجافا تحمل الخصائص والسلوكيات التي تحددها فئة. تحتوي  الفئة على حقول "fields" و مناهج "methods" لوصف سلوك الكائن "object".
المناهج "Methods" ليسوا سوى أعضاء في الفئة التي توفر خدمة لكائن أو تنفيذ بعض الأعمال. حقول جافا "Java fields" و أسماء أعضاء الوظائف "member functions names" يمثلون حالة حساسة. حالات كائن الفئة الحالية  يتم تخزينها في متغيرات مثيل الكائن "object’s instance variables". المناهج "Methods" تحدد العمليات التي يمكن القيام بها في مجال برمجة جافا.

الفئة لديها هذا التركيب "syntax" العامة التالي :


أدناه هو مثال يوضح كائنات وفئات من الفئة Cube التي تُعرف 3 حقول "fields" وهي length و breadth  و height.  و تحتوي الفئة أيضا على الوظيفة getVolum.

كيف يمكنك الإشارة لبيانات عضو و لبيانات  الوظيفة؟

ويتم إنجاز هذا بذكر اسم مرجع الكائن "object reference" ، يليه نقطة ، يليه اسم العضو "member" داخل الكائن.

يمكنك استدعاء منهج "method" لكائن إبتداء بإسم الكائن ، يليه نقطة ، يليه اسم المنهج و قائمة الوسائط  "argument list"، مثل هذا :

على سبيل المثال :


متغيرات الفئة -- حقول ثابت  Class Variables – Static Fields 



نستخدم متغيرات الفئة "class variables" او ما تسمى أيضا  بالحقول الثابتة "Static fields" عندما نريد أن نشارك الخصائص لجميع الكائنات ضمن فئة. عندما نقوم بتعريف حقل ليكون ثابت "static" ، فيتم إنشاء مثيل واحدة فقط من المتغير "variable" لمشاركة كافة الكائنات من تلك الفئة. وبالتالي عندما يغيركائن واحد  قيمة متغير الفئة "class variable" ، فإنه يؤثر على كل كائنات الفئة. يمكننا الوصول إلى متغير فئة باستخدام اسم الفئة ، وليس بالضرورة استخدام مرجع الكائن داخل الفئة. يمكن الوصول إلى متغيرات ثابتة "Static variables" حتى ولو لم يكن هناك كائن من تلك الفئة. يتم تعريف باستخدام الكلمة الأساسية static.

مناهج الفئة -- المناهج الثابتة  Class Methods – Static Methods


مناهج الفئة "Class methods" الثابتة مثلها مثل متغيّرات الفئة "Class variables" يمكن استدعائها دون أن يكون لها مثيل من الفئة. مناهج الفئة "Class methods"غالبا ما تستخدم لتوفير الوظيفة العالمة "global functions" لبرامج جافا. على سبيل المثال، المناهج الموجودة في الحزمة java.lang.Math هم مناهج الفئة "class methods". لا يمكنك استدعاء المناهج الغير ثابتة "non-static methods" من داخل منهج ثابت "static method".

متغيرات المثيل 



المتغيرات المثيلة "Instance variables" تقوم بتخزين حالة الكائن. يجب ان يكون لكل فئة نسختها من المتغير"variable". كل كائن له حالة "state" التي يتم تحديدها من قبل قيمة مخزنة في الكائن. الكائن يغير حالته عندما يتم تغير واحد أو أكثر من قيمة البيانات المخزنة في الكائن. عندما يستجيب الكائن للرسالة، فإنه عادة ما يكون أدى عمل ، أو غيّير حالته الخ الكائن الذي لديه القدرة على تخزين القيم "values" كثيرا ما يقال أنه ثبات.
لننظر في هذا البرنامج البسيط الذي يظهر استخدام الحقول الثابتة "static fields" و المناهج الثابتة "static methods"



Output

Number of Cube objects = 0

Number of Cube objects = 0

المتغير و المناهج و الفئات النهائية 


في جافا يمكن أن نسجل الحقول و المناهج و الفئات على اساس نهائي. و إذا ما وضعة علامة النهائي ، فلا يمكن تغير هذه العناصر.
المتغيرات المعرفة في واجهة ليست ضمنا نهائية. لا يمكنك تغيير قيمة المتغير النهائي (ثابت). الفئة النهائية لا يمكنها أن تمتد . الفئة النهائية  لا يمكنها ان تكون فئة فرعية. يتم ذلك لأسباب أمنية مع الطبقات الأساسية مثل String و Integer. كما يسمح  للمحول البرمجي أن يقوم ببعض التحسينات، ويجعل تحقيق مسئلة السلامة أسهل قليلا . و لا يمكن تجاوز المنهج النهائي عندما يتم توريث فئتها. فإن أي محاولة لتجاوز أو إخفاء المنهج النهائي ينتج عنه خطأ في عملية التحويل البرمجي.


مقدمة لكائنات جافا 


فئة Object هي الفئة المتفوقة لجميع الفئات في جافا.
هذه بعض مناهج الفئة object

الكائن هو مثيل لفئة تم إنشاؤها باستخدام المشغل "new". المشغل new  يقوم بإرجاع مرجع لمثيل الفئة. هذا المرجع  يمكن تعيينه إلى مرجع المتغير للفئة. وتسمى عملية خلق الكائنات من الفئة "instantiation". الكائن يقوم بتغليف الحالة "state" والسلوك "behavior".
مرجع الكائن يوفر مؤشر إلى الكائن الذي تم إنشاؤه وتخزينه في الذاكرة. في جافا، لا يمكن معالجة الكائنات إلا عن طريق المراجع "references" ، والتي يمكن تخزينها في المتغيرات "variables".
خلق المتغيرات "variables" لنوع الفئة الخاصة بك مشابه لخلق متغيرات أنواع البيانات البدائية "primitive data types" ، مثل عدد صحيح "integer" أو عشري "float". في كل مرة عندما تقوم بإنشاء كائن ، مجموعة جديدة من المتغيرات المثيلة "instance variables"تضهر و التي تحدد خصائص هذا الكائن. إذا كنت ترغب في إنشاء كائن لفئة ولها مرجعية متغير "reference variable" مرتبطة بهذا الكائن ، فيجب عليك تخصيص ذاكرة للكائن باستخدام المشغل "new". وهذا ما يسمى عملية instantiating الكائن أو إنشاء مثيل للكائن.
عند إنشاء كائن جديد، فأنت تستخدم المشغل new  لإنشاء مثيل "instantiate" للكائن. المشغل الجديد يقوم بإرجاع موقع الكائن الذي قمت بتعيين نوع المرجع له.
أدناه هو مثال يوضح إنشاء كائنات Cube باستخدام المشغل new.


المنهج المهيمن 


 هيمنة المنهج "Method overloading" تقع عند وجود اثنين أو أكثر من المناهج في نفس الفئة لهم نفس الاسم ولكن المعلمات "parameters" مختلفة. المناهج ذات نفس الاسم يجب أن تختلف في أنواعها أو عدد معلماتها. هذا يسمح للمحول البرمجي مطابقة المعايير واختيار الأسلوب الصحيح عندما يكون لديه عدد من الخيارات. تغيير نوع الإرجاع فقط ليست كافيا لتجاوز المنهج ، وسوف يكون هناك خطأ في الوقت التحويل البرمجي. فيجب أن يكون له توقيع مختلف. عندما لا يتم العثور على أي منهج مطابق لمعلمات الإدخال، فالمحول البرمجي يحاول تحويل معلمات الإدخال إلى أنواع مع قدر أكبر من الدقة. فقد نجد تطابق دون خطأ في وقت التحويل البرمجي ،  التنفيذ السليم يتم اختياره استنادا إلى توقيع نداء المنهج.
أدناه هو مثال على فئة يُظهر المنهج المهيمن

Output
No parameters
One parameter: 2

Two parameters: 10 , 20

Sum is 30

Two double parameters: 1.1 , 2.2

Sum is 3.3000000000000003

يوجد أدناه مقتطف التعليمات البرمجية يبين الواجهات  التي تطبقها الفئة :



يوجد أدناه مقتطف التعليمات البرمجية يبين متى الفئة Object تمثل فئة أو واجهة:



ليست هناك تعليقات:

إرسال تعليق