Object Oriented Programming « مغامرات برمجية

وسوم: Object Oriented Programming

تعديل ما لا يمكن تعديله باستخدام Extension Methods

نّشر في: 2012/10/30
تعليقات: تعليق واحد

أحياناً كثيرة نستخدم كوداً لم نطوره شخصياً. هذه سنة الحياة بالنسبة للمبرمجين. وأحياناً كثيرة يكون هذا الكود داخل DLL. أي بمعنى آخر، لا نستطيع التعديل عليه. وهذا لا بأس به في معظم الأحيان حينما يكون هذا الكود يناسب احتياجاتنا. ولكن سنة أخرى من سنن حياة المبرمجين هو أنه هناك دائماً حالات فردية واستثنائية.

قبل فترة كنت أعمل على تعديل تطبيق طوره فريق آخر (في دولة أخرى!) وأضيف بعض الخصائص الجديدة عليه. وكانت طبقة التواصل مع قاعدة البيانات Data Access Layer (أو DAL) مطورة باستخدام أداة غير مجانية. هذا كان معناه أنه رغم أن الكود المصدري لهذه الجزئية كان موجوداً، لم يكن بمقدوري التعديل عليه وعمل كومبايل دون أن نشتري هذه الأداة. وهذه لم تكن مشكلة، حيث أن جميع الإجراءات التي أحناجها موجودة.

أحدها كان الإجراء GetAllReports التابع للكلاس ReportDAL والذي يعطيني جميع التقارير قي سنة معينة. المشكلة كانت تكمن في أن هناك عملية تتكرر كثيراً وهي تصفية الناتح كثر بنوع التقرير. العملية ليست صعبة. سطرين أو ثلاثة باستخدام Linq كان كفيلاً بهذا. ولكن هذا الكود بدأ يتكرر بكثرة في أنحاء البرنامج، لذا أصبح من اللازم أن يصبح هذا الكود الجديد هو الآخر جزئاً من الـDAL. ولكن الكود لا يمكن تعديله (دون دفع نقود).

الحل الكلاسيكي كان أن نطور كلاي جديد يرث الـClass القديم ويضيف الدالة الجديدة. ولكن هذا مزعج حيث أنه علي تعديل البرنامج كله ليستخدم الكلاس الجديد. هنا تأتي فائدة الـExtension Methods.

(اقرأ المزيد …)

Post to Twitter

مشروع: تطبيق Ray Tracing باستخدام C‎#‎ – الحلقة 3 – الظلال والانعكاسات

في الدرس السابق وصلنا إلى الصورة بعاليه. وهي صورة فيها مقدار لا بأس به من الواقعية ولكن هناك حتماً مجال للتحسين. يمكننا أن نرى من التظليل أن مصدر الضوء قادم من الأعلى، مما يعني أنه من المفترض أن يكون هناك ظل أسفل الكرتين في السطح الأخضر. وسنضيف أيضاً أحد أشهر خواص الصور المنتجة بواسطة الـray tracing وهي الانعكاسات (كما يحدث في المرايا). وكما وعدتكم سنضيف مصدر ضوئي جديد هو الـpoint light. لدينا ما يكفي لدرس جديد إذن! جهزوا أدوية الصداع وهلموا معي.

 
(اقرأ المزيد …)

Post to Twitter

مشروع: تطبيق Ray Tracing باستخدام C‎#‎ – الحلقة 2 – الإضاءة والتظليل


في الدرس الأخير قمنا ببناء برنامج Ray tracing مبسط جداً. قد تكون نتيجته مخيبة للأمل نوعاً ما، ولكن يمكن اعتباره “هيكل” لبرنامج Ray tracing أكثر تعقيداً. قمت عمداً بإبقاء معمارية البرنامج قابلة للتوسيع بقدر الإمكان حتى نستطيع إضافة أشياء جديدة في المستقبل. وبما أننا في درس جديد حان وقت تطوير برنامجنا المتواضع أكثر. دعنا نراجع النتيجة التي وصلنا إليها في المرة السابقة.

