الأحد، 4 أبريل 2010

بيئة حية متكاملة

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

الجهاز فيه لغة برمجة جاهزة. افتح الكمبيوتر، انتظر، اضغط زر "4"، صرت في بيئة البرمجة! أدّى هذا إلى ظهور جيل من المبرمجين في سن العاشرة فما فوق. لم تكن هناك كليات الحاسبات ولم يكونوا يعرفون انه هناك وظيفة اسمها "مبرمج" يقوم بها محترف يأخذ أجراً. اطفال وجدوا اللغة أمامهم فبرمجوا. هكذا بكل بساطة. انا نفسي لم اكن اعتبر نفسي مبرمجا شديد التمكن وقتها، كنت اكتب برامج عادية بينما غيري يكتب العابا كاملة.

الشركة العربية التي قدمت هذا الكمبيوتر لم تكتف بالجهاز فحسب، لكنها قدمت أيضا برامج بعضها تعليمي وبعضها ترفيهي وبعضها احترافي. من هذه البرامج كانت لغة Basic معرّبة اسمها "صخر Basic". لم استخدم أنا هذه اللغة وتعلمت على لغة الBasic الأنجليزية، لكن ثاني لغة برمجة تعلمتها كانت لغة Logo المعرّبة هي الأخرى. كم مرة كتبتُ فيها هذه الكود يا ترى؟:

يا مربع
كرر ٤ [امام ٥٠ يمين ٩٠]
نهاية

نشرت الشركة أيضا كتبا برمجية عديدة للأطفال. منها كتب أجنبية مترجمة ومنها إنتاج عربي.

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

الذي اريد أن اقوله من كل هذا أن البرمجة لم تكن نشاطاً فردياً بل ظاهرة اجتماعية: موردو الأجهزة، الناشرون، الأطفال، المجلات كلهم يكوّنون بيئة حية متكاملة (ecosystem)، كل منهم له ما يقدمه وما يستفيد منه. هذا يبيع، وهذا يكتب، وهذا يرسل برامجه لبريد القراء. الكل مستفيد. الكل رابح.

لو اشتريت جهازاً حديثاً عليه الWindows فكيف ستبرمجه؟ برنامج الpaint واضح مكانه. برنامج الكتابة كذلك. لكن أين لغة البرمجة؟ أين الكتب؟ بل نحن الآن مستهلكون للتكنولوجيا لا صانعون لها. لم تنقرض حركة البرمجة في الصغر تماما؛ لن اتعجب مثلا لو رأيت مبرمج عربي في الرابعة عشرة يبرمج visual basic أو PHP الآن، لكن لم يعد الموقف كما كان.

أريد بإذن الله إعادة إنشاء تلك البيئة الحية المتكاملة. أريد لغات برمجة عربية، أريد كتبا في كل شيء: كيف تؤلف برامجك. كيف تحلّ الواجبات المدرسية بالبرمجة. كيف تساعدك البرمجة في إجراء تجارب علمية. كيف تكتب برنامجا يحسب ميزانية المنزل. كيف تطوّع هذا الجهاز لحسابك. كيف تكون صانعا للتكنولوجيا. أريد أن أرى الأطفال يُرِي بعضهم البعض البرامج ويتبادلون الsource code.

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

لعل هذه البيئة تعود إن شاء الله. قديما كان شعار كمبيوتر صخر هو "يجعل التعلم متعة". وإني لأراه شعارا جديرا بالتمسك به.

الأحد، 14 مارس 2010

المقامة البرمجية

إنما البرمجة تفصيل المبهم وتنظيم الذي لا يُنظّم. البرنامج امتداد لفكرك واللغة أداتك؛ فاشحذ فكرك فالكمبيوتر لن يؤلف شيئا بدلا منك، وأتقن لغتك فالكمبيوتر لن يقرأ أفكارك. اعرف لغات متعددة تتفتح الطرق لك، ولا تتحيز للغة دون الأخرى. فكر في مواءمة اللغة للهدف الذي بين يديك، ولا تضيع وقتا في جدل عن لغة مقابل غيرها، وتذكر: إن هي إلا أدوات تعمل بها.

البرمجة أسسها رياضية وتطبيقاتها عملية – فقدّر هذين الجانبين واهتم بهما، واستمتع بما تعمل واعمل ما تنفع به الناس، ولا تتوقف عن التعلم ولا تدع تخرجا ولا توظفا يمنعك من معرفة أو يخبرك أنك قد اكتفيت من العلم.

