جلسه پانزدهم >>پراپرتی ها و ایتریتور  و همچنان ادامه پروژه

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