السلام عليكم اولا هذا الموضوع منقول للفائدة ...
ستكون هذه سلسلة دروس باذن الله للتعرف بشكل أفضل على الؤشرات ... وازالة الغموض الكامن حولها .. باذن الله ...
بداية هذه مقدمة عن المؤشرات ... المؤشرات يمكن أن توصف بثلاث كلمات ...
مميزة و مرنة وخطيرة في ان واحد...
مقدمة:
فهي مميزة لأن أغلب ان لم يكن كل لغات البرمجة (ماعدا السي والسي بلس بلس ) لاتعطيك الحرية بفعل ماتريد كيفما تريد كما هو في السي بلس ... فمبرمج السي بلس بلس له الحرية المطلقة في التعامل مع المؤشرات أو عدم التعامل على مستوى المؤشرات ... وطبعا التعامل يختص بالتعامل مع الذاكرة ... ليس الا.
فنجد ان الفيجوال بيزك لا تعطي المبرمج حرية أبدا كمبرمج السي بلس بلس ... نظرا لخطورة التعامل مع المؤشرات وادارة الذاكرة يدويا ... وأيضا لغة الجافا التي اشتقت من السي بلس بلس لاتعطي المبرمج الحرية المطلوبة ....
وللغة الجافا ململم نفايات أو Garbage Collection ويمكن الاختصار له ب GC مهتم بالغاء تخصيص كميات الذاكرة المحجوزة يدويا بشكل الي ... ومن الملاحظ أن أكثر أدوات لغة الجافا مبيعا تلك المهتمة باكتشاف الاخطاء وخصوصا (بطء عمل التطبيقات ) بسبب ال GC .... فال GC سيتسبب بعمليات تنظيف دورية للذاكرة مما يتسبب ببطء البرنامج .
أما بالنسبة للمرونة فهي ماتوصف به أقوى لغة برمجة على الاطلاق وهي السي بلس بلس فمن أهم ميزاتها ميزات لتعامل الحر جدا مع الذاكرة ... فهي تعطي بعدا جديدا كليا لهندسة البرنامج ككل ... (وسنتطرق في دروس قادمة عن أمثلة لحالات مرنة جدا كان من الصعوبة بمكان وربما استحالة أن تتم دون المؤشرات) ....
فبتكامل المؤشرات مع الوراثة مع الفئات مع الوراثة وتعدد الاشكال نصل لمراحل متقدمة جدا ي هندسة البرنامج ككل وسنتطرق لذلك لاحقا ...
أما ثالثا الخطورة .. خطورة التعامل المباشر مع الذاكرة له سيئاته طبعا بالنسبة لعدم المتمرسين والحذرين ...
نعلم أنه يجب الغاء تخصيص أي ذاكرة يتم حجزها يدويا بالغاء يدوي أيضا ... والا سيتم توقف البرنامج أو انتهاك ذاكرة النظام انتهاكا سيئا يضر بالنظام ككل ...
وغالبا ماينسى المبرمج تحرير الذاكرة التي انشئها ... واذا لم ينسى فقد يحرر الذاكرة في وقت غير مناسب يمكن أ يسبب في شلل البرنامج ككل....
مما يؤدي الى أصعب أنواع الاخطاء على الاطلاق الا وهي أخطاء ال استثناءات وانتهاكات الذاكرة .(وسنتناول بتفصيل أكثر في الدروس عن هذه النقطة) ....
يوجد نوع اخر من الاخطاء المنطقية التي لاتتسبب في وقوف البرنامج انما حدوث نتائج غير مرغوبة وهي أيضا معفدة وصعبة الاكتشاف....
ولهذا قامت مايكروسوفت أخيرا بانتاج طقم الدوت نت لأسباب كثيرة منها مشكلة التعامل مع الذاكرة بهذه الطريقة المباشرة خصوصا لمبرمجي السي بلس بلس ...
حيث أدخلت مايكروسوفت GC خاص بمنصة الدوت نت لكن يتم تفعيله في السي بلس بلس دوت نت بشكل إختياري ... فلم يتم الغاء الحجز اليدوي في نسخة السي بلس بلس الخاصة بمنصة الدوت نت والتي تدعى ب++ Manged c أو (شيفرة سي بلس بلس المدارة) .... فكل ماحدث ان زادت مرونة السي بلس بلس في نواح جديدة ولكن للأسف تم الغاء يعض ميزات المرونة الاخرى لكي تتدنى من كل من لغتي ال #C و ال
Visual Basic.Net ... قد ندخل في موضوع ال ++Manged C لاحقا.
فأقول أن مشكال الادارة اليدوية للذاكرة أو التعامل على المستوى الادنى مع المؤشرات قد وجدت صدى جيدا في ماكروسوفت ورأت أن تنتهج منهج صانعي لغة الجافا وتدير الذاكرة بشكل الي بسبب أن محاسن الادارة اليدوية أقل من المساويء ... طبعا للمبتدئين ... فأدخلت ال GC ليتم الاختيار بين التحرير اليدوي للذاكرة أو التحرير الالي أو كليهما معا وهذا طبع بالنسبة للمؤشرات....
والمؤشرات هي ليست الا متغيرات تحمل قيم عناوين في الذاكرة وليست قيما حقيقية كالارقام والحروف وماشابه ذلك ....
مثلا :
int * q ;
مؤشر ونحجز له ذاكرة قبل ان نتعامل معه على النحو التالي ...
q = new int ;
ف ال q حاليا تحمل قيمة لعنةان في الذاكرة .....
اما اذا كتبنا
int w ;
فيكون قد حجز لنا الحاسوب بشكل الي مكانا قي الذاكرة لمتغير واحد صحيح وال
w تحمل قيمة لعدد صحيح وليس مؤشرا ...
وسنفهم الفرق بشكل مفصل في الجلسات القادمة ....
ستكون هذه سلسلة دروس باذن الله للتعرف بشكل أفضل على الؤشرات ... وازالة الغموض الكامن حولها .. باذن الله ...
بداية هذه مقدمة عن المؤشرات ... المؤشرات يمكن أن توصف بثلاث كلمات ...
مميزة و مرنة وخطيرة في ان واحد...
مقدمة:
فهي مميزة لأن أغلب ان لم يكن كل لغات البرمجة (ماعدا السي والسي بلس بلس ) لاتعطيك الحرية بفعل ماتريد كيفما تريد كما هو في السي بلس ... فمبرمج السي بلس بلس له الحرية المطلقة في التعامل مع المؤشرات أو عدم التعامل على مستوى المؤشرات ... وطبعا التعامل يختص بالتعامل مع الذاكرة ... ليس الا.
فنجد ان الفيجوال بيزك لا تعطي المبرمج حرية أبدا كمبرمج السي بلس بلس ... نظرا لخطورة التعامل مع المؤشرات وادارة الذاكرة يدويا ... وأيضا لغة الجافا التي اشتقت من السي بلس بلس لاتعطي المبرمج الحرية المطلوبة ....
وللغة الجافا ململم نفايات أو Garbage Collection ويمكن الاختصار له ب GC مهتم بالغاء تخصيص كميات الذاكرة المحجوزة يدويا بشكل الي ... ومن الملاحظ أن أكثر أدوات لغة الجافا مبيعا تلك المهتمة باكتشاف الاخطاء وخصوصا (بطء عمل التطبيقات ) بسبب ال GC .... فال GC سيتسبب بعمليات تنظيف دورية للذاكرة مما يتسبب ببطء البرنامج .
أما بالنسبة للمرونة فهي ماتوصف به أقوى لغة برمجة على الاطلاق وهي السي بلس بلس فمن أهم ميزاتها ميزات لتعامل الحر جدا مع الذاكرة ... فهي تعطي بعدا جديدا كليا لهندسة البرنامج ككل ... (وسنتطرق في دروس قادمة عن أمثلة لحالات مرنة جدا كان من الصعوبة بمكان وربما استحالة أن تتم دون المؤشرات) ....
فبتكامل المؤشرات مع الوراثة مع الفئات مع الوراثة وتعدد الاشكال نصل لمراحل متقدمة جدا ي هندسة البرنامج ككل وسنتطرق لذلك لاحقا ...
أما ثالثا الخطورة .. خطورة التعامل المباشر مع الذاكرة له سيئاته طبعا بالنسبة لعدم المتمرسين والحذرين ...
نعلم أنه يجب الغاء تخصيص أي ذاكرة يتم حجزها يدويا بالغاء يدوي أيضا ... والا سيتم توقف البرنامج أو انتهاك ذاكرة النظام انتهاكا سيئا يضر بالنظام ككل ...
وغالبا ماينسى المبرمج تحرير الذاكرة التي انشئها ... واذا لم ينسى فقد يحرر الذاكرة في وقت غير مناسب يمكن أ يسبب في شلل البرنامج ككل....
مما يؤدي الى أصعب أنواع الاخطاء على الاطلاق الا وهي أخطاء ال استثناءات وانتهاكات الذاكرة .(وسنتناول بتفصيل أكثر في الدروس عن هذه النقطة) ....
يوجد نوع اخر من الاخطاء المنطقية التي لاتتسبب في وقوف البرنامج انما حدوث نتائج غير مرغوبة وهي أيضا معفدة وصعبة الاكتشاف....
ولهذا قامت مايكروسوفت أخيرا بانتاج طقم الدوت نت لأسباب كثيرة منها مشكلة التعامل مع الذاكرة بهذه الطريقة المباشرة خصوصا لمبرمجي السي بلس بلس ...
حيث أدخلت مايكروسوفت GC خاص بمنصة الدوت نت لكن يتم تفعيله في السي بلس بلس دوت نت بشكل إختياري ... فلم يتم الغاء الحجز اليدوي في نسخة السي بلس بلس الخاصة بمنصة الدوت نت والتي تدعى ب++ Manged c أو (شيفرة سي بلس بلس المدارة) .... فكل ماحدث ان زادت مرونة السي بلس بلس في نواح جديدة ولكن للأسف تم الغاء يعض ميزات المرونة الاخرى لكي تتدنى من كل من لغتي ال #C و ال
Visual Basic.Net ... قد ندخل في موضوع ال ++Manged C لاحقا.
فأقول أن مشكال الادارة اليدوية للذاكرة أو التعامل على المستوى الادنى مع المؤشرات قد وجدت صدى جيدا في ماكروسوفت ورأت أن تنتهج منهج صانعي لغة الجافا وتدير الذاكرة بشكل الي بسبب أن محاسن الادارة اليدوية أقل من المساويء ... طبعا للمبتدئين ... فأدخلت ال GC ليتم الاختيار بين التحرير اليدوي للذاكرة أو التحرير الالي أو كليهما معا وهذا طبع بالنسبة للمؤشرات....
والمؤشرات هي ليست الا متغيرات تحمل قيم عناوين في الذاكرة وليست قيما حقيقية كالارقام والحروف وماشابه ذلك ....
مثلا :
int * q ;
مؤشر ونحجز له ذاكرة قبل ان نتعامل معه على النحو التالي ...
q = new int ;
ف ال q حاليا تحمل قيمة لعنةان في الذاكرة .....
اما اذا كتبنا
int w ;
فيكون قد حجز لنا الحاسوب بشكل الي مكانا قي الذاكرة لمتغير واحد صحيح وال
w تحمل قيمة لعدد صحيح وليس مؤشرا ...
وسنفهم الفرق بشكل مفصل في الجلسات القادمة ....