---
title: "استبدال الوراثة بالتفويض"
type: "refactoring-technique"
slug: "replace-inheritance-with-delegation"
url: "http://localhost:3000/ar/replace-inheritance-with-delegation.md"
category: "التعامل مع التعميم"
description: "المشكلة: لديك فئة فرعية تستخدم جزءًا فقط من دوال فئتها الفائقة (أو لا يمكنها وراثة بيانات الفئة الفائقة). الحل: قم بإنشاء حقل وضع فيه كائن الفئة الفائقة، وفوّض الدوال إلى كائن الفئة الفائقة، وتخلص من الوراثة."
---
# استبدال الوراثة بالتفويض

> المشكلة: لديك فئة فرعية تستخدم جزءًا فقط من دوال فئتها الفائقة (أو لا يمكنها وراثة بيانات الفئة الفائقة). الحل: قم بإنشاء حقل وضع فيه كائن الفئة الفائقة، وفوّض الدوال إلى كائن الفئة الفائقة، وتخلص من الوراثة.

## المشكلة

لديك فئة فرعية تستخدم جزءًا فقط من دوال فئتها الفائقة (أو لا يمكنها وراثة بيانات الفئة الفائقة).

## الحل

قم بإنشاء حقل وضع فيه كائن الفئة الفائقة، وفوّض الدوال إلى كائن الفئة الفائقة، وتخلص من الوراثة.

## لماذا نقوم بإعادة الهيكلة

يمكن أن يؤدي استبدال الوراثة بالتركيب (composition) إلى تحسين تصميم الفئة بشكل كبير إذا كان:

* الفئة الفرعية الخاصة بك تنتهك _مبدأ لiskov للاستبدال_، أي إذا تم تنفيذ الوراثة فقط لدمج الكود المشترك وليس لأن الفئة الفرعية هي امتداد للفئة الفائقة.
* الفئة الفرعية تستخدم جزءًا فقط من دوال الفئة الفائقة. في هذه الحالة، فالمسألة مسألة وقت فقط قبل أن يقوم شخص ما باستدعاء دالة في الفئة الفائقة لم يكن من المفترض استدعاؤها.

في جوهرها، تقوم تقنية إعادة الهيكلة هذه بتقسيم الفئتين وتجعل الفئة الفائقة مساعدة للفئة الفرعية وليست أبًا لها. وبدلاً من وراثة جميع دوال الفئة الفائقة، ستكون لدى الفئة الفرعية فقط الدوال اللازمة للتفويض إلى دوال كائن الفئة الفائقة.

## الفوائد

* لا تحتوي الفئة على أي دوال غير ضرورية موروثة من الفئة الفائقة.
* يمكن وضع كائنات مختلفة بتطبيقات مختلفة في حقل التفويض. وبذلك تحصل على نمط تصميم [الاستراتيجية](/design-patterns/strategy).

## كيفية إعادة الهيكلة

1. أنشئ حقلًا في الفئة الفرعية للاحتفاظ بالفئة الفائقة. في المرحلة الأولية، ضع الكائن الحالي فيه.
2. قم بتغيير دوال الفئة الفرعية بحيث تستخدم كائن الفئة الفائقة بدلاً من `this`.
3. بالنسبة للدوال الموروثة من الفئة الفائقة والتي يتم استدعاؤها في كود العميل، أنشئ دوال تفويض بسيطة في الفئة الفرعية.
4. أزل تصريح الوراثة من الفئة الفرعية.
5. قم بتغيير كود تهيئة الحقل الذي يتم تخزين الفئة الفائقة السابقة فيه عن طريق إنشاء كائن جديد.
## Relations

**Opposite refactorings**

- [استبدال التفويض بالوراثة](/ar/replace-delegation-with-inheritance.md)

