البرمجة بالكائنات … نصف خطوة للأمام

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

سواءً أكنت تعلم ماذا نعني بكلمة Class أو لاتعلم، فإن أهم ما يجب أن تعرفه الآن أن لكل Class وظيفة محددة،فكما أن لكل Function في البرمجة التقليدية وظيفة أساسية واحدة، فدالة fopen تقوم بفتح ملف، ودالة print تطبع نص، فإن الأمر مشابه بالنسبة Classes فلكل منها وظيفتها الخاصة، و سيتبين من خلال الأمثلة و المواضيع القادمة كيف تختلف وظائف Functions عن وظائف الكائنات.

من الأمثلة على بعض الكائنات و وظائفها، كائن يختص بالتعامل مع قاعدة البيانات بحيث تتم كافة العمليات المرتبطة بقاعدة البيانات عن طريق هذا الكائن، أو كائن آخر يسمح لك بالتأكد من أن البيانات التي أدخلها المستخدم تطابق الشروط التي تحددها بحيث أن حقل الإسم لايمكن أن يحتوي إلا على أحرف و أن حقل السن لابد أن يكون بين 15 إلى 25 على سبيل المثال.

إذاً أول نصف خطوة تنص على أن لكل كائن وظيفة واضحة محددة …

أتوقف الآن و بالنسبة لمن تأكلهم أصابع يدهم و يريدون كتابة أكواد برمجية سنبدأ في ذلك في النصف خطوة القادمة ^_^ ..

البرمجة بالكائنات …

“قديماً كان المبرمج يفكر في البرنامج على انه مجموعة من الدوال Routines أما في القرن الواحد و العشرين فقد أصبح يفكر فيه على أساس أنه مجموعة من الكائنات”

قالها Steve McConnel في كتاب Code Complete

أضحكتني يا سيد Steve، بالرغم من احترامي لكتابك الرائع Code Complete إلا أني أختلف معك كثيراً في الجملة السابقة التي ذكرتها (هذا من باب التسلق على أكتاف العظماء و إلا من أنا حتى أرد على كاتب تقني عظيم مثل هذا) ،فإني أرى مِن حولي أن بين كل 10 مبرمجين هنالك 12 مبرمج يجدون فكرة البرمجة بالكائنات غامضة إلى حد ما… كيف لا و قد امتلأت كتب البرمجة بأمثلة تشرح هذا الموضوع بطريقة عجيبة و غريبة !! فعندما تقرأ في أحد الكتب مثالاً يوضح فكرة الكائنات فيذكر بأن “الإنسان” يعتبر Class و أن “أحمد و محمد و علي و عباس و شعبان عبد الرحيم” عبارة عن Objects فكيف تريدنا بالتحديد أن نربط هذه المعلومة بالتطبيقات التي نبرمجها يومياً ! ..

على أية حال يا أحباب، تذكرت و أنا أقرأ كلام Steve المعاناة التي مررت بها قديماً عندما أردت تعلم مفهوم البرمجة بالكائنات حتى يسر الله لي لقاءً مع الأخ “المبرمج” فكان شرحه لي بطريقة مبسطة خالية من التعقيد أو التشبيهات الغريبة، بل كان يحدثني بلسان المبرمج و بعقلية المبرمج (و هذا قد كان قبل أكثر من سبعة سنوات و لست أعلم من حينها عن مكان الرجل أو أخباره لكني أسال الله أن يجزيه خيراً حتى يرضيه).

لذلك سأحاول أن أكتب مجموعة تدوينات توضح مفهوم البرمجة بالكائنات، و قد تجولت قليلاً بين المواقع العربية لأقرأ ما كُتب في هذا الموضوع حتى لا أكرر ما ذكره من سبقوني و بنفس الأسلوب، فخرجت بفكرة أظنها و الله أعلم ستساعد على إيصال مفهوم البرمجة بالكائنات بدون تعقيد …

حان و قت النوم .. اكمل لاحقاً بإذن الله .. ^_^

DZONE ..

