جلسه سیزدهم >>ادامه ioc3 این قسمت حلقه فور ایچ و جزیئات..

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