Amir_B
Amir_B
خواندن ۹ دقیقه·۳ سال پیش

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

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

خب به نظر شما باید چکارش کنم به نظر شما

البته شاید یه اینترفیس جدیدی هم لازم داشته باشیم .

این جا خودم گفتمش این یعنی چی ؟

یعنی یه نمونه ناشنانسا رو میفرستم داخل سند ایمیل میفرستم داخل سازنده اش

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

و ستر و گتر هم براش میذارم .

ان تسک فینیش از نوع ایونت هندلر اومده داخال سازنده ام

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

خب من این رو از اول تولیدش میکنم

اینم برای هردو تاش

سورتم اکستند از نوع تسک و اینم باید اونجوری بشه

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

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

برای همشان جدا این کار رو انجاما میدم

خب این طوری هر کدام جداگانه ایونت خودشون رو دارن همه این ها رو درسته که تعریف کردیم اما الانن صداش نمیزنه

اما اسکیژولبل تایمر این رو صدا نمیزنه چون داره

تسک فینیش اینجا رو صدا میزنه

من این رو باید از این جا برداارم


و این ها رو هم بردارم و بعدش بیام اینجا و بگم خود همین تسکه

گت ان تسک فینیشش و گت هندلر رو بزنه به همین سادگی این اللان کار میکنه و هر کدام از تسک ها ایونت هندلر خودشون رو دارن فهمیدین یا براتون مبهم بوده

خب بریم سوال 2

سوال دو

سوال دوم مربوط میش به مرتب ساازی

الگوریتم مرتب سازی رو به گوننه ای تغییر بدین که امکان مرتب سازی بر اساس چندین پارامتر مقایسه ای رو پشت سر هم داشته باشه به چه معنی به این معنی اگه من بیام اینجا این کار رو انجام بدم بگم لیست یوتیلیتی لیست استودنتن ها رو

تو گام اول بر اساس معدل اما اگه معدلشون با هم برابر بود بر اساس آی دی

هدف اصلیش این باشه که بر اساس ای دی مرتب کنه اما اگه دو تا استودنته معدلشون یکی بود بر اساس پارامتر دوم بررسییشون رو اانجام بده مثل خهیلی از این برنامه ها دیگه که چند تا پارامتر براش در نظر میگیری بر اساس قیمت ببر اساس محبوبیت و . . ..

حالا ما اینجا نمینخوایم زیادیش کنیم و دو تا پارامتر رو در نظر میگیریم هدف اصلی اولی اما اگه اولی با هم برابر بودن بیاد از دومی استفاده کنه البته همین الان میتونیم یه جوری بنویسیمش که تا بی نهایت همینطوری بپذیره

میتونم بیام اینجااگهاس یک دات اوریج مساوی مساوی است با اس دو تاد اوریجج

حالا اگه این ها با هم بربر بود بودن بر اساس یه مقایسه کننده دومی انجامش بده

کمپریتور میگه که این رو باید بفرستم داخل لیست یوتایل سورت اما نمیخوام این مدللی بفرستمش باید دستی بفرستمش و یه خورده شلخته است میخوام بدمش به لیست یوتیلیتی که خودش این کار رو برای من انجام بده

این کامپریتور اولمه میارمش بیرون

متغیر سی یک رو بیرون نوشتم الان دو تا متغیر سی یک و سی دو رو دارم اللان بیام و بگم بر اساس سی یک و بر اساس سی دو

خب الان باید چیکارش کنم ؟

اوللا باید برم داخل سورت

بجای یه کامپریتور دو تا کامپریتور بگیرم

اولی رو بگیرم سی یک و دومی سی دو بعد اینجا خودم بیام وبگم ریجستر کنم و یه سری کار ها انجام بدم که اگه سی یک نتونست انجام بده و مساوی بودن از سی دو استفاده کنه چطوری ؟ باید برم کمپریتورم رو تغییرش بدم یکمی بیام بگم کمپریتور استودنت یک رو بگیر استودنت دو رو هم بگیر یه کامپریتور دومی رو هم بگیر این از خودشه ها گفتم از خودت دوباره بگیر

