نکات کاربردی

طبقه بندی موضوعی

آخرین مطالب

۴ مطلب در خرداد ۱۳۹۷ ثبت شده است

کلاس wrapper مربوط به اعداد


با سلام به همه دوستان وهمراهان Itpro. اعداد ویژگی های متعددی در زبان جاوا دارند که در این بخش به بحث در مورد اعداد در جاوا می پردازیم. وقتی که شما از اعداد در جاوا استفاده می کنید به این معنی است که شما از انواع داده های اولیه در جاوا مثل byte,int, long, double , … استفاده می نمایید. برای مثال به کد زیر توجه کنید:

int i = 5000;
float gpa = 13.65;
byte mask = 0xaf;
در زمان برنامه نویسی ممکن است وضعیتی پیش بیاید که ما به جای انواع داده اولیه از اشیاء استفاده کنیم. جاوا این امر را با استفاده از کلاس های wrapper میسر می سازد. در جاوا کلاس هایی وجود دارد که متناظر با انواع داده اولیه هستند و در این کلاس ها مجموعه متدهایی تعریف شده است که می تواند در برنامه نویسی بسیار مورد استفاده قرار بگیرد. همه ی کلاس های wrapper از کلاس Number ارث برده اند. شکل زیر انواع این کلاس ها را نشان می دهد.
Image

اشیائی که از کلاس wrapper ساخته می شود می تواند یک مقدار از نوع داده مورد نظر را درخود ذخیره کند. تبدیل نوع داده واقعی به یک شی را boxing می گویند و این عمل توسط کامپایلر انجام می شود. بنابراین زمانی که یک شی از کلاس wrapper می سازیم باید در constructor آن یک مقدار از نوع داده متناسب آن قرار دهیم. تبدیل شئی از کلاس wrapper به نوع داده اولیه را unboxing می گویند. کلاس Number در پکیج java.lang قرار دارد. در کد زیر مثالی از boxing و unboxing آورده شده است.
public class Test{

   public static void main(String args[]){
      Integer x = 5; // boxes int to an Integer object
      x =  x + 10;   // unboxes the Integer to a int
      System.out.println(x); 
   }
}
نتیجه اجرای کد بالا 15 خواهد بود. وقتی که یک شی از کلاس Integer ساخته می شود و نام آن را x می گذاریم. وقتی که یک مقدار عدد صحیح به این شئ انتساب می دهیم کامپایلر عمل boxing را انجام می دهد و آن را در داخل یک شئ می ریزد. اما در خط بعد که عمل جمع کردن عدد انجام می شود کامپایلر باید x را تبدیل به نوع اصلی int بکند تا بتواند با عدد10 جمع کند و در این حالت عمل unboxing انجام می شود.

متدهای کلاس Number


در ادامه به لیستی از متدهای موجود در کلاس های ارث برده از کلاس Number آورده شده است و هرکدام توضیح داده شده اند. کلاس های wrapper که گفته شد همه از کلاس Number ارث برده اند.
  • تابع [datatype]Value این تابع عمل تبدیل نوع داده شده را به نوع خواسته شده انجام می دهد. مقدار datatype در اول این تابع می تواندبا نام انواع داده های عددی جایگزین شود توابع این متد به شکل زیر هستند:
byte byteValue()
short shortValue()
int intValue()
long longValue()
float floatValue()
double doubleValue()
توابع گفته شده متدهای پیش فرض هستند و هیچ پارامتری ندارند و مقدار بازگشتی آنها همان مقدار [datatype] است. برای درک بهتر به کد زیر توجه کنید:
public class Test{ 

