الحصول على الرصيد
جزء من قسم Object Oriented Programming في رحلة C على Coddy — الدرس 26 من 61.
التحدي
سهلحسابك البنكي مكتمل تقريبًا! لقد قمت ببناء القدرة على إنشاء الحسابات، وإيداع الأموال، وسحب المال — ولكن هناك قطعة واحدة حاسمة مفقودة. في الوقت الحالي، لا تملك الأكواد الخارجية أي وسيلة لرؤية الرصيد الحالي. دعنا نصلح ذلك بإضافة دالة جلب (getter function).
دالة الجلب (getter) هي الطريقة الصحيحة للكشف عن البيانات المخفية في وحدة مغلفة (encapsulated module). بدلاً من جعل حقل الرصيد عامًا (مما قد يكسر مبدأ التغليف)، فإنك توفر دالة للقراءة فقط تعيد القيمة. هذا يحافظ على حماية البيانات مع السماح بالوصول المتحكم فيه.
ستستمر في العمل مع ملفاتك الثلاثة:
account.h: أضف نموذجًا أوليًا لدالة جديدة:get_balance. تأخذ هذه الدالةconst Account *(بما أنها تقرأ البيانات فقط ولا تعدلها أبدًا) وتعيدdoubleيمثل الرصيد الحالي. احتفظ بجميع تصريحاتك الحالية.account.c: قم بتنفيذ دالةget_balance. إنها ببساطة تعيد حقل الرصيد المخفي من الحساب. لاحظ كيف يمكن لهذه الدالة الوصول إلى البيانات الداخلية لأنها محددة في نفس الملف الذي يحتوي على الهيكل (struct) — بينما لا يزال الكود الخارجي لا يستطيع التلصص على الداخل مباشرة.main.c: الآن يمكنك أخيرًا رؤية ما يحدث داخل حساباتك! أنشئ حسابًا، وقم بإجراء بعض المعاملات، واستخدم دالة الجلب الجديدة لعرض الرصيد في كل خطوة.
ستتلقى أربعة مدخلات: معرف الحساب (عدد صحيح)، ومبلغ الإيداع، ومبلغ السحب، ومبلغ إيداع ثانٍ.
في ملفك الرئيسي، أنشئ حسابًا واطبع رصيده الأولي (يجب أن يكون 0.00). أودع المبلغ الأول واطبع الرصيد الجديد. اسحب المبلغ المحدد واطبع الرصيد مرة أخرى. أخيرًا، قم بالإيداع الثاني واطبع الرصيد النهائي. ثم قم بتدمير الحساب.
اطبع المخرجات بهذا التنسيق:
Account 1001 created
Balance: 0.00
Balance: 500.00
Balance: 200.00
Balance: 350.00
Account destroyedحيث 1001 هو معرف الحساب، وتعكس الأرصدة: الأولي (0.00)، بعد إيداع 500.00، بعد سحب 300.00، وبعد إيداع 150.00 أخرى. قم بتنسيق جميع قيم الرصيد بمنزلتين عشريتين باستخدام %.2f.
مع وجود دالة الجلب هذه، توفر وحدة الحساب البنكي الخاصة بك الآن وصولاً كاملاً ومتحكمًا فيه لبيانات الحساب — يمكن للمستخدمين رؤية الرصيد ولكن لا يمكنهم تعديله إلا من خلال دوال الإيداع والسحب المعتمدة لديك.
جرّب بنفسك
#include <stdio.h>
#include "account.h"
int main() {
int account_id;
scanf("%d", &account_id);
double deposit1;
scanf("%lf", &deposit1);
double withdraw_amount;
scanf("%lf", &withdraw_amount);
double deposit2;
scanf("%lf", &deposit2);
Account* account = create_account(account_id);
printf("Account %d created\n", account_id);
// TODO: اطبع الرصيد الأولي باستخدام get_balance
deposit(account, deposit1);
// TODO: اطبع الرصيد بعد الإيداع الأول
withdraw(account, withdraw_amount);
// TODO: اطبع الرصيد بعد السحب
deposit(account, deposit2);
// TODO: اطبع الرصيد بعد الإيداع الثاني
destroy_account(account);
printf("Account destroyed\n");
return 0;
}جميع دروس Object Oriented Programming
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مشروع: رسّام الأشكال
نظرة عامة على المشروعتنفيذ الدائرة