PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : زبان جاوا را بهتر بشناسیم



TAHA
09-21-2009, 11:35 PM
چرا جاوا زباني جالب است ؟

در يكي از مقالات در باره ي زبان شركتSun جاوا را با اين خصوصيات شرح مي دهد :
جاوا يك زبان ساده ، شي گرا ،‌توزيع شده ، تفسير شده ، قدرتمند ، ايمن ، با معماري خنثي ، قابل حمل ، با عملكرد سطح بالا چند نخ كشي شده و پويا است .

http://pnu-club.com/imported/mising.jpg

Sun تصديق ميكند كه به طور قطع اين كلمات رشته هايي از واژه هاي متداول در زبان برنامه نويسي هستند ، اما حقيقت اين است كه اين واژه ها به طور ماهرانه اي خصوصيات اين زبان را شرح ميدهند .
حال به برخي از خصلت هاي جاوا در پشت اين واژه ها ميپردازيم .
شي گرا :Object Oriented
جاوا يك زبان برنامه نويسي شي گرا است . براي يك برنامه نويس اين به اين معنا است كه به جاي فكر كردن به قسمت هاي رويه برنامه ، بايد به كاربرد داده ها و روش هايي كه روي آن داده ها عمل ميكنند ، توجه شود.
اگر شما به برنامه نويسي با اعلان رويه در C عادت كرده ايد ،ممكن است دريابيد كه به هنگام استفاده از جاوا مجبور به تغيير در روش و چگونگي برنامه تان هستيد . هنگامي كه فهميديد اين الگوي جديد چقدر قدرتمند است ، به سرعت با آن هماهنگ ميشويد .
در يك سيستم شي گرا ، يك كلاس مجموعه اي از داده ها و روش هايي است كه روي آن داده عمل ميكنند. همراه بودن داده ها و متد ها رفتار و حالت يك شي را بيان مي دارد . كلاس ها به صورت سلسله مراتبي مرتب شده اند ، بنابر اين يك زير كلاس ميتواند رفتار هايي را از كلاس بالاتر به ارث ببرد . يك كلاس سلسله مراتبي هميشه يك كلاس ريشه دارد كه كلاسي است با رفتار هاي كاملا عمومي .
جاوا به همراه دسته ي گسترده اي از كلاس هايي است كه در بسته هايي مرتب شده اند و شما مي توانيد از آنها در برنامه ي خود استفاده كنيد . براي مثال جاوا كلاس هايي را ايجاد ميكند كه :
بخش هاي رابط گرافيكي را ميسازند (the java.awt package) ،كلاس هايي كه عمليات ورودي و خروجي را به عهده دارند(the java.io package) و كلاس هايي كه از شبكه پشتيباني ميكنند (the java.net package ) .
يك شي كلاس(in the java.lang package) به عنوان ريشه كلاس سلسله مراتبي جاوا انجام وظيفه ميكند .
جاوا بر خلاف C طوري طراحي شده است كه از همان ابتدا به صورت شي گرا باشد . اكثر چيز ها در جاوا اشيا هستند . ارقام ابتدايي ، كاراكترها و مدل هاي منطقي تنها استثناء ها هستند . حتي رشته ها هم در جاوا به وسيله اشيا حاضر ميشوند ،همان طور كه ساختمان هاي مهم ديگر اين زبان ، مثل نخ ها احضار ميشوند . يك كلاس يك واحد پايه براي كامپايل و اجرا شدن در جاوا است . تمام برنامه هاي جاوا متشكل از كلاس ها است .
درست است كه جاوا طوري طراحي شده است كه مثل C باشد و خاصيت هاي آن را داشته باشد ، اما هنگامي كه با آن كار كنيد خواهيد فهميد كه بسياري از پيچيده گي هاي آن زبان را از بين برده است .
اگر شما يك برنامه نويس C هستيد حتما لازم است كه ساختار هاي شي گرايي در جاوا را به دقت مطالعه كنيد . اگرچه تركيب و نحوه دستورات آن تقريبا شبيه C است ،‌اما رفتار هاي آن خيلي مشابه نيست .

تفسير شده :Interpreted
جاوا يك زبان تفسير شده است . كامپايلر جاوا به جاي ايجاد كد محلي ماشين ، كد بايتي براي ماشين مجازي جاوا ايجاد ميكند . براي اجراي دقيق برنامه ، از مفسر جاوا براي اجراي كد هاي بايتي كامپايل شده استفاده ميشود . به دليل اينكه كد هاي بايتي جاوا به نوع كامپيوتر بستگي ندارند ، برنامه هاي جاوا ميتوانند روي هر نوع كامپيوتري كه JVM(Java Virtual Machine) را دارند ، اجرا شوند .
در محيط تفسير شده ، مرحله لينك استاندارد توسعه برنامه از ديد كاربر پنهان است . اگر جاوا تنها يك مرحله لينك داشت ، فقط بارگذاري كلاس جديد به محيط پردازش ميشد كه يك پردازش نموي سبك وزن است كه در زمان اجرا مشاهده ميشود . كه اين خصوصيت با چرخه كامپايل-لينك-اجرا ي آرام و طاقت فرساي زبان هايي مانند C يا C در تضاد است .