   public static void main(String args[]){
      Integer x = 5;
      // داده بایت برمی گرداند
      System.out.println( x.byteValue() );

      // نوع داده دابل برمیگرداند
      System.out.println(x.doubleValue());

      // نوع داده لانگ برمی گرداند
      System.out.println( x.longValue() );      
   }
}
نتیجه اجرای کد بالا به شکل زیر خواهد بود.
5
5.0
5
  • متد compareTo: این متد عدد شی صدا زننده را با عددی که به عنوان آرگومان به متد داده شده را مقایسه می کند. با استفاده از این تابع می توان اعداد از انواع متفاوت را با هم مقایسه کرد ولی باید دقت داشت که هر دو عدد از یک نوع باشند و نمی توان تابع compareTo مربوط به یک نوع byte را با ورودی long صدا زد. این عمل باعث خطا می شود. شکل نوشتاری این متد مانند خط زیر است:
public int compareTo( NumberSubClass referenceName )
همانگونه که گفته شد پارامتر ورودی این متد یک شی از کلاس wrapper متناظر می باشد. مقدار بازگشتی این متد یک عدد صحیح از نوع int است که می تواند یا 0 یا 1 و یا -1 باشد. که به شرح این اعدا می پردازیم. اگر دو عدد با یکدیگر برابر باشند در نتیجه متد عدد 0 را بازمی گرداند و اگر عدد از آرگومان خودش کوچکتر باشد عدد -1 و اگر عدد از آرگومان خود بزرگتر باشد عدد 1 به عنوان نتیجه بازگشت داده می شود. برای مثال به کد زیر دقت کنید:
public class Test{ 

   public static void main(String args[]){
      Integer x = 5;
      System.out.println(x.compareTo(3));
      System.out.println(x.compareTo(5));
      System.out.println(x.compareTo(8));            
     }
}
و نتایج کدهای بالا به شکل زیر است:
1
0
-1
  • متد equals: این متد مشخص می‌کند که دو عدد با هم برابر هستند یا خیر. کار این متد به این شکل است توسط شئی صدا زده می‌شود و یک عدد به آن داده می‌شود اگر عدد داده شده برابر با مقدار خود شئ باشد مقدار true و اگر برابر نباشد مقدار إfalse برگردانده می‌شود.شکل تعریف شده این تابع به شکل زیر است:
public boolean equals(Object o)
چیزی که این متد به عنوان پارامتر ورودی می‌گیرید می‌تواند هر نوع شیئی باشد.
مقدار بازگشتی این متد همانطور که گفته شد یک مقدار boolean است که اگر ورودی متد با خود شئ برابر باشند true برگردانده می شود. در ادامه مثالی برای این متد آورده شده است:
public class Test{ 

   public static void main(String args[]){
      Integer x = 5;
      Integer y = 10;
      Integer z =5;
      Short a = 5;

      System.out.println(x.equals(y));  
      System.out.println(x.equals(z)); 
      System.out.println(x.equals(a));
     }
}
خروجی کد بالا به شکل زیر خواهد بود
false
true
false
  • متد valeuOf: این متد مقدار عددی موجود در یک شئ وارد شده را بر‌می‌گرداند. آرگومان ورودی می‌تواند نوع داده اصلی یا String و مانند این‌ها باشد.
این یک متد استاتیک است. این متد می‌تواند ۲ آرگومان ورودی داشته باشد که آرگومان اولی یک رشته و آرگومان دوم مبنای عدد مورد نظر باشد. به این شکل که اگر بخواهیم عدد موجود در رشته را به یک عدد در مبنای ۱۶(هگزادسیمال) تبدیل شود آرگومان دوم را ۱۶ قرار دهیم. شکل‌های استفاده از این تابع در کد زیر آمده است:
static Integer valueOf(int i)
static Integer valueOf(String s)
static Integer valueOf(String s, int radix)
پارامتر ورودی در خط اول کد بالا برای یک عدد int است که وارد می‌شود و می‌توان این عدد را با استفاده از این متد به انواع داده عددی مختلف تبدیل کرد. در خط دوم یک رشته به متد داده می‌شود که دارای اعداد در داخل رشته است که با استفاده از این متد می‌توان آن را تبدیل به عدد کرد. در خط سوم نیز یک رشته دارای عدد به عنوان پارامتر ورودی اولی می‌باشد و پارامتر دوم نیز مبنای عدد است. خروجی این تابع یک عدد است که در مثال زیر استفاده از این متد آورده شده است.
public class Test{ 

