جلسه هشتم >> ساخت ساعت مجازی ، استفاده از تایمر و تایمر تسک و ادامه پروژه

چیز خیلی مهمی که توی ویرچوال کلاک یاد گرفتیم این بود که ioc2 بود که در موردش حرف زدیم .هدف ما این بود که بیایم و یه سیستمی داشته باشیم که یه گذر گاه عمومی داشته باشه که من بتونم کار های مختلفی رو بهش ریجستر کنم و توی زمان های خاصی بیاد و برای من اجراشون کنه این چیزی بود که جلسه قبلی اومدیم و انجامش دادیم . اومدم براش ویرچوال کلاک تعریف کردم . ویرچوال کلاکم رو ریجستر میکنه یه تسکی رو توی لحظه ده علی .و توی لحظه بیست رضا و . . .خب حالت های مختلفه دیگه وقتی که این استارت میزنمبا دوره های زمانی هزار میلی ثانیه ای . یعنی اگه اون بالایی ده هست یعنی ده تا از این هزار میلی ثانیه ها (که میشه یک ثانیه ) یعنی در اصل ده ثانیه طول میکشه که یه ایمیل به علی بفرسته .خب نکات خیلی مهمی که داشت رو یک بار دگیه بهتون میگم . که کامل براتون جا بیتفه .یکی اینکه من گذرگاهم یک مرحله عمومی تر بود یعنی اینکه بجای اینکهاگه بجای اون تسک ، سند ایمیل رو میذاشتم چه مشکلی پیش میامد ؟فقط سند ایمیل رو میپذیرفت و به بقیشان ارور میداد همان طور که در عکس پایین میبینین که قرمز شده :چرا چون اصلا نمیشناسه که سورت فایل چه ربطی به سند ایمیل داره اصلا اونا رو نمیشناسه و بهم ارور میده ولی خب از اونجایی که من میخوام عمومی سازی داشته باشم و کلاس هام یه جوری باشن ک تا حد ممکن بتونم ازشون استفاده کنم خب این کلاس رو باید یه خورده تغییرش بدم که عمومی تر بشه ورودیش . یعنی درگاه ورودیش رو یه مرحله میخوام عمومی ترش کنم .خب این یه مرحله عمومی ترش کردن من چی گرفتم برای عمومی کردن : حذف وابستگی از یه نوع داده خاص و وابسته کردنش به یه نوع داده عمومی تر به همین سادگی حالا این نوع داده عمومی چیه ؟ همون ارث بری هستش یه سوپر کلاسیعنی اگه یه سوپر کلاس داشته باشم کاگه بیام ورودی مان رو بر اساس سوپر کلاس تعریف کنم همه فرزند هاش رو می پذیره ولی خب ممکنه سوال پیش بیاد خب این تسک های مختلف کار دارهو این کاری که اینجا وجود داره اصلا به درد من نمیخوره تا زمانی که وارد حالت خاص نشم .شما یه تسک رو بگو که کار داشته باشه کدومتون میتونین بگین یه تسک رو که کار داشته باشه خود تسک ها . . وقتی ازتون میپرسم یه تسکی رو بگین که کار داشته باشه یعنی یه تسکی رو بگین که بتونه اجرا شه و کاری رو انجام بده چی میاد تو ذهنتون؟ سریع زیر مجموعه اش میاد تو ذهنتونوظیفه رو به عنوان یه مفهوم انتزاعی میبیند شما خب این وظیفه است من به شما میگم این وظیفه رو انجام بده چه سوالی از من میپرسید؟ سریع میپرسید که کدوم وظیفه ؟ من باید تعریف کنم بگم وظیفه ارسال کردن ایمیل ها وقتی این رو برات تعریف کردم حالا میدونی که چکاری باید انجام بدی میری تو قسمت انجام کارش میگی این ادرس ایمیلش هستش این سرویس ایمیلشه از طریق این سرویس این ایمیل رو به این ادرس ارسال کن درسته ؟ مثل همون شیپ افرین . برای شیپ چیکار میکنیم ؟ برای شیپ هم دقیقا همین داستان رو داریم من بهتون میگم یه شکلی رو بکشید . کدومتون میتونه شیپ رو بکشه هیچ کدومتون نمیتونیند شیپ ( شکل بکشید ) سریع ازم میپرسید که چه شکلی رو بکشم؟ یعنی شما زیر مجموعه میخواین بهتون میگن دایره بکشین بعد حالا که میگم دایره بکشین همتون بلدین کار دایره کشیدن چطوریه و میاین میکشین میگم مساحت شکل رو حساب کن میگی چه شکلی ؟ میگم دایره و چون میدونی دایره چیه پس الان میدونی مساحت دایره رو چطوری حساب کنی پس اینجا یه سری چیز ها هستن که خودشون کاری ندارن زیرمجموعه هاشون در واقع عملیاتی هستن برای من .خب اینجا الان من دقیقا همچنین داستانی دارماین جا اومدم ارث بری انجام دادم سوالی که ممکنه برتون پیش بیاد اینه خب همین ویژگی ها رو بذارم داخل این تسک و مشکلی هم نبود درسته مشکلی نبود تا زمانی که فقط میخواستم از سند ایمیل استفاده کنماما وقتی که میخوام این رو بفرستم داخل یه تابع یک ابزاری و اون ابزار کاری رو برام انجام بده دو تا کار میتونم انجام بدم یا ابزار باید خصوصی باشه یا ابزار باید عمومی باشه اگر ابزار خصوصی باشه فقط همون کلاس رو میتونه برام کار روش انجام بده اما اگه ابزارم عمومی باشه میتونم باهاش کار های مختلفی رو انجام بدم مثل چی میمونه مثل اچار فرانسه مثلا شما اچار های خصوصی برای مدل پیچ های خاص دارین دیگه اونا خاص همون یه کار هستن تو نمیتونی اونی که برای 2 هستش برای 5 استفاده کنی . اما اچار فرانسه عمومیه تو میتونی تعمیمش کنی و برای هر پیچی که میخوای ازش استفاده کنیفرق ابزار عمومی با ابزار خاص همینه من یه جاهایی یه سری کلاس های خاص دارم و یه جاهایی کلاس هایی دارم ک باهاشون میخوام با این کلاس های خاصم کاری انجام بدم اون کلاس هایی که میخوام باهاش با کلاس های خاصم کاری انجام بدماین خیلی خیلی مهمه دو قسمت داریم یک قسمت مون مدل های اصلیمونن که قراره بیس کار ما رو در نظر بگیرن و یه سری کلاس هم داریم مدل های ابزارمون هستن هستند که قراره مدل های اصلیمون رو دستکاریشون کنن باهاشون یه سری کار ها انجام بدن مدیریت کنن و از این مدل چیز ها . خب اون کلاسی که میخواد با این ها کار کنه هر چقدر عمومی تر باشه برای من بهتره اللبته در صورت امکان برای من بهتره چون میتونم محدوده کلاس های بیشتری رو پوشش بدم و نیازی نیست کلاسی رو از اول بنویسم و این مسئله وظیفه اش رو چیکار کردیم ؟ مسئله وظیفه اش رو هم اینطوری حل کردیم که داخل جاوا یه چیزی داریم به اسم اوور راید کردن رو نویسی کردن رو نویسی کردن یعنی چی رو نویسی به این معنا نیست کههمین جا رو نویسی شده ها اا به این معنی هست که وقتتی بیای داخل یه نوع داده داخل سوپر کلاسش قرارش بدی رو نویسی میشهیعنی اینطوری اگه بنویسیش وقتی این رو تعریفش میکنی این سند ایمیل تو یه سری ویژگی خودش داره یه سری ویژگی هم از سوپر کلاسش به ارث میبره علاوه بر یه سری ویژگی یه سری رفتار هم داره به ارث میبره این رفتار ها یه تابعی هست به اسم ران این تابع ران رو هم به ارث میبره وقتی که من میام این رو مینویسمبه این معنیه که این ران رو به جای اونی که داره به ارث میبره رو نویسی کن و زمانی که من بیام و این کار رو انجام بدماین باعث میشه اورراید شده داخلش قرار بگیرهو کاری به این ران نداره و اوور رایدش میکنه این قابلیت های زیادی برای من داره چرا چون وقتی وارد یه محیط عمومیش میکنم و اصطلاحا اینجکتش میکنم داخل این محیط چه اتفاقی میفته ؟کاراشون رو نویسی شده پس کار های متفاوتی رو برای من اجرا میکنه .دو تا بالایی متد هستن ولی پایینی متغیر هست و از نیو به بعد رو مقدارش در نظر میگیریم . تسکش چیکار میکنه؟میگه اولا بیا کلاک رو چاپ کن بعدشم گفتم اگر اون هش مپه این کلاک رو داره ( هش مپمون رو میتونستیم با اندیس های نامنظم مقدار دهیش کنیم )این کلاکه نشون میده ببین این اندیسه توش هست یعنی اینکه یه کاری اینجا وجود داره یعنی یهه کاری داخل اون هش مپ ریجستر شده اون زمان اون کاره رو که قرار داره رو رانش کن و ران که میشه میاد و این رو در نظر میگیرهاما چون ران رو نویسی شده در ساب کلاس هاش اور راید شده ها رو میاد و اجرا میکنه برای من . و من این رو داخل این تایمر تسک قرارش دادم .خب این تا اینجا حالا یه سری مشکلات داریمیکیش اینهاگه من در خط 28 این رو بنویسم اگه این اتفاق بیفته چی میشه ؟ میگه تسک رو ریجستر کن توی 19 خب تسک رو ریجستر کن یعنی چی ؟ تسک که هیچی نداره تسک که هیچی نداره . وقتی میگم بیا یک کاری رو انجام بده ازم میپرسی چ کاری درسته ؟خب الان این چیو میخواد برای من انجام بده داره میاد که یه متد خالی رو اجرا کنه پس یه مشکلی اینجا هست داره یه چیز بی خودی که اصلا وجود نداره رو اجرا کنه این یه مشکل پس راه حلش چیه ؟ راه حل اینه که نباید بتونیم از این نمونه سازی کنیم . پس این مشکل و نکته اول .خب مثلا یه تسک تماس گرفتن میخوام بنویسم بعد میام داخلش میگمخب باید از تسک ارث بری که چرا ؟ چون گذرگاهم تسکه برای اینکه یه چیزی رو ریجستتر کنم باید حتما تسک باشه خب این میگه حالا که تسکه باید حتما کانستراکتور حتما داشته باشه ممکه کاری چیزی پیش بیاد یادم بره این رو کنترلش کنم یا یه چیز دگیه من این رو به صورت کتاب خونه تعریف کردم ویرچوال و اینا رو و این رو یه نفر دیگه داره ازش استفاده میکنه و تو اینترنت گذاشتم و اومدن و پول دادن خریدن و خیلی چیز های پیچیده و پیشرفته است که واقعا کار میکنه و یعنی باید بیاد تسک های مختلف رو اججرا کنه واقعا و نوشتیمش گذاشتیم تو اینترنت خریدن و حالا خودش میخواد توسعه اش بده و میگه میخوام یه تسک دیگه خودم اضافه کنم بعد میاد و این رو مینویسهخط 31اجرا میشه و انگار هیچ مشکلی هم نداره و هیچ اروری هم نداره اما مشکلش کجاست کال تسک وظیفه فاش رو خودش انجام نداده این یعنی چی ؟این یعنی چی به نظرتون بچه هااین دو تا مشکل یعنی چی دقیقا ؟ یعنی در واقع کال تسک انجام میشه اما چون خودش کاری نداره پس چیزی هم اور راید نکرده پس میاد همین وظیفه این رو انجام میده که خالیهحالا این دو تا مسئله با هم دیگه تو این سیستم چه چیزی رو دارن به من میگن ؟ کسی میتونه بهم بگه ؟ چه مفهومی رو میخوان به من بگن ؟ عدم مهندسی هستش اما از چی داره میاد ؟ همون مسئله اساسی و بنیادی ای که همیشه داشتیم مسئله ابهام . چرا ابهام داره ؟ چرا این الان ابهام داره بچه ها ؟ بخاطر اینکه من نمیدونم مطمئن نیستم هیچ اطمینانی ندارم هیچ اطمینان خاطری از این ندارم که صد در صد تسک هایی که در ویرچوال کلاک ریجستر میشن وظیفه خودشون رو دارن به من ربطی نداره که وظیفه خودشون رو دارن درست انجام میدن یا ن فقط این برای من مهم هستش که وظیفه خودشون رو تعریف کردن حالا میخاد اشتباه باشه به من ربطی نداره سیستم من درسته اون داره اشتباه انجام میده ااون وظیفه ای که براش در نظر گرفته شده حالا میخاد اشتباه باشه یا نباشه به من ربطی نداره اما من ابهام دارم الان فرض کن اومدم پایین تر همه جا دارم کد مینویسم یا اینکه مثلا صد تا کلاس نوشتم اومدم تو دو تا کلاس دیگه از ویزوال کلاکه استفاده کنم دوباره میتتونم اطمینان داشته باشم وقتی مینوسم ویژوال کلاک و مثلا میام بگم استارت کنممیتونم اطمینان داشته باشم که ایا همه اون تسک هایی که براش ریجستر شدن تسک خودشون رو دارن ؟ ن نمی تونم مبهمه چون یه سری از کلاس ها اینجا وجود دارن که وظیفه خودشون رو نیومدن پیاده سازی کنن یا اینکه یه سری هاشون اشتباه ان مثل این :گفته تسک اصن تسک چیه ؟ ! بیا تسک رو اجرا کن یعنی چی نباید من مشخص کنم چه تسکی ؟! این دو تا مسئله اساسی اینجا وجود داره که باعث میشه نیاز خیلی خیلی اساسی میشه برای من و اون نیاز چیه؟ نیاز به ایجاد قوانین درسته که تسک میپذیره ویرچوال کلاک اما من میخوام یه سری قانون هم براش بذارم دیگه هر کی به هر کی هم نباشه که هرچی خواستی بذاری یه سری چیز ها رو باید رعایت کنی که من بپذیرمت میگم باید اولا از نوع تسک باشی اون از گذر گاه عمومیت حالا این گذر گاه عمومی رو میخوام یه خورده خاصش کنم یه خورده بسته ترش کنم که دیگه خیلی هم به این حالت عمومی نباشه یه سری جا ها من نیاز دارم اون طوری باشه به این معنی نیست که الان صد در صد باید از همین استفاده کنمبسته به نیازم توش شرایط مختلف الان تو این حالت من نیاز دارم تسک هایی که تو ویرچوال کللاک ریجستر میشن معتبر باشن ن هر تسکی باشه اعتبار تسک هام رو چطوری تعریف میکنم برای اینکه معتبر باشه باید چی باشه به نظر شما ؟ شما این رو به من بگین دو تا چیز باید رعایت بشه پسورد نباید داشته باشه قانون باید داشته باشه عمومی باید باشه اما ن خیلی عمومی من میخوام یه خورده محدودش کنم الان برای اینکه این شرایط رو بهترش کنم دو تا کار باید انجام بدم اولا نباید بذارم از تسکی که معنی خاصی نداره بیاد داخللشاین یک یعنی از سوپر کلاس اصلا نباید کسی بتونه نمونه بسازه و یکی دیگه این که من باید تمام کلاس هایی که میخوان ریجستر بشن داخل ویرچوال کلاس رو مجبور کنم که وظیفه خودشون رو پیاده سازی کنن ما به این میگیم تسک معتبر ممکنه برای اینکه یه تسکی رو معتبر تعریف کنیم خیلی چیز های دیگه هم براش در نظر بگیریم الان برای این مثال سر این کلاس من این مدلی تعریفش می کنم میگم تسکی معتبره که اولا از سوپر کلاس من نتونم نمونه سازی کنم ( یعنی باید سابکلاس باشه )و دو اینکه حتما متد ران خودش رو داشته باشه چطوری میتونم این کار رو انجام بدم خیلی ساده با رعایت کردن چیزی که توی دنیای واقعی مون وجود دارهمفهوم انتزاع ما توی دنیای واقعیمون برای شکلمون برای وظیفه یا اینجورچیزا انتزاع داریم مفهوم داریم مفهوم انتزاعی داریم واقعی نیستند تو هیچ شکلی رو نمیتونی بکشی هیچ تسکی رو نمیتونی انجام بدی مگر اینکه ساب کلاس بشه منم خب همین رو ساده میام اینجام میگم .میگم ابسترکت کلاس تسکبه محض اینکه این رو اینجا اضافه کنم دیگه نمیذاره من از تسک نمونه بسازم میگه این یه مفهوم انتزاعیه تو داری از یه مفهوم انتزاعی نمونه میسازی مگه یه همچین چیزی هست میگه تسک ابسترکته نمی تونی ازش نموننه بسازی همیناین برای قسمت اول رو برام حل میکنهمورد بعدی اینه که تمام سابکلاس هایی که دارن از تسک ارث میبرن رو مجبورشون کنم که حتما متد ران خودشون رو داشته باشن یعنی بسته ترش میکنم یعنی این گذرگاهه تسک باشهاما حتما سابکلاس های تسک باشن خودش نمی تونه باشه و حتما متد ران داشته باشن متد ران خاص خودشون رو داشته باشن من این دو تا شرط رو براش گذاشتم اول تو حالت اولی ما گفتیم تسکه دیگه همین عمومیش کردیم حالا میگم درسته که عمومیه اما یه خورده بسته اش کنیم دیگه خیلی هر کی به هر کیه چطوری ؟گفتتم اولا باید حتما سابکلاس ها رو بپذیری خودت رو نمیتونی بپذیری و دومی اینکه متد ران خودش رو داشته باشه چطوری این اجبار رو انجام بدم ؟خیلی ساده کافیه برای حالت اوللش بنویسم ابسترکتوقتی ابسترکت رو بنویسم برای تسک دیگه هیچ کی نمی تونه از تسک نمونه بسازهمیتونی متغیر ادرس حافظه بنویسی اما نمونه اش رو بنویسی مثل عکس بالا بهت ارور میده اروری که بهت میده اینه که این تسکه ابسترکت هستش و نمی تونی ازش نمونه بسازی ولی میتونی توی این تسک سابکللاس هاش رو قرار بدیمیتونی سابکلاس ایمیل رو توش نمونه سازی کنی و چیز هایی ک هست برای مقدار دهیش .پس این مسئله اولی برامون حل شد . مسئله دومم مشکلی از لحاظ نمونه سازی نداره چون که سابکلاس هستش دیگه میتونم ازش استفاده مکنم نمن الان باید بیام هر کللاسی که از تسک ارث میبره رو مجبور کنم متد ران خودش رو اور راید کنه ( رونویسی کنه ) متدش رو بیاد اوور راید بنویسه چطوری باید این کار رو انجام بدم خیلی سادهکافیه بیام اینجا و بدنه ران رو حذف کنم و تهش یه سمیکالن بذارم و یه ابسترکت هم اینجا بذارم به این صورت :الان اینجا کال تسک پیاده سازیش نکرده سند ایمیلل پیاده سازیش کرده پس مشکلی نداره سورت فایل هم پیاده سازیش کرده مشکلی نداره اما کال تسک حتما حتما باید ران رو داشته باشه که اگر نداشته باشیش ارور بهت میده اصلا اجازه کامپایل بهت نمیده که تو بتونی ریجسترش کنی اینجا داره بهت ارور میدهچیکار کنیم که ارور نده؟باید پیاده سازیش کنیم یا موس رو اونجا نگه میداریم اینپلمنت متد رو میزنیم یا اینکه دستی می تونیم بنویسیمش فرقی ندارهاین رو بزنم میگه کدوم رو میخوای میگم ران و اون رو برای من اور راید کنو دیگه ارور ما بر طرف میشه و اگه حذفش کنیم دوباره بهمون ارور میده باید حتما این رو داشته باشیم از اجبار دارم حرف میزنمکال تسک میگه اگه تو میخوای تتسک باشی قوانین تسک بودن رو رعایت کن فقط این نیست که یه چیز رو به ارث ببری باید خودت بیای ران ام رو پیاده سازی کنی پس من الان این مشکل دوم ام رو هم حل کردمالان من صد در صد مطمئنم که تمام چیزایی که داخل ویرچوال کلاک ریجسترشون میکنم حتما حتماچی دار ن؟ قوانین رو رعایت کردن اولا خود سوپر کلاسم نیست و دوما صد در صد شون متد ران خودشون رو دارن حالا اینکه میای داخل اون ران اشتباه مینویسی به من ربطی نداره مهم اینه مسئله من درسته و ابهامی ندارهدر قسمت سمت چپ شکل کلاسش هم عوض شدهاینایی که اینجا تعریف کردیم اینطوری شده ابسترکت رو که براش مینویسم سبز رنگ میشه و یه آی توش می نویسه این آیه چیه ؟ این ای به معنی اینترفیسه در واقع این ای که نوشته در واقع به معنی ایمپلمنت شدنه که این ایمپلمنت شدنه در واقع به معنی همون اینترفیس بودنه اینتر فیس چیه ؟ جلو تر کامل تر در موردش حرف میزنیم در واقع یه واسط هستش که جلو تر درباره اش حرف میزنیم و کاری به واسط بودن و این طور چیزا نداشته باشیم . فعلا این طوری در نظرش میگیریم که :میگیم : که این یه قانونه که باید همه سابکلاس ها رعایتش کنن یا به عبارت دیگه بهش میگیم پروتوکول یه قرار داد میگه هر کسی تسک باشه باید بیاد این رو خودش پیاده سازی کنه این قانونه منه در غیر این صورت تو تسک نیستی مثل این می مونه میگیم هر کسی دانشجو باشه باید مثلا فرض کن مدرک دبیرستان رو داشته باشه کنکورش رو بده و دانشگاه رو ثبت نام کرده باشه در اون صورت اگه ثبت نام کنی بهت میگیم دانشجویی قوانین در نظر گرفتیم حالا اینجا هم همینه میگیم کال تسک تو تسکی یه سری ویژگی به ارث میبری و این قوانین رو باید رعایت کنی در این صورت تو تسکی در غیر این صورت نیستی و نمیتونی ریجستر بشی این میشه ioc2.2 چرا دو دو ؟چون همون ارث بری اس فقط یه خورده قوانین روش تعریف میشه اونی که حالت ساده اش بود رو دیگگه بهش نمیگیم دو بهش میگیم ioc2.1کلی چیز های مختلف توی جاوا هست که این طوری هستن مثلا فرض کنین من اینجا بنویسم مثلا ابسترکتاینو که مینویسم کلی کلاس ابسترکت در داخل خود جاوا برای من میاره همین کلاس ابسترکته کلی کلاس های ابسترکت که در داخل خود جاوا هستند .یوتیلیتی باید ابسترکت باشه یا نباشه؟ یوتیلیتی به نمونه هاش نیاز ندارم من نمونه هایش رو اصلا نمیخوام این همون ارری لیستس که تبدیلش کردم به کانتینر که اینجا مثلا اسمش یوتتیلیتی هستش نیازی ندارم نمونه ازش بسازم اما نباید ابسترکت باشهیه روش دیگه هم داریم که جلوی نمونه سازی رو بگیرم نمیخوام ذهنتونو الان درگیرش کنیم به همین علت کاری بهش نداریمحالا میخوام یه چیز دیگه ای هم بهتون بگم یه جاهایی هستن که من از یه کلاس یک بار میخوام نمونه بسازم یه بع تعداد خیلی کمجلسات قبل درمورد استاتیک صحبت کردیم که بهتون گفتم یه سری کلاس ها هستن که استیت دارن اونایی که استیت دارن من نیاز دارم نمونه ازشون بسازم اونایی که استیت ندارن نیازی ندارم پس میام اونا رو استاتیک تعریف میکنم راحت و خیلی هم عالی ولی اونایی که استیت دارن میام ازشون نمونه میسازم البته این بع این معنی نیست که هرچیزی که استیت نداره من باید فرضا استاتیک تعریفش کنم بسته به نیازم تو شرایط مختلف معمولا یوتیلیتی ها رو این مدلی تعریف میکنیم حالا جلو تر بیشتر در موردش حرف میزنیم .این دو تا حالت هست یکی اینکه من نیازی ندارم نمونه بسازم یکی اینکه نیاز دارم نمونه بسازم اونی که نیاز نداشتم نمونه بسازم رو میتونیم استاتیک در نظر بگیریم اونی هم که نیاز دارم میتونیم قوانینی مثل ابسترکت رو روش اعمال کنیم .حالا یه حالت وسطی هم هست که برای یه کاربرد خاص یکی دو تا نمونه ازش بسازم توی همون برنامه ام نیاز دارم یه لحظه یه نمونه ازش بسازم از یه کلاسی مثلا سفره یک بار مصرف یه بار در میاری ازش استفاده میکنی یه تیکه میبری استفاده میکنی و دور میندازی خوبیش چیه ؟اینکه به ضرر طبیعت و ایناس به کنار خوبی ای که برای من داره چیه ؟نیاز به شستن نداره ، فضا اشغال نمیکنه هزینه اش هم کمترهمن میتونم توی کد نویسی کلاس هایی رو بنویسم که هزینه اش برام خیلی کمه هزینه اش برام خیلی کمه یعنی چی ؟ یعنی فضایی برای من نمیگیره استفاده میکنم و دور میندازم کلاس های یه بار مصرف یه جوراییمثلا میخوام از تسک ارث بری کنماون کلاسی که میخوام ازش ارث ببرمتو نمیتونی از تسکت نمونه بسازی من میخوام یه کار دیگه انجام بدم میخوام عملیات ارث بری کردن و نمونه سازیهمین جا بگم از کلاس تسک ارث ببر و نمونه ازش بساز برای اینکه این کار رو انجام بدم نیو رو می نویسم و بعد اسم کلاسی که ازش اسم ببرم رو هم مینویسم شبیه همین تایمر تسکهتایمر تسک به کلاس انتزاعیه بری داخلشم ببینی نوشته پابلیک ابسترکت کلاس تو نمیی تتونی از تایمر تسک نمونه بسازی و از اون طرف هم از قبل همه کار ها مشخص نشده که بگم همه کلاس هایش هستن من میگم بیا از فلان کلاس استفاده کن و از تایمر تسک برام نمونه بساز کار هاشون مختلفه مثلا کاری که من لازم دارم اینه :یک لحظه همین یک بار لازمش دارم گفتم بیا یه تایمر تسک برام بسازاین کار ها رو توش انجام بده قرار نیست اینو ببرم توی هزار تا برنامه ازش استفاده کنم یک بار ازش استفاده کنم تمام اینم همینه گفتم از نوع تسک بیا برام یک نمونه ناشناس بساز و ارث بری رو انجام داده و نمونه شم ساختهاین چیه متدیه که باید اور راید بشه اگه ننویسی بهت ارور میده چون من قانون تعریف کردم باید حتما این رو داشته باشی من قانون تعریف کردم باید حتما این رو داشته باشی این قسمت 17 تا ا22 صد در صد یک کلاسه اما اسمی نداره خودش پس تو نمی تونی ازش نمونه دیگه ای رو بسازیهمون طور که گفتیم این یک کلاس هستش تو میتونی توش متغیر هم تعریف کنی ولی من کاری به این هاش ندارم همین رانش برای من کافیه پس این جا ب جای اینکه من برای یه سری از تسک هایی که اصلا نیازشون ندارم استفاده زیادی ازشون بکنم میام ناشناسی تعریفشون میکنم میگم از نوع تسک بیا این رو برای من قرار بده توی لحظه 19 اجراش کن و بعد میگم تست رو چاپ بکنحالا ما تغییرش دادیم به نه و اجراش میکنیم ببین اجرا میشه یا ناین دیگه یک بار مصرفه کارش رو انجام میده و تمام دیگه نمیشه ازش نمنونه ای چیزی بسازیو اینم این طوری اجرا شد .