کدنویسی جاوا در پلتفرم اندروید – قسمت چهارم
در نصیب سوم به توضیح گزینشکنندههای سطح ها دسترسی (Access Modifiers) و کادرها (Fragments) در اندروید پرداختیم. در نصیب چهارم سوژه کدنویسی طراحی اپلیکیشن در مشهد جاوا در پلتفرم اندروید، به توضیح رابطها (Interfaces) و لبهنگاریها (Annotations) در اندروید خواهیم پرداخت.
رابطها
فرض نمایید عمل (Activity) شما دارنده سه فریم فعال باشد و هریک از آن ها وظیفه مرتبط با خویش را ایفا دهند. درحال حاضر در صورتیکه نیاز باشد کهاین کادرها از تلاش یکدیگر در حینهای مشخص و معلوم اگاهی پیدا نمایند، چه کاری می بایست اعمال اعطا کرد؟
به طور تئوری، فریمها فقط بایستی نسبت به وظیفه و غرض خویش مطلع می باشند و نیازی وجود ندارد که از وجود دیگر فریمها و کار آن ها استحضار داشته باشند. در واقع، مغز متفکر اپ شما کار میباشد. شغل، صرفا بخشی میباشد که به کلیهی فریمها دسترسی و از کوشش آنها استحضار دارااست. این توضیحات در گویش جاوا معرف رابطها (Interfaces) میباشد. یک رابط مانند یک کلاس ولی سوای نیاز به پیادهسازی میباشد. رابط به مکان پیادهسازی، API همگانی تمجید مینماید. آن گاه، کلاسها میتوانند این رابطها را جاری ساختن نمایند و از آن پس کد شما دیگر به پیادهسازیهای بههمپیوسته کلاس متکی نخواهد بود.
کلیک فرمائید
رابطها به اشیا اذن میدهند تا سوای آشکار کردن وظایف داخلی خویش، به صورت غیرمستقیم با دیگر شی ها فعالیت نمایند. وسایلی را فکر کنید که ساختن آنان بسیار طاقت فرسا میباشد ولی عمل کردن با آن ها حدوداً سهل و آسان میباشد. برای مثال، یک خودرو، یک دستگاه تلویزیون یا این که حتی وسیلهای که برای تلاوت این نوشتهیعلمی به کار گیری میکنید، از مثالهایی میباشند که شما احتمالاً اطلاعی از طرز کوشش تمامیی اجزای داخلی آنها ندارید ولی به طبعً میدانید که چه طور از آنها به کار گیری نمایید. رابطها نیز اینسیرتکامل میباشند.
در اندروید، رابطها برای تسهیل رابطه در میان فریم با شغل یا این که رابطه فریم با فریم موثر می باشند. یک رابط، مانند کد تحت شغل مینماید:
public class EmbeddedFragment extends Fragment {
// 1
OnItemInListSelectedListener mCallback;
// 2
public interface OnItemInListSelectedListener {
public void onItemInListSelected(int position);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// 3
try {
mCallback = (OnItemInListSelectedListener) activity;
}
catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement OnItemInListSelectedListener");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_embedded, container, false);
}
}
به جزئیات کد بالا توجه نمایید:
دراین کادر، شما به یک متغیر عضو اعلام میکنید که شیء سفارشی مجری (OnItemInListSelectedListener) را ذخیره نماید و اسم آن را (mCallback) قرار دهد.
آن گاه، رابط را تولید کرده و طرزهای موردنیاز را مشخص و معلوم میکنید. رابط شما قادر است تعداد متعددی طریق داشته باشد.
در تابع ()onAttach که یک سیاق چرخه حیات کادر میباشد، می بایست تحقیق فرمائید که شغل فریم شما مبتنی بر با (OnItemInListSelectedListener) اتصال یافته باشد. در صورتیکه اینگونه چیزی نباشد، شما با خلل مواجه خواهید شد و اپلیکیشن به غرض خویش نمیرسد. (ClassCastException)، در طی فرصت اجرای کد، این نقص را اعلام خواهد کرد. برای پی بردن سریعخیس ایراد، به کارگیری از این شیوه شایسته ترین راه و روش میباشد.
نکته آینده، تایپ کردن کدی میباشد که موجب بهکارگیری رابط بوسیله شغل خواهد شد:
public class MainMenuActivity extends Activity implements EmbeddedFragment.OnItemInListSelectedListener {
...
public void onItemInListSelected(int position) {
// Received a message from the Fragment, you\'ll do something neat here
}
}
واژه و کلمه کلیدی (implements) در تمجید کلاس، ذکر مینماید کهاین کلاس رابط بخصوصی را اعمال خواهد کرد. درپی، شما نیاز دارید برای کلیهی متدهای معلومگردیده در رابط، شغل پیادهسازی را جاری ساختن دهید. در رابط سفارشی بالا، صرفا یک سیاق وجود دارااست و شما میتوانید ملاحظه کنید کهاین مشی دارنده یک اسکلت پیادهسازی در بالای قطعهکد میباشد.
مشقت بارترین بخش عمل همینجاست البته شما هنوز هم ارتباطی در بین فریم با کادر برقرار نکردهاید. فرض کنیم، شما فریم دوم (ListDetailFragment) به یار و همدم شناساگر (fragment_list_detail) و متدی با اسم (showListItemDetails(int را تعریف و تمجید کردهاید. برای برقراری رابطه فی مابین آنها، کافی میباشد کاری که در نصیب قبل برای برقراری رابطه در میان کار و فریم ایفا دادید را به هم پا یکی متدهای همگانی کادر تکرار فرمائید:
public void onItemInListSelected(int position) {
ListDetailFragment listDetailFragment = (ListDetailFragment) getFragmentManager.findFragmentById(R.id.fragment_list_detail);
listDetailFragment.showListItemDetails(position);
}
به همین آسانی، شما راهی برای برقراری رابطه دربین فریمها و کارها ساخت کردید.
رابطها، برای ساختوساز رابطه میان مؤلفههای متعدد، در حالی که آنها از یکدیگر مستقل گردیده باشند، اثرگذار میباشند. یادگیری همیاری مؤلفهها با کادرها و کارها، قسمت بسیار مهمی در ساخت انعطافپذیری معماری اپلیکیشن شما میباشد.
لبهنگاری
آیا متوجه بعضا از کدهای خاص بالای بعضا از اسم متدها درین نوشتهیعلمی گردیدهاید؟
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
بهاین کلمه ها که دارنده پیشوند (@) میباشند، لبهنگاری گفته میگردد. کنارهنگاریها، داده ها مازاد در فرایند گوناگون یک نرمافزار را آماده مینمایند. کنارهنگاریها در طول اجرای نرم افزار، داده ها مازاد را برای کامپایلر آماده کرده و حتی کدهای مازاد را ساخت و ساز مینمایند.
رایجترین لبهنگاری در اندروید، (Override@) میباشد. Override@، به کامپایلر اگاهی می دهد که یک اسلوب معلوم بایستی از سوپرکلاس ویرایش گردد. در صورتیکه روال شما چیزی را ویرایش نکند، کامپایلر با ایراد مواجه گردیده و این قضیه را به شما استحضار می دهد. این شغل سبب ساز تولید یک لبه امنیت در مقابل تمامیی احتمال ها ممکن می گردد.
کلیک فرمایید
یک کدام از دیگر از لبهنگاریهای مشهور، (TargetApi@) میباشد. TargetApi@، این قابلیت را برای متدها آماده مینماید که تشخیص دهند، آنها برای به کار گیری در یک ورژن خاص یا این که نو تولید گردیدهاند. استعمال از یک روال با این لبهنگاری در یک ورژن فراتر از ورژن اپ شما، سبب ساخت و ساز اخطار کامپایلر مطابق عدم دسترسی ورژن اندروید شما به یک کارایی خاص می گردد. شما میتوانید اپ خویش را سوای اعتنا بدین اخطار اعمال فرمایید البته احتمالاً درپی با کرش اپلیکیشن مواجه خواهید شد.
در هنگام ایجاد کرد یک اپ اندرویدی، به احتمال زیاد بدین دو لبهنگاری احتیاج خواهید داشت. کنارهنگاریهای دیگری نیز وجود داراهستند که در شکل تصمیم به یادگیری آنها، میتوانید به آیین نامههای API اندروید رجوعنمایید. به علاوه، شما میتوانید کنارهنگاریهای خویش را برای ایفا اتوماتیک شغل های مشخص و معلوم، تولید کد و دیگر عملکردهای موءثر دیگر تولید نمائید. یکی نمونههای دارای اسم و رسم در این باره، کتابخانه فرنگی (AndroidAnnotations) میباشد. این کتابخانه، گونه های مختلفی از لبهنگاریهای سفارشی را برای شما مهیا مینماید که سبب ساز معمولیسازی توابع چندخطی به کنارهنگاریهای یکخطی میگردند.
حرف پایان
ایجاد کرد یک نرم افزار اندرویدی، به فرصت، طاقت و عده چند مورد متفاوت در کنار یکدیگر نیاز داراست. خوشبختانه، بعضا از جنبههای مرتبط با طرز عمل و رابطه در میان اندروید و جاوا را معین مینماید. خلاصه مطالب ارائه گردیده دراین نوشتهعلمی، به طور ذیل میباشد:
ماشین مجازی اندروید: یک کدام از تفاوتهای فی مابین جاوای به کار گیریگردیده در اندروید و جاوای استاندارد، مراحل کامپایل کردن و ماشینهای مجازی آن ها میباشد.
استعمال از شی ها POJO: شی ها بی آلایش و بسیار بی آلایش جاوا، به صورت وسیعای برای تشکیل شالوده اشیا سبک باطن اندروید به عمل میروند.
گزینشکنندههای سطح ها دسترسی: گزینش سطح های دسترسی، کلید خوانایی و فهم آسوده کدهای شماست.
رابطها: یکیاز موضوعات اساسی در اندروید، رابطها میباشند. ارجاع به اشیا توسط رابطها، برای تفکیک کدها و ساخت مؤلفههای قابل به کارگیری در فرآیند آینده بسیار اثرگذار میباشد.
کنارهنگاریها: شما لبهنگاریهای جاوای مختص اندروید را از به عبارتی روز اولیه یادگیری استعمال خواهید کرد.
کدنویسی جاوا در پلتفرم اندروید – قسمت چهارم
در نصیب سوم به توضیح گزینشکنندههای سطح ها دسترسی (Access Modifiers) و کادرها (Fragments) در اندروید پرداختیم. در نصیب چهارم سوژه کدنویسی طراحی اپلیکیشن در مشهد جاوا در پلتفرم اندروید، به توضیح رابطها (Interfaces) و لبهنگاریها (Annotations) در اندروید خواهیم پرداخت.
رابطها
فرض نمایید عمل (Activity) شما دارنده سه فریم فعال باشد و هریک از آن ها وظیفه مرتبط با خویش را ایفا دهند. درحال حاضر در صورتیکه نیاز باشد کهاین کادرها از تلاش یکدیگر در حینهای مشخص و معلوم اگاهی پیدا نمایند، چه کاری می بایست اعمال اعطا کرد؟
به طور تئوری، فریمها فقط بایستی نسبت به وظیفه و غرض خویش مطلع می باشند و نیازی وجود ندارد که از وجود دیگر فریمها و کار آن ها استحضار داشته باشند. در واقع، مغز متفکر اپ شما کار میباشد. شغل، صرفا بخشی میباشد که به کلیهی فریمها دسترسی و از کوشش آنها استحضار دارااست. این توضیحات در گویش جاوا معرف رابطها (Interfaces) میباشد. یک رابط مانند یک کلاس ولی سوای نیاز به پیادهسازی میباشد. رابط به مکان پیادهسازی، API همگانی تمجید مینماید. آن گاه، کلاسها میتوانند این رابطها را جاری ساختن نمایند و از آن پس کد شما دیگر به پیادهسازیهای بههمپیوسته کلاس متکی نخواهد بود.
کلیک فرمائید
رابطها به اشیا اذن میدهند تا سوای آشکار کردن وظایف داخلی خویش، به صورت غیرمستقیم با دیگر شی ها فعالیت نمایند. وسایلی را فکر کنید که ساختن آنان بسیار طاقت فرسا میباشد ولی عمل کردن با آن ها حدوداً سهل و آسان میباشد. برای مثال، یک خودرو، یک دستگاه تلویزیون یا این که حتی وسیلهای که برای تلاوت این نوشتهیعلمی به کار گیری میکنید، از مثالهایی میباشند که شما احتمالاً اطلاعی از طرز کوشش تمامیی اجزای داخلی آنها ندارید ولی به طبعً میدانید که چه طور از آنها به کار گیری نمایید. رابطها نیز اینسیرتکامل میباشند.
در اندروید، رابطها برای تسهیل رابطه در میان فریم با شغل یا این که رابطه فریم با فریم موثر می باشند. یک رابط، مانند کد تحت شغل مینماید:
public class EmbeddedFragment extends Fragment {
// 1
OnItemInListSelectedListener mCallback;
// 2
public interface OnItemInListSelectedListener {
public void onItemInListSelected(int position);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// 3
try {
mCallback = (OnItemInListSelectedListener) activity;
}
catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement OnItemInListSelectedListener");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_embedded, container, false);
}
}
به جزئیات کد بالا توجه نمایید:
دراین کادر، شما به یک متغیر عضو اعلام میکنید که شیء سفارشی مجری (OnItemInListSelectedListener) را ذخیره نماید و اسم آن را (mCallback) قرار دهد.
آن گاه، رابط را تولید کرده و طرزهای موردنیاز را مشخص و معلوم میکنید. رابط شما قادر است تعداد متعددی طریق داشته باشد.
در تابع ()onAttach که یک سیاق چرخه حیات کادر میباشد، می بایست تحقیق فرمائید که شغل فریم شما مبتنی بر با (OnItemInListSelectedListener) اتصال یافته باشد. در صورتیکه اینگونه چیزی نباشد، شما با خلل مواجه خواهید شد و اپلیکیشن به غرض خویش نمیرسد. (ClassCastException)، در طی فرصت اجرای کد، این نقص را اعلام خواهد کرد. برای پی بردن سریعخیس ایراد، به کارگیری از این شیوه شایسته ترین راه و روش میباشد.
نکته آینده، تایپ کردن کدی میباشد که موجب بهکارگیری رابط بوسیله شغل خواهد شد:
public class MainMenuActivity extends Activity implements EmbeddedFragment.OnItemInListSelectedListener {
...
public void onItemInListSelected(int position) {
// Received a message from the Fragment, you\'ll do something neat here
}
}
واژه و کلمه کلیدی (implements) در تمجید کلاس، ذکر مینماید کهاین کلاس رابط بخصوصی را اعمال خواهد کرد. درپی، شما نیاز دارید برای کلیهی متدهای معلومگردیده در رابط، شغل پیادهسازی را جاری ساختن دهید. در رابط سفارشی بالا، صرفا یک سیاق وجود دارااست و شما میتوانید ملاحظه کنید کهاین مشی دارنده یک اسکلت پیادهسازی در بالای قطعهکد میباشد.
مشقت بارترین بخش عمل همینجاست البته شما هنوز هم ارتباطی در بین فریم با کادر برقرار نکردهاید. فرض کنیم، شما فریم دوم (ListDetailFragment) به یار و همدم شناساگر (fragment_list_detail) و متدی با اسم (showListItemDetails(int را تعریف و تمجید کردهاید. برای برقراری رابطه فی مابین آنها، کافی میباشد کاری که در نصیب قبل برای برقراری رابطه در میان کار و فریم ایفا دادید را به هم پا یکی متدهای همگانی کادر تکرار فرمائید:
public void onItemInListSelected(int position) {
ListDetailFragment listDetailFragment = (ListDetailFragment) getFragmentManager.findFragmentById(R.id.fragment_list_detail);
listDetailFragment.showListItemDetails(position);
}
به همین آسانی، شما راهی برای برقراری رابطه دربین فریمها و کارها ساخت کردید.
رابطها، برای ساختوساز رابطه میان مؤلفههای متعدد، در حالی که آنها از یکدیگر مستقل گردیده باشند، اثرگذار میباشند. یادگیری همیاری مؤلفهها با کادرها و کارها، قسمت بسیار مهمی در ساخت انعطافپذیری معماری اپلیکیشن شما میباشد.
لبهنگاری
آیا متوجه بعضا از کدهای خاص بالای بعضا از اسم متدها درین نوشتهیعلمی گردیدهاید؟
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
بهاین کلمه ها که دارنده پیشوند (@) میباشند، لبهنگاری گفته میگردد. کنارهنگاریها، داده ها مازاد در فرایند گوناگون یک نرمافزار را آماده مینمایند. کنارهنگاریها در طول اجرای نرم افزار، داده ها مازاد را برای کامپایلر آماده کرده و حتی کدهای مازاد را ساخت و ساز مینمایند.
رایجترین لبهنگاری در اندروید، (Override@) میباشد. Override@، به کامپایلر اگاهی می دهد که یک اسلوب معلوم بایستی از سوپرکلاس ویرایش گردد. در صورتیکه روال شما چیزی را ویرایش نکند، کامپایلر با ایراد مواجه گردیده و این قضیه را به شما استحضار می دهد. این شغل سبب ساز تولید یک لبه امنیت در مقابل تمامیی احتمال ها ممکن می گردد.
کلیک فرمایید
یک کدام از دیگر از لبهنگاریهای مشهور، (TargetApi@) میباشد. TargetApi@، این قابلیت را برای متدها آماده مینماید که تشخیص دهند، آنها برای به کار گیری در یک ورژن خاص یا این که نو تولید گردیدهاند. استعمال از یک روال با این لبهنگاری در یک ورژن فراتر از ورژن اپ شما، سبب ساخت و ساز اخطار کامپایلر مطابق عدم دسترسی ورژن اندروید شما به یک کارایی خاص می گردد. شما میتوانید اپ خویش را سوای اعتنا بدین اخطار اعمال فرمایید البته احتمالاً درپی با کرش اپلیکیشن مواجه خواهید شد.
در هنگام ایجاد کرد یک اپ اندرویدی، به احتمال زیاد بدین دو لبهنگاری احتیاج خواهید داشت. کنارهنگاریهای دیگری نیز وجود داراهستند که در شکل تصمیم به یادگیری آنها، میتوانید به آیین نامههای API اندروید رجوعنمایید. به علاوه، شما میتوانید کنارهنگاریهای خویش را برای ایفا اتوماتیک شغل های مشخص و معلوم، تولید کد و دیگر عملکردهای موءثر دیگر تولید نمائید. یکی نمونههای دارای اسم و رسم در این باره، کتابخانه فرنگی (AndroidAnnotations) میباشد. این کتابخانه، گونه های مختلفی از لبهنگاریهای سفارشی را برای شما مهیا مینماید که سبب ساز معمولیسازی توابع چندخطی به کنارهنگاریهای یکخطی میگردند.
حرف پایان
ایجاد کرد یک نرم افزار اندرویدی، به فرصت، طاقت و عده چند مورد متفاوت در کنار یکدیگر نیاز داراست. خوشبختانه، بعضا از جنبههای مرتبط با طرز عمل و رابطه در میان اندروید و جاوا را معین مینماید. خلاصه مطالب ارائه گردیده دراین نوشتهعلمی، به طور ذیل میباشد:
ماشین مجازی اندروید: یک کدام از تفاوتهای فی مابین جاوای به کار گیریگردیده در اندروید و جاوای استاندارد، مراحل کامپایل کردن و ماشینهای مجازی آن ها میباشد.
استعمال از شی ها POJO: شی ها بی آلایش و بسیار بی آلایش جاوا، به صورت وسیعای برای تشکیل شالوده اشیا سبک باطن اندروید به عمل میروند.
گزینشکنندههای سطح ها دسترسی: گزینش سطح های دسترسی، کلید خوانایی و فهم آسوده کدهای شماست.
رابطها: یکیاز موضوعات اساسی در اندروید، رابطها میباشند. ارجاع به اشیا توسط رابطها، برای تفکیک کدها و ساخت مؤلفههای قابل به کارگیری در فرآیند آینده بسیار اثرگذار میباشد.
کنارهنگاریها: شما لبهنگاریهای جاوای مختص اندروید را از به عبارتی روز اولیه یادگیری استعمال خواهید کرد.

راهکارهای کاهش CPC در کمپینها