على غرار موقع digg يأتي موقع DZONE ليقدم خدمة نشر الروابط و ترشيحها من قبل الزوار، لكن يتميز عن الأول بأن الروابط المنشورة تتعلق بالمواضيع البرمجية فقط، وهذا تعريف الموقع كما ورد فيه :

dzone.com (DZ) is a link-sharing community where member participation determines what gets published and what does not. Members submit links to developer-related content into a queue, and you vote to indicate whether or not you like those links…..

تصفحته على عجالة ، و يظهر أنه يستحق المتابعة ..

رواسب التفكير القديم ستؤخرنا .. التغريد خارج السرب

” إن الحياة مليئة بل و تزخر بالجديد، و لكن من الضروري التخلص من القديم كي تفسح المجال للجديد “

لسوء الحظ قد تصبح كل خبراتك أو جزء كبير منها بدون أي قيمة بمجرد صدور تقنية جديدة، هذا الأمر قد يغير حياتك تماماً، فتصبح بلا فائدة بعد أن أمسيت خبيراً محترفاً لايشق له غبار.

وليست الأمثلة عنا ببعيدة، فما حدث مع مبرمجي Visual Basic و ASP مع صدور Dot Net يظهر لنا كيف أنخفضت قيمة المبرمجين السابقين و الذين لم يتأقلموا مع الوضع الجديد حتى أن أعمالهم باءت مهددة بالخطر، كذلك الحال من قبل مع Perl و COBOL و غيرهم، من لا يتأقلم سرعان ما يبدأ التغريد خارج السرب حتى يخفت صوته مع الزمن فلا تكاد تسمع له صوتاً !، ابحثوا حولكم ستجدون الكثير من هؤلاء المغردين.

و كما ترون يا سادة نحن الآن على مفترق مهم، فشكل الإنترنت الذي عهدناه بدء بالتغير، فتقنية مثل الـ Ajax و مواقع مثل المدونات و الـ Wikis بدئت تأخذ حيزاً كبيراً من الإهتمام – إن لم يكن كل الإهتمام ! -، هذه التغيرات بالطبع تصحبها تغيرات في طريقة التفكير سواءً على المستخدمين أو المبرمجين، فإما أن نركن إلى ما تعلمناه و ننضم إلى قائمة المغردين خارج السرب، أو أن نتعلم و نتأقلم فنتقدم و نقود السرب!.

Ruby On Rails .. لهذا أحببتها و لهذا تركتها ..

ماهي Ruby و ماهي Rails ؟
Ruby هي لغة برمجة تشبه إلى حد كبير لغة Python، يقول “يوكيهيرو” المطور الرئيسي للّغة :

..الناس و بالأخص مهندسي الكمبيوتر يركزون اهتمامهم عادةَ على الآلة، فتجدهم يفكرو في الأعمال التي ستجعل الآلة تعمل بشكل أسرع، أو بآداء أفضل، لكن في الحقيقة نحن بحاجه للتركيز على البشر أنفسهم !، … نحن الأسياد و الآلات هي العبيد..

أما Rails فهو إطار عمل-Framework مكتوب باستخدام لغة Ruby لتسهيل عملية إنشاء تطبيقات الويب ، و عندما يذكر الإسم Ruby On Rails أو RoR فالمقصود به إطار العمل و ليس لغة البرمجة.
(معلومات و رابط متعلقة بـ Ruby و RoR في موضوع “سويعات مع روبي”)

أبرز المميزات
غالباً ما تتصدر ميزة تسمى scaffold المواضيع التي تتحدث عن إطار العمل RoR، و هي ميزة توفر عليك الكثير من الوقت في المراحل الأولى من تطوير البرنامج و تثير الكثير من الإعجاب لمن يشاهدها لأول مره، فعن طريق تحديد اسم أي جدول من قاعدة البيانات يتم بشكل تلقائي إنشاء نماذج الإضافة و الحذف و الإستعراض و التعديل (عمليات CRUD).

من أبرز المميزات لإطار العمل أيضاً اعتماده على نمط يسمى Active Record، هذا النمط يسهل عملية التفاعل مع قاعدة البيانات، فإذا أفترضنا أن لديك جدول يسمى articles يحتوي على ثلاثة حقول id,title,description فبإمكانك أن تضيف سجل جديد لهذا الجدول بالشكل التالي :

