قسمت قبلی: احراز هویت
در قسمت های پیشین به صورت اجمالی با تقسیم بندی کارت های الکترونیکی، استانداردهای کلی این حوزه و نحوه ی احراز هویت کارت ها آشنا شدیم. در این پست قصد داریم ابتدا به معرفی زبانهای برنامه نویسی Cross Platform و سپس به بیان نحوه ی اجرای برنامه های جاوا و جاواکارت و مسیر پیش رو برای ساخت یک برنامه جاواکارت بپردازیم.
زبانهای برنامه نویسی Cross Platform:
چنانچه از قبل آشنایی اندکی با یک زبان برنامه نویسی Cross-Platform (همان Multi Platform - همان Platform Independent) داشته باشید، باید عرض کنیم که زبان های جاوا و جاواکارت هم مانند پایتون سیاست تقریبا مشابهی را دنبال میکنند و جزو زبان های کراس پلتفرم به حساب میآیند. "کراس پلتفرم" بدین معناست که برنامه نویس فقط یکبار و برای همیشه برنامهی خود را مینویسد و همان برنامه را بدون تغییر روی سیستم عاملها و دستگاه های مختلف اجرا میکند. به صورت ملموس تر، برنامه نویس برنامه خود را به عنوان مثال روی سیستم عامل لینوکس مینویسد و یک فایل از آن می سازد، آنگاه همان فایل بدون تغییر کد، در لینوکس، ویندوز و سیستم عامل MAC اجرا میشود.
اما چگونه؟
در پاسخ به این سوال، ابتدا علّت این که برنامه های زبان هایی مانند C و ++C و سایر زبان های Native Platform(نقطه ی مقابل Cross Platform) باید برای هر سیستم عامل به صورت جداگانه Compile شوند را بیان میکنیم. علت این امر به صورت ساده این است که برنامه های نوشته شده به این زبان ها برای اجرا روی سیستم عامل یک مرحله را طی میکنند و بعد به صورت مستقیم با سیستم عاملی که روی آن در حال اجرا می باشند تعامل میکنند و از آنجا که سیستم عامل های مختلف واسط های تعاملی و به بیان ساده تر زبان گویش تعاملی متفاوتی دارند، برنامه ای که برای گفتگو با یک سیستم عامل Compile(بخوانید "ساخته") شده است، قادر به صحبت با یک سیستم عامل دیگر نیست و باید مجددا به گونه ای که زبان سیستم عامل جدید را بفهمد Compile شوند.
خب، در مقابل برنامه های زبان های Cross Platfrom چگونه اند؟
برنامههای این زبانها به گونهای میباشند که پس از این که برنامه نویس کد آنها را نوشت، برای اجرا شدن دو مرحله را طی میکنند؛ مرحلهی اول که توسط خود برنامه نویس انجام میشود، ساخت فایلی است که به عنوان ورودی موجودیتی به نام Virtual Machine استفاده میشود و مرحلهی دوم که توسط آن Virtual Machine انجام میشود خواندن فایل ورودی و ترجمهی محتوای آن به زبان قابل فهم سیستم عامل است.
تصاویر زیر به روشنی نقش Virtual Machineرا در اجرای یک برنامه مشخص میکند:
با توجه به تصاویر بالا، برنامه نویسهای زبان های Cross Platform و Platform Dependent هر دو، برنامه های خود را یک بار مینویسند، ولیکن برنامه نویس زبان های Platform Dependent چند بار از آن فایل اجرایی میسازد. (در مواقع فراخوانی بعضی توابع سیستمی، هر دو گروه ناگزیر از ایجاد تغییراتی در کد برنامه ی خود نیز می باشند؛ هرچند با در نظر گرفتن بعضی نکات حین نوشتن برنامه میتوانند، برنامه را از تغییر بی نیاز کنند.)
حال که با سیستم زبان های Cross Platform آشنا شدیم میتوانیم علت انتخاب یک عضو از خانواده ی جاوا به عنوان زبان برنامه نویسی کارت های هوشند را بیان کنیم.
تاثیرات انتخاب جاواکارت به عنوان زبان برنامه نویسی کارت های هوشمند:
پیش از ارائهی جاواکارت توسط شرکت Sun، تولیدکنندگان مختلف کارت های هوشمند هر کدام به صورت سلیقه ای استانداردی ارائه کرده بودند که منحصرا در اختیار افراد خاصی قرار میگرفت و برای یک برنامه نویس عادی، اولا در دسترسی نبود، و ثانیا به خاطر تعدد استانداردها یادگرفتن آن ها قابل پذیرش نبود. علاوه بر آن برنامه هایی که برای یک نوع کارت نوشته میشد، در صورت تمایل به ارتقای کارت یا تعویض کارت، دیگر قابل استفاده نبود و در اصطلاح Portability کافی نداشتند. با ظهور جاواکارت و پذیرش سازندگان مختلف به استفاده از این استاندارد و قرار دادن ماشین مجازی جاواکارت در کارت های خود، همه ی مشکلات فوق از بین رفتند و راه برای توسعه دهندگان نرم افزارهای کارت های جاواکارت یا همان توسعه دهندگان Appletها هموار شد.
و اما:
قسمت 4: من یک جاواکار نیستم!
به عنوان یک مقدمه، روند نوشتن یک برنامهی جاوا و سپس روند نوشتن یک برنامهی جاواکارت را توضیح میدهیم، و از آن پس از شما انتظار میرود در خلال این مجموعه آموزش ها، به صورت Self-Study جاوا را بیاموزید.
برای نوشتن یک برنامه ی جاوا شما به یک IDE (= محیط برنامه نویسی = Integrated Development Environment) مانند Eclipse یا Netbeans یا IntelliJ یا ... و همچنین به Java Development Kit نیاز دارید.
سوال: Java Development Kit یا JDK چیست؟
جواب: گفتیم در زبان های برنامه نویسی Cross Platform یک ماشین مجازی وجود دارد که برنامه را از کاربر دریافت می کند و برای سیستم عامل ترجمه میکند. به صورت پیشفرض روی یک سیستم عامل نه آن Virtual Machine وجود دارد و نه ابزارهای لازم برای ساخت فایل ورودی آن ماشین مجازی. پس برنامه نویس باید هر دو دسته ابزار را به کامپیوتر خود اضافه کند. مجموعه ی ابزارهای مورد نیاز برای ساخت فایل و همچنین اجرای فایل های زبان جاوا، در یک مجموعه جمع آوری شده اند و نام آن مجموعه Java Development Kit است. شما می توانید با مراجعه به سایت Oracle این بسته را دانلود کنید(نیاز به فــــــــــیلترشکن :دی). هنگام مراجعه به این سایت در کنار نسخه های مختلف JDK به بسته هایی با نام JRE نیز برخواهید خورد. JRE یا Java Runtime Environment در واقع تنها قسمت دوم ماجرا می باشند! یعنی ابزارهای مورد نیاز برای اجرای فایل های جاوا! به بیان ساده تر JRE شامل JVM و یک سری ابزارهای خردِ دیگر است و به کاربران تنها اجازه ی اجرای فایل های جاوا را میدهد. برای درک نسبت JVM و JRE و JDK تصویر زیر را مشاهده کنید:
خیلی خب، پس از دانلود JDK و افزودن آن به IDE خود (IDEهای جدید به صورت خودکار این کار را برای شما انجام میدهند) شروع به برنامه نویسی میکنید. برنامه ای که نوشتید توسط IDE در ابتدا درون یک فایل با پسوند java. قرار میگیرد، و سپس با کلیک کردن روی یک دکمه، به صورت اتوماتیک به فایل class. و سپس به jar. تبدیل میشود و این فایل jar. فایلی است که هنگام کلیک شدن روی آن توسط کاربر، سیستم عامل آن را به عنوان ورودی به JVM ارسال میکند.
سوال: روند نوشتن یک برنامه ی "جاواکارت" چگونه است؟
جواب: روند تقریبا مشابهی برای نوشتن برنامه های جاواکارت (یا همان اپلت ها) طی میشود. همانگونه که برای نوشتن یک برنامه ی جاوا به JDK نیاز داشتیم، برای نوشتن یه برنامهی جاواکارت هم به JCDK یا همان Java Card Development Kit نیاز داریم (علاوه بر JDK). پس با مراجعه ی مجدد به سایت Oracle یک نسخه از JCDK را دانلود میکنیم. در حین انتخاب نسخه ی دلخواهمان باید این را در نظر داشته باشیم که برنامه های ساخته شده با یک ورژن، تنها روی کارت هایی که آن نسخه را پشتیبانی میکنند یا کارت هایی که نسخه های بالاتر را پشتیبانی میکنند قابل اجرا است.(جمله دوم معادل کلمه ی Backward Compatible می باشد. یعنی یک نسخه، برنامه های نسخه های قبلی را نیز اجرا می کند). پس از دانلود باید محتویات فایل فشرده را Extract کنیم و مسیر آن ها را به IDE خود بدهیم. بعدتر خواهیم دید که Eclipse به صورت پیشفرض جایی برای دریافت آدرس JCDK ندارد. و بعدتر-تر خواهیم دید که با افزودن یک پلاگین به آن میتوانیم این قابلیت را به آن اضافه کنیم. بعدتر ها باز خواهیم دید که:
- پلاگین مذکور به صورت عادی فقط برای JCDK 2.2.2 طراحی شده است.
- میتوانیم با یک ترفند نسخه های قدیمی تر یعنی JCDK 2.2.1، JCDK 2.1.2 و JCDK 2.1.1 را نیز به کمک این Plugin استفاده کنیم.
- نسخه های جدید نرم افزار Netbeans به صورت پیشفرض به JCDK 3.0.1 مجهز شده اند.
خب، بعد از مجهز شدن IDE دلخواه خود به نسخه ی JCDK مورد نظرمان، نوبت به برنامه نویسی میرسد. پس از نوشتن یک اپلت (که در پست های بعدی قدم به قدم آن را توضیح میدهیم) IDE مشابه قبل یک فایل java. تولید میکند که با چند کلیک این فایل ابتدا به class. و سپس به cap. (به جای jar.) تبدیل میشود. تبدیل فایل java. به فایل class. را ابزارهای جاوا و تبدیل فایل class. به cap. را یکی از ابزارهای جاواکارت به نام Converter انجام میدهند. فایل cap. تولید شده، فایلی است که ما روی کارت بارگذاری و نصب میکنیم. در آینده به صورت جزئی تر با نقش Converter و سایر ابزارها آشنا خواهیم شد.
کوچ تا چند؟ مگر میشود از خویش گریخت؟بال تنها غم غربت به پرستوها داد ....