مقدمه ای بر تردها و اینترفیس ها در زبان برنامه نویسی جاوا


در این آموزش قصد داریم تا یکی از مباحث بسیار مهم در زبان برنامه نویسی جاوا را مورد بررسی قرار دهیم تحت عنوان Thread. به طور کلی می توان گفت که تردها دارای کاربردهای فراوانی هستند که از آن جمله می توان به طراحی بازی ها اشاره کرد (لازم به ذکر است که واژه انگلیسی Thread دارای معانی متعددی در زبان فارسی است که از آن جمله می توان به "نخ، رشته، ریسمان" اشاره کرد.)

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

اهمیت چنین مسئله ای در بازی هایی همچون بازی های اندرویدی بیشتر خود را نشان خواهد داد. فرض کنیم در یک بازی ابرها در آسمان در حال حرکت هستند (کار شماره یک) و در همان حال تعدادی پرنده نیز از دور دست ها وارد صحنه می شوند (کار شماره دو). حال شکارچی می بایست با شلیک به سمت پرنده ها آن ها را شکار کند (کار شماره سه). در واقع این سه کار به طور هم زمان انجام می شوند. این در حالی است که اگر در طراحی بازی از کلاس Thread استفاده نشود، اول بایستی صبر کنیم تا حرکت ابرها به اتمام برسد سپس پرنده ها وارد صحنه شوند و پس از آن که حرکت پرنده ها تمام شد، شکارچی می تواند بدون آن که نگران این مسئله باشد که ممکن است تیرهایش به خطا بروند اقدام به شکار پرنده نماید چرا که دیگر پرنده ها نمی توانند حرکت کنند! در چنین شرایطی کاملاً مشخص است که بدون استفاده از Thread ها، بازی ها جذابیت خود را از دست خواهند داد.

از سوی دیگر کاربر تردها صرفاً در طراحی بازی ها نیست بلکه در اپلیکیشن ها و برنامه های تحت وب و یا دسکتاپ نیز کاربردهای فراوانی دارند. به طور مثال فرض کنیم که یک اپلیکیشن تحت وب با زبان جاوا طراحی کرده ایم که یک وب سرور است. حال این سرور وظیفه دارد تا در آن واحد بیش از یک کاربر را سرویس دهی کند که این کار به سادگی با استفاده از کلاس Thread امکان پذیر خواهد بود.

نکته
پس از آشنایی با مفهوم ترد در زبان برنامه نویسی جاوا، لازم است این نکته را نیز متذکر شویم که انجام هم زمان چند کار در زبان برنامه نویسی جاوا اصطلاحاً Concurrency ( کانکارنسی یا «هم زمانی، تقارن») نامیده می شود.

آشنایی با Interface ها 
پیش از ادامه آموزش پیرامون ماهیت تردها، نیاز به آشنایی با مفهوم Interface در زبان برنامه نویسی جاوا داریم. واژه انگلیسی Interface به معنی «رابط» و «واسطه» می باشد. برای روشن شدن این مطلب مثالی ذکر می کنیم:

فرض کنیم که عضو یک تیم برنامه نویسی هستیم که روی یک پروژه عظیم کار می کنیم. در واقع هر یک از اعضای این تیم مسئول نوشتن بخشی از برنامه است بدون آن که به کار دیگر اعضاء کاری داشته باشد اما این در حالی است که یک نقشه اصلی ترسیم شده و در آن نقش کلیه اعضاء مشخص شده اند که هر کسی باید بر اساس آن نقشه کار خود را تکمیل کند. در این نقشه آمده است که برنامه نویس الف می بایست کدهای سمت سرور را بنویسد، برنامه نویس ب می بایست کدهای سمت کاربر را بنویسد و برنامه نویس پ بایستی UI نرم افزار را کدنویسی کند و ...

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

شباهت های Interface ها با Class ها را می توان در موارد زیر خلاصه کرد:

- یک Interface به هر تعداد که بخواهد می توان متد داشته باشد.
- نام فایلی که یک Interface در آن قرار دارد می بایست با نام مد نظر برای Interface یکی باشد و این در حالی است که پسوند فایل همانند کلاس ها java است. مثلا MyInterface.java

در زبان برنامه نویس جاوا، اینترفیس ها همانند کلاس ها می باشند اما این در حالی است که در موارد زیر با کلاس ها متفاوت می باشند:

- یک کلاس فقط و فقط می تواند از یک کلاس دیگر ارث بری کند اما این در حالی است که یک کلاس می تواند بیش از یک اینترفیس را اجرا کند.
- یک کلاس می تواند کلاس دیگر راextends کند اما این در حالی است که یک کلاس می تواند اقدام به implements کردن یک اینترفیس کند (در ادامه آموزش بیشتر با کلید واژه implements آشنا خواهیم شد.) 
- همان طور که در آموزش های گذشته توضیح داده شد، یک متد دارای Body و Signature است. کلاس ها می توانند حاوی متدهایی به همراه Body باشند اما این در حالی است که Interface ها فقط می توانند حاوی متدهایی با Signature آن ها باشند. - به عبارت دیگر متدهای قرار گرفته در Interface ها به صورت Abstract یا «انتزاعی» هستند. 
- بر خلاف کلاس ها، از روی اینترفیس ها نمی توان آبجکت ساخت. 
- به طور کلی Interface ها می توانند از روی دیگر Interface ها وارثت داشته باشند.

در آموزش آتی با نحوه ساخت یک Interface در زبان برنامه نویسی جاوا بیشتر آشنا خواهیم شد.

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
کاربر میهمان
این رو اشاره رو فراموش کردید که اینترفیس در مقایسه با کلاس فقط فیلد های استتیک رو قبول می کنه و اینکه برخلاف کلاس با کی ورد استتیک تعریف میشه.
Shirin
Shirin
منظورم کی ورد اینترفیس بود.

در پاسخ به