   public static void main(String args[]){
      
      Integer x =Integer.valueOf(9);
      Double c = Double.valueOf(5);
      Float a = Float.valueOf("80");               

      Integer b = Integer.valueOf("444",16);

      System.out.println(x); 
      System.out.println(c);
      System.out.println(a);
      System.out.println(b);
   }
}
خروجی کد به شکل زیر خواهد بود:
9
5.0
80.0
1092
  • متد toString این متد مقدار هر شی را تبدیل به رشته می‌کند و بازمی گرداند. این متد می‌تواند یک ورودی عددی داشته باشد که آن را به رشته تبدیل کرده و بازمی گرداند. این متد برای همه اشیاء درجاوا وجود دارد. انواع مختلف این متد به شکل‌های زیر است:
String toString()
static String toString(int i)
مثال‌هایی از این متد در کد زیر نشان داده شده است:
public class Test{ 

   public static void main(String args[]){
      Integer x = 5;

      System.out.println(x.toString());  
      System.out.println(Integer.toString(12)); 
   }
}
خروجی کد به شکل زیر خواهد بود:
5
12
در این بخش به معرفی کلاس های wrapper مربوط به اعداد پرداختیم و متدهای آن را معرفی کردیم. در مطالب بعدی به ادامه معرفی متدهای این کلاس ها خواهیم پرداخت Itpro باشید


نویسنده: مهدی عادلی فر
منبع: انجمن تخصصی فناوری اطلاعات ایران
behrad nasehi
۲۰ خرداد ۹۷ ، ۱۶:۵۸ موافقین ۰ مخالفین ۰ ۰ نظر
معرفی فریمورک Spring جاوا
سلام دوستان. در سری آموزش های زبان جاوا گفتیم که زبان جاوا یک زبان قدرتمند است که می توان با آن برای فریمورک های مختلف و تکنولوژی های متفاوت برنامه نویسی کرد. یکی از بستر هایی که امروز برنامه نویسی در آن بیشتر از بقیه مورد استفاده قرار می گیرد بستر وب می باشد. دلایل محبوبیت برنامه نویسی در بستر وب می تواند پیشرفت ارتباطات اینترنتی و سهولت استفاده از آن در همه دستگاه ها از جمله کامپیوتر های لپتاپ و تبلت و موبایل و ... باشد. اخیرا هم شاهد ظهور اینترنت اشیا می باشیم. با این تفاسیر زبان جاوا هم باید در این بستر خیلی مهم حرفی برای گفتن داشته باشد.
Image


Spring framework


زبان جاوا برای برنامه نویسی وب فریمورک ها و تکنولوژی های بسیار متنوعی ارائه کرده است که معروفترین و محبوب ترین آنها فریمورک spring می باشد. البته این تکنولوژی فقط برای وب نیست و با آن می توان برنامه های مختلفی نوشت. Spring در برنامه نویسی تجاری جاوا معروف ترین فریمورک است و میلیون ها برنامه نویس با آن کار می کنند. دلایل استفاده این همه برنامه نویس از این فریمورک performance بسیار بالا و تست راحت و معماری آن است. فریمورک spring یک پلتفرم اوپن سورس جاوا است که توسط Rod Johnson در سال 2003 نوشته شده است. با استفاده از ویژگی های spring می توان هر برنامه جاوایی را نوشت. با این حال قابلیت هایی را برا نوشتن برنامه های تحت وب تحت پلت فرم Java EE دارد. هدف فریمورک spring این است که برنامه نویسی J2EE را آسان تر کند و با استفاده از مدل برنامه نویسی POJO، برنامه نویسی را گسترش دهد. قبل از این که به ادامه بحث در مورد spring بپردازیم دو کلمه J2EE و POJO را معرفی می کنیم.

