PDA

View Full Version : سوال: interfaces



aliabbasifard
سه شنبه 12 اسفند 1393, 17:44 عصر
سلام .خسته نباشید.من دانشجوی ترم دو مهندسی کامپیوترم.میخواستم بدونم interfaces تو جاوا چیه؟ممنون

mnakhaeipoor
چهارشنبه 13 اسفند 1393, 14:35 عصر
سلام .خسته نباشید.من دانشجوی ترم دو مهندسی کامپیوترم.میخواستم بدونم interfaces تو جاوا چیه؟ممنون
Interface یا واسطه یک مفهوم کلی هست که اکثر زبان های مطرح برنامه نویسی ازش پشتیبانی میکنن و از اجزای کلیدی شی گرایی به حساب میاد
توسط یک اینترفیس شما یک سری متد مینویسید که قراره این متد ها تو یک سری کلاس پیاده سازی بشن
مزیت استفاده از اینترفیس هن اینه که اگه مثلا برنامه 15 تا کلاس داره که از این 15 تا کلاس ده تاشون باید متد های a و b رو پیاده سازی بکنن دیگه نیازی نیست شما برای هر ده تا کلاس این دو تا متد رو اعلان کنید به جاش این دو متد رو در اینترفیس اعلان میکنید و بعد تو این ده تا کلاس پیاده سازیشون میکنید
در جاوا پیاده سازی متد توسط دستور implements انجام میشه که بعد از اسم کلاس میاد مثلا :

public class myClass implements myInterface{
//code here
}

aliabbasifard
چهارشنبه 13 اسفند 1393, 17:40 عصر
ممنون از پاسختون.

deCODER-
پنج شنبه 14 اسفند 1393, 12:18 عصر
میشه در مورد کدی که نوشتید بیشتر توضیح بدید و یک مثال از اینترفیس ها بزنید ؟

[younes]
پنج شنبه 14 اسفند 1393, 19:45 عصر
این طورکه من متوجه شدم.
اینترفیس ها تقریبا مثل کلاس ها هستند و از فیلدها و متد ها تشکیل شده اند با این تفاوت که ما در اینترفیس هیچ متدی را واقعا پیاده سازی نمیکنیم و فقط یک امضاء از متد مورد نظرمون شامل آرگومان های دریافتی و نوع برگشتی رو می نویسیم ، در واقع اینترفیس ها صرفا الگو های رفتاری کلاس ما رو تعیین میکنند و خلاء ایجاد شده از عدم پشتیبانی جاوا از قابلیت ارث بری چند گانه را پر میکنند.

aliabbasifard
پنج شنبه 14 اسفند 1393, 23:22 عصر
میشه یه مقدار در باره کلاس و شی توضیح بدید؟

mnakhaeipoor
جمعه 15 اسفند 1393, 08:43 صبح
میشه یه مقدار در باره کلاس و شی توضیح بدید؟
این توضیحاتی که پایین نوشتم رو حداقل دو سه بار مو به مو بخون تا کامل متوجه بشی چون بحث شی گرایی درکش یکم سنگینه
اشیاء کلید فهم شی گرایی هستند اگه همین الان یه نگاه به دور و برت بندازی اشیاء زیادی رو میبینی (میز-دوچرخه-تلویزیون-استکان و ...)
اشیاء در دنیای واقعی دو تا خصوصیت مشترک دارن : 1-حالت 2-رفتار
مثلا یک سگ به عنوان یک شئ در دنیای واقعی دارای حالت (جنس-رنگ-اسم-گرسنه/سیر بودن) و رفتار (پارس کردن-گاز گرفتن) هست. شناسایی حالت ها و رفتار اشیاء در دنیای واقعی اولین گام برای درک شئ و شئ گرایی هست. اشیاء دنیای واقعی در پیچیدگی با هم فرق دارن و حتی ممکنه یک شئ خودش از چند تا شئ دیگه تشکیل شده باشه
حالا وقتشه از دنیای واقعی بریم به دنیای شئ گرایی. اشیاء نرم افزاری به جهت مفهومی کپی اشیاء واقعی هستن. پس در واقع یک شئ نرم افزاری هم دو تا خصوصیت حالت و رفتار مخصوص به خودش رو داره. یک شئ حالت خودش رو توی فیلد ها ذخیره میکنه (فیلد همون متغیر هست) و رفتارش رو در قالب متد بیان میکنه (متد یا تابع فرقی ندارن)
معمولا متد ها روی فیلدهای هر شئ کار خودشون رو انجام میدن (حالا اگه ما بیایم و این فیلد هارو مخفی کنیم جوری که فقط متد های اون شئ بتونن بهش دسترسی داشته باشن به این کار میگن encapsulation یا همون کپسوله سازی که یکی از قاعده های اساسی شئ گرایی محسوب میشه)
به عنوان یک مثال روشن تر هزاران دوچرخه تو دنیا وجود داره (که هرکدومشون یک شئ به حساب میان) که همشون از یک طرح ساخته شدن(یعنی همشون دو تا لاستیک دارن - زنجیر دارن و ...) در شئ گرایی گفته میشه که هر دوچرخه (به عنوان یک شئ) یک نمونه از کلاسی به نام "دوچرخه ها" هست این کلاس همون طرح کلی هست که ازش نمونه های مختلف (اشیائ مختلف) ساخته میشه
پس این شد که ما میایم داخل یک کلاس که یک طرح و نقشه کلی هست حالت ها(فیلد ها)رو تعریف میکنیم بعد میتونیم اشیاء مختلفی از اون کلاس نمونه سازی کنیم
توجه داشته باشید که میتونیم هرچه قدر بخوایم از یک کلاس شئ نمونه سازی کنیم (منظورم از نمونه سازی همون ساختن هست) بعدش میتونیم هر متدی رو که خواستیم رو روی یکی از اشیائی که نمونه سازی کردیم اجرا کنیم (متد ها از قبل داخل بدنه کلاس تعریف شدن)
مثلا :

