اشیاء در جاوا اسکریپت

درک برنامه‌نویسی شیءگرا

 

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

 

این راه حل استفاده از اشیاء (Object) می باشد. برنامه نویسی شیءگرا ممکن است ترسناک بظر برسد اگر قبلا از آن استفاده نکرده باشید، اما نباید این طور باشد. هدف اصلی آن ساده تر کردن زندگی برای شماست. به عنوان مثال فرض کنید در زندگی واقعی تمام اجزای داخلی مرتبط با هم یک یخچال را در آشپزخانه خود دارید. برای خنک کردن غذا، باید پمپها را روشن کنید، فن ها را بکار بیندازید، ماده خنک کننده را به جریان بیندازید، کمپروسور را فعال نمایید و الی آخر. این کار بنظر زیاد می رسد، بهتر آن است که تمام این کارها را در یک مفهوم قابل درک ساده با نام شیء گرد هم بیاوریم (یخچال). اکنون تمام عملیات داخلی از دید پنهان می ماند و می توانید فکر کنید که یخچال وجود دارد که غذا را خنک کند.

 

این همان ایده ای بود که پشت برنامه نویسی شیء گرا قرار دارد. کد خود را به صورت چند شیء تقسیم می کنید، مثلا یک مدیر بانک اطلاعاتی. این همان روشی است که برنامه نویسان می توانند در مورد برنامه های کاربردی خود فکر کنند، یعنی به صورت اشیایی با وظایف و مسئولیتهای خاص، تمام توابع لازم برای کارهای داخلی اشیاء، در آن شیء گرد آوری شده است و از دید خارجی پنهان است. داده های مورد استفاده توسط شیء نیز داخل شیء پنهان است و این یکی از روشهای اصلی است که اشیاء و استفاده از توابع فرق دارند، نه تنها می توانید توابع بسیاری را در یک شیء گرد هم آورید، بلکه می توانید  داده های مورد استفاده آن توابع را نیز این چنین کنید.

 

بنابراین بجای 200 تابع و 500 متغیر مورد نیاز برای پشتیبانی از چاپ در برنامه کاربردی خود، می توانید همه چیز را یک شیء مثلا با نام printer گردآوری نمایید. تمام توابع و متغیرها در داخلی شیء پنهان هستند و در خارج از آن، قابل دستیابی نیستند. به توابع در برنامه نویسی شیءگرا نام جدیدی داده می شود متدها (Method) و موارد داده ای ذخیره شده در یک شیء را خصوصیات (property) می نامند.

 

شیء printer ممکن است تقریبا متدهایش را بطور داخلی پنهان نگه دارد، اما از قصد چند متد را برای استفاده عموم در معرض قرار می دهد و این متدها، همان متدهایی هستند که برای کار شیء printer استفاده می کنید. به عنوان مثال، شیء printer ممکن است یک متد با نام print داشته باشد و متنی را که می خواهید چاپ شود به آن متد انتقال دهید. printer('This is a test');

 

برای ایجاد یک شیء ابتدا نیاز به ایجاد یک کلاس (Class) دارید. نسبت کلاس ها با اشیاء، مثل بُرنده کیک به کیک می باشد. اشیاء را می توانید با استفاده از کلاس ها ایجاد نمایید. در حقیقت یک شی یک نمونه از یک کلاس است.

 

اشیاء در جاوا اسکریپت

 

یکی از اساسی ترین نوع داده ای مورد استفاده در هسته جاوا اسکریپت نوع داده Object یا شی است. همانطور که می دانیم جاوا اسکریپت شامل مجموعه از نوع داده (data type) مختلف است، نوع داده ای Object و پنج نوع داده ای ساده دیگر: Undefined، Boolean، String، Number و Null. توجه داشته باشید که تمام این دیتا تایپ ها تغییر ناپذیر (نمی توانند تغییر کنند) هستند، در حالی که اشیاء تغییر پذیر (می توانند تغییر کنند) هستند.

 

Object چیست؟

 

یک آبجکت یا شی لیستی از انواع داده ای اولیه نامرتب است که به عنوان یک سری از یک جفت نام-مقدار ذخیره می شوند. هر آیتم در لیست یک ویژگی (property) نامیده می شود (توابع در اشیا متد – Method نامیده می شوند).

 

به عنوان مثال شی ساده زیر را در نظر بگیرید:

 

 

یک شیء را به عنوان یک لیست از عناصر تصور کنید، هر عنصر (property یا method) در لیست با یک جفت نام و مقدار ذخیره می شود. نام عنصرها در مثال فوق firstName و lastName است. و مقدارهای آن Patrick و DerAvakian است.

 

نام مشخصه ها (Property) می تواند یک رشته (String) یا یک عدد (Number) باشد، اما اگر از یک عدد برای نام مشخصه خود استفاده کنید، می بایست برای دسترسی به آن از براکت [ ] استفاده کنید.  به عنوان مثال در زیر یک مثال دیگر از اشیا که در نام مشخصه از اعداد استفاده شده است مشاهده می کنید:

 

 

بهتر است که اعداد به عنوان نام property استفاده نکنیم! شما به عنوان یک توسعه دهنده جاوا اسکیپت  غالبا از نوع داده ای object برای ذخیره داده ها و ایجاد متدها و توابع سفارشی استفاده می کنید.

 

نوع داده ارجاع و انواع داده اولیه

 

در تئوری زبان های برنامه نویسی، یک نوع مرجع (reference type) نوع داده ای است که اشاره به یک شیء در حافظه دارد. از سوی دیگر نوع داده ای اشاره گر (pointer) اشاره به آدرس حافظه دارد.

 

یکی از تفاوت های اصلی بین نوع داده مرجع و انواع داده اولیه این است که مقدار نوع داده ای مرجع به عنوان یک مرجع ذخیره می شود، بطور مستقیم در متغیر به عنوان یک مقدار ذخیره نمی شود، بلکه به عنوان نوع داده ای اولیه است. به عنوان مثال:

 

 

توجه داشته باشید که در کد فوق حتی اگر ما مقدار person را به Elvis تغییر داده ایم، اما متغیر anotherPerson هنوز مقدار person را نگه داشته است.

 

 

در مثال فوق ما شیء person را در anotherPerson کپی کردیم، اما چون مقدار داخل person به عنوان یک مرجع (reference) و نه یک مقدار واقعی ذخیره شده است، زمانی که مشخصه person.name را به Elvis تغییر می دهیم، این تغییر بر روی anotherPerson نیز منعکس می شود، به این خاطر که هرگز یک کپی واقعی از مقدار مشخصه person در خود ندارد، بنابراین فقط یک مرجع به آن است.