شرح الموضوع
البرمجة ليست مجرد مسألة تعلم كيفية استخدام لغة البرمجة التي تحظى بشعبية أو طلب كبير في الوقت الحالي، بل هي تعلم كيفية حل المشكلات من خلال التفكير بطريقة منطقية وفهم ما هي لغة البرمجة، وما يمكنها فعله…
ستتعلم في هذه الوحدة
البرمجة: حل المشكلات بتفكير منطقي
البرمجة ليست مجرد مسألة تعلم كيفية استخدام لغة البرمجة التي تحظى بشعبية أو طلب كبير في الوقت الحالي، بل هي تعلم كيفية حل المشكلات من خلال التفكير بطريقة منطقية
- المطلوب: فهم ما هي لغة البرمجة، وما يمكنها فعله وكيفية استخدامها.
- مهارات التفكير الحاسوبي: تعتمد برمجة الحاسوب الناجحة على ممارستها، فهي تساعدك على فحص المشكلة وتحليلها بشكل منهجي وتحديد الحلول المحتملة لتصبح تطبيقات برمجية فاعلة.
- أربع خطوات: يمكن فهمها على أنها أربع خطوات منفصلة ولكنها مترابطة (الشكل 4.1).

التفكيك
التفكيك: قسّم المشكلة الكبيرة
- التفكيك: عملية تقسيم الأفكار المعقدة إلى أجزاء أصغر وأسهل، وأحيانًا تُسمى التحليل إلى عوامل.
- لماذا: المشكلات التي لا يتم تفكيكها تكون أكثر صعوبة في الحل، وتقسيمها إلى مشكلات أصغر يحسن فرص النجاح لأنه يسمح لك بالتركيز على شيء واحد في كل مرة.
- في البرمجة: تتضمن عملية التفكيك المراحل الأربع الآتية.
- تحديد ووصف المشكلات والعمليات: تسردها بشكل موجز بلغة تتناسب مع مصدر المشكلة، فالمشكلة المالية تستخدم مصطلحات دقيقة خاصة بالقطاع المالي.
- تقسيم المشكلات والعمليات إلى خطوات متميزة: تفكك المشكلات المعقدة إلى خطوات منفصلة يمكن إعادة تجميعها بشكل صحيح، وتستمر في تفكيك كل خطوة حتى تصل إلى مستوى مقبول من الفهم.
- وصف المشكلات والعمليات في مجموعة من الخطوات المنظمة: توثق ما فككته إلى مجموعة من الخطوات المنظمة، واضحة بما يكفي لتتبعه أنت أو الآخرون.
- إيصال سمات المشكلات والعمليات للآخرين: تناقش المشكلات والعمليات مع مبرمجين آخرين أو العميل، ثم تنظر في الخطوات لمعرفة إن كانت هناك أنماط متكررة.
ولماذا يهم أن تشرح الخطوات لغيرك؟
تقسيم المشكلات والعمليات إلى خطوات متميزة
- مثال الأجر الصافي: مشكلة حساب صافي أجر شخص ما (الراتب بعد خصم الضرائب والخصومات الأخرى) تُقسم إلى عدة خطوات (الشكل 4.2).
- الخطوات: الحصول على راتب سنوي، ثم حساب الأجر شهريًا قبل الخصم وحساب الخصومات، ثم حساب الأجر شهريًا بعد الخصم.
- تفصيلها: تقسيم الراتب السنوي على 12 شهرًا، وحساب الأجر الخاضع للضريبة، واستقطاع جميع الخصومات من الأجر شهريًا.
فكّر ملياً