زنجیره وار میکنه و میره داخل هم دیگه خب داخل یوتیلیتی هم

میگم بیبا کمپریر کن اییتم ای رو با ایتم جی اگر نتونستی از سی دو استفاده کن حالا سی دو چیه

این ها رو هم جدیدیش کنم چون الان فیلد سومی رو هم دارنن

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

این شکلی

کامپریتور دوم هیچ کاری برای من انجام نمیده در واقع

حالا میام اینجا میگم اگر این ها با هم برابر بودن


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

خب این شد سی یک و اون یکی هم شد سی دو

البته که این کلی مشکلات داره و اون اصول و اساسی که همیشه داشتیم رو نداره اما خب یه خورده جلو تر بریم بهترش میکنیم این الان این کار ها رو اننجام میده میتونستم این کار ها رو هم انجام ندم

میتونیم این طوری هم درستش کنیم برای کمپریتور اولیه یه شرط گذاشتم گفتم اگه مساوی مساوی همدیگه ان از کمپریتور سی دو استفاده کن اس یکی ای دی اس دو ای دی

الالن هم یه متغیر سی سه درست کردم و گفتم اگه بر اساس ای دی با هم برابر بودن بریم سراغ متغیر سی دو و مثلا اوریج رو مقایسه کنیم و اگر بر این اساس هم اوکی و برابر بودن میریم سراغ متیغر سومی که میتونه هر چیزی باشه .

البته یه روش بهتر و سخت تر هم هست که حالا بعدا درباره اش با هم حر ف میزنیم مثل همون چیزی که بهش اشاره داشتیم اما یه سری کمبود ها داره و کامل نمیشه

خب حالا من دو تاش رو گذاشتم و کاری بهش نداریم از این بیشتر این الان دو تا سوال حلل شد یکی اسکیژولل تایمر بود یه جوری تغییر ش دادیم هر کدام از تسک ها خودشون ان تسک فینیش داشته باشن و اینم الگوریتم مرتب سازیمون بود

یه جوری تغییرش بدیم که این امکان وجود داشته باشه که بر اساس دو تا تا پارامتر مقایسه بشه حالا من چرا اومدم این رو گذاشتم داخل ازا این کمپریتور ها ؟

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

ایعنی نیازی به کمپریتوره ندارم ها همینم جواب میده ولی اون زنجیره واره بخوام انجامش بدم دیگه جواب نمیده خیلی پیچیده اش نکنیم بر اساس یه شرط سومی خب این هم از مرتب سازی

بریم سراغ سوال 3

سوال سوم .

خب یه کار دیگه هم میتونیم انجام بدیم و یه سوال تمرینی

من ناللان این جا از هش مپپ استفاده کردم توی اسکیژولبل تایمر و هر تیکش میاد این کار رو برای من انجام میده و این تسکه رو برای من ران میکنه و اجرا میشه و تمام میشه توی شبیه سازی ها خب من بینیش رو ایننطوری نوشتم نگاه کنین اومدمتوی لحظه ده

از 7 تا ده از ده هیچی نداریم تا بیست بعد از اون طرف از بیست تا بیست و پنج اون گپ بینش خیلی زیاده ولی من میخوا ولی از اون طرف باید منتظر شم یکی یکی این ها رو تمام کنه توی دنیای واقعیمون باید همینطوری باشه یعنی یه برنامه ای باشه که توی یه زمان خاصی باشه توی همون زمان انجام بشه

