جلسه دهم >>ioc3

گفته از کانتر یعنی از این جایی که هست یعنی آخری ، بیا شروع کن تا زمانی که بیاد و برسه به این اندیس دواول i+1 رو یعنی خط 58 (مورد چهارم ) که به علاوه یک که میشه میاد یه خط پایین تر یعنی خط 59 وقتی میگه برابر با شیپ ای قرار بده یعنی بیارش خط 59خب الان چهار منهای یک شده و شده 3 حالا 3 به علاوه یک میشه چهارمیگه توی شیپ چهارشیپ ای رو قرار بدهیعنی به این صورت وبعد برای شماره دو هم همین کار رو میکنیمحالا اندیسمون چنده ؟ اندیسمون دو بوده اندیس bbb رو توی دو ذخیره اش کن . .خب بذاریه بار امتحانش کنیم من الان میام از این استفاده میکنم یه نمونه از شیپ ارری لیست در مین به اندازه 15 تایی میسازم چون متد گرو ندارم و بعد متد ادد استفاده میکنم و :یه چهار تا دیگه هم اضافه میکنمخب حالا میخوام یک دانه اینسرت کنم و میگم تو اندیس دو یه دونه مستطیل اضافه کنبعد از اینکه این ها انجام شدن کانترت رو باید یه دونه اضافه کنی چون یه دونه دانشجو بهش اضافه شدهخب الان من این رو یه لحظه اجراش میکنم ببینیم واقعا شیفتش میده یا چ : خب این الان ساخته شده نگاهش هم میکنیم هنوز هیچی توش نیست :این رو اضافه میکنه یه دونهدو تا سه تا و چهار تا خب الان این چهار تا اضافه شدنچهار تا دایره اضافه شدن توی این خانه ها . . .حالا میگه اینزرت کن میرم داخلش ببینم چه اتفاقی میفتهمیرم داخل ایندکسم ، ایندکسی که ازم میخاد چیه ؟ خونه دوم اندیس دوم این مستطیل رو قرار بده کوچیک تر از کانتره ؟ اره درستهپس میاد داخلمیگه از کانتر شروع کن تا زمانی که i که الان شده چهارتا زمانی که بزرگتر از اندیسه اس یعنی تا زمانی که بزرگتر از دو هست . ای رو یکی یکی کم کنخب میگه ای به اضافه یک که میگه بیا خونه پنجم الان اگگه شیپ رو نگاه کنیم یه لحظهخونه چهارم نداره ای چنده ؟اها کانتر رو باید یکی کمش کنیمکانتر سایزمونه یه دونه کمش کنیم میشه 3+1 که درسته . .خب بزار از اول اجراش کنم . .چون کانتر یه دونه داره اضافه میشماره وقتی . .. میکنی تهش یه دونه اضافه میکنهخب ببینید الان شیپ رو نگاه کنید :الان من گفتم توی خونه دوم باید بیاد رگتنگل رو برای من قرار بده خونه دوم اینجاست دیگه :یعنی الان این و پایینیش باید یه دونه برن پایینخب میگه از کانتر منهای یک شروع کن یعنی از 3ای از 3 شروع میکنهمیگه ای به علاوه یک یعنی خانه چهارمش که وجود نداره هنوز میگه این رو برابر با شیپ ای قرار بدهشیپ ای مون چنده ؟ این دایره است با شعاع چهار میگه اون آخری رو یکی ببر جلو خب الان ببینیم رفت ججلو یا ن :خب یه دونه رفت جلویعنی اینه دیگه این یعنی اینجا هم کپی شد الان خونه شماره دو رو هم باید بیارم ججای سومی خب یکی ازش کم کردهمساوی قبلل از ایندکس رو هم نذاشتم که باید میذاشتم پس دوباره اجراش کنیم . چون خود اندیسم باید یکی ببره جلو دیگه چند تا چیزه دیگه ، یه سری منها و مساوی این جور چیزا رو باید درست بذارینخب این الان دیگه باید درست باشهاون اولی رو برد حالا دومی دومی رو هم باید ببره پایین یه لحظه نگاه میکنم ببینم چه اتفاقی افتاده چهار امده اینجا هفتم اومده اینجاحالا تو خانه دوم باید مستطیل رو قرار بدم :خونه دوم یعنی اندیس دو رگتنگل و قرار میدمشیپ اینا رگتنگلدایره دایره مستطیل دایره دایره و قشنگ اینزرتش کرد بین اون ها یکی هم باید به کانتر اضافه کنم دیگهچون یه دونه آیتم جدید اینزرت شده درسته ؟فقط اون شرط گرو کردنش رو هم باید بذارید دیگه چون اگه جا نداشته باشه ارور میده ایندکس اوت اف باند میزنه یا اوت اف رنجخب امروز میخوام یه چیز بیش از اندازه مهم رو یعنی خیلی خیلی خیلی مهم رو یاد بگیریم یکی از زیبا ترین و قدرتمند ترین ابزار هایی که توی شی گرایی باهاش کار میکنیم و به شدت جالب و عالیه در واقع تکمیل کننده تمام چیز هایی هستش که تا الان یاد گرفتین اما خب خیلی چیز جالبیه خیلی به شدت کاربردیه و توی خیلی از برنامه هاتون میتونید ازش استفاده کنید .چیز هایی که بتهتون میگم وابستگی به جاوا نداره من فقط دارم با جاوا میگمش چون جاوا خیلی زبان جذابیه آدم خیلی راحت میتونه باهاش کار انجام بده ادم خیلی چیز های حرفه ای و و مثلا ابزار ها و امکانات جالبی داره و سبک کد نویسیش مرتب و منظم هستش . اما این مطالب که بهتون میگم به هیچ عنوان وابستگی به جاوا نداره . این چیزا که درباره ioc و اینجور چیز ها دارم بهتون میگم اتفاقا خیلی خیلی بیشتر توی طراحی وب سایت ها ازش استفاده میکنن مخصوصا اون هایی که asp.net اگر اشنایی داشته باشن این واژه ها رو خیلی شن یدن اگر اشنایی داشته باشن دپندنسی اینژکشن و .. برین یه فیلم اموزشی خارجیش رو نگاه کنین ببینین درمورد چی داره حرف میزنه .. .همش درباره همین مفاهیم هستش . .خب بریم برای ioc3 چه ابزار هایی دارم برای تعریف مسئله تا اینجا چی رو یاد گرفتیم شما به من بگین تا اینجا برای تعریف کردن یه موجودیت چی رو داریم؟که بعدا در قابل ioc1 و ioc2 و اینا معرفیش کردیم ؟انتزاع حالت کلیشه دو تا چیز بهتون گفتم وقتی میخای یه چیزی رو تعریف کنیم چی میگیم با اون واژه های مفهومی که بهتون گفتمجواب : has a و is a این عمومی سازی و اینجور چیز ها این ها چیز هایی هستن که هدف ما هستن اما برای تعریف یک موجودیت دو تا چیز خیلی مهم داشتیم یا اینکه یه سری ویژگی داره یا یه سری ویژگی دیگه رو از یکی به ارث میبره یه سری ویژگی رو خودش داره که میشه has a یه سری ویژگی رو به ارث میبره میشه is a مثلا میخای بگی تلویزیون چیه میگی تلوزیون فلان ویژگی ها رو خودش داره و یه سری چیز های دیگه هم از طریق is a به ارث میبره مثلا میگیم تلوزیون یک وسیله الکترونیکی است ، این میشه اون is a اش نمیای دیگه جزییاتش رو بگی خازن داره مقاومت داره و . . و هزار چیز ریز داخلش رو بگی میگی تلوزیون is a وسلیه الکترونیکی و has a یه سری ویژگی های خاص خودش این چیزیه که ما توی دنیای واقعی مون داریم علاوه بر این یه چیز دیگه هم داریم و واسط یا همان اینترفیس پس یکی اینکه یه سری ویژگی ها رو داره یه سری ها هم is a داره میگیره یه جاهایی واسط داره بین دو موجودیت از چه لحاظ ؟یکیشون باید یه گذرگگاه بذاره و اون یکی از طریق اون واسط به این ارتباط برقرار میکنه مثال دنیای واقعیش چیه ؟ مثال دنیای واقعیش گوشی ها و وسیله های برقی که داریم درسته ؟ تلفنتون مثلایوزر اینترفیس یعنی واسیط بین کاربر و اون برنامه تون این هم همون مفهوم واسط هستش اما این واسطی که ما میخوایم در نظر بگیریم واسط بین موجودیت هاست اون واسطی که اسمش یوزر اینترفیسه واسط بین من کاربر و یک برنامه کامپیوتریه حالا من میخوام واسطی رو در نظر بگیرم بین موجودیت ها بین دو موجودیت از دو دنیای مختلف من و برنماه کامپیوتری هم از دو دنیای مختلفیم دیگه من یه انسانم و اون هم یه برنامه کامپیوتری هستش واسط یعنی یه چیزی که بین من انسان که از یه دنیای دیگه هستم و اون برنامه کامپیوتر که دنیای خودش رو داره یه ارتباطی برقرار میشه حالا من میخوام بین دو تا موجودیت از دو تا دنیای متفاوت همچین ارتباطی رو برقرار کنم سیستم عامل هم مثال خوبی در این زمینه است .که واسطی است من میتونم از طریق سیستم عامل بی نهایت برنامه مختلف رو از روی سخت افزار اجراش کنم دقیقا میشه یه واسط حالا تو دنیای واقعیمون چیه ببینید شما وسیله های برقیتون مثلا به تلفن تون میگین برق داره ؟یا تللویزون تون برق داره ؟ نمیگین برق داره میگین تلویزیونتون از طریق یه واسطی برق میگیره و ازش استفااده میکنه وصله به برق با برق کار میکنه ولی برق نداره ک خودش برق جز تلوزیون تون نیست تلویزیونتون اون ساختارش چیزی که میسازدش یه سری وسیله های الکترونیکی هستن و یه سری چیز های مختلف اما برای اینکه کار کنه به برق نیاز داره یعنی به یک دنیای متفاوت از طریق چی ؟از طریق واسط پریز برق و سوکت شارژر پس تلفنتون یا تلویزوینتوون یه سوکت داره میشه گفت یه دونه سوکت داره که از طریق اون سوکت از طریق یه پریز وارد گوشی شما میشه دنیا هاشون کاملا متفاوته و ربطشون اینه که من از این میتونم تو این یکی استفاده کنم. بی نهایت تلفن مختلف دارید از اون طرف بی نهایت روش مختلف داریم برای تولید الکتریسیته یکی توربین بادی و دیگری انرژی گرمایی زمین و . . . هزاران شکل مختلف تولید اکتریسیته میتونید داشته باشید از اون طرف بی نهایت حالت مختلف برای وسیله های مختلف الکترونیکی داریم که میتونن از برق استفاده کنن تلوزیونه یخچاله موبایله کامپیوتره هزاران چیز مختلف دیگه اینا چطوری با اون دنیا ارتباط برقرار میکنن فقط از طریق یه سوکت و یه پریز این میشه واسط بین اون دو تا دیگه به من ربطی نداره که پشت اون پریزه چیه از توربین بادی میاد یا هسته ای میاد اصن به من ربطی نداره من برام مهمه از طریق این گذرگاه برق وارد سیستمم میشه درسته ؟فقط یه سری قانون برای من مهم هست یه دوشاخه باید داشته باشیم به اون اندازه ای که مثلا فرض کن از اینجا تا ااینجاا اندازه اشه از این ور هم گوشی موبایلم مثلا یه سوکت داره و سوکتش این شکلیه و . ..اگر این قوانین رو داشتی دیگه به من ربطی نداره که از کججای دنیا داری میای اصن نیازی ندارم بدونم که از کجا میای حالا من میخوام داخل کامپیوترم وبین آبجکت های شی گراییم همچین رابطه ای برقرار کنم همچین واسطی برقرار کنم یه همچین چیزی داشتیم تقریبا درسته ؟داخل مثلا اسکیژولر بود دیگهاینجا من الان یه تتسک اینجا گذاشتممیتونم هزاران شکل مختلف تسک رو بفرستم داخل و یه سری قوانین روش تعریف کردم باید حتما این گت تایم استمپ رو که داره باید حتما ران خودشون رو پیاده سازی کننحق ندارن از خود نوع تسک نمونه بفرستن تو این قوانین رو تعریف کردم گفتم ولی باید زیرمجموعه تسک باشه اما کسی حق نداره از خود تسک نمونه بسازه ابسترکتش کردم و و حتما باید ران رو هم خودشون پیاده سازی کنن مشکلش چیه این یه همچین چیزی انگار هست اون واسطی که میگیم انگار هستمشکلش اینه که به اندازه کافی عمومی نیست باید حتما حتما زیر مجموعه تسک باشن یعنی باید تسک باشنیعنی باید حتما حتما این ویژگی ها رو هم به ارث ببرن یه کلاس باید باشه یعنی یه آبجکت یه نوع داده هست در واقع یعنی باید حتما زیرمجموعه این کلاسه باشن پس به اندازه کافی عمومی نیست برای من و از لحاظ مفهومی هم درست نیست من میخوام یه مرحله این رو عمومی ترش کنماما قوانین هم داشته باشم . عمومی تر باشه اما قوانین روش تعریف شده باشه مثلا فرض کن توش دانشگاه رازی فقط استودنت ها میتونن برن توش ازمایشگاه درسته؟باید حتما ااستودنت باشن اما یه سری قوانین هم روشون تعریف میشه مثلا سر کلاس پیشرفته باید استودنت های رشته کامپیوتر وارد بشن ما به این میگیم استودنت هایی که حالا قوانین هم روشون تعریف شده باید حتما کامپیوتری باشن اما استودنت باشن یا مثلا فرض کن سالن مطالعه سالن مطالعه فقط میگیم استودنت ها بیان دیگه فرقی نداره که استودنت کدام رشته باشه . . قوانینی نداره مث همون ioc2.1 هستش اما مثلا فرض کن میگم چی فرض کن خیابان ها رو در نظر بگیریم میگیم توی این خیابان ها هم انسان ها میتونن حرکت کنن هم ماشین ها اما قوانین وجود داره باید قوانین شهری رو رعایت کنن مثلا یکی از قوانین ما این است که توی خیابان اشغال نریزیم ولی قوانینه دیگه امافرقی نداره که از کدام نوع است یه مکان عمومی تره اما قوانین هم روش تعریف شده دانشگاه یه مکان نیمه عمومی بود و باید حتما یه زیرمجموعه کلاس خاصی ورود پیدا میکرد اما اینجا اینطوری نیست همه کس میتونن رفت و امد کنن ماشین میتونه بیاد موتور میتونه بیاد ادم میتونه بیاد حالا یه سری قوانین هم در نظر گرفته میشهبرگردیم به مثال برق مییگم تو این پریز برق فقط و فقط کافیه که دوشاخه داشته باشه دیگه از اون ور وصلش میکنی به خودت وصلش میکنی به کامپیوترت وصلش میکنی به گوشیت یا یخچالت به من ربطی نداره واسط رو رعایت کن دیگه هر کاری میخای باهاش بکن دو شاخه داشته باشن حالا تو خودت رو بزن به برق برق بگیردت به من ربطی ندارهاما کجا به یه همچین چیزی نیاز دارم ؟من داخل اسکیژولبل تایمر من میخوام تسک بیاد داخل واقعا نمیخام که هرچی بیاد داخل پس کاری به این نداریم .بجای میخام یه مثال دیگه بزنم مثال دیگه ام چیه ؟ میخوام مرتب سازی عمومی بنویسم مربت سازی عمومی یعنی چی ؟یعنی هرچی که بهش بدی میتونه مرتب کنه پکیج سورت رو براش در نظر میگیرم و میام یک کلاس براش مینویسم به اسم سورت خب حالا سورت میخاد چی رو مرتب کن ؟ وقتی که میاید سورت رو بررسی میکنید میبینید که ... فرقی داره که تو میخای لیوان مرتب کنی یا مثلا خودکار ها رو مرتب کنی بر اساس رنگ یا بر اساس جنس یا لیوان ها رو بر اساس اندازه انسان ها رو مثلا بر اساس معدل دانشگاهیشون نمیدونم بر اساس سنشون سگ ها رو بر اساس نژادشون فرقی داره که بر اساس چی میخای مرتب کنی ؟ هیچ فرقی نداره اینجا پس نباید بیام زیرمجموعه کلاس خاص رو در نظر بیگرم اگه اون طوری بود خب کلاس آبجکت رو میذاشتم و میگفتم بیا اما ابجکت به شدت عمومی هست هیچ قوانینی براش تعریف نشده اینی که الان میخوایم در نظر بگیریم یه جورایی ابجکته اس اما قوانین روش میذاریم میگیم هرکی باید عیب نداره مشکلی نداره اما یه سری قوانین باید داشته باشه قانونی که برای مرتب کردن نیاز داریم به نظر شما چیه جنس و نوع و ایناش رو که گفتیم اصن ربطی نداره من میخوام دایره باشه مانیتور باشه حیوان باشه انسان باشه هیچ فرقی نداره نوع و جنسش هیچ فرقی نداره يه چيزي كه ميخوام تو اين آبجكت ها ميخوام مقايسه شون كنم بايد وجود داشته باشه قانونش به نظر شما چيه كه من بتونم يه چيزي رو مرتب كنم5 تا ليوان به شما ميدم ميگم مربتشون كن چطوري ميتوني ليوان ها رو مرتب كني ميگم بر اساس اندازه همين كه قابل مقايسه باشن كافيه اصن ربطي نداره كه ابه ليوانه حيوانه يا هرچي كه باشه فقط بتوني با هم مقايسه شون كني بر اساس پارامتر قابل مقایسه مثلا من گفتم دیگه مثلا یه قابلمه با یه لیوان این دو تا رو میتونم بر اساس چی مقایسه شون کنم ؟ میتونم بر اساس ارتفاع مقایسه شون کنم بگم این دو تا رو بر اساس ارتفاع میخوام مقایسه شون کنم فقط همین برای من کافیه که قابلیت مقایسه رو داشته باشه اما فعلا تو این چیزی که میخوام در نظر بیگریم نوعش رو هم باید از یک نوع باشند (فعلا نوع را نیز در نظر میگیریم )باید قابل مقایسه باشند . خب حالا قابل مقایسه بودن رو من چطوری تعریف میکنم ؟فقط واسطش برام مهمه باید یه گذرگاهی داشته باشم الان یه لیستی از آبجکت هام رو میخوام مثلا از نوع ارایه هم باشه مثلا اسمش رو میخوام بذارم آیتمز این نوعش رو هم الان باید مشخص کنم من یه لیستی از آیتم ها لازم دارم که بعد این آیتم ها رو مرتبشون کنم با یه مثلا فرض کن چی بذاریم پرفورم مثلا یعنی شروع کن عمل کن وحالا اینجا باید چی انجام بدم ؟ مرتب سازی رو باید انجام بدم دیگه قبلا مرتب سازی رو چطوری انجام میدادیم ؟فرض کنیم میخوام از نوع استودنت میخوام اننجامش بدمخب پس الان من باید یه ستر براش بذارم و یک گتر و سازنده هم براش بزنم که لیست رو بگیره دیگه بعد میخواستم مرتبش کنم یه همچین کدی مینوشتم و یه حلقه ساده مینوشتیم . و یه دونه دیگه دوباره حلقه میخوام خب بعدش شرط میذارم اگر آیتم های i ام کوچیکترشون پیدا شد توی آیتم های j ام بر اساس یک پارامتری الان میایم و مینویسیمش بیاد چیکار کنه؟ تمپ رو برابر با آیتم آی ام قرار بده آیتم آی ام رو برابر با آِتم جی ام قرار بده و ایتم جی ام رو هم برابر با تمپ قرار بده بر اساس چی ؟اینش مهمه مثلا من اینجا میگم بر اساس اوریجشونمشکلاتش رو بیایم با هم بررسی کنیم ببینیم که واقعا چقدر مهمه که بتونم از یه گذرگاه عمومی تر استفاده کنم مشکلاتی که داره چیه وابستگی سورت چیه به نوع داده وابسته است یک و مشکل پارامتر مقایهس ای دارهیعنی اگه بخوام بر اساس یه چیز دیگه ای مرتب سازی انجام بدم مثلا:اگه بالایی پرفورم بای اوریج باشه و پایینی پرفورم ای دی باشه یعنی برای هر کدام از پارامتر ها م باید بیام و یه متد بنویسم که بر اساس پارامتر های مختلف بیاد برای من مقایسه انجام بده که این سخته که بیام این ها رو تغییر بدم ولی این ها یه دونه نوع داده است اگه کلی نوع داده مختلف داشتم اون موقع چیکارش میکردم اون موقع بر اساس چی این ها رو مقایسه میکردم یا اگه چیزی باهش اضافه میکردم باید کلی اینجا تغییرات انجام میدادم پس یه چیز اشتباهه پس الان وابستگی یکی نوع داده اشه و یکی هم پارامتر مقایسه ایمه خب برای حلش چیکار میکنیم ؟ برای حلش از کلاس انتزاعی استفاده میکنیم این راه حل اول مون بجای اینکه بیایم از این ها استفاده کنیمیه کلاسی هم تعریف میکنم به اسم پرسون مثلا خب وقتی پرسون رو تعریف کنم یکمی حل میشه تا اندازه خوبی وابستگی اش از بین میره اما خب بازم مشکلاتی هنوز دارم مثلا اگه بخوام دایره تعریف کنم چی استودنت و دایره رو چطوری زیر مجموعه یه کلاس بذارم اصلا کلاس مشتری نمیتونم براشون در نظر بگیرم مگه مثلا بذارم آبجکت و آبجکت هم دیگه خیلی خیلی عمومیه و به کارمون نمیاد پس نمیتونم از سطج 2.2 استفاده کنم به چیز بهتر احتیاج دارم به این نیاز دارم که کلاس هام رو به نوع وابسته نکنم وابسته به این نکنم که از چه نوعی داره میاد داخل فقط قانونه برام مهم باشه قانونم چی باشه؟ این آیتم هایی که میاد داخل قابل مقایسه باشن قابل مقایسه بودنشون یعنی چی یعنی منبجای اینکه این طوری بنویسمش و بگم مقایسه کن این ها رو نمیتونم به نظرتون این طوری بنویسمش به نظرتون ؟ بگم که داخل این آیتمه یه متدی وجود داشته باشه به اسم کمپیربگم این آِیتم آِی مثلا فکر کن ترو فالس به من پس بدهاینی که اینجاست همین کار رو برای من انجام میده و این رو ببریم داخل متد و بجای اینکه گت اوریج و گت آی دی و گت چیز های مختلف داشته باشیم اینطوری نباشه و یه دونه متد مشترک براش در نظر بگیرم به اسم کامپیر داخل اون کامپیره بیام و بگم بر اساس اوریج انجام بشه یا چیز های دیگه مثلا بیام اینطوری بنویسمش :بعد بیاماینی که الان اینجا نوشته بودم رو بیارم داخل متد و بگم اس یک رو بر اساس اوریج و اس دو رو هم بر اساس اوریجج و بعد این ها رو ریتورن کنو یعد دویازه برم در داخل شرط و بگم کمپیر کن ایتم ای رو و ایتم جی رو درسته؟ میتونم این رو هم بنیوسم دیگهمیتونم این متد رو بذارم و بعد این کار رو انجام بدم یه کار دگیه هم میتونم انجام بدم بجای اینکه متد کمپیر رو تعریفش کنم بگم ایتم هایی که میان داخل خودشون کامپیر داشته باشن دیگه تو الان میتونی بنویسی در داخل متد گت ای دی یا گت هرچی و بجای اینکه اینطوری بنویسمش میگم ایتم خودش کمپیر داشته باشه که مقایسه بشه با یه نوع کمپیر دیگه و این رو اینطورینداشته باشه مثلا خب اینطوری بنویسمش که بگم این ایتم هایی که میان داخل کمپیر داشته باشن الان چی رو حذف کردم ؟پارامتر مقایسه ای رو در داخل سورت حذف کردم کجا منتقلش کردم ؟به خود ایتم ها منتقلش کردم به همین سادگی اما چطوری حالا بیام بگم که باید هرکی وارد این سورت ها میشه کاری ندارم که نوعش چیه فقط کمپیر داشته باشه . .. .میام به صورت اینترفیس مینویسمش میام اینجا راست کلیک میزنم و نیو و جاوا کلاساینترفیس رو انتخاب میکنم و اسمش رو میذارم کمپیربل ، قابل مقایسه به من ربطی نداره کلاس چیه هر نوعی که هست این رو مینویسم قانونم چیه ؟ قانونم اینه که باید حتما کمپیر داشته باشم و بولین پس بدنو یه ورودی از خود کمپیربل هم بگیرن میگم باید کمپیربل باشه بولین پس بده یه دونه کمپیربل هم بگیره چرا چون این رو میخام دیگهخودش کمپیر داشته باشه و یکی هم از خودش بیاد داخل که بتونه مقایسه اش کنه همین . این میشه یه اینتر فیس داخل اینتر فیس یه سری شرط و قوانین وجود داره نمیتونی فیلد تعریف کنی نمیتونی دسترسی پرایوت و پابلیک و این چیزا براش در نظر بگیری پابلیک اصن بذاری فرقی نداره پرایویت و این جور چیزا توت یه شرایط خاصی میشه ما کاری به این چیزاش نداریم تو اینترفیس های کلاسیکی که وجود داره تو شی گرایی نمیشه تعریف کرد اما تو جاوا میتونی یه سری چیزا رو پرایویت و استاتیک و اینجور چیزا تعریف کنی من فعلا بحثم اون کلاسیکه اس بعدا حالا میتونین پیشرفته تر خودتون یه سری چیز هاش رو یاد بگیریناین کلاس نیست واسطه هیچی نمیخواد براش بذاری هیچ چیزی براش نمیذاری و فقط همین جوری مینویسیش نمی تونی داخلش فیلد تعریف کنی نمیتونی متغیر تعریف کنی این جور چیزا رو نداریم داخل اینترفیس ها توی حالت کلاسیکش دارم صحبت میکنم حالا توی جاوا یه سری چیز های اضافه براش در نظر گرفتن من اون حالت کلاسیکش رو میگمالان این هیچ نوع خاصی نیست چرا نمی تونی اون فیلد و اون چیزا رو تعریف کنی؟ الان بهتون میگم که چرا اصن نباید تعریف بشهخب الان من این رو اینطوری تعریفش کردم پس میتونم در داخل سورتم بیام و بگم اینا استودنت نباشن کمپریبل باشنپس صدرصد مطمیئنم همشون کمپیر دارن به من ربطی نداره که چه آبجکتی هست فقط کافیه که کمپیربل باشه و کامپیر داره و این مرتبش میکنه برای من و دیکگه نمیخاد avg باشهاین شد گذرگاهم حالا از اون طرفاین هم همان دانشگاه اس دیگه یه ابزاری که که میخاد به نوع داده اولیه ام مثل استودنت یا بقیه داده هام کار کنه این اون ابزاره اس این اون دانشگاهه اس یا اون خیابونه یا اون دنیای برق و الکتریسیتهواسط براش در نظر گرفته واسطش چیه ؟ کمپیربل ، کمپیربل همون پریز برقه اس برای من فرقی نداره از کدام دنیا چی میاد داخل فقط کافیه دو شاخه داشته باشه یا کمپیر داشته باشه همین برای من کافیه چظوری ازش استفاده میکن م؟ میام تو استودنتمیخام از نوع سورتت یک کلاس تعریف کنم بگم سورت مساوی با نیو سورت مثلا یه لیستی از دانشجو ها رو داشته باشم و استودنت رو از نوع ارایه تعریفش میکنم و نمونه سازیش میکنم و مقدار ده بهش میدم و یه حلقه میزنم و چند نمونه از استودنت رو میسازم .خب این الان دانشجو هامه حالا من میخوام چیکار کنم ؟میخام این رو بدم به سوت و بگم برای من مرتبش کن اما این الان قبولش نمیکنهاما این مرتب نمینکنه چرا چون استودنت ها براش قابل مقایسه نیستن میگه تو برام بگو اینا چطوری قابل مقایسه ان من باید بیام داخل استودنت و بگمبه این شکل که در پایین میگویم قابل مقایسه است مثلا میدونید که بر اساس معدل قابل مقایسه اند اما کامپیوتر که فهم نداره من باید بهش بگم که بر اساس چی قابل مقایسه است میگم استودنت ایمپلمنت نمیگم اکستند ها قبلا میگفتم اکستند اینجا باید بگیم ایمپلمنت کمپیربل وقتی کمپیربلش میکنه خب تو وقتی کمپیربل هستی باید حتما کمپیر داشته باشی باید ایمپلمنت متد بزنم و این رو کمپیر کنم خب بعد میگه خب تو اگه کامپیربل هستی باید حتما کمپیر داشته باشیباید ایمپلمنت متد بزنم و این رو کمپیر کنمبعد حالا این جا باید بیام بهش بگم که چطوری مقایسه کن خب الان داخل استودنت ام اصلا ربطی به سورت ندارم داخل استودنت هر تغییری بدم داخل خود ابجکتمه میام میگم این ها رو بیا دیس دات گت اوریج رو مقایسه کن با اون کامپیربله چون از یک نوع هستنچون ایتم هام ارایه ان دیگهاگر من ارایه فرستاده باشم داخل هردوتاشون از یک نوع اند حالا البته اینجا یک مشکلاتی داره ها باید این رو محدودش کنمالان ممکنه یه ججاهایی اشتباه هایی باشه مثلا من یه لیستی از استودنت و سیرکل داشته باشم و بفرستم تو یه اروری بهم میده فعلا اون مشکلش رو حالا در نظر نگیریم باید یه گام بریم جلو تر که اون رو هم حلش کنیم ولی فعلا حالا اونطوری در نظرش میگیریم فرض میکنیم کاملا مشکلی نداره و درستهو این خب کستش میکنم سی رو کست میکنم به استودنت که بتونم به فیلد هاش دسترسی داشته باشم یادتونه بهتون گفتمسی رو کست میکنیم به استودنتو گت اوریجش میگم استودنت اینطوری قابل مقایسه است بهش میگم میگم اینطوری قابل مقایسه است ربطی به استودنت نداره هاربطی به استودنت نداره ها این استودنتمهولی اینطوری قابل مقایسه است .اصن ربطی بهش نداره حالا این جا ارورش رفع میشه به همین سادگی و زیبایی الان اگر اجراش کنم به راحتی اجراش میکنهاگه همین رو اینطوری برای دایره ها بنویسمشحالا میخوام این ها رو مرتب کنم بعد از اینکه این کار رو انجام دادم بعد از اینکه این کار رو انجام دادم برام استودنت رو مرتب کرده میگه سورت دات ست کن آیتم هات رو عوضشون کن و سی لیست رو بگیر و بعد دوباره سورت دات پرفورمحالا میرم سیرکل رو هم کامپیر بل میکنم میگمالان این قسمتش جالبته من یک اکستند دارم میتونم اینمپمنت هم انجام بدم میگم اینپلمنت کن کمپیربلاگر کمپیربل هستی باید حتما کمپیر داشته باشی خب کمپیر رو هم اضافه کن و میاد اینجامیگم بر اساس مساحخت برام مرتبش کنمیگم سرکلمم اینطوری قابل مقایسه اس و حل میشه حالا یه سورته که هم استودنت برای من مرتب میکنه هم سیرکل برای من مرتب میکنه هم هرچیز دیگه ای که کمپیربل باشه میتونه مرتب کنه نکته های مهمش رو جلسه بعد خیلی کامل تر میایم و بررسیش میکنیم فعلا تا اینجاش رو تو ذهنتون داشته باشین و یه خورده باهاش کار کنین ججزیات کمپیربل اینکه چه چیز هایی رو باید در نظر بگیریم چطوری من میتونم با کلاس های انتزاعی مشترکش کنممثلا مثل اینجا چرا نمی تونم یه کلاس شیپ انتزاعی بیشتر درست کنم اما در کنارش هرچقدر که میخوایم اینترفیس رو ایمپلمنت کنیم شما میتونید ده تا اینترفیس ایمپلمنت کنید اما یه دونه کلاس میتونی اکستند کنی این ها رو میتونی روز چهارشنبه با جزیات کامل بررسی کنیم و کلی مثال حل کنیم روز چهارشنبه کلی مثال در مورد اینترفیس ها حل میکنیم فعلا تا اینجا رو تو ذهنتون داشته باشید این فوق العاده مهمه خیلی مهمه و حتما خیلی خوب یادش بگیرید کلی کار ها رو میتونید باهاش انجام بدین من هیچی دیگه تغییر نمیدم اینجا من هیچی تغییر نمیدم اینجا دیگه الان میخوای استودنت رو تغییر بدی میای تو استودنت و پارامترش رو عوض میکنیهرچند هنوز مشکلاتی دارهاینم بهتون بگم هنوز مشکلاتی داره