فكرة! في كتابة الجافا OOP ـ set, get أسهل عند إعادة إستخدام الكود.
مرحباً. منذ زمن لم أكتب شيئاً تقنياً.
والآن جاء الوقت لكي أعطيكم جرعة قاتله من المواضيع التقنية ^^. سأبدأ بهذه الفكرة التي إكتشفتها اليوم. ربما تبدو غريبة لمبرمجي الجافا لكنها عملية جداً وتفيد لصنع كود قابل لإعادة الإستخدام وكي نطبق مبدأ (عدم إختراع العجلة!). بعد المقدمة، أبدأ بالزبدة.
الفكرة وما فيها هي وضع طريقة أفضل وأكثر عملية للبرمجة الكائنية وخصوصاً الـSetter والـGetter للفئات.
(تحتاج لفهم هذا دراسة أساسيات لغة الجافا أو أي لغة برمجة تدعم oop وكذلك دراسة البرمجة الكائنية OOP بها، إن لم تكن كذلك فلا تقرأ المقال!).
ربما كما درست فإن مبرمجي الجافا يفضلون وضع Setter وGetter لكل خاصية(Properties) في الصنف بدلاً من ترك الخاصية public للسيطرة عليها في حال طرأ تغيير عليها. وهي طريقة جداً جملية حيث بها تضمن قلة الأخطاء إلى أدنى حد ممكن. خصوصاً إذا كنت مطور مكتبات (Programming Libraries) أو مطور SDK ولو كانت صغيرة. سترى أن هذا الأمر مهم جداً للسيطرة على الكود وإدراته وإستخدام ميزات oop بأفضل وجه (تابع قراءة المقال).
لكن الطريقة العادية في وضع الـSetter, Getter طريقة سيئة برأيي. وندرسها نحن في مقرر الـJava-oop كطلاب علم الحاسوب.
مثلاً someDot هو كائن من الصنف Dot3D لديه ثلاث خواص هم x, y, z يمثلون موقع النقطة في مستوى الأحداثيات.
لو أردنا التحكم بالخواص من خلال وضع Setter, Getter لكل واحدة سنقوم بوضع الـMethods كما نعرف وكالمعتاد سنعرف الصنف وسينتج كائن someDot قابلاً للإستخدام كالتالي:
// Set values someDot.setX(10); someDot.setY(13); someDot.setZ(48); // Print them System.out.println("X: " + someDot.getX() + ", Y: " + someDot.getY() + ", Z: " + someDot.getZ() );
ألا ترى ان هذه العملية مزعجة؟ أن تقوم بإسناد القيم لكل خاصية بواسطة Setter مستقل؟ ماذا لو كان هناك Setter يعمل بصورة متفاعلة بحيث تعطيه الخاصية وقيمتها أو الخواص وقيمهم، وبدون ترتيب إجباري؟ أو عدد معين من الخواص؟؟ هل تريد طريقة تختصر عليك الكتابة بأفضل وجه؟ وبكود مفهوم؟ هذا ما فعلته!
أنظر هذا الكود، وتعلم كيف ستستطيع وبكل سهولة الحصول على واحد مثله بيدك!، لاحظ الشرح بعد الكود:
someDot.x(10); someDot.y(20);
هنا وضعنا قيمة لكل من x, y. بواسطة Setter سهل التذكر! وكذلك إملائياً سهل أن تفهم ماهو!
someDot.x(20).y(120);
هل رأيت هذا الكود! أليس أجمل؟ إسندنا القيم لكليهما في نفس الأمر!
someDot.z(10).x(24).y(10).x(20);
وهذا! بعد! هل رأيت تغيير أربع قيم! من ضمنها القيمة س مرتين، لا يوجد ترتيب إجباري ولا عدد معين من المرات للتغيير.
ربما تفكر الآن وكيف نأخذ القيم بواسطة Getter وبنفس السهولة؟؟ شاهد الأكواد التالية وأنظر الشرح بعد كل واحد:
int a = someDot.x();
الفرق بينهما أن عند إسناد قيمة يجب أن تمررها داخل الطريق (ميثود)ـ
أما عند طلب الحصول على القيمة ببساطة! لا تمرر وسيط (parameter) وتحصل على القيمة الحالية لها!
int num = someDot.x(20).y(50).z();
نستطيع المزج في الأمر الواحد بين عدة مسندات (setter) وفي النهاية محصل واحد (getter)
في هذه الحالة نحن نسند قيمة لكل من x، y وبعدها نأخذ قيمة z ونضعها في المتغير (num)
هذه الفكرة لوجه الله أضعها لكم كي تستفيدوا منها
. وملاحظة، هذه الطريقة متبعة في بعض المكتبات مثل jQuery، مع أنها ليست في لغة جافا لكن لا بأس أن نتعلم منهم.
هل رأيت؟ ما رأيك بالفكرة؟؟ لدي لك مفاجأة .. الكود الكامل لكيفية عمل ذلك!
أنظر الصفحة التالية من هنا.
روابط مفيدة:
صفحات: 1 2

11 يناير 2009 في الساعة 11:05 ص
سبق و أن درست الـOOP في ++c
سبحان الله كانت أول مادة برمجية كرهتها !!
كوني دائماً استمتع بلغات البرمجة .
11 يناير 2009 في الساعة 4:59 م
تعقيب على [فردوس]:
أنا درست الoop أول مرة بالسي++ .. وسأدرسها بالجامعة بلغة جافا..
.
إنصحكِ بإعادة دراستها من مصادر أخرى فهي مادة ضرورية لطالب علم الحاسوب
هذا أمر مبشر
… لكِ مستقبل إن شاء الله!
24 فبراير 2009 في الساعة 12:09 ص
atlobo minkom an tisa3idouni fi ta3lim kol mayata3ala9o bilhasoub wa lakom mini jazila achokr
15 مارس 2009 في الساعة 5:12 م
يسلمو ع الشرح … مشكور اخوي وبارك الله فيك
19 أبريل 2009 في الساعة 2:49 ص
انا دخلت الموقع تايه وطالع منه وكلى اراده انى اتعلم حاجه لكن انا متأكد انى بكره هنسى واحاول ادور على اى حاجه اعملها غير انى اقرأ حاجه قرأتها قبل كده اسف العيب عندى انا
20 أبريل 2009 في الساعة 4:38 م
@عصام الشحات:
لا مشكلة أخي الكريم إن لم تفهم فهذا الموضوع متخصص برمجياً، وكي تفهم المطلوب عليك أن تدرس لغة جافا وهذا عادة ما يدرسه طلاب تقنية المعلومات/قسم علم الحاسوب، فلا تبتأس إن لم تستفد منها شيئاً فهذا متوقع.