آشنایی با مفهوم Dependency در جاوا و اندروید
یکی از مفاهیم بسیار پرکاربرد و کلیدی در برنامه نویسی جاوا و اندروید, مبحث Dependency ها است. در این مقاله قصد داریم تا با این مفهوم بیشتر آشنا شویم.
Dependency, در لغت به معنای وابستگی است. وابستگی به این معنا است که یک موجودیت برای بقا و یا انجام فعالیت به یک موجودیت دیگر نیاز دارد. موجودیت در اینجا میتواند یک کشور, یک شخص و یا یک کلاس در زبان برنامه نویسی باشد. بنابراین اگر یک کلاس برای انجام پردازشی به یک کلاس دیگر نیاز داشته باشد, کلاس اول به کلاس دوم وابسته است. پس میتوان نتیجه گرفت که کلاس دوم Dependecy کلاس اول است. گاهی ممکن است هر دو کلاس به یکدیگر نیاز داشته باشد که در اینجا از واژه Coupling استفاده میشود. اما باید توجه شود که اگر کلاس B به عنوان Dependency کلاس A باشد, نمیتوان نتیجه گرفت که کلاس A هم به عنوان Dependency کلاس B است. البته ممکن است یک ارتباط دو طرفه باشد ولی الزامی وجود ندارد.
کاربرد Dependency
استفاده از Dependency ها را میتوان به عنوان یکی از ویژگی های شی گرایی در نظر گرفت. اما با وجود مزایایی که برای استفاده از Dependency ها میتوان در نظر گرفت, معایبی هم دارند. یکی از دلایلی که برنامه نویسان را برای استفاده از Dependency ها مردد میکند این است که استفاده مجدد از کلاس پیچیده تر میشود. در واقع برای استفاده از یک کلاس, حتما باید Dependency های آن نیز تامین شوند.
public class ZeroToHero { public void printUserInfo(UserModel userModel) { /// some code } }
معایب استفاده از Dependency
در قطعه کد بالا, اطلاعات یک کاربر را چاپ میکنیم. در اینجا User Model به عنوان یک Dependency برای کلاس Zero to Hero است. بنابراین برای استفاده از این متد باید این کلاس مورد نیاز را به آن ارجاع دهیم. این امر یکی از ضعف هایی است که استفاده از Dependecy ها به همراه دارد. البته میتوان Dependency را از میان کلاس های پایه انتخاب کرد. هرچه کلاس ها پایه تر باشند, امکان استفاده مجدد از کلاسی که وابسته است بیشتر میشود. زیرا دامنه وسیع تری از کلاس ها را پشتیبانی میکند.
انواع Dependency
Dependency ها به سه صورت زیر ممکن است باشند:
- Class : مانند مثال فوق هستند. در واقع متد برای انجام پردازش به این کلاس نیاز دارد.
- Method یا Field : این نوع Dependency در استفاده از reflection بسیار پرکاربرد است. فرض کنید که میخواهیم متد getUsername را فراخوانی کنیم. بنابراین یک Object به عنوان ورودی به این متد ارسال میکنیم. با استفاده از Reflection, این متد را فراخوانی میکنیم. در اینجا Object ارسال شده به متد از اهمیت کمتری برخوردار است و تنها وجود این متد getUsername در این object اهمیت دارد. کد زیر نمونه ای از Method Dependency است :
public String getUsername(Object zeroToHeroObject) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { Method method = zeroToHeroObject.getClass().getDeclaredMethod("getUsername", null); String username = (String) method.invoke(zeroToHeroObject, null); return username; }
- Interface : اگر یک Interface را به یک متد ارسال کنیم, از نوع Interface Dependency است. ممکن است این روش مشابه Class Dependency باشد اما در اینجا, دامنه وسیع تری از Dependency ها پشتیبانی میشود. برای مثال قطعه کد زیر را در نظر بگیرید:
public void nameList(List<String> name) { // some code }
در اینجا, List یک Interface است. بنابراین علاوه بر این که میتوان یک متغیر از نوع List را به ان ارجاع دارد, میتوان متغیر از نوع ArrayList را نیز به آن ارسال کرد. بنابراین در این روش, تعداد کلاس های قابل استفاده بیش از یک است. زیرا هم خود Interface و هم کلاس هایی که Interface را پیاده سازی کردهاند, به عنوان Dependency قابل استفاده هستند.
علاوه بر سه نوع تعریف شده, Dependency ها میتوانند در روش های گوناگونی استفاده شوند. Compile time و Runtime دو روش متفاوت در استفاده از Dependency ها هستند. این دو نوع مشخص میکنند که کلاس مورد نیاز در چه زمانی به پروژه وارد شود. برای مثال Framework های گوناگونی وجود دارند که متد های getter و setter را در هنگام اجرا میسازند. این Dependency ها از نوع Runtime هستند.
در این مقاله قصد بر این شد تا با مفهوم Dependency ها در جاوا و اندروید آشنا شویم.
با ما همراه باشید
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.