فرشاد فكری نجات
 fekrinejat@yahoo.com      

جاوا همچنان رو به رشد

نسخه  pdf

 

در مقاله قبلی به اختصار در مورد ساختار زبان برنامهنويسی جاوا گفتيم. در اين مقاله به بررسی دقيقتری در مورد برنامهها ((Applications و ريزبرنامهها (Applets) در جاوا میپردازيم.
در برنامه
نويسی ريزبرنامه و برنامه، اصول كلی وجود دارد كه تيتروار در مورد آنها شرح خواهيم داد.

جعبه ابزار در جاوا:

   در جاوا ابزارهای مختلفی برای ارتباط با كاربر وجود دارد كه برنامهنويس میتواند از طريق يك محيط گرافيكی و جعبهابزارهای مختلف با كارفرما ارتباط برقرار كند. در جاوا به چند طريق میتوان با كارفرما ارتباط برقرار كرد. در حالت اول برنامهنويس ازيك محيط Interactive كه شامل (Text Box , Button , Menu , ...) میباشد در برنامهنويسی خود استفاده میكند تا يك ارتباط دو طرفه را با كارفرما برقرار كند، ولی هميشه اين ارتباط وجود ندارد و ممكن است برنامهنويس تنها بخواهد ازطريق يك ارتباط يكطرفه با كارفرما ارتباط داشته باشد كه درآن صورت میتواند از تصاوير و متنها و اشكال هندسی در زيباسازی برنامه خود استفاده كند ، در واقع جعبهابزارها در مواقعی مورد استفاده قرار میگيرند كه برنامهنويس بخواهد يك ارتباط دو طرفه با كارفرما برقرار كند.
   يكی از جعبه ابزارهايی كه در جاوا وجود داردAWT (Abstract Windows Toolkit) می
باشد، ديگر ابزاری كه در جاوا بيشتر از AWTها استفاده میشود Swing Component هستند.

رويدادها در جاوا :

   همانطوركه قبلا اشاره شد، جاوا مانند زبانهای برنامهنويسی ويژوال به صورت Event Driven عمل میكند. كليه رويدادها داخل شیء Event قرار میگيرد، (كلاس Event يكی از كلاسهای AWT میباشد) به عنوان مثال هنگامی كه يك رويداد ماوس اتفاق میافتد، موقعيت مكانی ماوس در تغيرهای X,Y قرار خواهد گرفت و يا هنگامی كه يك كليد صفحه كليد فشرده میشود، كد كليد در متغير Key ذخيره خواهد شد كه اين متغيرها توسط كلاس Event تعريف شدهاند.

   لازم به ذكر است كه رويداد صفحه كليد نيز مانند رويداد ماوس، پاسخگويی میشود و كد كليد فشرده شده را به داخل متد عبور داده و پردازش میكند.

لايههای امنيتی در جاوا :

   لايههای امنيتی در جاوا به چند گروه تقسيم میشوند ، از ابتدای ايجاد يك برنامه جاوا تا زمان اجرا و پايان كار برنامه، ماشين مجازی لايههايی را برای گذراندن برنامه از آن بوجود آورده است كه يك برنامه نتواند از حد و حدود خود خارج شود، اين لايهها در داخل ماشين مجازی انجام وظيفه میكنند و میبايست برروی . مرورگر و يا Applet Viewer نصب شوند. در نظر داشته باشيد كه Security Manager در جاوا همچنان بر روی عمليات و كاركرد كلاسها نظارت خواهد داشت، هرگاه يك عمل پنهان كه از ديد ماشين مجازی خطرناك به نظر میرسد توسط ريزبرنامه اجرا شود، مدير امنيت برای اجرای آن عمل اجازه خواهد گرفت.در قسمتهای مختلف جاوا لايههای امنيتی مختلفی وجود دارد كه در اين مقاله، به لايههای امنيتی مربوط به اجرای يك برنامه يا ريزبرنامه اشاره میكنيم.

 

   1- زبان و كامپايلر (Language and Compiler) در ابتدای كار ، جاوا خود تمهيداتی را برای امنيت در ريزبرنامهها و برنامهها در نظر گرفته است كه از جمله آن میتوان به ساختار ذاتی زبان جاوا اشاره كرد. مهمترين مشكلی كه در زبانهای ديگر وجود دارد و اجازه ورود ويروسها و افراد ناشناس را به سيستم میدهد، امكان اشارهگرها (Pointer) در برنامه میباشد كه میتوانند به طور كامل به فضای حافظه دسترسی داشته باشند، ولی جاوا از ابتدا، به طور كامل اشارهگرها را از خصوصيات ذاتی زبان حذف كرد. برای مثال برنامهها در جاوا نمیتوانند به فضای مورد استفاده برنامههای ديگر در حافظه نفوذ كنند و يا حتی به هسته سيستمعامل وارد شوند. البته جاوا دلايل ديگری نيز برای حذف اشارهگرها در زبان خود دارد يكی از اين دلايل، مديريت حافظه و اشارهگرها میباشد كه اين مشكل همچنان در زبان C++وجود داشت، لازم به ذكر است كه جاوا به جای استفاده از اشارهگرها از ارجاعات خود استفاده میكند.

    2- تصديق كننده كدهای بايتی(ByteCode Verifier)    بعد از فراخوانی برنامه، كلاس در ابتدا به لايه تصديق كننده كدهای بايتی برخورد میكند، در اين مرحله صحت ساختار فايل ورودی مورد پردازش قرار میگيرد تا از اينكه فايل ورودی يك كلاس جاوا میباشد اطمينان حاصل شود.

   3- باركننده كلاس(Class Loader)  بعد از اينكه يك كلاس از لايه تصديق عبور كرد و مورد تأييد قرار گرفت، آماده برای اجرا میباشد. همانطور كه میدانيد، بيشتر متدهايی كه در برنامههای جاوا استفاده میشوند، به صورت كلاسهای توكارداخل ماشين مجازی قرار دارند؛ بعد از اجرای يك برنامه توسط باركننده كلاس، تمام كلاسهای توكار كه قرار است مورد استفاده قرار گيرند، تست و پيگيری میشوند و اطمينان از وجود آنها حاصل خواهد شد و اگر متدی كه در برنامه مورد استفاده قرار گرفته است در كلاسهای توكار يافت نشود، تمام كلاسهای تعريف شده و نوشته شده توسط برنامهنويس بازرسی خواهند شد؛ در صورتی كه هيچ مشكلی در بررسی كلاسها ايجاد نشود، كلاس اصلی در حافظه ماشين مجازی بارگذاری و اجرا خواهد شد.

   برنامهنويس میتواند كلاسهای ريزبرنامه را در همان شاخهای كه برنامه اجرا میشود قرار دهد و يا مسير كلاسهايی كه باركننده كلاس بايد به دنبال آن بگردد را در ClassPath صفحه وب قرار دهد.

روش Native در جاوا :

   جاوا میتواند از روش خاصی استفاده كند تا زير روالها را كه با زبانهای برنامهنويسی ديگر نوشته شده درون برنامههای خود بارگذاری كند، به عنوان مثال در كلاسهای جاوا میتوان كتابخانه پيوند پويا (DLL) را فراخوانی كرده و از توابع آن داخل كلاس استفاده كرد. به دو علت از Native نمیتوان در ريزبرنامهها استفاده كرد :  

   1- ريزبرنامهها نمیتوانند از روش Native برای دستيابی به توابع استفاده كنند، زيرا ممكن است كتابخانه پيوند پويای مورد نظر در Platformهای مختلف در اينترنت وجود نداشته باشد، برای همين، تمام كارفرمايان نمیتوانند از آن استفاده كنند و با استفاده از اين عمل Platform Independent نقض خواهد شد، ولی استفاده از اين روش در برنامههای جاوا كه به صورت محلی اجرا خواهند شد مشكلی بوجود نخواهد آورد، زيرا برنامهنويس میداند از چه كتابخانههايی میخواهد استفاده كند و آن را در اختيار سيستمعامل قرار میدهد تا ماشين مجازی بتواند از آن استفاده كند. 

   2- اگر برنامهنويس ريزبرنامه از اين روش استفاده كند Security را نيز نقض خواهد كرد، زيراتوابع نوشته شده با بقيه زبانهای برنامهنويسی كه به صورت كتابخانهای در آمدهاند، محدوديتی در استفاده از منابع سيستم نخواهند داشت و اين جاوا است كه از امنيت بالايی برخوردار است، برای همين نمیتوان ازNative در ريزبرنامهها استفاده كرد زيرا مدير امنيتی( (Security Manager بر كار ريزبرنامهها فرماندهی خواهد كرد و همانطور كه میدانيد ريزبرنامهها در استفاده ازمنابع مختلف، محدوديتهای خاصی دارند، ولی اين روش در برنامهنويسی برنامهها در جاوا مشكلی نخواهد داشت. 

ريزبرنامهها :
" "

 جاوا میتواند از روش خاصی استفاده كند تا زير روالها را كه با زبانهای برنامهنويسی ديگر نوشته شده درون برنامههای خود بارگذاری كند

" "

   ريزبرنامهها درجاوا از نظر اندازه نسبت به كاری كه انجام میدهند، حجم نسبتاً كمی دارند و از طريق وب میتوانند بر روی اينترنت گسترش پيدا كنند. ريزبرنامهها در يك ايستگاه راه دور و در يك فضا در اينترنت ذخيره خواهند شد و بعد از فراخوانی، به كار خود در سيستم كارفرما ادامه خواهند داد.

   در واقع عمليات فعالسازی ريزبرنامهها بدينگونه است كه يك درخواست اجرای يك ريزبرنامه از طريق كارفرما توسط صفحه وب به كارگزار مربوطه كه كلاس ريزبرنامه در فضای آن كارگزار وجود دارد فرستاده میشود و سپس باركننده موجود در مرورگر، كلاس ريزبرنامه را در محيط مرورگر واكشی كرده و ريزبرنامه شروع به اجرا میكند در واقع در اين حالت مرورگر وب به عنوان يك واسط بين كاربر و ماشين مجازی قرار میگيرد و كلاسها را تفسير میكند.

   ريزبرنامهها در ابتدای ظهور، بعلت امكانات برنامهنويسی بالايی كه داشتند بيشتر در تبليغات الكترونيكی از آنها استفاده میشد، ولی به مرور زمان و با به وجود آمدن زبانهای برنامهنويسی جديدتر و كارآمدتر، و همينطور مبارزه غول بزرگ نرمافزاری(مايكروسافت) با رشد جاوا ، كمكم محبوبيت خود را از دست میدهند و در حال حاضر افراد كمی در صفحات خود از ريزبرنامهها استفاده میكنند. لازم به ذكر است كه كدهای Native به دلايلی كه توضيح داده شد نمیتوانند از ريزبرنامهها استفاده كنند.

   شما دقيقا میتوانيد قابليت مستقل از سختافزار(Hardware Independent) و مستقل از سكو (Platform Independent)را در برنامهنويسی ريزبرنامهها در جاوا لمس كنيد، زيرا در شبكه جهانی اينترنت، سختافزارهای با تراشههای مختلف و سكوهای مختلف وجود دارد كه يك ريزبرنامه میبايست، به تمام كارفرمايان در اينترنت سرويس دهد. ريزبرنامهها در جاوا نوعی برنامهنويسی میباشند كه كاملاً از رابط گرافيكی استفاده كرده و به صورت Client Side عمل میكنند، به اين معنا كه ريزبرنامهها پس از ارسال از كارگزار در سيستم كارفرما به ادامه كار خواهند پرداخت. ريز برنامهها قابليتهای بسيار زيادی ازجمله كار با انيميشين و تصوير و صدا را پشتيبانی میكنند برای همين تا قبل از بوجود آمدن Flash ،در تبليغات الكترونيكی صفحات وب حرف اول را ريزبرنامهها میزدند، البته لازم به ذكر است كه Flash برای برنامهنويسی Action Script همچنان برپايه برنامهنويسی جاوا اسكريپت استوار است و از آن نشأت گرفته است.

   در واقع هر برنامهای كه از كلاس ريزبرنامهها به ارث رسيده باشد و بسته Java.Applet را فراخوانی كرده باشد میتوان از آن به عنوان يك ريزبرنامه نام برد ، در واقع يك ريزبرنامه فرزند يك برنامه است.

نمونهای از قرارگيری تگ Applet را درون صفحه وب به شكل زير مشاهده میكنيد:

 

<APPLET CODE = "nameclass.class" width=300 height=300>
<PARAM NAME="name" VALUE="farshad">

</APPLET>

   در مثال فوق در قسمت Code نام فايل اصلی ريزبرنامه و در قسمت Height , Width اندازه ناحيه كاری پنجرهای كه محدوده ريزبرنامه را مشخص میكند قرار میگيرد. در داخل ساختار ريزبرنامهها میتوان طوری برنامهنويسی نمود كه پارامترهای مورد نياز ريز برنامه در صورت لزوم به درون كلاس انتقال داده شود كه اين كار برعهده PARAM در مرورگر میباشد.

   به عنوان مثال ريزبرنامه شما اسم يك فايل گرافيكی را از طريق پارامترها گرفته و آن فايل را نمايش میدهد. در قسمت زير نمونهای از سورس يك ريزبرنامه كوچك را مشاهده میكنيد. اين ريزبرنامه بر اساس رويداد حركت ماوس فعال میشود و موقعيت اشارهگر ماوس در ناحيه كاری را نمايش میدهد. لازم به ذكر است كه اين مثال را میتوانيد از سايت مجله نيز Download كنيد.  

 

import java.awt.*;
import java.applet.*;
public class Fekrinejat extends Applet {
int mx=0,my=0; String str;
public boolean mouseMove(Event evtObj, int x, int y) {
mx=x+20;
my=y+20;
str="X: " +x+" Y:"+y;
repaint();
return true;
}
public void paint (Graphics liner) {
liner.drawString("Little Sapmle Code" , mx , my);
liner.drawString(str , mx+15 , my+15);
}
}


زمان حيات يك ريزبرنامه :

   هر ريزبرنامه دارای يك زمان حيات میباشد، به اين معنا كه از فراخوانی ابتدايی يك ريزبرنامه تا پايان يافتن كار ريزبرنامه، چندين عمل وجود دارد كه متدهای مورد نياز به طور خودكار در زمانهای خاص فراخوانی میشود كه برنامهنويسان از آنها استفاده كرده و پردازشهای مورد نظر خود را در داخل آنها قرار میدهند كه به شكل زير میباشد:  

1- ارزشدهی اوليه (Initialization) :

   برای اجرای يك ريزبرنامه اولين متدی كه اجرا میشودinit() نام دارد. لازم به ذكر است كه اين متد فقط يكبار و در زمان فراخوانی يك ريزبرنامه اجرا میشود كه معمولاً در آن تعاريف پايهای از جمله تعريف متغيرهای اوليه ، رنگ ناحيه كاری ريزبرنامه ، ارتباط با بانك اطلاعاتی قرار میگيرد. 

2- شروع كار ريز برنامه (Start) :

   در اين مرحله ريزبرنامه متدstart() را اجرا میكند، اين مرحله دقيقاً بعد از ارزشدهی اوليه اجرا خواهد شد، ولی ممكن است يك يا چند بار اجرا شود، هر بار كه كاربر مرورگری كه ريزبرنامه در آن فعال شده را ترك كند و بعد از مدتی دوباره به آن رجوع كند اين متد مجددا از سر گرفته میشود كه البته زمانی كه برنامهنويس از جعبه ابزار كردن AWT استفاده كند اين كار به بعنوان Referesh كردن ناحيه كاری میباشد كه به عهده متد paint() نيز میباشد. 

3- معلق ماندن كار ريزبرنامه(Stop):

   در اين مرحله متد stop()فراخواني میشود. اين متد زمانی فعال خواهد شد كه كاربر پنجره مرورگر حاوی ريزبرنامه را غير فعال كرده و آنرا برای مدتی كوتاه ترك میكند، در اين مرحله نخ مربوط به پردازش ريزبرنامه به حالت تعليق درمیآيد و اجازه پردازشهای اضافی را از ريزبرنامه میگيرد، زيرا اگر اين نخ به حالت تعليق در نيايد و به پردازش ريزبرنامه ادامه دهد، با وجود اينكه كاربر در پنجره مرورگر حاوی ريزبرنامه نيست، پردازشهايی كه مورد نياز نيست شكل خواهد گرفت كه سرعت سيستم را كند خواهد كرد. 

4- پايان تراكنش(Destroy):

   هنگامی كه كاربر مشخص میكند كه ريزبرنامه بايد از حافظه خارج شود و مرورگر حاوی ريزبرنامه را میبندد، بايد فضای كليه منابعی كه در ابتدای شروع كار مورد استفاده قرار گرفته بود آزاد شود كه برنامهنويس میتواند اينكار را توسط متد destroy()انجام دهد و پردازشهای مورد نظر  خود را در اين متد قرار دهد. 

 

برنامهها :

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

تفاوتهای برنامه و ريزبرنامه:  

 
" "

  Flash برای برنامهنويسی Action Script همچنان برپايه برنامهنويسی جاوا اسكريپت استوار است و از آن نشأت گرفته است.

" "

  1- ريزبرنامهها فقط از رابط GUI استفاده میكنند، به اين معنی كه تمام ريزبرنامهها گرافيكی  میباشند، ولی برنامهها در جاوا هم میتوانند به صورت GUI و هم به صورت Text Base برنامهنويسی شوند.   

   2- طريقه اجرای يك برنامه با يك ريزبرنامه كمی متفاوت میباشد. ريزبرنامهها بايد بر روی يك مرورگر وب و يا Applet Viewer اجرا گردند ولی برنامهها احتياجی به يك برنامه اضافی برای اجرا شدن ندارند و میتوانند بصورت خودپا در ماشين مجازی فعاليت خود را انجام دهند. Applet Viewer يك ابزار اضافی بر روی ماشين مجازی میباشد كه به طراحان ريزبرنامه اجازه تست ريزبرنامهها را قبل از گذاشتن در صفحات وب خواهد داد. 

   3- ريزبرنامهها هميشه در گستره جهانی اينترنت در دسترس میباشند و معمولاً در برنامهنويسی جاوا برای اينترنت از اين نوع استفاده میكنند ولی برنامه در گستره جهانی نيستند و به صورت محلی میتوانند بر روی ماشين مجازی مورد استفاده قرار گيرند. لازم به ذكر است كه ريزبرنامهها نيز بر روی ماشين مجازی تفسير خواهند شد ولی اين ماشين مجازی از ديد كاربر پنهان بوده و در پشت صحنه بر روی مرورگر وب نصب میشود و ريزبرنامهها میتوانند از كلاسهای توكار جاوا به راحتی استفاده كنند. 

   4- به دليل امنيتی كه بر روی ماشين مجازی جاوا وجود دارد، هيچگاه يك ريزبرنامه نمیتواند بر روی ماشين كارفرما عملياتی مبتنی بر دسترسی مستقيم به سيستم را انجام دهد زيرا اينكار، امنيت در ريزبرنامهها را نقض خواهد كرد، به عنوان مثال هيچ ريزبرنامهای نمیتواند بر روی سيستم كارفرما عمليات I/O انجام دهد ، مبنی بر اينكه فايلی را باز كرده و عملياتی روی آن انجام دهد و يا فايلی را از سيستم كارفرما پاك كند ، ولی اين مسئله در برنامهها وجود نخواهد داشت و جاوا در استفاده از برنامهها كه به صورت Local اجرا میشوند محدوديتی قائل نشده است مگر آنكه خود برنامهنويس در برنامههای خود محدوديتهايی ايجاد كند. 

   5- برنامهها در جاوا هميشه با متد main()آغاز خواهند شد، ولی در ريزبرنامهها نحوه آغاز بهگونهای ديگر میباشد و متد init()اولين متدی است كه فراخوانی خواهد شد كه البته اين مورد در تمام ريزبرنامهها صدق نمیكند.  

در اين مقاله به طور خلاصه به ساختار برنامهها و ريزبرنامههای جاوا پرداختيم و از جهات مختلف مزايا و معايب هر يك و تفاوت بين اين دو روش برنامهنويسی را بررسی كرديم. در شماره بعدی مجله در مورد Script ها وServlet ها ونحوه پردازش و كار آنها توضيح خواهيم داد

 

 

  

  

 

 

 

 

 

 
 Copyright CCW Magazine