💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۱۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ Hossein Ranjbari
رعایت best practice برای کلاس‌هایی با متدهایی بیشتر نسب به کلاس والد/پدر
سپهر نامدار حل شده توسط سپهر نامدار

سلام وقتتون بخیر.

توی سوال قبل که با عنوان "راه درست ساخت شی" پرسیده شده بود به این اشاره شد که best practice ما این هست که سمت چپ ساخت شی٬ کلاس ابسترکت باشه. و خب برای کلاس موتور که متد اضافه‌ای به غیر از خود متدهای کلاس والد/پدر نداشت مشکلی نداشتیم. ولی این مورد برای کلاسی مثل کلاس ماشین که دارای متدهای بیشتری نسب به کلاس والد خودش هست مانند باز کردن در و بستن در ماشین به مشکل می‌خوریم. و خود intelliJ Idea بهمون پیشنهاد می‌ده که یا اون شی رو در هنگام کار با اون متد cast کنیم به کلاس ماشین یا پیاده سازیشون کنم در کلاس پدر به عنوان ابسترکت متد و خب هر کدوم از اینها مشکلات خودشون رو داره. راه حل چیه؟ اینکه بیایم و از اول سمت چپ ساختن شی رو هم همون کلاس مرتبط بذاریم یا اینکه مورد دیگه؟Screenshot-from-2023-10-28-15-08-35-4QYm.pngScreenshot-from-2023-10-28-15-08-50-xmeO.png
سوال دومم هم این هست که وقتی این ارور پیش اومد توی تست‌هام با اینکه کلاس تست موتورم باید درست کار می‌کرد وقتی به تنهایی فقط اون رو اجرا می‌کردم ولی intelliJ Idea می‌اومد و کلاس تست ماشین رو هم اجرا می‌کرد. و خب این برام عجیبه وقتی که ما فقط می‌خوایم از درست بودن یک بخش کدمون مطمئن بشیم لازم داریم که حتما همه بخش‌های کدمون درست کار کنن؟!Screenshot-from-2023-10-28-15-09-42-I72I.png

سلام حسین جان،

در مورد سوال اول اگر کست کنی فکر کنم حتی کدت کار نکنه و رآه درستی نیست.

میتونی سمت چپ از تایپ سمت راست استفاده کنی که اینم خوب نیست.

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

کار دیگه ای که میونی بکنی اینه که یک کلاس مادر اضافی ایجاد کنی اما انجام این کار باعث میشه تعداد لآیه‌های وراثت زیاد بشن و خوندن کد سخت بشه.

اینجاست که یه اصل جدید وآرد کار میشه به نام composition over inheritance که میاد میگه به جای وراثت بیام به اشیایی که دآریم رفتار ابسترکت اضافه کنیم با استفاده از اینترفیس.

اینجوری هر رفتاری بخوایم میتونیم به کلاس اضافه کنیم و کلاس اونها رو ایمپلمنت کنه.

 

در مورد سوال دوم باید تمام تست‌ها با هم اجرا بشه چون معلوم نیست تغییر کد شما جای دیگه کد رو خراب نکرده باشه.

 

سوال دیگه یا نایز به توضیح بیشتر بوددر خدمتم. 

بهترین پاسخ
سپهر نامدار ۰۶ آبان ۱۴۰۲، ۱۲:۱۵