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

طريقة لتعلم لغات البرمجة غرضية التوجه مثل جافا و سي شارب

بدأه حسام الشامي في 16 سبتمبر 2011 · 6 رد · 4,754 مشاهدة · في المقالات العلمية و التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

طالما اننا في منتدى متخصص بالبرمجة , فالمفروض أن معظم (قلت معظم) أعضاء المنتدى يعرفون لغات برمجة , أي قاموا بتعلمها في مدرسة أو جامعة أو مراكز تعليم أو من الكتب (تعلم ذاتي في المنزل) أو ... الخ , و لكن هل ناقشنا كيف تعلم كل واحد منا لغة البرمجة (حديثي كله عن غرضية التوجه) , اعتقد ان معظمنا يتبع طريقة التعلم بالأمثلة Learning by Example و هي بلا شك طريقة جيدة , و لكن في مقالتي هذه أريد أن أخبركم عن طريقة أتبعها لتعلم لفة البرمجة و ربما كثيرون ينبعونها و لكن دون أن يعرفوا خلفيتها العلمية .

لكي تتعلم اللغة بشكل احترافي عليك أن تتبع منهجية لتعلم اللغة , بمعنى آخر كيف نتعلم لغة برمجة جديدة , كي لا يحصل عندك تشتت و ضياع .

نبدأ من إحدى الطرق المتبعة في تصميم البرمجيات غرضية التوجه هي Class-responsibility-collaboration card و اختصارا CRC (الرابط)و تعني مسؤولية و تعاون الصف (الكلاس) أي أنها تقول أن لكل كلاس مجموعة من المسؤوليات responsibility تعبر عن الوظائف و المهام التي يقوم الكلاس بتنفيذها و لكن بعض الكلاسات لا تستطيع أن تقوم بمسؤولياتها دون أن تتعاون collaboration مع كلاسات أخرى و من هنا جاءت التسمية .

و طالما نتحدث عن البرمجة غرضية التوجه فإن كل كلاس يمثل شئ ما أو مفهوم (Concept) في عالمنا الحقيقي (غالبا), مثلا الكلاس StringTokenizer الموجود في الجزمة java.util , لنقل أنه يمثل آلة أو ماكينة لتقطيع النص حسب علامات الترقيم كالفواصل و الفراغات , فماذا تتوقع ان تكون مسؤوليات آلة تقطيع النص هذه , ممكن أن تكون مثلا "أعطني الكلمة التالية" أو "هل لديك كلمات أخرى" , و طبعا آلة تقطيع النص (طبعا أنا أتحدث هنا عن الكلاس StringTokenizer ) لا تحتاج ان تتعاون (collaboration ) مع آلات (كلاسات) أخرى لإنجاز المسؤوليات (responsibility) الخاصة بها باعتبار أن هذه المسؤوليات بسيطة .

StringTokenizer tempStringTokenizer = new StringTokenizer("Hello From Java");


        while (tempStringTokenizer.hasMoreTokens()) {
            System.out.println(tempStringTokenizer.nextElement());
       }

أما لو أردت مثالا عن التعاون بين الكلاسات , فدعنا نأخذ الكلاس Connection الموجود بالحزمة java.sql و بنفس طريقة المحاكاة السابقة يمكننا ان ننظر لهذا الكلاس على أنه يمثل في عالمنا الحقيقي "وصلة" لقاعدة البيانات , فما هي برأيك المسؤوليات المتعلقة بهذا الكلاس , حتما سيتبادر إلى ذهنك فتح و إغلاق الوصلة , نعم هذا صحيح إلى حد ما و لكن لو نظرنا إلى إحدى المسؤوليات و هي "فتح قاعدة البيانات" , سنجد أنها في الواقع مرتبطة بنوع القاعدة حيث أن كل قاعدة لها درايفر خاص بها و فتح قاعدة بيانات أوراكل يختلف عن تلك التي من نوع MySQL (نتكلم عن العمليات الداخلية المطلوبة لفتح كل قاعدة) لذلك مصممو لغة البرمجة جافا قالوا أن مسؤولية "فتح" قاعدة البيانات هي من مسؤوليات الكلاس DriverManager و الذي يمكنك أن تتصور أنه مدير للدرايفرات الخاصة بقواعد البيانات و يقوم باستخدام الدرايفر المناسب لفتح قاعدة البيانات حسب نوعها , لذلك نقول أنه يوجد تعاون أو تشارك (collaboration ) بين الكلاس Connection و الكلاس DriverManager لإنجاز مسؤولية (مهمة) "فتح" القاعدة . و بالمناسبة عملية إغلاق القاعدة هي من مسؤوليات الكلاس Connection .

 
connection = DriverManager.getConnection(connectionURL, "root", "root");
  connection.close();

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

الوجه الأمامي و الخلفي للبطاقة موجود بالمرفقات و كذلك مثال و هو كما ترى بسيط , يوضح اسم الكلاس و الــ Attributes و المسؤوليات و الكلاسات المتعاونة مع الكلاس .

و يوجد الكثير من الكتب التي تتحدث عن هذه الطريقة :

Object Design Roles, Responsibilities, and Collaborations

و أخير بعض الكتب المقترحة :

Beginning Java Objects From Concepts To Code

Object Thinking

و السلام

Template CRC cards Class Responsibility Collaboration_G.pdf

post-94677-053816700 1316162683_thumb.gi

post-94677-082962000 1316162746_thumb.gi

المرفقات
front_face.GIFback_face.GIF

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 16 سبتمبر 2011 في 12:09

6

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#2

شكرا لكم أخي الكريم :)

Moving-Sector-Triggers.gif
#3

بارك الله فيك

#4

شكرا ً لك اخي الكريم

#5

جزاك الله خير اخي الكريم ^_^

M.B.O

Mohamed Bin Othman

إبن المكلا

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

إسـألـنـي

#6

شكرا لك وبارك الله فيك

تحياتي

من طلب العلا

سهر الليالي

#7

This graph is Called CRC card uses in OOP

I love .cpp

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