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

جــــــاوا

مطالب ديگری از اين نويسنده

 

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

تاريخچه به وجود آمدن جاوا:

     در سال 1990 شركتی به نام Sun Microsystems تصميم گرفت زبان برنامه نويسی جديدی را به جهانيان عرضه كند كه قابليت هايی متفاوت و باارزش تر از زبان های برنامه نويسی ساخته شده تا آن زمان را داشته باشد، در ابتدا هدف از ايجاد اين زبان، استفاده از آن در قطعات الكترونيكی بود، زيرا يكی از قابليت های آن می بايست Hardware Independent باشد كه بتوان برای هر CPU با هر ساختاری و در هر قطع های برنامه نويسی كرد، از اين رو اين شركت در سال 1990 تصميم به ايجاد گروهی برای كار بر روی اين پروژه گرفت و نام آن را «پروژه سبز» گذاشت، رهبری گروهی كه بر روی اين پروژه كار می كردند برعهده شخصی به نام James Gosling كانادايی نهاده شد. بعد از مدتی فعاليت بر روی اين پروژه در نهايت در سال 1992 زبانی به نام OAK ايجاد گرديد، اين اسم كاملاً به صورت تصادفی و زمانی كه James از پنجره دفتر كارش به درخت OAK (بلوط) نگاه می كرد نشأت گرفته است. ولی پس از مدتی شركت Sun به اين نتيجه رسيد كه اين اسم نمی تواند يك اسم مناسب تجاری برای اين محصول خارق العاده و يكتا باشد، زيرا در آن زمان محصولی با همين اسم وجود داشت، بنابراين اسم مزبور را در سال 1995 با ارائه نسخه جديدی از OAK به زبان Java تغيير نام داد.
     شايد از خود پرسيده باشد چرا جاوا با يك فنجان قهوه داغ كه بخار از آن بلند می شود معروف شده و يا اسم جاوا از كجا به وجود آمده است. در همان زمان كه زبان OAK با شكست تجاری به دليل اسم خود مواجه شد، تمام گروه تيم پروژه سبز اقدام به يك عمل همه جانبه كرده و برای انتخاب اسم جديدی برای OAK به كافی شاپ نزديك شركت رفته و تقريباً يك نيمروز بر روی نامگذاری برای OAK تبادل نظر و بحث كردند. JAVA مخفف (James Gosling, Arthur Van hoff, Andy bechtolsheim) می باشد، اينها اسامی سه تن از متخصصين در گروه مربوط به پروژه سبز است كه حروف اول نام آنها برای اين پروژه انتخاب شد و به دليل اينكه اين نام در همان كافی شاپ انتخاب گرديد، از اين پس جاوا با يك فنجان قهوه داغ به جهانيان شناسانده شد. جاوا از جد خود C و++ C  منشعب شده است، خصوصيات زبان C حساس بودن به حروف (Case Sensitive) و Syntax دستورات و خصوصيات زبان برنامه نويسی ++C  استفاده از شيوه برنامه نويسی به روشObject Oriented Programming) OOP
)می باشد كه همه اين خصوصيات در زبان جاوا گنجانده شده است. همچنين جاوا از روش برنامه نويسی Event Driven استفاده می كند، كه در تمام زبان های ويژوال به چشم می خورد.