معماري خنثي و قابل حمل :Architecture Neutral and Portable
به دليل اينكه برنامه هاي جاوا در فرمت كد بايتي با معماري خنثي كامپايل شده اند ، برنامه كاربردي جاوا ميتواند در هر سيستمي اجرا شود.
البته با اين شرط كه آن سيستم توانايي پياده سازي ماشين مجازي جاوا را داشته باشد . اين مسئله تقريبا براي كاربرد هاي توزيع سده روي اينترنت و يا ديگر شبكه هاي ناهمگن مهم است . اما روش معماري خنثي براي كاربرد هاي بر مبناي شبكه مفيد است .
به عنوان يك توسعه دهنده برنامه هاي كاربردي در بازار نرم افزاري امروز ممكن است بخواهيد مدل هاي كاربردي خود را توسعه دهيد ، به طوري كه بتواند روي Pc ، مكينتاش و سيستم عامل Unix اجرا شود .با وجود گونه هاي مختلف Unix ، Windows روي Pc و مكينتاش قوي جديد ، رفته رفته توليد نرم افزار براي همه انواع اين كامپيوتر ها سخت مي شود . اگر شما برنامه تان را در جاوا بنويسيد ميتواند روي همه ي اين كامپيوترها اجرا شود .
در حقيقت تفسير شده بودن جاوا وتعريف يك استاندارد ، معماري خنثي داشتن و فورمت كد بايتي آن از بزرگترين دلايل قابل حمل بودن آن به شمار مي آيند .
اما جاوا باز از اين هم بيشتر گام برميدارد ،‌ با اطمينان حاصل كردن از اينكه هيچيك از جنبه هاي وابستگي اجرايي زبان را ندارد . براي مثال جاوا به طور صريح اندازه هريك از انواع داده را تعريف ميكند كه اين با C تفاوت دارد ، براي مثال هريک از انواع صحيح مي تواند بسته به نوع کامپيوتر16-32 يا 64 بيت طول داشته باشد .
هنگامي که به صورت تکنيکي امکان نوشتن برنامه هاي غير قابل حمل در جاوا فراهم شد ، جلوگيري از چند خاصيت وابسته به نوع کامپيوتر که توسط جاوا API توليد شده و به طور قطع قابل حمل نوشته شده است ، آسان است .
يك برنامه جاوا به توليد كنندگان نرم افزار كمك ميكند تا از قابل حمل بودن كد هايشان اطمينان حاصل كنند . برنامه نويسان فقط براي پرهيز از دام غير قابل حمل بودن برنامه احتياج به يك تلاش ساده دارند كه شعار تجارتي شركتSun را زنده نگهدارند و آن شعار اين است :
« يك بار بنويس ، همه جا اجرا كن » .

پويا و توزيع شده Dynamic and Distributed
جاوا يك زبان پويا است . هر كلاس جاوا ميتواند در هر زماني روي مفسر جاوا بارگذاري شود . سپس اين كلاس هاي بارگذاري شده ي پويا ميتوانند به صورت پويا معرفي شوند . حتي كتابخانه كد هاي محلي ميتواند به طور پويا بارگذاري شود .كلاس ها در جاوا با كلاس Class فراخواني ميشوند ؛ شما ميتوانيد به طور پويا در مورد يك كلاس در زمان اجرا اطلاعاتي بدست بياوريد . اين خصوصيت در جاوا 1-1 به طور درستي موجود است . با وجود بازتاب API اضافه شده (Application Program Interface ) كه به برنامه ساز امكان ميدهد كه با برنامه از طريق يك برنامه كاربردي ديگر ارتباط برقرار كند .
جاوا حتي با نام زبان توزيع شده نيز خوانده ميشود . به طور ساده اين به اين معنا است كه اين زبان پشتيباني سطح بالايي براي شبكه به وجود مي آورد . براي مثال كلاس URL و كلاس هاي مرتبط با آن در بسته ي Java.net ، خواندن فايل هاي دوردست را به همان سادگي خواندن فايل هاي محلي كرده است . به طور مشابه در جاوا 1-1 ، احضار روش كنترلي RMI
(Remote Method Invocation ) ، API به يك برنامه جاوا اجازه ميدهد كه روش هايي از اشياء دور دست جاوا را به همان صورتي كه اگر آن اشياء محلي بدند آنها را ميخواند ، بخواند .( جاوا حتي از سيستم شبكه اي سطح پايين كه شامل آدرس مقصد و مسير جرياني كه توسط سوكت ها متصل شده است ، نيز پشتيباني ميكند .)
طبيعت توزيع شده ي جاوا زمانيكه با امكانات پوياي بارگذاري كلاس همراه ميشود ، واقعا درخشنده است . اين خصوصيات با هم اين امكان را براي مفسر جاوا به وجود مي آورند كه كد ها را از اينترنت بارگذاري و اجرا كند . ( همان طور كه بعدا خواهيم ديد جاوا باعث ميشود كه با وجود ابزار قدرتمند و ايمن اين كار به طور مطمئن انجام شود .) اين چيزي است كه در هنگام بارگذاري و اجراي يك برنامه كاربردي از اينترنت توسط مرورگر وب ، اتفاق مي افتد . اما داستان پيچيده تر از اين هم ميتواند باشد . تصور كنيد يك پردازشگر كلمه چند رسانه اي در جاوا نوشته شده است . وقتي از اين برنامه پرسيده ميشود كه چند نوع از داده هايي را كه قبلا هرگز وارد نشده را نمايش دهد ، ممكن است به طور ديناميكي يك كلاس را كه ميتواند داده را شناسايي كند ، از شبكه بارگذاري كند و بعد كلاس ديگري را كه بتواند داده را از درون يك پوشه تركيبي بخواند ، باز به طور ديناميكي بارگذاري ميكند . برنامه اي مانند اين از منابع توزيع شده در شبكه براي رشد و سازگاري خودكار كاربران استفاده ميكند .


