!مفاهيم جافا الجزء الخامس – المتحول هو ليس غرض

تحدثنا في المقالة السابقة عن الأغراض وكيف بأن لكل صف ممكن ان ننشئ منه العديد من الاغراض وكل غرض منفصل بكيانه عن بقية الاغراض

اين تعيش الأغراض؟

اذا عدنا للمقالة الأولى قد نتذكر اننا تحدثنا عن   JVM – Java Virtual Machine وانها البيئة الافتراضية المسؤولة عن تشغيل ملفات الجافا

لذلك من السهل الإجابة على هذا السؤال, الاغراض تعيش في JVM

اذا اردنا التفصيل اكثر الجي في ام تحتوي stack and heap

سنتطرق للفرق بين الستاك والهيب في الدرس القادم, لانه مفهوم مهم جدا للعمل في الجافا.

ولكن للاجابة على السؤال (اعتقد اننا لم نجيب حتى بعد كتابة ٤ سطور!) الاغراض تعيش في ال heap

هل هذا يعني كل شي في الجافا يعيش في Heap؟ لا طبعا!! هنالك اشياء اخرى في الجافا غير الاغراض كالمتحولات

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

دعونا نتخيل المتحولات على انها جهاز تحكم الالعاب , ولكن هذه المرة هي مسؤولة عن التحكم بغرض واحد فليكن سيارة او حتى كرسي او تلفاز او اي غرض نحن نريد إنشاءه. المتحولات هي عبارة عن متحكمات وليست عبارة عن اغراض.

لنوضح المثال اكثر لقد قمت بإنشاء هذه الصورة لكم . نعم انه صف قادر على انشاء العديد من الاغراض PACMAN, في كل مرة نقوم بكتابة new PACMAN سوف يقوم الصف بإنشاء غرض جديد!. في الجافا كل غرض له عنوان داخي عبارة عن احرف وارقام للتمييز بين الاغراض (رقم هوية) . لذلك وضعنا هذه الارقام فوق كل باك مان  , انه مايجعل كل باك مان شخصية مستقلة بكيانهاScreen Shot 2017-08-13 at 14.55.21

الآن لنكمل الفكرة, لقد اتفقنا بأن المتحولات هي عبارة عن أداة تحكم عن بعد لذلك يمكننا الآن أن نتحكم بأغراضنا عبر المتحولات, الصورة ستتحدث اكثر من الكلام!

عند إنشاء متحول variable1 من نمط PACMAN نحن نقوم بإنشاء متحكم! هو فعليا متحكم صغير لايتسع للغرض , ولكنه يتسع لرقم هوية الغرض! اليس هذا كافي ! عند إسناد غرض  جديد  للمتحول فإن المتحكم سيسند رقم هوية الغرض لنفسه , وعند ارسال الاوامر سيرسل الاوامر للغرض الذي يشير اليه.

Screen Shot 2017-08-13 at 15.04.24

هل يمكن بنفس المتحول ان نتحكم باغراض اخرى؟

المتحول يمكنه التحكم في غرض واحد في لحظة واحدة ولكن يمكن اسناد غرض جديد له وكسر الرابط القديم بينه وبين الغرض وكمان يمكن للمتحول ان لايشير الا اي شي. اي ان يشير ل null

لكن ممكن لغرض واحد ان يتحكم فيه اكثر من متحول وهذا شي مختلف تماما.

لتوضيح الفكرة دعونا نقرأ الكود التالي والتوضيح الرسمي له.

قد يعتقد البعض ان سناد المتحول variable2 الى المتحول variable3 يجعل من المتحولان متحول واحد! هذا ليس صحيح! فهما منفصلان ولكن يشيران الى نفس الغرض ولكن ممكن في اي لحظة ان يشير اي منهما الى شي اخر.

حسب الشكل في الاسفل, الغرض ذو الهوية hffff بقي بدون اي متحول مرتبط فيه, مامصير هذا الغرض وكيف يمكن الوصول اليه؟ الحقيقة انه لايمكن الوصول اليه ومصيره الموت عن طريق ال Garbage Collector , هو غرض منفي . سيلاحظ ذلك ال Garbage Collector بعد مضي القليل من الوقت ويقوم بازالته من الذاكرة

Screen Shot 2017-08-13 at 15.25.16

هل يمكن لمتحول من نمط معين ان يتحكم بمتحولات من نمط اخرى؟ 

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

لننهي مقالتنا سوف نقوم برسم توضيحي اخير , أتمنى أن تكون هذه المقالة قد نالت إعجابكم وأن تقومو بمتابعتنا لمزيد من الدروس والمواضيع ا لشيقة

Screen Shot 2017-08-13 at 15.46.29.png

لميس

إسمي لميس, اعمل كمهندسة برمجيات في شركة إكسينغ في ألمانيا. بدأت في رحلة العمل في المجال البرمجي منذ أكثر من ١٠ سنوات في سنة ٢٠٠٣ كانت بداية رحلتي المهنية حيث كانت بدايتي مع ألعاب الفلاش.. حالياََ انا استخدم العديد من الأدوات البرمجية في العمل فنحن بحاجة ماسة للإطلاع على احدث التقنيات. هدفي هو نقل ما أتعلمه للمشاركة به وتبادل الخبرات مع الجميع

2 thoughts on “!مفاهيم جافا الجزء الخامس – المتحول هو ليس غرض

اترك تعليقاً

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