تنفيذ المستطيل
جزء من قسم البرمجة كائنية التوجه في رحلة C على Coddy. الدرس 46 من 61.
التحدي
سهللنواصل بناء مشروع Shape Drawer من خلال تنفيذ Rectangle: وهو شكل ملموس آخر يضم بنية Shape الأساسية، تمامًا كما فعلنا مع Circle.
بالاعتماد على مشروعك الحالي، ستضيف وظائف المستطيل عبر هذه الملفات:
shape.h: احتفظ بواجهةShapeالأساسية مع نوعَي مؤشرات الدوالDrawFuncوAreaFuncمن الدروس السابقة.circle.hوcircle.c: احتفظ بتنفيذ Circle من الدرس السابق.rectangle.h: عرّف بنيةRectangleهنا. يضم المستطيلShapeباعتباره first member ويضيف حقليwidthوheight(وكلاهما من النوعdouble). صرّح عن دالة مُنشئ باسمcreate_rectangleتأخذ معاملي العرض والارتفاع وتُرجع قيمة من النوعRectangle.rectangle.c: نفّذ السلوك الخاص بالمستطيل:draw_rectangle: تطبعDrawing Rectangle with width: X.XX and height: X.XX(مع عرض كلتا القيمتين بمنزلتين عشريتين)area_rectangle: تُرجع حاصل ضرب العرض × الارتفاعcreate_rectangle: تهيّئ قيمة من النوعRectangle، وتربط مؤشرات الدوال فيShapeالمضمّنة بدوال المستطيل، وتضبط الأبعاد، ثم تُرجع المستطيل
main.c: اعرض عمل الشكلين من خلال الواجهة نفسها. اقرأ مُدخلين: العرض والارتفاع لمستطيل. أنشئ مستطيلًا باستخدام المُنشئ، ثم استدعِ كلًا منdrawوareaمن خلال مؤشرات الدوال فيShapeالمضمّنة. اطبع المساحة بمنزلتين عشريتين.
سيستقبل برنامجك مُدخلين: قيمتي width وheight (كأعداد ذات فاصلة عائمة).
ناتج مثالي عندما تكون المُدخلات 4.0 و3.0:
Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00ناتج مثالي عندما تكون المُدخلات 7.5 و2.5:
Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75تمامًا كما هو الحال مع Circle، يضم Rectangle بنية Shape باعتبارها أول member فيه، مما يتيح لك الوصول إلى مؤشرات الدوال من خلال هذا العضو المضمّن. هذا النمط المتسق هو ما يتيح تعدد الأشكال: إذ يمكن التعامل مع كلا الشكلين بطريقة موحّدة من خلال واجهة Shape الخاصة بهما. تذكّر استخدام حواجز التضمين في جميع ملفات الترويسة.
جرّب بنفسك
#include <stdio.h>
#include "shape.h"
#include "rectangle.h"
int main() {
double width, height;
scanf("%lf", &width);
scanf("%lf", &height);
// TODO: أنشئ مستطيلاً باستخدام create_rectangle(width, height)
// TODO: استدعِ draw من خلال مؤشر الدالة الخاص بـ Shape المضمّن
// TODO: استدعِ area من خلال مؤشر الدالة الخاص بـ Shape المضمّن
// TODO: اطبع المساحة بمنزلتين عشريتين: "Area: %.2f\n"
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 عبر الإنترنت