ساده :Simple

http://pnu-club.com/imported/mising.jpg
جاوا يك زبان ساده است . طراحان جاوا سعي در اين داشتند تا زباني بوجود بياورند كه برنامه نويسان بتوانند به سرعت آن را ياد بگيرند . بنابراين تعداد ساختار هاي اين زبان تقريبا كم است . هدف ديگر طراحي اين زبان اين بود كه به منظور راحتي انتقال آن ، آن را طوري طراحي كنند كه براي عده ي زيادي از برنامه نويسان آشنا باشد . اگر شما يك برنامه نويس C يا C هستيد ، خواهيد فهميد كه جاوا از بسياري از ساختار هاي C و ‍ C استفاده ميكند .
براي اينكه اين زبان را هم به طور ساده و هم آشنا و ملموس و هم كوچك نگه دارند بسياري از خصوصيات C و C را در آن حذف كردند . اينها خصوصياتي بودند كه باعث مي شدند برنامه نويسي ضعيفي صورت بگيرد يا آنهايي بودند كه به ندرت در برنامه استفاده مي شدند . براي مثال جاوا از دستور goto استفاده نمي كند ، در عوض از دستورهايbreak , continue در مواقع نياز استفاده مي كند .
جاوا از سر فايل ها(header files) استفاده نمي كند و پردازشگر C را هم حذف كرده است . به اين دليل كه جاوا يك زبان شي گرا است ، ساختار هاي C مثل struct , union از آن برداشته شده است . جاوا حتي بارگذاري مجدد و خواص چندگانه ارث بري از C را هم حذف كرده است . شايد مهمترين پارامتر ساده بودن جاوا عدم استفاده اين زبان از اشاره گر ها باشد . اشاره گر ها يكي از بيشترين موجوديت هاي دردسرساز در C , C هستند . چون جاوا ساختمان ندارد و آرايه ها و رشته ها اشياء آن هستند ، بنابراين احتياجي به اشاره گر نيست .جاوا به طور خودكار آدرس دهي و دستذسي به محتواي موجود در يك آدرس را براي شما انجام ميدهد .
جاوا حتي زباله هاي حافظه اي را هم به طور خودكار جمع آوري ميكند .(Garbage Collectin) (* جمع آوري آشغال فرايندي است براي ترميم خودكار حافظه انباشته شده . بلوك هايي از حافظه كه زماني به فايل ها اختصاص داشتند اما مدتي است كه از آنها استفاده نمي شود و بلوك هايي از حافظه كه هنوز مورد استفاده قرار ميگيرند ممكن است حركت داده شوند تا از به هم پيوستن فضاهاي خالي حافظه بلوك هاي خالي بزرگتري بدست آيد .
[ از كتاب : Microsoft computer dictionary] * ) بنابراين لازم نيست كه نسبت به موضوع مديريت حافظه نگران باشيد ، همه اينها شما را از نگراني در مورد اشاره گر هاي بي ارزش ، خطرناك و هرز هاي حافظه رها ميكنند . بنابر اين شما ميتوانيد وقت خود را صرف بهبود برنامه تان كنيد .

قدرتمند :Robust
جاوا براي نوشتن نرم افزارهاي قدرتمند و بسيار ايمن ساخته شده است . جاوا هنوز هم به طور قطع نرم افزار ها را تضمين نميكند . تقريبا هنوز هم امكان نوشتن برنامه هاي مشكل ساز در جاوا وجود دارد ، هرچند كه جاوا برخي از انواع مشخص خطاهاي برنامه نويسي را حذف كرده كه به طرز چشمگيري نوشتن نرم افزار هاي ايمن را آسان تر كرده است .
جاوا يك زبان تايپ شده قدرتمند است ،‌ كه اجازه چك شدن مشكلات و خطاهاي تايپي را در زمان كامپايل مي دهد . جاوا بسيار قويتر از C تايپ شده است كه بسياري از خصوصيات انعطاف پذير در زمان كامپايل را از C به ارث برده است . مخصوصا هنگام اعلان توابع .جاوا به مدل اعلان صريح احتياج دارد ، زيرا كه از مدل اعلان صريح C پشتيباني نميكند . اين مسئله مارا از اينكه كامپايلر ميتواند خطاهاي زمان اعلان را بدست آورد ، مطمئن ميكند . مسئله اي كه منجر به ايجاد برنامه هاي ايمن تري ميشود .
يكي از چيزهايي كه باعث شده كه جاوا ساده باشد عدم وجود اشاره گر ها ومحاسبات بر روي آنها است . اين ويژگي حتي قدرت جاوا را هم با از ميان بردن يك كلاس سراسري اشاره گر افزايش ميدهد .
به طور مشابه تمام دسترسي به آرايه ها و رشته ها در زمان اجرا چك مي شوند تا از قطعي بودن آنها اطمينان حاصل شود .با از بين بردن امكان دوباره نويسي حافظه و داده هاي هرزه ، تعويض نقش اشياء از نوعي به نوع ديگر هم در زمان اجرا كنترل ميشود تا از مجاز بودن آن اطمينان حاصل شود .
سرانجام زباله جمع كن خودكار جاوا بسياري از عمليات پاكسازي مرتبط با معماري حافظه را راه اندازي ميكند . چيزي كه از خطاهاي خطر ساز مرتبط با تخصيص و آزاد سازي حافظه جلوگيري ميكند .

