سلام ، دوستان من چیز خاصی از مفهوم شی گرایی و چندریختی و وراثت و کپسوله سازی نمیدونم
اگه کسی میدونه لطف کنه ، یه کد بذاره و روش یه توضیح بده که من متوجه بشه
من این هفته باید کنفرانس بدم ، خواهشا کمک کنید
یه کد بذارید که همشو داشته باشه بعد بگین کدوم قسمت برا چشه
مرسی
کد:
public class Parent {
public int parentInt;
public void myMethod(){
System.out.print(parentInt);
}
}
public class Child extends Parent{
private int childInt;
public void myMethod(){
System.out.print(parentInt + childInt);
}
public static void main(String[] args){
Child c = new Child();
}
}
کد بالا به زبان جاوا نوشته شده، اگه یه کم نامفهومه عذر میخوام چون خودم نوشتم و از اینترنت نیست.
به هر حال بریم سر اصل مطلب:
مفهوم شی گرایی رو اگه بخوای ساده بگی خیلی عجیب غریب نیست، اما با همین مفهوم میشه مانورهای زیادی داد.
ببین ما میایم و یه دسته رو به عنوان کلاس در نظر میگیریم، مثلا : کلاس دانش آموزان، کلاس اساتید، کلاس لپتاپ ها، کلاس تلویزیون ها و ...
اما حالا که ما یه چیزی داریم به اسم کلاس لپتاپها، تکلیف لپتاپ من چی میشه؟ آیا میشه گفت لپتاپ دراگو هم همون کلاس لپتاپ ها هست؟ نه. پس تکلیف لپتاپ من چی میشه؟ لپتاپ من یه دونه است، یه نمونه (Instance) است، یه شیء(Object) هست : یک شیء از کلاس لپتاپ ها.
توی کدی که بالا میبینی ما دوتا کلاس به اسم های Parent و Child داریم.وقتی که مینویسیم ()Child c = new Child در واقع یک نمونه یا شی از کلاس Chid درست کردیم.
حالا اگه ما کلاس لپتاپها رو داشته باشیم، این کلاس یه سری خصوصیت ها داره : همه لپتاپ ها LCD دارن، همه لپتاپها باتری دارن، همه لپتاپها دکمه روشن و خاموش دارن... . در ضمن، یه گروهی مثل کلاس لپتاپها، شامل خیلی موارد و خیلی اشیاء میشه که با هم ممکنه متفاوت باشن، پس میایم دوتا کلاس تعریف میکنیم که این کلاس لپتاپها رو خرد کنه : کلاس لپتاپهای بزرگ که لپتاپهای بالاتر از ۱۴ رو توش داریم و کلاس لپتاپهای کوچیک که لپتاپهای کوچکتر از ۱۴ اینج رو توش داریم. حالا لپتاپهای بزرگ بازم خیلی میشه، خرد ترش میکنیم به شرکت های مختلف : کلاس لپتاپهای بزرگ acer و کلاس لپتاپهای بزرگ asus و ... . اما یه نکته دیگه هست.یادته گفتیم همه لپتاپها LCD و باتری و دکمه و اینا دارن؟ خب اینا رو که نمیایم واسه همه کلاسهای پایین تر (زیرکلاسها یا Subclass ها) دوباره تعریف کنیم. این ساب کلاسها خصوصیت هاشون رو از کلاسهای بالاتر (سوپرکلاس یا Superclass) به ارث میبرن. این هم از ارث بری یا وراثت.
توی کلاس Child اگه دقت کنید ما گفتیم مقدار parentInt رو با childInt با هم جمع کنه و توی خروجی نشون بده، در حالی که توی کلاس Child متغیری به اسم parentInt نداریم! این متغیر از والد که همون کلاس Parent هست بهش به ارث رسیده، پس بدون نیاز به تعریف دوباره، میتونیم ازش استفاده کنیم.
کپسوله سازی هم به این میگن که یه سری خصوصیت های هر کلاس ممکنه عمومی نباشه.یعنی با اینکه ما اومدیم از کلاس یه شیء گرفتیم باز هم به اون خصوصیت ها دسترسی نداریم.
مثلا توی کلاس Child اون متغیر childInt چون private تعریف شده از بیرون بهش دسترسی وجود نداره.
میمونه بحث چندریختی : کلاس یه سری خصوصیت داره و یه سری متد. خصوصیت که همون متغیرها هستند و متدها هم یه سری کارها رو انجام میدن (مثل تابع و پروسیجر میمونن). حالا اگه توی کلاس والد یا همون سوپرکلاس یه متدی تعریف شده، اما توی کلاس فرزند همون متد رو دوباره تعریف میکنیم اما یه کار دیگه ای رو انجام میده! پس یه متد داریم با چند ریخت.
مثلا توی این کد متد myMethod توی کلاس والد تعریف شده، اما بعدا توی کلاس فرزند دوباره تعریف شده و این بار کاری که انجام میده یه کم فرق میکنه.این کاری که ما کردیم رو بهش میگن Overriding که یکی از شیوه های چند ریختی است (یکی دیگه اش Overloading است).
===============
واقعا اگه با این کد و توضیحاتی که دادم مفاهیم شی گرایی رو فهمیده باشی جایزه داری!!
هرجاشو متوجه نشدی بگو تا جزئی تر بریم تو کارش.
در ضمن، انتظار دارم منابع دیگه هم خونده باشی.
اگه واقعا بری دنبالش حاضرم وقت بزارم و با هم کدی که میخوای ارائه کنی بنویسیم.
اینجا رو هم نگاه کن. ستون سمت چپ اون قسمتی که نوشته Java Object Oriented مفاهیم شی گرایی توی جاوا رو یاد داده. Overriding یکی از شیوه های چند ریختی هست.