View Full Version : مشکل با interface و implements
Nazanin-Zohreh
یک شنبه 23 فروردین 1388, 23:22 عصر
با عرض سلام خدمت دوستان محترم :
من حقیقتش با این دو کلمه مشکل دارم و نمیدونم برای چی از اینها استفاده میکنن .:عصبانی++::عصبانی++::عصبانی++: آیا این کلمات کارهای ارث بری انجام میدن . :متفکر:خواهشا با مثال توضیخ بدهید ممنون میشم .:لبخندساده:
ermia2008
دوشنبه 24 فروردین 1388, 11:19 صبح
با عرض سلام خدمت دوستان محترم :
من حقیقتش با این دو کلمه مشکل دارم و نمیدونم برای چی از اینها استفاده میکنن .:عصبانی++::عصبانی++::عصبانی++: آیا این کلمات کارهای ارث بری انجام میدن . :متفکر:خواهشا با مثال توضیخ بدهید ممنون میشم .:لبخندساده:
سلام دوست عزيز.
Interface ها همانند Class ها در واقع يك refrence Type هستند كه مي توانند شامل متدها، ثوابت، nested Class باشند.
چند نكته:
- متدها در Interface ها شامل بدنه نيستند.
- interface ها قابل نمونه سازي نيستند.
- Interface ها فقط قابل پياده سازي (Implements) توسط كلاسها يا ارث بري توسط Interface هاي ديگر هستند.
مثال:
public interface OperateCar {
// constant declarations, if any
// method signatures
int turn(Direction direction, // An enum with values RIGHT, LEFT
double radius, double startSpeed, double endSpeed);
int changeLanes(Direction direction, double startSpeed, double endSpeed);
int signalTurn(Direction direction, boolean signalOn);
int getRadarFront(double distanceToCar, double speedOfCar);
int getRadarRear(double distanceToCar, double speedOfCar);
......
// more method signatures
}
Implements هم در واقع يك كلمه كليدي است كه كلمه بعد از آن نام Interface اي است كه كلاس بايد متدهاي آن را پياده سازي كند.
براي توضيحات بيشتر مي تونيد به سايت زير يه سر بزنيد:
http://java.sun.com/docs/books/tutorial/java/IandI/createinterface.html
mehdi_m1360
دوشنبه 24 فروردین 1388, 11:25 صبح
دوست عزیز در این آدرس به این موضوع پرداخته شده است:
http://barnamenevis.org/forum/showthread.php?t=152516
Nazanin-Zohreh
دوشنبه 24 فروردین 1388, 16:40 عصر
سلام :
از پاسخ های دوستان کمال تشکر را دارم .
ولی باز مشکل من حل نشده که چرا در داخل Interface ما از متدهای بدون بدنه استفاده میکنیم و سپس با کلمه کلیدی که همرا با اعلان کلاس می اید یعنی implements اون interface رو پیاه سازی میکنیم .
بهتر نبود که هنگام ساختن یک کلاس متدها رو تعریف و بدنه اونها رو هم مینوشتیم .
من توی این موضوع موندم که چرا باید لیستی از متدهای بدون بدنه داخل interface باشه یعنی این کار چه کمکی به برنامه نویس میکنه .
قبل از پاسخ کمال تشکر را از شما دوستان محترم دارم اگه کمکم کنید تا این مفهوم رو متوجه بشم کمک بزرگی در یادگیری جاوا به من کرده اید .
ermia2008
سه شنبه 25 فروردین 1388, 11:51 صبح
سلام :
از پاسخ های دوستان کمال تشکر را دارم .
ولی باز مشکل من حل نشده که چرا در داخل Interface ما از متدهای بدون بدنه استفاده میکنیم و سپس با کلمه کلیدی که همرا با اعلان کلاس می اید یعنی implements اون interface رو پیاه سازی میکنیم .
بهتر نبود که هنگام ساختن یک کلاس متدها رو تعریف و بدنه اونها رو هم مینوشتیم .
من توی این موضوع موندم که چرا باید لیستی از متدهای بدون بدنه داخل interface باشه یعنی این کار چه کمکی به برنامه نویس میکنه .
قبل از پاسخ کمال تشکر را از شما دوستان محترم دارم اگه کمکم کنید تا این مفهوم رو متوجه بشم کمک بزرگی در یادگیری جاوا به من کرده اید .
در واقع Interface يك استانداردي را مشخص مي كند كه هر كلاسي كه بخواهد آن را استفاده
كند بايد تمام متدهاي آن را پياده سازي كند. يه مثال مي زنم تا بهتر متوجه بشيد:
يك صاحب كارخانه را در نظر بگيريد كه يك سري استانداردها را براي توليد يك كالاي خاص مشخص مي كند و به همه توليد كننده ها اعلام ميكنه كه بايد همگي براي انجام فلان كار تمامي اين استانداردها(متدها) را پياده سازي كند.ممكن است هر توليد كننده به روش خودش اين متدها را پياده سازي كنه بدون آنكه بداند بقيه توليد كننده ها اين متدها را چگونه پياده سازي كرده اند. در صورتي كه در اينجا لازم نيست كه صاحب كارخانه در مورد جزئيات پياده سازي آنها چيزي بگه!
به اين صورت همه توليد كننده ها از يك سري استانداردها ولي با پياده سازي هاي مختلف استفاده كرده اند.
Cold.82
سه شنبه 25 فروردین 1388, 12:47 عصر
ببین دوست عزیز واسطها (interface) از لحاظ ظاهری بسیار شبیه به کلاس هستند با این تفاوت که دارای هیچ گونه پیاده سازی نیستند تنها چیزی که در interface به چشم می خورد تعاریفی نظیر رخدادها متدها اندیکسرها و یا property هاست .یکی از دلایلی که interface ها دارای پیاده سازی نیستند و تنها دارای تعاریف هستند این است که یک interface می تواند توسط چندین کلاس یا property مورد ارت بری قرار گیرد از اینرو هر کلاس یا property خواستار اینست که خود به پیاده سازی اعضا بپردازد.
ولی پاسخ به سوال شما interface ها به چه دردی می خورند ؟!تصور کنید که در یک برنامه با مولفه هایی سرو کار دارید که متغیرند ولی دارای فیلدها یا متدهایی با نامهای یکسانی هستند و باید نام این متدها نیز یکسان باشد با استفاده از یک interface مناسب می توان تنها متدها و یا فیلدهای مورد نظر را اعلان نمود سپس کلاسها و یا property های موجود از آن interface ارث بری نمایند.در این حالت تمامی کلاسها و property ها دارای فیلدها و یا متدهایی همنام هستند ولی هریک پیاده سازی خاصی از آنها را اعمال می کنند.
نکته مهم دیگر درباره interface ها استفاده و کاربرد آنها در برنامه های بزرگی است که برنامه ها و یا اشیاء مختلفی در تماس و تراکنش هستند .تصور کن کلاسی در یک برنامه با کلاس دیگر در برنامه ای دیگر در ارتباط باشد فرض کن این کلاس متدی دارد که مقداری از نوع int بر می گردونه پس از مدتی طراح برنامه به این نتیجه می رسه که استفاده از int جوابگو نیست و باید از long استفاده نماید حال شرایط رو در نظر بگیر برای تغییر یک چنین مسئله چه مشکل بزرگی پیش میاد تمامی فیلدهای مرتبط با این متد باید تغییر داده شوند در ضمن از مسئله side effect نیز نمی توان چشم پوشی کرد .حال فرض کن در ابتدا interface ای طراحی شده باشه .در صورت اعمال جزئیترین تغییر در برنامه مشکل تبدیل int به long قابل حل بود چرا که user برنامه در هنگام استفاده از یک interface با پیاده سازی پشت پرده آن کاری ندارد یا بهتره بگم به آن دسترسی ندارد . از اینرو اعمال تغییرات درون آن تاثیری بر رفتار کاربر نخواهد داشت و حتی کاربر از ان مطلع نخواهد شد .در مفاهیم کلی شی گرایی interface ها یکی از مهمترین و کاربردی ترین اجزاء هستند که در صورت درک صحیح بسیار مفید واقع می شوند .
خسته شدم!!!
امیدوارم که متوجه شده باشین
Nazanin-Zohreh
سه شنبه 25 فروردین 1388, 23:51 عصر
دستتون درد نکنه . واقعا خیلی ساده و شیوا توضیح دادید . مطمئنم اگه مفهومی از جاوا رو فراموش کنم این interface و دیگه فراموش نمیکنم .
موفق و پیروز باشید .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.