ايمن : Secure
يكي از دلايل پرطرفدار بودن جاوا اين است كه يك زبان ايمن است . اين ويژگي مخصوصا به خاطر طبيعت توزيع شده ي آن بسيار مهم است .بدون وجود امنيت شما قطعا نميخواهيد كه يك كد را از يك سايت تصادفي اينترنت بارگذاري كنيد و به آن اجازه اجرا شدن روي كامپيوتر خودتان را هم بدهيد . اين دقيقا همان چيزي است كه مردم هرروز با يك كد جاوا انجام ميدهند . جاوا به صورت ايمن طراحي شده و چندين لايه كنترل امنيت به وجود مي آورد كه شما را در برابر كد هاي خطرساز محافظت مي كنند و به كاربر اجازه ميدهد كه برنامه هاي ناشناخته را با خيال راحت اجرا كند .
همان طور كه ديديم ، برنامه جاوا نميتواند اشاره گر ها را به حافظه يا آرايه هاي سرريز يا حافظه خواندني خارج از محدوده يك آرايه يا رشته اشاره ، اشاره دهد. اين خصوصيت يكي از اصلي ترين وسايل دفاع جاوا در برابر كدهاي خطرساز است . دومين راه دفاع در برابر كد هاي خطرساز ، پردازش كدهاي بايتي به صورت قابل تصديق و تاييد است كه مفسر جاوا به روي هر كدي كه در حال بار گذاري باشد اعمال ميكند . اين مراحل تاييد از اينكه كد به صورت درستي ساخته شده اطمينان حاصل ميكنند ، كه براي مثال پشته سرريزي يا زيرريزي نداشته باشد ، يا شامل كد هاي بايتي غير مجاز نباشد .
كدهاي بايتي خراب يا خطرساز ممكن است از ضعف هاي اجرايي در مفسر جاوا سوء‌ استفاده كنند . لايه اي كه در اينجا ما را به طور ايمن محافظت ميكند ، مدل جعبه شني (Sand box) است : كدهاي ناشناخته در يك جعبه شني قرار ميگيرند جايي كه ميتوانند به صورت ايمن اجرا شوند ، بدون اينكه هيچ صدمه اي به بقيه اجزاء يا محيط جاوا بزنند .
وقتي يك برنامه كاربردي يا ديگر كدهاي ناشناخته در جعبه شني در حال اجرا است ،‌ چند محدوديت در مورد كاري كه ميتواند انجام دهد ، وجود دارد . واضح ترين اين محدوديت ها اين است كه هيچ دسترسي به هيچ يك از فايل هاي محلي سيستم وجود ندارد . در جعبه شني محدوديت ديگري هم وجود دارد كه به وسيله كلاس مديريت امنيت اعمال ميشود . اين مدل در ابتدا از اينكه سيستم هاي امنيتي را نصب كرده ايد يا نه ، مطمئن ميشود ، چرا كه همه كلاس هاي جاوا نياز به عمليات حساسي مانند دسترسي به سيستم فايل را دارند . اگر فراخواني به وسيله يك كد ناشناخته به صورت مستقيم يا غير مستقيم انجام شد ،‌ مدير امنيت مورد استثناء‌ را مي فرستد و عمليات صورت نمي گيرد .
و سرانجام در جاوا 1-1 يك راه حل ممكن ديگر براي مشكلات امنيتي وجود دارد ، به وسيله ضميمه كردن يك امضاء ديجيتالي به كد جاوا كه اصل آن كد ميتواند به صورت پنهاني و نهفته ساخته شود . اگر شما اعتماد خود را به يك شخص يا يك سازمان مشخص كرده باشيد ، كدي كه امضاء آن هويت مورد اعتماد روي آن قرار دارد ،‌ ايمن و مطمئن است . حتي زمانيكه در حال بارگذاري شدن در شبكه است و ممكن است حتي بدون جلوگيري توسط جعبه شني اجرا شود .
عملكرد سطح بالا :High Performance
جاوا يك زبان تفسير شده است ، بنابر اين هرگز به سرعت زبان كامپايل شده اي مثل C نخواهد بود . گفته ميشود كه جاوا 0-1 به اندازه 20 برابر از C كند تر است . جاوا 1-1 تقريبا سرعتي دو برابر جاوا 1-1 دارد . بنابراين ممكن است عاقلانه باشد اينكه بگوييم كد C كامپايل شده 10 برابر سريع تر از كد هاي تفسير شده ي جاوا اجرا ميشود . اما قبل از اينكه به خاطر اين موضوع مايوس شويد ، آگاه باشيد كه اين سرعت بيشتر از آن چيزي است كه براي برنامه هاي پرسرعت ، كاربردهاي GUI(Graphical User Interface ) ، برنامه هاي برمبناي شبكه ، جايي كه برنامه كاربردي معمولا آماده براي اجرا شدن است ، انتظار براي كاربر كه يك دستوري اعمال كند و يا انتظار براي دريافت از شبكه ، لازم است .
به علاوه قسمت هايي كه به سرعت هاي بالا نياز دارند ، كه كارهايي از قبيل الحاق رشته ها و مقايسه را انجام ميدهند ، با كد محلي جاوا اجرا ميشوند .
علاوه بر اين كارايي ، بسياري از مفسر هاي جاوا اكنون شامل كامپايلر هاي فقط در زمان " just in time " نيز هستند كه ميتواند كدهاي بايتي جاوا را براي هر نوعCPU در زمان اجرا به كد ماشين ترجمه كند . فرمت كد بايتي جاوا با اين كامپايلر هاي در زمان در مركز كافي و مناسب است و انصافا كدهاي خوبي توليد ميكند . در حقيقت Sun ادعا ميكند كه كارايي كد هاي بايتي كه به كد ماشين تبديل شده اند ، تقريبا به خوبي كارآيي آن در C و C است .
اگر شما خواهان اين هستيد كه قابل حمل بودن كد ها را قرباني بهبود در سرعت آن كنيد ، ميتوانيد بخش قابل توجهي از برنامه خود را در C و C بنويسيد و از روش هاي مخصوص جاوا براي مشترك كردن با اين كد محلي جاوا استفاده كنيد .

