جلسه چهاردهم >>ادامه ioc3 اینترفیس ها

سه تا ایونت داریم یکیش افتر کلاک یکی پر کلاک و دیگری هم تسک فینیش این ها یه بار نوشته میشن برای همه تسک ها اعمال میشه ان تسک فینیش رو نمیخوام برای خود اسکیژولبل تایمر تعریفش کنم میخواما برای هر کدام از تسک ها ایجاد بشم مثلا بیام بگم نیو سند ایمیل تسک و بعد نمونه ساززی کنم برای سند ایمیل و بعد یه کاما بزنم و اینونتش رو اضافه کنم بگم اینم ان تسک فینیششهخب به نظر شما باید چکارش کنم به نظر شماالبته شاید یه اینترفیس جدیدی هم لازم داشته باشیم .این جا خودم گفتمش این یعنی چی ؟یعنی یه نمونه ناشنانسا رو میفرستم داخل سند ایمیل میفرستم داخل سازنده اشیعنی اینجا خیلی ساده بیام و ان تسک فینیش رو در کلاس تسک ایجاد کنم و بعدش بیام و این رو اضافه اش کنم به سازنده اشو ستر و گتر هم براش میذارم .ان تسک فینیش از نوع ایونت هندلر اومده داخال سازنده امحالا این میگه همه سازنده هات باید همه این فیلد رو داشته باشنخب من این رو از اول تولیدش میکنماینم برای هردو تاشسورتم اکستند از نوع تسک و اینم باید اونجوری بشهخب اینجا در تسک باید هر دو باشن هم تایم استمپ هم ایونت هندلفرکال تسک هم همینطور فقط سازنده اش رو تغییر میدیم حالا اینجا موقعی که میخوایم ازش استفاده کنیمبرای همشان جدا این کار رو انجاما میدمخب این طوری هر کدام جداگانه ایونت خودشون رو دارن همه این ها رو درسته که تعریف کردیم اما الانن صداش نمیزنهاما اسکیژولبل تایمر این رو صدا نمیزنه چون دارهتسک فینیش اینجا رو صدا میزنهمن این رو باید از این جا برداارمو این ها رو هم بردارم و بعدش بیام اینجا و بگم خود همین تسکهگت ان تسک فینیشش و گت هندلر رو بزنه به همین سادگی این اللان کار میکنه و هر کدام از تسک ها ایونت هندلر خودشون رو دارن فهمیدین یا براتون مبهم بودهخب بریم سوال 2سوال دوسوال دوم مربوط میش به مرتب ساازیالگوریتم مرتب سازی رو به گوننه ای تغییر بدین که امکان مرتب سازی بر اساس چندین پارامتر مقایسه ای رو پشت سر هم داشته باشه به چه معنی به این معنی اگه من بیام اینجا این کار رو انجام بدم بگم لیست یوتیلیتی لیست استودنتن ها روتو گام اول بر اساس معدل اما اگه معدلشون با هم برابر بود بر اساس آی دیهدف اصلیش این باشه که بر اساس ای دی مرتب کنه اما اگه دو تا استودنته معدلشون یکی بود بر اساس پارامتر دوم بررسییشون رو اانجام بده مثل خهیلی از این برنامه ها دیگه که چند تا پارامتر براش در نظر میگیری بر اساس قیمت ببر اساس محبوبیت و . . ..حالا ما اینجا نمینخوایم زیادیش کنیم و دو تا پارامتر رو در نظر میگیریم هدف اصلی اولی اما اگه اولی با هم برابر بودن بیاد از دومی استفاده کنه البته همین الان میتونیم یه جوری بنویسیمش که تا بی نهایت همینطوری بپذیرهمیتونم بیام اینجااگهاس یک دات اوریج مساوی مساوی است با اس دو تاد اوریججحالا اگه این ها با هم بربر بود بودن بر اساس یه مقایسه کننده دومی انجامش بدهکمپریتور میگه که این رو باید بفرستم داخل لیست یوتایل سورت اما نمیخوام این مدللی بفرستمش باید دستی بفرستمش و یه خورده شلخته است میخوام بدمش به لیست یوتیلیتی که خودش این کار رو برای من انجام بدهاین کامپریتور اولمه میارمش بیرونمتغیر سی یک رو بیرون نوشتم الان دو تا متغیر سی یک و سی دو رو دارم اللان بیام و بگم بر اساس سی یک و بر اساس سی دوخب الان باید چیکارش کنم ؟اوللا باید برم داخل سورتبجای یه کامپریتور دو تا کامپریتور بگیرماولی رو بگیرم سی یک و دومی سی دو بعد اینجا خودم بیام وبگم ریجستر کنم و یه سری کار ها انجام بدم که اگه سی یک نتونست انجام بده و مساوی بودن از سی دو استفاده کنه چطوری ؟ باید برم کمپریتورم رو تغییرش بدم یکمی بیام بگم کمپریتور استودنت یک رو بگیر استودنت دو رو هم بگیر یه کامپریتور دومی رو هم بگیر این از خودشه ها گفتم از خودت دوباره بگیرزنجیره وار میکنه و میره داخل هم دیگه خب داخل یوتیلیتی هممیگم بیبا کمپریر کن اییتم ای رو با ایتم جی اگر نتونستی از سی دو استفاده کن حالا سی دو چیهاین ها رو هم جدیدیش کنم چون الان فیلد سومی رو هم دارننو برای این یکی هم باز بگم سی دو حالا برم ای دیش رو بیارم و بگم ریتورن کناین شکلیکامپریتور دوم هیچ کاری برای من انجام نمیده در واقعحالا میام اینجا میگم اگر این ها با هم برابر بودنسی یک و سی دو رو با هم کمپپیر کن و قسمت سومش رو نال میکنیم این دیگه تهشه اگهگ بخوام بگم از این بیشتر نرو بهش نال میدم بعد میتونم بیام شرط بذارم اگه نال نیست یه کمپریتور بعدی هم برای این وجود داره بیا بر اساس اون کامپریتوره عمل کن حالا دیگه میتونم زنجیره وار مشخص کنمخب این شد سی یک و اون یکی هم شد سی دوالبته که این کلی مشکلات داره و اون اصول و اساسی که همیشه داشتیم رو نداره اما خب یه خورده جلو تر بریم بهترش میکنیم این الان این کار ها رو اننجام میده میتونستم این کار ها رو هم انجام ندممیتونیم این طوری هم درستش کنیم برای کمپریتور اولیه یه شرط گذاشتم گفتم اگه مساوی مساوی همدیگه ان از کمپریتور سی دو استفاده کن اس یکی ای دی اس دو ای دیالالن هم یه متغیر سی سه درست کردم و گفتم اگه بر اساس ای دی با هم برابر بودن بریم سراغ متغیر سی دو و مثلا اوریج رو مقایسه کنیم و اگر بر این اساس هم اوکی و برابر بودن میریم سراغ متیغر سومی که میتونه هر چیزی باشه .البته یه روش بهتر و سخت تر هم هست که حالا بعدا درباره اش با هم حر ف میزنیم مثل همون چیزی که بهش اشاره داشتیم اما یه سری کمبود ها داره و کامل نمیشهخب حالا من دو تاش رو گذاشتم و کاری بهش نداریم از این بیشتر این الان دو تا سوال حلل شد یکی اسکیژولل تایمر بود یه جوری تغییر ش دادیم هر کدام از تسک ها خودشون ان تسک فینیش داشته باشن و اینم الگوریتم مرتب سازیمون بودیه جوری تغییرش بدیم که این امکان وجود داشته باشه که بر اساس دو تا تا پارامتر مقایسه بشه حالا من چرا اومدم این رو گذاشتم داخل ازا این کمپریتور ها ؟برای اینجا اصن نیازی نیست کمپریتنور براش براش بنویسیم برای اینجا اصلا نیازی نیست این کمپریتوررو برای این نوشتم خواستم اون حالت اولیه رو براتون بگم ولی خب یه مقداری حس کردم براتون سخت باشه اینجا شرط بزار و بگو همین ها رو با هم مقایسه کن ریتورن کن این ها رو با همایعنی نیازی به کمپریتوره ندارم ها همینم جواب میده ولی اون زنجیره واره بخوام انجامش بدم دیگه جواب نمیده خیلی پیچیده اش نکنیم بر اساس یه شرط سومی خب این هم از مرتب سازیبریم سراغ سوال 3سوال سوم .خب یه کار دیگه هم میتونیم انجام بدیم و یه سوال تمرینیمن ناللان این جا از هش مپپ استفاده کردم توی اسکیژولبل تایمر و هر تیکش میاد این کار رو برای من انجام میده و این تسکه رو برای من ران میکنه و اجرا میشه و تمام میشه توی شبیه سازی ها خب من بینیش رو ایننطوری نوشتم نگاه کنین اومدمتوی لحظه دهاز 7 تا ده از ده هیچی نداریم تا بیست بعد از اون طرف از بیست تا بیست و پنج اون گپ بینش خیلی زیاده ولی من میخوا ولی از اون طرف باید منتظر شم یکی یکی این ها رو تمام کنه توی دنیای واقعیمون باید همینطوری باشه یعنی یه برنامه ای باشه که توی یه زمان خاصی باشه توی همون زمان انجام بشهمیخوام یه شبیه ساز بنویسم یه سیسیتمی رو تست کنیم نیازی نداریم که ده ثانیه واقعا وایسیم که ببینیم چی میشه فقط اینو میخوای که توی لحظه ده یه افتاقی بیتفه توی لحظه بیست یه اتفاق دیگه بیفته میخوای تست کنی نمیخوای که واقعا توی این زمان ها واقعی مثلافرض کن ساعت واقعی بیاد فرض کن ساعت سه و سی دقیقه بیاد یکار یکنههمچین چیزی رو الان نمیخوایم ما تو دنیای شبیه سازی شاید بخوایم کار کنیمخب چطوری میتونم این گپ های بینشون رو حذف کنم ؟ و فقط داده هام اجرا بشن چیز دیگه ای اجرا نشه میتونم به جای اینکه از هش مپ ااستفاده کنم ناز اراایه استفاد کنم اما قبلشبعد از اینکه این ها رو ریجستر کردم ااراایه ام رو بیام بر اساس تایم استمپ ها مرتبش کنم و بعد بیام توی هر تیک این ساعتی که میخوره یه دونه از این اجرا شه کامل هر تیکی که خورد بره مستقیم سر ده بعد مستقیم بره ده بعد مستقیم بره بعدی دیگه نیاد تیکه دونه دونه رو بزنه یهو بره دههش مپ رو کامنت میکنیم و ار ری لیست از نوع تسک رو مینت نویسمیبعدش دیگه تو ریجسترم نمنیام تایم استمپ براش بذارم اینم کامنتش میکنممیام میگم تسک دات اد تسک رو ادد کن هیمن دیگه تایم استمپش رو نمیذارم اما وقتی میخوام اجراش کنم قبلش میام دیگه به صورت تایمر هم نیمخواد براش در نظر بیگریم بگیم به صورت حالا یه تایمری باشه دیگه این طوری نمیخوامحالا میتونیم تایمر هم بذاریم و هر کدام از اون تیکه هاش زمان رو داشته باشه میام از لیست یوتایل استفاده میکنم میتونیم از اون چیزی که تو خود جاوا هست استفاده کنیم و اما چون ما ارری لیستس رو نمیتونیم بپذریم نمیتونمن از این استفاده کنم پس من این رو فعلا بر میدارم از کالکشن سورت استفاده میکنم که داخل خود جاواست یه خورده دیگه بریم جلو تر سورت ارری لیست رو هم انجام میدیم میگم تسک ها رو بیا مرتب کن بر اساس این کمپریتور ولی این جا سه تا میگیره من باید سه تا بنویسم سه تا خروجی داره اینته مثل خودمون بولین نیست میگگم اگه او یک دات گت تایم استمپ چیز کوچیک تر پیدا شد ریتورن کن یک روبعد میگم الس ایفاین رو برعکسش میکنم و این رو هم منفی یک میدممیگم یه بار مرتبش کن بعد بیا اسکیژول کن این تایمره رو خب حالا توی هر تیکش دیگه من نمیام از این شرط ها بذارم این شرط ها رو بر میدار همشان رومیام یه شرط دیگه میذارم قبلی هارو همه کامنت میکنم خیلی راحت میگم تسک دات گت کلاکدات ران ودات گت تسک فینیشش و گت هندلر کلاکاین دیگه اون گپ هاش رو نشان نمیده هر کلاکش یه دونه تسک رو میخونه اون تسکه تایم استمپ هاش فرق داره دیگه هر کلاکش یه دونه تسک رو میخونه اون تسک تایم استمپ هاش فرق داره اما این کلاکه رو دیگ داره برای من اشتباه نشان میده کلاک واقعی اونی که من اینجا خودم تعریف کردم برا اینکه این رو درست بهم نشون بده این رو اینطوری مینویسم میگم این برابر باحالا این جا ارور چرا داد ؟چون میگه کلاک اصن نداره من باید شرط بذارم اگر تسک دات کنتین اگه این رو دارهاگه کلاک کوچیک تر از دات سایزه بیا کلی این کار ها رو انجام بده در غیر این صورت ساعته رو هم کنسل کنه خب ببین چقدر جالبه دیگه گپ های زمانی رو نشان نده دیگه مستقیم میره سر کلاکش کلاک پنجمی باید اجرا شه دهمی باید اجرا شه و . .