أول شئ قد نلاحظه هو أن الألوان مصمتة. في العالم الواقعي لا يكون اللون موحداً هكذا فوق أي شئ. هناك تدريجات في الألوان، أو ما يسميه الفنانون بالتظليل أو shading. هذا التظليل هو نتيجة لالتقاء الإضائة بأجسام متفاوتة في الشكل. وهذا ما ينقصنا بالفعل. الإضاءة! في برنامجنا السابق لم نضع حسبان للإضاءة وتأثيرها على الأجسام. هذا سيكون درس اليوم. الإضاءة والتظليل.

(اقرأ المزيد …)

Post to Twitter

مشروع: تطبيق Ray Tracing باستخدام C‎#‎ – الحلقة 1 – الأساسيات البحتة

الرسوم ثلاثية الأبعاد بواسطة الكمبيوتر هو موضوع مشوق وله شجون. لذا اخترته ليكون الموضوع الاستهلالي لتصنيف جديد في المدونة، أنوي من خلاله تقديم مشاريع كاملة “من طق طق لسلام عليكم” كمجموعة دروس تطبيقية. المشروع التالي سيكون تطبيقاً لما يسمى بالـRay Tracing باستخدام لغة C‎#‎. لماذا C‎#‎ بالذات؟ لا يوجد سبب معين. مزاجي كان ميالاً نحو C‎#‎ عندما بدأت المشروع. ولكن ما سأقدمه هنا يمكن بسهولة تطبيقه في أي لغة. الصورة بالأعلى هي نتيجة لعملية Ray Tracing باستخدام برنامجي.

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

(اقرأ المزيد …)

Post to Twitter

لماذا أكره Java و ‎C‎+‎+‎ و ‎C‎#‎ (كلغات تعليمية)

يبدو أن مقالات “أنا أكره” ستصبح روتيناً جديداً هنا! ما علينا. أولاً دعوني أوضح ماذا أقصد بلغات تعليمية. ما أقصده هي اللغات التي تستخدم (عادةً في المنشآت الأكاديمية) لتعليم مبادئ البرمجة. 90% من طلاب الجامعة الذين يدخلون أقسام الحاسب لم يبرمجوا سطراً في حياتهم من قبل. ومواد مثل “مبادئ برمجة 101″ و مستنسخاتها هي المقدمة التي تستخدمها المنشأة الدراسية لإعطائهم بصيص ضوء إلى عالم البرمجة.

رغم أنني تركت مقاعد الدراسة منذ أيام كان رجال الكهف يصارعون الديناصورات من أجل حفنة دراهم، إلا أنني أحب من وقت لآخر متابعة ما يجري في الجامعات وتطور التعليم الحاسوبي بها. وهناك توجه مقلق نحو اعتماد لغات Java و ‎C‎+‎+‎ و ‎C‎#‎ كلغات تعليمية. أنا لا أنقص من قدر هذه اللغات الجليلة والمخضرمة، ولكنني أسلط الضوء على ما أراه غير مناسباً لها.

(اقرأ المزيد …)

Post to Twitter

مسألة أويلر رقم 15: الـGraph والتصميم المفتوح باستخدام الـOOP

Project Euler Problem 15

نص السؤال:

إذا بدأنا من الركن الأيسر الأعلى من شبكة ذات حجم 2 × 2، فهناك 6 طرق (دون تراجع) للوصول إلى الركن الأيمن السفلي.

Euler 15كم طريقاً هنالك للمرور خلال شبكة 20 × 20؟
 
(اقرأ المزيد …)

Post to Twitter

page 1 of 1
Project Euler
أحدث التدوينات
تصنيفات
الأرشيف
منوعات
System Down على Twitter

مرحباً , تاريخ اليوم هو الثلاثاء, 2017/02/21