article = Article.new
article.title = "Article Title"
article.description = "Description"
article.save

لهذا أحببتها و لهذا تركتها ..
هذه الميزتان (الميزتين؟) و غيرهما كانتا سبباً في إعجابي بإطار العمل ، و في فترة من الفترات بدلت إسمي على الماسنجر ليصبح : I Love Ruby ^_^، لم يدم هذا الإعجاب طويلاً ، فكلما تعمقت في معرفة التفاصيل، بدأت أكتشف أنه مجرد إطار عمل!!، تنبهت لاحقاً أن الـ scaffold طبقت بالفعل في إطارات عمل للغة PHP مثل Symfony و Cake الذي يستخدم نمط ActiveRecord أيضاً .

أستطيع أن أفهم الآن السبب وراء حماسة الكثير من المبرمجين لـ Ruby on Rails، إنه الإنطباع الأولي الذي تتركه اللغة عند استخدامها لأول مره -بالأخص ميزة الـ scaffold، أما غير ذلك فأكاد أجزم بأنها مجرد إطار عمل، و ليست Cake و Symfony ببعيده عنها.

الجغرافيا تخترق كل التخصصات – GIS

الجغرافيا ليست المادة المفضلة عند الكثيرين، لكن عندما ننظر لها على طريقة “أنظمة المعلومات الجغرافية – Geographical Information Systems -GIS” فنحن ننظر لنوع آخر مختلف تماماً عن المادة الكئيبة التي كنا ندرسها في المدرسة، كالعادة سأتجاوز التعريفات الأكاديمية و غير الاكاديمية و أستعرض بدلاً منها مجموعة من الأمثلة الواقعية عن الـ GIS .

موقع EgyMaps الذي يعتبر أحد التطبيقات العربية الرائدة في مجال الـ GIS على شبكة الويب، يقدم الموقع خرائط لقطاعات مختلفة كالمطاعم و المجمعات التجارية و محلات الترفيه الموجودة في مدينة القاهرة، كذلك يوفر لك الموقع خدمة تحديد أقصر خط بين أي نقطتين(شارعين ، شارع و مطعم ..الخ) ، إضافة إلى إمكانيات البحث المتوفرة فيه.

من ضمن تطبيقات الـ GIS العربية على الويب أيضاً موقع ExploreDubai (مغلق حالياً للتطوير) الخاص بمدينة دبي، و موقع Alnokhba الذي يعرض خريطة مدينة جدة، و موقع MakkahGIS الذي يعرض فنادق إسكان الحجاج بمنطقة مكة المكرمة.

ننتقل من المواقع السياحية إلى مواقع الخدمات، موقع Google Analytics الخاص بتقديم إحصاءات عن زوار الموقع ، يظهر خريطة توضح كثافة الزوار من كل دولة، كذلك تحدث أخي “رضا” في مدونته عن خدمة مشابهة تسمى ClustrMaps.

يذكر هنا أن إعلان Google عن خدمة Google Maps API و التي تسهل على المبرمجين ربط خدماتهم بالخرائط ولدت مجموعة كبيرة جداً من هذا النوع من المواقع، و أثناء بحثي لكتابة هذا الموضوع وجدت مدونة بإسم Google Maps Mania يتابع صاحبها الأفكار و المواقع التي تعتمد على خدمة Google Maps، و من ضمن المواقع التي وردت في المدونة السابقة موقع PackageMapper الذي يظهر لك موقع الطرود الخاصه بك من شركة FedEx على الخرائط .

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

