روش ایستا در مقابل غیر استاتیک
روش یک سری از عبارات است که برای انجام یک کار خاص انجام می شود. روش ها می توانند ورودی ها را بگیرند و خروجی ها را تولید کنند. روش های ایستا و غیر ایستا دو نوع روش موجود در زبان های برنامه نویسی شی گرا هستند. متد استاتیک متدی است که با یک کلاس مرتبط است. روشی که با یک شی مرتبط است، روش غیر ایستا (مثلا) نامیده می شود. در زبان های شی گرا، روش ها به عنوان مکانیزمی برای کار بر روی داده هایی که در اشیاء ذخیره می شوند استفاده می شود.
روش استاتیک چیست؟
در برنامه نویسی شی گرا، متد استاتیک متدی است که با یک کلاس مرتبط است.بنابراین، متدهای استاتیک قابلیت کار بر روی یک نمونه خاص از یک کلاس را ندارند. متدهای استاتیک را می توان بدون استفاده از یک شی از کلاس که حاوی متد استاتیک است فراخوانی کرد. در زیر مثالی از تعریف متد استاتیک در جاوا آورده شده است. هنگام تعریف یک متد استاتیک در جاوا باید از استاتیک استفاده کرد.
public class MyClass { public static void MyStaticMethod() { // کد متد استاتیک }
}
متد استاتیک تعریف شده در بالا را می توان با استفاده از نام کلاسی که به آن تعلق دارد به صورت زیر فراخوانی کرد.
MyClass. MyStaticMethod();
نکته مهمی که باید به آن توجه داشت این است که روش های استاتیک فقط می توانند به اعضای ثابت دسترسی داشته باشند.
روش غیر استاتیک چیست؟
یک متد غیر ایستا یا یک متد نمونه، متدی است که با یک شی در یک کلاس مرتبط است. بنابراین، متدهای غیر استاتیک با استفاده از یک شی از کلاسی که متد در آن تعریف شده است، فراخوانی می شود.یک متد غیر ایستا می تواند به اعضای غیر ایستا و همچنین اعضای ایستا یک کلاس دسترسی داشته باشد. در بسیاری از زبان های شی گرا (مانند C++، C، جاوا)، زمانی که یک متد غیر ایستا فراخوانی می شود، شیئی که متد را فراخوانی کرده است به عنوان یک آرگومان ضمنی ارسال می شود (به آن مرجع «this» می گویند). بنابراین در داخل متد می توان از این کلمه کلیدی برای اشاره به شیئی که متد را فراخوانی می کند استفاده کرد. در زیر مثالی از تعریف یک متد نمونه در جاوا آورده شده است.
public class MyClass { public void MyInstanceMethod() { // کد روش نمونه }
}
متد نمونه تعریف شده در بالا می تواند با استفاده از یک شی از کلاسی که به آن تعلق دارد به صورت زیر فراخوانی شود.
MyClass objMyClass=کلاس من جدید();
objMyClass. MyInstanceMethod ();
تفاوت بین روش استاتیک و غیر استاتیک چیست؟
متدهای استاتیک متدهایی هستند که با یک کلاس مرتبط هستند، در حالی که متدهای غیراستاتیک متدهایی هستند که با اشیاء یک کلاس مرتبط هستند.یک کلاس برای فراخوانی یک متد غیر استاتیک ابتدا باید نمونه سازی شود، اما روش های استاتیک این نیاز را ندارند. آنها را می توان به سادگی با استفاده از نام کلاسی که متد استاتیک را در اختیار دارد فراخوانی کرد. تفاوت مهم دیگر این است که یک متد غیر ایستا معمولاً دارای یک مرجع به شیئی است که متد را فراخوانی می کند و با استفاده از این کلمه کلیدی در داخل متد قابل دسترسی است. اما این کلمه کلیدی را نمی توان در روش های ثابت استفاده کرد زیرا آنها با یک شی خاص مرتبط نیستند.