البرامج خطط ثابتة تنفيذها عمليات سائرة. اعرف العلاقة بين تكوين البرنامج وبين سلوك العمليات الذي تتبع منه تصبحْ برامجك بين يديك، وافتح عينيك لما تراه يتكرر أمامك، وسرعان ما تجد مفاهيم كنت تظنها مختلفة قد صارت واحدا، وما كان مجسما قد صار مجردا.

ليس كل الناس مبرمجين ولم يبلغ كل المبرمجين علمك، فكن صبورا لمن لم يفهم لك قصدا ولا تتكبر على من يقلّ عنك علما، واعلم أن البرامج للبشر ليقرؤوها كما هي للآلة لتنفـّذها فاكتب برامجك لتُقرأ قبل أن تكتبها لتُنفـّذ، وليكن أول قاريء تراعيه هو أنت.

لا تجعل العمل يحطمك واهتم بصحتك، لا تقضِ الساعات الطوال جالسا بلا راحة واصنع بيئة عمل تعينك واحجز وقتا كافيا لنومك. تعلم علوما غير البرمجة تجد نفسك مبرمجا أفضل، ولو قابلت خطأ لا حل له اترك الكمبيوتر برهة لعلك تُلْهَم الحل، وتذكر أن البرمجة تفكير لا كتابة فأحيانا تفكر جديا وأنت بعيد عن الجهاز وتفكيرك عمل.

البرمجة تفاهم بين بشر وآلة وبين بشر وبشر، فتعلّم كيف تتكلم يسرِ الحال كما أردت، وتعلم كيف تكتب تتحقق أهدافك، واعلم أن أهم أداة للإقناع أن تكون على حق أولا، وإن وجدت خطأ في قولك فلا تعاند فيه. وإن كنت لا تعلم فقل "لا أعلم" ولا تدّعِ علما ليس لك.

سألتني فأجبتك على قدر ما أعلم، وما لا أعلم أكثر وأعظم.

(انتهت المقامة البرمجية، شكراً لعمر عثمان على مراجعتها والأقتراحات القيمة التي قدمها)

الأربعاء، 8 أبريل 2009

البرمجة و التفكير (و فرصة للتفوق العلمي)

تحولات...

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

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

...تفتح أبوابا

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

و الفرصة القادمة البرمجة...

أعتقد أنه في السنوات القادمة ينبغي أن تكون البرمجة جزء من التعليم الأساسي، مثلها مثل الحساب و الجبر من قبلها. يجب ان يتكلم الناس عن الAlgorithms و الArrays كما يتكلمون عن طرح x من طرفي المعادلة. هل هذا صعب؟ ليس بشدة: مع مرور الزمن يتطور مستوى تفكير المجتمع ككل. و هناك الآلاف من الناس في بلادنا و خارجها تعلموا البرمجة و هم أطفال. لو اخذ المجتمع هذا الموضوع مأخذ الجد فإني أتوقع، إن شاء الله، ان تزداد خبرة المعلمين شيئا فشيئا و يتعلموا من تجاربهم الطرق المثلى لتعليم البرمجة لأي طفل.
و هل سيفيد هذا شيئا؟ نعم يفيد في مجالين:

أولا: البرمجة هي "تفكير بطريقة رسمية" و يدخل في كل شيء في الحياة. ربما لو نظرنا لعلم مثل المحاسبة نجده مجموعة من الData structures و الAlgorithms. أشياء مثل الBaker's algorithm أو الBanker's Algorithm كانت تستخدم فعلا في المخابز و البنوك. حتى الأستراتيجيات العسكرية ربما يمكن "تكويد" بعضها أو كثير منها في صورة خوارزميات. لو كان الناس كلهم يعرفون البرمجة لوجدوا طريقة جديدة، غاية في الوضوح و الدقة، للحديث عن العلوم الأساسية التي يعرفونها.

ثانيا: العلوم الطبيعية مثل الأحياء و الفيزياء صارت أعقد من أن يقوم بها الأنسان وحده و صار الكثير من الأبحاث يعتمد على الكمبيوتر. و ظهرت علوم مهجّنة مثل Computational Physics أو ال
Computational Biology و صار العديد من علماء الفيزياء و الكيمياء يتعلمون البرمجة ليتابعوا أعمالهم.

...فرصة للتفوق العلمي

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

- ربما يصير شيء مثل الComputational Physics مادة جامعية عادية بدلا من حكرا على نخبة من العلماء القليلين!
- ربما تصير القوانين و المحاماة اقل إبهاما و أسهل في التطبيق!
- ربما يكون الإعراب في النحو بوصف الParse Trees!