الخلاصة و نقاط متفرقة :

  • إذا ما جمعنا بين الخرائط و المعلومات عن طريق الكمبيوتر فسنخرج بأنظمة تسمى أنظمة المعلومات الجغرافية ، مجالات استخدام هذه الأنظمة متعددة و متنوعة .
  • يعتبر هذا المجال في الفترة الحالية من مجلات البحث الساخنة و الإستثمارات فيه بالملايين و فرص الإبداع و التميز فيه كثيرة جداً خصوصاً في عالمنا العربي و الخليج العربي خصوصاً.
  • بدأت بعض الجامعات في تدريس هذا المجال كتخصص مستقل.
  • من ضمن أنظمة دعم إتخاذ القرارات Decision Support Systems يوجد فرع خاص بأنظمة المعلومات الجغرافية نظراً لأهمية هذه الانظمة في عملية إتخاذ القرارات خصوصاً للقيادات العليا.
  • مع وجود خدمات مثل Google Maps API و برامج مفتوحة المصدر مثل MapServer لن يقتصر تطوير هذا النوع من الانظمة على المؤسسات و الشركات الكبيرة بل توجد أفكار كثيرة لتطبيقها من قبل المبرمجين المستقلين أو مجموعات المبرمجين.
  • شركة ESRI هي اكبر شركة تعمل في هذا المجال و برامجها بالنسبة لمجتمع الـ GIS مثل برامج Adobe بالنسبة للمصممين ^_^.

” … قال الإمام البخاري – رحمه الله : كان ابن عمر وأبو هريرة رضي الله عنهما يخرجان إلى السوق في أيام العشر يكبران ويكبر الناس بتكبيرهما ، وقال أيضا : وكان عمر يكبر في قبته بمنى فيسمعه أهل المسجد فيكبرون ويكبر أهل الأسواق حتى ترتج منى تكبيراً … الله أكبر ، الله أكبر ، لا إله إلا الله ، الله أكبر ، الله أكبر ، ولله الحمد .. المصدر

قراءة الكتب البرمجية

قرأت عدداً لا بأس به من الكتب البرمجية التي تتحدث عن لغات بعينها كتلك التي عناوينها من نوع : “احترف C-Sharp” أو “تعلم كل شيء عن Java”، فوجدت أنها عادة ما تكون مقسمة إلى أجزاء، بدايةَ بجزء يشرح طريقة تجهيز بيئة العمل و تثبيت المترجم و كيفية تشغيل برنامجك الأول، ثم جزء يتحدث عن الـ Syntax الخاص باللغة، و بعد ذلك مجموعة فصول كل منها يمثل أحد تطبيقات اللغة مثلاً طريقة الاتصال بقواعد البيانات أو كيفية التعامل مع الملفات.

و لا يخفى عليك أن الـ Syntax في أكثر اللغات يتشابه حتى يصل إلى حد التطابق أحياناً ( كما هو الحال بين C-Sharp و Java و ++C ) لذلك أعتدت أن أتجاوز  الفصول الخاصة بالـ Syntax فالقراءة فيها مضيعة للوقت، إلا إذا أحسست أن الـ Syntax غير مألوف فأتصفحها تصفحاً سريعاً.

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

وليس أجمل من هذه الكتب إلا تلك التي تتحدث عن البرمجة كمفهوم  بعيداً عن الربط المباشر بلغة محددة، كالحديث عن أساليب البرمجة أو عن طرق تصميم البرمجيات من أمثال كتاب “The Pragmatic Programmer” و “Code Complete” و كتاب Design Patterns: Elements of Reusable Object-Oriented Software و غيرهم.

علاقة غرام بيني و بين الـ Cheat Sheet

Inmyroom“Cheat Sheet” لا أعرف لها تعريباً مناسباً و التعريب الحرفي لا يؤدي الغرض، لكنها ببساطة عبارة عن ملخصات في ورقة واحده أو مجموعة أوراق،وليس أفضل من الشرح إلا المشاهدة، ففي موقع ILoveJackDaniels مجموعة من الـ Cheat Sheet منها الـ PHP Cheat Sheet و التي تحتوي على ملخص لبعض أهم الدوال المستخدمة في PHP إضافة إلى ملخص للـ Regular Expression، وهي مثال جيد على الـ Cheat Sheet.

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

عن نفسي أجد أنه من المفيد جمع الـ Cheat Sheet و طباعتها و تثبيتها في مكان ظاهر خصوصاً لمن يعملون في مكاتب خاصة، فحتى مع تطور وسائل البحث الإلكترونية لا يزال البحث بالعين المجردة في صفحة واحده مثبته أمامك أسرع بكثير ^_^.