J2EE چیست؟


Image


J2ee مخفف java to platform, enterprise edition می باشد. که در برنامه نویسی نرم افزار های سازمانی و تجاری بسیار مورد استفاده قرار می گیرد. این پلتفرم API ها و روتین هایی برای برنامه نویسی نرم افزار های سازمانی فراهم می آورد که از جمله آنها API هایی برای کار با شبکه و وب سرویس ها می باشد. j2ee علاوه بر شکل استاندارد جاوا ویژگی هایی مانند ORM ها و معماری چند لایه و وب سرویس ها را نیز دارا می باشد. برای برنامه نویسی j2ee باید از زبان جاوا استفاده شود. در حال حاضر نسخه 7 جاوا مورد استفاده قرار می گیرد. یکی از مهم ترین API های j2ee ، servlet می باشد که مربوط به درخواست های http و پردازش آن ها است که امکان نوشتن برنامه های وب بر پایه سرور جاوایی را فراهم می کند. و صفحاتی که با jsp طراحی می شوند از این امکان بهره می برند.
Image


POJO چیست؟


POJO مخفف Plain Old Java Object می باشد. این کلمه به اشیائی اطلاق می شود که کلاس آنها به هیچ کلاس دیگری وصل نیست و از طرف هیچ کلاسی محدود نشده اند. در جاوا به صورت واضح به کلاس هایی گفته می شود که از هیچ کلاس دیگری extend نشده باشند و هیچ اینترفیسی را implement نکرده باشند. همچنین قید های هیچ کلاسی را نداشته باشند.

ویژگی های spring


Spring بر پایه برنامه نویسی جنبه گرا (aspect oriented) و معکوس کردن کنترل (inversion of control) طراحی شده است. Spring به شکل ماژولار طراحی شده است و از ماژول های مختلف برای رفع نیاز برنامه نویسان استفاده می کند. تست کردن در این فریمورک ساده است. چون کدهایی که شما می نویسید ربطی به محیط ندارند. همچنین قسمت وب spring بر مبنای معماری mvc ساخته شده است.

Dependency Injection


یکی از تکنولوژی هایی که spring به خاطر آن مشهور شده است Dependency injection با استفاده از Inversion of Control می باشد به خاطر این که معنی فارسی این عبارات گویای همه چیز نیست از معادل انگلیسی آن استفاده می کنیم برای مثال تزریق وابستگی ها و معکوس کردن کنترل شاید منظور را نرساند. دوست خوبم مهندس احمدی در این لینک این مفاهیم را در زبان سی شارپ توضح داده اند. Inversion of control یک مفهوم کلی است و به شکل های گوناگونی می توان آن را توضیح داد و dependency injection یک مثال از inversion of control می باشد. زمانی که ما یک برنامه جاوا می نویسیم کلاس ها و اشیا باید تا جایی که جا داشته باشد از هم مستقل باشد. مستقل بودن کلاس ها از هم به استفاده مجدد از کد بسیار کمک می کند. و همچنین اگر شما کد را تغییر دهید چون بقیه کلاس ها با هم وابستگی کمی دارند نیاز به تغییر در کل نمی شود. ولی اگر همه کلاس ها به هم وابسته باشد وقتی که یک کلاس را تغییر می دهید به صورت دومینو باید بقیه کلاس ها را نیز تغییر دهید و این بسیار زمانبر و هزینه بر می باشد. dependency injection برای این که کلاس ها از یکدیگر مستقل باشند ولی از یکدیگر استفاده کنند بسیار کمک می کند.

Aspect oriented programming یا برنامه نویسی جنبه گرا چیست؟


Image


