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