ماشين مجازی جاوا (Java Vertual Machine):

     جاوا برخلاف ديگر زبان های برنامه نويسی، با سبكی متفاوت برنامه های خود را اجرا می نمايد. ماشين مجازی كه (Java Developers Kit (JDK است بر روی Platform قرار می گيرد. ماشين مجازی برای اجرای برنامه ها از دو قسمت تشكيل شده است، در مرحله اول فايل های Source را به Byte Code كه همان Class می باشد تبديل می كند كه در اين مرحله Compiler جاوا عمل نموده و سورس را از خوانايی خارج كرده و به كدهای بايتی تبديل می كند، ولی اين فايل Class نمی تواند به صورت خودپا (Stand Alone )اجرا شود، بعد از تبديل فايل در مرحله اول، ماشين مجازی در مرحله دوم از مفسر خود استفاده كرده و Byte Codeهای ايجاد شده را بر روی خود اجرا می كند و اين كار موجب می شود كه برنامه های جاوا به روی هر Platrorm قابل اجرا باشد (Platform Independent). فقط كافی است Byte code به Platform موردنظر انتقال داده شود و بر روی ماشين مجازی آن سيستم عامل تفسير شود، و اين قابليت بسيار مهمی برای جاوا می باشد. دلايل مهمی برای تبديل سورس به Byte Code وجود دارد، از جمله اين كه بعد از تبديل سورس، به نحوی از كلاس محافظت می شود كه افراد مختلف به سورس برنامه دسترسی نداشته باشند. حتی می توان به اين نكته اشاره كرد كه بعد از تبديل سورس به بايت كد، كامپايلر يك مرحله به زبان اجرايی ماشين نزديك شده است و سرعت اجرای برنامه بسيار بالاتر می باشد. ماشين مجازی جاوا دارای اجزای ديگری از جمله Debugger و Disassembler و Applet Viewer و موارد ديگری می باشد كه در مواقع ضروری تر مورد استفاده قرار می گيرد، ولی اجزای مهم ماشين مجازی همان مفسر و كامپايلر است كه در بالا مختصری در مورد نحوه كار آن مطالبی خوانديد.

مزايای مهم جاوا:

     در اين قسمت اشاره كوتاهی به مزايای استفاده از زبان جاوا خواهيم داشت.

- امنيت داشتن
     در تمام قسمت های ماشين مجازی، تمهيداتی برای امنيت در تمام حالت ها درنظر گرفته شده است. از جمله اين تمهيدات می توان به FireWall كه بر روی ماشين مجازی وجود دارد و اجازه دسترسی به Server از Client را نمی دهد اشاره كرد كه اين عمل باعث جلوگيری از انتشار ويروس های كامپيوتری از طريق برنامه های جاوا می شود.

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

- قابل حمل بودن
     همانطوری كه در قبل به اين نكته اشاره شده است، جاوا مانند پيشينيان خود از خاصيت قابل حمل بودن برخوردار می باشد، به اين صورت كه بايت كدهای ايجاد شده جاوا بر روی تمام Platformها قابل اجرا می باشد و اين مورد يكی از مزيت های بزرگ برای اين زبان است. شعار طراحان جاوا اين است «يك بار بنويس، هميشه و همه جا اجرا كن»

- قدرتمندی
     ي
كی از مزايای جاوا استفاده از Garbage Collection می باشد كه قدرت بسيار زياد به اين زبان بخشيده است، در جاوا برنامه نويس هيچگاه حافظه را به طور دستی آزاد نخواهد كرد و مديريت حافظه كاملا برعهده ماشين مجازی می باشد، اگر به ياد داشته باشيد در زبان++ C هرگاه حافظه ای را تخصيص می داديد، در نهايت می بايست به طور دستی آن را آزاد می كرديد، ولی در جاوا بعد از تخصيص حافظه در صورتی كه هيچ اشاره ای به حافظه موردنظر وجود نداشته باشد، ماشين مجازی چنين تلقی می كند كه فضای تخصيص يافته مورد استفاده نيست و فضای حافظه را به صورت اتوماتيك از بين می برد.
     مورد ديگری كه می توان به آن اشاره كرد Exception Handling می باشد كه ماشين مجازی می تواند بر روی خطاهای غيرطبيعی ايجاد شده هنگام اجرای برنامه فرماندهی داشته باشد و برنامه را در حين اجرا قطع نمايد، از جمله اين خطاها می توان به خطای تقسيم بر صفر و عمل سرريزی در پشته و تبديل غير معتبر و مواردی از اين قبيل اشاره كرد.

- برنامه نويسی توزيع شده
     جاوا زبانی است كه در برنامه نويسی اينترنت نقش به سزايی ايفا كرده است و همچنين می تواند با پروتكل های مختلف شبكه از جمله TCP/IP ارتباط برقرار كند، به اين ترتيب می توان نقش مهم جاوا در گسترش اينترنت را به وضوح مشاهده كرد، بسته نرم افزاری با نام RMI در جاوا وجود دارد كه امكان برنامه نويسی توزيع شده را به برنامه نويس می دهد.

- روش برنامه نويسی چند نخ‌كشی در جاوا(Multi threading)
    
برخلاف ساير زبان های قديمی برنامه نويسی، جاوا استفاده از برنامه نويسی را برای برنامه نويس فراهم كرده است. يك برنامه چندنخ‌كشی دارای چندين نخ (thread) است كه نخ‌ها می توانند به صورت همزمان يا غيرهمزمان اجرا شوند. در داخل هر نخ، عمليات مختلفی وجود دارد كه با اولويت دادن برنامه نويس به نخ‌ها نشان می دهد كه نخ‌ها بايد با چه اولويت هايی اجرا شود. در هر برنامه چند نخ‌كشی معمولا يك نخ اصلی و چندين نخ فرعی وجود دارد كه پايان دهنده برنامه، هميشه نخ اصلی می باشد و نخ های فرعی زودتر از نخ اصلی می بايست به كار خود پايان دهند.
چند نخ كشی كردن يك برنامه به شما اجازه می دهد كه برنامه های بسيار مؤثر بنويسيد كه از وقت CPU به خوبی استفاده كنند، در حقيقت می توان گفت چند نخ كشی حالت تخصصی Multi Task در سيستم عامل می باشد.

انواع برنامه نويسی در جاوا:

برنامه نويسی در جاوا به چندين شكل مختلف انجام می شود كه در دسته بندی های مختلف به نحوه كار آنها اشاره می كنيم.

1- Application (برنامه)
     Applicationها يك نوع برنامه نويسی در جاوا می باشد كه بر روی Platform و از طريق ماشين مجازی اجرا می شود و می توان از رابط گرافيكی GUI و يا برنامه نويسی به طريق كنسول (Text Base) در آن استفاده كرد. Applicationها هيچ گونه محدوديتی برای استفاده از كلاس ها ندارند و می توانند از تمام كلاس های توكار بدون محدوديت خاصی استفاده كنند.
در رابط گرافيكی می توان از جعبه ابزار نظير AWT) Abstract Window toolkit) كه در كتابخانه Java. AWT قرار دارد و Swing Components كه در كتابخانه Java. Swing قرار دارند استفاده كرد.

