قسمت سوم : ای او سی سطح یک ، دپندنسی اینجکشن و اینورژن اف کنترل

نیمه دوم این پست قسمت تعیین کننده و نهایی یادگیری این سطح است.در قسمت سوم از آموزش شی گرایی در جاوا به سراغ ioc 1 رفتیم و پروژه را با سطح یک از سطوح ای او سی نوشتیم .این یعنی شما با مطالعه این پست ای او سی سطح یک را با ذکر مثال فرا میگیرید . همچنین راه کوتاهی برای ایجاد ستر و گتر و سازنده هم گفته شده . با دیاگرام مرحله به مرحله پیشرفت کد را زیر نظر داریم و میبینیم که چگونه وابستگی را در این سطح در حد ظرفیتش ، کاهش میدهیم . محدود سازی ها را به عنوان ریز مسئله باید به صورت متد بنیوسیم .و آنها را پرایویت میکنیمما میتوانیم چندین سازنده مختلف را داشته باشیم با پارامتر های مختلف. مثلا میتوانم سازنده ای داشته باشم که فقط id را بگیرد .لازم به ذکر می باشد که وقتی به صورت دستی سازنده ای را تعریف میکنیم ، سازنده ای که خود برنامه در نظر داشته به طور مستقیم در نظر نمی گیرید و اول می آید به سازنده ما نگاه می اندازد . و کاری به سازنده پیش فرض ندارد . همه کلاس های جاوا در کلاسی به اسم OBJECT هستش که وقتی سازنده نسازیم جاوا به این قسمت رفته و سازنده پیشفرض را می آورداین سازنده دوم هستش و پایینی هم سازنده اولی لازم به ذکر است که وقتی دو تا سازنده می سازیم و مثلا در مین میخواهیم شی ID را صدا بزنیم باید حتما به آن مقدار بدهیمخب الان میخواهیم تاریخ تولد هم به این کار اضافه کنیم کلاسی تحت عنوان Date تعریف میکنیم . روز و ماه و سال را تعریف میکنیم برایش و برای همه این 3 تا ستر و گتر میذاریم .دکمه های alt و insertرا باهم میگیریم و از این طریق ستر و گتر را با هم برای هر سه تا متغیر انتخاب میکنیم و برایشان میسازیم . به این صورت نیازی نیست که برای هر کدام از این متغیر ها به صورت دستی ستر و گتر ها را بنویسیم .همانطور که در پایین مشاهده میکنید وقتی که می خواهید عدد را وارد کنید به شما میگوید که میخواهید از کدام سازنده استفاده کنید ؟سازنده ای که تک پارامتری و فقط شامل ID می باشد یا اینکه سازنده بعدی ؟ !خب بگذریم الان میخواهیم که تاریخ را اضافه کنیماتفاقی که میفته اینه :برای سازنده هم از همین روش حرکت میکنیم و گزینه اول را انتخاب میکنیم.public Date(int d, int m, int y) { this.d = d; this.m = m; this.y = y; }این هم نمایی از کانستراکتور یا همان سازنده هستش که ما اینو تغییرش میدهیم مقداری و به این صورت مینویسیمش :بعد میریم در داخل کلاس استیودنت از کلاس date که ساختیم استفاده میکنیم .اینی که الان ساختیم نمیشه بهش مقدار بدیم چون که متغیر آدرس حافظه است و برای اینکه بشود به آن مقدار بدهیم باید new و .. را جلویش انجام دهیم .اما این کد هم وابستگی داره .من می آیم و در مین یه student دیگه تعریف میکنم :هرچی دانشجو در این قسمت تولید کنیم همه و همه یعنی 100 درصدشون در تاریخی که در کلاس student نوشتم ، به دنیا آمده اند . یعنی :و هیچ راهی نداریم برایش که تغییرش بدهیم . خب برای بررسی چرایی این ماجرا ما از دیاگرام استفاده میکنیم .روش بالا آوردن دیاگرام به این صورت بالا هستش .خب ما آن را باز کردیم و دکمه سنجاقک را میزنیم و وابستگی ها را نشان می دهد.در این دیاگرام اون خط که تهش لوزی داره به معنای has a می باشد .به این صورت که در عکس بالا مشاهده میکنید .و به این معناست که استودنت ، تاریخ را دارد . و فلش بغلش هم هست که رابطه creat می باشد و یک رابطه خیلی سفت و سخت می باشد . که به آن رابطه نمونه سازی می گویند . که داره میگه student خودش داره یه دونه نمونه می سازه.و رابطه خیلی سنگینی هستش . و خود کلاس student داره یه نمونه می سازه . پس یعنی صدرصد نمونه هایی که داره ساخته می شه اون نمونه ای که داره این رو می سازه رو داره ( این جا رو خوب متوجه نشدم و صرفه چیزی که گفته شد در ویدیو رو نوشتم )حالا اگه این تاریخ را برداریم در دیاگرام چه اتفاقی می افتد ؟رابطه اش کلا حذف می شه .خب پس اولین کاری که باید انجام بدهم اینه که وابستگی کلاس استویدنت را به نمونه حذف کنم . کلاسم نباید به یک نمونه وابسته باشه .تا حد ممکن البته ، یه جاهایی ممکنه لازم باشه که وابستگی وجود داشته باشه .اما خیلی از جاها باید تا حدی که امکان داره وابستگی به نمونه را حذف کنم . و جایی که دارم ازش استفاده میکنم اون نمونه روبراش بفرستم .وابستگی را حذف میکنم و وابسته اش میکنم به متغیر ادرس حافظه به این صورت :یعنی از این صورت :به این صورت پاییین در میاوریمشالان می ریم و دیاگرام را بالا می آوریم :و میبینید که وابستگی از بین رفته است .اما به یه واسط نیاز داریم .و میایم و ستر و گتر برایش ایجاد میکنیم .ستر و گتر را برایش ایجاد کردیم حالا بریم سراغ دیاگرام :همان طور که می بینید یک وابستگی ضعیف و بدون کرییت برایش شکل گرفت .حالا چطوری انتقال بدم ؟ از بیرون این کار رو انجام می دهم . در تابع مین و فراخوانی کلاس date سازنده را در استیودنت برایش می سازیم و بعد در پارامتر ها ای استیودنت در تابع مین تاریخ را اضافه میکنیم .اضافه کردن date :نوشتن تاریخ ها در استیودنت هایی که ساخته ایم در مین کلاس .حال به دیاگرام بپردازیم :قبلا student ، date را می ساخت حالا مین این رو میسازه و میفرسته به studentبه این کار میگوییم اینورژن آف کنترل یعنی وظیفه نمونه سازیش را بیرون انجام دادم.به این قسمت هم دپندنسی اینژکشن میگوییم .یا همان تزریق وابستگیبه این قسمت هم دپندنسی اینجکشن میگوییم .یا همان تزریق وابستگیاولش وابستگی سفت و سخت به نمونه داشتیم . نمونه را برداشتیم به متغیر ادرس حافظه ای که عمومی تره وابسته اش کردیم اما از اونجایی که کدی که عمومی تره به تنهایی به دردم نمیخوره من باید تزریق وابستگی کنم وابستگی رو تزریق میکنم میشه یه نمونه کامل .من برای اینکه نمونه رو کامل کنم باید وابستگی رو ایجاد کنم اما این وابستگی کجا ایجاد شود خیلی مهم است . این اولین گام عمومی سازیمان بود که به آن میگوییم عمومی سازی سطح یک.تعریف Ioc1 حذف وابستگی به یک نمونه و ایجاد وابستگی به متغیر آدرس حافظه است .