میخوام یه شبیه ساز بنویسم یه سیسیتمی رو تست کنیم نیازی نداریم که ده ثانیه واقعا وایسیم که ببینیم چی میشه فقط اینو میخوای که توی لحظه ده یه افتاقی بیتفه توی لحظه بیست یه اتفاق دیگه بیفته میخوای تست کنی نمیخوای که واقعا توی این زمان ها واقعی مثلافرض کن ساعت واقعی بیاد فرض کن ساعت سه و سی دقیقه بیاد یکار یکنههمچین چیزی رو الان نمیخوایم ما تو دنیای شبیه سازی شاید بخوایم کار کنیم

خب چطوری میتونم این گپ های بینشون رو حذف کنم ؟ و فقط داده هام اجرا بشن چیز دیگه ای اجرا نشه میتونم به جای اینکه از هش مپ ااستفاده کنم ناز اراایه استفاد کنم اما قبلش

بعد از اینکه این ها رو ریجستر کردم ااراایه ام رو بیام بر اساس تایم استمپ ها مرتبش کنم و بعد بیام توی هر تیک این ساعتی که میخوره یه دونه از این اجرا شه کامل هر تیکی که خورد بره مستقیم سر ده بعد مستقیم بره ده بعد مستقیم بره بعدی دیگه نیاد تیکه دونه دونه رو بزنه یهو بره ده

هش مپ رو کامنت میکنیم و ار ری لیست از نوع تسک رو مینت نویسمی

بعدش دیگه تو ریجسترم نمنیام تایم استمپ براش بذارم اینم کامنتش میکنم

میام میگم تسک دات اد تسک رو ادد کن هیمن دیگه تایم استمپش رو نمیذارم اما وقتی میخوام اجراش کنم قبلش میام دیگه به صورت تایمر هم نیمخواد براش در نظر بیگریم بگیم به صورت حالا یه تایمری باشه دیگه این طوری نمیخوام

حالا میتونیم تایمر هم بذاریم و هر کدام از اون تیکه هاش زمان رو داشته باشه میام از لیست یوتایل استفاده میکنم میتونیم از اون چیزی که تو خود جاوا هست استفاده کنیم و اما چون ما ارری لیستس رو نمیتونیم بپذریم نمیتونمن از این استفاده کنم پس من این رو فعلا بر میدارم از کالکشن سورت استفاده میکنم که داخل خود جاواست یه خورده دیگه بریم جلو تر سورت ارری لیست رو هم انجام میدیم میگم تسک ها رو بیا مرتب کن بر اساس این کمپریتور ولی این جا سه تا میگیره من باید سه تا بنویسم سه تا خروجی داره اینته مثل خودمون بولین نیست میگگم اگه او یک دات گت تایم استمپ چیز کوچیک تر پیدا شد ریتورن کن یک رو

بعد میگم الس ایف

این رو برعکسش میکنم و این رو هم منفی یک میدم

میگم یه بار مرتبش کن بعد بیا اسکیژول کن این تایمره رو خب حالا توی هر تیکش دیگه من نمیام از این شرط ها بذارم این شرط ها رو بر میدار همشان رو

میام یه شرط دیگه میذارم قبلی هارو همه کامنت میکنم خیلی راحت میگم تسک دات گت کلاک

دات ران و

دات گت تسک فینیشش و گت هندلر کلاک

این دیگه اون گپ هاش رو نشان نمیده هر کلاکش یه دونه تسک رو میخونه اون تسکه تایم استمپ هاش فرق داره دیگه هر کلاکش یه دونه تسک رو میخونه اون تسک تایم استمپ هاش فرق داره اما این کلاکه رو دیگ داره برای من اشتباه نشان میده کلاک واقعی اونی که من اینجا خودم تعریف کردم برا اینکه این رو درست بهم نشون بده این رو اینطوری مینویسم میگم این برابر با

حالا این جا ارور چرا داد ؟چون میگه کلاک اصن نداره من باید شرط بذارم اگر تسک دات کنتین اگه این رو داره

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







اینترفیسinterfaceioc3شی گرایی با جاواcomparable
دانشجوی کارشناسی کامپیوتر
شاید از این پست‌ها خوشتان بیاید