قمتُ بفضل الله تعالي بتحويل مقال المقدمة المُختصرة للبرمجة الكائنية oop إلي ملف pdf و رفعتُه علي حسابي علي موقع 4shared لإتاحة تحميله و تداوله و قراءته لمن يرغب في ذلك.
يمكنكم تحميل الملف من هــــنــــا.
ياه، أنت ما زلت تستخدم awt ! ظننتُ لا أحد يستخدمها الآن، ما رأيك في أن تستخدم مكتبة SWT؛ على الأقل هي أسرع من swing ومظهرها أفضل بدرجات، وهي في تطور مستمر.
بالمناسبة: هل السرعة مطلوبةٌ في التطبيق الذي تُطوره؛ لأنه من المعروف أن جافا في تطبيقات سطح المكتب بطيئةٌ بشكلٍ عام ؟ وكذلك من المعروف أن قوة جافا تظهر في المُخَدِّمات و الأجهزة المحمولة.
أنا لم أتعمق من قبل في دراسة الجافا و العمل الاحترافي بها، و كنتُ أستخدمُ الـ#C و الـ.NET في كل شيءٍ يخصني. و لذلك نسيتُ مسألة قِدَم الـawt و المشاكل التي تظهر حين استخدامها، و تذكرتُ هذا بعد ما حدث :)بالنسة لسرعة التطبيق فلم تتأثر ببطء الواجهة الرسومية بشكلٍ كبير؛ لأنها لا تستخدمها إلا في الدخل و الخرج، و يمكن للبرنامج أن يستخدم سطر الأوامر العادي لأداء هذه المهمة إذا رغب مُستخدمه في ذلك، و مُحاكي سطر الأوامر الخاص له بعض الحالات الخاصة التي تجعله الأفضل (كما أنني بصراحة كنتُ أريد تعلم كيفية صنع مُحاكيات سطر الاوامر فقلتُ: وافق شِنٌ طبقه ^_^)
الشرح التالي هو تعديلٌ غير كبير لشرحٍ كنتُ قد كتبتُه لمجموعةٍ من زملائي في الكلية (في السنة قبل الأخيرة لنا فيها)، أشرح فيه نمط البرمجة المسمي بالبرمجة المَقُودة بالكائنات object oriented programming أو اختصاراً (البرمجة الكائنية). و قد وجدتُه بعد كل تلك الفترة التي نسيتُه فيها بسيطاً و ربما جيداً، فقلتُ أضعُه للناس ليستفيدوا منه. و ربما أقوم في المستقبل بإذن الله تعالي بتكملته و/أو التعديل فيه.
double account1 = 100, profit1 = 0.1;
double account2 = 150, profit2 = 0.15;
double account3 = 200, profit3 = 0.20;
double account4 = 175, profit4 = 0.25;
double account5 = 200, profit5 = 0.30;
double after_years(double old_account, double profit, int years){
for(int i = 1; i <= years; i++){
old_account = old_account * profit + old_account;
}
return old_account;
}
void main(){
account1 = after_years(account1, profit1, 3);
account2 = after_years(account2, profit2, 3);
account3 = after_years(account3, profit3, 3);
account4 = after_years(account4, profit4, 3);
account5 = after_years(account5, profit5, 3);
}
double account, profit;
double after_years(double old_account, double profit, int years){
for(int i = 1; i <= years; i++){
old_account = old_account * profit + old_account;
}
return old_account;
}
caccount account1;
caccount account2;
caccount account3;
caccount account4;
caccount account5;
account2.account
account1.methodname();
account1.newaccount();
account1.account = 1000;
التوصيف | المُصطلح العلمي العربي | المُصطلح العلمي الإنقليزي |
كود مكرر | صِنْف | class |
نُسخة | نسخة، كائن | Object, instance |
متغير داخل صنف | حقل بيانات | Data field |
دالة داخل صنف | دالة حالة | Instance method |
public class caccount {
double account, profit;
public caccount(double account, double profit){
this.account = account;
this.profit = profit;
}
public static void main(String[] args){
caccount account1 = new caccount(100, 0.1);
caccount account2 = new caccount(150, 0.15);
caccount account3 = new caccount(175, 0.20);
caccount account4 = new caccount(200, 0.25);
caccount account5 = new caccount(250, 0.3);
}
double after_years(double old_account, double profit, int years){
for(int i = 1; i <= years; i++){
old_account = old_account * profit + old_account;
}
return old_account;
}
}
caccount account1 = new caccount();
caccount account1 = new caccount(100, 1.0);
private double account;
#include "caccount.h";
#include "caccount.h";
private Locale arabic = new Locale("ar", "KW");
private ComponentOrientation arabicOrientation =
ComponentOrientation.getOrientation(arabic);
console_area.setComponentOrientation(arabicOrientation);
console_area.applyComponentOrientation(arabicOrientation);
int pos = console.console_area.getText().length();
console.console_area.setCaretPosition(pos);
بالنسبة لموضوع الموسوعة كيف أقدر علي مساعدتك في الفترة الحالية على تحقيق الهدف ؟
مع العلم أن عندي اقتراح، وهو: إضافة قسمٍ لقواعد البيانات؛ لأنك أكيد تعرف أهمية قواعد البيانات.
أنا فقط أحببت أن أساعدك إذا تريد و أشارك في العمل؛ حتى يستفيد منه أكبر قدرٍ من العرب، خصوصاً أني طالب هندسة برمجيات مستوى ثاني.
إذا أردت أن تساعد حالياً فبإمكانك أن تقوم باختيار لغةٍ أخري غير اللغات التي قمتُ بتلخيصها و تتعلمها، و في أثناء تعلمك لها قم بتلخيصها بشكلٍ جيدٍ و واضح، و حينما يتم الإعلان عن المشروع رسمياً (علي الأكثر سننتظر لمدة 4 أشهر) سوف نطلب من الآخرين تقديم ما يرغبون في تقديمه من تلخيصاتٍ للغاتٍ لا نمتلك مادةً علميةً عنها.
هذا بالطبع إذا لم يكن الأمر ثقيلاً عليك أو شاغلاً لك عن بقية أمورك الحيوية.
بالنسبة للغات التي يمكنك تلخيصها فأنا أرشح لك:
- php
- perl
- eiffel
- lisp
- #F
بالنسبة لاقتراحك بإضافة قسم لقواعد البيانات فمن الممكن عمل موسوعةٍ أخري مخصصةٍ للغات الاستعلام SQL المختلفة. لكنها ستكون موسوعة منفصلة عن موسوعة الألسن.
الفكرة ممتازة، و لكن "كتاب ورقي" شيء غير صحي صراحةً لمثل هذه الكتب؛ اللغات تتطور باستمرار فهل سوف يتم إنزال نسخةٍ مع كل تطور؟، ليس هذا و حسب: في البرمجة مع مرور الزمن مهما كانت خبرة الشخص اليوم فإنه في الغد سوف يجد طريقةً أفضل لحل المسألة الفلانية و شيءٌ جيدٌ أن ينشرها في المجتمع.
الشيء الآخر: كل ما ذكرتَ من نقاطٍ حقيقةً هي موجودةٌ في المستندات الخاصة باللغة الفلانية، يعيب المستندات فقط كثرة الكلام الزائد لكن برأيي المستندات هذه دائماً ينقصها أمرٌ هامٌ و نفس الشيء لم تدخله في كتابك كما يبدو لي وهي أمثلة الاستخدامات.
لنقل أن فلان ليس لديه أي خبرةٍ برمجية، و هو يحب تعلم بايثون أو روبي.الخ. حسناً دخل للمستندات قرأ أن الدالة الفلانية كذا و أن الحلقة التكرارية كذا و... و ... بعد القراءة هذه كلها تَبَقَّى شيءٌ و هو: أن يفهم كيف يتم ربط الدالة الفلانية بالكود الفلاني و .. و.. و لتنفيذ المهمة الفلانية، ليس بالضرورة وضع أمثلةٍ لكل شيء لكن على قدر المستطاع هذا يسرع ويساعد بشكل كبير على الفهم والتأقلم مع اللغة.
لو كنتُ مكانك لعملت استبياناً مستخدماً إحدى الخدمات المجانية على الانترنت، و لوجهتُ هذا الاستبيان للمبرمجين بمختلف المستويات و اللغات و أركز على ماهية الصعوبات التي يواجهونها في تعلم اللغات البرمجية و ماهية أفكارهم و مقترحاتهم للتغلب على هذه المصاعب، و أيضاً ماهية الحلول التي استخدموها لتخطي هذه المصاعب.
الأساس في الموسوعة أنها ستكون ذات إصداراتٍ رقميةٍ بإذن الله تعالي، و بالنسبة للكتاب الورقي فأنا أيضاً لا أحبه و أُفَضِّل أن تكون الأمور كلها إلكترونيةً صرفة بكل ما يعنيه هذا من سهولة التعديل و التحديث و النشر و الوصول. و لكن لو قَدَّر الله تعالي للمشروع أن يكبر و تصير الموسوعة واقعاً فربما يريد محبو الكتب الورقية الحصول علي أجزاء الموسوعة بشكلٍ ورقي (و أنا أثق أن هذا الموقف سيحدث).بالنسبة لمحتويات الموسوعة فلا يمكن ضم الشرح الذي يحتاج إليه المبتدئون إليها؛ فأصلاً فكرة الموسوعة هو أن تكون "تلخيصاً" يحل محل الإسهاب الموجود في الشروحات المعتادة، و الشيء الوحيد الذي سيُسْتثنَي من هذه القاعدة هو: شرح القواعد الصعبة بإيجاز عند أول ذكرٍ لها. و علي المبتديء أن يستعين بالشروحات المتخصصة أولاً ثم يلجأ للموسوعة لتذكر ما فهمه بالفعل من قبل.أما الفرق بين الموسوعة و بين توثيقات لغات البرمجة المعتادة فهو الإيجاز في ذكر القواعد في الموسوعة، و كذا الأبواب الإضافية التي نتحدث فيها عن تاريخ اللغة و إصداراتها المختلفة و ربما أفضل بيئات التطوير المتكاملة IDE المتاحة لها (باختصارٍ بطبيعة الحال)، بالإضافة إلي توحيد الشكل بين تلخيصات اللغات المختلفة في الموسوعة، و الأهم أن كل هذا سيكون باللغة العربية و بأسلوب سلسٍ موحَّد.
الاستبيان فكرةٌ جيدة و لكن لو لم أكن قد انتهيت من وضع التصور النهائي لما أريد عمله، أريد ان ألفت انتباهك هنا أن هذه الموسوعة قد وُضعت معظم موادها العلمية بالفعل أثناء تعلمي للغات البرمجة المختلفة و أردتُ أن أشارك ما لدي مع الآخرين، بالإضافة لتفهمي لمعاناة الطلبة لأني مررتُ بها أيام الدراسة، و تفهمي لمعاناة محترفي البرمجة لأني بدأتُ أول ذلك الطريق بعد التخرج، و تفهمي لمعاناة مصممي لغات البرمجة لأنني أحدهم.
الشيء الوحيد الذي يمكن طلب الاقتراحات فيه هو التعديل الطفيف في المكونات، أو زيادة أبوابٍ يراها الآخرون ضروريةً لهم و يُستحسن لو كانت موجودةً ضمن الموسوعة، أما التغييرات الجذرية فهي تحمل خطر عدم القدرة علي البدء في المشروع من الأساس.