چند نخ كشي شده :Multitbreaded
در يك برنامه كاربردي بر مبناي GUI شبكه اي ، مثل مرورگر وب ، تصور اينكه چند چيز بتوانند به طور همزمان اجرا شوند ، آسان است . يك كاربر ميتواند همزمان با اينكه دارد يك صفحه وب را ميخواند به يك كليپ صوتي گوش دهد و همزمان در پس زمينه مرورگر يك عكس را بارگذاري كند .
جاوا يك زبان چندنخ كشي شده است ، كه از چندين رشته اجرايي (گاهي پردازش سبك وزن خوانده ميشود) پشتيباني ميكند و ميتواند چندين كار را انجام دهد . يكي از مزيت هاي چندنخ كشي شده اين است كه عملكرد سطح بالايي براي كاربردهاي گرافيكي براي كاربر فراهم ميكند .
اگر شما سعي كرده ايد كه با نخ ها در C و C كار كنيد ، ميدانيد كه كمي مشكل است . جاوا برنامه نويسي با نخ ها را بسيار آسان تر كرده است ، با به وجود آوردن زبان درون ساخته شده اي كه از نخ ها پشتيباني ميكند . بسته jana.lang يك كلاس بوجود آورده است كه از روش هايي براي شروع و پايان يك نخ ، و مرتب كردن ترتيب گره ها در ميان چيز هاي ديگر ، پشتيباني ميكند .
حتي دستورات زبان جاوا از نخ ها پشتيباني ميكنند ، كه با استفاده از كلمات كليدي مطابق شده . اين كلمات كليدي علامت گذاري بخش هاي كد يا تمامي روش هايي را كه بايد فقط با يك نخ در يك زمان اجرا شوند را به شدت آسان كرده است .
به دليل اينكه جاوا استفاده از نخ ها را بسيار ساده ميكند ، كلاس جاوا در شماري از جاها از اين نخ ها استفاده ميكند . براي مثال هر برنامه كاربردي كه انيميشن اجرا ميكند ، از نخ ها استفاده كرده است .
به طور مشابه جاوا از برنامه هاي نا همگام ، ورودي ها و خروجي هاي بلاك نشده با اخطاري به وسيله سيگنال ها يا وقفه ها پشتيباني نميكند ، در اين صورت شما بايد يك نخ بسازيد كه روي هر كانال ورودي خروجي كه با آن كار ميكنيد بلاك شده باشد .

TAHA
09-21-2009, 11:35 PM
جاوا در قلمرو موبايل‌ (هر آنچه باید درباره ی جاوا بدانیم)

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




Java 2 Micro Edition چيست؟

زبان برنامه‌نويسي جاوا بيشتر با محيط برنامه‌نويسي تحت سرورش يا Java 2 Enterprise Edition شناخته مي‌شود؛ محيطي كه شامل فناوري‌هايي از قبيل Enterprise Java Beans) EJBS)، سِرولت‌ها (servlets)، و ‌‌JSPs
(Java Server Pages)ها است.

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

