C + + فئات وكائنات
الغرض الرئيسي من C + + برمجة لإضافة التوجه الكائن إلى لغة البرمجة C والطبقات هي سمة أساسية من C + + التي تدعم البرمجة وجوه المنحى وغالبا ما تسمى الأنواع المعرفة من قبل المستخدم.يتم استخدام فئة لتحديد شكل كائن وأنه يجمع بين تمثيل البيانات وأساليب لمعالجة تلك البيانات في حزمة واحدة أنيق. ويطلق على البيانات والوظائف داخل فئة أفراد الطبقة.
تعاريف C + + الدرجة:
عند تعريف فئة، عليك أن تحدد مخططا لنوع البيانات. هذا لا يعرف في الواقع أي بيانات، لكنها لا تحدد ما يعني اسم الفئة، وهذا هو، ما كائن من الدرجة سيتكون من عمليات وما يمكن أن يؤديها على هذا الكائن.يبدأ تعريف الفئة مع الكلمة الدرجة يليه اسم الفئة. وأجزاء الجسم، محاطة زوج من الأقواس المعقوفة. يجب أن يتبع تعريف فئة إما عن طريق فاصلة منقوطة أو قائمة الإعلانات. على سبيل المثال، حددنا نوع البيانات مربع باستخدام الكلمة الفئة على النحو التالي:
الطبقة صندوق { العام : ضعف طول . // طول مربع مزدوج اتساع ، // اتساع مربع مزدوج الارتفاع ، // ارتفاع مربع }؛الكلمة الجمهور يحدد سمات صول أفراد الطبقة التي تليه. عضو الجمهور يمكن الوصول إليها من خارج الطبقة في أي مكان داخل نطاق كائن الفئة. يمكنك أيضا تحديد أعضاء فئة و الخاص أو محمية التي سوف نناقش في القسم الفرعي.
تعريف C + + الأجسام:
توفر فئة المخططات للكائنات، بحيث يتم إنشاؤه في الأساس كائن من فئة. نعلن الأشياء من فئة مع بالضبط نفس النوع من الإعلان أن نعلن متغيرات أنواع أساسية. العبارات التالية تعلن كائنين من صندوق الطبقة:مربع Box1 ، // نعلن Box1 من نوع مربع صندوق Box2 ، // نعلن Box2 من نوع مربعكل من الكائنات Box1 وBox2 سيكون النسخة الخاصة بهم من أعضاء البيانات.
الوصول إلى بيانات الأعضاء:
أعضاء بيانات العام من وجوه فئة يمكن الوصول إليها باستخدام المشغل الوصول المباشر عضو (). دعونا نحاول المثال التالي لجعل الامور واضحة:# تشمل <iostream> باستخدام مساحة الأمراض المنقولة جنسيا . الطبقة صندوق { العام : ضعف طول . // طول مربع مزدوج اتساع ، // اتساع مربع مزدوج الارتفاع ، // ارتفاع مربع }؛ كثافة العمليات الرئيسية ( ) { صندوق Box1 ، // نعلن Box1 من نوع مربع صندوق Box2 ، // نعلن Box2 من نوع مربع مزدوج حجم = 0.0 ، // تخزين حجم مربع هنا // مربع 1 مواصفات Box1 . ارتفاع = 5.0 ، Box1 . طول = 6.0 ، Box1 . اتساع = 7.0 ؛ // مربع 2 مواصفات Box2 . ارتفاع = 10.0 ، Box2 . طول = 12.0 ، Box2 . اتساع = 13.0 ، // حجم مربع 1 حجم = Box1 . ارتفاع * Box1 . طول * Box1 . اتساع ، COUT << "حجم Box1 : " << حجم << endl ؛ // حجم مربع 2 حجم = Box2 . ارتفاع * Box2 . طول * Box2 . اتساع ، COUT << "حجم Box2:" << حجم << endl . عودة 0 ؛ }عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتيجة التالية:
حجم Box1: 210 حجم Box2: 1560من المهم أن نلاحظ أن أعضاء الخاص ومحمية ولا يمكن الوصول إليها مباشرة باستخدام مشغل الوصول المباشر عضو (). سوف نتعلم كيف يمكن الوصول أعضاء الخاص وحمايتها.
الطبقات والكائنات في التفاصيل:
حتى الآن، كنت قد حصلت على فكرة أساسية جدا حول C + + فئات وكائنات. هناك مفاهيم أخرى مثيرة للاهتمام تتعلق فئات C + + والأجسام التي سوف نناقش في مختلف الأقسام الفرعية التالية:مفهوم | وصف |
---|---|
وظائف عضو الفئة | وظيفة عضو فئة هي وظيفة لديها تعريفها أو النموذج الأولي ضمن تعريف الفئة مثل أي متغير آخر. |
معدلات الوصول الطبقة | عضو من الدرجة يمكن تعريفها بأنها عامة أو خاصة أو محمية. افتراضيا أعضاء شأنه أن يفترض طابع الخصوصية. |
منشئ والمدمر | ومنشئ فئة هي وظيفة خاصة في فئة الذي يسمى عند إنشاء كائن جديد من فئة.والمدمر هو أيضا وظيفة خاصة وهو ما يسمى عند حذف كائن تم إنشاؤه. |
+ + C نسخ منشئ | منشئ نسخة هو منشئ مما يخلق كائن تهيئة مع كائن من نفس الفئة، والتي تم إنشاؤها مسبقا. |
C + + وظائف صديق | وهناك صديق يسمح ظيفة الوصول الكامل إلى أعضاء الخاص ومحمية من فئة. |
دالات مضمنة C + + | مع دالة مضمنة، يحاول المترجم لتوسيع رمز في الجسم وظيفة بدلا من استدعاء الدالة. |
وهذا المؤشر في C + + | كل كائن لديه مؤشر خاص هذا الذي يشير إلى الكائن نفسه. |
المؤشر إلى الطبقات C + + | يتم مؤشر إلى فئة بنفس الطريقة تماما مؤشر إلى بنية. في الواقع الطبقة هي حقا مجرد هيكل مع وظائف فيها. |
أعضاء ثابتة من فئة | يمكن تعريف كل من أعضاء البيانات وأعضاء وظيفة من فئة وثابت. |
C + + الميراث
واحدة من أهم المفاهيم في البرمجة وجوه المنحى هو أن الميراث. الميراث يسمح لنا لتحديد فئة من حيث فئة أخرى، مما يجعل من الأسهل لإنشاء والحفاظ على التطبيق. وهذا يوفر أيضا فرصة لإعادة وظيفة رمز وسريع وقت التنفيذ.عند إنشاء فئة، بدلا من كتابة جديدة تماما أعضاء البيانات ووظائف الأعضاء، يمكن للمبرمج أن تعين فئة جديدة يجب أن ترث أعضاء الطبقة الحالية. وتسمى هذه الفئة القائمة على قاعدة الطبقة، ويشار فئة جديدة باسم المستمدة الصف.
فكرة الميراث تنفذ هو العلاقة. على سبيل المثال، الثدييات IS-A الحيوان، الكلب هو حيوان ثديي بالتالي-A-A الكلب هو الحيوان كذلك وهلم جرا.
قاعدة والمستمدة فصول:
وهناك فئة يمكن أن تستمد من الطبقات أكثر من واحد، مما يعني أنه يمكن أن ترث البيانات وظائف من فئات أساسية متعددة. لتعريف فئة مشتقة، ونحن نستخدم قائمة اشتقاق فئة لتحديد الفئة الأساسية (الخانات). فئة اشتقاق أسماء قائمة واحدة أو أكثر من فئات أساسية ولها شكل:الفئة المشتقة - الفئة : الوصول - محدد قاعدة - الفئةحيث الوصول محدد هو واحد من الجمهور، المحمية، أو القطاع الخاص ، والفئة الأساسية هو اسم من فئة محددة سابقا. إذا لم يتم استخدام الوصول محدد، فمن الخاص افتراضيا.
النظر في فئة أساسية الشكل وفئة مشتقة لها مستطيل على النحو التالي:
# تشمل <iostream> باستخدام مساحة الأمراض المنقولة جنسيا . // قاعدة class class Shape { public : void setWidth ( int w ) { width = w ; } void setHeight ( int h ) { height = h ; } protected : int width ; int height ; }; // المستمدة من الدرجة الدرجة مستطيل : العام الشكل { العام : كثافة العمليات getArea () { عودة ( عرض * ارتفاع )؛ } }؛ كثافة العمليات الرئيسية ( الفراغ ) { مستطيل مصحح . مصحح . setWidth ( 5 )، مصحح . setHeight ( 7 ). // طباعة مجال الكائن. COUT << "المساحة الكلية:" << مصحح . getArea () << endl ؛ العودة 0 ؛ }عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتيجة التالية:
إجمالي المساحة : 35
التحكم في الوصول والميراث:
فئة مشتقة يمكن الوصول إلى كافة الأعضاء غير الخاص من الطبقة قاعدته. وبالتالي ينبغي إعلان أعضاء الفئة الأساسية التي لا ينبغي أن تكون في متناول وظائف عضوا في الفئات المشتقة الخاص في الفئة الأساسية.يمكننا تلخيص أنواع وصول مختلفة وفقا لمن يستطيع الوصول إليها بالطريقة التالية:
وصول | الجمهور | محمية | خاصة |
---|---|---|---|
نفس الفئة | نعم | نعم | نعم |
الفئات المشتقة | نعم | نعم | لا |
الطبقات الخارجية | نعم | لا | لا |
- الصانعين، destructors والصانعين نسخة من الفئة الأساسية.
- مشغلي زائد من الفئة الأساسية.
- وظائف صديق من الفئة الأساسية.
نوع من الميراث:
عندما اشتقاق فئة من فئة أساسية، قد تكون موروثة الفئة الأساسية خلال العام، محمية أو الخاص الميراث. يتم تحديد نوع من الميراث قبل وصول محدد كما هو موضح أعلاه.نحن بالكاد يستخدم محمية أو الخاص الميراث، ولكن الجمهور ويستخدم عادة الميراث. أثناء استخدام نوع مختلف من الميراث، يتم تطبيق القواعد التالية:
- الميراث العام: عندما اشتقاق فئة من العامة الفئة الأساسية، العام أعضاء الفئة الأساسية أصبحت العام أعضاء فئة مشتقة و حمايةأعضاء الفئة الأساسية تصبح محمية أعضاء فئة مشتقة. فئة أساسية في الخاص الأعضاء هم أبدا الوصول إليها مباشرة من فئة مشتقة، ولكن يمكن الوصول إليها من خلال المكالمات إلى الجمهور و محمي أعضاء الفئة الأساسية.
- الميراث محمية: عندما المستمدة من محمية الفئة الأساسية، العام و حماية أفراد الفئة الأساسية أصبحت محمية أعضاء فئة مشتقة.
- الميراث الخاص: عندما المستمدة من خاصة فئة أساسية، العام و حماية أفراد الطبقة تصبح قاعدة الخاص أعضاء في فئة مشتقة.
المواريث متعددة:
A + + C الفئة يمكن أن ترث أعضاء من أكثر من فئة وهنا هو بناء الجملة الموسعة:الفئة المشتقة - الفئة : الوصول baseA ، baseB الوصول ....حيث الوصول هو واحد من الجمهور، المحمية، أو الخاص وستعطى لكل فئة أساسية وأنها سوف تكون مفصولة بفواصل كما هو مبين أعلاه. دعونا نحاول المثال التالي:
# تشمل <iostream> باستخدام مساحة الأمراض المنقولة جنسيا . // الطبقة قاعدة Shape class Shape { public : void setWidth ( int w ) { width = w ; } void setHeight ( int h ) { height = h ; } protected : int width ; int height ; }; // قاعدة الطبقة PaintCost الطبقة PaintCost { العامة : كثافة العمليات getCost ( كثافة المنطقة ) { عودة منطقة * 70 ؛ } }؛ // المستمدة من الدرجة الدرجة مستطيل : العام الشكل ، الجمهور PaintCost { العام : كثافة العمليات getArea () { عودة ( عرض * ارتفاع )؛ } }؛ كثافة العمليات الرئيسية ( الفراغ ) { مستطيل مصحح ، كثافة المنطقة . مصحح . setWidth ( 5 )، مصحح . setHeight ( 7 ). منطقة = مصحح . getArea ()؛ // طباعة مجال الكائن. COUT << "المساحة الكلية:" << مصحح . getArea () << endl ؛ // طباعة التكلفة الإجمالية لوحة COUT << "مجموع تكلفة الطلاء: $" << مصحح . getCost ( منطقة ) << endl ؛ العودة 0 ؛ }عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتيجة التالية:
إجمالي المساحة : 35 مجموع تكلفة الطلاء : 2450 $
C + + التحميل الزائد (المشغل وظيفة)
C + + يسمح لك تحديد تعريف أكثر من واحد ل وظيفة اسم أو المشغل في نفس النطاق، وهو ما يسمى وظيفة الحمولة الزائدة و عامل الحمولة الزائدة على التوالي. إن إعلان مثقلة هو إعلان أن كان قد أعلن مع نفس اسم إعلانا أعلن سابقا في نفس النطاق، إلا أن كلا من الإعلانات لديها حجج مختلفة، وتعريف مختلف الواضح (التنفيذ).
عند استدعاء زائد وظيفة أو المشغل ، ومترجم يحدد تعريف الأنسب لاستخدام بمقارنة أنواع حجة استخدمته لاستدعاء الدالة أو عامل مع أنواع المعلمة المحددة في التعاريف. ويطلق على عملية اختيار أنسب وظيفة زائد أو مشغل قرار الزائد .
وظيفة الحمولة الزائدة في C + +:
هل يمكن أن يكون تعريفات متعددة لنفس اسم الدالة في نفس النطاق. تعريف وظيفة يجب أن تختلف عن بعضها البعض من خلال أنواع و / أو عدد من الحجج في قائمة الوسائط. لا يمكنك الزائد وظيفة الإعلانات التي تختلف فقط بواسطة نوع الإرجاع.فيما يلي المثال حيث نفس وظيفة الطباعة () وتستخدم لطباعة أنواع البيانات المختلفة: # تشمل <iostream> باستخدام مساحة الأمراض المنقولة جنسيا ، الطبقة printData { الجمهور : باطلة الطباعة ( كثافة العمليات ط ) { COUT << "كثافة الطباعة:" << ط << endl ؛ } باطلة طباعة (مزدوجة و ) { COUT << "تعويم الطباعة:" << و << endl ؛ } باطلة الطباعة ( تشار * ج ) { COUT << "الطابع الطباعة:" << ج << endl ؛ } }؛ كثافة العمليات الرئيسي ( الفراغ ) { printData PD ، // اتصل الطباعة لطباعة عدد صحيح PD . الطباعة ( 5 ). // اتصل الطباعة لطباعة تعويم PD .طباعة ( 500.263 )، // اتصل الطباعة لطباعة الطابع PD . الطباعة ( "مرحبا C + +" ). عودة 0 ؛ } عندما يتم ترجمة الكود في الأعلى ثم أعدم، وتنتج النتيجة التالية: طباعة الباحث : 5 الطباعة تعويم : 500،263 الطباعة الطابع : مرحبا C + +
مشغلي الحمولة الزائدة في C + +:
يمكنك إعادة تعريف أو الزائد معظم مشغلي مدمج المتاحة في C + +. وبالتالي مبرمج يمكن استخدام مشغلي مع أنواع المعرفة كذلك.مشغلي مثقله هي الوظائف مع أسماء خاصة المشغل الكلمة تليها رمز للمشغل يجري تعريف. مثل أي وظيفة أخرى، وهي المشغل زائد لديه نوع الإرجاع وقائمة المعلمة. صندوق المشغل + ( CONST صندوق و)، يعلن المشغل بالإضافة التي يمكن استخدامها ل إضافة كائنين مربع وإرجاع الكائن مربع النهائي. يمكن تعريف معظم مشغلي زائد وظائف غير الأعضاء العادية أو وظائف عضو الفئة. في حالة نحدد فوق وظيفة غير الأعضاء ظيفة من فئة ثم سيكون لدينا لتمرير حجتين لكل المعامل على النحو التالي: صندوق المشغل + ( CONST صندوق و،CONST صندوق و)، وفيما يلي مثال لإظهار مفهوم عامل الحمولة الزائدة باستخدام دالة عضو. هنا يتم تمرير كائن كحجة التي سيتم الوصول إليها باستخدام هذا الكائن، الكائن الذي سوف نسمي هذا المشغل الخصائص يمكن الوصول إليها باستخدام هذا المشغل كما هو موضحالزائد + المشغل لإضافة اثنين من مربع طول مربع مزدوج اتساع ، // اتساع مربع مزدوج الارتفاع ، // ارتفاع مربع }؛ // الوظيفة الرئيسية للبرنامج الباحث الرئيسي ( ) { صندوق Box1 ، // نعلن Box1 من نوع مربع صندوق Box2 ، / / تعلن Box2 من نوع مربع صندوق Box3 ، // نعلن Box3 من نوع مربع مزدوج حجم = 0.0 ، // تخزين حجم مربع هنا // مربع 1 مواصفات Box1 . setLength ( 6.0 )، Box1 . setBreadth ( 7.0 )، Box1 .setHeight ( 5.0 )، // مربع 2 مواصفات Box2 . setLength ( 12.0 )، Box2 . setBreadth ( 13.0 )، Box2 . setHeight ( 10.0 )، // حجم مربع 1 حجم =Box1 . getVolume ()؛ COUT << " حجم Box1: " << حجم << endl ؛ // حجم مربع 2 حجم = Box2 . getVolume ()؛ COUT << "حجم Box2:" <<حجم << endl ؛ // إضافة اثنين الكائن على النحو التالي: Box3 = Box1 + Box2 ، // حجم مربع 3 حجم = Box3 . getVolume ()؛ COUT << "حجم Box3:" << حجم << endl ؛ العودة 0 ؛ } عندما يتم ترجمة الكود في الأعلى ثم أعدم، و تنتج النتيجة التالية: حجم التداول من Box1 : 210 حجم التداول من Box2 : 1560 حجم من Box3 : 5400
Overloadable / غير overloadableOperators:
وفيما يلي قائمة المشغلين التي يمكن مثقلة:+ | - | * | / | ٪ | ^ |
و | | | ~ | ! | ، | = |
< | > | <= | > = | + + | - |
<< | >> | == | ! = | && | || |
+ = | - = | / = | ٪ = | ^ = | و= |
| = | * = | << = | = >> | [] | () |
-> | -> * | جديدة | جديد [] | حذف | حذف [] |
تعدد الأشكال في C + +
كلمة التعدد يعني وجود أشكال عديدة. عادة، يحدث تعدد الأشكال عندما يكون هناك تسلسل هرمي من الطبقات وأنها تتعلق بالميراث.C + + التعدد يعني أن استدعاء دالة عضو سوف يؤدي إلى وظيفة مختلفة ليتم تنفيذها اعتمادا على نوع الكائن الذي استدعاء الدالة.
النظر في المسائل التالية المثال حيث استمدت فئة أساسية من فئات الأخرى اثنين:
# تشمل <iostream> باستخدام مساحة الأمراض المنقولة جنسيا . منطقة الطبقة منطقة الطبقة منطقة الطبقة: " << endl . عودة ( العرض * الارتفاع / 2 )؛ } }؛ // الوظيفة الرئيسية للبرنامج الباحث الرئيسي ( ) { الشكل * الشكل ، مستطيل تفصيل ( 10 ، 7 )، مثلث ثلاثي ( 10 ، 5 ؛) // تخزين عنوان مستطيل الشكل = و تفصيل ، منطقة المستطيل // المكالمة. شكل -> منطقة ()؛ // تخزين عنوان مثلث الشكل = و الثلاثية ، منطقة مثلث // المكالمة. شكل -> منطقة ()؛ العودة 0 ؛ }عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتيجة التالية:
الأم الطبقة منطقة الرئيسي الطبقة منطقةسبب الانتاج غير صحيح هو أن يتم تعيين نداء منطقة وظيفة () مرة واحدة من قبل المجمع كإصدار المحددة في الفئة الأساسية. وهذا ما يسمى قرار ثابت من استدعاء دالة، أو الربط ثابت - ثابت استدعاء دالة قبل تنفيذ البرنامج. هذا هو أيضا تسمى أحيانا الربط المبكربسبب تعيين وظيفة المنطقة () أثناء ترجمة البرنامج.
ولكن الآن، دعونا إجراء تعديل طفيف في برنامجنا وتسبق إعلان منطقة () في فئة الشكل مع الكلمة الظاهري ذلك يبدو مثل هذا:
class Shape { protected : int width , height ; public : Shape ( int a = 0 , int b = 0 ) { width = a ; height = b ; } virtual int area () { cout << "Parent منطقة الطبقة: " << endl . عودة 0 ؛ } }؛بعد هذا تعديل طفيف، عندما يتم ترجمة التعليمات البرمجية المثال السابق وأعدم، وتنتج النتيجة التالية:
مستطيل الطبقة منطقة المثلث الطبقة منطقةهذه المرة، المترجم ينظر إلى محتويات مؤشر بدلا من نوع انها. وبالتالي، منذ يتم تخزين عناوين من وجوه الثلاثي وتفصيل الطبقات في شكل * يتم استدعاء الدالة منطقة منها ().
كما ترون، كل من الفئات الطفل لديه تنفيذ منفصل للمنطقة وظيفة (). هذه هي الطريقة تعدد الأشكال ويستخدم عادة. لديك فئات مختلفة مع وظيفة من نفس الاسم، وحتى نفس المعلمات، ولكن مع تطبيقات مختلفة.
وظيفة افتراضية:
و افتراضية وظيفة هي وظيفة في الفئة الأساسية التي أعلنت باستخدام الكلمة الافتراضية . تعريف في الفئة الأساسية دالة ظاهري، مع نسخة أخرى في فئة مشتقة، إشارات إلى أن المترجم لا نريد ربط ثابت لهذه المهمة.ما نريد واختيار وظيفة ليتم استدعاؤها في أي لحظة معينة في البرنامج إلى أن يقوم على هذا النوع من الكائن الذي يطلق عليه. ويشار إلى هذا النوع من العملية باسم الربط الديناميكي ، أو الربط المتأخر .
نقية وظائف افتراضية:
فمن الممكن أن كنت تريد تضمين الدالة الظاهري في الفئة الأساسية بحيث يمكن إعادة تعريف في فئة مشتقة لتلائم الكائنات من تلك الفئة، ولكن عدم وجود تعريف معنى يمكن ان تعطي لوظيفة في القاعدة . الطبقةيمكننا تغيير وظيفة منطقة الظاهرية () في الفئة الأساسية إلى ما يلي:
الطبقة الشكل { محمية : كثافة العرض ، الارتفاع . العام : الشكل ( كثافة العمليات و = 0 ، الباحث ب = 0 ) { العرض = ل ، ارتفاع = ب . } // نقية الدالة الظاهري الظاهري كثافة المنطقة () = 0 ؛ }؛و= 0 يخبر المترجم أن الوظيفة لا يوجد لديه الجسم وفوق الدالة الظاهري سيتم تسمى الدالة الظاهري نقية .
تجريد البيانات في C + +
وتشير البيانات إلى التجريد، وتوفير المعلومات الأساسية فقط على العالم الخارجي وإخفاء التفاصيل خلفياتهم، أي لتمثيل المعلومات المطلوبة في البرنامج دون تقديم مزيد من التفاصيل.
التجريد البيانات هو البرمجة (والتصميم) التقنية التي تعتمد على الفصل بين واجهة والتنفيذ.
لنأخذ مثالا واحدا الحياة الحقيقي للتلفزيون، والتي يمكنك تشغيل وإيقاف، تغيير القناة، وضبط مستوى الصوت، وإضافة عناصر خارجية مثل مكبرات الصوت والفيديو، ومشغلات DVD، ولكن كنت لا تعرف لها الداخلية التفاصيل، وهذا هو، كنت لا تعرف كيف تستقبل الإشارات عبر الهواء أو من خلال كابل، وكيف يترجم لهم، وأخيرا يعرضها على الشاشة.
وهكذا، يمكننا القول تلفزيون يفصل بوضوح تنفيذ الداخلي من الواجهة الخارجية ل ويمكنك ان تلعب مع واجهات لها مثل زر الطاقة، قناة المغير، والتحكم في مستوى الصوت دون الحاجة الصفر المعرفة الداخلية لها.
الآن، إذا كنا نتحدث من حيث البرمجة C + +، C + + الطبقات توفر مستوى كبير من التجريد البيانات . أنها توفر الأساليب العامة كافية على العالم الخارجي للعب مع وظيفة من وجوه والتلاعب البيانات الكائن، أي دولة من دون معرفة الواقع كيف تم تنفيذ الطبقة داخليا.
على سبيل المثال، يمكن البرنامج إجراء مكالمة ل نوع () وظيفة من دون معرفة ما خوارزمية يستخدم الدالة فعلا لفرز القيم المعطاة. في الواقع، يمكن تنفيذ الكامنة وراء وظيفة فرز تتغير بين الإصدارات من المكتبة، وطالما واجهة يبقى نفسه، سوف استدعاء دالة لديك لا تزال تعمل.
في C + +، ونحن نستخدم الطبقات لتحديد أنواع البيانات المجردة الخاصة بنا (ADT ). يمكنك استخدام COUT كائن من الدرجة ostreamلعرض البيانات إلى الإخراج القياسي من هذا القبيل:
# تشمل <iostream> باستخدام مساحة الأمراض المنقولة جنسيا . كثافة العمليات الرئيسية ( ) { COUT << "مرحبا C + +" << endl ؛ العودة 0 ؛ }هنا، أنت لست بحاجة إلى أن نفهم كيف COUT يعرض النص على شاشة المستخدم. عليك أن تعرف فقط واجهة العامة وتنفيذ الكامنة وراء COUT حر في التغيير.
تسميات الوصول فرض تجريد:
في C + +، ونحن نستخدم تسميات الوصول إلى تعريف واجهة مجردة إلى الفئة. قد تحتوي فئة الصفر أو أكثر الحصول العلامات:- أعضاء محددة مع تسمية عامة يمكن الوصول إلى جميع أجزاء البرنامج. يتم تعريف الرأي تجريد البيانات من نوع من قبل أفراد الجمهور لها.
- أعضاء محددة مع تسمية خاصة هي لا يمكن الوصول إلى التعليمات البرمجية التي تستخدم الصف. أقسام خاصة تخفي من تنفيذ التعليمات البرمجية التي تستخدم نوع.
فوائد تجريد البيانات:
يوفر التجريد البيانات ميزتين هامتين:- محمية الطبقة الداخلية من أخطاء غير مقصودة على مستوى المستخدم، والتي قد الفاسدين حالة الكائن.
- قد تتطور تنفيذ الطبقة مع مرور الوقت استجابة للمتطلبات المتغيرة أو التقارير الشوائب دون الحاجة إلى تغيير في التعليمات البرمجية على مستوى المستخدم.
تجريد البيانات على سبيل المثال:
أي برنامج C + + حيث قمت بتطبيق فئة مع أعضاء القطاعين العام والخاص هو مثال من التجريد البيانات. النظر في المثال التالي:# تشمل <iostream> باستخدام مساحة الأمراض المنقولة جنسيا . الطبقة الأفعى { العام : // منشئ الأفعى ( كثافة العمليات ط = 0 ) { الإجمالية = ط ؛ } // اجهة لبالعالم الخارجي باطلا addNum ( كثافة عدد ) { الكلي + = عدد ؛ } // العالم الخارجي واجهة ل كثافة العمليات getTotal () { العودة الكل ؛ }؛ خاصة : // البيانات المخفية من العالم الخارجي كثافة العمليات الكل ؛ }؛ كثافة العمليات الرئيسية ( ) { الأفعى و . و . addNum ( 10 )، و . addNum ( 20 )، و . addNum ( 30 ). COUT << "توتال" << ل . getTotal () << endl ؛ العودة 0 ؛ }عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتيجة التالية:
إجمالي 60
الفئة المذكورة أعلاه تضيف الأرقام معا، وإرجاع المبلغ. الأعضاء العام addNum و getTotal هي واجهات للعالم الخارجي، ويحتاج المستخدم لنعرفهم استخدام فئة. عضو الخاص مجموع هو شيء أن المستخدم لا يحتاج إلى معرفة، ولكن هناك حاجة لفئة لتعمل بشكل صحيح.استراتيجية تصميم:
التجريد يفصل الشفرة في واجهة والتنفيذ. وذلك في حين تصميم مكون الخاص بك، يجب عليك أن تبقي واجهة مستقلة لتنفيذ بحيث إذا قمت بتغيير الكامنة ثم تنفيذ واجهة ستبقى على حالها.في هذه الحالة مهما برامج تستخدم هذه الواجهات، فإنها لن تتأثر، وسوف تحتاج فقط لإعادة تجميع مع أحدث التنفيذ.
الواجهات في C + + (فئات Abstract)
وتصف واجهة سلوك أو قدرات من C + + الطبقة دون الالتزام بالتنفيذ معين من تلك الفئة.يتم تنفيذ واجهات وC + + باستخدام فئات مجردة وهذه فئات مجردة لا ينبغي الخلط بينه وبين التجريد البيانات وهو مفهوم حفظ تفاصيل التنفيذ منفصلة عن البيانات المرتبطة بها.
مصنوع فئة مجردة بإعلان واحد على الأقل من وظائفها كما افتراضية خالصة وظيفة. يتم تحديد وظيفة افتراضية خالصة من خلال وضع "= 0" في بيانها على النحو التالي:
الطبقة صندوق { الجمهور : // ظيفة virtaul نقية افتراضية مزدوجة getVolume () = 0 ، الخاص : المزدوج طول . // طول مربع مزدوج اتساع ، // اتساع مربع مزدوج الارتفاع ، // ارتفاع مربع }؛الغرض من فئة مجردة (غالبا ما يشار إليها باعتبارها ABC) هو تقديم الفئة الأساسية المناسبة من الطبقات الأخرى التي يمكن أن ترث. فئات مجردة لا يمكن استخدامها لإنشاء كائنات ويخدم فقط باعتبارها واجهة . تحاول مثيل كائن من فئة مجردة يسبب خطأ تجميع.
وهكذا، إذا فئة فرعية من ABC يحتاج إلى مثيل، فقد لتنفيذ كل وظائف افتراضية، وهو ما يعني أنه يدعم واجهة التي أعلنتها ABC. الفشل في تجاوز الدالة الظاهري نقية في فئة مشتقة، ثم محاولة إنشاء كائنات من تلك الفئة، هو خطأ الترجمة.
تسمى فئات التي يمكن استخدامها لإنشاء كائنات الطبقات ملموسة .
مجردة من الدرجة مثال:
النظر في المثال التالي حيث توفر الفئة الأصل واجهة إلى الفئة الأساسية لتنفيذ دالة يسمى getArea () :# تشمل <iostream> باستخدام مساحة الأمراض المنقولة جنسيا . // الطبقة قاعدة الطبقة الشكل { العامة : // الدالة الظاهري نقية توفير واجهة framework. virtual int getArea () = 0 ; void setWidth ( int w ) { width = w ; } void setHeight ( int h ) { height = h ; } protected : int width ; int height ; }; // مشتقة classes class Rectangle : public Shape { public : int getArea () { return ( width * height ); } }; class Triangle : public Shape { public : int getArea () { return ( width * height )/ 2 ; } }; كثافة العمليات الرئيسية ( الفراغ ) { مستطيل مصحح ، مثلث ثلاثي . مصحح . setWidth ( 5 )، مصحح . setHeight ( 7 ). // طباعة مجال الكائن. COUT << "منطقة إجمالي مستطيل:" << مصحح . getArea () << endl ؛ ثلاثي . setWidth ( 5 )، تري . setHeight ( 7 ). // طباعة مجال الكائن. COUT << "منطقة المثلث إجمالي:" << تري . getArea () << endl ؛ العودة 0 ؛ }عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتيجة التالية:
إجمالي مستطيل مساحة : 35 إجمالي المثلث مساحة : 17يمكنك ان ترى كيف يمكن لفئة مجردة محددة واجهة من حيث getArea () واثنين من فئات أخرى تنفذ نفس الوظيفة ولكن مع خوارزمية مختلفة لحساب مساحة محددة الشكل.
استراتيجية تصميم:
نظام وجوه المنحى قد تستخدم قاعدة مجردة الفئة لتوفير الاقتضاء واجهة مشتركة وموحدة لجميع التطبيقات الخارجية. ثم، عن طريق الوراثة من تلك الفئة قاعدة مجردة، وتشكل الفئات المشتقة أن تعمل جميع بالمثل.قدرات (أي وظائف عامة) يتم توفيرها التي تقدمها التطبيقات الخارجية وظائف افتراضية خالصة في فئة قاعدة مجردة. يتم توفير تطبيقات هذه الوظائف الافتراضية النقية في الفئات المشتقة التي تتوافق مع أنواع معينة من التطبيق.
يسمح هذا الهيكل أيضا تطبيقات جديدة لتضاف إلى نظام بسهولة، حتى بعد أن تم تعريف النظام.