همانطور که گفتیم یکی از خصوصیات Spring برنامه نویسی جنبه گرا می باشد. حال این برنامه نویسی جنبه گرا چیست؟ گاهی اوقات باید قابلیت هایی را به برنامه اضافه کنیم که در چند بخش از برنامه عمل می کنند. برای مثال ما امنیت را در برنامه باید در قسمت های مختلفی به کار ببریم. به این نوع قابلیت ها cross-cutting concern گفته می شود به معنی قید هایی که قسمت های مختلف باید آن ها را رعایت کنند. معمولا cross-cutting concern ها جدا از منطق اصلی برنامه می باشند. برای مثال لاگ گرفتن عملیات ها و یا کش کردن یا امنیت جزء اصلی منطق برنامه نیستند ولی کارهایی هستند که باید آنها را انجام داد. در برنامه نویسی شی گرا جزء اصلی برنامه شی و کلاس می باشد ولی در برنامه نویسی جنبه گرا جزء اصلی جنبه است. همانطور که dependency injection به شما کمک می کند که کلاس ها و اشیا با هم وابستگی نداشته باشند برنامه نویسی جنبه گرا هم کمک می کند که منطق اصلی برنامه از cross-cutting concern ها جدا باشد.
شاید با خواندن این مطلب علامت سوال هایی در ذهن شما ایجاد شده باشد که در مطالب بعدی در مورد spring آنها را برطرف خواهیم کرد Itpro باشید


نویسنده: مهدی عادلی فر
منبع: Itpro

behrad nasehi
۲۰ خرداد ۹۷ ، ۱۶:۵۰ موافقین ۰ مخالفین ۰ ۱ نظر

در قسمت قبلی سری آموزشی با مفهوم interface ها آشنا شدیم. interface ها نقش بسیار موثری در روند نوشتن یک برنامه بازی می کنند و در صورتی که یک برنامه نویس با نحوه استفاده صحیح از interface ها آشنا باشه، توانایی ایجاد کدهایی ساختاریافته و قابل گستری و نگهداری رو داره. در این قسمت از سری آموزشی زبان برنامه نویسی سی شارپ و برنامه نویسی شئ گرا، با دو مفهوم بسیار مهم در برنامه نویسی آشنا خواهیم شد، IoC که مخفف Inversion of Control و DI که مخفف Dependency Injection هست.همه ما در طول زندگی با وسایل زیادی سر و کار داریم، از وسایل اولیه زندگی مانند ماشین، یخچال، تلویزیون و ... تا وسایل که هر کس بر اساس نیاز کاری خودش با اونها سر و کار داره، مانند کامپیوتر یا لپ تاپ و گوشی. برای مثال، گوشی هوشمند خود را فرض کنید، این گوشی از قطعات زیادی تشکیل شده، صفحه نمایش، پردازنده، حافظه رم، باتری و کلی قطعات دیگه. حالا اتفاقی پیش میاد و خدای نکرده گوشی شما از دستتون میافته و صفحه نمایش گوشیتون آسیب میبینه.

کاری که می کنید باید گوشی رو به یک نمایندگی برده و صفحه نمایش رو تغییر بدید. حالا فرض کنید که گوشی شما جوری طراحی شده باشه که با آسیب دیدن صفحه نمایش نیاز باشه تا یک گوشی جدید تهیه کنید!!!! یا برای کارتون یک لپ تاپ تهیه کردید. بعد از مدتی نیاز دارید تا حافظه رم لپ تاپ رو افزایش بدید. در این حالت شما لپ تاپ رو پیش نمایندگی یا یک کارشناس در این زمینه می برید و حافظه رم لپ تاپ شما افزایش داده میشه. حال فرض کنید که لپ تاپ شما همچین قابلیتی نداشته باشه و شما نیاز باشه برای تغییر یا ارتقا حافظه یک لپ تاپ جدید خریداری کنید! برای حل این مشکل لوازم الکتریکی از قطعات مختلفی تشکیل شدند که قابلیت تغییر یا تعویض دارند. به این قابلیت طراحی ماژولار گفته میشه. در پیاده سازی سیستم های نرم افزاری نیز شما نیز به عنوان برنامه نویس باید با همچین دیدی نسبت به پیاده سازی نرم افزار اقدام کنید. ما در اینجا در مورد تغییر یکی از قسمت های نرم افزار صحبت خواهیم کرد که ارتباط مستقیمی به interface ها و IoC و DI دارد.برای آشنایی بیشتر با این مفاهیم، با یک مثال جلو میرویم. فرض کنید سیستمی پیاده سازی کردید که اعضاء می توانند در این سامانه اقدام به ثبت نام کنند. برای عملیات های مرتبط با مدیریت اعضاء کلاسی با نام Members می نویسیم:

public class Members
{
    public void Register(string firstName, string lastName)
    {
        // add member to database            
    }
}

همانطور که مشاهده می کنید این کلاس یک متد با نام Register دارد که عملیات ثبت نام اعضاء را انجام می دهد (تنها متد تعریف شده و کدی برای ثبت نام نوشته نشده است). پس از مدتی، فردی که درخواست پیاده سازی نرم افزار را از شما داشته، می خواهد زمانی که یک عضو جدید به سامانه اضافه شد، یک ایمیل برای شخص ارسال شود. کد کلاس به صورت زیر تغییر می کند:

public class Members
{
    public void Register(string firstName, string lastName)
    {
        // add member to database
        // send email to name@host.com
    }
}

تا اینجا مشکلی نیست، بعد از مدتی مجدداً شخص ذکر شده از شما می خواهد به جای ارسال ایمیل، یک پیامک برای او ارسال شود. شما مجدداً باید کد داخل متد Register را تغییر داده و عملیات ارسال پیامک را اضافه کنید:

public class Members
{
    public void Register(string firstName, string lastName)
    {
        // add member to database
        // send sms to 0912*******
    }
}

با هر درخواست، ما دائماً در حال تغییر کدهای نوشته شده داخل کلاس Members هستیم. اگر کمی اصولی کار کنیم، کلاسی با نام SmsManager ایجاد می کنیم و از آن کلاس داخل کلاس Members استفاده می کنیم:

public class SmsManager
{
    public void Send(string message)
    {
        // send sms to 0912*******
    }
}

public class Members
{
    public void Register(string firstName, string lastName)
    {
        // add member to database
        var sms = new SmsManager();
        sms.Send("New user registered!");
    }
}

حالا فرض کنید که مجدد، شخص ذکر شده درخواست جایگزینی ارسال ایمیل به جای پیامک را به ما می دهد، ما کلاسی با نام EmailManager تعریف کرده و از آن استفاده می کنیم:

public class EmailManager
{
    public void Send(string message)
    {
        // send message to name@host.com
    }
}

public class SmsManager
{
    public void Send(string message)
    {
        // send sms to 0912*******
    }
}

public class Members
{
    public void Register(string firstName, string lastName)
    {
        // add member to database
        var email = new EmailManager();
        email.Send("New user registered!");
    }
}

با تعریف کلاس های EmailManager و SmsManager، حجم تغییرات کلاس Members خیلی کم شد. اما می توان این تغییرات را خیلی کمتر کرد. در اینجا می خواهیم یکی از کاربردهای بسیار مهم interface ها، یعنی IoC یا Inversion of Control را بررسی کنیم. در ابتدا ما یک interface با نام INotifySender به صورت زیر ایجاد می کنیم:

public interface INotifySender
{
    void Send(string message);
}

اگر دقت کنید، متد signature متد Send در کلاس های EmailManager و SmsManager مشترک است. پس این دو کلاس قابلیت پیاده سازی INotifySender را دارند. کلاس های ذکر شده را به صورت زیر تغییر می دهیم:

public class EmailManager : INotifySender
{
    public void Send(string message)
    {
        // send message to name@host.com
    }
}

public class SmsManager : INotifySender
{
    public void Send(string message)
    {
        // send sms to 0912*******
    }
}