Java 2 Micro Edition) J2ME) نيز پلتفرمي است كه براي دستگاه‌هاي موبايل طراحي شده و هدف آن ارائه نرم‌افزارهايي است كه مستقل از سكوي كاري مقصد و سيستم‌عاملِ اجرا كننده آن (كه در دنياي دستگاه‌هاي موبايل، تنوع بيشتري دارند)، به ارائه خدمات بپردازند.

پلتفرم Java2

چيزي كه اكنون به آن جاوا مي‌گوييم، در حقيقت پلتفرم Java2 از شركت سان مايكروسيستمز است كه در سه نسخه متفاوت عرضه مي‌شود:


Java 2 Standard Edition) J2SE)
Java 2 Enterprise Editon) J2EE)
Java 2 Micro Editon) J2ME)

هر نسخه از پلتفرم مذكور، يك محيط اجرايي كامل را كه از JVM يا ماشين مجازي جاوا يك سري و كلا‌س‌هاي كتابخانه‌اي تشكيل شده براي اجراي نرم‌افزارهاي مبتني بر جاوا فراهم مي‌كند.

هر يك از سه نسخه با هدف اجراي نرم‌افزارهاي متفاوت روي سكوهاي كاري متفاوت طراحي شده و توسعه يافته‌اند. J2EE با هدف ايجاد و توسعه نرم‌افزارهاي دسكتاپ طراحي شد. اين پلتفرم كلا‌س‌هاي ضروري رابط‌ كاربر را براي توليدكنندگان نرم‌افزار فراهم مي‌كند.

نرم‌افزارهاي با هدف استفاده در سرورها نيز توسط J2EE طراحي و توليد مي‌شوند و J2ME نيز در توليد نرم‌افزارهايي براي دستگاه‌هاي موبايل كاربرد دارد. آنچه تفاوت بين اين نسخه‌ها محسوب مي‌شود، كلا‌س‌هاي كتابخانه‌اي است كه در هر يك از نسخه‌ها تعريف مي‌گردد. به بيان ساده، مي‌توان J2ME را زيرمجموعه‌اي از J2SE و J2SE را زيرمجموعه‌اي از J2EE محسوب كرد.

زياد بودن حجم و تعداد كلا‌س‌هاي J2SE (كه چيزي حدود ده تا بيست مگابايت است و براي دستگاه‌هاي موبايل امروزي، بزرگ و حجيم) باعث تولد J2ME شد. اين پلتفرم شامل كتابخانه‌هاي كمتر و اختصاصي‌شده با حجمي قابل قبول براي دستگاه‌هاي ضعيف‌تر (نسبت به دسكتاپ‌ها) است. مشخصه‌هاي J2ME ،J2SE و J2EE به صورت مفصل در Java Communily Process) JCP) تعريف شده و قابل دسترس است. براي اطلا‌عات بيشتر مي‌توانيد به www.jcp.org (http://www.jcp.org/) مراجعه كنيد.
Java 2 Micro Edition

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

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

البته J2ME اولين قدم براي تطبيق جاوا با محيط‌هاي اجرايي كوچك همچون دستگاه‌هاي موبايل نيست. Personal Java و Embeded Java نيز تلا‌ش‌هايي بودند تا نرم‌افزارهايي مبتني بر Java 1.1.x براي دستگاه‌هاي موبايل توسعه يابند. اما امروزه، Personal Java و Embeded Java، از رده خارج شده‌اند و جاي خود را به J2ME داده‌اند.

لا‌زم به ذكر است كه از 22 دسامبر سال 2006 ميلا‌دي، سان مايكروسيستمز كه منبع J2ME يا قسمت مهمي از آن را تحت General Public License) GPL) در اختيار عموم قرار داده است كه گفته مي‌شود در طي پروژه‌اي با نام Phone ME انجام گرفته است.
نگاهي به معماري Java ME

J2ME مجموعه‌اي از كتابخانه‌ها و فناوري‌هاي مختلف است كه در كنار هم، محيطي براي اجراي يك نرم‌افزار در يك دستگاه موبايل فراهم مي‌كنند. در كلي‌ترين بحث مي‌توان گفت كه J2ME مبتني بر سه المان اصلي است:

˜‌ پيكربندي: بسياري از كتابخانه‌هاي پايه و قابليت‌هاي ماشين مجازي براي رِنج وسيعي از دستگاه‌ها را شامل مي‌شود.
˜ ‌پروفايل: مجموعه‌اي از APIها براي پشتيباني از رِنج كمتري از دستگاه‌ها است.
˜‌ بسته‌هاي انتخابي: مجموعه‌اي از APIهاي اختصاصي شده است.

پيكربندي ذكر شده در بالا‌ به دو پيكربندي مختلف تقسيم مي‌شود:

يكي براي دستگاه‌هاي همراه ضعيف، يعني Connected Limited Device Configurtion) CLDC) و ديگري، براي دستگاه‌هايي با قابليت بيشتر و قدرتمندتر؛ يعني Connected Device Configuration) CDC) شكل 1 موقعيت J2ME و ارتباط آن با ديگر فناوري‌هاي جاوا را نشان مي‌دهد.


