خرداد ۷, ۱۳۹۸ Mostafa بدون دیدگاه

اگر دنبال برنامه نویس برای ساخت افزونه ،قالب،سایت،برنامه ویندوز،اپلیکیشین اندروید،ربات تلگرام و.... هستید ،سفارش برنامه نویسی را مطالعه نمایید.

توجه : درخواست افزونه ،قالب، اسکریپت و نرم افزار و ... و سوالات و مشکلات خود را در انجمن ارسال نمایید

در این مبحث به شرح static binding و dynamic binding که تشخیص، فراخوانی و اتصال کد مربوطه در زمان کامپایل (زودهنگام) و اجرا (دیرهنگام) هست، خواهیم پرداخت.

متصل کردن اسم و فراخوانی متد به بدنه و پیاده سازی آن تحت عنوان binding/اتصال کد شناخته می شود.

دو نوع binding وجود دارد:

static binding یا اتصال زودهنگام و زمان کامپایل کد
dynamic binding یا اتصال دیرهنگام و زمان اجرای کد

درک مفهوم نوع داده ای/Type

ابتدا به شرح مفهوم نوع داده ای instance/نمونه خواهیم پرداخت.
نوع داده ای متغیرها

هر متغیری یک نوع دارد. این نوع می تواند اولیه همچون short و long باشد یا از نوع غیر اولیه (non-primitive) نظیر آرایه، آّبجکت و غیره باشد.

int data=30;

در خط فوق می بینید که نوع داده ای متغیر بر روی int تنظیم شده است.

reference variable یا متغیر از جنس کلاس/اشاره گر به کلاس

class Dog{  
 public static void main(String args[]){  
  Dog d1;//Here d1 is a type of Dog  
 }  
}

در این قطعه کد، d1 یک متغیر از جنس کلاس Dog می باشد.

نوع شی

یک شی، علاوه بر اینکه نمونه ای از یک کلاس خاص است، نمونه ای از جنس کلاس پدر خود (superclass) نیز محسوب می شود.

class Animal{}  
class Dog extends Animal{  
 public static void main(String args[]){  
  Dog d1=new Dog();  
 }  
}

در قطعه کد بالا، علاوه بر اینکه d1 نمونه ای از کلاس Dog (آبجکتی از جنس کلاس Dog) می باشد، یک آبجکت از نوع کلاس Animal نیز محسوب می شود.
اتصال زودهنگام و زمان کامپایل کد/static binding

زمانی که نوع آبجکت در زمان کامپایل برنامه مشخص می شود، به آن اتصال زودهنگام کد می گویند.

در صورت وجود هر گونه متد با سطح دسترسی private، final و static در کلاس، اتصال زودهنگام رخ می دهد.

مثال کاربردی از اتصال زودهنگام  :

class Dog{  
 private void eat(){System.out.println("dog is eating...");}  
 public static void main(String args[]){  
  Dog d1=new Dog();  
  d1.eat();  
 }  
}

اتصال دیرهنگام و زمان اجرای کد

زمانی که نوع آبجکت در زمان اجرای برنامه مشخص می شود (توسط کامپایلر)، به آن اتصال دیرهنگام گویند.

مثال کاربردی از اتصال کد در زمان اجرا (اتصال دیرهنگام ) :

class Animal{  
 void eat(){System.out.println("animal is eating...");}  
} 
class Dog extends Animal{  
 void eat(){System.out.println("dog is eating...");}   
 public static void main(String args[]){  
  Animal a=new Dog();  
  a.eat();  
 }  
}

خروجی : dog is eating…

در مثال بالا همان طور که می بینید، نوع آبجکت برای کامپایلر مشخص نیست چرا که متغیر a که آبجکتی از کلاس Dog را در خود نگه داشته، از جنس کلاس Animal می باشد. به عبارت دیگر نمونه ی کلاس Dog همچنین آبجکتی از جنس کلاس Animal می باشد و به همین دلیل، کامپایلر نمی تواند نوع دقیق آن را تشخیص دهد بلکه صرفا نوع پایه (base type) آن را در زمان کامپایل کد، می شناسد.


نظرات

توجه : لطفاً فقط نظرات خود را از این طریق ارسال نمایید و سوالات و مشکلات خود را در انجمن سایت مطرح نمایید.

دیدگاهتان را بنویسید