آشنایی اولیه با اشیاء (Objects)
در فصل دوم با انواع دادهی اولیه در جاوا اسکریپت آشنا شدیم. همچنین اشاره شد که هر دادهای که از انواع دادهی اولیه نباشد، از نوع شئ یا Object خواهد بود. در این فصل قصد داریم با نوع دادهی Object آشنا شویم. البته پیش از این نیز با نمونههایی از اشیاء آشنا شدهایم. در فصل سوم با انواع دادهای مانند آرایهها، مجموعهها و نقشهها آشنا شدیم که تمام این موارد (همچنین توابع) نوعی Object هستند. در واقع این موارد اشیاء پیشساخته (Built-in Objects) در جاوا اسکریپت هستند. اما در این فصل قصد داریم با نحوهی تعریف و استفاده از اشیاء جدید آشنا شویم.
مواردی که در این فصل میآموزید :- مفهوم اشیاء
- نحوهی تعریف و استفاده از اشیاء
- مفهوم انواع مقدار و انواع ارجاع و تفاوت آنها
- آشنایی با برخی اشیاء پیشساختهی پرکاربرد در جاوا اسکریپت
مفهوم شئ در جاوا اسکریپت
در فصل دوم یک تعریف بسیار مختصر از مفهوم شئ در جاوا اسکریپت ارائه شد. حال قصد داریم با جزئیات بیشتری این مفهوم را معرفی کنیم. به طور کلی در برنامهنویسی، یک شئ مدل انتزاعی و ساده شده از یک مفهوم در دنیای واقعی (یا بعضاً یک مفهوم ذهنی) است. یک مثال معروف که در اکثر منابع آموزشی برنامهنویسی در مورد اشیاء به کار برده میشود مثال اتومبیل است.
یک اتومبیل را در ذهن خود تصور کنید. اگر قصد توصیف یک اتومبیل را داشته باشید به چه مواردی اشاره خواهید کرد. احتمالاً مواردی مانند رنگ، وزن، ابعاد، حداکثر سرعت، ظرفیت مخزن سوخت، سرعت فعلی حرکت، قیمت، سال تولید و ... را مطرح خواهید کرد.
اگر به مواردی که اشاره شد توجه کنید، متوجه خواهید شد که یک مورد با سایر موارد تفاوتی محسوس دارد. آن هم سرعت فعلی حرکت است. تفاوت این ویژگی با سایر ویژگیها در این است که مقدار این ویژگی متغیر است. اما سایر ویژگیها به طور معمول تغییر نمیکنند، هرچند در شرایط خاص اکثر موارد قابل تغییر هستند. مثلاً ممکن است رنگ یک اتومبیل را با رنگآمیزی تغییر داد، یا ظرفیت مخزن سوخت را میتوان با روشهایی تغییر داد. اما این تغییرات در ویژگیهای یک اتومبیل مرسوم نیستند. اما تغییر در سرعت حرکت یک اتومبیل بسیار مرسوم است و در هر بار استفاده از اتومبیل بارها شاهد کاهش و افزایش سرعت حرکت آن هستیم.
پس میبینیم برخی ویژگیها در اشیاء نیاز به تغییر دارند. در دنیای واقعی برای اعمال چنین تغییراتی از ابزارهای موجود در همان شئ استفاده میشود. مثلاً برای افزایش سرعت باید پدال گاز را فشار داد و برای کاهش سرعت باید پدال ترمز را فشار داد. اما در دنیای برنامهنویسی برای انجام این تغییرات از مفهومی به نام متد (Method) استفاده میشود. البته کلمهی متد را بارها پیش از این نیز به کار بردهایم. اما در این فصل با جزئیات بیشتری با مفهوم آن آشنا خواهیم شد.
پس برای شبیهسازی رفتار اشیاء در دنیای واقعی، در برنامهنویسی از متدها استفاده میشود. در مورد مثال اتومبیل، میتوان برای شئ مربوطه از یک متد به نام speedUp برای افزایش سرعت و از یک متد به نام speedDown برای کاهش سرعت استفاده کرد.
البته اشیاء در برنامهنویسی، همیشه برای شبیهسازی اشیاء واقعی و فیزیکی به کار نمیروند. و بعضاً برای شبیهسازی برخی مفاهیم ذهنی و انتزاعی نیز به کار میروند. مثلاً میتوان شئ Math در جاوا اسکریپت را مثال زد که برای شبیهسازی عملگرها، ثابتها و توابع ریاضی به کار برده میشود که در همین فصل با آن آشنا خواهید شد.
نکتهی بسیار مهمی که در زمان تعریف اشیاء باید در نظر داشته باشید این است که برای شبیهسازی یک شئ از دنیای واقعی در دنیای برنامهنویسی، نیازی به در نظر گرفتن تمام ویژگیها و تمام رفتارهای ریز و درشت آن شئ نیست. بلکه باید فقط به موارد ضروری توجه شود.
مثلاً یک سیستم مدیریت حسابهای بانکی را در نظر بگیرید. در چنین سیستمی باید مشخصات افرادی که دارای حساب در این سیستم بانکی هستند در برنامه ذخیره شود. پس باید یک مدل انتزاعی برای ذخیرهسازی ویژگیهای انسان و رفتارهای آن تعریف کنیم. اما آیا میتوان تمام ویژگیهای یک انسان را در برنامه تعریف کرد؟ و آیا اصلاً نیاز به چنین کاری هست؟ مثلاً برای یک بانک، آیا میزان قد و وزن افراد مهم است؟ آیا گروه خونی افراد مهم است؟ آیا داشتن گواهینامهی رانندگی مهم است؟
پاسخ تمام این سوالات منفی است. پس در هر برنامهای برای شبیهسازی اشیاء فقط باید به ویژگیها و رفتارهایی که در برنامهی مورد نظر اهمیت دارند توجه شود. مثلاً در مورد سیستم بانکی باید برای هر شخص ویژگیهایی مانند نام، نام خانوادگی، نام پدر، کد ملی، تاریخ تولد و ... را در نظر گرفت.
اما در برنامهای که اطلاعات یک بیمارستان را ذخیره و مدیریت میکند، برای شبیهسازی افراد (بیماران) به موارد دیگری احتیاج داریم. مثلاً مواردی مانند گروه خونی یا میزان قد و وزن در چنین مواردی مهم است.
میبینید که برای شبیهسازی یک مفهوم واحد مانند انسان در دو برنامهی متفاوت به ویژگیها و رفتارهای متفاوتی نیاز پیدا میکنیم. پس نیازی نیست که برای شبیهسازی مفهوم انسان تمام ویژگیهای یک انسان را در نظر بگیریم. بلکه باید به ویژگیهایی بپردازیم که در برنامهی مورد نظر ما دارای اهمیت هستند.
نمونهای از اشیاء در جاوا اسکریپت
همانطور که اشاره شد، پیش از این نیز با برخی از اشیاء پیشساختهی جاوا اسکریپت آشنا شدهایم و برخی کاربردهای آنها را نیز دیدهایم. به عنوان یک مثال برای درک بهتر مفهوم شئ در برنامهنویسی، میتوان شئ آرایه یا Array را نام برد که در موارد متعددی از آن استفاده کردهایم.
فرض کنید فهرستی از نام چند میوه بر روی کاغذ نوشته شده است. حال میخواهیم این فهرست را به نوعی وارد یک برنامهی جاوا اسکریپت کرده و پردازشهایی را بر روی آن انجام دهیم. قطعه کد زیر میتواند این اسامی را در یک آرایه (که نوعی از اشیاء است) ذخیره کند. یعنی میتوان مفهوم فهرست یا لیست را در جاوا اسکریپت با آرایهها شبیهسازی کرد.
let fruits = ['Apple' , 'Orange' , 'Banana' , 'Cherry'];
در حالتی که نام میوهها بر روی کاغذ نوشته شده است، این فهرست چه ویژگیهایی دارد و چه کارهایی ممکن است بر روی آنها انجام شود؟ یکی از ویژگیهای این فهرست تعداد نامها یا تعداد میوههایی است که در آن قرار دارد. پس باید برای آن معادلی در دنیای برنامهنویسی داشته باشیم. حتماً به یاد دارید که برای به دست آوردن تعداد عناصر یک آرایه میتوانستیم از خاصیت length به صورت زیر استفاده کنیم.
fruits.length;
← 4
پس در دنیای برنامهنویسی برای شبیهسازی ویژگیهای یک شئ، از خاصیتها (Properties) استفاده میشود.
اما چه اَعمال یا رفتارهایی را میتوان بر روی این فهرست کاغذی انجام داد؟ یکی از اعمالی که ممکن است بر روی این فهرست انجام شود، مرتبسازی اسامی بر اساس حروف الفبا است. پس باید معادلی برای انجام این کار در دنیای برنامهنویسی داشته باشیم. حتماً به یاد دارید که برای مرتبسازی عناصر یک آرایه میتوانستیم از متد sort به صورت زیر استفاده کنیم.
fruits.sort();
← ["Apple" , "Banana" , "Cherry" , "Orange"]
پس در دنیای برنامهنویسی برای شبیهسازی رفتارهای یک شئ، از متدها (Methods) استفاده میشود.
میبینید که پیش از این نیز با انواع مختلفی از اشیاء در جاوا اسکریپت به صورت عملی کار کردهایم. همچنین با تعداد زیادی از خاصیتها و متدهای این اشیاء نیز آشنا شدهایم. در این فصل میخواهیم با نحوهی تعریف اشیاء جدید آشنا شویم. زیرا اشیاء پیشساختهی جاوا اسکریپت همیشه پاسخگوی تمام نیازهای برنامهنویس نیستند و در بسیاری از برنامهها لازم است تا انواع جدیدی از اشیاء را تعریف کنیم.