http://pnu-club.com/imported/2009/09/4001.jpg
شکل 1
تفاوت‌هاي CLDC و CDC به‌طور خلا‌صه اين است كه CDC براي دستگاه‌هايي در نظر گرفته شده كه از نظر قابليت‌هاي سخت‌افزاري و عملكردي در رده بالا‌تري قرار دارند.

شكل 2 رابطه CDC و CLDC را نشان مي‌دهد. لا‌زم به ذكر است كه Midletها، به نرم‌افزارهاي كوچكي گفته مي‌شود كه توسط J2ME طراحي شده و توليد گرديده‌اند.

اين نرم‌افزارها مشابه Appletها و Servletها در J2SE و J2EE هستند.
Java Card

جاوا كارت فناوري نسبتاً نوظهوري است كه براي استفاده از پلتفرم جاوا روي كارت‌هاي هوشمند مورد استفاده قرار مي‌گيرد.

كارت‌هاي هوشمند وسايلي هستند كه از نظر حافظه و محدوديت‌هاي ديگر، از دستگاه‌هايي كه به وسيله J2ME پشتيباني مي‌شوند، ضعيف‌ترند.

با اين‌كه كارت‌هاي هوشمند يا Smart Cardها چندان هم جديد نيستند، كاربرد وسيعي در حوزه امنيت شخصي دارند. اين كارت‌ها در حدود دو دهه پيش در اروپا ابداع شده، گسترش يافتند و در مراحل اوليه، بيشتر حافظه‌هاي همراهي بودند كه حاوي اطلا‌عات ذخيره‌شده‌اي بودند و براي جلوگيري از دزدي از تلفن‌هاي عمومي مورد استفاده قرار گرفتند.

امروزه نيز مي‌توانيم نمونه اين كارت‌ها را در تلفن‌هاي عمومي كشورمان ببينيم. اما فناوري SmartCard يك استاندارد صنعتي است كه توسط Joint Technical Committee 1) JTC1) از سازمان بين‌المللي استانداردها يا ISO و به همراه IEC يا كميته بين‌المللي الكترونيك تعريف و تدوين شده است.

استاندارد بين‌المللي ISO/IEC 7816 كه در سال 1987 تدوين شد و آخرين بار در سال 2003 مورد بازبيني قرار گرفت، تعريف‌هاي كاملي از كارت‌هاي هوشمند ارائه مي‌دهد كه شامل خصوصيات ظاهري، اتصالا‌ت فيزيكي، سيگنال‌هاي الكترونيكي و پروتكل‌هاي ارسالي، دستورات،‌ مدل امنيتي، شناسه‌هاي كاربردي و المان‌هاي مشترك داده‌اي مي‌شود.

كارت‌هاي هوشمند عموماً از يك قطعه پلا‌ستيكي تشكيل شده‌اند كه در داخل، داراي ICهاي مختلفي مي‌باشند. SIM كارت‌ها هم به نوعي Smart كارت محسوب شده و از مدل‌هاي امنيتي پيچيده‌اي استفاده مي‌كند.

اين كارت‌ها از نظر طريقه دسترسي به دو دسته اتصالي و غيراتصالي تقسيم مي‌شوند. همان‌طور كه از نام آن‌‌ها پيداست، انواع غيراتصالي از RFID يا شناسايي با موج راديويي براي برقراري ارتباط استفاده مي‌كنند. در حال حاضر يك دستگاه مبتني بر Java Card از يك CPU هشت بيتي يا شانزده بيتي با كلا‌ك 7/3 مگاهرتز، 1KBرم و 61KB حافظه داخلي بهره مي‌جويد.


http://pnu-club.com/imported/2009/09/4002.jpg
شکل 2
فناوري جاواكارت علا‌وه بر آن‌كه در كارت‌هاي هوشمند مورد استفاده قرار مي‌گيرد، در نمونه‌هايي از دكمه‌هاي هوشمند و گره‌هاي USB نيز كاربرد دارند.

با توجه به اين پتانسيل بالا‌ و كاربرد وسيع چنين فناوري‌هايي در امروز و آينده بود كه سان به تعريف استاندارد جاوا كارت پرداخت و پلتفرمي را ارائه كرد كه از آن براي ايجاد JavaCard Appletها استفاده مي‌شد.

فناوري جاواكارت هم اكنون تحت نسخه 2.2 عرضه و پشتيباني مي‌شود و داراي سه زير مجموعه است:
- ‌ماشين مجازي جاواكارت كه زبان برنامه‌نويسي و ماشين مجازي مورد نياز آن را تعريف مي‌كند.
- محيط اجراي جاواكارت كه طريقه عملكرد زمان اجراي كارت‌هاي هوشمند را تضمين مي‌كند.
- API جاواكارت كه حاوي كلا‌س‌ها، بسته‌هاي جاوا و چارچوب كاري بايد جاواكارت را تشكيل مي‌دهد.

همچنين سان با عرضه JavaCard Develophent Kit) JCDK) كه حاوي پيكربندي‌هاي مرجع ماشين مجازي جاواكارت، محيط اجرايي جاواكارت و ديگر ابزاري توسعه JC است، زمينه را براي توسعه هرچه بهتر و آسان‌تر JC فراهم آورده است.
Java FX Mobile؛ سيستم‌عاملي جديد