..هيّا

هناك أوروبيون بدأوا فعلا في التفكير في هذا الأمر (أنظر مثلا هذه الصفحة عن ال"Computational Thinking"). لكن الأمر مازال في بدايته و لعلّنا نكون أمام فرصه حقيقية لأن نسبقهم بمشيئة الله تعالى.
كما قلت في مثل هذا اليوم في 2008...علّموا الأطفال البرمجة!

الجمعة، 27 فبراير 2009

فيش فيش

احيانا يقرأ المرء أشياء عجيبة لم يسمع بها من قبل. هذا مثال مم قرأت أنا:
ابدأ بكلمة انجليزية تنفع إسما أو فعلا على السواء مثل "Fish". هناك جمل عديدة في صورة Fish^N هي جمل صحيحة نحويا, هذه بعض قيم N:

Nالجملةالمعنى
1!Fishإصطد!
2Fish fish"إصطد سمكا" ...أو "السمك يصطاد
3Fish fish fishالسمك يصطاد سمكا
4Fish fish fish fishالسمك الذي يصطاده السمك يصطاد
5Fish fish fish fish fishالسمك يصطاد السمك الذي يصطاده السمك
6Fish fish fish fish fish fishالسمك الذي يصطاده السمك (الذي يصطاده السمك) يصطاد

الجملة رقم 6 تحتاج بعض التفصيل, تخيل أن السمك أ يصطاد ب, و ب يصطاد ج, و جيم يصطاد سمكا غير محدد:
أعتقد أنه يمكن إثبات بواسطة الInduction أن أي جملة في صورة fish^N هي جملة مفيدة (لكني لم أحاول بعد). هل يمكنك أنت أن تثبت هذا؟

الجمعة، 16 يناير 2009

We can do Web applications

Watching a new homegrown language grow up and generate its first dynamic Web page. Seeing the result of months of work. It feels good, الحمد لله.

If you know Lisp, you probably can understand how the code works in the (simplistic) example below. Click on the picture for better viewing.

I hope I'll be able, soon إن شاء الله, to announce more details about the language and a bit about its history.
To the team members who contributed valuable code to this project*, if you're reading this, thank you :)

[*] Haytham Alaa, Mosapha Ateya Sakr, Mostapha M. El-Maasarawy, Mohamed M. Moussa, Mohamed Abdul-Aziz El-Morsy & Kamal El-Din Mohammed.


الأربعاء، 14 يناير 2009

من اخترع المتغيرات؟ (الجزء الأول)

لم يعرف الخوازمي- العالم المسلم مؤسس علم الجبر- المتغيرات الرياضية بالصورة التي نعرفها.
في كتابه" الجبر و المقابلة" تجده يتحدث عن "الجذر" و "المال" في معادلاته. فيعرف الجذر بأنه "كل شيء مضروب في نفسه" و المال بأنه "كل ما اجتمع من الجذر المضروب في نفسه".
يقول المؤرخون أن الجذر في هذا الكتاب يرمز إلى المجهول و المال هو مربع المجهول . و لكن لماذا كانت الأمور بهذه الطريقة؟ و لماذا كلمة "مال" بالذات؟

أخمّن أنا رأيا آخر, و لا أعلم إن كان رأيي صحيحا أم لا (وليس معي الكتاب الآن لأراجع الحقائق, للأسف!).
المهم..تخميني هو أن العلماء في ذلك الزمن لم يكونوا يستخدمون الأسس بل كانوا يستخدمون الجذور. فبينما نحن نقول:

كانو يفكرون هم في:

فالمجهول الأصلي بالنسبة لهم هو مربع المجهول بالنسبة لنا.

و لكن عموما مشكلتهم كانت أكبر من ذلك, لم يكن لديهم أصلاً فكرة حرف مثل x يعبّر عن قيمة عددية. فماذا يفعل الخوارزمي؟
بدلا من المتغير كان يتكلم عن الشيء الحقيقي المراد معرفة قيمته, و لما كان كتابه يهدف لمساعدة الناس في حسابات التجارة و المواريث ففي كثير من الأحيان يكون المطلوب معرفته هو مقدار من المال. وهذه هي نظريتي في سبب التسمية.

و نتيجة لهذه التسميات فأنه لو نظرت في كتاب الجبر و المقابلة تجد أنه حيث نقول نحن:

كان يقول هو:
"مال وخمسة أجذار يعدل 24 درهماً".

ثم تطورت الأمور فبعد أن صارت كلمة "مال" تعني الرقم مضروبا في نفسه بشكل عام, صار مثلا "مال المال" هو نتيجة رفع العدد للأس أربعة, و بدأت اصطلاحات جديدة تظهر. بالمناسبة قام الدكتور مصطفى مشرفه وعالم مصري آخر سنة 1937 بتأليف شرح كتاب الجبر و المقابلة. شرح النص الأصلي كان في الهامش متضمنا "ترجمة" للمعادلات من الصياغة القديمة إلى المعادلات بالصورة التي نعرفها.

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

كيف إذن ظهرت المتغيرات بالطريقة التي نعرفها؟ البقية في الجزء الثاني.

الأربعاء، 5 نوفمبر 2008

أين تضع الغضب

أحتلّوا أفغانستان و العراق و أقاموا فيهما سنوات. يقتلون و ينهبون. في كل مكان تجد الذي فقد اباه و أخاه و ابنه. أنت غاضب, فأين تضع الغضب؟

حمّل paper و اقرأها. خطط لمشاريع. طوّر نفسك باستمرار.

كم مرة حطموا فيها لبنان؟ لم أعد استطيع العد. و كم فلسطينيا قتلوا؟ و كم أسروا؟ و على كم اعتدوا؟
أين تضع الغضب؟

أكثر من قراءة القرآن. اذهب للمسجد و احضر درساً. تعلّم دينك. ألم يحن الوقت؟

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

لا تقاطع فحسب. بل ادّخر المال الذي لم تدفعه لهم. ستحتاج كلّ مليم و أنت تفتح شركتك.

تلك الأمم المعتدية, كانوا محظوظين فظفروا بالتفوق العلمي و الاقتصادي.
تلك الأمم المعتدية. كانوا محظوظين فماذا فعلوا بحظهم؟ قتلوا و سرقوا و دمّروا.
و لكن الأمور تتغير. و بينما هم في أزماتهم الاقتصادية التي صنعوها لأنفسهم,علينا نحن أن نعمل.

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

تلك الأمم المعتدية. كانوا محظوظين. و قريبا..يوشك حظهم أن ينتهي.

الجمعة، 26 سبتمبر 2008

سي شارب - الجزء الأول - طريقة جديدة للتفكير

"A language that doesn't affect the way you think about programming, is not worth knowing." -- Alan Perlis

أيّ لغة برمجة ليست مجرّد syntax, بل هي تقدّم وسيلة جديدة للتفكير في البرنامج الذي تكتبه. #C هي لغة في سلسلة من اللغات المبنيّة على مباديء البرمجة المعتمدة على الأشياء Object Oriented Programming. و بدون تمكّن من هذه المباديء فلن يستفيد المبرمج حقاً من الـ#C. لذلك يجب أن نتحدث عن الOOP أولاً.

الأشياء و الفصائل
كثير من البرامج يسهل وصفها لو قسّمناها إلى أشياء.
مثلا في Word الأشياء هي شريط الأدوات و القوائم, الكلام الذي تكتبه و الصفحات و الفقرات, اللغات التي يعمل معها المدقق الأملائي, و سائر مكونات البرنامج. و في لعبة مثل ألعاب الحروب فالأشياء التي تكوّن البرنامج هي الوحدات و المباني و الخريطة و عوامل البيئة مثل الحيوانات أو الأنهار.
من كثرة انتشار البرامج التي يتيسّر وصفها لو قسّمناها لأشياء ظهرت طريقة للبرمجة مبنية على فكرة "الشيء" أو الobject. فما معنى "شيء" هنا؟

الشيء هو كائن له "حالة" و له "سلوك". An object has a state and behavior. أما الحالة فهي الوضع الذي عليه الشيء, مثل لون الكلمة في الWord أو مكان الجندي في لعبة الحرب أو عدد العناصر في الArray.و أمّا السلوك فهو التأثيرات التي يحدثها الشيء. مثلا السلوك في Word هو الطريقة التي يُرسم بها الجدول على الشاشة أو الطريقة التي يعمل بها المدقق الأملائي. و في اللعبة فسلوك الوحدة هو الطريقة التي تهاجم بها أو ردّ فعلها عندما تقترب منها وحدة معادية.

