TGViewer
Software Philosophy Software Philosophy @softwarephilosophy · 3.48K subscribers
Post #2207 3.34K
وراثت یا ترکیب Inheritance vs Composition، مسئله این است!

درک Inheritance
وراثت مفهومی اساسی در برنامه نویسی شی گرا (OOP) است که راهی برای ایجاد کلاس‌های جدید از کلاس‌های موجود است. وراثت زمانی مفید است که بخواهیم یک رابطه "is-a" بین کلاس‌ها را مدل کنیم. به عنوان مثال، یک کلاس Dog می‌تواند از یک کلاس Animal ارث ببرد، زیرا سگ یک حیوان است.

زمان استفاده و عدم استفاده از Inheritance
زمانی که می‌خواهید یک رابطه "is-a" را مدل کنید، از وراثت استفاده کنید. به عنوان مثال، سگ نوعی خاص از حیوانات است. در چنین مواردی، وراثت می‌تواند منجر به کد پاک و شهودی شود. با این حال، معایبی نیز دارد. یکی از این معایب این است که وراثت یک رابطه محکم بین کلاس‌ها ایجاد می‌کند، به این معنی که هر تغییری در کلاس والد می‌تواند بر کلاس‌های فرزند تأثیر بگذارد.

اشکال دیگر این است که Inheritance می‌تواند منجر به تعمیم بیش از حد و سردرگمی شود. به عنوان مثال، اگر بخواهیم یک کلاس Bird ایجاد کنیم که از Animal ارث می‌برد، چه می‌شود؟ آیا باید روش‌های خوردن و خوابیدن را نیز به ارث ببریم؟ اگر بخواهیم یک کلاس پنگوئن بسازیم که از Bird به ارث می‌برد چه؟ آیا باید متد Fly را هم به ارث ببریم؟

درک Compositin
ترکیب یکی دیگر از مفاهیم OOP است که در آن یک کلاس با ترکیب چندین شی از کلاس‌های دیگر ساخته می‌شود. ترکیب بندی بر اساس ایده رابطه "has-a" بین طبقات است. به عنوان مثال، یک کلاس Car دارای یک کلاس Engine، یک کلاس Wheel، یک کلاس Door و غیره. Composition زمانی مفید است که بخواهیم اشیاء پیچیده‌ای را که از اشیاء ساده‌تری تشکیل شده‌اند مدل‌سازی کنیم.

زمان استفاده و عدم استفاده از Composition
ترکیب روشی انعطاف‌پذیر برای ایجاد کلاس‌های جدید از کلاس‌های موجود است، زمانی که می‌خواهید یک رابطه "has-a" را مدل کنید از ترکیب استفاده کنید. با این حال، معایبی نیز دارد. یکی از از این معایب این است که ترکیب می تواند منجر به تکرار کد و پیچیدگی شود.

به عنوان مثال، اگر بخواهیم یک کلاس Truck ایجاد کنیم که مشابه کلاس Car باشد، اما چرخ‌های بیشتری داشته باشد و موتور متفاوتی داشته باشد چه؟ آیا باید کد را از کلاس Car کپی و پیست کنیم و آن را اصلاح کنیم؟ اگر بخواهیم یک کلاس موتور سیکلت ایجاد کنیم که فقط دو چرخ و یک موتور متفاوت داشته باشد، چه؟ آیا باید یک کلاس جدید از ابتدا ایجاد کنیم؟

🔗 نسخه کامل مقاله به همراه نمونه کد را میتوانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

______
DEV Community Inheritance or Composition, that is the question. In this article, I want to explore the differences between two common object-oriented programming...
  • 👍 24
  • ❤ 1
More from @softwarephilosophy
  1. Sep 27, 2026نگو JEV بگو System One! دنیل کانمن (Daniel Kahneman) توی کتاب معروفش «تفکر، سریع و کند» (T…
  2. Sep 23, 2026بازنویسی کل GitHub Copilot Runtime با Rust 🔶 حدود ۱۲۰،۰۰۰ دلار هزینه توکن و سه هفته وقت ی…
  3. Sep 15, 2026ورک‌شاپ «AI Agents in C# (MAF)» در این ورک‌شاپ به بررسی امکانات جدید برنامه‌نویسی با کتابخ…
  4. Sep 12, 2026کد مدریت شده (Managed Code) در دات‌نت یعنی چی؟ ▫️به زبان ساده: کد مدریت شده (Managed Code)…
  5. Sep 5, 2026آشنایی با Attributeها در سی‌شارپ در سی شارپ، Attributeها برای اضافه کردن metadata یا اطلاع…
  6. Aug 25, 2026اگر در دات نت Agent، MCP Server یا ابزارهای مبتنی بر هوش مصنوعی توسعه میدهی، این پروژه میت…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →