Sakura Shinjo
31-10-2008, 17:14
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاتهـــ....
بداية سيكون الموضوع غريب وغامض وربما لايتم استيعابه من قبل الكثيرين ^^ ولكن اذا تأملنا فيه ودققنا سنجد أن فهمه سهل نوعاً ما لذا اخترت لغة الـjava لأنها الأسهل والأمتع ^^...
لذا أتمنى أن تستفيدوا من هذا المجهود البسيط ^^...
الحاسب الآلي عبارة عن مجموعة مترابطة من الدوائر الكهربائية.
تخيّلوا معي زر كهربائي يشغّل عدداً من المصابيح التي إمّا تكون مطفأة أو مشتعلة.
لذا، فإن الكمبيوتر يفهم رقمين في الدنيا، هما (صفر) و (واحد).
و يقوم الكومبيوتر بتحويل كل شيء إلى ما يقابله حسب نظام العد الثنائي (يعني 1 و 0) و تسمّى هذه اللغة (التي تتكون من هذين الرقمين فقط) بلغة الآلة (Machine Code).
و كان للسيطرة على الكومبيوتر نكتب ما نطلق عليه اسم (برنامج) و هو يحتوي على عدد من الأوامر الموجهة للكومبيوتر ليحل مسألة معينة.
كان المبرمجون الأوائل (كان الله في عونهم) يكتبون البرامج بهذه اللغة! يكون شكل البرنامج هكذا:
101011101000101001010010
100101001010001001011010
010011110011100001010101
010101000100100000001001
011110111010010101010101
و كما ترون فإنه من الصعب جدّاً فهم شيئاً كالذي ترونه في الأعلى بعقلنا البشري. لذا فقد كان من الصعب أيضاً ايجاد الأخطاء و تصحيحها. ولكن تلك التي تعمل، فأنها تعمل بسرعة شديدة جدّاً نظراً لأنها مكتوبة بلغة تفهمها الآلة بصورة مباشرة. و تسمّى البرامج المكتوبة بلغة الآلة ببرامج الجيل الأول.
لم يستطع أجدادنا المبرمجون الاستمرار على هذا الحال، فقد كان فعلاً صعباً، لذلك قاموا باختراع لغة التجميع (Assembly) و هي لغة أبسط من لغة الآلة نظراً لاحتوائها على أوامر مثل (ADD و MOV)، و هكذا كما ترون فقد ابتعدنا قليلاً عن لغة الآلة التي سبق و ركّزت على أنها لا تفهم سوى الصفر والواحد. و هنا ظهرت الحاجة الماسّة إلى المفسّر (Interpreter) و هو برنامج يقوم بتحويل الأوامر بالتتابع من لغة ال Assembly إلى لغة الآلة، و يوقف البرنامج فوراً في حالة مواجهة خطأ في البرنامج و لا يقوم يالنظر (حتى لجبر الخاطر) إلى بقية البرنامج ^^
نلاحظ هنا أننا حصلنا على برنامج تسهل كتابته نسبياً و يمكن بسهولة ايجاد الأخطاء فيه و تصحيحها( بدلاً من البحلقة في الأصفار والآحاد ^^).
لكن.. التحويل من لغة التجميع إلى لغة الآلة، يأخذ جزء من وقت البرنامج، و هكذا أصبح البرنامج أبطأ قليلاً، و حين أقول قليلاً، فأنا أعني جزء من آلاف الأجزاء من الثانية الواحدة. و تعتبر لغة التجميع من الجيل الثاني (الذي يحتوي على هذه اللغة فقط)
المبرمجون لم يعجبهم الحال (كما لم يعجبني حين درست هذه اللغة ^^) لذا أرادوا لغات تكون قريبة من لغة الإنسان، يفهمها بسهولة و ليست معقّدة مثل لغة التجميع. لذا قاموا بوضع العديد من لغات البرمجة التي تقوم على أوامر مباشرة بلغتنا البشرية التي نفهمها بسهولة، ففي لغة الباسكال مثلاً إذا أردنا طباعة كلمة (Mexat) على الشاشة نكتب الأمر التالي ضمن البرنامج:
writeln("Mexat")
و هذا كفيل بطباعة الكلمة على الشاشة ^^
و لكننا هنا ابتعدنا عن لغة الآلة كثيراً، لذا توجّب علينا استخدام المترجم بدلاً من المفسّر، لتحويل البرنامج إلى لغة الآلة.
و هذه اللغات هي لغات الجيل الثالث و منها: Pascal, COBOL, ForTran, Basic و منها أيضاً لغة ال C و التي تعتبر أسرع لغات الجيل الثالث على الإطلاق، بل انها في كثير من الأحيان تتصرّف كما لو كنت من الجيل الثاني (حيث يقوم بعض المصنّفون تصنيفها ضمن الجيل الثاني لهذا السبب).
إلى هنا و الكلام عند المبرمجين سهل و بسيط، تسألهم ما هو البرنامج فيجيبون فوراً: مجموعة من الأوامر لتأدية وظيفة معيّنة.
مُدخلات ، تحصل عليها -------> عمليات -----> تنتج منها ، مُخرجات
و لكن.. نعم لازالت هناك "لكن"! الإنسان بطبعه لا يفكّر في العمليات التي تحدث دون أن يفكّر في المعلومات أو الأشياء التي حدثت عليها أو صدرت منها هذه الأفعال. لا يمكن أن تكون الجملة الفعلية صحيحة دون فاعل أو مفعول.
إذاً ما زالت طريقة البرمجة بطريقة سلسلة العمليات المتلاحقة بعيدة عنّا و عن تفكيرنا.
لقد كنّا خلال ما سبق من الأجيال نفكّر مثل الكومبيوتر. نكتب البرامج بناء على الطريقة التي يفهمها هو!
لذا قام المبرمجون بايجاد الحل المناسب و هو الجيل الرابع من لغات البرمجة.
و يجدر بالذكر أن جميع لغات الأجيال الثلاثة السابقة إذا تمّت ترجمتها على نظام تشغيل، لأنها لا تعمل إلا على هذا النظام.
مثلا إذا قمنا بكتابة برنامج بلغة السي و قمنا بعمل ترجمة له (Compilation) على نظام التشغيل ويندوز، فان هذا البرنامج من المستحيل بأي حال من الأحوال أن يعمل على نظام الماكنتوش. ما نفعله في هذا الحالة أننا نأخذ البرنامج و نضعه على جهاز ماكنتوش و نقوم بترجمة مرة أخرى.
إذاً أي برنامج يتصرّف هكذا:
البرنامج --------> المفسّر/المترجم --------> لغة الآلة
ولأن المترجم متصل مباشرة كما ترون بلغة الآلة فإنه يعتمد عليها. و يختلف من نظام تشغيل إلى آخر.
لذا قال المبرمجون أنهم سيتخيّلون وجود آلة! تكون هذه الآلة محددة و أطلقوا عليها اسم (Virtual machine) أو الآلة التخيّلية. و هم يكتبون برامجهم حسب هذه الآلة و ليس حسب نظام تشغيل محدد هكذا:
البرنامج --------> المفسّر/المترجم --------> الآلة التخيلية --------> لغة الآلة
نلاحظ الآن أن المترجم ابتعد عن لغة الآلة، و أصبح يترجم بناءً على آلة تخيلية.
ما الذي نستفيده؟ البرنامج سيعمل على أي جهاز عليه الآلة التخيلية مهما اختلف نظام التشغيل دون الحاجة لإعادة الترجمة ^^
من لغات الجيل الرابع: C++ and Java و Oracle و Visual Basic و غيرها، وهذه اللغات تعرف بأنها لغات تعتمد على البرمجة الشيئية.
والسؤال هنا عن البرمجة الشيئية!!
مفهوم العضو أو الشي (Object)
والآن حان الوقت لننظر إلى العالم من حولنا. نأخذ مثال بسيط (جهاز الكومبيوتر الخاص بك) سنفترض بعض صفاته وسنكتبها في ورقة:
الصفات
النوع: IBM
السرعة: 500MHz
الذاكرة: 128MB
إذاً اتفقنا أن جهازك له هذه الصفات، فلنفترض معاً بعض الوظائف التي يستطيع جهازك أن يقوم بها
الوظائف
الجمع
الحفظ
الإتصال بطابعة
ماذا نستنتج من ذلك؟
أن جهازك له صفات وقدرات. الصفات هي ما يتصف به، والقدرات هي ما يستطيع أن يقوم به. وهذا هو حال أي شيء (عضو أو Object) له صفات، ويستطيع القيام بأعمال بما له من قدرات.
هل يشترك كومبيوتر آخر مع جهازك في هذه الصفات؟ نعم جهازي يشترك مع جهازك.
له نفس القدرات، وويشترك في وجود نفس الصفات مع اختلاف في الأرقام، أليس كذلك؟ فجهازينا لهما سرعة، وذاكرة ونوع، وكلاهما يستطيعان الحفظ والاتصال بطابعة.
إذا هناك صفات يشترك فيها أي جهاز كومبيوتر مع غيره من الأجهزة، وقدرات أساسية أيضاً، موجودة عند الجميع.
هذا يجعلنا نصنّف الأشياء إلى فئات تشترك في نفس الصفات ولها نفس القدرات ^^
مفهوم الفئة أو (Class)
الفئة هي الموديل أو التصميم الذي على أساسه أستطيع استخراج أعضاء وأشياء.
مثلاً نأتي بورقة، ونكتب عليها الآتي:
كومبيوتر
الوظائف الصفات
الجمع
الحفظ
الطباعة النوع
السرعة
الذاكرة
أصبح لدينا الآن موديل نستطيع أن نستخرج منه الكومبيوتر الذي تستطيع لمسه وهو جهازك وذلك بأن نعطي للصفات التي ذكرتها في الموديل القيم المناسبة.
مثال آخر:
لو أخذنا فئة (الإنسان) هذا موديل أو شكل عام نعرف أن أي انسان له عينان، وأنه يفكّر، وأنه يبدع. ولكن حين أقول ....... يبدأ الموديل في أخذ الصفات المناسبة مثل لون العينين عند ...... أسود مثلاً وأنه يفكّر، وأنه مبدع وابداعه في الشعر أكثر من غيره.
ماذا نستنتج من ذلك؟
نستنتج أن الفئة أو ال Class هي الموديل الذي أصنع بحسبه الأشياء التي تشترك في الصفات. أو أنه الجامع الذي يجمع الأشياء الفعلية التي تندرج تحته. ولابد هنا من التنويه على نقطة محددة وهي أنّ الفئة ليست شيئاً محسوساً بينما العضو أو الشيء هو التمثيل المحسوس لهذه الفئة.
يتبع ^^
.
.
السلام عليكم ورحمة الله وبركاتهـــ....
بداية سيكون الموضوع غريب وغامض وربما لايتم استيعابه من قبل الكثيرين ^^ ولكن اذا تأملنا فيه ودققنا سنجد أن فهمه سهل نوعاً ما لذا اخترت لغة الـjava لأنها الأسهل والأمتع ^^...
لذا أتمنى أن تستفيدوا من هذا المجهود البسيط ^^...
الحاسب الآلي عبارة عن مجموعة مترابطة من الدوائر الكهربائية.
تخيّلوا معي زر كهربائي يشغّل عدداً من المصابيح التي إمّا تكون مطفأة أو مشتعلة.
لذا، فإن الكمبيوتر يفهم رقمين في الدنيا، هما (صفر) و (واحد).
و يقوم الكومبيوتر بتحويل كل شيء إلى ما يقابله حسب نظام العد الثنائي (يعني 1 و 0) و تسمّى هذه اللغة (التي تتكون من هذين الرقمين فقط) بلغة الآلة (Machine Code).
و كان للسيطرة على الكومبيوتر نكتب ما نطلق عليه اسم (برنامج) و هو يحتوي على عدد من الأوامر الموجهة للكومبيوتر ليحل مسألة معينة.
كان المبرمجون الأوائل (كان الله في عونهم) يكتبون البرامج بهذه اللغة! يكون شكل البرنامج هكذا:
101011101000101001010010
100101001010001001011010
010011110011100001010101
010101000100100000001001
011110111010010101010101
و كما ترون فإنه من الصعب جدّاً فهم شيئاً كالذي ترونه في الأعلى بعقلنا البشري. لذا فقد كان من الصعب أيضاً ايجاد الأخطاء و تصحيحها. ولكن تلك التي تعمل، فأنها تعمل بسرعة شديدة جدّاً نظراً لأنها مكتوبة بلغة تفهمها الآلة بصورة مباشرة. و تسمّى البرامج المكتوبة بلغة الآلة ببرامج الجيل الأول.
لم يستطع أجدادنا المبرمجون الاستمرار على هذا الحال، فقد كان فعلاً صعباً، لذلك قاموا باختراع لغة التجميع (Assembly) و هي لغة أبسط من لغة الآلة نظراً لاحتوائها على أوامر مثل (ADD و MOV)، و هكذا كما ترون فقد ابتعدنا قليلاً عن لغة الآلة التي سبق و ركّزت على أنها لا تفهم سوى الصفر والواحد. و هنا ظهرت الحاجة الماسّة إلى المفسّر (Interpreter) و هو برنامج يقوم بتحويل الأوامر بالتتابع من لغة ال Assembly إلى لغة الآلة، و يوقف البرنامج فوراً في حالة مواجهة خطأ في البرنامج و لا يقوم يالنظر (حتى لجبر الخاطر) إلى بقية البرنامج ^^
نلاحظ هنا أننا حصلنا على برنامج تسهل كتابته نسبياً و يمكن بسهولة ايجاد الأخطاء فيه و تصحيحها( بدلاً من البحلقة في الأصفار والآحاد ^^).
لكن.. التحويل من لغة التجميع إلى لغة الآلة، يأخذ جزء من وقت البرنامج، و هكذا أصبح البرنامج أبطأ قليلاً، و حين أقول قليلاً، فأنا أعني جزء من آلاف الأجزاء من الثانية الواحدة. و تعتبر لغة التجميع من الجيل الثاني (الذي يحتوي على هذه اللغة فقط)
المبرمجون لم يعجبهم الحال (كما لم يعجبني حين درست هذه اللغة ^^) لذا أرادوا لغات تكون قريبة من لغة الإنسان، يفهمها بسهولة و ليست معقّدة مثل لغة التجميع. لذا قاموا بوضع العديد من لغات البرمجة التي تقوم على أوامر مباشرة بلغتنا البشرية التي نفهمها بسهولة، ففي لغة الباسكال مثلاً إذا أردنا طباعة كلمة (Mexat) على الشاشة نكتب الأمر التالي ضمن البرنامج:
writeln("Mexat")
و هذا كفيل بطباعة الكلمة على الشاشة ^^
و لكننا هنا ابتعدنا عن لغة الآلة كثيراً، لذا توجّب علينا استخدام المترجم بدلاً من المفسّر، لتحويل البرنامج إلى لغة الآلة.
و هذه اللغات هي لغات الجيل الثالث و منها: Pascal, COBOL, ForTran, Basic و منها أيضاً لغة ال C و التي تعتبر أسرع لغات الجيل الثالث على الإطلاق، بل انها في كثير من الأحيان تتصرّف كما لو كنت من الجيل الثاني (حيث يقوم بعض المصنّفون تصنيفها ضمن الجيل الثاني لهذا السبب).
إلى هنا و الكلام عند المبرمجين سهل و بسيط، تسألهم ما هو البرنامج فيجيبون فوراً: مجموعة من الأوامر لتأدية وظيفة معيّنة.
مُدخلات ، تحصل عليها -------> عمليات -----> تنتج منها ، مُخرجات
و لكن.. نعم لازالت هناك "لكن"! الإنسان بطبعه لا يفكّر في العمليات التي تحدث دون أن يفكّر في المعلومات أو الأشياء التي حدثت عليها أو صدرت منها هذه الأفعال. لا يمكن أن تكون الجملة الفعلية صحيحة دون فاعل أو مفعول.
إذاً ما زالت طريقة البرمجة بطريقة سلسلة العمليات المتلاحقة بعيدة عنّا و عن تفكيرنا.
لقد كنّا خلال ما سبق من الأجيال نفكّر مثل الكومبيوتر. نكتب البرامج بناء على الطريقة التي يفهمها هو!
لذا قام المبرمجون بايجاد الحل المناسب و هو الجيل الرابع من لغات البرمجة.
و يجدر بالذكر أن جميع لغات الأجيال الثلاثة السابقة إذا تمّت ترجمتها على نظام تشغيل، لأنها لا تعمل إلا على هذا النظام.
مثلا إذا قمنا بكتابة برنامج بلغة السي و قمنا بعمل ترجمة له (Compilation) على نظام التشغيل ويندوز، فان هذا البرنامج من المستحيل بأي حال من الأحوال أن يعمل على نظام الماكنتوش. ما نفعله في هذا الحالة أننا نأخذ البرنامج و نضعه على جهاز ماكنتوش و نقوم بترجمة مرة أخرى.
إذاً أي برنامج يتصرّف هكذا:
البرنامج --------> المفسّر/المترجم --------> لغة الآلة
ولأن المترجم متصل مباشرة كما ترون بلغة الآلة فإنه يعتمد عليها. و يختلف من نظام تشغيل إلى آخر.
لذا قال المبرمجون أنهم سيتخيّلون وجود آلة! تكون هذه الآلة محددة و أطلقوا عليها اسم (Virtual machine) أو الآلة التخيّلية. و هم يكتبون برامجهم حسب هذه الآلة و ليس حسب نظام تشغيل محدد هكذا:
البرنامج --------> المفسّر/المترجم --------> الآلة التخيلية --------> لغة الآلة
نلاحظ الآن أن المترجم ابتعد عن لغة الآلة، و أصبح يترجم بناءً على آلة تخيلية.
ما الذي نستفيده؟ البرنامج سيعمل على أي جهاز عليه الآلة التخيلية مهما اختلف نظام التشغيل دون الحاجة لإعادة الترجمة ^^
من لغات الجيل الرابع: C++ and Java و Oracle و Visual Basic و غيرها، وهذه اللغات تعرف بأنها لغات تعتمد على البرمجة الشيئية.
والسؤال هنا عن البرمجة الشيئية!!
مفهوم العضو أو الشي (Object)
والآن حان الوقت لننظر إلى العالم من حولنا. نأخذ مثال بسيط (جهاز الكومبيوتر الخاص بك) سنفترض بعض صفاته وسنكتبها في ورقة:
الصفات
النوع: IBM
السرعة: 500MHz
الذاكرة: 128MB
إذاً اتفقنا أن جهازك له هذه الصفات، فلنفترض معاً بعض الوظائف التي يستطيع جهازك أن يقوم بها
الوظائف
الجمع
الحفظ
الإتصال بطابعة
ماذا نستنتج من ذلك؟
أن جهازك له صفات وقدرات. الصفات هي ما يتصف به، والقدرات هي ما يستطيع أن يقوم به. وهذا هو حال أي شيء (عضو أو Object) له صفات، ويستطيع القيام بأعمال بما له من قدرات.
هل يشترك كومبيوتر آخر مع جهازك في هذه الصفات؟ نعم جهازي يشترك مع جهازك.
له نفس القدرات، وويشترك في وجود نفس الصفات مع اختلاف في الأرقام، أليس كذلك؟ فجهازينا لهما سرعة، وذاكرة ونوع، وكلاهما يستطيعان الحفظ والاتصال بطابعة.
إذا هناك صفات يشترك فيها أي جهاز كومبيوتر مع غيره من الأجهزة، وقدرات أساسية أيضاً، موجودة عند الجميع.
هذا يجعلنا نصنّف الأشياء إلى فئات تشترك في نفس الصفات ولها نفس القدرات ^^
مفهوم الفئة أو (Class)
الفئة هي الموديل أو التصميم الذي على أساسه أستطيع استخراج أعضاء وأشياء.
مثلاً نأتي بورقة، ونكتب عليها الآتي:
كومبيوتر
الوظائف الصفات
الجمع
الحفظ
الطباعة النوع
السرعة
الذاكرة
أصبح لدينا الآن موديل نستطيع أن نستخرج منه الكومبيوتر الذي تستطيع لمسه وهو جهازك وذلك بأن نعطي للصفات التي ذكرتها في الموديل القيم المناسبة.
مثال آخر:
لو أخذنا فئة (الإنسان) هذا موديل أو شكل عام نعرف أن أي انسان له عينان، وأنه يفكّر، وأنه يبدع. ولكن حين أقول ....... يبدأ الموديل في أخذ الصفات المناسبة مثل لون العينين عند ...... أسود مثلاً وأنه يفكّر، وأنه مبدع وابداعه في الشعر أكثر من غيره.
ماذا نستنتج من ذلك؟
نستنتج أن الفئة أو ال Class هي الموديل الذي أصنع بحسبه الأشياء التي تشترك في الصفات. أو أنه الجامع الذي يجمع الأشياء الفعلية التي تندرج تحته. ولابد هنا من التنويه على نقطة محددة وهي أنّ الفئة ليست شيئاً محسوساً بينما العضو أو الشيء هو التمثيل المحسوس لهذه الفئة.
يتبع ^^
.
.