تعرّف الأنماط
تعرّف الأنماط: ما الذي يتكرر؟
- تعرّف الأنماط: القدرة على رؤية السمات المتكررة داخل المشكلة وبين المشكلات المختلفة.
- فائدته: قد تنطوي مشكلة جديدة على سمات مشابهة لمشكلات حُلت سابقًا، فيوفر نقطة انطلاق جيدة.
- عملية من خمس خطوات رئيسية: تحديد العناصر المشتركة، وتحديد الفروق الشائعة، وتحديد العناصر الفردية، ووصف الأنماط، وعمل تنبؤات.
- العناصر المشتركة: افحص المشكلات واسرد عناصر كل منها، وحدد ما يتكرر في أماكن متعددة.
- الفروق: اسرد ما تتفرد به كل مشكلة، وسمّه اختلافًا.
- العناصر الفردية: حدد المدخلات والعمليات والمخرجات داخل كل مشكلة.
- وصف الأنماط: صف الأنماط التي حددتها.
- التنبؤ: حدد لكل نمط كيف يظهر في مواقف مشابهة مستقبلًا.
المصطلح الرئيس
تعميم النمط وتجريده
عمّم النمط: ما الذي تحتاجه وما الذي تهمله؟
- تعميم النمط: يحدث عندما يمكن تحديد العلاقات بين الأنماط ويمكن استخلاص استنتاجات بسيطة.
- مثال: في السيارات والحافلات والشاحنات عناصر متشابهة تتكرر: أربع عجلات ومحوران وهيكل وآلية توجيه.
- انظر ما وراء الواضح: لا تكتفِ بالاختلافات المادية بين أشكال النقل الثلاثة، بل حاول تحديد العناصر المشتركة والعلاقات بينها.
- جزءان في هذه المرحلة: تحديد المعلومات المطلوبة لحل مشكلة محددة، ثم تصفية المعلومات غير المطلوبة.
- المعلومات المطلوبة: ما المعلومات التي تحتاج إليها؟ وأسباب احتياجك لها ("الأساس المنطقي")؟ والتنسيق الذي تقدَّم به؟
- وسرعة الحاجة: مدى سرعة الحاجة إلى هذه المعلومات لمنع تأخير الحل.
- التصفية: معرفة المعلومات غير المطلوبة لأنها ستكون مصدر إلهاء، ومعرفة (وتبرير) سبب استبعادها.
تمثيل عناصر المشكلة
ستة عناصر تمثل أي مشكلة
- المتغيرات: القيم التي قد تتغير في المشكلة أو النظام، وعادةً ما يدخلها المستخدم أو تنتج عن عملية حسابية.
- الثوابت: القيم التي لا تتغير كثيرًا أو تظل ثابتة لفترة معقولة، مثل معدل الضريبة الأساسي 20 في المائة.
- العمليات الرئيسة: العمليات بالغة الأهمية لفهم المشكلة أو كيفية عمل النظام.
- العمليات المتكررة: العمليات التي تحدث عدة مرات داخل المشكلة.
- المدخلات: القيم التي تم إدخالها في النظام، بما في ذلك الوحدات المستخدمة، وربما أي قيم أو نطاقات صالحة.
- مثال على الصالح: عندما يكون الجنس "M" للذكور أو "F" للإناث، أو يجب أن يكون سعر المنزل بين 20,000 دولار و2,000,000 دولار.
- المخرجات: المعلومات المقدمة للمستخدم بتنسيق مطلوب، يحدده العميل عادةً كجزء من متطلباته.
ما العناصر الستة لتمثيل أجزاء مشكلة أو نظام؟
- التجريد: في الحوسبة مفهوم تُقسم به الأنظمة إلى طبقات، تخفي كل طبقة تعقيد التي تحتها.
- فائدته: يسمح للمبرمج باستخدام سمة دون معرفة كيفية عملها بالضبط، فتُجرَّد الآليات غير الصلة والمعقدة أو تُزال.
تطبيقات البرمجيات: كيف تُصنَّف؟
- تطبيقات البرمجيات: غالبًا تُسمى "التطبيقات" أو "البرامج"، وهي برامج تم تطويرها لتنفيذ مهام محددة وحل مشاكل معينة وتلبية احتياجات المستخدم المحددة.
- التصنيف: بحسب نوع ترخيص البرنامج (مجاني أو تجاري أو غير ذلك)، أو بحسب منصة الحاسوب (المكتبي أو المحمول)، أو بحسب الاستخدام.
مناقشة
المصطلح الرئيس
نتاج التعلم أ
| فئة الاستخدام | الاحتياجات التي تم الوفاء بها | أمثلة | الآثار |
|---|---|---|---|
| الألعاب | ألعاب الفيديو التي يمكن استخدامها للترفيه أو التعليم أو المساعدة في التعافي بعد الصدمة. | اكتيفيجين كول أوف ديوتي، بايويوير ماس إيفكت، يوبيسوفت أساسنز كريد، بوب كاب بيغل، مايكروسوفت ماينكرافت | العزلة الاجتماعية المحتملة، مشاكل صحية (لها تأثير في ممارسة الرياضة البدنية)، الصحة النفسية (كأداة للاسترخاء)، إدمان محتمل |
| الترفيه | التطبيقات التي تساعد المستخدمين على الاسترخاء والاستمتاع بأشكال مختلفة من الوسائط، مثل الموسيقى أو الفيديو أو الكتب من خلال التنزيل أو النشر أو كليهما. | أبل آيتونز، ميكروسوفت ميديا بلاير، تطبيق أمازون كيندل | العزلة الاجتماعية المحتملة، المشاهدة/الاستماع بحسب الحاجة (استهلاك أكثر مرونة) |
| الإنتاجية | تطبيقات مثل جداول البيانات وقواعد البيانات ومعالجات النصوص وبرامج العروض التقديمية التي تساعد العمال على إنجاز المهام بشكل أكثر كفاءة، عادةً عند العمل في الأدوار الإدارية. | مايكروسوفت أوفيس، أباتشي أوبن أوفيس، أدوبي كريتيف سويت، جوجل درايف/تطبيقات للعمل | تحسين الإنتاجية، مهارات العمل الجديدة، أفكار جديدة وتقنيات حل المشكلات، كفاءة أكبر، تكلفة مخفضة |
| تخزين المعلومات وإدارتها | التطبيقات المستخدمة لتخزين وإدارة المعلومات بأمان (منع الفقدان) وتمكين الاسترجاع السريع، عادةً عبر الإنترنت. | دروب بوكس، جوجل درايف، أبل آي كلاود | تقليل مخاطر فقدان البيانات، تكرار البيانات، الوصول المرن إلى البيانات |
| مهام متكررة أو خطيرة | التطبيقات المستخدمة لأتمتة المعدات في البيئات التي تشكل خطراً على الناس أو التي تحل محل المهام اليدوية الرتيبة. | صناعة الطاقة، الشاحنات ذاتية القيادة (التعدين)، تصنيع السيارات، المعالجة الكيميائية | تقليل المخاطر الجسدية للفرد، المزيد من الرضا الوظيفي (وظائف أقل تكراراً ومملاً)، مهارات العمل الجديدة، تحسين الإنتاجية، تكلفة مخفضة |
| وسائل التواصل الاجتماعي | تطبيقات مصممة لتوصيلك بأشخاص (المعروفة سابقاً باسم تويتر) آخرين، للمساعدة في التواصل ومشاركة الأفكار والأحداث والصور ومقاطع الفيديو. | إكس، فيسبوك، سناب شات، الواتساب، بنترست، إنستغرام، ووردبريس، بلوجر | التغييرات في مهارات التواصل، القدرة على مناقشة المشكلات ومشاركتها مع الآخرين، القدرة على تبادل الأفكار مع الآخرين، المخاطر الأمنية، المخاطر التي يتعرض لها القصر والبالغون الضعفاء، إدمان محتمل، تحسين المساهمة في القضايا الهامة |
المصطلح الرئيس
- مثال: "5" في النظام الثنائي هي 101 (1 × 1 + 2 × 0 + 4 × 1).
- لماذا الثنائي: تحتوي دوائر الحاسوب على حالات "تشغيل" و"إيقاف" يمكن استخدامها لتمثيل قيم 0 و1 الثنائية.
ميزات وخصائص لغات البرمجة
من لغة الآلة إلى اللغات عالية المستوى
- تاريخيًا: تم تطوير المئات من لغات البرمجة المختلفة منذ منتصف القرن العشرين.
- لغة الآلة (الثنائية): تخبر معالج الحاسوب بما يجب القيام به بالضبط، لكن ثبت أن هذا يستغرق وقتًا طويلًا ويتطلب الكثير من المهارات.
- الأثر: رغم السرعة والكفاءة في التنفيذ، استغرقت البرامج وقتًا طويلًا لإنشائها وتم اعتبار التطبيقات المعقدة مهمة كبيرة.
- اللغات الجديدة: جعلت اللغات ذات المستوى المنخفض والمستوى المرتفع أكثر قابلية للفهم، فقللت وقت إنتاج التطبيقات وبرامج الأنظمة المعقدة.
- المقارنة: يقارن بين نوعين مختلفين من كود البرنامج المستخدم لإخراج شاشة الرسالة نفسها، باستخدام لغة الآلة منخفضة المستوى ثم اللغة عالية المستوى، C++.
- "طالب BTEC" في كود مصدر C++:
cout << "BTEC student";- طالب BTEC في كود الآلة x86 Intel (موضح بالنظام الست عشري):
B4 09 BA 09 01 CD 21 CD 20 42 54 45 20 73 74 75 64 65 6E 74 24- القراءة والمعالجة: نقرأ كود C++ بشكل أكثر راحة، لكن الحاسوب يعالج المكافئ منخفض المستوى بسهولة أكبر لأنه يتحدث مباشرة إلى وحدة المعالجة المركزية.
- الترجمة: يجب ترجمة كود C++ بنجاح إلى لغة الآلة باستخدام برنامج التحويل قبل أن تنفذه وحدة المعالجة المركزية.
- اللغات منخفضة المستوى: مثل لغة الآلة (النظام الثنائي أساسه 2، أو الست عشري أساسه 16) أو لغة التجميع، تخفي القليل جدًا من تعقيدات بنية الحاسوب عن المبرمج.
- متطلبه: يجب أن يكون المبرمج على دراية بهيكلية المعالج.
- اللغات عالية المستوى: مثل Microsoft Visual Basic .NET وC++ تستخدم التجريد لإخفاء تعقيدات البنية، وقد يُترجم أمر واحد إلى مئات التعليمات المعقدة ذات المستوى المنخفض.
- لماذا الغالبية عالية المستوى: غالبية لغات البرمجة التجارية اليوم عالية المستوى لأنها تحسّن إنتاجية المبرمجين عند كتابة الكود.
- وأيضًا: تحسين قابلية قراءة الكود، وإنتاج كود يسهل تصحيحه، والسماح باستخدام أدوات تطوير البرامج الأكثر مرونة، وإنتاج كود يمكن نقله.
- المنخفضة: توفر اللغات ذات المستوى المنخفض التحكم النهائي في أجهزة الحاسوب، ومع ذلك فهي تستغرق وقتًا طويلًا كما أنها معقدة الاستخدام.
- العالية: تلخص صعوبات التحدث إلى الحاسوب مباشرة وتوفر فرصًا أسرع لتطوير البرامج، لكن البرنامج النهائي غالبًا أقل كفاءة وأبطأ وأكبر حجمًا.
ما أسباب غلبة اللغات عالية المستوى على لغات البرمجة التجارية؟
نماذج البرمجة
نماذج البرمجة: ست طرق لحل المشكلات
- النموذج: أدت أنواع مختلفة من المشكلات إلى أنماط برمجة مختلفة، يهدف كل نمط، ويُعرف بالنموذج، إلى حل مشكلة بطريقة مختلفة لتلبية احتياجات المستخدم المختلفة.
- نماذج متعددة: يمكن أن تنتمي بعض لغات البرمجة إلى نماذج متعددة.
- مثال روبي: يشيع استخدامها كلغة برمجة نصية، ولكنها تحتوي أيضًا على ميزات كائنية التوجه (OO).
- مثال فيجوال بيسك دوت نت: يصنفها كثيرون لغة تعتمد على الأحداث.
- وهي أيضًا: تعتمد بشكل كبير على الفئات، فيمكن اعتبارها لغة موجهة للكائنات.
- البرمجة الإجرائية: بيسك وسي وفورتران؛ غالبًا أول ما يتعلمه المبرمج، وتُعتبر أداة للأغراض العامة.
- كتابتها: عادةً في مجموعة من الخطوات المحددة جيدًا التي تحل مشكلة محددة، مثل عملية حسابية بسيطة في لغة سي (الشكل 4.3).
- الإجراءات: إذا أصبحت الخطوات معقدة أو طويلة أو متكررة، قد يقسمها المبرمج إلى إجراءات منفصلة، لكل منها غرض واحد يمكن استخدامه عدة مرات.
- كائنية التوجه (OO): C++ وMicrosoft C# وOracle Java وPHP وAda وPython وRuby.
- نهج حديث شائع: تعتمد اللغات كائنية التوجه على مفاهيم "الفئات" و"الكائنات" لحل مشاكل العالم الحقيقي.
- استخداماتها: تصميم ألعاب الفيديو ومواقع التجارة الإلكترونية وأنظمة قواعد البيانات وواجهات المستخدم.
- الفئات: تُنشأ الكائنات من فئات تُصمم على غرار "أشياء" العالم الحقيقي، كالعملاء والحسابات المصرفية والمنتجات والطلبات.
- الكبسلة: تعمل كل فئة كخريطة برمجية، تقوم بتغليف (أو احتواء) حالة الشيء (بياناته أو خصائصه) وسلوكياته (وظائفه أو طرقه) في كود البرنامج (الشكل 4.4).
- الميزة: كل فئة موجودة على حدة، فيمكن تعديلها بسهولة لتعكس تغيرات العالم الحقيقي دون تأثير سلبي في الحل بأكمله، وهذا جذاب للصيانة المستمرة.

