ملفات المصدر
جزء من قسم البرمجة كائنية التوجه في رحلة C على Coddy. الدرس 3 من 61.
حتى الآن، وضعنا تصريحات الدوال في ملفات الترويسة، لكن كود الدوال الفعلي (التعريف) كان موجودًا في الملف الرئيسي. الخطوة التالية في البرمجة المعيارية هي نقل تلك التعريفات إلى ملفات المصدر (ملفات .c).
ينشئ هذا بنية واضحة من ثلاثة أجزاء: يعلن ملف الترويسة عن الدوال، ويعرّفها ملف مصدر منفصل، ويكتفي main باستخدامها. إليك شكلها:
// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
#endif
// math_utils.c
#include "math_utils.h"
int add(int a, int b) {
return a + b;
}
// main.c
#include <stdio.h>
#include "math_utils.h"
int main() {
printf("%d\n", add(5, 3));
return 0;
}
لاحظ أن math_utils.c يتضمن ملف الترويسة الخاص به. وهذا يضمن تطابق تعريف الدالة مع التصريح عنها؛ فإذا لم يتطابقا، فسيكتشف المترجم الخطأ. لا يحتاج الملف الرئيسي إلا إلى تضمين ملف الترويسة لاستخدام الدالة؛ ولا يحتاج إلى معرفة كيفية عمل add داخليًا.
يُبقي هذا الفصل تفاصيل التنفيذ مخفية، ويتيح لك تعديل منطق الدوال دون المساس بالملفات التي تستخدم تلك الدوال.
التحدي
سهللنبنِ أداة رياضية بسيطة بتنظيم الكود في البنية المناسبة المكوّنة من ثلاثة ملفات: ملف ترويسة للتصريحات، وملف مصدر للتنفيذات، وملف رئيسي يستخدمها.
ستنشئ ثلاثة ملفات:
math_ops.h: ملف الترويسة الذي يحتوي على تصريحات الدالتين للعملتين:multiplyوsubtract. تأخذ كلتا الدالتين عددين صحيحين وتعيدان عددًا صحيحًا. لا تنسَ إضافة حراس التضمين باستخدام الرمزMATH_OPS_H.math_ops.c: ملف المصدر الذي يحتوي على التنفيذات الفعلية للدالتينmultiplyوsubtract. ينبغي أن يضمّن هذا الملف ملف الترويسة الخاص به لضمان تطابق التصريحات مع التعريفات.main.c: الملف الرئيسي الذي يضمّن ملف الترويسة ويستخدم الدالتين لإجراء العمليات الحسابية.
ينبغي أن تعيد الدالة multiply حاصل ضرب عددين صحيحين، وأن تعيد الدالة subtract العدد الصحيح الأول مطروحًا منه العدد الثاني.
ستتلقى عددين صحيحين كمدخلات: a وb.
في الدالة الرئيسية، اطبع نتيجتي العمليتين في سطرين منفصلين:
Product: {result of multiply}
Difference: {result of subtract}على سبيل المثال، مع المدخلين 8 و3، سيكون الناتج:
Product: 24
Difference: 5جرّب بنفسك
#include <stdio.h>
#include "math_ops.h"
int main() {
int a, b;
scanf("%d", &a);
scanf("%d", &b);
// TODO: استدعِ الدالة multiply باستخدام a وb، وخزّن النتيجة
// TODO: استدعِ الدالة subtract باستخدام a وb، وخزّن النتيجة
// TODO: اطبع النتائج بالتنسيق التالي:
// الناتج: {نتيجة multiply}
// الفرق: {نتيجة subtract}
return 0;
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1أساسيات البرمجة التركيبية
ملفات الترويسةحواجز التضمينملفات المصدرالدوال الساكنةمراجعة: آلة حاسبة تركيبية4التغليف (Encapsulation)
مفهوم الـ Opaque Pointersتعريف الـ Opaque Structsالـ Getters والـ Settersالتحقق من البيانات في الـ Settersملخص: الصندوق السري2الكائنات والأساليب
الـ Structs ككائناتمؤشر 'Self'صحة استخدام Constالمؤشر مقابل القيمةالأساليب المساعدةملخص: Point Manager5مشروع: حساب بنكي بسيط
إعداد المشروعتنفيذ الحساب3دورة حياة الكائن
نمط المنشئ (Constructor Pattern)نمط الهادم (Destructor Pattern)تهيئة الـ Stackالنسخ العميق (Deep Copy)مراجعة: String Wrapper6الوراثة عبر التركيب
تضمين الـ Structقاعدة العضو الأولالوصول إلى أعضاء الأبعملية الـ Upcastingمراجعة: هرمية الأشكال9مشروع: رسّام الأشكال
نظرة عامة على المشروعتنفيذ الدائرةتنفيذ المستطيلاستخدام تعدد الأشكالحاوية الأشكالتدرّب بنفسك: مترجم C عبر الإنترنت