الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Dynamic Programming

مثبّت
بدأه VB Helper في 8 نوفمبر 2011 · 8 رد · 8,094 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

ان تطور الكثير من اللغات مثل الـ Ruby والـ Python وكثرة استخدام الجافا سكربت اثارت الكثير من الاهتمام للبرمجة الديناميكية. بدأت السي شارب طريقها إلى "dynamic" في الاصدارات السابقة للدوت نت وذلك من خلال الكلمة المحجوزه var والاجراءات المجهولة anonymous methods

في الإصدار الرابع تم اضافت النوع dynamic, بالرغم من ان السي شارب مازالت لغة statically typed, فتلك الاضافات اعطتها القدرة الديناميكية التي يبحث عنها بعض المطورين

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

Calculator calc = GetCalculator();
int sum = calc.Add(12, 25);

في المثال اعلاه لنفترض ان لدينا الاجراء GetCalculator الذي يرجع كائن من نوع Calculator وبالتأكيد سيتعرف المترجم على الاجراء Add داخل الفئة نفسها لوجود فئة CLR ضمن المشروع ,ومن ثم سيتم تمرير الوسيطين 12 و 25 وجمعها وبعدها سيتم ارجاع النتيجة في المتغير sum

لنتخيل عدم وجود فئة CLR في المشروع, فما العمل؟!! فأكيد من خبرتنا في اللغة سيتم كتابة كود باستخدام الـ Reflection على النحو التالي

object calc = GetCalculator();
Type calcType = calc.GetType();
object res = calcType.InvokeMember("Add", BindingFlags.InvokeMethod, null, calc, new object[] { 12, 25 });
int sum = Convert.ToInt32(res);

سنلاحظ في المثال اعلاه ان تم تعريف كائن من نوع object ومن ثم تم جلب نوعه عبر الاجراء GetType واخيرا تم استدعاء الاجراء InvokeMember ليتم تمرير اسم الاجراء كنص والمتغيرات التي ستمرر لها, واخيرا تم تحويل المرجع الى نوع صحيح وحفظه في المتغير sum

وهو نفس الحال لو كان الكائن Calculator معرف ضمن الجافاسكربت

ScriptObject calc=GetCalculator();
object res=calc.Invoke("Add",12,25);
int sum=Convert.ToInt32(res);

سنلاحظ تم تعريف كائن من نوع ScriptObject ليتم حفظ النوع المرجع من ثم استدعاء الاجراء Add وتمرير وسائطه عبر الاجراء Invoke واخير تحويل الناتج الى نوع صحيح وحفظه في المتغير sum

اما الان تم توحيد جميع الطرق السابقة ليتم معاملة الكائنات الديناميكية بصورة ستاتيكية

dynamic calc = GetCalculator();
int sum = calc.Add(12, 25);

فقد تم تعريف المتغير calc من نوع dynamic والان يمكننا كتابة اي شيء بعد calc. ولقد تم كتابة الاجراء Add بالرغم انه المترجم لن يتنبأ بذلك .. لماذا؟!! لأنه في الاساس لن يتم التعرف على النوع calc الا في زمن التشغيل, وحينها سيقوم المترجم بالتأكد من صحة وجود الاجراء Add وتحويل القيمة اوتوماتيكيا الى نوع صحيح وسيتم فظها في المتغير sum

5

.:: Wish to become better and better ::.

#2

شكرا ً لك استاذنا VB Helper

افهم من كلامك انه يستخدم Dynamic في حالة عدم عدم وجود فئة CLR

فهي تغني عن استخدام الـ Reflection

حسنا ً في حالة وجود فئة CLR هل يفضل استخدام Dynamic وهل هي سريعة

M.B.O

Mohamed Bin Othman

إبن المكلا

يابني البشر ماذا فعلتم بالبشر !!

إسـألـنـي

#3

السلام عليكم ورحمه الله وبركاته

اخي M.B.O البرمجة الديناميكية تغني عن عمل الكود المضجر باستخدام الـ Reflection, اما اذا كنت تتعامل مع فئة لها كود CLR فلا افضل الديناميك من عدة نواحي: Error Checking, Debugging, Tooling والكثير الكثير

1

.:: Wish to become better and better ::.

#4

شكرا ً لك استاذنا الغالي على الاجابة :happy:

M.B.O

Mohamed Bin Othman

إبن المكلا

يابني البشر ماذا فعلتم بالبشر !!

إسـألـنـي

#5

السلام عليكم ورحمه الله وبركاته

لاشكر على واجب .. بالتوفيق ..

.:: Wish to become better and better ::.

#6
VB Helper كتب:

السلام عليكم ورحمه الله وبركاته

اخي M.B.O البرمجة الديناميكية تغني عن عمل الكود المضجر باستخدام الـ Reflection, اما اذا كنت تتعامل مع فئة لها كود CLR فلا افضل الديناميك من عدة نواحي: Error Checking, Debugging, Tooling والكثير الكثير

بالفعل انه كود مزعج .. شخصيا عانيت منه كثيرا .. GetType و ReadValue و InvokeMember و SetValue بصراحة شي مقيت تماما. و الـ dynamic type كان خطوة قوية باتجاه الكود الديناميكي متل ما تفضلت أخي الكريم.

تحياتي

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#7

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

1
#8

السلام عليكم ورحمه الله وبركاته

 

اخي بالتأكيد الـ Static Type افضل بكثير من الـ Dynamic Type, ولكن في الاماكن التي تعجز فيها عن استخدامها يمكنك استخدام الـ Dynamic Programming

.:: Wish to become better and better ::.

#9

الله يعطيك العافية ... أخي للأمانة العلمية بس أحب نصحح الملصطلحات

مصطلح Dynamic Programming هو فرع من الرياضيات يهتم بحل مسائل الأمثلية Optimization وبحوث العمليات Operation Research

مصطلح أن اللغة Static Type هو في الواقع Strongly Typed حيث Static Type تعني استخدام الكلمة المفتاحية static مع الكلاس

الكلمة المفتاحية var مختلفة تماما عن dynamic لأن var ميزة من بيئة visual studio حيث يقوم المفسر compiler بتخمين نوع المتحول أي أن النوع محدد تماما وليس object ولا dynamic

 

شكرا جزيلا لكم

2

مواضيع مشابهة