Java FX Mobile يك سيستم‌عامل جاوايي است كه در آغاز توسط شركت JavaJa براي دستگاه‌هاي موبايل ايجاد شد و در آوريل 2007 توسط سان‌مايكروسيستمز خريداري گشت. اين سيستم‌عامل جزئي از خانواده محصولا‌ت Java FX است كه پلتفرمي جديد براي PDAها اسمارت‌فون‌ها و دستگاه‌هاي همراه محسوب خواهد شد.

Java FX Mobile از ساختارهاي Java ME و Java SE روي يك هسته لينوكس بهره خواهد برد. گفته مي‌شود سان، Java FX Mobile را به صورت باينري در اختيار توليدكنندگان دستگاه‌هاي همراه خواهد داد كه قصد عرضه محصولي با رابطه كاربر و عملكردي متفاوت دارند.

طبق اعلا‌م سان، Java FX Mobile يك محيط اجرايي كاملا‌ً مبتني بر جاوا و فناوري‌هاي منبع‌بازِ لينوكس خواهد بود. اين سيستم‌عامل از Java ME و ديگر APIهاي استاندارد جاوا پشتيباني خواهد كرد تا قابليت اجراي رنج وسيعي از نرم‌افزاري جديد يا موجود را فراهم آورد.

سان اعتقاد دارد با پا گذاشتن در وادي سيستم‌عامل دستگاه‌هاي موبايل نسل بعد، به منبع‌باز و رايگان ماندنِ چرخه نرم‌افزارهاي كاربردي موبايل كمك خواهد كرد.

Java FX Mobile نقش فناوري‌هاي جاوا را در توسعه نرم‌افزاري موبايل افزايش خواهد داد و يك محيط نرم‌افزاري كاملا‌ً يكسان و مجتمع را در اختيار كاربران و توسعه‌دهندگان قرار خواهد داد. توليدكنندگان نيز مي‌توانند با استفاده از ميان‌افزارها و برنامه‌هاي كاربردي مقيم حافظه مبتني بر جاوا به صورت سفارشي و دلخواه قابل توليد هستند، هزينه‌هاي توليد و زمان عرضه به بازار محصولا‌ت خود را كاهش دهند.

اكنون جاوا روي بيش از 8/1 ميليون تلفن همراه عرضه شده و اكثر توسعه‌دهندگان نرم‌افزارهاي موبايل، از آن براي عرضه نرم‌افزارهاي خود استفاده مي‌كنند. اما Java FX Mobile نقش جاوا را در توسعه نرم‌افزارهاي موبايل پررنگ‌تر خواهد كرد.

اين مهم از طريق فراهم كردن ميان‌افزارها و API مبتني بر جاوا در اين سيستم‌عامل انجام خواهد پذيرفت. به‌علا‌وه، توليدكنندگان و اپراتورهاي موبايل نيز به راحتي و با هزينه كمتري مي‌توانند نرم‌افزارهاي مورد نياز خود را سفارشي‌سازي كنند و در اختيار كاربران قرار دهند. مزاياي Java FX Mobile را مي‌توان از سه منظر بررسي كرد: منظر توليدكنندگان، منظر توسعه‌دهندگان و منظر اپراتورها.

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

از ديد توسعه‌دهندگان طرف سوم، با استفاده از API استاندارد و بازِ جاوا،‌ايجاد و توليد يك نرم‌افزار فراگير كه نياز به تطبيق با سخت‌افزاري مختلف نداشته باشد و مستقل از محيط اجرايي، عملكرد صحيحي داشته باشد بسيار ساده‌تر شده است و هزينه‌هاي سرمايه‌گذاري كمتري را طلب مي‌كند.

اپراتورها نيز مي‌توانند با استفاده از اين پلتفرم به آساني و با هزينه‌هاي پايين‌تري به ارائه خدمات و نرم‌افزارهاي مخصوص خود بپردازند و از مزاياي عدم وابستگي اين نرم‌افزارهاي مبتني بر جاوا به سخت‌افزار برخوردار گردند.

به هر حال، Java FX Mobile رقيبي سرسخت براي سيمبيان، ويندوز موبايل و Limo خواهد بود. سان با اهداف آرمان‌گرايانه خود پا به ميدان رقابت غول‌هايي گذاشته است كه آينده‌اي هيجان‌انگيز را رقم خواهند زد. آيا سيمبيان و يار قديمي خود، نوكيا، برنده ميدان خواهند بود يا ويندوز موبايل؟

آيا موتورولا‌ و متحدان بزرگش همچون NTTDoCoMo و NEC قادر خواهند بود لينوكس جديدشان را در مقابل سيمبيان تجهيز كنند يا Limo بايد آماده مبارزه با لينوكسي ديگر از جنس جاوا يا همان Java FX Mobile باشد؟ نتيجه اين رقابت‌هاي سخت هرچه باشد، به يك مقصد منتهي مي‌شود: زندگي بهتر و متفاوت از آنچه تاكنون تجربه كرده‌ايم