جلسه نهم >> ioc2.2 و شروع مبحث اینترفیس ها

ادامه ioc2.2 و ورود به مبحث اینتر فیس هاخیلی با دقت گوش کنید امروز یه خورده مطالبش اساسی و مهم هستش و خیلی میتونین ازش استفاده کنین تا اینجای کار ما مطالبی که یاد گرفتیم ارث بری ها و کلن اون چیزایی که درباره شی گرایی و سطوح ioc یاد گرفتیم با کلاس هایی بودن که ما خودمون انجامشون میدادیم امروز میخواایم یه خورده متفاوت تر کار کنیم و از کلاس هایی که توی خود جاوا هستن استفاده کنیم و اون ها رو توسعه شون بدیم در واقع ، میخوایم توسعه شون بدیم و با استفاده از اون توسعه یه کلاس پیشرفته تری رو بنویسیم چیزی که این جا داشتیم .چیزی که تا الان داشتیم کلاس هایی بود که خودمون نوشتیم حالا این جلسه میخوایم از یه سری کلاس جاوا استفاده کنیم . و اونا رو توسعه شون بدیم که حالا کد های حرفه ای تری بنویسیم و خیلی پیشرفته تر باشه و لازم نباشه خیلی از چیز ها رو من خودم دستی بیام انجامشون بدم . خب برای اینکه این کار رو انجام بدیم همون پروژه ویرچوال کلاک رو یادتونه من اومدم و اسمش رو تغییر دادم به اسکیژولبل تایمر یعنی تایمر قابل زمان بندی شدن چرا این کار رو کردم ؟ چون ببینید کدی که جلسه قبلی نوشته بودیماومده بودیم از این اسکیژولبل تایمر استفاده کردیم و تسک ها رو ریجستر میکردیم و بعدش استارت میزدیم و این شروع می کرد به اجرا شدن و بقیه چیز هایی که حالا داشتیم الان میخوایم چیکار کنیم ؟ من نمیخوام این کار رو انجام بدم نمیخوام بیام یه کسی رو از اول جدا داشته باشم میخوام تو کلاس تایمرم ، کلاس تایمر رو یادتونه؟تایمر رو مینوشتیم قبلا ...مثلا میومدیم تایمر رو مینوشتیم بعد از یه دستوری استفاده میکردیم به اسم از یه دستوری به اسم اسکیژول استفاده میکردیم و میتونستم به تایمر تسک بهش بدم یه دیلی و یه دوره زمانی میگرفت و این شروع میکرد به اجرا کردن .منظور خط 23 است .تسکی رو بهش میدادم و اون تسک رو برای من اجرا میکرد . حالا من میخوام تایمر رو توسعه اش بدم میخوام همین تایمر باشه ها یعنی همین کار هایی که الان میتونم انجام بدم رو باهاش انجام بدم اما میخوام یه سری قابلیت هایی اضافه داشته باشه . نمیام داخل تایمر کد بنویسم نمیام این کار رو انجام بدم میخوام خودم یه تایمر بنویسم اما لازم ندارم خودم همه چیز رو بنویسم این تایمر جدیدی که من مینویسم این قابلیت رو داره که یه سری تسک رو هم بهش ریجستر کنی واون تسک ها رو تو اون زمان هایی که براش مشخص کردی اجرا کنه برات .. .تایمری که الان داریم اینطوری نیست یه تسک بهش میدی تو اون بازه زمانی ای که بهش میدی همون تسک رو برات مشخص میکنهاما این تایمری که ما الان داریم یه جور دیگه است این مجموعه ای از تسک ها رو میگیره و توی زمان های مختلف برات اجرا میکنه .قابلیت های پیشرفض خودش رو هم داره یعنی میتونه یه تسک رو هم بگیره و تو بازه هزار میلی ثانیه ای اینو هی اجراش کنه اما من میخوام این قابلیت رو هم داشته باشه که بتونم مجموعه ای از تسک ها رو بهش بدم و تو زمان هایی که مشخص کردم بتونه اجراشون کنه میخوام از کلاس تایمر جاوا استتفاده کنم . هدف ما اینه خود تایمر این قابلیت رو داره یه دونه تسک میگیره هزار میلی ثانیه یا هر چند میلی ثانیه که بنویسی ، برات اجراش میکنه اما الان من یه کار دیگه ازش میخوام ، میخوام این قابلیت رو هم داشته باشه نباید فقط یه دونه تسک بگیره مجموعه ای از تسک ها رو بگیره توی زمان هایی که من براشون مشخص کردم اجراشون کنهاین که در خط 23 نوشتم این قابلیت رو نداره یه دونه تسک میگیره و یک ثانیه یک بار اجراش میکنه ولی من میخوام این رو بهش اضافه کنم . خب برای اینکه این کار رو انجام بدیمچیز قبلی رو اسمش رو گذاشتم اسکیژولبل تایمر به معنای تایمر قابل زمان بندی شده برای اینکه تایمر باشه من باید اکستندش کنمباید از نوع تایمر اکستندش کنم یعنی بگم تو هم تایمری حالا چیز هایی که من میخوام رو خودم بهش اضافه میکنم قبلا در داخل کلاس ویرژوال کلاک که الان تغییرش دادیم و به اسکیژولبل تایمر تبدیلش کردیم ، یه تایمر نوشته بودیم و از اون تایمره استفاده میکردم .الان دیگه من در داخلش تایمر ندارم چرا ؟ چون خودش تایمره اصن حالا میخوام .الان اسکیژول تایمر رو بزنم خودش اسکیژول داره این همون ویرچوال کلاکه بود الان چون ارث بری کردهالان این دقیقا خود تایمره اس یعنی همون کاری که قبلا انجام میدادم االان میتونم انجام بدم اینجا یه تسک بهش بدم تاخیر بهش بدم بگم مثلا هر یک ثانیه یک بار اجراش کن یه دونه تسک میگیره مثلا میتونم ناشناس بهش بدماصلا هیچ ربطی به این ریجستر کردن ها هم نداره وولی من الان میخوام این هایی که ریجستر کردم رو اجرا کنم پس من الان به یه اسکیژول نیاز دارم که فقط تاخیر رو بگیره و اون بازه زمانیش یعنی بین این اسکیژول هایی که وجود دارهنگاشون کنین این چهار تا من یه دونه دیگه باید بهش اضافه کنم که فقط زمان رو بگیره و اون دوره زمانی رو بگیره تسک رو نگیره تسک رو میخوام درون خود تایمره تعریفش کنم یعنی بگم اگر یکی اومد ازاین مدل اسکیژول استفاده کرد .و این تاخیر و دوره زمانی رو وارد کرد بره تسک های ریجستر شده رو فقط اجرا کنه اگرم اومد و تسک بهش داد خب تسک رو اجرا کنه اگر ن اون هایی که ریجستر شدن رو اجرا کنه من الان نیاز دارم در داخلاسکژوبل تایمر یه متد دیگه خودم اضافه کنماگه یه لحظه برم تو تایمر و برم ببینم چی داخلشه یه سری چیزا داخلشه و یه سری سازنده داره و متد هایی مثل اسکیژولمثلا این و منم الان یکی می خوام عین همین باشه که الان کپیشم میکنم درونش رو همه رو حذف میکنمخط 17 ام همونهکه اوور رایدش کرد ببینید داره اورر رایدش میکنه ولی من نمیخوام اوررایدش کنم من میخوام در واقع یه جورایی اورلودش کنم در واقع یعنی یه حالت های دیگه ای هم داشته باشه ببینید من الان اون رو حذف میکنم ببینیند الان یه متد جدیدهکه تاخیر داره و دوره زمانیالان اگه دقت کنین شده 5 تا که 4 تاش مال جاواست و یکیش مال منه که همون اولیهخب الان من میخوام این اولی رو پیاده سازی کنم که تسکی که داخل تعریف کردم رو اجرا کنه برام کافیه بیام متد اسکیژول اون یکی رو صدا بزنم بگگم کدوم رو اجرا کن؟ بگم تایمر تسک رو اجرا کن با این تاخیر و این دوره زمانیو میاد این رو برام اجراش میکنهو من الان اینجا بنویسم اسکیژول تاخیر نداشته باشه و یک ثانیه ای برام انجامش بدهاین دیگه مثل اون ویرچوال کلاکه نیست ها این واقعا تایمره که فقط این قابلیت رو داره میتونه ریجستر کنه یه مجموعه تسک رو تایمری که قبلا داشتیم یه دونه تسک داشت اجراش کنم مثل قبلیه دقیقا اجرا میشه و مشکلی هم نداره البته کلاکش رو برداشتمخط24الان همه چی اجرا شد دقیقا همون کار ها رو برای من انجام داد و چون کلاکش رو نزده بودم در کنسول نزده وگرنه میزد .این توسعه پذیری هستش وقتی بهتون میگم توسعه پذیری یعنی این یعنی شما کلاس هاتون کد هاتون یه جوری باشه که بقیه بتونن توسعه بدن یه چیزی بهش اضافه کنن و استفاده کنن برای کاربرد های خاص خودشونقسمت اسکیژول یه متد خیلی ساده است چون اسکیژوبل تایمر داره تایمر رو اکستند میکنه داخلش میتتونی به همه متد هایی که وجود داشتن دسترسی داشته باشیمثلا این ها همش توی تایمر هستن اما این الان فرزندشه . .مثلا تسک دیگهالان ببینید تسک مگه این نیست من الان متد ران و تایم استمپ دارم اینجا دیگه و تو اسکژول چون این رو به ارث برده میتونم اون بیام بگم : گت تایم استمپ :و صداش بزنماینم همینه چون من الان ارث بردم از تایمر تمام متد هایی که هستن رو الان اینجا من میتونم ببینمشوناسکیژولی که اینجا هست و سه تا ورودی میگیره این مربوط به خود تایمرهاینی که من اینجا نوشتم دو تاست اما اسکیژول داخل متد همونی هستش که در داخل کلاس تایمره شما میتونید از اون ها استفاده کنینیعنی از این چهار تای بالا میتونین استفاده کنین اینا مربوط به خود تایمر هستنخب من خیلی ساده گفتم که اون اسکیژول خودش رو صدا بزن تایمر تسک رو بهش بده دیلی و پریود. تایمر تسک چیه ؟ اینیه که اینجا نوشتمدرسته؟ خیلی هم عالیاین اسکیژول با خط بالاییش قاطی نکنین بالایی چیزی هست که من نوشتم و پایینی چیزی هست که داخل خود تایمره .میتونید دیگه مثلا من میتونم چند تا ریجستر بنویسم :و دیگه باید نوعش فرق داشته باشه و بجای اینکه تسک بگیرم اینت میگیرم یا اصن دو تایی میگیرم ، تسک رو میگیرم یه دونه دیگه هم میگیرممیتونی چند تا بنویسی حالت های مختلف ریجستر . .اینم الان همون طوریهحالت های مختلف اسکیژول هستش چهار تا خودش داشت یه دونه هم من اضافه کردم بعد گفتم تو اینی که من اضافه کردم بیاد یکی از اون چهار تا رو صدا بزن که داخل خودشه .خب این تا اینجا حالا میخوام یه کار دیگه انجام بدم به نظر شما این کد وابسته است یا ناین قسمتخب این قسمت وابستگی داره کسی میدونه چه واابستگی ای هست ؟ وابستگی به کنسول هستش چون در خط 24 از سی اوت یا چاپ کردن استفاده کردیم .مگه من نگفتم که نبابید همچین چیزی بنویسیم الان برنامه من حتما باید صدرصد تو کنسول اجرا بشه چرا چون این رو اینجا نوشتم خب شاید من نخوام اینجا بنویسمش خب اصن نخوام تو کنسول اجراش کنم فرض کن یه برنامه نوشتم گرافیکی که یه لیستی از تسک ها رو گذاشته برای من و بعد گفته تسک یک دو سه چهار و جلوشونم مثلا یه دایره ای گذاشته میخوام برنامه ام اینجوری باشه که وقتی اجراش کردم تسک یک که اجرا شد زمانش رو هم نشان بده و بگه این زمانه و وقتی بهش رسید یه تیک بزنه جلوش که مثلابگه این ها اجرا شدن که تیکشون بزنه و بره جلو ولی اینی که من نوشتم ن دیگه همچین قابلیتی ندارم اصلل این مطلب که چطوری از لحاظ تئوری ... حالا تئوریش رو شنبه بتون میگم باید از اینتر فیس استفاده کنین امروز میخوام یه استفاده ازش بگم که بدونین چه چیز مهمیه شنبه میریم تو مباحث عمیق و بنیادیش و ioc3 رو میگیم امروز نمیخوایم در مورد تئوریش بگیم فقط میخوایم ازش استفاده کنیم . که یه همچین مشکلی که مشکل مهمی هم هست حلش کنیم برای اینکه این رو حلش کنیم در واقع من باید چیکار کنم ؟این چاپ کردن چیه؟ یه کاریه درسته ؟ جز یه کار حساب میشه چاپ میکنه یه چیزی رو برای من چاپ میکنه من میتونم بجای اینکه چاپ کنم کارم این باشه که توی یه تایمر گرافیکی نشونش بدم و وقتی اجرا شد بره برام تیک بزنه ، کاره دیگه پس در واقع من باید وابستگی به این کار رو از بین ببرم یه زمانی من باید کاری رو که میخوام داخل انجام بشه از بیرون بفرستم یا همان دپندنسی اینجکشن انجام بدم بگم اینجاا این کار رو اانجام بده توی این خط این کار رو انجام بده و این کار ها از کجا باشن؟از بیرن بیان داخل بعدش میخوام این کد اجرا شه از قبل نمیخوام بگم این کار رومیخوام از بیرون کار رو بفرستم تو که هر کسی اگر خواست از این سیستم استفاده کنه توی جا های مختلف توی شرایط مختلف بتونه استفاده کنه و کار های خودش رو بفرسته تو .مثل چی میمونه کار ؟ دکمه شما تو جاوا توی قسمت گرافیکی تون وقتتی که میخواین یه دکمه میزنین رو صفحه تون دکمه تون از قبل که نیومده تو جاوا یه کاری رو توش بنویسه بگی این دکمه هر موقع زده شد اون کاری که من از قبل گفتم رو انجام بده اینطوری نیست ک هر موقع دکمه رو میزنین کاری رو که خودتون براش تعریف میکنین رو اجرا میکنه یا هر چیز دیگه ای هر چیز گرافیکی ای هست دیگه محیط گرافیکی که کد می نویسی براش دکمه میاد رو صفحه ات بعد میخوای کدی که تو میگی رو اجرا کنه ن اینکه چیزی که از قبله پس باید یه کار بفرستی داخل دکمه هه پس این یه چیز خیلی مهمیه اصن یه چیز خیلی خیلی اساسی و مهمیه تئوریش رو شنبه بهتون میگم امروز فقط میخوایم ازش استفاده کنیم . باید از اینترفیس استفاده کنیم . و توی اینترفیس ها باید از یه چیزی استفاده کنیم به اسم اینونت هندلر هندل کننده رخداد هارخداد یعنی چی مثلا اگر اومد خط 24 این یه رخداده دیگه اگر اومد داخل این یه رخداد اتفاق افتتادهبیا این کار رو انجام بده اگر اومد داخل ایف و این کار انجام شد این یه رخداده یه اتفاقی افتاده بیا فلان کار رو انجام بده بعد از اینکه همه این ها رو انجام دادی اومدی این پایین مثلا بیا اینجا کاری انجام بده میتونم همه رو بنویسم دیگه و اینکه از رخداد ها استفاده کنیم داخل خود جاوا یه چیزی داریم به اسم ایونت هندلراما اینی که توی جاواست یه خورده پیچیدگیش زیاده و یه سری چیز های اضافه تر میخواد این هایی که هستن مربوط به جاوا هستن اما اون اولی رو من نوشتماینی هستش که اونجا نوشتمش چی داخلشه ؟هیچی توش نیست به غیر از یه چیزی به اسم هندلر اینا چی هستن بهتون میگم بعدا فقط الان میخوام ازش استفاده کنیم اصلا نمیخواد بدونین چیه فقط یه چیزی داریم به اسم ایونت هندلر برای تعریف کردن ایونت هامون ، هندل کننده رخداد هامون داخلش یه چیزی هست به اسم هندلر خب من میام برای اینکه کار هام رو مشخص کنم برای هر جایی که میخوام یه کاری انجام بشه میام یه فیلد براش میسازم مثلا میگم ایونت هندلر ،مثلا میخوام یه کاری انجام بشه قبل از هرچیزی ، قبل از اینکه هر کدام از این کد ها اجرا شهمیخوام اون اجرا شه اسمش رو میذارم مثلا پرکلاک یعنی قبل از کلاک اتفاق بیفته یعنی اجرا شه یعنی میخوام وقتی که تسکم اجرا شدیعنی بیاد اینجا شرطم برقرار بود تسکم اومد اجرا شد و امد اینجا . میخوام وقت تسکم اجرا شد یه کاری هم اینجا اجرا بشهیه اتفاقی اینجا هندل بشه میام یه دونه دیگه هم فیلد تعریف میکنم مثلا همه متغیر هایی که تا الان تعریف میکردیم اسمش رو میذارم ان تسک فینیشدر لحظه تمام شدن تسک یه دونه اهم میخوام اصن کاری به این نداشته باشمکل این ها اجرا شد بعدش بیاد یه کاری انجام بشه حالا من یه سری چیز ها اینجا مینویسم لازم نیست برای خط به خط این ها اینطوری بنویسم میخوام چند تا بنویسم که بدونین چند تا میشه نوشت شما بر اساس نیازتون ممکنه یه دونه اصن ممکنه نخواید ممکنه جاهای مختلف برای کار های مختلف بخواید حالا من چند تا نوشتم که بدونید دیگه یه دونه دیگه میام مینویسمایونت هندلر افتر خب فیلد ها چی میخوان برای اینکه بخوام باهاشون ارتتباط برقرار کنم؟ ستر و گتر برای این سه تا ستر و گتر میذارمخب این ستر و گتر هاشون که کاریش ون ندارم و میبندمشون این از ستر و گتر ها حالا کافیه اون جاهایی که میخوام اجرا بشن صداشون بزنم داخل هرکدومشون الان یه متد هندل وجود دارههرجا میخوام اجرا بشه میام مینویسممن اینطوری تعریفش کردم که ساعته رو هم بفرستم به عنوان ورودی ساعته رو هم بهش بدممثلا میگم کلاک بعد از اینکه تسک اجرا شد میگم آن تسک فینیش هندل و کلاک رو داخلش مینویسم .بعد از اینکه وظیفه این قسمت هم تمام شددوباره میزنم افتر کلاک و ورودیش رو کلاک میدم . اما این ها چین و چی اجرا میشه الان به نظرتون چی اجرا میشه به نظرتون میخوام چیکار کنم ؟ از چه قابلیتی استفاده کنم ؟ اووراید میخوام انجام بدم ، رونویسی رو چطوری انجام بدم ؟ مگه این ها یه متغیر نیستن ؟مگه قبلا برای این تسکه نذاشتم اینم متغیره دیگه از بیرون سند ایمیل رو میفرستادم رو نویسی شده میومد داخل همشون گت تایم استمپ داشتن ران رو هم داشتن خب الان اینم هندله دیگهمن از بیرون هر کلاسی زیر مجموعه این ایونت هندلره بفرستم داخل هندلش اورراید میشه پس کار من رو انجام میده در واقع چطوری حالا انجامش بدم ؟ کافیه بیام داخل مین قبل از اینکه اسکیژول انجام بدم بیام بگم اسکیژولبل تایمر دات ست پرکلاکش از یه چیزی استفاده میکنم که یه خورده براتون فرق دارهدو تا کار میتونم انجام بدم مگه من نمیخوام چاپ کنم فقط باید بیام ارث بری انجام بدم دیگه یه جورایی حالا این ارث بری نیست ولی شبیه اونهمثلا باید بیام اینجا و بسازم کلاس پرینت کلاک رو بعد این رو بیام چیکار کنم؟اکستند که نمیتونم یه کار دیگه باید انجام بدم که شبیه همون اکستنده جلسه بعد بهتون میگمش ایمپلمنت اسمشه مثل همون اکستنده اس بعد بگم ایونت هندلرمثل همون دقیقا باید بیام اور رایدش کنم و بعد بیام اینجا و بگم سیستم دات اوت پرینت لاین کلاکخب ممکنه بگی این که خیلی بد ترش کردی کلی دوباره کلاس اضافه کردی خب اون اولی که بهتر بود که من میومدم کار رو از پیش تعریف میکردم همون اونجا چاپش میکردم چه کاریه بیام کلاس بسازم و از این حرفا برای یه دونه سیستم دات اوت پرینت لاین میتونم یه کار دیگه انجام بدم اگر کارم خیلی چیز عجیب غریب و پیچیده ای هستش و نیاز دارم اصول مهندسی رو روش رعایت کنم و توی برنامه های مختلف میخوام ازش استفاده کنم مثلا از این پرینت کلاکه توی خیلی از برنامه های مختلف میخوام استتفاده کنمو خیلی چیز مهمی هستش برای من و ممکنه حالا پرینت کلاک ن مثلا یه کار دیگه ایه بعد مثلا هزار خط کده دیگه کللی چیز مهمه از خیلی چیز های دیگه هم توش استفاده کردم میام کلاس براش میسازم کاملا منطقی هستش باید بسازم براش اما یه کار دیگه هم میتونم انجام بدم اصن نیازی نیست من برای یه سیستم دات اوت یه کلاس بنویسم به جاش از یه چیزی استفاده میکنم به اسم کلاس ناشناس کلاس ناشناس یعنی چی ؟ یعنی کلاسی که اصن فایلی براش ایجاد نمیکنی اسم اصلا نداره کلاس یه بار مصرف یه بار ازشااستفاده کنم تمامه یک بار مصرف باشه چه نیازی دارم برای یک سیستم دات اوت بیام یه کلاس بسازم اینجا مینویسمش چاپ رو برای من انجام بده و تمام یه بار استفاده کنم و تمام بشه بره پی کارش نیازی نیست که کار های عجیب غریب انجام بدی و و کلاس بسازی حالا این کلاس ناشناسی چطوریه من وقتی یه کلاس ساختم چیکار کردم ؟ عملیات فرض کن این همون ارث بری اسارث بری نیست ولی فرض کن همونه ارث بری انجام دادم بعد اومدم ااورراید کردم و بقیه کارهامون دیگه حالا همه این کار ها رو میتونم خیلی ساده تر انجام بدم این قسمتش رو اصن حذف کنمکافیه جلوش بنویسیم نیو یه پیشنهاد برات میاره نوشته از نوع ایونت هندلر که جلوش از این کروشه ها زده میتونی از پرینت کلاک هم بزنی ولی هیچی جلوش نیست ولی اون اولی رو که بزنیروش اینتر بزنی و یا دابل کلیک کنی روش همچین کدی برات می نویسه این کد این قسمتشدقیقا ارث بریه رو داره انجام میده و یا اون اینپلمنته قسمت پایینش هم که همنو اووراید کردنشاین الان دقیقا از خط 24 براکتش تا خط 30دقیقا همین چیزی هستش که اینجاست دقیقا مث هم هستنفقط برای اینکه این پابلیک کلاس و ایمپلمنت و اینا رو نیام بنویسم کل این ها خلاصه شده توی این :این نیو ایونت هندلر یعنی بیا یه کلاس بساز ایمپلمنت کنه یا ارث بری کنه از ایونت هندلر و بقیه چیزاش اسمی نداره دیگه به خاطر همین میگیم ناشناسه اسم نداره تو نمیتونی از این کلاست نمونه بسازی دیگه یک بار ازش ازث میبره و نمونه اش رو هم میسازه تمام .دیگه ن میتونی ازش نمونه بسازی و ن هیچ چیز دیگه یه بار نمونه ساخت تمام شد رفت . ن میتونی ارث بری کنی ازش چون اسم نداره و ن هیچ کار دیگه ای . هر جایی هم میتونی ازش استفاده کنی میتونی تو متغیر تعریفش کنیمن الان مثلا ایونت هندلره رو مینویسم اینجا بعد میام مینویسم اچ مثلا و بعد اینو میریزم داخل یه متغیراین الان میاد یه بار ارث بری انجام میده نمونه سازی میکنه و نمونه اش رو میریزه داخل ایونت هندلر اچ ولی دیگگه نمیتونی هیچ وقت دیگه ازش نمونه بسازی یک بار مصرفهاسکیزولبل تایمر ست کنه پرکلاک رو و این کار رو برای من انجام بده کاره یک بار مصرف نیست ها نمونه اش یک بار مصرفه یک بار ازش نمونه ساخته میشه اما میتونی هزار بار صداش بزنی یعنی اجراش کنی الان این رو من گذاشتم داخلش چه کاری میخوام انجام بشه ؟سیستم دات اوت میخوام برای من انجام بشه نیازی نیست این رو ازش کلاس بسازم . کلاسی هم که ساخته بودم رو هم حذف میکنم . الان پر کلاک نمونه ساختم که این داخلشه میام داخل اسکیژولبل تایمراین الان پرکلاک اومدم یه نمونه ساختم این داخلشه میاد داخل اسکیژولبل تایمررییت شده هندلشهر موقع میرسه به این پرکلاک دات هندل کلاک رو میفرسته براش هندلش میکنه میاد این کد داخل این رو اجرا میکنهاز بیرون کار رو فرستادم تو خالا اون یکیش رو هم میام مینویسم میگم : اسکیژول تایمردات ست کن آن تسک فینیش میگم هر وقت تسک تمام شد بیا چیز دیگه چاپ کن بیا بگو مثلا تسک تمام شدهتسکه اجرا شد یا یه اسکیژولبل تایمر دیگه میسازم و ست میکنم افتر کلاک رو و میگم هر وقت تمامش کردی این کلاکت رو یه خط بکش حالا من این ها رو نوشتم ممکنه شما هزار کار دیگه انجام بدین عین همون باتم هستش دقیقا عین همون باتم هستش فقط تو باتمه میگی وقتی اومد کلیک کرد این کار رو انجام بده من میگم چی ؟ میگم هر موقع رسیدی به این کد انجام بده هر موقع رسیدی این اتفاق افتاد شرطت پذیرفته شد اومدی ران کردی این رو انجام بده هر موقع این ها تمام شدن و رسیدی به اینجا انجام بده الان این کار ها رو پشت سر هم انجام میده ببینیم انجام مید ه:: برای تسک هام باید تسک هز کامپلیتد بنویسه برای اون یکی ها هم فقط باید کلاک رو بنویسه و خط بکشه زیرشکلاک میزنه خط میکشه کلاک میزنه خط میکشه برسه به یه تسک تسک کامپلیتد رو هم مینویسهتسک رو اجرا کرد سند ایمیل کردکار منم انجام داد بقیه کار ها هم دقیقا همینطوره ببین چقدر کد های قدرتمند با شی گرایی میتونی بنویسی چقدر جالب و چقدر حرفه ایه حالا فرض کن تو این رو وابسته اش میکردی حالا من این رو نوشتم سیستم دات اوت فلان این کار رو انجام بده شما این رو میتونستی چطوری بنویسی ؟ میتونستی اینطوری بنیوسی مثلا فرض کن محیط گرافیکیهاین کلاکت رو که مقدارشه تو یه تایمر گرافیکی ست میکردی تایمرتو تغییر میداد توی برنامه گرافیکی حالا