در قدم بعدی باید کلاس Members را جوری تغییر دهیم تا وابستگی متد Register به یک کلاس خاص از بین برود، یعنی به کلاس EmailManager یا SmsManager وابسته نباشد. اینکار را می توان با استفاده از INotifySender انجام داد. کد کلاس Members را به صورت زیر تغییر می دهیم:

public class Members
{
    private readonly INotifySender sender;

    public Members()
    {
        sender = new EmailManager();
    }

    public void Register(string firstName, string lastName)
    {
        // add member to database
        sender.Send("New member registered!");
    }
}

تغییرات کد بالا را با هم بررسی می کنیم، فیلدی تعریف کردیم از نوع INotifySender که داخل متد Register از این فیلد برای ارسال پیام استفاده می کنیم. این فیلد از داخل سازنده کلاس Members مقدار دهی می شود. در کد بالا ما شئ ای از نوع EmailManager که INotifySender را پیاده سازی کرده است ایجاد کرده و داخل فیلد sender میریزیم. حال فرض کنید که بخواهیم عملیات را از ایمیل به پیامک تغییر دهیم، برای اینکار تنها سازنده را به صورت زیر تغییر می دهیم:

public class Members
{
    private readonly INotifySender sender;

    public Members()
    {
        sender = new SmsManager();
    }

    public void Register(string firstName, string lastName)
    {
        // add member to database
        sender.Send("New member registered!");
    }
}

به عملیات بالا، Inversion of Control گفته می شود. ما در حقیقت وابستگی متد Register را به یک کلاس خاص از بین بردیم. به این نوع پیاده سازی tightly coupled گفته می شود. اما باز یک مشکل وجود دارد، ما هنوز هم در حال تغییر کلاس Members هستیم. در قدم بعد باید وابستگی کلاس Members را به کلاس های EmailManager و SmsManager به طور کامل از بین ببریم. برای اینکار، ما به جای ساختن شئ داخل سازنده، آن را به عنوان یک پارامتر به سازنده کلاس Members ارسال می کنیم:

public class Members
{
    private readonly INotifySender sender;

    public Members(INotifySender sender)
    {
        this.sender = sender;
    }

    public void Register(string firstName, string lastName)
    {
        // add member to database
        sender.Send("New member registered!");
    }
}

نحوه استفاده از کلاس Members به صورت زیر است:

var members = new Members(new EmailManager());
members.Register("Hossein", "Ahmadi");

حال اگر بخواهیم نوع ارسال پیام را به پیامک تغییر دهیم تنها کافیست نوع شئ ارسالی به سازنده کلاس Members را تغییر دهیم:

var members = new Members(new SmsManager());
members.Register("Hossein", "Ahmadi");

به این تکنیک، DI یا Dependency Injection گفته می شود. ترکیب IoC و DI کمک زیادی به شما در نوشتن کدهایی می کنند که به راحتی قابلیت تغییر و به روز رسانی دارند. در این مقاله با یکی از کاربردهای بسیار مهم interface ها آشنا شدید. کتابخانه های آماده ای برای IoC و DI وجود دارند که به آنها IoC Container نیز گفته می شوند که روند DI رو برای شما به عنوان یک برنامه نویس بسیار راحت تر می کنند. در یک فیلم آموزشی در مورد IoC Container ها به تفصیل صحبت خواهیم کرد. در قسمت بعدی با مفهوم Type Casting و انواع Cast ها در زبان سی شارپ آشنا خواهیم شد. ITPRO باشید

نویسنده: حسین احمدی
منبع: انجمن تخصصی فناوری اطلاعات ایران


آشنایی با مفاهیم Inversion of Control و Dependency Injection

behrad nasehi
۲۰ خرداد ۹۷ ، ۱۶:۴۵ موافقین ۰ مخالفین ۰ ۰ نظر
behrad nasehi
۰۹ خرداد ۹۷ ، ۰۱:۵۲ موافقین ۰ مخالفین ۰ ۰ نظر