چکیدهای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرمافزار.
معماری نوین نرمافزار، تکنولوژیهای برنامه نویسی جدید
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
______
درک 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
______
- 👍 24
- ❤ 1