يمكن لو أخترنا أن نعبر عن حالة الشيء عن طريق مجموعة من الصفات Attributes و أن نعبر عن سلوكه بواسطة حصر الطُرُق methods التي يتصرّف بها. فلو كنت أصمم برنامج لشئون العاملين مثلا فقد أقول أن البرنامج فيه نوع من الأشياء هم الموظفون, و أن حالتهم تحددها صفات مثل تاريخ التعيين, السن, هل يقومون بالعمل حاليا أم لا, و هكذا. بينما يمكن أن أصف سلوكهم بأنهم يمكنهم أن يعملوا, أن يأخذوا عطلة, أن يترقّوا, أن يغيروا الفرع أو أن يستقيلوا.

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

من أجل هذا فإن بعض لغات البرمجة التي تتعامل مع الobjects (و لكن ليس كلها) قد اختارت أن تقدم مبدءاً جديداً لوصف مجموعة من الأشياء لها سلوك موحّد, و ذلك المبدأ هو الفصيلة class.

الفصيلة هي طريقة لوصف فئة من الأشياء يجمع بينها مجموعة مشتركة من الصفات و سلوك مشترك.

مجموعة مشتركة من الصفات أي أنّ السيّارة في لعبة سباق مثلا لها لون و سرعة و مكان. نعم كل سيّارة منهم لها لون و سرعة و مكان مختلفين لكن يجمع بينهم أن الكل يجب أن تكون هذه الصفات فيه. و سلوك مشترك أي أن كل ال checkboxes في الWindows مثلا تتصرف بنفس الطريقة بأن ترسم علامة حين تختارها و تلغي هذه العلامة حين تلغي اختيارك.

لتوضيح العلاقة بين الشيء و فصيلته انظر هذا المثال:
تخيّل أنه هناك قطة اسمها نميرة. يمكننا أن نقول
Cat is the class of Numaira
القطط هي فصيلة نميرة
و لكن كيف يمكن أن نقول نفس الجملة مع تبديل المبتدأ و الخبر؟
Numaira is an instance of Cat
نميرة هي تجسيد لفصيلة القطط

اذن كلمة instance معناها العلاقة بين الشيء و فصيلته.

أنواع الـattributes و الـmethods
مع أن كل شيء من الـ"أشياء" له حالة مختلفة إلا أنه يكون أحيانا هناك حالة مشتركة بين كل الأشياء من فصيلة معيّنة. مثلا لو كان في السيارة صفة هي "سعر قطعة الغيار" و كان هذا السعر موحدا فإنه لا معني أن يكون هناك نسخة مستقلة من هذا السعر لكل سيّارة على حدىً. و أيضا لو تغيّر هذا السعر فأنه من المتوقع أن ينعكس هذا التغيير على السيّارات كلها. في هذه الحالة فإن الصفة تظهر و كأنها خاصة بالclass كله و ليس بكل instance على انفراد. حين تكون الصفة خاصة بكل instance منفردة تكون تلك الصفة instance attribute و أمّا حين تكون خاصة بالـclass و مشتركة بين كل الـinstances فهي class attribute.

نفس الموقف بالنسبة للـmethods: فلو كانت الـmethod تصف سلوكا خاصا بالكائن (مثل طريقة هجوم الجندي) فهي instance method و لكن لو كانت تصف سلوكاً لا يرتبط بكائن معين فهي class method. مثال على الclass method أن أكتب code تقوم بحصر عدد الجنود الذين ماتوا في اللعبة. هذا شيء لا يرتبط بجندي معيّن و لكن يشمل فئة الجنود عموماً لهذا هو class method.

الهويّة
لكي نميّز بين "شيء" و آخر فاننا نحتاج أن يكون للأشياء هويّة identity وهي صفة قيمتها متفردة لكل شيء منفصل. في ال#C نستخدم الreference و هو قيمة تعبر (عادةً) عن مكان الـobject في الذاكرة فهي شبيهة بالpointers نوعاً ما. هذه القيمة تحدد أيضا الidentity بمعني أنه لو تساوى اثنان من الـreferences فمعنى هذا أنهما يدلّان على نفس الـobject و لو اختلفا فهما بالتأكيد يدلّان على objects مختلفة.

إعرف هذه المباديء جيداً. سنحتاجها المرة القادمة إن شاء الله حين نبدأ بكتابة code حقيقيّة!

Summary
- Applications can be composed of objects.
- An object has state (attributes) and behavior (methods).
- Objects of common attributes and behavior can be grouped into classes.
- If C is the class of and object O, then O is an instance of C.
- Instance attributes have a different value for each object, while a class attribute has only one value for the whole class, and does not belong to any particular instance.
- Similarly, an instance method works on a particular object each time it's invoked, but a class method does not work on any particular object but is related to the class as a whole.
- An object reference can be used to determine its identity and uniquely distinguish it from other objects.