- القائمة على الأحداث (ED): مايكروسوفت فيجوال بيسك دوت نت وبايثون وروبي وجافا سكريبت؛ لتطوير التطبيقات الرسومية التي تستجيب لأحداث ينشئها النظام (مثل ساعة النظام) أو المستخدم (مثل النقر بالفأرة).
- غير متسلسلة: يحدد المستخدمون العمليات التي يريدون تنفيذها بدلًا من اتباع مدخلات محددة مسبقًا.
- برمجة الأحداث: يركز المطورون عادةً عليها، وهي الشفرة التي تحدد الإجراءات التي يجب تنفيذها عند تشغيل حدث معين عبر مراقب.
- المراقب: عملية تنتظر حدوث حدث معين، فإذا نُقر خيار قائمة ملف->فتح عُرض مربع حوار فتح ملف.
- الآلة: لغة الآلة ولغة التجميع، وهي لغات ذات المستوى الأدنى توفر التحكم في الأجهزة الأساسية للآلة.
- عائلة المعالج: يجب كتابة كود الآلة لعائلة وحدة معالجة مركزية معينة، مثل Intel x86 (32 بت) أو x64 (64 بت).
- المحدودية: لا يمكن تشغيله بسهولة على منصات مختلفة دون التحويل إلى تعليمات وحدة المعالجة المركزية للنظام الجديد.
- لغة التجميع: تستخدم سلسلة من أساليب الاستذكار الملائمة للأشخاص لتمثيل تعليمات وحدة المعالجة المركزية، فتحسن قابلية القراءة وتزيد الإنتاجية.
- أكواد التشغيل والمعاملات: تصف أكواد التشغيل العملية التي يتم تنفيذها، والمعاملات هي القيم التي تعالجها العملية.
- لغات الترميز: HTML (لغة ترميز النص التشعبي) وXML (لغة الترميز القابلة للتوسعة).
- الترميز: شكل من أشكال اللغة المستخدمة لتحديد تنسيق محتوى المستند بطريقة منظمة باستخدام علامات خاصة، مثل
<P>في HTML للإشارة إلى بداية ونهاية الفقرة. - XML: يُستخدم غالبًا كتنسيق مفضل لنقل البيانات بين أنظمة الحاسوب والتطبيقات المختلفة، مثل تصدير واستيراد البيانات بين أنظمة قواعد العلاقات غير المتوافقة (الشكل 4.6).
- ترجمة التجميع: من أجل التنفيذ، يجب ترجمة لغة التجميع إلى لغة الآلة باستخدام برنامج خاص يسمى المترجم.
- متى تُستخدم لغات الآلة: عندما تكون السرعة أمرًا حيويًا أو الوصول منخفض المستوى إلى الأجهزة مهمًا، كآلات البيع وشاشات العرض الأمامية وألعاب الفيديو.

- البرمجة النصية: Perl وجافا سكريبت وRuby وPHP، وتُستخدم أنواعها لأغراض مختلفة.
- جافا سكريبت: يُستخدم في تصميم الويب لأتمتة العمليات وإضافة ميزات تفاعلية إلى صفحات الويب.
- PHP: لغة برمجة نصية شائعة على جانب الخادم لإنشاء تطبيقات معقدة عبر الإنترنت في التجارة الإلكترونية.
- Perl وRuby: غالبًا لأتمتة عمليات النظام بربط وتنفيذ مهام ربما شغلها المستخدم منفصلة، مثل برنامج Ruby لعرض أول 255 بايت من ملف (الشكل 4.7).

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

الأجهزة الخاصة المطلوبة
- الأجهزة الخاصة: عند برمجة حلول للأجهزة الخارجية يوصَل حاسوب مكتبي بجهاز خاص، عادة واجهة البرمجة التسلسلية (SPI) أو مجموعة عمل الاختبار المشتركة (JTAG).
- التوصيل: عبر ناقل تسلسلي عالمي (USB) أو كبل تسلسلي أو متوازي.
- البرمجة داخل النظام (ISP): تسمح بإعادة برمجة الأجهزة دون إزالتها من دائرتها الأصلية، كإعادة برمجة الهاتف المحمول لإصلاحه أو فتح ميزاته (الشكل 4.9).
الأداء

