Tammam Koujan

Welcome to my world

Archive for March 2nd, 2007

فكرة جميلة لشرطة الشارقة

Posted by tammamkoujan on March 2, 2007

فكرة جميلة لشرطة الشارقة

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

Posted in منوع | 2 Comments »

بعض المفاهيم في .NET

Posted by tammamkoujan on March 2, 2007

بعض المفاهيم في .NET

اشتريت مؤخرا كتابا يتحدث عن برمجة .NET Compact Framework , و بدأت القراءة فيه
و كان الجزء الأول من الكتاب يتحدث عن مفاهيم .NET Framework و ألية عمله و تصميمه
بعض مميزات المترجمات للغات الدوت نت
سأحاول أن أشارككم ببعض النقاط المهمة من هذا الكتاب

private void SayHello()
{
string str1 = “Hello”;
StringBuilder sb1 = new StringBuilder(“Hello”);
MessageBox.Show(“Hello”, “Hello”);
}

في المثال السابق نلاحظ أن كلمة Hello قد تكررت أربع مرات فهل يتم حفظ أربع كلمات Hello
في التطبيق الذي أنشأناه , فعليا لا يتم ذلك بل يقوم المترجم بإضافة اربع مؤشرات تدل لعبارة Hello واحدة
و بالتالي سيكون حجم الملف التنفيذي أصغر مما كان ممكنا أن يكون لو تم تخزين أربع كلمات “Hello”

نتحدث عن الانواع القياسية للبيانات في .NET :
هناك نوعان قياسيان :
Value Types : و هي انواع بسيطة معدة لتخزن بيانات مجردة
أمثلة على Value Types :

Integers

Floating-point numbers

Data structures

Enumerations

الهدف من Value Types ان تكون صغيرة و سريعة , و عندما تستخدم كمتحولات محلية
فإنها تتوضع في المكدس Stack , و عندما تحتوى في object فإنها تمثل على شكل stream بسيط من البايتات

كل الـ value types تتفرع عن صنف اساسي هو System.ValueType
و هذا الصنف يتفرع بدوره عن System.Object
الـ value types لها محدودياتها أيضا , فبينما تعرف على أنها أصناف .NET , فإنها بحد
ذاتها تعتبر أصنافا مغلقة , أو بعبارة أخرى لا يمكنك ان تستخدم System.Int32 (او اي value-type class أخر)
كصنف رئيسي (base class ) لأنواع أخرى
ايضا المتحولات من نوع value-type يجب ان تحتوي دوما على قيمة ما و يجب ألا تكون فارغة

Reference Types

أغراض الـ Reference Types يمكن الوصول لها في زمن التنفيذ باستخدام مرجع (Reference )
هو مؤشر للغرض بحد ذاته .

أمثلة على reference types :
Objects created from a class

Objects encapsulating Win32 system objects (forms, controls, graphic objects, threads, mutexes, files, and so on)

Arrays

Strings

كل غرض (object ) يمتلك ترويسة غرض قياسية (standard object header)
حجم ترويسة الغرض هو 8 بايت
و الحجم لأصغر غرض ممكن هو 12 بايت
و بالتالي فإن reference types تأخذ مساحة أكبر مما تأخذه value types

Reference types تمتلك دعما تاما للبرمجة غرضية التوجه
و من اكثر ميزاتها فائدة هي الوراثة , كما بمكن ان تكون قيمتها null

النقطة التي اريد التركيز عليها هي التالية :
استخدام Value Types و Reference types كمتحولات
Value Types يمكن ان تمرر بالقيمة او بالمرجع
عندما تمررها بالقيمة فإن نسخة من قيمة المتحول توضع في المكدس (stack)
و بالتالي فن الدالة المستدعية ستتعامل مع نسخة من المتحول و لن تؤثر على قيمة المتحول الأصلية
أما عندما تمررها بالمرجع فإنه يتم وضع مؤشر في المكدس يشير إلى القيمة
و الدالة التي تستدعي المتحول تستطيع ان تغير قيمته
فكرة التمرير بالقيمة و المرجع فكرة معروفة لكثيرين لكن ليس هذا بيت القصيد اكملوا معي
المتحول من نوع reference-type يحتوي على مؤشر يشير للغرض
هنا قد يحصل بعض الارباك
هناك نوعان Value Types و reference-type و هناك طريقتان لتمرير المتحولات
بالقيمة (Value ) و بالمرجع (reference)

لذا قد تكون توقعت انه يجب ان نمرر Value Types بالقيمة (Value ) و reference-type بالمرجع (reference) ؟

الـ Value Types كما ذكرنا تمرر بالقيمة و بالمرجع
أما الـ reference-type فتمرر على نحو مألوف عادة بالقيمة و ليس بالمرجع

السبب هو ان قيمة الـ reference-type هي عبارة عن مؤشر , و بالتالي قيمتها هي القيمة نفسها التي تمرر بين الدوال (و ليس نسخة عنها)
من دون شك يمكنك ان تمرر reference-type بالمرجع لكن هذا يؤدي إلى الحصول على مؤشر لمؤشر , و هذا ما يحص نادرا
و هذه الامكانية تحدث لحالات قليلة كبعض الاستدعاءات لـnative code عند الحاجة

تمام كوجان في 02/03/2007
ُEmail : TammamKoujan@Gmail.com
يجوز نشر هذه المقالة أو أجزاء منها بشرط المحافظة على اسم الكاتب و ذكر المصدر

Posted in برمجة | Leave a Comment »