class Bicycle {


int cadence = 0;
int speed = 0;
int gear = 1;


void changeCadence(int newValue) {
cadence = newValue;
}


void changeGear(int newValue) {
gear = newValue;
}


void speedUp(int increment) {
speed = speed + increment;
}


void applyBrakes(int decrement) {
speed = speed - decrement;
}


void printStates() {
System.out.println("cadence:" +
cadence + " speed:" +
speed + " gear:" + gear);
}
}

تو کد بالا که یک کلاس رو نشون میده فیلد های cadence - speed و gear حالت شیئ رو نشون میدن و متد های changeCadence, changeGear, speedUp هم تعیین میکنن شیئ چه رفتاری از خودش بروز بده
مقادیر فیلد ها میتونه تو هر شئ یه چیزی باشه چون هر شئ یک کپی مستقل از فیلد هارو برا خوش نگه میداره
تو کد زیر ما به صورت عملی دو تا شئ جداگانه به نام های bike1 و bike2 از کلاس Bicycle درست کردیم

class BicycleDemo {
public static void main(String[] args) {

// Create two different
// Bicycle objects
Bicycle bike1 = new Bicycle();
Bicycle bike2 = new Bicycle();

// Invoke methods on
// those objects
bike1.changeCadence(50);
bike1.speedUp(10);
bike1.changeGear(2);
bike1.printStates();

bike2.changeCadence(50);
bike2.speedUp(10);
bike2.changeGear(2);
bike2.changeCadence(40);
bike2.speedUp(10);
bike2.changeGear(3);
bike2.printStates();
}
}



همونطور که میبینید وقتی ما توسط متد های changeCadence و changeGear مقادیر فیلد ها رو تغییر دادیم مقادیر فیلد ها برای هر شئ یه چیز هست (چون شئ bike1 کپی خودش از فیلد ها رو داره و شئ bike2 هم کپی خودش پس اگه ما متد changeGear رو رو شئ bike1 فراخوانی کنیم فقط فیلد gear شئ bike1 عوض میشه و اگر هم رو شئ bike2 فراخوانی بشه فقط فیلد gear شئ bike2)

aliabbasifard
جمعه 15 اسفند 1393, 20:39 عصر
سلام.میخواستم بدونم چطوری میتونم تو یک پکیج چند تا برنامه بنویسم طوری که مثلا به هر قسمت برنامه یه شماره اختصاص بدم و با وارد کردن اون شماره فقط اون قسمت برنامه اجرا بشه؟

محمد فدوی
جمعه 15 اسفند 1393, 21:38 عصر
سلام.میخواستم بدونم چطوری میتونم تو یک پکیج چند تا برنامه بنویسم طوری که مثلا به هر قسمت برنامه یه شماره اختصاص بدم و با وارد کردن اون شماره فقط اون قسمت برنامه اجرا بشه؟

پرسیدن چندتا سؤال توی یه تاپیک کار درستی نیست و بهتره یه تاپیک جدید برای طرح سؤالتون باز کنید.
می‌تونید برای این‌کار هرجا که دوست داشتید چندتا متد main بنویسید و هرکدوم که دوست داشتید رو اجرا کنید. ولی خب اینجوری چیزی به اسم شماره برای هرکدوم وجود نداره. همچنین می‌تونی از آرگومان‌های اجرا برای تعیین زیربرنامه‌ی مورد نظرت استفاده کنی. مثلا:

public class MyTools {
public static void main(String[] args) {
if(args.length < 1) {
displayUsage();
return;
}

String subprogram = args[0];
switch(subprogram) {
case "calculator":
calculator();
break;

case "editor":
editor();
break;

default:
displayUsage();
}
}

private static void calculator() {
// Calculator Program...
System.out.println("I'm Calculator. :)");
}

private static void editor() {
System.out.println("I'm Editor. :)");
}

private static void displayUsage() {
System.out.println("Subprogram not found. Usage:");
System.out.println(" MyTools [calculator | editor]");
}
}

الان توی متد calculator و editor می‌تونی برنامه‌ی موردنظرت رو برای ماشین‌حساب و ویرایشگر بنویسی و موقع اجرا اسم زیربرنامه رو به عنوان آرگومان بش ارسال کنی.
ولی در کل یه برنامه‌ی جاوا در آن واحد فقط و فقط یه نقطه‌ی ورود (متد main) و نمی‌شه چند متد main‌ رو برای اجرا همزمان مورد استفاده قرار داد.
موفق باشی.