مجموعة من الـ Cheet Sheat :

البحث عن الـ Cheat Sheet :
الـ Cheat Sheet مبعثرة في أرجاء الإنترنت، يمكنك استخدام Google و البحث عن شيء مثل “ X Cheat Sheat” حيث X تمثل التقنية التي تريد أن تحصل على Cheat Sheet لها.

تعديل بعد النشر : يمكن أيضاً استخدام العبارة “ X Reference Card” حيث تمثل X أيضاً التقنية التي تبحث عن ملخص لها”

تنعدم الحياة عندما تنعدم الإختيارات

بعض الشركات المنتجة للغات البرمجة تحاول أن تلمح ( أو تصرح في بعض الأحيان ) إلى أن لغتهم هي الانسب و الأفضل لكل الحالات، و الحقيقة أنه لاتوجد لغة حتى الآن يمكن أن تعتبر الأنسب لكل الحالات، فلغات تطوير الويب على سبيل المثال ليست مناسبة لبناء نظام تشغيل، و لغات الذكاء الصناعي ليست معدة لبناء تطبيقات ويب، و إذا أردت أن تطور نظام تشغيل فأنت بلا شك ستحتاج إلى لغات منخفضة المستوى low-level languages، فطبيعة المشروع هي التي تحدد أي لغة هي الأنسب.

هذا القول بأن لغة برمجة واحده هي الأنسب لكل الحالات هو كالقول بأن المطرقة ستحل محل المفك و الإزميل و مقشرة الأسلاك، فلغات البرمجة ليست إلا أدوات في جعبة المبرمج، يمتلك مجموعة منها كل واحدة تكون أفضل من غيرها في حالات محدده، كما أن بإمكانه أن يستبدلها إذا وجدها عديمة الفائدة.

لاتتعصب للغة برمجة واحدة و تدافع عنها و تقاتل من أجلها و كانها “من بقية أهلك!”، بل كن متفتحاً قادر على استيعاب اللغات الأخرى و المفاضلة فيما بينها على أسس علمية ضمن إطار المشروع الذي تعمل عليه، و لا تطلق على نفسك لقب “مبرمج PHP” أو “رجل الـ Java” و إنما يكفيك أن تتسمى بـ “مبرمج” فهي أعم و أشمل و أرقى.

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

الإصدار المعدل من دويكيات

(تحميل النسخة الجديدة: dWikiat7002.zip 58 KB)
DWikiat3في الموضوع السابق “دويكيات – برنامج تحرير ويكي عربي لسطح المكتب” طرح الإخوة مايقارب الـ 25 اقتراح لتحسين البرنامج، وقد قمت بتطبيق 10 ملاحظات بحسب ما سمح به الوقت، و أبرز ميزتين هما :

 

دعم الـ CSS
هذه هي الميزة الأبرز في هذا الإصدار المعدل، يمكنك إضافة ماتشاء من الـ Styles و تنسيق النصوص باستخدام كل مميزات الـ CSS، الألوان، الخطوط، الحدود … الخ
قد تجدوا أن الـ Syntax الخاص بالتنسيق غريب نوع الشيء فقد اخترت أن يكون بهذا الشكل :
(#StyleClass#)النص(#/StyleClass#)
مثلاً لجعل النص بالون الأحمر :
(#red#)النص(#/red#)
قد تتعجبوا من هذا الـ Syntax الغريب، و الحقيقة أني اتفق أنه غريب لكن الهدف هو البعد عن أي Syntax قد يشابه أي شيء آخر حتى لا يكون هنال أي تداخل، من يستطيع أن يقترح أسلوب آخر أفضل سأكون ممتن له.

System Tray
بمجرد تصغير البرنامج عن طريق زر التصغير أو عن طريق الضغط على Ctrl+M او اختيار “تصغير” من قائمة “ملف” سيتم وضع أيقونة البرنامج في الـ System Tray مما يسهل عليك الوصول للبرنامج.

تحميل النسخة الجديدة: dWikiat7002.zip 58 KB