2- Appletيزبرنامه ها)
     ريزبرنامه ها از نظر ساختار برنامه نويسی دقيقاً مانند Applicationها می باشند، با اين تفاوت كه ريزبرنامه ها فقط از رابط GUI استفاده می كنند و بر روی ماشين مجازی كه به روی مرورگر است اجرا می شوند. به عبارت ديگر می توان گفت كه Appletها همان Applicationها هستند كه از كلاس Applet به ارث رسيده اند و از همان جعبه ابزار AWT و Swing استفاده می كنند.
     در واقع تفاوت مهم بين ريزبرنامه و Application امنيت موجود در ماشين مجازی برای ريزبرنامه ها است، اين كار اجازه نمی دهد ريزبرنامه ها به سيستم فايل كارفرما (Client) دسترسی داشته باشند و عمليات I/O را انجام دهند. ريزبرنامه ها دقيقاً به صورت رويدادگرا عمل می كنند چنين برنامه ای هميشه منتظر وقوع يك رويداد از طرف كاربر است، بعد از به وقوع پيوستن رويداد، ارتباط با جعبه ابزار گرافيكی قطع شده و عمليات مربوط به آن رويداد انجام می گيرد و سپس دوباره كنترل به جعبه ابزار برگردانده می شود.

3- Servlet
     Servlet ي
ك نوع برنامه نويسی طرف كارگزار (Server Side) می باشد. برنامه نويسی برای كارگزارها از طريق جاوا كمی با برنامه نويسی برای ريزبرنامه ها و برنامه متفاوت می باشد، به اين صورت كه Servletها از رابط GUI يا Console استفاده نمی كنند، بلكه براساس درخواست و پاسخ عمل می كنند؛ درخواست از كارفرما فرستاده می شود و بعد از پردازش شدن پاسخ به كارفرما ارسال خواهد شد.

4- Scriptlet
    
اين نوع برنامه نويسی كه به Java Script شهرت دارد، به طور متفاوتی از ديگر انواع در جاوا تفسير می شود. در اين نوع برنامه نويسی، هيچگاه سورس جاوا تبديل به بايت كد نخواهد شد و اين سورس در فايل HTML در تگه ای مربوط به زبان اسكريپت جاوا قرار خواهد گرفت و توسط ماشين مجازی Browser اجرا خواهد شد. از جمله محدوديت های موجود در اسكريپ های جاوا اين است كه نمی توان از تمام كلاس های توكار جاوا استفاده كرده و همچنين دسترسی استفاده از كلاسهای I/O از طريق كارگزار به روی سيستم كارفرما به دليل امنيت ماشين مجازی وجود ندارد.

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

 

  

  
 م7