- الأداء: تتباين لغات البرمجة في كفاءة أدائها، ويقاس عادةً بقدرة اللغة على تنفيذ الخوارزميات المعقدة مقارنة بالوقت.
- المترجمات: تستفيد بعض اللغات بشكل أفضل من وحدة المعالجة المركزية بمترجمين أكثر كفاءة ينشئون كود آلة محسن.
- الذاكرة: تدير بعض اللغات ذاكرة الوصول العشوائي بكفاءة أكبر باتخاذ تدابير صارمة لجمع البيانات المهملة.
- اختياري: جمع البيانات المهملة ليس إلزاميًا؛ فلغات مثل C تتطلب من المبرمج إلغاء تخصيص الذاكرة غير المستخدمة يدويًا.
- الخطر: جمع البيانات المهملة المكثف قد يسرّع اللغة لكنه ينطوي على خطر "تسرب" الذاكرة.
- لغة C: للأغراض العامة، لكنها فعالة بشكل خاص للتحكم في الأجهزة والإلكترونيات الخارجية بسبب التحكم المنخفض المستوى في نظام الحاسوب.
- Java: لتطبيقات صفحات الويب وتطبيقات Android، ونهج "الكتابة مرة واحدة والتشغيل في أي مكان" (WORA) جعلها مدمجة في أجهزة الترفيه المنزلي، كأجهزة استقبال التلفزيون ومشغلات بلو راي.
- PHP: لتطبيقات خادم الأنشطة التجارية في التجارة الإلكترونية والتجارة عبر الإنترنت.
- C#: لألعاب الفيديو لنظام Microsoft Windows وأجهزة الألعاب الشهيرة، بفضل سهولة استخدامها مع مجموعة أدوات Microsoft XNA.
- Objective-C: لتطبيقات الجوال لأجهزة نظام التشغيل iOS الخاص بأجهزة أبل، مثل iPad وiPhone.
وقت التطوير
الوقت مال: أي لغة تسرّع التطوير؟
- وقت التطوير: يعتبر اعتبارًا مهمًا عند اختيار نموذج البرمجة؛ فالبرامج المكتوبة بلغة الآلة ولغة التجميع تكون فعالة وتُنفذ بسرعة كبيرة.
- لكن: وقت التطوير عند استخدام هذه اللغات قد يكون أطول كثيرًا مقارنة بالعمل مع اللغات عالية المستوى في بيئات التطوير الحديثة.
- الوقت والمال: في البرمجة التجارية يُربط الوقت مباشرة بالمال، فيُركَّز على كود موثوق بالحد الأدنى من الأخطاء في أسرع وقت ممكن.
- صعوبة القياس: من الصعب تحديد المقاييس المقبولة والاتفاق عليها داخل المجال.
- مثال: يمكنك اعتبار عدد أسطر الكود (LOC) المكتوبة في الساعة مقياسًا مقبولًا، ولكن هذا لا يأخذ في الاعتبار عدد الأخطاء ذات الصلة التي يتم إنشاؤها.
- أثره: إذا علم المبرمج أن إنتاجيته تقاس بعدد أسطر الكود (LOC) في الساعة، فقد يشجعه ذلك على كتابة كود مطول بشكل مفرط.
سهولة التطوير
- سهولة التطوير: بعض اللغات أسهل لأنها تقدم أدوات متقدمة تعطي تلميحات أو كودًا ينشأ تلقائيًا؛ فـ Microsoft Visual Basic .NET يحوّل نماذج الإدخال المنشأة بالسحب والإفلات إلى كود تلقائيًا.
- جودة الأدوات: تؤثر في سهولة التطوير وإنتاجية المبرمج، وتشمل أنظمة المساعدة وتمييز بناء الجملة وأدوات تصحيح الأخطاء.
- تسليط الضوء على بناء الجملة: يعرض هياكل برمجية مختلفة بألوان محددة، كالتعليق باللون الأخضر وسلسلة النص باللون الأحمر، فيسهل القراءة والفهم وتصحيح الأخطاء.
- أدوات تصحيح الأخطاء: تساعد في تحديد الأخطاء في الكود وإزالتها، وتشمل التتبع والمراقبة ونقاط التوقف.
- بحث: يمكنك البحث واستكشاف لغات برمجة مختلفة عبر الإنترنت باستخدام بيئات التطوير الافتراضية، وتحديد لغة معينة وإدخال بعض الأكواد الأساسية للبرنامج ثم تنفيذها.
البنى والتقنيات وتنفيذها بلغات مختلفة
اللبنات الأساسية المشتركة بين اللغات
- البناءات: بناءات لغات البرمجة هي اللبنات الأساسية المستخدمة لإنشاء برنامج.
- المشترك: العديد من البنى والتقنيات شائعة عبر عدد من اللغات، فيمكن الاستفادة من معرفتك بلغة في استخدام لغات أخرى.
- عينات الأكواد: من لغات برمجة شهيرة لمقارنة بنياتها وتقنياتها، وكُتبت الأكبر بلغة Microsoft C#، وهي لغة شائعة جدًا في تطوير البرمجيات.
- مع المهارة: ستجد أنه من السهل نسبيًا تحويل هذه العينات إلى لغة هدف أخرى.
كلمات الأوامر
كلمات محجوزة ومعرفات: كيف تسمّي؟
- الكلمات المحجوزة (الأوامر): في صميم معظم لغات البرمجة، ولا يمكن للمبرمج استخدامها لتسمية الأشياء.
- استخدامها: لأمر إجراء معين، مثل 'فتح ملف' أو 'مسح الشاشة' أو 'وضع نص على الشاشة'، وتختلف كميتها وغرضها اختلافًا كبيرًا بين اللغات.
- المعرف: اسم يسهل على المبرمجين استخدامه ويمثل كمية مخزنة في ذاكرة الوصول العشوائي للحاسوب.
- ثابت: معرف يمثل قيمة لن تتغير في أثناء تشغيل البرنامج.
- متغير: معرف يمثل قيمة قد تتغير في أثناء تشغيل البرنامج.
- مثال المتغير: عندما يقوم شخص بتسجيل الدخول إلى برنامج، يتم عادةً تخزين اسمه وكلمة المرور كمتغيرات، حيث ستكون هذه التفاصيل مختلفة لكل مستخدم.
- مثال الثابت: معدل ضريبة المبيعات في برنامج حساب سعر تلفزيون لا يتغير مع كل عملية بيع، فيُعيَّن كقيمة ثابتة.
المعرفات
- لإنشاء ثابت أو متغير: يجب عليك تزويد لغة البرمجة بشيئين: اسم ونوع بيانات.
- الاسم: يجب عليك دائمًا اختيار اسم معقول وهادف، فسيكون اسم المتغير الجيد لتخزين اسم المستخدم هو 'username'.
- الأسماء المحجوزة: لا يمكن استخدام بعض الأسماء لأنها محجوزة من قبل اللغة، عادة لأنها كلمة أمر، وتختلف بين اللغات فكن حذرًا.
- اصطلاحات التسمية: يُكتب الرمز الأول من كل كلمة تالية بحرف إنجليزي كبير (CamelCase)، أو تُربط الكلمات برمز تسطير سفلي (snake_case).
int userAge; | الكلمة الأولى بحروف صغيرة. يتم كتابة الرمز الأول من كل كلمة تالية برمز حرف إنجليزي كبير. | |
snake_case | int user_age; | كل الكلمات بحروف صغيرة. يتم ربط الكلمات برمز تسطير سفلي. |
خطأ مطبعي في الكتاب: ترجمة «الجمل المتصلة» وردت في خانة اسم النمط الأول.
- المتغيرات العالمية: يمكن استخدامها في أي مكان في كود البرنامج.
- المتغيرات المحلية: تقتصر على الاستخدام في كتلة الكود (مثل الدالة) التي صُرح بها فيها.
أنواع البيانات
أنواع البيانات: ما الذي يخزنه المتغير؟
- نوع البيانات: تدعمه جميع لغات البرمجة تقريبًا، ويحدد نوع القيمة التي يمكن للمتغير أو الثابت تخزينها والعمليات التي يمكن إجراؤها عليها وسلوكها داخل البرنامج.
- رمز: يخزن رمزًا واحدًا (رمز أبجدي أو رقم أو مساحة فارغة أو علامة ترقيم).
- سلسلة: تخزن مجموعة من الرموز.
- عدد صحيح: يخزن رقمًا كاملًا، أي رقمًا دون منازل عشرية.
- حقيقي (النقطة العائمة): يخزن رقمًا يحتوي على منازل عشرية.
- منطقية (Boolean): قيمة منطقية تخزن إما (1) true وإما (0) false.
ما أنواع البيانات الخمسة الأكثر شيوعًا؟
- الكتابة القوية والضعيفة: توصف بعض اللغات بأنها كتابة قوية وأخرى بكتابة ضعيفة (أو فضفاضة)، وهذا فرق جوهري في رسمية اللغة.
- القوية: تتطلب أن تكون البيانات وأنواعها متسقة عند استخدامها.
- جافا: إذا أُعلن متغير كعدد صحيح، فيجب استخدامه فقط لتخزين المتغيرات الصحيحة، وإلا قد تحدث أخطاء.
- لغة C: غير صارمة؛ فتحوّل البيانات تلقائيًا إلى النوع الصحيح الذي يتوقعه المتغير، وهي ميزة مناسبة لكن قد تؤدي إلى نتائج غير متوقعة.
الجمل
| الجدول 4.4 إعلانات المتغيرات باستخدام أنواع بيانات مختلفة في لغات برمجة مختلفة | |||
|---|---|---|---|
| ما يجب الإعلان عنه... | C | C++ | Microsoft Visual Basic .NET |
| Initial (character) | char initial; | char initial; | Dim initial As Char |
| Username (string) | char username[20]; | string username; | Dim username As String |
| Age (integer) | int age; | int age; | Dim age As Integer |
| Price (real) | float price; | float price; | Dim price As Double |
| Valid (Boolean) | Not available | bool valid; | Dim valid As Boolean |
جمل البرمجة الأساسية
- الجمل: الجانب الأساسي للعديد من لغات البرمجة، وتحدد الإجراءات الأساسية التي يمكن تنفيذها.
- أوجه التشابه: كلها حساسة لحالة الأحرف، لكن بعضها فقط يتطلب فواصل منقوطة لتحديد نهاية الجملة.
| الجدول 4.5 أنواع الجمل، أغراضها وتعبيراتها في لغات مختلفة | ||||
|---|---|---|---|---|
| نوع الجملة | الغرض | Microsoft C# | C++ | Ruby |
| التعيين (Assignment) | تخزين قيمة في معرف (متغير أو ثابت). | userAge = 17; | userAge = 17; | userAge = 17 |
| المدخلات (Input) | السماح بإدخال المستخدم، عادة من لوحة المفاتيح أو ملف. | userName = Console.ReadLine(); | cin >> userName; | userName = gets |
| المخرجات (Output) | إنشاء مخرجات للمستخدم، عادةً إلى الشاشة أو الطابعة أو مكبر الصوت أو الملف وما إلى ذلك. | Console.WriteLine("Hello"); | cout << "Hello"; | puts "Hello" |
بنى التحكم
ثلاث كتل تبني كل خوارزمية
- هياكل التحكم: تُبنى الخوارزميات التي تتحكم في البرامج عادةً بمزيج من ثلاث كتل بناء أساسية، هي التسلسل والاختيار والتكرار.
العوامل المنطقية
- العوامل: رموز خاصة تستخدم لأداء مهام خاصة في البرنامج.
- العوامل المنطقية: مثل "And" و"Or" و"Not"، تعمل وفقًا لمبادئ منطقية، وتُستخدم لدمج الشروط في عبارات 'if' والحلقات.
- مثال And (&&): سيحصل العميل على شحن مجاني إذا كانت قيمة طلبه أكثر من مبلغ محدد وكان عنوانه يبعد أقل من 25 كيلومترًا، ويجب أن يكون كلا جزأي الشرط صحيحين.
- احذر عند الانتقال بين اللغات: في بعض اللغات (مثل Visual Basic .NET) تُستخدم علامة '=' الواحدة لاختبار المساواة، وفي لغات أخرى (PHP وC++ وC# وJava) تُستخدم '=='.
- نصيحة: افحص أنواع العوامل المتاحة في لغة البرمجة المستهدفة.
الروتينات الفرعية والوظائف والإجراءات
قسّم الكود إلى وحدات لكل مهمة
- المصطلحات: الروتينات الفرعية والدوال والإجراءات مصطلحات تُستخدم في البرمجة الإجرائية، حيث يُقسَّم الكود إلى وحدات مختلفة.
- الوحدة: قد تسمى روتينًا فرعيًا أو دالة أو إجراءً بحسب اللغة، وهي مسؤولة عن أداء مهمة واحدة وعادة بين 5 و50 سطرًا من الكود.
- مثال: كود C# في الشكل 4.11 يستخدم دالة معرفة من قبل المبرمج لحساب مساحة الدائرة عند إعطاء نصف قطر محدد.
- الفائدة: الكود يميل إلى أن يكون أسهل في الكتابة والقراءة وتصحيح الأخطاء.
- إعادة الاستخدام: يمكن إعادة استخدام الكود عبر حلول متعددة، ويسمح بتقسيم تطبيق واحد والعمل عليه من عدة مبرمجين في الوقت نفسه، فيقل وقت التطوير.
هيكل البيانات
هيكل البيانات: كيف تنظم البيانات؟
- هيكل البيانات: تقنية تُستخدم لجمع وتنظيم عناصر البيانات في هيكل رسمي، تساعد على معالجة البيانات بكفاءة.
- الشائعة: السلسلة، والمصفوفة (أحادية وثنائية الأبعاد)، والمكدس، والانتظار، والسجل.
- الكفاءة: أحيانًا يمكن البرمجة بشكل أكثر كفاءة باختيار هياكل بيانات محددة، خاصة عند دمجها مع هياكل التحكم في التكرار (الحلقات).
النص (أو السلسلة)
السلسلة: رموز لها مواقع
- السلسلة: بنية بيانات تُستخدم لتخزين مجموعة من الرموز، ولا يتطلب الرمز الواحد على الأقل بايتًا واحدًا من ذاكرة الوصول العشوائي.
- الطول: قد تكون السلاسل ذات 'طول ثابت' (على سبيل المثال، تحتوي فقط على عشرة رموز)، أو يمكنهم استخدام رمز "terminator" خاص لتحديد نهايتهم.
- المرونة: قد يعني هذا أن سلسلة تتطلب رمزًا إضافيًا، ولكنه يسمح لها بأن تكون ذات أطوال مرنة.
- الفهرس الموضعي: يمكن الوصول إلى كل رمز فردي في سلسلة بالفهرس الموضعي، وفهرس الموضع الأول هو دائمًا 0.
- مثال: الكوكب[2] هو 'r'.
- مصفوفة رموز: تستخدم بعض اللغات مصفوفة ثابتة أحادية البعد من الرموز لمحاكاة سلسلة نصية، واستخدامها مشابه جدًا.
- الاستخدام: تُستخدم السلاسل عادةً لتخزين النصوص البسيطة التي يدخلها المستخدم، مثل اسم المستخدم، وقد تُستخدم لنصوص أكثر تعقيدًا كمحتوى البريد الإلكتروني أو الرسائل الفورية أو التغريدات.
- substring: يصف جزءًا من سلسلة أكبر، مثل 'Ear' جزء من 'Earth'.
مصفوفة (أحادية البعد)
المصفوفة: صف أو جدول من القيم
- المصفوفة أحادية البعد: هيكل بيانات ثابت الحجم عادةً، لكن اللغات الحديثة أكثر مرونة وتسمح بتغيير حجمها.
- النوع: عادةً ما يمكن للمصفوفة تخزين نوع واحد فقط من البيانات، ويُقبل أي نوع من البيانات، مثل الأعداد الصحيحة والرموز والقيم المنطقية.
- مثال: سبع درجات حرارة قصوى يومية بالدرجة المئوية لمحطة الطقس المحلية تُخزن في مصفوفة من سبعة أرقام عشرية.
| Temperature | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|---|
| 12.50 | 10.45 | 12.30 | 14.60 | 17.70 | 11.20 | 12.50 |
- الفهرس: يمكن اعتبار السلسلة مصفوفة من الرموز، ويُوصل إلى العناصر الفردية بالفهرس، فـ Temperature[4] هي 17.70.
مصفوفة (ثنائية الأبعاد)
- المصفوفة ثنائية الأبعاد: تشبه أحادية البعد لكنها تخزن عدة صفوف من البيانات.
- مثال: سبع درجات حرارة لثلاثة أسابيع متتالية، فننشئ مصفوفة ثنائية الأبعاد مكونة من سبعة في ثلاثة أرقام عشرية.
| Temperature | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|---|
| 0 | 12.50 | 10.45 | 12.30 | 14.60 | 17.70 | 11.20 | 12.50 |
| 1 | 12.22 | 11.00 | 10.00 | 20.00 | 21.00 | 14.00 | 15.50 |
| 2 | 13.00 | 14.00 | 14.50 | 14.60 | 12.30 | 14.00 | 14.60 |
- المؤشران: يُوصل إلى العناصر باستخدام كلا المؤشرين، فـ Temperature[1][4] هي القيمة حيث يلتقي العمود 4 والصف 1: 21.00.
- أبعاد أعلى: يمكن استخدام مصفوفة ثلاثية الأبعاد لتخزين 21 درجة حرارة لكل من محطات الطقس الخمس المختلفة.
- تقسيم المصفوفات ودمجها: في بعض اللغات يُسمى تفجير المصفوفات ودمج المصفوفات، وفي اللغات التي تُخزَّن فيها السلاسل صفوفًا من الرموز هي استخدامات عملية لاستخراج السلاسل الفرعية ودمج السلاسل.
نتاج التعلم أ
المكدس وقائمة الانتظار: آخر داخل أم أول داخل؟
المكدس (STACK)
- المكدس: هيكل بيانات يعتمد على طريقة LIFO، وله عمليتان أساسيتان: الدفع والسحب.
- أهميته: جزء أساسي من نظام تشغيل أي منصة حاسوبية، وأداة شائعة للمبرمج، ويُعرض عموديًا (الشكل 4.14).

نتاج التعلم أ
- مقارنة بالمصفوفة: في المصفوفة يمكن الوصول إلى العناصر بأي ترتيب، أما المكدس فيُوصل إليه فقط بطريقة آخر ما يدخل أول ما يخرج.
- فائدته: مفيد خاصة عند معالجة الخوارزميات المتكررة، وغالبًا تتضمنه مكتبة لغة البرمجة بجميع الأساليب اللازمة.
ما طريقة الوصول إلى المكدس؟ وما طريقة الوصول إلى قائمة الانتظار؟
قائمة الانتظار (FIFO)
- قائمة الانتظار البسيطة: بنية بيانات FIFO ولها عمليتان أساسيتان: إضافة إلى القائمة أو "إدراج"، وإزالة من بدايتها أو "إلغاء قائمة الانتظار".
- الوصول: فقط البيانات في مقدمة القائمة يمكن الوصول إليها وإزالتها.
- أهميتها: جزء حيوي من نظام تشغيل أي منصة حاسوبية، مثل قائمة انتظار الطابعة، وطريقة ممتازة لإدارة معالجة المهام، وتُعرض أفقيًا (الشكل 4.16).

السجل (أو الهيكل)
السجل: بيانات من أنواع مختلفة معًا
- السجل: مفهوم مشابه للمصفوفة، لكنه يخزن مزيجًا من أنواع البيانات داخل هيكله.
- مثال سجل طالب: "رقم تعريف الطالب" و"العمر" أعداد صحيحة، و"الاسم الأول" و"اسم العائلة" سلاسل نصية، و"مسجل" قيمة منطقية.
- مصفوفة هياكل: يمكنك إنشاء مصفوفة من الهياكل لتخزين مثيلات من سجل، ولهذا يُعتبر السجل أساسًا لتخزين السجلات البسيطة في جدول بيانات أو ملف بيانات ثنائي.
الجدول 4.9 سجل تفاصيل الطلاب
معالجة السلاسل
عمليات شائعة على السلاسل
- معالجة السلاسل: السلاسل مجموعة من الرموز لكنها قد تحتاج إلى معالجة، ويُعرف هذا العمل بين المبرمجين بمعالجة السلاسل.
- دوال مكتبية: معظم اللغات عالية المستوى تحتوي على دوال مكتبية متخصصة للمساعدة، ووظائف مماثلة موجودة في لغات أخرى.
- الطول: خاصية الطول لكائن السلسلة 'month' تعطي عدد الرموز في السلسلة (الشكل 4.19).
إيجاد طول سلسلة نصية بعدد الرموز
فحص الرموز الفردية
- الرمز الفردي: الناتج 'الرمز 3 من كلمة January هو u' لأن 'u' هو الرمز في الموضع 3 (الشكل 4.20).
استخراج سلسلة فرعية
- السلسلة الفرعية: الناتج 'Substring is ua' لأننا نبدأ الاستخراج عند الموضع 3 ('u') ونستخرج الرمزين الآتيين بما في ذلك الأول (الشكل 4.21).
دمج سلسلتين
- الدمج (Concatenation): عملية ضم الأشياء معًا، وتُستخدم لضم سلاسل أقصر لتشكيل سلاسل أطول، مثل "Hello" و"World!" لتشكيل "Hello World!".
- عامل الدمج: نربط 'January' و' has 31 days' بعامل الدمج '+' فيكون الناتج 'Joined string is January has 31 days' (الشكل 4.22).
معالجة الملفات
قراءة الملفات وكتابتها
- أهمية الملفات: تخزين البيانات جانب رئيس من البرمجة الحديثة، وفتح ملفات البيانات للقراءة (الحصول على البيانات) والكتابة (إرسال البيانات) أمر أساسي.
- الخطوات: لكي تستخدم ملفًا يجب فتحه، وعندما تنتهي يجب إغلاقه، وتتطلب بعض اللغات أوامر خاصة لذلك، فلغة C تستخدم الدالة fopen وfclose.
- قراءة ملف نصي: شكل بسيط لمعالجة الملفات هو قراءة البيانات من ملف ASCII أو نصي، وتتحقق في Microsoft C# بتركيبات بسيطة (الشكل 4.23).
نتاج التعلم أ
- حلقة while: تكرر عبر كل سطر من الملف النصي المحدد، وعند قراءة السطر يُخرج على الشاشة.
- الاستثناءات: تضمن معالجتها ألا يتعطل البرنامج بشكل قاتل إذا تعذر العثور على الملف النصي.
- قواعد البيانات: تدعم معظم اللغات الحديثة (مثل Microsoft C# وPHP وRuby) الاتصال بقواعد البيانات العلائقية مثل Microsoft SQL وMySQL، وهذا يدعم معالجة بيانات أكثر تعقيدًا.
معالجة الأحداث
معالجة الأحداث: الدالة التي تستجيب
- معالجة الأحداث: تصف استخدام دالة مكتوبة خصيصًا لتنفيذ إجراءات محددة عند تفعيل حدث من قبل المستخدم أو النظام.
- أمثلة: إخراج نتيجة عملية حسابية عند الضغط على زر في نموذج شاشة، أو عرض رسالة تأكيد عند تغيير دقة الشاشة.
- أين توجد: الأحداث أكثر شيوعًا في التطبيقات القائمة على النماذج، لكن يمكن إنشاء تطبيقات بسيطة لمعالجة الأحداث تعمل في بيئة وحدة التحكم أو واجهة سطر الأوامر (CLI) (الشكل 4.24).
- الساعة: يُستخدم حدث لمدة ثانية واحدة لتوفير ساعة في الوقت الفعلي على شاشة وحدة التحكم.
- نموذج الناشر-المشترك: بمجرد أن يستدعي الناشر الحدث أو يفعّله، تُخطر الكائنات الأخرى في البرنامج مثل المشترك.
- المشترك: يقبل الحدث ويوفر معالج حدث مناسبًا، وهو هنا دالة تعرض الساعة في الزاوية العلوية اليسرى من الشاشة.
توثيق الكود
وثّق كودك ليفهمه غيرك
- التوثيق: يجب دائمًا توثيق كود البرنامج وفقًا لمعايير جيدة.
- فوائده: جعل الكود أكثر قابلية للقراءة، ومساعدة المبرمجين الآخرين على فهمه، والمساعدة عند تصحيحه وفي صيانة البرنامج، خاصة إذا كان ذلك بواسطة مطور آخر.
- المعرفات ذاتية التوثيق: استخدام أسماء ذات معنى تشرح الغرض (وأحيانًا نوع البيانات) للقيمة التي يمثلها المعرف.
- تعليقات السطر الواحد: تعليقات قصيرة تشرح الغرض من سطر من الكود.
- تعليقات متعددة الأسطر: تعليقات أطول تشرح الغرض من قسم أكثر تعقيدًا من الكود أو تمهيد لقسم منفصل، مثل دالة أو فئة.
- استخدام الثوابت: استبدال مثيلات متعددة من القيم "الرمزية" الثابتة المنتشرة في البرنامج بمعرفات مسماة يمكن تعديلها عند نقطة واحدة في كود البرنامج.
ما تقنيات توثيق الكود الأربع؟
الجدول 4.10 توثيق الكود في C#
| مفهوم التوثيق | Microsoft C# |
|---|---|
| المعرفات ذاتية التوثيق | int userAge; |
| تعليقات سطر واحد | // stores user's age |
| تعليقات متعددة الأسطر | / This section of code validates the user's age when entered. / |
| استخدام الثوابت | const double PI = 3.14159; |
مبادئ المنطق المطبقة على تصميم البرنامج
المنطق: أساس تصميم البرنامج
- المنطق: في الحوسبة هو مجموعة المبادئ الموجودة أسفل عناصر البرنامج أو النظام التي تسمح له بالعمل.
- أهميته: القدرة على التفكير المنطقي تساعدك على معالجة البيانات بشكل صحيح وتشغيل شروط معقدة واختبار البيانات وبناء خوارزميات قوية.
- المبادئ المستخدمة: المنطق الرياضي والتكرارات والمنطق الافتراضي واستخدام المجموعات.
المنطق الرياضي
- المنطق الرياضي: يساعد المطورين على فهم الحقائق الأساسية في مشكلة ما وعلاقاتها ببعضها بدقة.
- الاستدلال: العملية المستخدمة للوصول إلى استنتاج منطقي من مقدمات يُعتقد أو يُعرف أنها صحيحة.
- مثال: جميع اللحوم تأتي من الحيوانات؛ ولحم الضأن يأتي من الأغنام؛ لذلك يأتي لحم الضأن من الحيوانات.
- المغالطات: الاستدلالات الخاطئة.
- Prolog: مفهوم الاستدلال مهم عند استخدام لغات مثل Prolog ("البرمجة بالمنطق") لبناء قواعد معرفية بسيطة يمكن الاستعلام عنها للكشف عن حقائق جديدة.
- الاتساق: يحاول معرفة ما إذا كانت الجملة (ونقيضها) صحيحة لتحديد وجود تناقضات.
- التكرار: يحدث عندما يُطبق إجراء حسابي على نتيجة تطبيق سابق.
الاكتمال
- الاكتمال: مفهوم منطقي ينص على أنه يمكنك "إثبات" أي شيء صحيح.
- الرموز: Σ (الرمز اليوناني سيجما)، وΦ (الرمز اليوناني فاي)، و⊢ (رمز البرهان) يعني 'يثبت' أو 'ينتج'، وكتابة ⊢ Σ تعني أن Σ 'يثبت' Φ.
- في البرمجة: يمكن استخدام الاكتمال لإثبات ما إذا كانت الخوارزميات ستعمل بنجاح وفقًا لقواعد وأهداف ومنطق معين.
جداول الحقيقة
جدول الحقيقة: اختبر الخوارزمية قبل أن تبرمجها
- جداول الحقيقة: يمكنك بها التحقق من خوارزمية بسيطة.
- المثال: لا يمكن للعميل تسجيل الدخول (L) إلا إذا كان لديه اسم مستخدم صالح (U) وكلمة مرور (P)، ولم يتم حظره (O) خلال آخر 30 دقيقة.
- الرموز: يُستخدم 1 لتمثيل 'true' و0 لتمثيل false، والرمز '.' يعني 'و' المنطقية، والشريط فوق "O" يعني "لا" منطقيًا.
(U.P).Ō = L
- المعنى: تسجيل الدخول الناجح = اسم المستخدم وكلمة المرور وعدم الإغلاق.
- الإثبات: بعد تقييم التعبير يمكننا إثبات التركيبة الوحيدة الصالحة (الجدول 4.11)، ويمكن تحويل التعبير إلى أي لغة برمجة مستهدفة لأن منطقه مثبت بجدول الحقيقة.
الجدول 4.11 جدول الحقيقة الذي يوضح التوليفات الممكنة والترتيب الصحيح (الصف الوحيد بالخط العريض)
| U | P | O | L (U.P).Ō |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 0 |
المنطق الافتراضي
المنطق الافتراضي والمجموعات
- المنطق الافتراضي: يعتمد على أن الجملة إما صحيحة وإما خاطئة، وليست صحيحة وخاطئة.
- مثالان: "الشمس حارة" صحيحة، و"اثنان زائد ثلاثة يساوي ستة" اقتراح خاطئ لأن المجموع خمسة.
- الافتراضات الأساسية: هذه الجمل البسيطة تُعرف بالافتراضات الأساسية، وهناك خمسة روابط أساسية لكل منها شكل ورمز.
- الروابط الخمسة: غير (¬) | و (∧) | أو (∨) | IF_THEN (→) | IF_AND_ONLY_IF (↔).
- تعبير معقد: "إذا كان لدي مال (Money) أو تذكرة (Ticket)، يمكنني مشاهدة فيلم (Film)" يُكتب F → (M ∨ T)، أي F صحيح إذا كانت M أو T صحيحة.
- مثال آخر: ¬ M → (DD → BF)، أي إذا كانت M خاطئة، فإن كان DD صحيحًا فإن BF صحيح.
- الاختبار قبل الكود: تستخدم هذه الجمل تدوينًا رياضيًا رسميًا، فيمكن اختبار صحتها قبل إنتاج أي كود، واشتقاق معرفة جديدة من الحقائق الموجودة.
- PDL: تعديل يسمى المنطق الديناميكي المقترح لعرض وظيفة الخوارزميات وحالات وأحداث الأنظمة الديناميكية بطريقة رياضية سهلة، ويتحقق من أن الخوارزميات المكتملة تحسب النتيجة الصحيحة.
استخدام المجموعات
- استخدام المجموعات: تنظم البيانات وتحدد العلاقات المتبادلة بين مجموعات البيانات، فتسمح بالبحث وتصفية البيانات المعقدة، ويمكن استخدامها لتكوين أذونات المستخدم.
- مثال: المجموعة A (المسؤولون) = {جون، أحمد، جو}، والمجموعة B (المالية) = {كلير، جو، نيام، فيل}، ويمثلهما مخطط فين (الشكل 4.25).
- النتيجة: وظيفة في البرنامج لا يصل إليها إلا المسؤولون العاملون في المالية؛ والمستخدم الوحيد في المجموعتين هو جو، فهو فقط لديه حق الوصول.

نتاج التعلم أ
كيف نحكم على جودة الحل؟
- حلول مختلفة: عند مواجهة المشكلة نفسها يتوصل مبرمجون مختلفون إلى حلول مختلفة تمامًا، لأن حل المشكلات عملية شخصية للغاية ومعظم اللغات مرنة.
- التأثير: التصميم الفعلي وتنفيذ الحل لهما تأثير مباشر على جودته العامة.
- معايير الجودة: تقييم كفاءته أو أداء الحل، وقابليته للصيانة، وقابليته للنقل، وموثوقيته، وقوته، وسهولة استخدامه.
- الكفاءة أو الأداء: يُقيَّم عادةً بقياس موارد النظام التي يستهلكها البرنامج.
- أمثلة: دورات ساعة وحدة المعالجة المركزية، ووقت المعالج، وذاكرة الوصول العشوائي المخصصة، ومعدل قراءة وسائط التخزين والكتابة إليها.
- المراجعة: قد يمكن مراجعة الكود ليكون أكثر اقتصادية فيعمل أسرع ويستخدم موارد أقل، وهي شائعة في ألعاب الفيديو وأنظمة التحكم في حركة المرور وتوجيه الصواريخ.
ما معايير الحكم على جودة الحل البرمجي؟
قابلية الصيانة
- قابلية الصيانة: السهولة التي يمكن بها تعديل البرنامج من قبل المطورين الحاليين أو المستقبليين لإجراء صيانة تصحيحية أو تحسينية أو تكيفية.
- الفائدة: سيكون من الأسهل تعديل أو تغيير الكود المكتوب بطريقة قابلة للصيانة، وهذا سيوفر الوقت والمال في التطوير.
- مقايضة: بين كتابة الكود بكفاءة لتقليل تكاليف التطوير الأولية والنظر في المدة التي ستستغرقها الصيانة المستقبلية.
قابلية النقل
- قابلية النقل: مقياس لعدد منصات الحاسوب (الأجهزة وأنظمة التشغيل) التي يمكن أن يستهدفها كود المصدر.
- لغة C: عالية القابلية للنقل، لأن لها مترجمات تحول الكود الحالي إلى كود الآلة المستهدف على منصات مختلفة.
- مثال: برنامج Microsoft Visual Basic .NET قد يقتصر تنفيذه على نظام تشغيل Microsoft، بينما تُنقل برامج C إلى Microsoft أو Linux بتغييرات قليلة في الأكواد الخاصة بالمنصة.
الموثوقية
- الموثوقية: تتحدد بالدقة العامة والاتساق في مخرجات التطبيق عبر عمليات تشغيل متعددة.
- الاتساق: قد يحسب البرنامج الإجابات بدقة كبيرة، لكن إن لم يكرر ذلك في كل مرة فلا يُعتبر موثوقًا.
- الأهمية: أكثر أهمية حيث تعتمد سلامة الأشخاص عليها، مثل أنظمة السلامة في محطة الطاقة أو اكتشاف الاصطدام في أنظمة التحكم في حركة الطائرات.
- المتانة: مقياس لجودة الكود، فعند الاختبار يجب أن تُعالَج البيانات المتطرفة والخاطئة دون تعطل البرنامج.
- قابلية الاستخدام: مقياس لمدى سهولة استخدام التطبيق، وتتضمن مدخلات البرنامج والتنقل ومعايير الإخراج.
قابلية الاستخدام
- التصميم الذي يركز على المستخدم (UCD): يشارك المستخدمون طوال التصميم وتقييمهم المستمر يحسّن التصميم قبل قبوله بالكامل.
- النماذج الأولية (RAD): تتيح للمطور تغيير مخططات التخطيط والتدفق والتفاعل بسرعة لتلقي تعليقات واقعية، وتعطي المستخدم 'مظهرًا وإحساسًا' واقعيًا مبكرًا.
- مظهر التطبيق: يمكن أن يكون للمظهر العام للتطبيق تأثير في هذا؛ فقد تتأثر سهولة الاستخدام إذا كان اختيار الألوان أو الخطوط سيئًا.
- إمكانية الوصول: يجب مراعاتها للمستخدمين ذوي الإعاقات الجسدية أو البصرية أو السمعية الذين قد يستخدمون التقنيات المساعدة.
- التفاعل بين الإنسان والحاسوب (HCI): دراسة أوسع تساعد في تصميم الواجهات، بما في ذلك تأثير سيكولوجية المستخدم وسلوكه في استخدام التطبيق.