ملفات المصدر
جزء من قسم البرمجة كائنية التوجه في رحلة C على Coddy. الدرس 3 من 61.
حتى الآن، وضعنا تصريحات الدوال في ملفات الترويسة، لكن كود الدالة الفعلي (التعريف) كان موجودًا في الملف الرئيسي. الخطوة التالية في البرمجة المعيارية هي نقل تلك التعريفات إلى ملفات مصدر خاصة بها (ملفات .c).
ينشئ هذا هيكلًا نظيفًا من ثلاثة أجزاء: يعلن header عن الدوال، ويعرّفها ملف مصدر منفصل، بينما يستخدم 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 يتضمن ملف الرأس الخاص به. يضمن هذا تطابق تعريف الدالة مع التصريح بها؛ وإذا لم يتطابقا، فسيكتشف المصرّف الخطأ. لا يحتاج الملف main إلا إلى تضمين ملف الرأس لاستخدام الدالة؛ وليس من الضروري أن يعرف كيف تعمل add داخليًا.
يحافظ هذا الفصل على إخفاء تفاصيل التنفيذ، ويتيح لك تعديل منطق الدالة دون المساس بالملفات التي تستخدم تلك الدوال.
التحدي
سهللنَبْنِ أداةً رياضية بسيطة من خلال تنظيم شفرتك في البنية المناسبة المكوّنة من ثلاثة ملفات: ملف header للتصريحات، وملف مصدر للتنفيذات، وملف main يستخدمها.
ستنشئ ثلاثة ملفات:
math_ops.h: ملف header الخاص بك، ويحتوي على تصريحاتfunctionلعمليتين:multiplyوsubtract. تأخذ كلتاfunctionقيمتين من نوعintegerوتعيدان قيمة من نوعinteger. لا تنسَ تضمين include guards باستخدام الرمزMATH_OPS_H.math_ops.c: ملف المصدر الخاص بك، ويحتوي على التنفيذات الفعلية لـmultiplyوsubtract. يجب أن يتضمن هذا الملف ملف header الخاص به لضمان تطابق التصريحات مع التعريفات.main.c: ملف main الخاص بك، الذي يتضمن ملف header ويستخدم كلتاfunctionلإجراء الحسابات.
يجب أن تعيد multiply حاصل ضرب قيمتين من نوع integer، بينما يجب أن تعيد subtract قيمة first من نوع integer مطروحًا منها قيمة second.
ستتلقى مدخلين من نوع integer: a وb.
في function main، اطبع نتائج العمليتين في سطرين منفصلين:
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: اطبع النتائج بالصيغة:
// Product: {نتيجة multiply}
// Difference: {نتيجة 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 عبر الإنترنت