View Full Version : مقاله: مقالات مربوط به زبان هاب برنامه نویسی
Ali_Sam
یک شنبه 20 بهمن 1387, 15:31 عصر
در این قسمت می توانید مقالات مختلف در زمینه ی زبان های برنامه نویسی که در سایت ها و مجلات مختلف به چاپ رسیده است را مشاهده و در مورد آن بحث نمایید.
Ali_Sam
یک شنبه 20 بهمن 1387, 15:41 عصر
CSS زباني همه فن حريف
يك زبان براي برنامهنويسان با سليقه
CSS يك زبان استايلشيت Stylesheet))است كه براي توصيف شيوه نمايش فايلهاي متني نوشته شده به زبانهاي ماركآپ (Markup)استفاده ميشود. زبانهاي استايلشيت همانطور كه از نام آنها برميآيد، فرم نمايش فايلها را مشخص ميكنند. مهمترين كاربرد اين زبان ايجاد استيل و فرم براي صفحات وب نوشته شده بهزبان HTML و XHTML است. با اين وجود CSS را ميتوان در مورد هر نوع متن نوشته شده به زبان XML از جمله SVG و XUL اعمال كرد.
ويژگيها
از مهمترين مزاياي CSS اين است كه كاربران ميتوانند رنگ، فونت، ساختار و ديگر وجوه نمايش متن را تغيير دهند. هدف اصلي از طراحي CSS جدا كردن محتواي متني فايلها از شيوه نمايش آنها است. محتواي متني فايلها به زبان HTML و ديگر زبانهاي ماركآپ و شيوه نمايش متن با استفاده از زبان CSS نوشته ميشود. اين جداسازي ميتواند دسترسي به محتواي متني را بهبود بخشد، انعطافپذيري و كنترل روي مشخصات و ويژگيهاي نمايش را افزايش دهد و پيچيدگي و تكرارمحتواي ساختاري را از طريق ايجاد امكاناتي مانند طراحي وب بدون استفاده از جدول كاهش دهد. با استفاده از CSS ميتوان يك صفحه ماركآپ را به شيوههاي Style))گوناگون و با شيوههاي رندرينگ متفاوت نمايش داد. روشهاي مختلف رندرينگ فايل را به اشكال مختلف مناسب براي كاربردهاي مختلف آماده ميكند. بهعنوان مثال، نسخههاي قابل چاپ، نسخههاي قابل تبديل به صوت كه با مرورگرهاي مبتني بر صدا يا خواننده صفحه نمايش قابل خواندن هستند توسط CSS آماده ميشوند. از مهمترين ويژگيهاي CSS ميتوان به امكان رندرينگ صفحه براي تبديل به خط بريل اشاره كرد.
دستور زبان CSS
دستور زبان CSS ساده است و از تعداد اندكي كلمات كليدي انگليسي تشكيل ميشود كه براي مشخص كردن اسامي مشخصات فرمهاي گوناگون استفاده ميشوند. يك استايلشيت در حقيقت يك ليست از قوانين است. هر قانون يا مجموعه قوانين از يك يا چند انتخاب كننده و يك بلوك تعريفكننده تشكيل ميشود. بلوك تعريفكننده شامل يك ليست از تعريفهاي جدا شده توسط سميكالن(;) است كه درون دو كروشه قرار ميگيرند. هر تعريف خود شامل يك مشخصه، يك كولون، يك مقدار و در انتها يك سمي كولون است.
CSS داراي يك الگوي تعيين تقدم براي مشخص كردن تقدم قوانين فرمهاي مختلف است. زماني كه چند قانون مرتبط با يك استيل قابل اعمال هستند، CSS تقدم آنها را تعيين ميكند و سپس با محاسبه وزن يا تقدم هر قانون، اين تقدم را به آنها اختصاص ميدهد. اين عمل كه به Cascade به معناي «آبشار» معروف است نتايج اعمال قوانين را قابل پيشبيني ميسازد. يكي از ويژگيهاي قابل توجه در CSS اين است كه اجازه ميدهد فرم و استيل يك فايل تحت تاثير چند استايلشيت باشد. يك استايلشيت ميتواند برخي از ويژگيهاي خود را از يك استايلشيت ديگر به ارث ببرد. اين ويژگي امكان ايجاد تركيب منحصربهفردي از انواع فرمها را فراهم ميكند.
كاربرد CSS
پيش از پيدايش CSS تقريبا همه ويژگيهاي نمايشي اسناد HTML در كد HTML نوشته شده بهزبان ماركآپ درج ميشد. رنگ فونت، فرم و استيل پس زمينه، مرزها و اندازهها و نيز نحوه قرار گرفتن اجزاي مختلف نسبت به هم بايد بهطور مستقيم و اغلب بهطور تكرارشونده در كد HTML گنجانيده ميشدند. CSS به برنامهنويسان اجازه ميدهد كه بخش بزرگي از اين اطلاعات را به يك استايلشيت مجزا منتقل كنند و با اين كار كد HTML را سادهتر كنند و كارايي آن را افزايش دهند در حالي كه كدهاي پيش از پيدايش CSS علاوه بر پيچيدگي زياد انعطافپذيري اندكي داشتند و نگهداري كد نيز با دشواري و هزينه زياد همراه بود.
تاريخچه
پيدايش استايلشيتها به دهه 1970 باز ميگردد. در آن زمان اين نوع فايلها SGML ناميده ميشدند. آبشاري كردن اين صفحات بهعنوان ابزاري براي ايجاد يك روش سازگار و مناسب براي فراهما~وري اطلاعات فرم و استيل براي صفحات وب بهوجود آمد. با گذشت زمان، رشد زبان HTML آن را به يكي از مهمترين ابزارهاي كار توسعهدهندگان وب تبديل كرد. هرچند اين روند تكاملي قدرت كنترل طراح بر ظاهر سايت را تا حد زيادي افزايش ميداد، اين امر بهقيمت پيچيدگي كد HTML و افزايش هزينههاي نوشتن كد و نگهداري آن تمام ميشد. گوناگوني در پيادهسازي مرورگرهاي وب ايجاد يك وضعيت ثابت و پايدار در ظاهر سايت را ناممكن ميساخت و كاربران كنترل كمتري بر شيوه نمايش صفحات وب داشتند و نميتوانستند در صورت لزوم تغييري در آن بهوجود آورند. براي بهبود قابليتهاي نمايش صفحات وب، 9 زبان مختلف به C3W پيشنهاد شد. از ميان اين 9زبان، دو زبان انتخاب شدند كه پايههاي اصلي CSS را تشكيل ميدهند. اين دو زبان عبارت بودند از: CHSS و SSP. طراحي و توسعه CSS در سال 1995 آغاز شد و پيش از پايان سال 1996 رسما با نام CSS سطح يك منتشر شد. نسخه كنوني CSS بهنام CSS سطح 3 كه در سال 1998 پديد آمد، همچنان در حال توسعه است.
پشتيباني مرورگرها
فيلتر CSS يك فن كدگذاري است كه هدف آن نمايش يا مخفي كردن بخشهايي از CSS در مرورگرهاي مختلف است. با استفاده از فيلتر CSS ميتوان كدهاي CSS را بهنحوي تغيير داد كه در مرورگرهاي مختلف بهدرستي نمايش داده شود.
محدوديت ها
مرورگرهاي مختلف كدهاي CSS را بهروشهاي مختلف رندر ميكنند. اين امر نتيجه اشكالات موجود در طراحي مرورگرها يا عدم پشتيباني برخي از مرورگرها از ويژگيهاي CSS است. بهعنوان مثال IE كه از نسخه 3 تاكنون نسخه 2.0 CSS را پيادهسازي كرده است، در اغلب نسخههاي پيش از نسخه 8 بسياري از خصوصيات بسيار مهم مانند طول و عرض را بهدرستي تفسير نميكرد. اكنون اكثر مرورگرها با موفقيت بر اين مشكل غلبه كردهاند اما CSS هنوز نيازمند اعمال تغييرات زيادي است تا به ساختار قابل نمايش يكساني روي همه مرورگرها دست يابد. بهنظر ميرسد كه تا دستيابي به ساختاري كه با دقتي در حد پيكسل روي همه مرورگرها يكسان نمايش داده شود، راه درازي در پيش است. عدم وجود عبارتهاي محاسباتي در CSS انجام عمليات محاسباتي را امكانناپذير ميسازد. اگرچه CSS براي انجام محاسبات طراحي نشده است، اما در مواردي مانند تعيين حاشيه صفحه بر حسب تعداد ستونها يا پيكسلها انجام محاسبات ساده لازم است.
عدم وجود متغيرها در CSS نيز از مواردي است كه بايد در مورد آن چارهانديشي شود. در زبان CSS تنها ميتوان از مقادير ثابت استفاده كرد. به اين ترتيب وقتي مقدار يكي از ثابتهاي موجود در كد تغيير ميكند تنها با استفاده از دستور Replace-all ميتوان مقدار آن را در همه قسمتهاي كد تغيير داد. تغيير مقدار از طريق جابجايي چندان منطقي نيست واغلب مشكل ايجاد ميكند. مثلا اگر بخواهيم برخي از مقادير ارتفاع را كه 50 پيكسل هستند، تغيير دهيم و برخي ديگر را ثابت نگهداريم، استفاده از اين شيوه عملي نيست. انجام اين كار در CSS تنها از طريق عبارات منظم بسيار پيچيده امكانپذير است. بسياري از توسعهدهندگان كد براي حل اين مشكل از PHP براي كنترل و تغيير خروجي CSS استفاده ميكنند. امروزه بسياري از توسعهدهندگان كد معتقدند كه CSS نيازمند پيادهسازي برخي از المانها و ويژگيهاي زبانهاي برنامهنويسي است.
مزايا
با تركيب CSS با امكانات يك سيستم مديريت محتوا، ميتوان سيستم را بهنحوي برنامهريزي كرد كه انعطافپذيري سيستم افزايش يافته و قابل تطبيق با محتواي صفحه باشد. اين مساله به كاربران و برنامهنويساني كه آشنايي زيادي با مفاهيم CSS و با ويرايش كد CSS و HTML ندارند، كمك ميكند بدون ايجاد تغييرات زياد صفحات جديد را به فرمي يكسان با صفحات قبلي ايجاد كنند. براي نمونه، نويسنده يك مقاله ميتواند تعداد ستونهاي مقاله را تعيين كند يا تصميم بگيرد كه كدام صفحات مقاله داراي تصوير باشند. اين اطلاعات به سيستم مديريت محتوا منتقل ميشود و منطق برنامه اطلاعات دريافتي را ارزيابي ميكند و بر اساس تعداد مشخصي از پارامترها تعيين ميكند كه چطور مجموعهاي از قوانين و كلاسها را به المانهاي HTML اعمال كند. بنابراين مكان و فرم المانها توسط سيستم مديريت محتوا تعيين ميشود. اهميت اين مزيت بزرگ زماني مشخص ميشود كه در مقياسهاي خيلي بزرگ و با سايتهاي پيچيده سر و كار داشته باشيم. سايتهاي خبري نمونه بارزي از اين نوع سايتها هستند، تعداد افرادي كه اين نوع سايتها را بهروز ميكنند و يا بهنوعي به آنها اطلاعات ارسال ميكنند، نسبتا زياد باشد و اين امتياز بزرگ طراحي و نگهداري آنها را تا حد زيادي آسان ميكند.
وقتي CSS از ديدگاه ارثبري و Cascading بهطور كارآمد استفاده شود، يك استايلشيت يكنواخت و يكدست بهدست ميآيد كه ميتوان فرم و استيل آن را بر همه المانهاي سايت اعمال كرد. در صورت نياز به تغيير فرم و استيل برخي از المانها، اعمال اين تغييرات با استفاده از سيستم مديريت محتوا بسيار ساده و با استفاده از ويرايش تعداد اندكي از قوانين امكانپذير است؛ در حاليكه پيش از پيدايش CSS، اين نوع نگهداري از سيستم بسيار دشوار، پرهزينه و وقتگير بود.
آويد افضل
منبع:هفته نامه کلیک-روزنامه جام جم
Ali_Sam
یک شنبه 20 بهمن 1387, 15:56 عصر
كنترل سرعت دردستان شما-قسمت سوم
هفتههاي گذشته در مورد سرعت برنامهها و عوامل موثر در آن و نقش برنامهنويس در بهبود كارايي نرمافزارها صحبت كرديم. در ادامه قصد داريم به ديگر عواملي كه در سرعت نرمافزارها تاثير دارند و برنامهنويس بايد همواره آنها را مدنظر قرار دهد اشاره كنيم. ابتدا لازم است با مفهومي تحتعنوان رويداد آشنا شويم.
رويدادها
در زبانهاي برنامهنويسي امروزي، بهخصوص در زبانهاي ويژوال، مفهومي به نام رويداد Event) )وجود دارد. رويداد اتفاقات مشخص و تعريف شدهاي است كه ممكن است حين اجراي برنامه اتفاق بيفتد و اين اتفاق ممكن است تحت كنترل كاربر آن نرمافزار باشد يا از كنترل وي خارج باشد. از جمله رويدادهاي تعريف شده در برنامهنويسي ميتوان به رويداد كليك، كوچك و بزرگ كردن و تغيير اندازه پنجره برنامه، بستن برنامه، تغيير يك متن، كليك مضاعف روي يك عنصر، ورود و خروج به يك ناحيه، بيكار شدن برنامه و ... اشاره كرد.
برنامهنويس ميتواند بنا به نياز خود، براي هر رويداد برنامه رويهاي تعريف كند تا در زمان رخ دادن آن رويداد، رويه مربوطه فراخواني و اجرا شود. پركاربردترين رويدادها در برنامهها كليك، كليك مضاعف و فشردن كليد در محيط برنامه است. هنگامي كه در فرمي از برنامهروي دكمهاي كليك ميكنيد، رويداد كليك آن دكمه فراخواني ميشود و آنچه كه بعد از فشردن دكمه رخ ميدهد، درواقع روالي است كه برنامهنويس براي رويداد كليك آن دكمه تعريف كرده است. ممكن است با كليك مضاعف روي فرم يك برنامه پنجره Open ظاهر شود (مثل نرمافزار فتوشاپ). همچنين كار كليدهاي ميانبر Ctrl+O و 4Alt+F در رويداد فشار كليد آن برنامه تعريف شده است.
تعداد رويدادها در يك برنامه بسيار زياد است. چيزي كه مهم است آن است كه برنامهنويس بايد حتيالامكان رويدادها را بشناسد به زمان فراخواني هر يك آشنا باشد و هنگام برنامهنويسي نيز به اين نكته توجه داشته باشد. زمان فراخواني يك رويداد و نيز تعداد دفعات فراخواني ممكن است در زمان برنامهنويسي مشخص نباشد و بههنگام اجرا تعيين شود؛ اما اينكه در زمان هر فراخواني چه كاري انجام شود، اين به عهده برنامهنويس است. ضمن اينكه برنامهنويس ميتواند در اكثر موارد پيشبيني كند كه در چه شرايطي يك رويداد رخ ميدهد و اغلب، دفعات تكرار و تاثير هر كدام آنها در روند اجراي برنامه نيز قابل پيشبيني است. حال ببينيم يك رويداد چگونه ميتواند در سرعت اجراي يك برنامه و كارايي آن تاثير بگذارد.
از كار انداختن به موقع رويدادها
روالهاي مربوط به رويدادها روالهايي هستند كه فراخواني آنها بهصورت خودكار انجام ميشود. يعني معمولا برنامهنويس نام روال رويداد را در متن برنامه نميآورد و بهطور مستقيم آن را فراخواني نميكند. (مگر اينكه بخواهد بهطور مجازي فرض را بر اين بگذارد كه اتفاقي افتاده است كه در اين صورت ميتواند بهطور مستقيم آن روال را فراخواني كند)، اما در جايي كه لازم است ميتواند يك رويداد را از كار بيندازد. بهعبارتي ميتواند كاري كند كه هنگام وقوع آن رويداد، روال مربوطه اجرا نشود و در صورت لزوم ميتواند دوباره آن را فعال كند. با ذكر يك مثال بحث را دنبال ميكنيم.
كادرهاي متني از جمله Text box و Memo، رويدادي بهنام Onchange دارند. اين رويداد زماني كه متن داخل اين كادرها تغيير كند، بهطور خودكار فراخواني ميشود. مثلا برنامهنويس ميتواند از اين خاصيت بهگونهاي استفاده كند كه با ورود هر حرف توسط كاربر نزديكترين واژه بهعبارت ورودي او را بهوي پيشنهاد دهد. اين دقيقا كاري است كه در Autocomplete و نيز در وبسايتها انجام ميشود. حال فرض كنيد برنامهاي مثل ويراستار متن نوشتهايد كه ميخواهيد تعداد حروف «a» در متن را نشان دهد. هر بار هم كه كاربر حرفي اضافي و كم كرد، شمارنده مربوطه را نسبت به آن تغيير اضافه و كم كرده و به طور زنده تعداد حروف «a» را در گوشهاي نمايش ميدهيد.
حال اگر بر يك متن بزرگ مثلا صد صفحهاي را باز كرده باشد، با تايپ هر حرف رويداد Onchange بهدليل تغيير متن فراخواني ميشود و اگر در اين رويداد كدي نوشته باشيد كه از ابتدا تا انتها تعداد حروف «a» را بشمارد، آنگاه هر بار كه كاربر حرفي تايپ ميكند يك متن صد صفحهاي از ابتدا تا انتها حرفبهحرف بررسي ميشود. در اين صورت ميتوان تصور كرد كه چه فاجعهاي رخ خواهد داد!براي متنهاي كوتاه اين كار آنقدر سريع انجام ميشود كه كاربر احساس نميكند. اما برنامهنويس بايد اين پيشبيني را بكند كه ممكن است كاربر متن بزرگي را در آن بارگذاري كند. بنابراين بايد به فكر چاره باشد تا به اين ترتيب كارايي برنامه افت پيدا نكند. مثلا ميتواند روال شمارش حروف «a» را از رويداد Onchange برداشته و در رويداد كليك دكمهاي قرار دهد تا كاربر هرگاه خواست كه از اين مساله آگاه شود، روي آن دكمه كليك كند. در اين مورد هميشه كار بهپايين آمدن كارايي ختم نميشود و ممكن است اتفاق بدتري بيفتد.
فرض كنيد ميخواهيد هر بار كه كاربر در متن حرف «a» را وارد كرد شما يك حرف «a» ديگر بهطور خودكار به انتهاي متن اضافه كنيد. (اين كار در اينجا ممكن است بيهوده بهنظر برسد. اما شما فرض را بر اين بگذاريد كه منطقي براي اين كار وجود دارد)رويداد Onchange نميتواند تشخيص دهد كه حرف a وارد شده توسط كاربر يا توسط برنامه. اين رويداد فقط تغيير را تشخيص ميدهد. بنابراين هنگامي كه كاربر يك بار حرف a را وارد ميكند رويداد تغيير، فراخواني شده و يك حرف a ديگر به انتهاي متن اضافه ميكند.
با اضافه شدن اين a متن تغيير كرده و مجددا رويداد تغيير فراخواني ميشود و اين كار تا بينهايت ادامه پيدا ميكند. در واقع برنامه شما يك اشكال جدي دارد كه موجب ميشود برنامه به حالت Not Responding رفته و كاربر مجبور شود برنامه را بهطور غيرطبيعي پايان دهد (End task) و اگر متن كاربر، ذخيره نشده باشد مسلما او از اين اشكال برنامه عصباني خواهد شد!
باز هم برنامهنويس با پيشبيني اين مساله ميتواند راه چاره باشد. يك راه حل آن است كه كاربر در رويداد فشار كليد (OnKeyDown)بررسي كند كه اگر حرف وارد شده a است رويداد تغيير را از كار بيندازد و يك حرف a ديگر اضافه كند و سپس رويداد تغيير را دوباره فعال كند.
حلقهاي از رويدادها
همانطور كه پيش از اين گفتيم، دستوراتي كه داخل حلقههاي تكرار قرار دارند، ميتوانند در سرعت و كارايي برنامه تاثير بگذارند و برنامهنويس بايد تا حد ممكن در بهينهسازي دستورات داخل حلقههاي تكرار بكوشد. يك رويداد ممكن است در طول اجراي برنامه تنها يك بار رخ دهد. مثلا رويداد بسته شدن برنامه تنها يك بار آن هم زمان خروج از برنامه فراخواني ميشود كه ميتوان در آن اعمال بازپسگيري منابع و حتي يك پيام خداحافظي قرار داد، اما رويدادهايي كه ممكن است در طي اجراي برنامه بكرات اجرا شوند حكم حلقههاي تكرار را دارند. با اين كه ممكن است درون روالهاي آنها حلقه تكراري وجود نداشته باشد، اما رخ دادن مداوم آن رويداد در حقيقت دستورات داخل روال مربوطه را مانند حلقه تكرار اجرا ميكند. بنابراين برنامهنويس بايد رويدادهاي تكرارشونده را بشناسد و در نوشتن روالهاي مربوطه دقت كافي را بهخرج دهد و با آنها مانند يك حلقه تكرار برخورد كند.
بهروزرساني گرافيكي
مساله تكرارشونده ديگري كه در برنامهها انجام ميشود و اغلب برنامهنويسهاي آماتور به آن توجه ندارند بهروزرساني گرافيكي محيط برنامه است. برخي از عناصر گرافيكي برنامهنويسي تنها براي آگاه كردن كاربر از اعمال پشت صحنه برنامه است. هر كار گرافيكي نيز بسته به حجم و نوع پردازش زماني از پردازنده را بهخود اختصاص ميدهد. بنابراين اگر عمليات زياد و سريعي در پشت صحنه در حال انجام است كه ميخواهيد كاربر را از نتايج آن آگاه كنيد، سعي كنيد در فاصلههاي مشخص و منطقي بهروزرساني گرافيكي را انجام دهيد. بهعنوان يك مثال ساده، اگر برنامه در حال كپي يك فايل از جايي به جاي ديگر است، لازم نيست روند پيشرفت كار را بعد از كپي شدن هر بايت به اطلاع كاربر رساند.
اين كار شايد بهمراتب از خود عمل كپي كردن زمانگيرتر باشد. ميتوان بعد از كپي شدن هر كيلوبايت يا هر مگابايت اين مساله را به كاربر اعلام كرد يا اين كه روند پيشروي را با نسبت درصد به آگاهي مخاطب رسانيد. با تعميم اين مثالهاي ساده و بديهي، ميتوان به مواردي پي برد كه درعمل كارايي برنامه را به سادگي به چند برابر افزايش خواهند داد.
پارسا ستودهنيا
منبع:هفته نامه کلیک-روزنامه جام جم
Ali_Sam
یک شنبه 20 بهمن 1387, 16:04 عصر
كنترل سرعت دردستان شما-قسمت دوم
در صحبتهاي قبل به سرعت برنامهها و نقش برنامهنويس در آن اشاره كرديم و گفتيم يكي از مهمترين عوامل در بهسازي سرعت برنامه، كاهش دستورات تكرار شونده است. درون رايانه هر كاري كه قرار است انجام شود نياز به زمان دارد. يك دستور if ساده حتي اگر شرط آن برقرار نباشد و كنترل برنامه به داخل بلاك if وارد نشود باز هم اگر اين كار به تعداد زياد انجام شود زمانگير خواهد بود. حال ميخواهيم ببينيم چه عوامل و نكات ديگري در سرعت برنامه موثر خواهد بود.
الگوريتم مناسب
شايد بتوان گفت مهمترين و تاثيرگذارترين مساله در تعيين كارايي و سرعت يك برنامه، الگوريتم يا روش مورد استفاده در آن برنامه است. از ابتداي به وجود آمدن رايانه، برنامهنويسان و متخصصان درصدد طراحي الگوريتمي بودهاند كه بتواند با صرف كمترين زمان، هزينه و انرژي آنها را به هدف برساند.
ممكن است شخصي الگوريتمي طراحي كند كه عمل بخصوصي را در مدت زمان مشخصي انجام دهد و شخص ديگري روشيارائه دهد كه بتواند همان كار را در زمان كمتري انجام دهد. مسلما برنامهاي با ارزشتر است كه بتواند كاري را در كمترين زمان ممكن انجام دهد.
بهعنوان يك نمونه ساده فرض كنيد برنامهاي قرار است يك سري داده را از ورودي بهطور تصادفي دريافت كرده و آنها را مرتب كرده و به خروجي تحويل دهد. تاكنون روشهاي زيادي براي اين كار مطرح شده است كه هر يك به طريقي عمل مرتبسازي را انجام ميدهد. هر كدام از آنها نيز نسبت به ديگري معايب و مزايايي دارد كه آن روش را نسبت به بقيه متفاوت ميسازد. يك برنامهنويس با توجه به نيازهاي خود و شرايط موجود بايد سعي كند بهترين روش را انتخاب كند و در صورتي كه هيچيك از روشهاي موجود پاسخگوي نياز وي نبود خود اقدام به طراحي الگوريتمي كند كه بتواند به نيازها پاسخ دهد.
هميشه يك الگوريتم نامناسب تنها موجب كندي اجرا نخواهد شد. گاهي اگر يك الگوريتم زمان معقولي براي پاسخدهي نداشته باشد، استفاده از آن عملا غيرممكن خواهد بود. به عنوان يك مثال ساده، مسالهاي به نام فروشنده دورهگرد (TSP) در علوم رايانه مطرح است كه حل آن به روش معمول در مواردي ممكن است به هزار سال زمان نياز داشته باشد!
اين بدان معني است كه اين روش عملا قابل اجرا نيست. همين مساله با همان ابعاد با يك روش ديگر ميتواند در 5 دقيقه حل شود. ضمن اين كه روش جديد نيز كه ميتواند آن مساله را 5 دقيقهاي حل كند اگر ابعاد مساله را بزرگتر كنيم آن هم ممكن است براي پاسخ دهي به سالها زمان نياز داشته باشد. بنابر اين جدا از سرعت رايانه، به كارگيري يك الگوريتم مناسب در سرعت اجراي برنامهها تاثير مستقيم خواهد داشت.
استفاده مناسب از حافظهاصلي و فايل
همان طور كه ميدانيد سرعت عمل حافظه اصلي در مقايسه با حافظه جانبي بسيار بيشتر است. اما ظرفيت حافظه اصلي محدود بوده و قيمت آن نيز نسبت به ديسك سختگرانتر است. در نوشتن برنامهها، برنامهنويس بايد به اين مساله توجه كافي داشته باشد كه برنامه نوشته شده بايد حتيالامكان ميزان كمتري حافظه اصلي را اشغال كند.
يكي از معيارهاي مهم در سنجش يك برنامه در كنار سرعت اجراي آن، ميزان حافظه مصرفي آن است. اما استفاده صحيح و مناسب از آن باعث بهبود كارايي و افزايش سرعت برنامه خواهد شد. دادههايي كه مقيم حافظه شدهاند و روالها و توابع برنامه به طور مستقيم از حافظه اصلي به آنها دسترسي دارند با حداكثر سرعت پردازش خواهند شد. بنابراين اگر قرار است روي دادههايي كه قرار است كار زيادي با آنها داريم و درون فايل قرار دارند پردازشي كنيم، در صورتي كه حجم آنها زياد نيست بهتر است كه فضايي را در حافظه اصلي براي آنها در نظر گرفته و آنها را به طريقي در آنجا مقيم كنيم و پس از اتمام پردازش روي آنها، نتيجه را در فايل بازنويسي كنيم. البته اغلب امكان پردازش مستقيم دادهها از روي فايل نيز وجود دارد كه در صورت استفاده از اين امكان حجم كمتري از حافظه اصلي اشغال خواهد شد. اما عمليات ورودي™خروجي (I/O) يعني خواندن و نوشتن مكرر از/ روي فايل زمان زيادي را از برنامه خواهد گرفت و ممكن است كارايي آن را بشدت كاهش دهد. هيچ قانوني براي استفاده از حافظه اصلي به جاي فايل يا بالعكس براي برنامهنويسان وجود ندارد كه بخواهند طبق آن عمل كنند. هر برنامهنويس با توجه به دانش و تجربه نسبي كه دارد بايد مناسبترين روش را براي بهبود بازده برنامه خود اتخاذ كند.
افزايش كارايي در ورودي/خروجي
مسلم است كه اگر برنامه با حافظه اصلي كار ميكند بيشترين سرعت ممكن را خواهد داشت. اما زماني كه تصميم براين شد كه پردازش دادهها به طور مستقيم از روي فايل انجام شود، در به كارگيري آن روش نيز بايد توجه لازم صورت گيرد. فرض كنيد يك فايل حجيم صد مگابايتي داريم كه قرار است روي تكتك بايتهاي آن پردازشي صورت گيرد و مجددا در فايل نوشته شود. مسلما مقيم كردن صدمگابايت داده در حافظه منطقي نخواهد بود و روش پردازش فايل انتخاب خواهد شد. حال اولين چيزي كه به نظر ميرسد آن است كه دادهها را بايت به بايت از فايل خوانده و پس از پردازش مجددا به فايل برگردانيم.
تجربه نشان داده است كه اين كار، حتي اگر تنها خواندن و نوشتن باشد و هيچ پردازش زمانگيري روي داده انجام نشود، باز هم كارايي و سرعت عمل برنامه بشدت كم خواهد بود. عمليات ورودي– خروجي نسبت به كارهاي داخل CPU و حافظه اصلي از جمله كارهاي زمانگير به حساب ميآيد. حال اگر اين كار با فايلي با حجم گفته شده بخواهد به تعداد بايتهاي فايل انجام گيرد، افت شديد كارايي برنامه چيز عجيبي نخواهد بود. بنابر اين بهتر است با هر بار عمليات ورودي / خروجي و پس از مراجعه به ديسك، حجم بيشتري از فايل را فراخواني كنيم و پس از مقيم كردن آن مقدار در حافظه، باقي كار را با سرعت حافظه اصلي انجام دهيم. حال اين سوال مطرح ميشود كه پس از هربار مراجعه به ديسك چه مقدار از داده را به حافظه منتقل كنيم.
ممكن است براي اجراي يك برنامه آنقدر حافظه اصلي دراختيار داشته باشيم كه برنامهنويس تصميم بگيرد پس از هر مراجعه به ديسك مثلا يك مگابايت از دادهها را به حافظه منتقل كند.
اين كار دو اشكال ميتواند داشته باشد. اول اين كه اين برنامه نظر ميزان از حافظه مصرفي، بهينه نخواهد بود و اگر قرار باشد برنامه در رايانهاي با حافظه كمتر اجرا شود، امكان مواجه شدن با كمبود حافظه و افت كارايي در آن وجود خواهد داشت. از طرف ديگر اگر نرمافزار ما يك برنامه محاورهاي باشد، كاربر در هنگام خوانده شدن هر يك مگابايت بايد مدتي صبر كند تا بتواند با ساير بخشهاي برنامه كار كند كه اين مساله نيز يك ضعف براي نرمافزار به شمار ميرود.
شايد بهترين حالت اين باشد كه پس از هر بار مراجعه به ديسك به ميزان يك سكتور يا يك بلاك ديسك داده فراخواني شود. يك بلاك ديسك معمولا 4 يا 16 كيلوبايت است كه البته كار برهنگام فرمت كردن ديسك ميتواند اين مقدار را تعيين كند. اما به طور عام اين مقدار در نظر گرفته ميشود. فراخواني يك بلاك داده در هر بار عمليات I/O چند مزيت دارد. يكي آن كه كمترين ميزان حافظه براي بالا بردن كارايي برنامه مصرف ميشود. از اين مقداركمتر حجم عمليات I/O اضافه ميشود و از اين بيشتر ممكن است بدون افزايش محسوس كارايي تنها حافظه بيشتري مصرف شود.
مزيت ديگر آن است كه هنگام فراخواني يك بلاك از ديسك، تضمين ميشود كه هر ديسك وقتي به محل مورد نظر رسيد براي خواندن مقدار مورد نظر ديگر لازم نيست حركت كند. چون يك بلاك داده در ديسك به صورت پشت سر هم نوشته ميشود.
با توجه به اين كه زمانگيرترين عمل در يك ديسك سخت، حركت هد آن است، كارايي بهينه خواهد بود و البته باز هم نسبت به شرايط و محيط اجرا ميتوان تدابير ديگري انديشيد كه اين برعهده طراح نرمافزار و مخصوصا برنامهنويس خواهد بود.
منبع:هفته نامه کلیک-روزنامه جام جم
Ali_Sam
یک شنبه 20 بهمن 1387, 16:09 عصر
زبان برنامه نويسي Groovy
در اين مقاله به معرفي زباني ميپردازيم كه براي بسياري از برنامهنويسان ناآشناست. اين زبان كه Groovy نام دارد، نخست سال 2003 معرفي شد. گرووي، يك زبان شييگرا است كه براي پلتفرم جاوا نوشته شده و از آن بهعنوان جايگزيني براي زبان برنامهنويسي جاوا استفاده ميشود. گرووي زباني ديناميك و پويا است و ويژگيهايي مشابه پايتون، روبي، پرل و Smalltalk دارد. از اين زبان همچنين ميتوان به عنوان يك زبان اسكريپت نويسي براي پلتفرم جاوا استفاده كرد.
دستور زبان گرووي مشابه جاوا است و كدها درون كروشه قرار ميگيرند. اين كدها به صورت بايتكد كامپايل ميشوند و سپس توسط ماشين مجازي جاوا اجرا ميشوند. كدهاي گرووي ميتوانند به سادگي با ديگر كدهاي جاوا و همچنين با كتابخانههاي جاوا كار كنند. از ديگر ويژگيهاي كامپايلر گرووي اين است كه ميتواند بايتكدهاي استاندارد جاوا توليد كند. به اين ترتيب كدهاي گرووي را ميتوان در هر پروژه جاوا مورد استفاده قرار داد. بيشتر كدهاي جاوا در كامپايلر گرووي شناخته ميشوند. به اين ترتيب انتقال كد بين دو زبان بسيار ساده است.
ويژگيها
گرووي داراي ويژگيهايي است كه در جاواي استاندارد يافت نميشود. از جمله اين ويژگيها ميتوان به نوع داده هاي ديناميك و تغيير كاربري اپراتورها اشاره كرد. دستور زبان گرووي در مقايسه با جاوا فشردهتر و كوچكتر است. از ويژگيهاي بارز و قابل توجه گرووي پشتيباني آن از زبانهاي مختلف Markup مانند XML و HTML است. اين قابليت امكان تعريف و كار با انواع مختلفي از دادههاي ناهمگون را با دستور زبان دقيق و روش برنامهسازي هم شكل فراهم ميكند. كد گرووي باز است و تقريبا تمام IDE هاي كد جاوا از كد گرووي نيز پشتيباني ميكنند و اين امر برنامهنويسي با گرووي را آسان ميكند.
تاريخچه
جيمز استراكان در آگوست سال 2003 براي اولين بار در وبلاگ خود در مورد توسعه زبان جديدي به نام گرووي نوشت. پس از آنكه فرآيند استانداردسازي پايان يافت، ژانويه سال 2007 نسخه استاندارد گرووي با عنوان 1.0 Groovy منتشر شد. به فاصله زماني اندكي پس از نسخه 1.0، نسخه 1.1 در ماه دسامبر 2007 منتشر شد. اين نسخه بلافاصله به نام 1.5 Groovy نامگذاري شد تا تغييرات مهم و بزرگ ايجاد شده را به وسيله اين تغيير نام منعكس كند.
اهداف
هدف از طراحي زبان گرووي استانداردسازي يك زبان برنامهنويسي براي پلتفرم جاوا بود. زباني كه بتواند پا به پاي جاوا حركت كند. در حقيقت گرووي زباني سريع و پويا مانند پايتون، پرل و روبي است. تفاوت گرووي با اين زبانها اين است كه گرووي براي پلتفرم جاوا طراحي شده است و قابليت برهمكنش با برنامههاي جاواي كنوني را دارد.
گرووي جايگزيني براي جاوا نيست، بلكه مكمل آن است. هدف اصلي از ايجاد اين مكمل، برطرف كردن اشكالات و پر كردن خلاهايي است كه اكنون برنامه نويسان و توسعهدهندگان حرفهاي كد آنها را حس ميكنند و خواهان روشي براي برطرف شدن آنها هستند، در حاليكه در پلتفرم كنوني جاوا اين مسايل ناديده گرفته شدهاند.
جاوا يا گرووي؟
تاكنون، زبان برنامهنويسي جاوا جايگاه خود را به عنوان زبان برنامهنويسي استاندارد پلتفرم جاوا، بدست آورده است. اين زبان به مدت تقريبا نه سال، نيازهاي برنامهنويسان را به بهترين شكل ممكن برطرف كرده است، اما جاوا نميتواند و نبايد تمام نيازهاي همه گروههاي برنامهنويسان را كه پروژهها و اهداف متفاوتي را دنبال ميكنند برآورده سازد. چرا كه زباني با اين مشخصات بخش بزرگي از قابليتهاي خود را به نفع پاسخگويي به همه كاربران از دست ميدهد و تضعيف ميشود. زبان جاوا مانند زبانهاي C++ و C#، به شدت ساخت يافته است. اين نوع زبانها كه گاه زبانهاي قراردادي ناميده ميشوند، براي حل بسياري از مسايل مناسب هستند اما پاسخگوي همه مشكلات نيستند. زبانهاي قراردادي بسيار نكتهسنج و خردهگير هستند به اين معني كه كوچكترين اشكال در نوشتن برنامه، كامپايل كردن كد را ناممكن ميسازد. اگرچه اين دقت بيش از حد، نتيجه اجراي كد را قابل پيشبيني ميسازد، اما از سوي ديگر از سرعت كار برنامهنويس ميكاهد.
در موارد متعددي لزوم وجود جايگزيني براي زبانهاي برنامهنويسي قراردادي احساس ميشود. يك جايگزين مناسب، استفاده از زبانهاي سريع مانند پايتون، روبي و پرل است. اين زبانهاي سريع، اغلب زبانهاي اسكريپتنويسي ناميده ميشوند اما اين عبارت، اين زبانها را به درستي توصيف نميكند. در دنياي فناوري اطلاعات، بسياري از افراد زبانهاي اسكريپت نويسي را به عنوان زبانهايي ميشناسند كه پيچيدگيهاي فني را قرباني سهولت كار با زبان ميكنند. اين تعريف اگرچه در مورد برخي از زبانهاي اسكريپتنويسي صحيح است، اما شامل پايتون، روبي و پرل نميشود. اينها، زبانهاي پويا و قدرتمندي هستند كه با استفاده از حجم كمتري از كد و دستور زبان، تعداد بيشتري از وظايف را انجام ميدهند. اكنون زمان آن رسيده است كه پلتفرم جاوا يك زبان سريع را براي پيشبرد اهداف خود به كار گيرد. گرووي اكنون زمينه لازم براي اين كار را دارد. گرووي نشاندهنده يك دوران جديد براي پلتفرم جاوا است. دوراني كه در آن جامعه برنامه نويسان جاوا از گوناگوني و تنوع ايجاد شده بهره فراواني خواهند برد و قادر به استفاده از تمام پتانسيلهاي پلتفرم جاوا هستند. تشخيص هوشمندانه اين مساله كه جاوا چيزي بيش از يك زبان برنامهنويسي است و درك اين نكته كه پلتفرم جاوا قدرت كافي براي اينكه چند زبان همزمان روي آن كار كنند و به حيات خود ادامه دهند را دارد از عوامل مهم در موفقيت طرح ايجاد زبان گرووي هستند.
زبان جاوا با ايجاد بايتكد، راهي ساده و آسان براي ارتباط با زبان واقعي پلتفرم جاوا پديد آورده است. گرچه بايتكدها كار برنامهنويس را آسان ميكنند، اما در مواردي يك زبان برنامهنويسي سريع، مولدتر است و در مقايسه با بايتكد از قدرت بيان بالاتري برخوردار است.
اما چرا گرووي؟ چرا Jython و JRuby براي دستيابي به اين هدف مورد استفاده قرار نگرفتند؟ امروزه زبانهاي متعددي براي اجرا روي ماشين مجازي جاوا طراحي شدهاند. گرووي به اين دليل بهترين انتخاب است كه از پايه و اساس براي پلتفرم جاوا طراحي شده است. از سوي ديگر، دستور زبان آن براي توسعهدهندگان برنامههاي جاوا آشنا است. گرووي برخي از بهترين ويژگيهاي پايتون، روبي و اسمالتاك را پيادهسازي ميكند. جايتون و جيروبي نمونههاي بسيار درخشاني از پشتيباني پلتفرم جاوا از ديگر زبانهاي برنامهنويسي موجود هستند. با اين وجود جايتون و جيروبي تنها درگاه Port))هايي هستند كه ارتباط جاوا را با زبانهاي ديگر ممكن ميسازند. دستور زبان اين درگاهها براي طراحان جاوا ايجاد نشده است و حتي مجموعه كتابخانههاي استفاده شده براي پيادهسازي آنها با آنچه كه براي برنامهنويسي جاوا استفاده ميشود متفاوت است. در مقابل گرووي براي توسعهدهندگان جاوا طراحي شده است و پايه و اساس آن بر مبناي APIهاي استاندارد پلتفرم جاوا استوار است.
در بيشتر موارد گرووي به عنوان جايگزيني براي جاوا مد نظر قرار نميگيرد. بلكه به عنوان بخشي از جاوا مورد توجه است. بسياري از كاربران گرووي تمام برنامه خود را با استفاده از اين زبان پيادهسازي ميكنند. زمان توسعه كد كوتاهتر و كد حاصل به مراتب فشردهتر، خلاصهتر است. بنابراين درك كد نوشته توسط اين زبان بسيار ساده است. در اكثر موارد كارآيي كد نوشته شده رضايت بخش است، به ويژه اگر در نوشتن آن از كتابخانههاي جاوا استفاده شده باشد. در مواردي كه كارآيي كد پايينتر از حد مطلوب باشد، يافتن نقاط مشكلساز در كد بسيار ساده است. پس از يافتن اين بخشها ميتوان كد آنها را به كد جاوا تبديل كرد. به عنوان مثال اگر در يكي از اشياي گرووي متدي داشته باشيم كه اجراي آن نيازمند زمان زيادي باشد، اين كلاس را با يك كلاس جاوا جايگزين ميكنيم و متد مورد نظر را با جاوا پيادهسازي ميكنيم. اين خواص پويا و ديناميك در زبان گرووي قدرت مانور بسيار زيادي به برنامهنويس ميدهد.
بسياري از برنامهنويساني كه كار با هر دو زبان را تجربه كردهاند، نه تنها سرعت كدنويسي با گرووي را بيشتر از سرعت كدنويسي با جاوا ميدانند بلكه حتي ادعا ميكنند كه نوشتن كد با گرووي و سپس تبديل آن به كد جاوا سريعتر از نوشتن كد جاوا از ابتدا است. با اين همه بايد در نظر داشت كه گرووي يك دكمه نقرهاي رنگ جادويي نيست و مانند هر زبان ديگري محدوديتهاي خاص خود را دارد. برنامهنويسان گرووي را به خاطر طبيعت پوياي آن دوست دارند. مهمترين عامل جذابيت گرووي براي برنامهنويسان امكان انتقال و سادگي جابجايي بين گرووي و جاوا در مواقع لزوم است. وجود مجموعه بزرگي از كتابخانههاي جاوا از عواملي است كه بر جاذبه گرووي ميافزايد.
منبع:هفته نامه کلیک-روزنامه جام جم
Ali_Sam
یک شنبه 20 بهمن 1387, 16:15 عصر
كنترل سرعت در دستان شما-قسمت اول
پيش از اين، بههنگام بررسي زبانهاي برنامهسازي و ذكر ويژگيهاي آنها، در جايي نيز از سرعت اجراي برنامهها در زبانهاي مختلف صحبت كرديم. بهعنوان مثال گفتيم كه زباني مثل اسمبلي با وجود پيچيده بودن و سطح پايين بودن، برنامههاي نوشته شده با آن بيشترين سرعت را در مقايسه با برنامه معادل آن كه با زبان ديگر نوشته شده است دارد. از زبانهاي سطح بالا، زبانهاي كامپايلري را زبانهاي سريع و زبانهاي مفسري و زبانهايي را كه با كدمياني كار ميكنند، زبانهاي بهنسبت كندتري را معرفي كرديم.
براي مثال، برنامههاي نوشته شده با ++C سرعت خيلي خوبي دارند و در مقابل برنامههاي نوشته شده بهزبان جاوا يا زبانهاي تحت net. همچون C# چون با كدهاي مياني كار ميكنند، نسبت به ++C كندتر هستند. مستقل از نوع زبان، قصد داريم به عواملي كه برنامهنويس براي بهبود سرعت برنامهخود بايد رعايت كند بپردازيم و برخي از اين نكات را به برنامهنويسان يادآور شويم. البته اين نكات به همين تعداد خلاصه نميشود و عوامل بسيار ديگري نيز در سرعت برنامه موثرند كه برنامهنويس بهمرور زمان به تجربه آنها را درخواهد يافت.
استفاده از دستورات كمتر
اولين چيزي كه براي بهبود سرعت يك برنامه به ذهن هر كس ميرسد، استفاده از تعداد دستورات كمتر است. مسلما هر دستور براي اجرا، زماني از وقت سيستم را بهخود اختصاص ميدهد. هر چه تعداد دستورات كمتر باشد، به همان نسبت از زمان اجراي دستورات كاسته شده و سرعت نرمافزار زياد خواهد شد. البته در زمان كاهش دستورات، بايد به اين نكته توجه داشت كه گاهي كاستن از دستورات، خوانايي برنامه را پايين ميآورد و درك كد را مشكلتر ميسازد.
با سرعت رايانههاي امروزي، وجود 10 يا 100 دستور اضافه يا كمتر كه قرار است تنها يك بار اجرا شوند، بهواقع تاثير محسوسي در سرعت برنامه نخواهد داشت. اما اين نكته بايد در ذهن باشد كه هر دستور زماني از وقت پردازنده را خواهد گرفت. اما چه زماني بايد در بهكاربردن دستورات اضافه خودداري كنيم و چه زماني بايد عمدا آن را بهكار ببريم و از وجود آنها چشمپوشي كنيم؟
كاهش دستورات زمانگير
همانطور كه گفتيم، دستوراتي كه قرار است در طول بهكارگيري برنامه يك بار يا تعداد كمي اجرا شوند، تاثير چنداني در سرعت برنامه نخواهند گذاشت. آن دستوراتي در سرعت اجراي كل تاثير دارند كه يا خود دستورات زمانگيري باشند و يا قرار است به دفعات زيادي اجرا شوند.
فرض كنيد يك دستور انتساب 0= a در ابتداي يك برنامه وجود دارد كه قرار است تنها يك بار اجرا شود. يا حلقهاي وجود دارد كه يك آرايه 20تايي از اعداد صحيح را مقدار دهي اوليه ميكند و آن نيز يك بار اجرا ميشود. البته منظور از اجراي يك بار، دقيقا يك بار نيست. ممكن است چندين بار نيز اجرا شود. اما چون به فواصل زياد و بهتعداد كم و محدود اجرا ميشود، از آن صرفنظر ميشود. در صورتي كه دستوري چنين خاصيتي داشته باشد، وجود آن به برنامه صدمهاي نخواهد زد. البته اگر واقعا زايد باشد، بهتر است كه حذف شود. اما اگر بيتاثير است و به خوانايي كد و درك بهتر برنامه كمك ميكند، بهتر است بهحال خود رها شود و هيچ نگران كند شدن برنامه نيز نباشيم.
اما يك دستور ممكن است خود ذاتا زمانگير باشد. مثلا دستور (20)a = Hanoi قرار است مساله برج هانوي را براي 20 ديسك حل كند و در پايان، در صورت موفقيت، مقدار true و در صورت عدم موفقيت مقدار false را در a قرار دهد. البته اين دستور كمي اغراقآميز است و ممكن است بهواقع دستوري به اين زمانگيري در برنامههاي معمول كمتر رخ دهد. اما قصد ما اين است كه بگوييم يك دستور ممكن است يك انتساب ساده با زمان در حد ميكروثانيه يا نانوثانيه باشد و دستور ديگر كه خود موجب فراخواني يك تابع ميشود، ممكن است دقيقهها يا ساعتها بهطول بيانجامد (مساله برج هانوي مسالهاي است كه تعدادي ديسك به ترتيب كوچك به بزرگ قرار است با كمك يك ميله، از ميلهاي به ميلهاي ديگر انتقال يابد بدون آن كه در طول زمان بازي، ديسك بزرگ روي ديسك كوچك قرار گيرد. اين مساله كه به 1 - 2nحركت براي جابهجا كردن n ديسك نياز دارد، از مسائل قديمي و معروف است و با افزايش تعداد ديسكها به ميزان چشمگيري افزايش زمان خواهيم داشت) تشخيص اين كه يك دستور چقدر زمانگير است و آيا بهتر است وجود داشته باشد يا حذف شود، بهعهده برنامهنويس خواهد بود.
كاهش دستورات تكرار شونده
يك دستور، هر قدر هم كه ساده و كوچك باشد و سرعت اجراي آن بسيار زياد باشد، زماني كه به دفعات بسيار تكرار شود، سرعت برنامه را كم ميكند. بنابر اين بايد دقت شود كه تا حد امكان در بهكار بردن دستورات تكرار شونده صرفهجويي كنيم. معمولترين حالت تكرار دستورها چرخههاي تكرار است. اما چرخههاي تكرار تنها حالت براي تكرار دستورها نيست. بهعبارت ديگر، اگر در چرخههاي تكرار دقت كنيم، ميبينيم كه نميتوان مطمئن بود كه ديگر دستورات تكرار شوندهاي وجود ندارد. با ذكر يك مثال، حالت ديگري از دستورات تكرار شونده را بيان خواهيم كرد:
در زبانهاي برنامهنويسي چند نوع چرخه تكرار وجود دارد. از جمله ميتوان به for، while و repeat اشاره كرد. هر كدام از اين چرخهها به تعداد معين و يا تا برقراري شرط خاصي، دستورات داخل خود را تكرار ميكنند. حال اگر دستور اضافهاي در مجموعه دستورات داخل چرخه وجود داشته باشد، آن هم بههمان تعداد تكرار خواهد شد. حذف دستورات اضافه و يا جايگزين كردن چند دستور با تعداد دستورات كمتر و سريعتر داخل چرخهها ميتواند بهنحوي چشمگير در سرعت اجراي برنامه تاثير بگذارد. البته اين كار بايد تا حدي انجام شود كه از قابليت برنامه كم نشده و در كار كرد آن تاثير نداشته باشد و همچنين آن را از حالت استانارد و قانونمندي خارج نكند.
در صورتي كه تصميم گرفتيد دستوري را از داخل يك چرخه تكرار حذف كنيد، اما ميدانيد كه آن دستور ميتواند به خوانايي برنامه كمك كند، ميتوانيد طبق قوانين نحوي زبان با تبديل آن دستور به توضيحات يا كامنت (Comment)از كامپايل شدن آن دستور جلوگيري كنيد و كاري كنيد كه كامپايلر با رسيدن به دستور مورد نظر، آن را ناديده بگيرد. با اين كار هم از خوانايي برنامه كم نميشود و هم يك دستور از دستورات برنامه كم شده است.
البته توجه داشته باشيد كه اگر خواستيد يك دستور غلط را حذف كنيد، آن را نبايد كامنت كنيد. زيرا در دفعات بعد ممكن است شما را به اشتباه بيندازد. در اين حالت بهتر است بهطور كامل آن دستور را پاك كنيد. تبديل كردن به كامنت تنها زماني توصيه ميشود كه اگر دستور را از حالت كامنت خارج كرديد، تغييري در منطق و كاركرد برنامه صورت نگيرد.
تكرار در رويدادها
رويدادها يا Events حالت ديگري از تكرار دستورات را موجب ميشود كه اين بار به تعداد خاص يا برقراري شرط صورت نميگيرد. بلكه يك رويداد زماني فراخواني ميشود كه اتفاق خاصي در برنامه بيفتد. مثلا كليك كردن روي يك عنصر رويداد كليك آن عنصر را فراخواني ميكند يا بيكار شدن برنامه، رويداد idle يا بيكاري برنامه را فراخواني ميكند. رويدادهاي مختلفي در يك برنامه براي اجزاي گوناگون تعريف ميشوند كه هر يك از آنها با اختيار يا بدون اختيار كاربر ميتوانند فراخواني شوند. بنابر اين گاهي ممكن است يك رويداد بدون خواست كاربر بهدفعات زيادي فراخواني شود و در صورتي كه دستورات مربوط به آن زمانگير باشند، ميتواند باعث كندي برنامه و كاهش كارايي آن شوند. بنابر اين براي بهبود كاركرد يك برنامه بايد به رويدادهاي آن نيز توجه كافي داشت.
در آينده سعي خواهيم كرد به مسائل ديگري كه سرعت يك برنامه را تحت تاثير قرار ميدهند، بپردازيم.
منبع:هفته نامه کلیک-روزنامه جام جم
Ali_Sam
یک شنبه 20 بهمن 1387, 16:22 عصر
خلق برنامههاي كاربردي استثنايي با JavaFX Script
يكي از جديدترين اعضاي خانواده زبانهاي برنامهنويسي است كه روي پلتفرم جاوا و تنها با نصب (Java SE) 6 Standard Edition اجرا ميشود. جاواFX اسكريپت، يك زبان بسيار ديناميك و قابل حمل است كه از قدرت و توانايي لازم براي ايجاد واسط گرافيكي كاربر با هر اندازه و هر درجه از پيچيدگي برخوردار است. واسطهاي گرافيكي ايجاد شده توسط جاواFX اسكريپت شبيه واسطهايي هستند كه با Swing نوشته شدهاند، با اين تفاوت كه كد نوشته شده كوچكتر و سادهتر است. هرچند دستور زبان جاواFX اسكريپت با دستور زبان جاوا متفاوت است، بخش بزرگي از فناوري كه اين دو زبان بر پايه آنها بنا شدهاند يكسان است.
تاريخچه
جاوا FX اسكريپت (بخش اسكريپتنويسي جاواFX)، زندگي خود را بهعنوان پروژهاي بهنام 3F كه توسط كريس اوليور انجام ميشد آغاز كرد. پيدايش جاواFX در ماه مي سال 2007 براي اولين بار اعلام شد. در ماه مي سال 2008 شركت Sun اعلام كرد كه نسخه روميزي و نسخه طراحي شده براي جستجوگرها تا پاييز سال 2008 منتشر ميشوند و JavaFX Mobile نيز در بهار سال 2009 در دسترس كاربران قرار خواهد گرفت. از ماه جولاي سال 2008 توسعهدهندگان كد ميتوانستند يك پيش نمايش از JavaFX SDK را براي ويندوز و مكينتاش بارگذاري كنند. هنوز اطلاع رسمي دقيقي در مورد زمان پشتيباني جاواFX از لينوكس وجود ندارد. با اينحال هم اكنون بيشترسرويسهاي جاواFX روي لينوكس اجرا ميشوند.
ويژگيها
جاوا FX اسكريپت مجموعهاي از محصولات نرمافزاري است كه براي ايجاد آنچه كه برنامههاي كاربردي اينترنتي غني1 و به اختصار RIA ناميده ميشوند پديد آمد. علاوه بر RIA اين زبان براي توسعه برنامههاي كاربردي تحت وب كه ويژگيها و كاربرد برنامههاي كاربردي روميزي سنتي را داشته باشند، مورد استفاده قرار ميگيرد. از ميان اين برنامهها ميتوان به برنامههاي كاربردي چندرسانهاي اشاره كرد. محصولات جاواFX ميتوانند برنامههاي كاربردي براي رايانههاي روميزي، موبايل، تلويزيون و ديگر پلتفرمها ايجاد كنند.
بخش اصلي و اوليه جاواFX، جاواFX اسكريپت ناميده ميشود كه يك زبان توصيفي است و بهمنظور سادهتر كردن استفاده از سويينگ براي آن دسته از برنامهنويسان واسط كاربر يا طراحان برنامههاي ويژوال كه با زبانهاي اسكريپتنويسي آشنايي دارند ايجاد شد. در جاواFX اسكريپت، ساختمان كد برنامهنويسي به نحوي طراحي شده است كه با ساختار واسط گرافيكي كاربر سازگاري بالايي داشته باشد.
از ديگر بخشهاي جاواFX، ميتوان به جاواFX موبايل اشاره كرد. جاواFX موبايل يك سيستم عامل براي تلفنهاي همراه است. تلفنهاي هوشمند2 و PDAها از مهمترين ابزارهايي هستند كه در اين طرح مورد نظر قرار گرفتهاند.
جاواFX موبايل كه روي يك هسته لينوكس اجرا ميشود، Java SE و Java ME را پياده سازي ميكند. جيمز گاسلينگ، از پيشگامان جاوا ميگويد: "در بخشهايي از جهان، تلفن همراه يك كاربر، نقش رايانه شخصي روميزي او را ايفا ميكند.
اين گروه از كاربران هدف اصلي ما در اين طرح هستند." هريك از ما ميتوانيم يكي از اعضاي اين گروه باشيم. زماني كه سفر ميكنيم، تلفن همراه ما در صورت برخورداري از امكانات كافي، جانشين مناسبي براي رايانه شخصي و لپتاپ خواهد بود.
وي در مورد چگونگي پيدايش ايده اصلي اين پروژه ميگويد: "اكثر زبانهاي اسكريپتنويسي موجود، در جهت رفع نيازهاي صفحات وب كار ميكنند. هدف ما طراحي زباني بود كه بيشتر در خدمت واسطهاي گرافيكي كاربر باشد و نيازهاي واسطهايي را كه از حجم زيادي پويانمايي برخوردارند برطرف كند."
شواهد موجود حاكي از اين هستند كه جاواFX از رقباي اصلي Flash Player، AIR و Silverlight مايكروسافت خواهد بود.
مقايسه جاوا FX اسكريپت و زبانهاي مشابه
تمركز شركت سان روي جاوا FX اسكريپت منجر به كند شدن پيشرفت در زمينه بهبود و توسعه سويينگ و قدرت توليد كد توسط آن شده است. اكنون اين سوال ذهن بسياري از برنامهنويسان را به خود مشغول كرده است: آيا تمركز روي جاواFX به مرور منجر به نابودي و محو تدريجي سويينگ خواهد شد؟
هرچند جاواFX با كد جاوا بهخوبي كار ميكند، سازگاري آن با سويينگ چندان زياد نيست. در حقيقت برنامهنويساني كه تجربه كار با سويينگ را دارند، لازم است يك مدل جديد برنامهنويسي، API و حتي كار با ابزارهاي جديدي را فراگيرند تا بتوانند پروژههاي مشابهي را با جاوا FX اسكريپت پيادهسازي كنند. از طرف ديگر، برخي از اجزاي موجود در سويينگ مانند JTable در محيط جاوا FX اسكريپت كار نميكنند و كدنويسي براي آنها بايد مجددا انجام شود. به عبارت ديگر، اگرچه سويينگ و جاوا FX اسكريپت ميتوانند با هم كار كنند، دو فناوري كاملا مجزا براي توسعه واسط كاربر3 هستند.
عمر سويينگ تقريبا به يك دهه ميرسد و در زماني كه بسياري از فناوريهاي ديگر با مشكلات متعددي دست به گريبان بودند سويينگ انتخابي عالي و درخشان بود. در مقايسه با AJAX، كار با اجزاي سويينگ سادهتر و عملكرد آنها به ويژه وقتي حجم دادههاي حاضر در پروژه زياد است، به مراتب بهتر است.
اما در سالهاي اخير، با پيدايش جعبه ابزارهاي جديد و متنوعي مانند Flex كه توسعه واسطهاي گرافيكي كاربر را آسان ميسازند، قدمت سويينگ بيشتر به چشم ميآيد و به نظر ميرسد كه سويينگ كمكم جاي خود را به اعضاي جديد خانواده زبانها و ابزارهاي توسعه دهنده واسط گرافيكي كاربر خواهد داد. از ديد بسياري از برنامهنويسان، فلكس به مراتب مولدتر و كارآمدتر از سويينگ است. فلكس فاقد بخشهاي خسته كننده موجود در سويينگ، مانند Data binding، Validation و UI layout است. برنامهنويسان شركت سان پيش از آغاز پروژه جاوا FX اسكريپت با ايجاد اجزاي جديد، برخي از اين مشكلات را از ميان برداشتند. اما با ظهور جاوا FX اسكريپت توسعه سويينگ با جديت سابق دنبال نميشود.
از ديگر موضوعات مورد بحث، مقايسه جاوا FX اسكريپت با زبانهاي مشابه مانند فلش، DHTML و سيلورلايت است.
يكي از عواملي كه بقاي نرمافزارهاي قديمي را تضمين ميكند اين است كه آنها روي اكثر جستجوگرها نصب شدهاند. اكنون بيش از 75% از جستجوگرها مجهز به جاوا هستند. اين رقم در مورد Flash به 85% و در مورد جاوا اسكريپت به 98% ميرسد. در مقابل، JavaFX فعلا روي هيچ جستجوگري اجرا نميشود.
جذابيت سيلورلايت و جاواFX در اين است كه هر دو آنها از همان فناوريهايي استفاده ميكنند كه در سمت سرور استفاده ميشود. فلش و جاوا اسكريپت از اين قاعده پيروي نميكنند و اين امر، آنها را با محدوديت منابع روبرو ميكند. مشكل ايجكس و DHTML اين است كه كدهاي نوشته شده با استفاده از اين دو زبان آنچنان ضعيف هستند كه همه برنامهنويساني كه از آنها استفاده ميكنند براي جلوگيري از ايجاد مانع در اجراي كد به ايجاد wrapperهاي سمت سرور رو آوردهاند.
ابزار توسعه كدهاي فلش، فلش است. كدهاي DHTML و ايجكس با استفاده از Notepad و GWT در ويندوز و XEmacs در يونيكس ايجاد ميشوند. در مورد جاواFX ابزار برنامهنويسي نتبينز است. برنامهنويسان سيلورلايت از Visual Studio Orcas همراه با يك ابزار طراحي استفاده ميكنند. در ميان اين ابزارها، نتبينز از ديگران قويتر است. به اين ترتيب برنده نبرد ميان اين زبانها پيشاپيش مشخص است.
كدهاي جاوا در زمان اجرا به حافظه اصلي بسيار زيادي نياز دارند. يك واسط كاربر ساده در زمان اجرا به طور متوسط به حدود 65 مگابايت حافظه اصلي نياز دارد. اجراي همزمان چند برنامه جاوا، در ازاي هر برنامه 65 مگابايت ديگر از حافظه اصلي را اشغال ميكند. فرض كنيد يك وبسايت آموزشي، مجموعهاي از نرمافزارهاي نمايشي4 را بارگذاري كرده است. بارگذاري همزمان چند دمو، در عمل تمام حافظه اصلي سيستم را اشغال ميكند. اين امر استفاده از كدهاي جاوا در حجم انبوه را با محدوديتهايي مواجه ميسازد.
شواهد موجود حاكي از اين است كه در دراز مدت، برنامههاي فلش از شانس رقابت كمتري در مقايسه با رقباي ديگر برخوردارند. فلش براي توليد سريع فايلهاي ويدئويي، ساخت آگهيهاي تبليغاتي و فيلمهاي كوتاه مناسب است. اما در مورد پويانماييها و ويديوهاي بزرگ كارايي لازم را ندارد. در مقابل، جاواFX و سيلورلايت شانس بسيار بيشتري براي بقا دارند. مايكروسافت به دليل نفوذ گسترده در بازار جهاني و در ميان كاربراني كه از رايانه براي كاربردهاي عمومي استفاده ميكنند همواره مخاطبان خاص خود را دارد. شركت سان نيز با دارا بودن ميليونها برنامهنويس جاوا در عرصه باقي خواهد ماند.
از ويژگيهاي برنامهنويسان جاوا اين است كه خود را با هر قالب كاري جديدي كه براي زبان جاوا ايجاد شود تطبيق ميدهند. از سوي ديگر بخش قابل توجهي از كاربران جاوا و محصولات شركت سان را كاربران دانشگاهي تشكيل ميدهند. اين كاربران خود از ايجاد كنندگان فناوريهاي جديد هستند.
آيا جاواFX به يك فناوري RIA پويا و تكامل يافته تبديل خواهد شد؟ اين موضوعي است كه در هفته آينده به آن خواهيم پرداخت.
پينوشتها:
Rich Internet Client. 1
Smartphones. 2
User Interface.3
Demo.4
منبع:هفته نامه کلیک-روزنامه جام جم
Ali_Sam
یک شنبه 20 بهمن 1387, 21:41 عصر
چرا نميتوانيد وبسايت خوبي راهاندازي كنيد؟
آيا شده است كه در وراي ذهن شما فكري باشد كه با گذشت زمان توجه شما به آن بيشتر جلب شود؟ مثلا بخواهيد يك برنامه براي iPhone بنويسيد كه بتواند حدس بزند چه چيزي در ذهنتان ميگذرد، يا يك موتور جستجو كه بهتر از گوگل عمل كند، يا روشي براي خريد سريعتر موسيقي بهطور آنلاين ابداع كنيد.
ما در اين مقاله نميتوانيم به شما بگوييم كه چگونه ميتوانيد به آنها واقعيت ببخشيد، ولي ميتوانيم راهي را نشان دهيم كه قبل از آنكه كار بر روي آنها را شروع كنيد، بتوانيد برروي موانعي كه ممكن است كار شما را دچار مشكل كنند، بهتر فكر كنيد.
هيچ مخاطبي نيست
شما حتي اگر چشمه اكسير جواني قابل حمل نيز بتوانيد بسازيد، مطمئن باشيد در شروع كار، شما براي اينكه نظر بقيه را به كارتان جلب كنيد، يك مبارزه سخت در پيش داريد!
جيبتان در حال خالي شدن است!
وقتي كه روي يك پروژه در حال كار هستيد، بعضي از اهداف ميتوانند خيلي برانگيزاننده باشند. مثلا: «اگر ما نسخه بعدي را آماده كنيم، همه ميبينند كه چه نسخه خوبي است!». اين تفكر مهمترين محرك شما براي ادامه كارتان است. روي ديگر قضيه اين است كه ممكن است ذهن شما را منحرف كند و باعث شود كه تمام موجودي خود را هزينه كنيد. در اين حالت شما تمام مشتريان خود را براي مدتي از دست خواهيد داد و مجبور هستيد كه آنها را متقاعد كنيد كه نسخه بعدي مطمئنا فوقالعاده خواهد بود. درصورتي كه هنوز آماده نشده است.
فرق شركتهاي خصوصي با شركتهاي دولتي، اين است كه آنها وقتي روي يك پروژه كار ميكنند و هزينه ميكنند، قابليت اين را دارند كه سرپا بايستند. درواقع اين شركتها ميتوانند دوره ركود خود را كنترل كنند تا اين دوران بگذرد. ولي شركتهاي خصوصي مجبورند براي اينكه درطول اجراي پروژههاي نو بتوانند از پس هزينههاي معمولي خود برآيند كارهاي پيشپاافتاده انجام دهند. چون دراين شرايط دخل و خرج آنها يكي نخواهد بود.
اين نكته را هميشه در ذهن داشته باشيد كه وقت طلاست! پس بايد زمان بيشتري صرفهجويي كنيد كه بتوانيد به همه كارهاي خود دررابطه با پروژهها برسيد!
نااميد ميشويد
به سرعت رويا جاي خود را به واقعيت ميدهد و اگر كار خود را دوست داشته باشيد، مجبوريد كه با شرايط كنار بياييد. مدتي بايد صرف اين موضوع كنيد كه به بلاگنويسان ايميل بزنيد و از آنها درخواست كنيد تا از محصول يا وبسايتتان استفاده كنند تا ببينيد چقدر بازگشت هزينه خواهيد داشت. اين كار مانند ساختن يك كوه از يك دانه شن است!
آزمايش واقعي بعد از ارائه اوليه محصولتان است. وقتي كه مشتريهايتان ميگويند كه كارتان خيلي خوب است ولي سروكلهشان ديگر پيدا نميشود! اينجاست كه سؤالهاي بدونجواب زيادي براي شما مطرح ميشود. بهعنوان مثال: چرا ديگه پيداشون نشد؟ چيز عجيبي وجود داشت؟ آيا ايدهمان، ايده بدي بود؟ اگه منتظر بمانيم ممكن است برگردند؟ آيا لازم است وسيله ديگري بسازيم؟ آيا بايد شكايت كنيم؟ آيا ايميل هفتگي فكر خوبي بود يا فقط كار را بدتر كرد؟
وقتي كاري را شروع ميكنيد كه قبلا هيچكس آنرا انجام نداده است، خيلي سخت است كه تا قبل از اتمام كار بتوانيد حدس بزنيد چه مشكلي وجود دارد. درست است كه بقيه به شما ميگويند نظرشان چيست، ولي اين نظرات به اندازه نظر شما براي كار مؤثر نيست.
ذهنتان درگير افكار بههم پيچيده ميشود
مطمئنا شما تنها كسي نيستيد كه درگير افكار پيچيده خود ميشويد، پس خيلي هم نااميد نباشيد و خدا را شكر كنيد.
وقتي كه كارهاي خود را بازنگري ميكنيد و در شلوغي كارهايي كه داريد سردرگم ميشويد، به اين فكر ميكنيد كه بالاخره كار شما به پايان رسيده است و ديگر نيازي به تلاش بيشتر نداريد. شما در قله موفقيت هستيد ولي بالاي سرتان هزينهاي است كه براي آن پروژه پرداخت كردهايد. ولي روز بعد خود را درجايي خواهيد يافت كه دوروز پيش قرارداشتيد و مجبوريد بازهم كار كنيد و تلاش كنيد؛ حتي بيش از پيش!
روز ديگر شخصي به بدترين شكل ممكن كه حتي تصور آن را هم نداريد افكار شما را زير سؤال ميبرد، يا پولي كه انتظار داشتهايد به شما برسد هنوز نرسيده است، يا يك مهره مؤثر از شركت شما ميرود، يا سرور شما خراب ميشود، يا سقف شركت چكه ميكند، يا هزاران مشكل ديگري كه ممكن است براي شما بوجود بيايد.
شروع يك كار بيشك سختترين قسمت آن است كه با يك قولي كه از روي احساسات داده و بهزودي فراموش ميشود شكل ميگيرد و اگر شما كمي از حالت عادي خارج شده باشيد، بيشتر از اين قولها خواهيد داد!
تنها پيشنهاد مؤثر در اين حالت اين خواهد بود كه با آرامش به سركار برويد و سعي كنيد هر انتقاد يا پيشنهاد را با آغوش باز بپذيريد. مطمئن باشيد كه تعداد زيادي از اطرافيان به شما خواهند گفت كه شما يك بت يا يك نابغه در عرصه وب هستيد؛ كه البته معمولاً اين حرفها خيلي درست نيست. و اين به اين معني است كه منتظر يك بازخورد موثر بمانيد.
چيز ديگري شما را تحريك خواهد كرد
در هنگام شروع كار بهنظر ميآيد كه چيزهاي ديگري براي شما جذاب باشند، تحريك كنند، راحت باشند يا سودمند باشند كه ميتوانند شامل برنامههايي براي تلفنهاي همراه باشند يا ابزار جديد، شاخه جديدي از محصولات فعلي موجودتان، صحبت درباره فرصتها، مقالات، كتابهايي كه ممكن است وجود داشته باشند يا افرادي كه فكرشان با شما همجهت باشد، كه شما هميشه ميگوييد كارهاي زيادي براي انجام دادن وجود دارد كه به آن سختياي نيست كه براي آن، خود را به زحمت بيندازيد.
مشكل فكري شما اينها نيستند و درواقع درگيري اصلي شما بر روي اين خواهد بود كه تصميم بگيريد كه از بين اينهمه ايده، كداميك ارزش بيشتري براي گذاشتن وقت و هزينهتان را دارد. اگر اين تصميم را قبل از شروع كار نگيريد، وقتي كاري را به پايان ميرسانيد، به اين فكر ميكنيد: «در اين مدت ميتوانستيم كارهاي مفيدتري را انجام دهيم.» چيزي كه وجود دارد اين است كه ممكن است ايدههاي زيادي داشته باشيد، ولي اگر بخواهيد همه آنها را عملي كنيد ديگر چيزي براي عرضه در بازار نداريد.
پس به محض اينكه فكري به ذهنتان رسيد، آنرا در ليستي كه از قبل براي اين منظور آماده كردهايد، بنويسيد. ممكن است بعد از مدتي در اين ليست، صدها ايده نوشته باشيد كه تا زمان بدست آوردن زمان يا منابع لازم، پرداختن به آنها به تعويق ميافتد. اين ليست را ميتوانيد براي ايدههايي كه از ايدههاي ديگر بهوجود ميآيند يا براي مقالات نيز تهيه كنيد.
مهم اين است كه شما همينكار را ادامه دهيد تا زمانيكه انجام آن ديگر منطقي نباشد. درواقع ايدههاي خود را همينطور به اين ليست اضافه كنيد. ميبينيد كه ذخيرهاي از كارهاي ممكن داريد كه در آينده ميتوانيد يكي از آنها را انتخاب كرده و مسير خود را عوض كنيد.
ذهن خود را ببنديد
اگر شما براي انجام كاري تصميم قطعي گرفتيد، هيچكس يا هيچچيز نميگويد كه سرراه شما ميايستد ولي شايد اينكار را انجام دهد. اگر براي ساخت چيزي دچار مشكل شديد، غيرممكن است كه شما را دچار لرزش كند و در واقع شما يكي از بهترين آزمايشات زندگي را تجربه خواهيد كرد!
هرماه مشتريهايتان اضافه ميشود، ايميلهاي زيادي دريافت خواهيد كرد، كارهايي كه خيلي به پروژههاي شما نزديك است. تصميم به ساخت چيزي ميگيريد كه واقعاً دوست داريد و آن را با چيزي عوض نميكنيد.
ميلاد پيكاني
منبع:هفته نامه کلیک-روزنامه جام جم
Ali_Sam
دوشنبه 21 بهمن 1387, 15:28 عصر
PHP جعبه ابزاري که به يک زبان برنامهنويسي تبديل شد
يکي از شناختهشدهترين زبانهاي اسکريپتنويسي، PHP است. اين زبان که در ابتدا بهمنظور طراحي و ساخت صفحات پوياي وب طراحي شد، در حالحاضر يک زبان اسکريپتنويسي همهمنظوره است که قابليتهاي متعددي دارد و در برنامههاي کاربردي گوناگوني استفاده ميشود.
تاريخچه
عبارت PHP سرنام عبارت "صفحه خانگي شخصي1" است. پيدايش PHP به سال 1995 بازميگردد، زماني که يک توسعهدهنده نرمافزار مستقل به نام راسموس لردورف2 يک اسکريپت Perl/CGI نوشت که او را از تعداد بازديدکنندگان وب سايت شخصياش مطلع ميساخت. اسکريپت او انجام دو وظيفه را برعهده داشت: گزارشگيري از اطلاعات بازديدکننده از سايت و شمارش تعداد کاربران. در آن زمان وب، به فرمي که اکنون ما آن را ميشناسيم، هنوز بسيار جوان بود و ابزارهايي از اين نوع هنوز پا بهعرصه وجود نگذاشته بودند. بنابراين اکثر کاربراني که از سايت لردورف بازديد ميکردند، با ارسال نامههاي الکترونيکي از وي درخواست ميکردند که اسکريپتهاي خود را براي آنها بفرستد. به اين ترتيب لردروف شروع به ارسال اين اسکريپتها تحت عنوان صفحه خانگي شخصي يا PHP كرد.
استقبال بينظير از اين مجموعه ابزارهاي ابتدايي لردروف را بر آن داشت که اجزاي بيشتري را به PHP اضافه کند. يکي از اين اجزاي جديد دادههاي وروردي بهفرم HTML را به متغيرهاي سمبليکي تبديل ميکرد که به کاربران اجازه ميداد فايل را به سيستمهاي ديگر منتقل کنند. براي انجام اين کار، لردروف کدنويسي را با زبان C به جاي پرل ادامه داد. در نوامبر سال 1997 با انتشار PHP 2.0 اين زبان يک فرم رسمي پيدا کرد.
امکانات و ويژگيها
از مهمترين قابليتهاي PHP ميتوان به امکانات آن براي توسعه صفحات وب اشاره کرد. کد PHP معمولا در کد HTML تعبيه ميشود وسپس روي وبسرور اجرا ميشود. وبسرور کد PHP را بهعنوان ورودي دريافت و صفحات وب را به عنوان خروجي توليد ميکند. يکي از مزيتهاي بزرگ PHP اين است که آن را ميتوان روي اغلب وبسرورها و تقريبا همه سيستم عاملها و پلتفرمها بدون صرف هزينه اجرا کرد. ضمن اينکه اغلب سيستمهاي مديريت پايگاه دادهها از آن پشتيباني ميکنند. از کد PHP همچنين ميتوان براي نوشتن اسکريپتهاي خط دستور و برنامههاي واسط گرافيکي کاربر استفاده کرد. کد PHP باز است و کاربران PHP ميتوانند آن را برحسب نياز خود، تغيير يا گسترش دهند.
عملکرد کد PHP در اصل مانند يک فيلتر است. يک برنامه PHP ورودي خود را از يک فايل متني و دستورات PHP را از يک فايل متني ديگر دريافت ميکند. خروجي اين سيستم يک فايل متني ديگر است که معمولا در قالب HTML ارايه ميشود. با توجه به اينکه که کد PHP روي سرور اجرا ميشود، يک اسکريپت سمتسرور3 است و مانند ديگر زبانهاي اسکريپتنويسي سمتسرور عمل ميکند.
مهمترين زبانهاي مشابه PHP عبارتند از: سيستم ASP.NET شرکت مايکروسافت، JavaServer Pages سانميکروسيستم و پرل. علاوه بر اين، PHP مشوق توسعه چند قالب کاري است که بلوکهاي ساختاري و طراحي مناسبي را براي پيشرفت توسعه سريع برنامههاي کاربردي (RAD4) ايجاد کردهاند. برخي از اين قالبهاي کاري عبارتند از: CakePHP،PRADO و Symfony.
زبان PHP داراي ويژگيهايي است که آن را به انتخاب بسيار مناسبي براي RAD و توسعه برنامههاي تحت وب تبديل ميکند. مديريت بهبود يافته منابع، از جمله اين موارد است. اين قابليت، امکان توسعه پروژههايي در مقياس بسيار بزرگ را فراهم ميکند. زبان PHP از برنامهنويسي شييگرا5 نيز پشتيباني ميکند. هر چند که اين زبان در ابتدا بهمنظور ايجاد چنين برنامههايي ايجاد نشده بود. نيازهايي که کاربران در طول زمان و در طي توسعه پروژههاي بزرگ با آنها مواجه شدند، تيم برنامهنويسي PHP را برآن داشت که ايجاد اين قابليتها را بهطور جدي مدنظر قرار دهند. پس از افزودن اين امکان، گروه بزرگي از برنامهنويساني که به استفاده از زبانهاي شييگرا عادت داشتند، جذب PHP شدند.
از ديگر قابليتهاي PHP ميتوان به امکان رمزگذاري اشاره کرد. کتابخانه MCrypt کاربران را قادر ميسازد که از گروه بزرگي از الگوريتمهاي رمزگذاري مانند Blowfish، MD5، SHA1 و TripleDES استفاده کنند. کتابخانه MCrypt را ميتوان از وبسايت آن دريافت کرد:
http://mcrypt.sourceforge.net
نسخههاي جديد PHP همچنين از زبان جاوا و امکانات آن پشتيباني ميکند. PHP همچنين داراي کتابخانههاي متعددي است که امکان انجام عمليات گسترده و متنوعي را به برنامهنويس ميدهد. توسعهدهندگان PHP با اطلاع از اينکه قابليت پردازش عبارات منظم نقش مهمي را در پذيرش PHP در ميان برنامهنويسان ايفا ميکند، کتابخانه PCRE را به اين مجموعه افزودند. PCRE6 که مخفف است، امکان پردازش عبارات منظم سازگار با پرل را فراهم ميکند. به اين ترتيب آنها به جاي اينکه قابليتهاي پرل را مجددا در PHP پيادهسازي کنند، آنها را مستقيما به زبان اضافه کردند. پشتيباني از سرويسهاي وب و XML از ديگر قابليتهاي PHP است. پشتيباني از PHP از پايگاههاي داده نيز ازجمله امکاناتي است که در طول زمان و براساس نيازهايي که بهمرور بهوجود آمدند، به مجموعه ابزارهاي PHP افزوده شد. پشتيباني از سرور پايگاهداده هاي SQLite راهحل سادهاي براي توسعهدهندگاني است که در جستجوي برخي از ويژگيها و قابليتهاي پايگاههاي داده بزرگ و سنگين هستند، بيآنکه با بار سنگين مسائل مديريتي موجود در چنين پايگاههاي دادهاي روبرو شوند.
قابليتهاي منحصر بهفرد
توسعهدهندگان مختلف که از PHP براي پيادهسازي يک برنامه کاربردي استفاده ميکنند، دلايل گوناگوني براي اين امر دارند. در واقع دلايل هر فرد خاص خود او هستند و بر مبناي تجارب برنامهنويسي وي، نيازهاي برنامه و امکانات موجود در زبان مورد نظر شکل ميگيرند. با اين حال، چهار ستون اصلي PHP که همه توسعهدهندگان در مورد آنها اتفاق نظر دارند، عبارتند از: عملي بودن، قدرت، امکانپذير بودن و هزينه اندک.
زبان PHP از همان ابتداي پيدايش، با ايده عمليبودن پديد آمد. در واقع هدف اصلي لردورف ايجاد يک زبان جديد نبود، بلکه حل مسائلي بود که درآن زمان راه حل عملي براي آنها وجود نداشت. علاوه بر اين، بخش عمده تکامل اوليه PHP نتيجه تصميم براي بهبود زبان نبود، بلکه افزايش سهولت توسعه کد براي کاربر بود. به اين ترتيب، حاصل کار يک زبان مينيماليستي بود که همه آنچه را که براي کاربر لازم بود دربرداشت و در عين حال دستور زبان آن فاقد پيچيدگي بود. آموزش PHP به مبتديان بسيار ساده است، زيرا يک اسکريپت کوچک و ساده ميتواند تنها شامل يک خط کد باشد. در PHP برخلاف C افزودن کتابخانهها به کد اجباري نيست.
قدرت PHP در نسخه PHP 5 افزايش چشمگيري يافته است. نسخه حاضر برخلاف نسخههاي قبلي بيشتر به کيفيت توجه کرده است تا کميت. در نسخههاي پيشين هربار نسخه جديد حجم انبوهي از توابع جديد را به کتابخانههاي PHP ميافزود. در حال حاضر مجموعه 113 کتابخانه PHP، بيش از 1000 تابع در اختيار دارند. اغلب ما ميدانيم که PHP قادر است با پايگاههاي داده ارتباط برقرار کند، دادهها را پردازش کند و صفحات پويا ايجاد کند. آنچه که بيشتر ما در مورد قدرت PHP نميدانيم اين است که PHP قادر است با مكرومديا فلش، تصاوير و فايلهاي قابلحمل (.pdf) کار کند، کلمههاي عبور را از نظر قابل حدس بودن بررسي کند و پيچيدهترين عبارات رشتهاي منظم را پردازش کند.
قابليت امکانپذير بودن در PHP به برنامهنويسان امکان ميدهد که همواره بيش از يک راه حل براي پيادهسازي کد داشته باشند. در مقابل، يک کاربر ممکن است به واسطه تعداد زياد انتخابهاي موجود، دچار سردرگمي شود. بهعنوان مثال، PHP از 25 پايگاه داده مختلف و محصولات وابسته به آنها پشتيباني ميکند. PHP همچنين از تمام قابليتهاي برنامهنويسي شييگرا و برنامهنويسي ساختيافته بهطور همزمان پشتيباني ميکند.
PHP از آغاز يک زبان و نرمافزار کدباز بوده است. نرمافزار کدباز نرمافزار رايگاني است که استفاده، تغيير و توزيع آن هيچ محدوديتي ندارد. نرمافزارهاي کدباز مانند لينوکس، آپاچي و PHP، در دهه گذشته نقش عمدهاي در توسعه و پيشرفت اينترنت داشتهاند. مهمترين دليل اين امر آزادي عملي است که اين نرمافزارها در جهت افزودن امکانات جديد به کاربران ميدهند. به اين ترتيب هر پروژه جديد در دريايي از استعدادها شناور است. همکاري اين استعدادها و تواناييها در نهايت منجر به توليد محصولي با کيفيت بالا ميشود.
اشکالات
PHP نيز مانند بسياري از زبانهاي اسکريپتنويسي، مساله خوانايي کد را در درجه اول اهميت قرار داده است. به اين ترتيب اسکريپتهاي PHP در زمان اجرا کامپايل ميشوند. اين امر با افزودن يک مرحله اضافه به اجراي برنامه، سرعت اجرا را کاهش ميدهد. با اين حال، هماكنون نرمافزارهايي بهنام بهينهساز كد7 وجود دارند که با کاهش اندازه و ايجاد تغييراتي در کد، ميتوانند زمان اجرا و کارايي برنامه را افزايش دهند.
هماکنون PHP روي بيش از 20 ميليون وبسايت و يک ميليون وبسرور نصب شده است. جديدترين نسخه PHP نسخه 5.2.6 است که در تاريخ اول ماه مي سال 2008 منتشر شد و شما ميتوانيد آن را بهطور رايگان از سايت زير دريافت کنيد:
www.php.net
به نقل از جام جم
پينوشت:
1. Personal Home Page
2. Rasmus Lerdorf
3. Server-Side
4. Rapid Application Development
5. Object Oriented
6. Perl Compatible Regular Expressions
7. Code Optimizer
Ali_Sam
دوشنبه 21 بهمن 1387, 15:31 عصر
نسل جديد ابزارهاي برنامهنويسي
در دنياي برنامهنويسي تحت وب، بيگمان يكي از پركاربردترين، محبوبترين و توانمندترين زبانها php است كه تاكنون توانسته است توجه بسياري از برنامهنويسان و توسعهدهندگان وب را به خودش جلب كند. پيش از اين php با وجود وسعت كاربردش، يك محيط كار مجتمع و توانمند نداشت و برنامهنويسان ناچار بودند برنامههاي خود را در ويراستارهاي معمولي نوشته و در سرورهاي خود آزمايش و اشكالزدايي كنند.
با اين وجود به كارخود با اين زبان ادامه ميدادند، اما بسياري از شركتها محصولات متنوعي براي اين زبان به بازار عرضه كردند تا كار برنامهنويسان را با اين زبان راحتتر و لذتبخشتر كنند، اما شركت Zend كه يكي از پيشگامان يا بهتر است بگوييم در صدر توسعهدهندگان زبان php بوده است كاملترين و توانمندترين ابزار براي php را كه در حقيقت يك IDE تمام و كمال براي اين زبان بهشمار ميرود يعني Zend Studio را به بازار نرمافزار عرضه كرد.
نسخههاي پيشين
نرمافزار زنداستوديو از اولين نسخه سعي بر اين داشته است كه ابزاري مفيد براي توسعهدهندگان وب و برنامهنويسان php فراهم آورد و هر بار در نسخههاي جديدتر امكانات نويني به آن اضافه كرده و اشكالات پيشين را رفع كرده است تا جايي كه در نگارش 5/5، اين نرمافزار به يك ابزار توانمند و با امكانات فراوان تبديل شد و بسياري از افراد حرفهاي در زمينه برنامهنويسي php آن را بهعنوان نرمافزار شماره يك براي اين زبان پذيرفته بودند. البته اين نرمافزار رايگان نيست و شايد بزرگترين اشكالي كه بتوان به آن گرفت همين باشد و اين مساله باعث شود بسياري از افراد به نرمافزارهاي رايگان يا ارزانتر روي بياورند؛ اما جدا از مساله قيمت، مسلما نرمافزاري نميتواند در حال حاضر با اين نرمافزار از نظر فناوري، امكانات و توانمندي رقابت كند. اين گفته شايد براي نسخههاي قديمي يا حتي نگارش 5/5 كمي اغراقآميز بهنظر برسد، اما شايد بتوان گفت كه براي نسخههاي 6 به بعد عين واقعيت است.
نگارش 6
تيم نرمافزاري زند تاكنون براي ارتقاي محصول خود با فناوريهاي روز نرمافزاري پيش رفته است. احتمالا توسعهدهندگان نرمافزار به زبانهاي جاوا و++ C، نرمافزار قدرتمند Eclipse را كه يك IDE تمام عيار براي اين زبانها به شمار ميرود، ميشناسند.
حدود دو ميليون برنامهنويس از اين IDE رايگان و منبعباز استفاده ميكنند و اين نشان از محبوبيت اين نرمافزار دارد. اما اشخاصي كه با زبان php كار ميكردند و قابليتهاي ايكليپس را ديده بودند، خواهان اين بودند كه اين نرمافزار امكانات مشابه براي زبان php را نيز فراهم آورد. البته بسته نرمافزاري ديگري به نام (PDT (Php Developers Tools نيز براي برنامهنويسان php وجود دارد. اما امكاناتي كه ايكليپس براي كاربران خود فراهم ميكرد چيزي بود كه نظر كاربران PDT را نيز به خود جلب كرده بود.
اينجا بود كه زند در يك گام بلند، بدون اينكه نگارش 6/5 يا از نرمافزار زنداستوديو را عرضه كند، يكباره با بهرهگيري از فناوري قدرتمند و غني IDE نرمافزار ايكليپس و امكانات PDT و همچنين تجربيات و حاصل تلاش خود در نرمافزار زنداستوديو نگارش 5/5 و چندين فناوري نوين ديگر از نگارش 6 برنامه زنداستوديو رونمايي كرد. به اين ترتيب كاربران و برنامهنويسان php بهجز قيمت 400 دلاري اين نرمافزار هيچ بهانه ديگري نداشتند كه به اين نرمافزار روي نياورند.
هماكنون كه اين مقاله نوشته ميشود، آخرين نگارش از اين برنامه 0/1/6 است كه در آن بسياري از اشكالات نگارش پيشين يعني 1/0/6 برطرف شده و بسياري از بخشهاي آن بهينهسازي شده است.
نگارش 6 به بعد اين نرمافزار بهدليل بهكارگيري فناوريهاي ايكليپس به zend studio for eclipse تغيير نام يافت.
امكانات و توانمنديها
اولين چيزي كه براي يك IDE به ذهن ميرسد داشتن يك ويراستار خوب است. زنداستوديو تنها IDE موجود براي توسعهدهندگان حرفهاي php است كه تمام امكانات مورد نياز ويرايش كد براي ساخت برنامههاي مدرن تحت وب را در بر دارد.
ويراستار توانمند اين نرمافزار تمام قالبهاي تحت وب را پشتيباني ميكند و امكانات لازم براي كار با سرويسهاي وب را براي توسعهدهندگان فراهم ميآورد. ضمن اين كه صدها قالب كد از پيش تعريف شده دارد كه كار را براي كدنويسيهاي معمولي راحت ميسازد.
اين نرمافزار با پشتيباني وسيع از جاوا اسكريپت، Ajax و... بهترين ابزار براي توسعه برنامههاي كاربردي غني وب (RIA) بهشمار ميرود. RIA (Rich Internet Application) برنامههاي تحت وبي هستند كه خصوصيات و كارايي برنامههاي معمولي دسكتاپ را دارند. اين برنامهها معمولا پردازشهاي لازم براي واسط كاربر را در رايانه كاربر انجام ميدهد اما دادهها و منطق برنامه را در سرويسدهنده نگه ميدارد و در هر زمان و به هر ميزان كه لازم بود با كمترين نرخ نقل و انتقال داده، آنها را از سرويسدهنده به رايانه كاربر منتقل ميكند.
ممكن است براي كاربران اين سوال مطرح شود كه استفاده از فناوريهاي موجود در ايكليپس چه امكاناتي به زنداستوديو اضافه كرده است كه در نسخههاي پيشين وجود نداشته است. در پاسخ به اين دسته افراد بايد گفت كه علاوه بر امكانات كوچك و بزرگ فراواني كه يك IDE كامل بايد داشته باشد، قابليت اضافه كردن امكانات جديد از طريق Plugin از ايكليپس به زنداستوديو به ارث رسيده است. در حال حاضر بيش از 850 پلاگين براي ايكليپس عرضه شده است كه هر كدام امكانات خاصي را به IDE اضافه ميكند. با سازگار شدن زنداستوديو با ايكليپس ، ميتوان از اين پلاگينها در نرمافزار جديد بهره گرفت. هر كدام از اين پلاگينها، خصوصيتي به نرمافزار ميدهد كه اگر قرار بود برنامه با همه آن خصوصيات عرضه ميشد اولا برنامه بسيار سنگين و پيچيده ميشد و ثانيا به محض ايجاد يك امكان جديد، بايد نسخه جديد برنامه عرضه ميشد. در واقع با يك طراحي اصولي به برنامه اين قابليت داده شده است كه تحت يك روال و قانون خاص، پلاگينهاي جديد توليد شده و به برنامه اضافه شود تا ضمن بخشيدن انعطافپذيري بيشتر به برنامه، هر كس محيط كار خود را براساس علاقه، نيازها و سليقه خود تنظيم كند تا بتواند حداكثر بهرهبرداري را از برنامه داشته باشد. به دليل اين گونه امكانات پيشرفته، اين IDE نسل جديد IDEها بهشمار ميرود.
قيمت اين برنامه 400 دلار است كه ميتوانيد نسخه كامل، اما 30 روزه آن را با حجم 317 مگابايت از سايت رسمي اين برنامه دريافت كنيد:
www.zend.com
پارسا ستودهنيا
به نقل از جام جم
Ali_Sam
دوشنبه 21 بهمن 1387, 15:34 عصر
نسل جديد ابزارهاي برنامهنويسي
در دنياي برنامهنويسي تحت وب، بيگمان يكي از پركاربردترين، محبوبترين و توانمندترين زبانها php است كه تاكنون توانسته است توجه بسياري از برنامهنويسان و توسعهدهندگان وب را به خودش جلب كند. پيش از اين php با وجود وسعت كاربردش، يك محيط كار مجتمع و توانمند نداشت و برنامهنويسان ناچار بودند برنامههاي خود را در ويراستارهاي معمولي نوشته و در سرورهاي خود آزمايش و اشكالزدايي كنند.
با اين وجود به كارخود با اين زبان ادامه ميدادند، اما بسياري از شركتها محصولات متنوعي براي اين زبان به بازار عرضه كردند تا كار برنامهنويسان را با اين زبان راحتتر و لذتبخشتر كنند، اما شركت Zend كه يكي از پيشگامان يا بهتر است بگوييم در صدر توسعهدهندگان زبان php بوده است كاملترين و توانمندترين ابزار براي php را كه در حقيقت يك IDE تمام و كمال براي اين زبان بهشمار ميرود يعني Zend Studio را به بازار نرمافزار عرضه كرد.
نسخههاي پيشين
نرمافزار زنداستوديو از اولين نسخه سعي بر اين داشته است كه ابزاري مفيد براي توسعهدهندگان وب و برنامهنويسان php فراهم آورد و هر بار در نسخههاي جديدتر امكانات نويني به آن اضافه كرده و اشكالات پيشين را رفع كرده است تا جايي كه در نگارش 5/5، اين نرمافزار به يك ابزار توانمند و با امكانات فراوان تبديل شد و بسياري از افراد حرفهاي در زمينه برنامهنويسي php آن را بهعنوان نرمافزار شماره يك براي اين زبان پذيرفته بودند. البته اين نرمافزار رايگان نيست و شايد بزرگترين اشكالي كه بتوان به آن گرفت همين باشد و اين مساله باعث شود بسياري از افراد به نرمافزارهاي رايگان يا ارزانتر روي بياورند؛ اما جدا از مساله قيمت، مسلما نرمافزاري نميتواند در حال حاضر با اين نرمافزار از نظر فناوري، امكانات و توانمندي رقابت كند. اين گفته شايد براي نسخههاي قديمي يا حتي نگارش 5/5 كمي اغراقآميز بهنظر برسد، اما شايد بتوان گفت كه براي نسخههاي 6 به بعد عين واقعيت است.
نگارش 6
تيم نرمافزاري زند تاكنون براي ارتقاي محصول خود با فناوريهاي روز نرمافزاري پيش رفته است. احتمالا توسعهدهندگان نرمافزار به زبانهاي جاوا و++ C، نرمافزار قدرتمند Eclipse را كه يك IDE تمام عيار براي اين زبانها به شمار ميرود، ميشناسند.
حدود دو ميليون برنامهنويس از اين IDE رايگان و منبعباز استفاده ميكنند و اين نشان از محبوبيت اين نرمافزار دارد. اما اشخاصي كه با زبان php كار ميكردند و قابليتهاي ايكليپس را ديده بودند، خواهان اين بودند كه اين نرمافزار امكانات مشابه براي زبان php را نيز فراهم آورد. البته بسته نرمافزاري ديگري به نام (PDT (Php Developers Tools نيز براي برنامهنويسان php وجود دارد. اما امكاناتي كه ايكليپس براي كاربران خود فراهم ميكرد چيزي بود كه نظر كاربران PDT را نيز به خود جلب كرده بود.
اينجا بود كه زند در يك گام بلند، بدون اينكه نگارش 6/5 يا از نرمافزار زنداستوديو را عرضه كند، يكباره با بهرهگيري از فناوري قدرتمند و غني IDE نرمافزار ايكليپس و امكانات PDT و همچنين تجربيات و حاصل تلاش خود در نرمافزار زنداستوديو نگارش 5/5 و چندين فناوري نوين ديگر از نگارش 6 برنامه زنداستوديو رونمايي كرد. به اين ترتيب كاربران و برنامهنويسان php بهجز قيمت 400 دلاري اين نرمافزار هيچ بهانه ديگري نداشتند كه به اين نرمافزار روي نياورند.
هماكنون كه اين مقاله نوشته ميشود، آخرين نگارش از اين برنامه 0/1/6 است كه در آن بسياري از اشكالات نگارش پيشين يعني 1/0/6 برطرف شده و بسياري از بخشهاي آن بهينهسازي شده است.
نگارش 6 به بعد اين نرمافزار بهدليل بهكارگيري فناوريهاي ايكليپس به zend studio for eclipse تغيير نام يافت.
امكانات و توانمنديها
اولين چيزي كه براي يك IDE به ذهن ميرسد داشتن يك ويراستار خوب است. زنداستوديو تنها IDE موجود براي توسعهدهندگان حرفهاي php است كه تمام امكانات مورد نياز ويرايش كد براي ساخت برنامههاي مدرن تحت وب را در بر دارد.
ويراستار توانمند اين نرمافزار تمام قالبهاي تحت وب را پشتيباني ميكند و امكانات لازم براي كار با سرويسهاي وب را براي توسعهدهندگان فراهم ميآورد. ضمن اين كه صدها قالب كد از پيش تعريف شده دارد كه كار را براي كدنويسيهاي معمولي راحت ميسازد.
اين نرمافزار با پشتيباني وسيع از جاوا اسكريپت، Ajax و... بهترين ابزار براي توسعه برنامههاي كاربردي غني وب (RIA) بهشمار ميرود. RIA (Rich Internet Application) برنامههاي تحت وبي هستند كه خصوصيات و كارايي برنامههاي معمولي دسكتاپ را دارند. اين برنامهها معمولا پردازشهاي لازم براي واسط كاربر را در رايانه كاربر انجام ميدهد اما دادهها و منطق برنامه را در سرويسدهنده نگه ميدارد و در هر زمان و به هر ميزان كه لازم بود با كمترين نرخ نقل و انتقال داده، آنها را از سرويسدهنده به رايانه كاربر منتقل ميكند.
ممكن است براي كاربران اين سوال مطرح شود كه استفاده از فناوريهاي موجود در ايكليپس چه امكاناتي به زنداستوديو اضافه كرده است كه در نسخههاي پيشين وجود نداشته است. در پاسخ به اين دسته افراد بايد گفت كه علاوه بر امكانات كوچك و بزرگ فراواني كه يك IDE كامل بايد داشته باشد، قابليت اضافه كردن امكانات جديد از طريق Plugin از ايكليپس به زنداستوديو به ارث رسيده است. در حال حاضر بيش از 850 پلاگين براي ايكليپس عرضه شده است كه هر كدام امكانات خاصي را به IDE اضافه ميكند. با سازگار شدن زنداستوديو با ايكليپس ، ميتوان از اين پلاگينها در نرمافزار جديد بهره گرفت. هر كدام از اين پلاگينها، خصوصيتي به نرمافزار ميدهد كه اگر قرار بود برنامه با همه آن خصوصيات عرضه ميشد اولا برنامه بسيار سنگين و پيچيده ميشد و ثانيا به محض ايجاد يك امكان جديد، بايد نسخه جديد برنامه عرضه ميشد. در واقع با يك طراحي اصولي به برنامه اين قابليت داده شده است كه تحت يك روال و قانون خاص، پلاگينهاي جديد توليد شده و به برنامه اضافه شود تا ضمن بخشيدن انعطافپذيري بيشتر به برنامه، هر كس محيط كار خود را براساس علاقه، نيازها و سليقه خود تنظيم كند تا بتواند حداكثر بهرهبرداري را از برنامه داشته باشد. به دليل اين گونه امكانات پيشرفته، اين IDE نسل جديد IDEها بهشمار ميرود.
قيمت اين برنامه 400 دلار است كه ميتوانيد نسخه كامل، اما 30 روزه آن را با حجم 317 مگابايت از سايت رسمي اين برنامه دريافت كنيد:
www.zend.com
پارسا ستودهنيا
به نقل از جام جم
Ali_Sam
دوشنبه 21 بهمن 1387, 15:39 عصر
روبي؛ زبان برنامهنويسي مولد
هرچند سال يکبار يک اتفاق بزرگ در جهان برنامهنويسي، مسير برنامهنويسي را تغيير ميدهد. زبان برنامهنويسي روبي، يکي از اين اتفاقهاي بزرگ است.
روبي1 يک زبان ديناميک، همهمنظوره، سطح بالا و شييگرا2 است که دستورالعملهاي آن از پرل3 و ديگر ويژگيهاي آن از اسمالتاک1 الهام گرفته شده است. روبي همچنين از ساختارگرايي و انعکاس پشتيباني ميکند. علاوه بر استفاده از سيستم ديناميک، مديريت حافظه در روبي کاملا خودکار است. بنابراين روبي از بسياري از جهات شبيه پيتون، پرل و ليسپ است.
پيدايش
روبي در اواسط دهه 1990 در ژاپن و توسط يوکي هيرو ماتسوموتو که به متز5 نيز معروف است پا به عرصه وجود گذاشت. ماتسوموتو در مورد نامگذاري روبي ميگويد: «روبي که در لغت بهمعناي ياقوت است سنگ ماه تولد يکي از همکاران من است.» روبي سنگ متولدين ماه جولاي است.
ماتسوموتو که خود به زبانهاي ليسپ، پرل، اسمالتاک و پايتون6 مسلط است، در مورد دليل پيدايش روبي ميگويد: «من بهدنبال يک زبان اسکريپتنويسي ميگشتم که از پرل قدرتمندتر و از پايتون شييگراتر باشد. از آنجا که چنين زباني وجود نداشت، تصميم گرفتم زبان ايدهآل خود را پديد آورم.» به اين ترتيب روبي عضو جديدي از خانواده پرل و پايتون بهشمار ميرود.
امکانات
روبي داراي کتابخانههاي گستردهاي است که به همه نيازهاي برنامهنويسان بهخوبي پاسخ ميدهد. روبي همچنين کلاسهاي FTP، پشتيباني از CGI، پارسرهاي XML، کتابخانههاي پايگاههاي داده، GTK و Qt و حتي يک کتابخانه BTree برخوردار است. کتابخانههاي روبي قابل اتصال به کتابخانههاي پايتون هستند و اين مساله پايه قويتري را براي برنامهنويسي روبي فراهم ميکند. روبي توسط اکثر سيستم عاملها از جمله لينوکس، Mac OS X، مايکروسافت ويندوز، ويندوز CE، و يونيکس پشتيباني ميشود. اجراي روبي روي يونيکس بهترين کارايي را دارد.
متغيرهاي روبي در پنج سطح جهاني7، محلي، کلاس، بلوک و نمونه8 تعريف ميشوند. پشتيباني از مديريت استثناها و عبارات منظم، جمعآوري اطلاعات زايد بهطور خودکار، بازنويسي اپراتورها، قابلحمل بودن و برخورداري از کتابخانههاي استاندارد بزرگ از مهمترين ويژگيهاي روبي بهشمار ميروند.
نسخه استاندارد روبي با استفاده از C نوشته شده است و طراحي آن بهگونهاي است که تنها در يک مرحله تفسير ميشود. اکنون، نسخههاي متعددي از زبان روبي وجود دارد که هريک با ديدگاهي خاص خود، روبي را پيادهسازي کردهاند. مهمترين اين نسخهها عبارتند از: MRI، JRuby و IronRuby. پيادهسازي موسوم به MRI9 متداولترين نسخه مورد استفاده است و پس از آن JRuby قرار دارد که يک پيادهسازي مبتني بر جاوا است. هر سه نسخه فوق کد را در زمان نوشته شدن کامپايل ميکنند. اين ويژگي از مهمترين تواناييهاي اين سه نسخه از روبي است. زيرا برنامهنويس بهسرعت از اشتباه خود آگاه ميشود.
اصول بنيادي
روبي از يک اصل ساده که اصل بهحداقل رسانيدن غافلگيري (POLS) ناميده ميشود، پيروي ميکند: زبان برنامهنويسي بايد بهنحوي رفتار کند که سردرگمي و غافلگيري برنامهنويس را به حداقل برساند. ماتسوموتو ميگويد: «روبي بهمنظور افزايش سرعت برنامهنويسان در توليد کد و تبديل برنامهنويسي به کاري جذاب و سرگرمکننده نوشته شده است. طراحي واسط کاربر روبي نيز از همين اصل پيروي ميکند.» او همچنين تاکيد ميکند که روبي نيازهاي انسان را بر نيازهاي رايانه مقدم ميشمارد.
بهعقيده ماتسوموتو، مردم و بهخصوص مهندسان رايانه، بر ماشينها تمرکز ميکنند. آنها در هنگام طراحي سيستمها به اين ميانديشند که چه کاري سيستم را سريعتر و بهرهوري آن را بيشتر ميکند. اما آنچه که ما به آن نياز داريم وجود سيستمهايي است که براساس سادهتر کردن کار ما با ماشينها يا آسانتر کردن برنامهنويسي طراحي شده باشند.
سرعت توسعه کد
سرعت کدنويسي برنامهنويسان در طي سالهاي گذشته رشد چشمگيري داشته است. هرچند آمارهاي رسمي در اين زمينه موجود نيست، اما بهطور متوسط هر پنج سال يکبار سرعت آمادهسازي نرمافزارها دو برابر ميشود.
از اين گذشته اکنون منحني توليد نرمافزارهاي قابل نگهداري، رشد خطي دارد. بخش اعظم اين سرعت مربوط به ابزارهايي است که برنامهنويسان استفاده ميکنند و در قلب اين ابزارها زبان برنامهنويسي قرار دارد.
زبانهاي برنامهنويسي در اصل مشابه يکديگرند. در مقايسه زبانهاي گوناگون، شباهتهاي کلي زبانها از تفاوتهاي آنها بيشتر است. با اين حال، تفاوتهاي موجود در ميان زبانهاي مختلف اثر قابلملاحظهاي بر حل مسايل، يافتن راه حل و برهمکنش انسان و رايانه دارند. بهعنوان مثال، در زبان ليسپ، زباني که زيبايي فوقالعاده و سادگي در مفاهيم را در هم آميخته است، بخش عمده تواناييهاي زبان در خدمت رايانه قرار گرفته است و نه در خدمت انسان. زباني که تفسير آن ساده است، الزاما زبان سادهاي براي برنامهنويسي نيست و اين مسالهاي است که اغلب برنامهنويسان آن را تجربه کردهاند. شگفت انگيزترين ويژگي ليسپ اين است که نشان ميدهد چگونه ميتوان با کمترين تعداد قوانين يک زبان رايانهاي قدرتمند خلق کرد. در مقابل، روبي چنان هنرمندانه نوشته شده است که کد آن مانند شعر بهنظر ميرسد.
يک مطالعه بسيار جالب در زمينه سرعت توسعه کد نشان ميدهد که سرعت توسعه کد رابطه مستقيم با تعداد خطوط کد نوشته شده دارد. تعداد خطوط کد در پروژههاي نوشته شده با++ C و جاوا تقريبا دو برابر تعداد خطوط پروژه پايتون يا پرل است. به اين ترتيب توسعه کد در C++ و جاوا دو برابر زمان ميبرد. نوشتن کد با روبي سرعت توسعه کد را به مراتب بيشتر از پرل و پايتون افزايش ميدهد و در اين زمينه از آنها پيشي ميگيرد. دستورات روبي بسيار ساده و قابل درک هستند و کد روبي بهزبان طبيعي بسيار نزديک است. بهعنوان مثال، در روبي از نقطهويرگول (سميکالن) استفاده نميشود. عدم وجود عواملي نظير نقطهويرگول که در برنامهنويسي وقفه ايجاد ميکند، سبب ميشود که برنامهنويسي يک روند سادهتر و روانتر پيدا کند. در حقيقت سادگي دستور زبان روبي و سهولت تعريف کردن کلاسهاي جديد سبب ميشود که نوشتن کلاسها ساده شده و از آنها در تست کد در حد کلاس استفاده شود. در نتيجه طراحي شييگرا بسيار سريع و ساده ميشود. به اين ترتيب برنامهنويس درصدد جستجوي راهحلهاي ديگر بر نميآيد.
ويژگيهاي انحصاري
برخي از ويژگيهاي روبي، در زبانهاي ديگر وجود ندارند. روبي از ساختار closure پشتيباني ميکند. در اين ساختار مسووليت هر بخش از کد بر عهده شيي مناسب قرار ميگيرد و کد حاصل کد خواناتري خواهد بود. نوشتن حلقههاي for و while در روبي نادر است. همچنين پيادهسازي ساختارهايي نظير "each" که احتمال رخداد خطا در آن کمتر است، بهسادگي امکانپذير است.
در پروژههاي پيچيده مساله قابليت نگهداري کد، به يکي از مسايل مورد بحث تبديل ميشود. طراحي شييگراي مناسب به برنامه ساختار مناسب داده و کد برنامه را منطقي و واضح ميکند. آنچه که مسلم است، اين است که همه زبانهاي شييگرا تا حدي از شييگرايي پشتيباني ميکنند. بهعنوان مثال زبان C++ بيشترين پشتيباني را از شييگرايي بهعمل ميآورد در حاليکه جاوا در اين زمينه اندکي ضعيفتر عمل ميکند. اما روبي از نظر سادگي در نحوه استفاده و قابل پيشبيني بودن از همه زبانهاي ديگر پيشي گرفته است.
محدوديتها
مانند همه زبانهاي ديگر، به روبي نيز انتقاداتي وارد است. سرعت اجراي کد روبي در مقايسه با بسياري از زبانهايي که کد را کامپايل ميکنند، پايين است. سرعت روبي با سرعت زبانهايي که از مفسر استفاده ميکنند و ديگر زبانهاي اسکريپتنويسي مانند پرل و پايتون قابل مقايسه است. تعريف متغيرها در روبي بسيار ساده است و تنها با تخصيص يک مقدار به متغير ميتوان يک متغير جديد تعريف کرد. اشتباههاي تايپي ميتوانند سبب معرفي متغيرهاي تازه شده و منجر به بروز رفتارهاي غيرمنتظره شوند. بهدليل ديناميک بودن انواع داده در روبي، اگر به متغيري مقداري از نوع دادهاي ناهماهنگ نسبت داده شود، خطاهاي زمان اجرا رخ خواهند داد.
در برخي از زبانها تبديل انواع بهطور خودکار انجام ميشود، يا اشتباه در مقداردهي توسط مفسر زبان به برنامهنويس اعلام ميشود اما روبي فاقد مکانيسمي براي رفع اين مشکل است. روبي از رشتههاي چندبايتي و نيز از يونيکد پشتيباني نميکند. همچنين در حال حاضر سيستم روبي فاقد يک تعريف معين و استاندارد است.
ماتسوموتو اميدوار است که در آيندهاي نهچندان دور مستندات مربوط به يک تعريف مشخص از روبي تکميل شوند و روبي استاندارد ايزو دريافت کند.
قالب کاري
قالب کاري روبي، روبيرويريل10 يا به اختصار ROR ناميده ميشود. ROR يک قالب کد باز تحت وب است که در ميان توسعهدهندگان کدهاي تحت وب طرفداران زيادي دارد. ROR براي توسعه پروژههاي کوچک و مبتني بر سيستم کلاينت-سرور مناسب است. با استفاده از ROR برنامهنويس تنها بايد براي موارد خاصي که در قالب پيشبيني نشده است کد بنويسد. بهعنوان مثال اگر در برنامه کلاسي بهنام "فروش" وجود داشته باشد، در پايگاه دادهها جدولي به همين نام ايجاد ميشود. برنامهنويس تنها زماني نياز به کدنويسي مجدد دارد که نام جدول به "کالاهاي فروخته شده" تغيير کند. به اين ترتيب استفاده از ROR حجم کدنويسي را کاهش ميدهد. از ديگر مزاياي ROR ميتوان بهوجود کتابخانههاي گسترده جاوا اسکريپت و خروجي به فرم HTML و XML اشاره کرد. ROR در سال 2007 در در سازمان ثبت اختراعات آمريکا موسوم به USPTO به ثبت رسيده است.
پينوشت:
1. Ruby
2. Object Oriented
3. Perl
4. Smalltalk
5. Matz
6. Python
7. Global
8. Instance
9. Matz’s Ruby Interpreter
10. Ruby on Rails
آويد افضل
منبع:هفته نامه کلیک-روزنامه جام جم
Ali_Sam
دوشنبه 21 بهمن 1387, 15:44 عصر
خوانايي بيشتر براي درك بهتر
همانطور كه ميدانيد ساختار برخي زبانها به شكلي طراحي شده است كه به زبان گفتار نزديك بوده و با خواندن آن تا حدودي ميتوان منطق آن را درك كرد و در مقابل بعضي زبانها هستند كه 2 مفهوم كاملا مشابه با تفاوتي بسيار كوچك از هم شناخته ميشوند و به اين ترتيب گاهي خواننده را به اشتباه مياندازند و شايد خود نويسنده برنامه نيز در نوشتن آن اشتباه كرده و حتي پس از پي بردن به اشكال، در يافتن و اشكالزدايي آن به مشكل بر بخورد.
نقش برنامهنويس در خوانايي
علاوه بر اين كه يك زبان و نحوه پيادهسازي آن در خوانايي يك برنامه نقش دارد، نقش بزرگتر در اين زمينه، برنامهنويس و طريقه نوشتن او ايفا خواهند كرد. هرچقدر يك زبان، قابليتهاي زيادي داشته باشد، رعايت نكردن برخي اصول و عدم توجه برنامهنويس به آنها ميتواند در نهايت به يك برنامه نامنظم و ناخوانا منتج شود.
اكثر زبانهاي برنامهنويسي سطح بالاي امروزي انواع كاراكترهاي كنترلي و فاصله را در برنامه ناديده ميگيرند.
معمولا به غير از ثابتهاي رشتهاي كه هر چه در آن قرار دهيم همان را در خروجي دريافت خواهيم كرد، ميتوان در هر جاي برنامه به هر تعداد از كاراكتر tab يا space استفاده كرد يا به تعداد دلخواه، بين خطوط enter زد و اطمينان داشت كه هيچيك از آنها در برنامه نهايي تاثير نخواهد داشت. (البته بين كلمات كليدي و اجزاي برنامهنويسي وجود يك كاراكتر فاصله الزامي است و در غير اين صورت كامپايلر اعلام خطا خواهد كرد. منظور ما، كاراكترهايي اضافه، علاوه بر آنهايي كه لازم هستند؛ است).
اعمال تورفتگي در متن برنامه
از اين خصوصيت كه كامپايلر، كاراكترهاي فاصله اضافه را ناديده ميگيرد ميتوان به بهترين شكل در بالا بردن نظم و خوانايي برنامه استفاده كرد. در ساختارهاي تو در تو و بلاكهاي داخل هم، مفهومي به نام تورفتگي يا فرورفتگي وجود دارد كه رعايت آن به برنامه نظم داده، خوانايي آن را بالا برده و اشكاليابي و اشكالزدايي آن را ساده ميسازد، اما رعايت نكردن آن در خروجي برنامه بيتاثير است و تنها ممكن است برنامهنويس را دچار اشتباه و سردرگمي كند. تورفتگي به اين شكل است كه هنگامي كه يك بلاك جديد از برنامه آغاز ميشود، دستورات داخل آن بلاك نسبت به بلاك بيروني از چند كاراكتر جلوتر آغاز شود و تمام دستورات داخل آن بلاك زير هم و از چند كاراكتر جلوتر ادامه پيدا كنند. در صورتي كه درون آن بلاك نيز بلاك جديدي باز شد، باز هم دستورات آن نسبت به اين بلاك از چند كاراكتر جلوتر شروع شود. در صورت پايان يافتن آن بلاك نيز دستورات بعدي، به همان تعداد كاراكتر عقبتر ادامه پيدا كنند. معمولا در IDE زبانهاي برنامهنويسي، هنگامي كه چند كاراكتر به جلو برويم براي راحتي برنامهنويس، هر بار كه enter بزنيم، خط جديد از محل شروع خط قبلي آغاز ميشود و اين كار به طور خودكار تا هر جا كه لازم باشد انجام ميشود. يك نمونه از ساختار تورفتگي را در مثال زير مشاهده ميكنيد:
( )function f
begin
…
…
If (…) then
begin
…
…
If (…) then
…
…
;end
;end
به دليل اينكه فاصلههاي اضافي تاثيري در نتيجه برنامه ندارند گاهي ميتوان همه برنامه را نيز در يك خط نوشت و تمام دستورات را به دنبال هم قرار داد. اين كار به هيچ عنوان توصيه نميشود. براي راحتي درك برنامه بهتر است هر دستور در يك خط نوشته شود و دستورات بلند، حتيالامكان در جاي مناسبي به دو بخش يا بيشتر شكسته شده طوري كه انتهاي دستور از نمايشگر خارج نشود و در صورت چاپ آن روي كاغذ، عرض كاغذ براي تمام قسمتهاي آن دستور كافي باشد. گاهي نيز لازم است براي تاكيد بيشتر روي دو دستور كه به هم وابستهاند آنها را در يك خط نوشت. (در صورت كوتاه بودن دستورات) به طور كلي چينش چگونگي نظمبخشي به خطوط برنامه كاملا به سليقه برنامهنويس مربوط ميشود و توجه كافي در اين زمينه مسلما به نفع او بوده و در نتيجه كار او هم از نظر كيفي و هم زماني تاثيرگذار خواهد بود.
نامگذاري مناسب
بعضي زبانهاي قديمي در نامگذاري شناسهها محدوديت قائل ميشوند. اما اكثر زبانهاي امروزي نامگذاري شناسهها با طول بلند را نيز جايز ميشمارند. ميتوان از اين قابليت نيز در جهت بالا بردن خوانايي برنامه و توانايي درك آن استفاده كرد.
به عنوان مثال در يك برنامه براي نگهداشتن «نام پدر» ميتوان از متغيري به نام A استفاده كرد. يا با كمي تخفيف از حرف F (حرف اول كلمه Father) استفاده كرد! اما اين يك اشكال بزرگ دارد. اگر شخص ديگري برنامه شما را ببيند متوجه نميشود كه در منطق برنامه شما، متغير a يا f براي نگهداري چه مفهومي در نظر گرفته شده است. خود برنامهنويس نيز ممكن است پس از گذشت مدت زمان طولاني، با رجوع به برنامه خود، به خاطر نياورد كه a يا f را به چه منظوري تعريف كرده است. بنابراين بهتر است براي متغيرها نام مناسب و مربوط به محتواي آن انتخاب كنيم. مثلا در مثال قبل، انتخاب شناسه father name در هر زمان براي هر كسي گوياي اين خواهد بود كه اين متغير براي نگهداري «نام پدر» در نظر گرفته شده است.
برخي برنامهنويسان با دانستن اين مساله باز ترجيح ميدهند از نامهاي كوتاه استفاده كنند و دليل آنها براي اين كار نيز سادگي و سرعت تايپ و جلوگيري از خط در تايپ نامهاي طولاني است. اين دليل در ويراستارهاي قديمي تا حدي قانع كننده است. اما در ويراستارهاي جديد اغلب امكاني به نام Autocomplete وجود دارد كه به برنامهساز امكان ميدهد با كمترين ميزان تايپ و تنها با وارد كردن حروف اول شناسه، گزينه مورد نظر خود را از ليست ظاهر شده به راحتي انتخاب كند. اين امكان، هم سرعت را افزايش ميدهد هم اشتباه تايپ را از بين ميبرد و هم امكان نامگذاريهاي بلندتر را بدون اشكال ميسازد.
دليل ديگري نيز براي برنامهنويسان جهت استفاده از نامهاي كوتاه و بيمفهوم وجود دارد و آن بالا بردن امنيت كد است. به عبارتي آنها بر اين اعتقادند كه ما ميدانيم هر چيز را براي چه استفاده كردهايم و يا در جايي براي خودمان ثبت ميكنيم. اما ميخواهيم اگر تصادفا اين كد دست بيگانه افتاد، در درك آن دچار مشكل شود و از آن سر درنياورد. اين توجيه تا حدي قابل قبول است. حتي امروزه نرمافزارهايي وجود دارند كه كد برنامههاي متن باز مثل جاوا اسكريپت يا Php را به شكلي درميآورند كه درك آن تا حد امكان مشكل شود و به اين ترتيب امنيت آن را در برابر سرقت بالا ميبرند.
مستندسازي
يكي از مهمترين كارهايي كه يك برنامهنويس بايد در برنامهنويسي خود رعايت كند مفهوم مستندسازي يا Self Documenting است. بعد از اين كه اين مفهوم را توضيح داديم، هميشه آن را به خاطر داشته باشيد و در برنامهنويسي خود از آن استفاده كرده و قواعد آن را در برنامه خود رعايت كنيد.
هر زبان برنامهنويسي، از اسمبلي گرفته تا جديدترين زبانها امكاناتي براي قرار دادن توضيحات يا Comment در برنامه در نظر گرفتهاند. مثلا در زبان اسمبلي اگر بعد از دستوري علامت سمي كالن (;) قرار دهيد اسمبلر تا پايان خط را ناديده ميگيرد و به خط بعد ميرود. در نتيجه شما ميتوانيد بعد از سمي كالن هر چه دلتان ميخواهد در برنامه بنويسيد. در زبان C++ و دلفي، سمي كالن يك كاراكتر اصلي و مهم است كه هر دستور بايد با آن پايان يابد، اما استفاده از دو backslash پشت سر هم (//) در هر كجاي برنامه باعث ميشود كه تا انتهاي خط توسط كامپايلر ناديده گرفته شود و نوشتههاي بعد از آن هيچ گونه تاثيري در خروجي برنامه و فايل نهايي نخواهند داشت. امكان اضافه كردن توضيحات چندخطي يا بخشي از يك خط نيز وجود دارد. در C++ استفاده از /*…*/ و در دلفي {…} براي اين نوع توضيحات به كار ميرود. در واقع كامپايلر در C++ بعد از ديدن /* و در دلفي بعد از ديدن { آنقدر كاراكترهاي بعدي را ناديده ميگيرد تا به ترتيب در C++ و دلفي به */ و } برسد.
بنابراين شما ميتوانيد شروع هر بخش، پايان هر بخش، دليل استفاده از يك متغير، مقداري كه انتظار ميرود يك متغير در جايي داشته باشد، كاري كه يك دستور يا يك تابع انجام ميدهد و هر آنچه كه فكرش را ميكنيد در برنامه اضافه كنيد تا هم خودتان و هم هر كس ديگر كه برنامه را ميخواند كل منطق آن را متوجه شود. به ساختار يك نمونه توضيحات گذاري در دلفي توجه كنيد:
a function for Input //
( )Function f
Begin
If p = = 1 {Input is ready} then
…
End
در مثال فوق عبارت a function for input و هر آنچه بعد از آن تا پايان خط بيايد همچنين نوشتههاي داخل { } يعني Input is ready توسط كامپايلر ناديده گرفته ميشود و ميتواند حتي به زبان فارسي باشد.
بنابراين شما مشخص كردهايد كه تابع ( )f براي گرفتن ورودي است و وقتي متغير P برابر يك شود يعني ورودي آماده است. به كدي كه در آن توضيحات گذاري به ميزان كافي رعايت شده باشد يك كد مستندسازي شده يا خودمستندسازي شده گفته ميشود و اين نوع امتياز بالايي خواهد داشت.
پارسا ستودهنيا
منبع:هفته نامه کلیک-روزنامه جام جم
Ali_Sam
سه شنبه 22 بهمن 1387, 23:45 عصر
توجه به استاندارد، احترام به برنامهنويسي
هنگام به وجود آمدن و طراحي يك زبان برنامهنويسي و يا پس از آن كه كاملا طراحي شد و مورد استفاده قرار گرفت، گروهي از طراحان و پديدآورندگان آشنا به آن زبان و متخصص برنامهنويسي گردهم ميآيند و به استانداردسازي آن زبان ميپردازند و پس از آن، قوانين تصويب شده و تاييد شده را به طور همگاني اعلام ميكنند تا هر ابزار يا كامپايلر جديدي كه براي آن زبان در نظر گرفته ميشود، با توجه به استانداردهاي آن زبان طراحي شود.
بعد از آن كه زبان استاندارد شد، اگر شخص يا موسسهاي اقدام به طراحي ابزار يا كامپايلري مربوط به آن زبان كرد، در صورتي محصول او يك محصول قابل قبول و استاندارد به شمار ميرود كه در آن اصول و استانداردهاي آن زبان رعايت شده باشد. اين كه برنامه جديد چه ويژگيهايي به محيط عملياتي يا به ابزارهاي برنامه و يا حتي به پيادهسازي زبان اضافه ميكند، ميتواند موجب برتري و تمايز آن از ساير ابزارها شود؛ اما رعايت اصول پايهاي براي همه طراحان الزامي است و كاربران نيز بايد در انتخاب ابزار يا كامپايلر مورد استفاده خود، اين مساله را در نظر داشته باشند.
مستندات زبان
هم براي كساني كه ميخواهند كامپايلر جديد براي يك زبان طراحي كنند و هم براي اشخاصي كه قصد دارند به برنامهنويسي با آن زبان بپردازند لازم است، مستندات مربوط به آن زبان را مطالعه كنند. در كنار مستندات مربوط به زبان استاندارد، مطالعه راهنماي كامپايلر مورد استفاده نيز براي برنامهنويسان لازم است.
در يك زبان برنامهنويسي، برخي مسائل در استاندارد زبان آمده است و برخي ديگر به طور قراردادي بين توسعهدهندگان كامپايلر رعايت ميشوند. در كنار آن، برخي مسائل نيز ممكن است از كامپايلري به كامپايلر ديگر متفاوت باشد. به عنوان يك مثال نادقيق ممكن است حد پايين يك آرايه در يك زبان، در استاندارد آن ذكر شده باشد. مثلا انديس آغازين در زبان C++ همواره صفر است؛ اما در پاسكال، يك آرايه ميتواند از هر انديس ديگري آغاز شود؛ اما ممكن است مقداردهي اوليه به هنگام تعريف آرايه در استاندارد ذكر نشده باشد.
در اين گونه موارد گاهي در برخي از پيادهسازيها به هنگام تعريف آرايه، به عناصر آن به صورت خودكار و پيشفرض مقدار صفر، نسبت داده ميشود. اما در پيادهسازي ديگر آن زبان توسط شركت ديگر ممكن است مقادير عناصر به همان صورت رها شده و برنامهنويس را موظف به مقداردهي اوليه كند. يا به عنوان مثال ديگر ممكن است در يك پيادهسازي از زبان به هنگام خواندن يك ركورد از فايل، اشارهگر فايل بعد از خواندن ركورد به ركورد بعد پرش كند و منتظر دستور بعدي خواندن بماند و در پيادهسازي ديگر آن زبان، به هنگام خواندن ركورد از فايل ابتدا به ركورد بعد رفته و بعد عمل خواندن انجام شود. البته بعضي از اين ريزهكاريها با يك آزمون و خطاي ساده قابل كشف است. اما دانستن استاندارد زبان در آن مورد به برنامهنويس در ساخت يك برنامه استاندارد و بدون اشكال كمك خواهد كرد.
تفاوت بين استانداردها
همانطور كه گفتيم يك استاندارد زبان توسط گروههايي از متخصصان و طراحان زبان تبيين و باعث ميشود كه يك اسكلت ثابت براي زبان تعيين شده و موجب يكنواختي پيادهسازيهاي مختلف آن زبان شود. اما بعضي شركتهاي بزرگ كه يك پيادهسازي از آن زبان را ارائه ميكنند، علاوه بر رعايت استانداردهاي آن زبان، براي امكانات اضافه و جانبي آن زبان نيز استانداردهاي خاص خود را وضع ميكنند و آنها را در مستندات خود عرضه ميكنند. مثلا 2 شركت بزرگ بورلند و مايكروسافت، دو پيادهسازي بزرگ و محبوب از زبان++ c عرضه كردهاند و در آن علاوه بر قوانين اصلي زبان، قوانين خاص خود را نيز به كار گرفتهاند. حال ممكن است به علت گستردگي استفاده كامپايلرهاي اين 2 شركت شركتهاي ديگر نيز ابزارهاي خود را علاوه بر استاندارد اصلي زبان، با استاندارد يك يا چند شركت بزرگ ديگر سازگار كنند.
توجه به قراردادها و قوانين يك زبان مسالهاي است كه هم بايد از جانب شركتهاي پيادهساز زبان و هم برنامهنويسان آن زبان مورد توجه قرار گيرد. در غير اين صورت ابزارهاي شركتها، محبوبيت پيدا نميكنند و برنامهنويسان نيز در توسعه نرمافزارهاي خود دچار مشكل ميشوند. در آينده سعي خواهيم كرد درباره مشكلات مربوط به برنامهنويسي در اين زمينه كمي بيشتر صحبت كنيم.
پارسا ستودهنيا
منبع:جام جم
http://www.jamejamonline.ir/papertext.aspx?newsnum=100955735551
Ali_Sam
سه شنبه 22 بهمن 1387, 23:49 عصر
نور، صدا، اکشناسکريپت!
اکشناسکريپت 0/3 که بهاختصار AS3 ناميده ميشود، يک زبان اسکريپتنويسي بر مبناي ECMAScript است که در اصل براي توسعه سايتهاي وب و ايجاد برنامههاي کاربردي اينترنتي استفاده ميشود. در واقع، AS3 مسوول برخي از اثرگذارترين و معروفترين وب سايتهاي امروزي است.
قابليتهاي ويژه AS3 از جمله قدرت بالا و شييگرايي، اين زبان را به انتخاب مناسبي براي بسياري از برنامهنويسان تبديل کرده است. پلتفرم اکشناسکريپت Adobe Flash Player نام دارد و حاصل برنامهنويسي وب با AS3 بهفرم فايلهاي SWF در صفحات وب تعبيه ميشود. با اينحال AS3 کاربردهاي گسترده و گوناگون ديگري نيز دارد که اغلب از نظرها دور ماندهاند. برخي از برنامههاي کاربردي پايگاه دادهها مانند آلفا فايو و برنامههاي کاربردي روباتيک و حتي برخي کيتهاي کنترلي ازقابليتهاي اين زبان بهرهمند شدهاند.
پيدايش
اکشناسکريپت در ابتدا توسط شرکت ماکرومديا طراحي شد. در سال 2005 پس از آنکه ادوبي مالکيت ماکرومديا را بهدست آورد، مالکيت AS3 را نيز دراختيار گرفت. طراحي اوليه اکشناسکريپت بهمنظور کنترل پويانماييهاي دوبعدي ساخته شده در ادوبيفلش که پيش از آن ماكرومديافلش ناميده ميشد، انجام شد. سپس نسخههاي بعدي قابليتهاي ديگري را به اين نسخه اوليه افزودند که امکان توسعه بازيهاي تحت وب و برنامههاي کاربردي اينترنتي پيچيده با قابليتهاي چندرسانهاي (مانند ويديو و صدا) را فراهم ميکند. اکشناسکريپت در آغاز پيدايش، تنها يک زبان اسکريپتنويسي بود و سه نسخه اول آن تنها شامل يک سري امکانات بسيار ابتدايي براي تعامل ميان برنامه و کاربر در اختيار برنامهنويس قرار ميدادند. توسعهدهندگان کدهاي فلش در ابتدا تنها قادر بودند دستورات ابتدايي را که "action" ناميده ميشدند در برنامه قرار دهند و اين دستورات را به دکمهها يا فريمهاي برنامه متصل کنند. مجموعه اين دستورات عبارت بودند از: کنترلهاي جهت و دستورات سادهاي مانند "play"، "stop"، "getURL" و "gotoAndPlay".
با انتشار Flash 4 در سال 1999 اين مجموعه دستورات ساده به يک زبان اسکريپتنويسي کوچک تبديل شد. قابليتهاي جديدي که به اين مجموعه دستورات اضافه شدند عبارتند از: متغيرها، عبارات، عملگرها، عبارات شرطي و حلقههاي تکرار. در زبان اکشناسکريپت، مجموعه دستورات "اکشنها" ناميده ميشوند.
نسخههاي پيشين اين زبان (AS1, AS2)، امکان خلق برنامههاي کاربردي اينترنتي برجستهاي را براي طراحان و توسعهدهندگان اين نوع برنامهها فراهم کردند. اما اينکه اکشناسکريپت 0/3 را تنها نسخه بعدي نرمافزار بدانيم، بهمعناي دستکم گرفتن قابليتهاي آن است؛ چرا که نرمافزار کنوني بهمراتب پيشرفتهتر، قدرتمندتر و تواناتر از نسخههاي قبلي است. اکشناسکريپت 0/3 امکان ايجاد برنامههاي بزرگتر و پيچيدهتر را با سرعت بيشتر و کارايي بالاتر فراهم ميکند.
ويژگيها و قابليتها
اکشناسکريپت 0/3 از دوبخش تشکيل ميشود: زبان برنامهنويسي که هسته اصلي آن را تشکيل ميدهد و Flash Player API. بخش زبان بلوکهاي ساختاري اصلي زبان برنامهنويسي نظير عبارتها، ساختارهاي شرطي، حلقههاي تکرار و تبديل انواع را تشکيل ميدهد در حاليکه Flash Player API از کلاسهايي ساخته شده است که توابع خاص فلشپلير را در دسترس برنامهنويس قرار داده و آنها را به نمايش ميگذارند.
اکشناسکريپت 0/3 ميزبان ويژگيهاي جديد و قدرتمندي است که ميتوانند فرايند توسعه کد را بهميزان قابل توجهي سرعت بخشند. اکشناسکريپت با پشتيباني از عبارات منظم عمليات قدرتمند متعددي را بر روي فايلهاي متني امکانپذير ميسازد. براي مثال ECMAScript يا E4X، که براي XML طراحي شده است، فايلهاي XML را به يک نوع دادهاي ساده و قابل درک تبديل کرده و بهاين ترتيب پردازش XML را بهنحو چشمگيري آسان ميکند. در اکشناسکريپت 0/3 ابزار جديدي تحت عنوان Display List API ارايه شده است که کار با اشياي ويژوال را ساده و قابل اطمينان ميکند. مدل استاندارد مديريت رويدادها موسوم به DOM شيوه گفتگوي اشيا با يکديگر و پاسخگويي آنها به يکديگر را در زمان اجرا بهبود بخشيده است. اين موارد فقط بخش کوچکي از قابليتهاي اکشناسکريپت 0/3 را تشکيل ميدهند.
قابليتهاي زبان
اکشناسکريپت 0/3 وجوه زبان هسته اکشناسکريپت 0/2 را با استاندارد ECMAScript سازگار ساخته و قابليتهاي جديد يا گسترش يافتهاي را به زبان افزوده است. در اکشناسکريپت 0/2 بسياري از موارد خطاي زمان اجرا بدون اطلاع برنامهنويس و در سکوت از برنامه حذف ميشدند. به اين معنا که فلشپلير آن دسته از اجزاي ويژوال برنامه را که کد آنها داراي خطاهاي قابل چشمپوشي بود، نشان نميدادند. اين مورد از مزاياي اکشناسکريپت در مقايسه با نسخههاي اوليه JavaScript به شمار ميرفت، زيرا جاواسكريپت از حذف اين موارد خودداري ميکرد و اجزاي ويژوال مانند Dialog boxها را بههمان شکل ناقص در جستجوگر وب نشان ميداد. با اين حال فقدان سيستم گزارش خطا، ديباگ کردن برنامههاي اکشناسکريپت را دشوار ميساخت. در اکشناسکريپت 0/3 براي حل اين مشکل چارهانديشي صورت گرفته است و سيستم ديباگ بهبود يافته، با دنبال کردن مسير خطاها در پشته برنامه، خطا را با ذکر شماره خط مربوط گزارش کرده و رفع آن را بهسرعت ممکن ميسازد.
مزايا و معايب
مهمترين مزيت پلتفرم فلش اين است که وب سايت طراحي شده با استفاده از آن در همه ماشينها و تحت همه سيستم عاملهاي موجود، منظره يکساني دارد. فلش امکانات منحصربهفردي را براي کنترل رابط كاربر در اختيار برنامهنويس قرار ميدهد. اکنون فلش به سيستمي بيرقيب براي طراحي سايتهايي که پويانماييهاي سنگين دارند، تبديل شده است. قابليت پخش مجدد فايلهاي صوتي و ويديويي توسط کاربر بدون نياز به نصب plug-inهاي اضافه از دلايل اين بيرقيب بودن است. از مزاياي ديگر اکشناسکريپت ميتوان به پشتيباني زبان از امنيت نوع دادهاي، که نگهداري کد را آسان ميکند اشاره کرد. کدنويسي در اين زبان از ديگر زبانهاي برنامهنويسي بهمراتب سادهتر است. توسعهدهندگان کد ميتوانند کدهايي با کارايي بالا و پاسخ گويي مناسب به نيازهاي کاربر بنويسند.
هماكنون بزرگترين اشکالي که به اين سيستم وارد است، قابل مشاهده نبودن فايلها روي ابزارهاي ديگر مانند تلفن همراه و کنسولهاي بازي است. از سوي ديگر، برخي از برنامهنويسان و اعضاي جامعه فلش، اکشناسکريپت 0/3 را "سخت" و پيچيده توصيف ميکنند. آنها ادعا ميکنند که درک و يادگيري آن بهمراتب سختتر از نسخههاي قبلي است و اين مساله در مورد برنامهنويسان و دانشجوياني که پيشتر با نسخههاي قبلي کار نکردهاند، جديتر است تا آنجا که برخي از استادان دانشگاهها به تدريس AS1 و AS2 بهجاي AS3 روي آوردهاند. از سوي ديگر برنامهنويسان حرفهاي مدعي هستند که ميزان کدي که بايد براي انجام هر عملي نوشته شود، بهمراتب بيش از زبانهاي ديگر است و همانطور که همه ما ميدانيم، سرعت اجراي برنامه با تعداد خطوط آن رابطه مستقيمي دارد. بنابراين کارايي برنامههاي نوشته شده با استفاده از AS3 به مهارت و تجربه برنامهنويس بستگي دارد.
با اين همه بررسيهاي دقيق گروهي از اعضاي جامعه فلش نشان ميدهد که آنچه ترس و واهمه برنامهنويسان را در پي داشته است، حجم انبوه ويژگيهاي جديدي است که در AS3 ارايه شدهاند و مبناي واقعي ندارد. بهعنوان مثال، نوعهاي دادهاي درAS1 بسيار ساده و از اساسيترين نوعهاي دادهاي هستند که عبارتند از: String که کاراکترهاي منفرد و رشتههايي از کاراکترها را ميپذيرد، Number که هر نوع داده عددي را پشتيباني ميکند، Boolean که يک نوع دادهاي باينري ساده است و Object که با استفاده از آن هر نوع داده پيچيدهاي را ميتوان تعريف کرد. با استفاده از Object ميتوان متدها، توابع و اشياي ديگر را تعريف کرد و يا آنها را گروهبندي کرد. در حالي که در AS3، بيش از پانزده نوع دادهاي وجود دارد که برخي از آنها مانند MovieClip انحصاري هستند و در زبانهاي ديگر يافت نميشوند.
از آنجايي که برنامههاي کاربردي مختلف از تواناييها و قابليتهاي متفاوتي استفاده ميکنند، انجام هيچ پروژهاي مستلزم تسلط به همه اين قابليتها نيست و هر برنامهنويسي بايد به تناسب نيازهاي خود در ارتباط با پروژهاي که در دست اجرا دارد تنها بخشي از اين قابليتهاي جديد را فرا گيرد. بهعنوان مثال، اگر بخواهيم يک برنامه کاربردي با ويژگيهاي منحصربهفرد ايجاد کنيم آنچه لازم است بدانيم برنامهنويسي شييگرا و کار با قالب کاري مربوط به برنامههاي کاربردي است که اير (AIR) ناميده ميشود. در اين صورت ما نيازي به دانستن توابع مربوط به کار با فايلهاي ويديويي مانند play() و stop() نداريم.
مشکل عدم دسترسي يا مشاهده فايلها در تلفنهاي همراه با استفاده از پلتفرم موسوم به Flash Light مرتفع شده است. فلشلايت فناوري است که اختصاصا براي تلفنهاي همراه و دستگاههاي الکترونيک بهوجود آمده است و از فلش و اكشن اسكريپت پشتيباني ميکند. نسخه کنوني فلشلايت، که Flash Light 3 نام دارد، از Flash 8 و ActionScript 2.0 و همچنين پخش مجدد ويديوهاي .FLV پشتيباني ميکند. اما مساله مربوط بهعدم قابليت حمل کد همچنان بهقوت خود باقي است و بهنظر ميرسد تا رسيدن به يک سيستم واحد که مانند جاوا مستقل از پلتفرم روي هر سيستمي قابل اجرا باشد راه و زمان درازي در پيش است.
آويد افضل
منبع:جام جم
http://www.jamejamonline.ir/papertext.aspx?newsnum=100955738523
Ali_Sam
سه شنبه 22 بهمن 1387, 23:56 عصر
احساس آرامش در کنار پايتون
پايتون يک زبان همهمنظوره و سطح بالا است که گروههاي مختلفي از مسايل را ميتوان با استفاده از آن حل کرد. فلسفه طراحي پايتون بر خوانا بودن کد و قابليت توليد آسان کد تاکيد ميکند. به همين سبب، هسته اصلي دستور زبان و سمانتيک پايتون با ديد مينماليستي (کوچکگرايي) نوشته شده است، در حاليکه کتابخانه استاندارد پايتون بسيار بزرگ است. اين کتابخانه که محدوده بزرگي از مسايل مانند پردازش رشتهها (عبارات منطقي، يونيکد، محاسبه اختلاف بين فايلها)، پروتکلهاي اينترنت (HTTP،FTP ،SMTP ، XML و CGI) برنامهنويسي، مهندسي نرمافزار و رابطهاي سيستمعامل (System calls, File systems, TCP/IP) را شامل ميشود بهسادگي قابل درک و استفاده است.
پايتون از همه قابليتهاي يک زبان قدرتمند از جمله شييگرايي و ساختارگرايي پشتيباني ميکند. سيستم پايتون مانند زبانهاي پرل و روبي ديناميک است و مديريت حافظه در آن بهصورت کاملا خودکار انجام ميشود. همين امر سبب ميشود که پايتون مانند ديگر زبانهاي ديناميک براي اسکريپت نويسي نيز مورد استفاده قرار گيرد.
پايتون در اواخر دهه هشتاد در شرکت CWI در هلند پا به عرصه وجود گذاشت. گيدو وان روسوم، طراح پايتون در مورد دليل پيدايش پايتون ميگويد: «زماني من در شرکت CWI در گروه برنامهنويسي زبان ABC به پيادهسازي اين زبان مشغول بودم. کار در اين گروه نکات زيادي را در مورد طراحي يک زبان جديد به من آموخت. زبان ABC دستور زبان جالبي داشت اما محدوديتهايي در اين زبان وجود داشت که توسعه و گسترش زبان را در عمل ناممکن ميساخت. اين موضوع انگيزه اصلي براي طراحي و پيادهسازي زباني بود که قابليت توسعه داشته باشد و در آن بتوانم ايدههاي جديد خود و انتقاداتي را که به زبان ABC داشتم، پيادهسازي کنم. در آن زمان من در کار با زبان مادولا (Modula) تبحر داشتم و پس از صحبت با طراحان آن و مطالعه دستور زبان طراحي پايتون را شروع کردم. زبان پايتون بخش وسيعي از دستور زبان خود را از ABC و مادولا به ارث برده است. بخش مديريت استثناها با الهام از مادولا3 نوشته شده است.» در حقيقت قابليت گسترش پايتون بسيار بيشتر از اغلب زبانهاي ديگر است. در پايتون مي توان دو نوع ماجول مختلف و کاملا متفاوت داشت : مي توانيد ماجولهاي پايتون را در کنار ماجولهايي که به طور کامل به زبان C نوشته شدهاند، استفاده کنيد. چنين ماجولي ميتواند انواع جديدي از دادهها و اشيا را در اختيار ما قرار دهد. پايتون با استفاده از زبان C پيادهسازي شده است. اين پيادهسازي CPython ناميده ميشود و با استاندارد C89 سازگار است. CPython برنامه پايتون را به بايت کد واسط کامپايل ميکند. بايت کد حاصل توسط ماشين مجازي اجرا مي شود.
گيدو براي نامگذاري زبان خود بهدنبال نامي کوتاه، منحصر بهفرد و اندکي رمزآميز ميگشت. او همزمان با پيادهسازي پايتون، فيلمنامه سريال کمدي "سيرک پرنده مونتيپايتون" را ميخواند و تصميم گرفت زبان جديد را پايتون بنامد. او پس از گذشت حدود دو دهه هنوز نقش خود را به عنوان تصميم گيرنده اصلي درتعيين جهت توسعه پايتون حفظ کرده است و اين نقش چنان پررنگ است که جامعه برنامهنويسان پايتون به وي لقب ديکتاتور مهربان داده است.
با وجود تاثيرپذيري از زبانهاي ديگر، پايتون فرهنگ، استيل و ديدگاه خاص خود را در حل مسائل دارد. پايتون ميکوشد سادگي در برنامهنويسي را حفظ کند و تا حد امکان به برنامهنويس در حل مسئله کمک کند. درک کد پايتون براي برنامهنويساني که به اين زبان آشنا نيستند آسان است. مهمترين اصل در برنامهنويسي پايتون اين است: «از ساده ترين راهي که ممکن است به حل مساله منجر شود، استفاده کنيد.»
از ديگر اصول مهم پايتون در اولويت قرار دادن درستي و وضوح برنامه نسبت به سرعت است. بخش بزرگي از کد مفسر پايتون و کتابخانههاي استاندارد به شيوهاي کاملا مستقيم نوشته شده و درک آن بسيار ساده است.
توسعه دهندگان کد پايتون مايل نيستند به بهاي ناخوانا شدن کد يا پيچيده کردن آن سرعت مفسر را افزايش دهند. در گذشته برخي از برنامه نويسان پيشنهاد افزودن قطعه کدهاي پيچيده اي را به منظور افزايش سرعت سيستم مطرح ميکردند، اما اين کار نگهداري از سيستم را دشوار ميساخت. در اين زبان، ساختارهاي مسطح به ساختارهاي تو در تو، ساختارهاي ترکيبي به ساختارهاي پيچيده و بيان مستقيم مفاهيم به بيان غير مستقيم ترجيح داده مي شود.
برخي از منتقدان پايتون آن را کند توصيف ميکنند. با اين حال در حل اکثر مسالههايي که با پايتون حل ميشوند، سرعت نقش حياتي ايفا نميکند. از سوي ديگر با افزايش سرعت سخت افزار کامپيوتر به صورت نمايي، زبانهاي برنامهنويسي منابع سختافزاري بيشتري در اختيار دارند. زماني که سرعت در برنامهنويسي اهميت پيدا ميکند، برنامهنويسان از روشهاي بهبود الگوريتمها يا تغيير ساختارهاي داده استفاده مي کنند. از جمله ترفندهاي برنامه نويسان براي افزايش سرعت، پيادهسازي توابع وابسته به زمان توسط زبانهايي نظير C است که سرعت بالاتري دارد. راهحل ديگر ترجمه کد پايتون به کد C با استفاده از ابزارهايي نظير Cython يا بايت کد جاوا توسط Jython است. به اين ترتيب، مهارت و تجربه برنامهنويس عامل موثري در افزايش سرعت برنامه است.
هرچند هنوز آموزش برنامه نويسي به دانشجويان مبتدي با يک زبان برنامهنويسي ساختيافته نظير پاسکال، C، C++ يا جاوا آغاز ميشود، پايتون داراي قابليتهايي است که آن را به انتخاب مناسبي براي آموزش به مبتديان تبديل ميکند. پايتون از دستورالعملي بسيار ساده و پايدار و کتابخانههاي استاندارد بزرگ برخوردار است. از همه اين مزايا که بگذريم، استفاده از پايتون در يک کلاس برنامهنويسي مبتدي به دانشجويان کمک ميکند تا بر مفاهيم و تواناييهاي مهم برنامهنويسي نظير تحليل مساله، طراحي الگوريتم مناسب براي حل مساله و طراحي نوعهاي دادهاي متمرکز شوند. سادگي دستورالعملهاي پايتون سبب ميشود دانشجويان در مدت زمان کوتاهتري با مفاهيم اوليه زبان نظير حلقهها و توابع آشنا شوند. انتخاب پايتون به عنوان زبان اول، دانشجويان را قادر ميسازد در اولين دوره برنامهنويسي مفاهيم پيشرفتهاي همچون شيگرايي و اشياي ساخته شده توسط کاربر را به کار گيرند.
از ديگر موفقيتهاي پايتون ميتوان به تاثير آن بر ديگر زبانهاي برنامهنويسي و نيز پيادهسازي برخي پروژههاي مهم با پايتون اشاره کرد. نسخههاي مختلفي از لينوکس، که از مهمترين آنها ميتوان به Red Hat اشاره کرد، تمام يا بخشي از نرمافزار نصب (installer) نرمافزارمديريت سيستم خود را با استفاده از پايتون پيادهسازي کردهاند. از جمله شرکتهاي بزرگي که از پايتون در پيادهسازي سيستمهاي خود بهره ميگيرند ميتوان به گوگل، ياهو و نور و شعبده بازي صنعتي (Industrial Light and Magic) اشاره کرد.
پايتون به عنوان زبان اسکريپتنويسي در تعدادي از معروفترين نرم افزارهاي پويا نمايي، گرافيک و بازيها مورد استفاده قرار گرفته است. نرمافزارهايي مانند Maya, Blender و GIMP از شناخته شده ترين کاربران پايتون هستند.
پايتون يکي از اجزاي استاندارد در بسياري از سيستم عاملها است. نسخههاي مختلف لينوکس، NetBSD, OpenBSD و Mac OS X است.
کد پايتون در مجموع در مقايسه با دو زبان ديگر قابل درکتراست و به ويژه مديريت دادههاي ورودي توسط کاربر و يا دادههاي خروجي به مراتب سادهتر است. اين امر موجب استقبال گسترده برنامهنويسان واسط گرافيکي کاربر از پايتون شده است و بسياري از اين برنامهنويسان امروزه از پايتون بجاي ديگر زبانها استفاده ميکنند. با اينوجود، براي محاسبات پيچيده يا بزرگ هنوزدر درجه اول از C++ و سپس از جاوا استفاده ميشود. گروهي از برنامهنويسان معتقدند که استفاده از پايتون در پروژههاي برنامهنويسي بزرگ، سبب پيچيدگي کد ميشود.
بهطور خلاصه ميتوان گفت برنامهنويسي و توسعه کد با استفاده از پايتون سريع و آسان است. سيستم ديناميک آن قادر است به سادگي خطاهاي برنامهنويسي را در زمان اجرا پيدا کند. توابع و کتابخانههاي ارائه شده همراه با اين سيستم بسيار غني هستند و کتابخانههاي کد باز نوشته شده توسط ديگر شرکتها، عملا هر نوع محاسباتي را ممکن ميسازند. قابليت حمل کدهاي نوشته شده توسط پايتون نيز بسيار بالاست. در مقايسه با پايتون، کد نويسي با استفاده از++ C و جاوا نسبتا دشوار است. ديباگ کردن در C++ شبيه يک کابوس، اما در جاوا ساده است. سرعت هر دو زبان و بخصوص++ C از پايتون بالاتر است. کتابخانههاي استاندارد جاوا بسيار گسترده ومفيد هستند اما در++ Cاز اين نظر محدوديتهاي بزرگي وجود دارد. قابليت حمل کد در C++ به مراتب کمتر اما در جاوا به مراتب بيشتر از پايتون است.
پايتون به توسعهدهندگان و برنامهنويسان اجازه ميدهد پيشنهادهاي خود براي افزايش قابليتهاي زبان را در وب سايتي که به همين منظور طراحي شده است ثبت کنند. براي ثبت پيشنهادهاي جديد و مشاهده پيشنهادهاي موجود ميتوانيد به نشاني زير مراجعه کنيد:
http://www.python.org/dev/peps/
پيشنهادهاي جديد در ليست نامههاي الکترونيکي به اين نشاني مورد بررسي قرار ميگيرد:
http://mail.python.org/mailman/listinfo/python-dev.
آويد افضل
منبع:جام جم
http://www.jamejamonline.ir/papertext.aspx?newsnum=100954533564
Ali_Sam
چهارشنبه 23 بهمن 1387, 00:03 صبح
پوسته امن موازي، يک دستور در چند سيستم
بسياري از ما از SSH براي ورود از راه دور به ماشينها استفاده ميکنيم، فايل کپي ميکنيم، کارهاي عمومي مديريت سيستم را انجام ميدهيم. اگر ميخواهيد کاراييتان را با SSH بالا ببريد، ميتوانيد از ابزاري استفاده کنيد که به شما اجازه ميدهد کاراييتان را افزايش بدهيد و يک دستور را بهطور همزمان در چند ماشين اجرا کنيد. Parallel ssh، Cluster SSH و ClusterIt به شما اجازه ميدهند دستورات را در يک پنجره پايانه وارد کنيد و به چند ماشين مختلف ارسال کنيد.
چرا به چنين ابزاري نياز داريد، در حالي که با استفاده از openSSH ميتوانيد فايلي از دستورات خود ايجاد کنيد و توي آن از دستور حلقه استفاده کنيد و در چند سيستم مختلف اجرا کنيد؟ خب، اگر اين دستورات بخواهند همزمان در چند ماشين اجرا شوند، يا اگر بخواهيم در بلند مدت، وظايفي را اجرا کنيم که زمانبر هستند، يا يک فايل را در چند سيستم ويرايش کنيم، در اين صورت، دستورات موازي بسيار سريعتر و کارآمدتر خواهند بود.
(Parallel ssh (pssh
پروژه pssh شامل نسخههاي موازياي از پوستههاي (pssh)، scp (pscp)، rsync (prsync) و kill (pnuke) است.
Pssh براي openSUSE آماده شده و در کتابخانه يونيورس اوبونتو موجود است. تمام دستورات ssh موازي شکل و ساختار command –h hosts-file را دارند، که hosts-file ليستي از ميزبانهاست که ميخواهيد دستور در آن اجرا شود. مثلا اولين دستور زير تاريخ را در p1 و p2 اجرا ميکند. آرگومان –l نام کاربري را مشخص ميکند که بايستي براي ورود به ماشين راه دور استفاده کرد.
cat hosts-file#
p1
p1
p2
p2
#pssh -h hosts-file -l ben date
[1] 21:12:55 [SUCCESS] p2 22
[2] 21:12:55 [SUCCESS] p1 22
# pssh -h hosts-file -l ben -P date
p2: Thu Oct 16 21:14:02 EST 2008
p2: [1] 21:13:00 [SUCCESS] p2 22
p1: Thu Sep 25 15:44:36 EST 2008
p1: [2] 21:13:00 [SUCCESS] p1 22
معمولا خروجي استاندارد ميزبانهاي راه دور به شما نشان داده نميشوند. انتخاب –P در آخرين تعامل، خروجي را در هر دو ميزبان راه دور نشان ميدهد. اگر شما از دستورات پيچيدهتري استفاده ميکنيد، احتمالا بخواهيد از –i استفاده کنيد تا خروجيهاي ميزبانها را گروهبندي شده ببينيد. همچنين ميتوانيد از –outdir استفاده کنيد تا مسير پوشهاي را که ميخواهيد براي ذخيره خروجي هر ميزبان راه دور استفاده شود، اعلام کنيد. خروجي هر ميزبان در فايل جداگانهاي همنام با ماشين ميزبان آن ذخيره ميشود.
ميتوانيد از –-timeout استفاده کنيد تا نشان دهيد که يک دستور چقدر ميتواند طول بکشد. بطور پيشفرض اين عدد 60 ثانيه است. اين بدين معني است که اگر دستور شما در طي 60 ثانيه به پايان نرسيد، pssh آن را خطا تلقي کرده و پيغام آن را بر ميگرداند، که در زير ميبينيد. ميتوانيد زمان اجراي هر دستور را افزايش دهيد تا از اين خطا جلوگيري کنيد.
# pssh -h hosts-file -l ben -i "sleep 65; date"
[1] 21:19:26 [FAILURE] p1 22 Timeout
[2] 21:19:26 [FAILURE] p2 22 (4, 'Interrupted system call')
دستور pscp همان –h و –l و -–timeout را ميگيرد و شامل --recursive هم ميشود تا از کپي عميق از ميزبان محلي نيز پشتيباني کند. در ادامه اين دستور، شما مسيرهاي محلي و راه دوري که ميخواهيد فايلتان را کپي کنيد، انتخاب ميکنيد، اولين دستور pscp در مثال زير، يک فايل را روي دو ماشين راه دور بهطور موازي ارسال ميکند. دستور sshاي که به دنبال آن ميآيد مشخص ميکند که آن فايل در p1 وجود دارد يا خير. با دانستن اينکه ميخواستيم يک دايرکتوري را کپي کنيم، ميتوانيم با افزودن –recursive از بروز خطا در سيستم جلوگيري کنيم.
$ mkdir example-tree
$ date > example-tree/df1.txt
$ date > example-tree/df2.txt
$ mkdir example-tree/subdir1
$ date > example-tree/subdir1/df3.txt
$ pscp -h hosts-file -l ben example-tree/df1.txt /tmp/df1.txt
[1] 21:28:36 [SUCCESS] p1 22
[2] 21:28:36 [SUCCESS] p2 22
$ ssh p1 "cat /tmp/df1.txt"
Thu Oct 16 21:27:25 EST 2008
$ pscp -h hosts-file -l ben example-tree /tmp/example-tree
...
python: Python/ceval.c:2918: set_exc_info: Assertion `frame != ((void *)0)' failed.
Aborted
$ pscp -h hosts-file -l ben --recursive example-tree /tmp/example-tree
[1] 21:29:57 [SUCCESS] p1 22
[2] 21:29:57 [SUCCESS] p2 22
$ ssh p1 "ls -l /tmp/example-tree"
total 24
-rw-r--r-- 1 ben ben 29 2008-09-25 16:01 df1.txt
-rw-r--r-- 1 ben ben 29 2008-09-25 16:01 df2.txt
drwxr-xr-x 2 ben ben 4096 2008-09-25 16:01 subdir1
نکته: ben نام کاربري فرضي است.
دستور prsync تنها چند تا از انتخابهاي rsync را با خود آورده است. بههمين خاطر، شما نميتوانيد از verbose (ارائه گزارش عملکرد) در سيستم استفاده کنيد. دستوري که در زير ميآيد دايرکتوري example-tree را روي سرور همخوان ميکند.
$ prsync -h hosts-file -l ben -a --recursive example-tree /tmp
محمدرضا قرباني
منبع:جام جم
Ali_Sam
چهارشنبه 23 بهمن 1387, 00:07 صبح
نگاه متفاوت از زاويههاي مختلف
همان طور كه ميدانيم، برنامهنويسي شاخههاي گوناگون و زمينههاي متفاوتي دارد. هر كدام از شاخههاي اصلي نيز ممكن است خود به چند زيرشاخه تقسيمبندي شود. هر برنامهنويس در هر زمينهاي كه فعاليت ميكند بايد به تمامي اهداف، امكانات و موانع كار خود آگاه باشد تا بتواند در نهايت محصولي كارا و مفيد عرضه كند.
از مهمترين و اصليترين شاخههاي برنامهنويسي ميتوان به برنامهنويسي تحت شبكه، تحت وب، برنامههاي مستقل رايانههاي شخصي و برنامهنويسي تلفنهاي همراه اشاره كرد. هر كدام از اين زمينهها با داشتن فاكتورهاي مهم و مورد نياز مربوط به خود توجه خاص خود را طلب ميكند. در ادامه سعي داريم نكاتي را كه در هر زمينه بيشتر بايد به آنها توجه داشت، به طور اجمالي بررسي و اين زمينهها را با هم مقايسه كنيم.
برنامههاي مستقل كاربردي
يك دسته از برنامهها هستند كه به صورت يك برنامه مستقل قابل اجرا روي يك رايانه عرضه ميشوند.
بخش عمدهاي از برنامههاي رايانهاي از اين دسته هستند. اينگونه برنامهها، بدون هيچ نوع نياز به ارتباط، به طور مستقل از ساير برنامهها ميتوانند در رايانه شخصي كاربر اجرا شده و به نيازهايي پاسخ دهد. هنگام طراحي چنين برنامههايي، بايد سيستمعامل مورد نظر و كامپايلر سازگار با آن سيستمعامل را كه بتواند زبان مورد استفاده ما را به برنامه اجرايي تبديل كند، انتخاب كنيم.
معمولا برنامهنويسها، سيستمعاملي را انتخاب ميكنند كه در بين كاربران محبوبتر بوده و استفاده بيشتري ميشود. زيرا به اين ترتيب به نياز عده بيشتري پاسخ داده خواهد شد. در حال حاضر سيستمعامل ويندوز در ميان ساير سيستمعاملها از محبوبيت بيشتري برخوردار بوده و كاربران بيشتري را به خود جلب كرده است.
يكي از مواردي كه برنامهنويس بايد به آن توجه كند ميزان مصرف حافظه و دراختيار گرفتن پردازنده و ديگر منابع سيستم است. هرچه برنامهها كمتر به منابع سيستم نياز داشته باشند و آنها را كمتر در اختيار بگيرند و در عين حال بتوانند به همه نيازهاي پيشبيني شده پاسخ بدهند، بهتر خواهند بود. برنامهنويس بايد توجه داشته باشد كه در برنامه خود حتيالامكان كمتر از منابع سختافزاري و نرمافزاري سيستم استفاده كند و در صورت در اختيار گرفتن آنها، بلافاصله بعد از استفاده و يا در زماني كه آن را نياز ندارد، رها كرده تا ديگر برنامهها نيز بتوانند در صورت نياز از آن بهرهمند شوند. يك راه براي رعايت اين مساله استفاده از حافظه به صورت ديناميك يا پويا است. زماني كه حافظهاي به صورت استاتيك به برنامهاي اختصاص داده ميشود، در تمام طول مدت اجراي برنامه در اختيار آن خواهد بود و رها نخواهد شد. اما بسياري از زبانهاي برنامهنويسي اين امكان را به ما ميدهند كه هر ميزان حافظه نياز داريم در زمان اجراي برنامه از سيستم طلب كنيم و زماني كه كارمان با آن تمام شد، آن را آزاد كنيم. به اين ترتيب برنامهكمترين ميزان ممكن از حافظه را در طول اجراي خود مصرف خواهد كرد.
از سوي ديگر بايد به سرعت اجراي برنامه توجه زيادي شود. ممكن است در صورت اشغال كمي حافظه بيشتر، كاربر را متوجه اين امر نسازد، اما كندي برنامه و كم بودن سرعت از ديد افراد پنهان نخواهد ماند. بنابراين به طور مثال اگر قرار است در طول اجراي برنامه هزاران بار حافظه گرفته و رها شود، بهتر است يك بار اين كار به صورت استاتيك انجام شود تا مجبور نباشيم يك سري دستورالعمل را هزاران بار اجرا كنيم.
مساله ديگري كه بايد به آن توجه شود، واسط گرافيكي برنامه است. اينكه ظاهر برنامه زيبا باشد و طراحي آن كاربر پسند بوده و كار با آن راحت باشد از مهمترين خصوصيات يك برنامه است.
اما بايد توجه داشت كه استفاده نابجا و بيش از حد امكانات گرافيكي يا در مواردي، امكانات چندرسانهاي موجب افزايش مصرف حافظه اصلي يا حافظه گرافيكي شده و ممكن است در سرعت اجراي برنامه تاثيرگذار باشد. اما حتيالامكان بايد كاربر را از نظر ظاهر برنامه راضي نگه داشته و شماي بيروني را طوري طراحي كنيم كه كاربر بتواند طريقه انجام بسياري از كارها در برنامه را با استفاده از ظاهر برنامه حدس بزند.
برنامهنويسي تحت وب
سرعت اجراي برنامه و سرعت پاسخگويي به كاربر مسالهاي است كه در همه زمينههاي برنامهنويسي بايد به آن توجه داشت. در برنامهنويسي تحت وب، سرعت پاسخگويي مستقيما با چند عامل در ارتباط است. كد برنامه و روشهاي به كار رفته در آنها همانطور كه در حالت قبل نيز در سرعت اجرا تاثير داشت در اين حالت نيز تاثيرگذار است. در كنار اين مساله، حجم اسناد وب نيز بايد تا حد امكان كم باشد تا انتقال فايلهاي مربوطه از طريق اينترنت زمان زيادي طول نكشد.
ممكن است برنامه تحت وب ما، كد برنامهنويسي زيادي نداشته باشد. اما از تصاوير گرافيكي حجيم استفاده كرده باشد. با توجه به محدود بودن سرعت انتقال در اينترنت، ممكن است تاخير در انتقال كامل فايلها حوصله كاربر را سر برده و وي را به بستن برنامه و انصراف از استفاده و مشاهده برنامه شما ترغيب كند.
در طراحي برنامههاي تحت وب بايد به دو مساله ديگر نيز توجه داشت. يكي اين كه كاربران ممكن است با نمايشگرهايي با وضوح و ابعاد مختلف به مشاهده سايتي بپردازند. ديگر آن كه به دليل وجود سيستم عاملهاي گوناگون و همچنين متفاوت بودن سليقههاي افراد در انتخاب مرورگر، ممكن است سايتي با مرورگرهاي مختلفي مشاهده شود. اين وظيفه طراح است كه برنامه را طوري طراحي كند كه اولا با مرورگرهاي مختلف مشكلي نداشته و در همه آنها تا حد ممكن بدون تغيير ظاهر شود و ثانيا انعطافپذيري لازم را به هنگام نمايش در ابعاد مختلف نمايشگر داشته باشد.
برنامهنويسي براي تلفنهمراه
امروزه يكي از پرطرفدارترين وسايل، تلفن همراه است كه به دليل اين محبوبيت، برنامهنويسي و توليد نرمافزار براي آن نيز از اهميت زيادي برخوردار است. انواع بسيار زياد و متنوعي از گوشيهاي تلفن همراه در بازار وجود دارند كه هر يك از خانواده بخصوصي هستند. اين گوشيها معمولا از سيستم عاملهاي مختلفي بهره ميگيرند.
برنامهنويسي كه در زمينه تلفنهاي همراه فعاليت ميكند بايد در نظر داشته باشد كه يك برنامه همواره روي همه گوشيها اجرا نخواهد شد و اين سازگاري مستقيما با نوع گوشي و سيستم عامل موجود در آن و پشتيباني سيستم عامل از زبان برنامه شما در ارتباط است. بهتر است برنامهنويس، زباني را انتخاب كند كه با سطح وسيعتري از سيستم عاملها سازگار بوده و از جانب گوشيهاي بيشتري پشتيباني شود. البته اين مساله مربوط به زماني است كه فردي بخواهد براي گستره بيشتري از مخاطبان برنامه بسازد. وگرنه بسياري از افراد تنها براي يك نوع گوشي خاص با سيستم عاملي مشخص برنامه مينويسند.
مساله ديگري كه در اين زمينه وجود دارد ابعاد نمايشگر است كه اين بار در مقايسه با برنامهسازي تحت وب از تنوع بيشتري برخوردار است. در اين حالت برنامهنويس چند راهحل خواهد داشت. يكي اين كه برنامه خود را در چند نسخه براي نمايشگرهايي با ابعاد مختلف بازنويسي كند. اين اولين راهحلي است كه ممكن است به نظر برسد، اما دو راه ديگر وجود دارد. يكي اين كه برنامه طوري نوشته شود كه مستقل از ابعاد نمايشگر، ظاهر خود را حفظ كرده و در برابر تغييرات ابعاد از نظر ظاهري از خود انعطافپذيري نشان دهد. ديگر آن كه پيش از اجراي بدنه اصلي برنامه، ابعاد نمايشگر تشخيص داده شود و بعد از آن به بخشي كه مربوط به آن ابعاد است پرش شود. در واقع نگارشهاي مختلف برنامه در قالب يك برنامه ارائه ميشوند و با توجه به نوع گوشي، نگارش مورد نظر فراخواني ميشود. در اين روش ممكن است نسبت به روش اول اندكي افزايش حجم داشته باشيم، اما در عوض تصميمگيري و انتخاب نگارش برنامه را از كاربر به برنامه تغيير دادهايم كه اين موجب انعطافپذيري بيشتر برنامه خواهد شد.
برنامهنويسي تحت شبكه
در شبكه سرعت ارتباطات و اجراي برنامهها از اينترنت بيشتر اما از سرعت اجراي برنامههاي مستقل كاربردي قابل اجرا در يك سيستم كمتر است. طبيعي است كه در طراحي اين نوع برنامهها بايد به هر دو دسته خصوصيات برنامههاي تحت وب و برنامههاي مستقل تواما توجه داشت و بسته به نوع نياز به آن ويژگي اهميت داد.
با توجه به شكل طراحي شبكه و نوع آن، همچنين رسانههاي انتقال و سرعت آنها بايد برنامهها طوري طراحي شوند كه سرعت برنامههاي كاربردي مستقل و انعطافپذيري برنامههاي تحت وب را داشته باشند. ضمن اين كه ميتوان براي برنامهنويسي تحت شبكه، در مواردي مانند برنامهنويسي تحت وب عمل كرد. يعني فرض را بر اين گذاشت كه قرار است براي وب برنامهاي طراحي كنيم كه كاربران با اتصال به سرويسدهنده از آن استفاده ميكنند.
با اين تفاوت كه سرويسدهنده و كاربران همگي اعضاي يك شبكه داخلي هستند.
زماني كه به همه جنبههاي برنامهنويسي توجه كافي شود، در نهايت به برنامهاي خواهيم رسيد كه از همه نظر مخاطبان خاص خود را راضي نگه خواهد داشت و پاسخگوي سليقه و نياز آنها خواهد بود.
پارسا ستودهنيا
منبع:جام جم
Ali_Sam
چهارشنبه 23 بهمن 1387, 00:20 صبح
زبان نوراني شركتSUN
تقريبا همه ما شركت بزرگ Sun Microsystems را به خاطر 2محصول مشهور و توانمندش يعني زبان برنامهنويسي جاوا (Java) و سيستمعامل سولاريس (Solaris) بخوبي ميشناسيم. زبان جاوا زباني بسيار قدرتمند است كه پروژه طراحي آن از سال 1991 آغاز و درسال1995 به طور رسمي به دنياي رايانه عرضه شد. با اينكه اين زبان از جمله زبانهاي قديمي به شمار ميرود، اما نسبت به زبانهايي چون بيسيك و++ C جديدتر است.
پروژه تحقيقاتي اين زبان Green نام داشت. نويسنده اصلي آن شخصي به نام James Gosling بود كه ابتدا اين زبان را Oak ناميد كه در لغت به معناي بلوط است، اما به دليل برخي مشكلات، از فهرستي از نامهاي تصادفي، جاوا براي اين زبان برگزيده شد. اين پروژه در شرف لغو شدن بود؛ اما با افزايش تواناييهاي آن بالاخره بهطور رسمي به دنيا معرفي شد.
نگاه كلي
جاوا زباني شيءگرا و شبيه زبان++ C است. زيرا در ابتداي طراحي آن، هدف آن بود كه زباني شبيه++ C با قابليتهاي متفاوت عرضه شود. اين زبان مدل شيءگرايي آسانتري داشته و از اين جنبه فراگيري آن از++ C سادهتر، اما قابليتهاي سطح پايين و نزديك به زبان سختافزار در آن كمتر است.
در بسياري از زبانهاي برنامهنويسي، مديريت حافظه به عهده برنامهنويس است، اما يكي از قابليتهاي اصلي جاوا آن است كه مديريت حافظه در آن به صورت خودكار انجام ميشود. يكي از بزرگترين خصوصيات زبان جاوا آن است كه با وجود كامپايلري بودن، وابسته به سيستمعامل خاصي نيست و قابليت اجرا روي هر رايانه با هر سيستمعاملي را دارد. در واقع كامپايلر جاوا، كدهاي برنامه را مستقيما به زبان ماشين حقيقي تبديل نميكند، بلكه آن را به يك زبان مياني تبديل ميكند كه در واقع زبان يك ماشين مجازي به نام (Java Virtual Machine)JVM است. اين ماشين مجازي روي هر رايانه با هر سيستمعاملي كه نصب باشد، قابليت اجراي برنامههاي جاوا را خواهد داشت.
جاوا براي نوشتن انواع برنامهها مناسب بوده و ضريب اطمينان عملكرد برنامههاي نوشته شده با آن بسيار بالاست. ميتوان از جاوا به عنوان يك زبان مطرح دنيا نام برد كه هم ميتوان با آن نرمافزارهاي كاربردي معمولي در مقياس كوچك نوشت، هم پروژههاي بزرگ و سنگين سازماني انجام داد، هم از توانايي آن در برنامههاي تحت وب بهره گرفت و هم از آن براي نوشتن برنامه براي سطح وسيعي از دستگاهها و تجهيزات همراه از قبيل تلفنهاي همراه، Pockatpc و... استفاده كرد.
اپلت
اپلت (Applet) به يك بخش نرمافزاري گفته ميشود كه ميتواند در متن برنامه ديگر قرار گرفته و اجرا شود Applet . به معني برنامه كوچك بوده، در اصل تركيبي از دو كلمهApplication وlet استlet . در انگليسي پسوندي است كه براي «كوچك» به كار ميرود (همانند پسوند «چه» در باغچه در اتصال به كلمه باغ). اپلتها امكانات فراواني براي نوشتن برنامههاي تحت وب در اختيار برنامهنويسان قرار ميدهند. اين خصوصيتي است كه جاوا را از بسياري از زبانهاي برنامهنويسي متمايز ميسازد.
البته برخلاف جاوا اسكريپت كه براي اجرا نياز به هيچ نوع نرمافزار اضافه نداشت، برنامههاي تحت وبي كه با استفاده از اپلتهاي جاوا نوشته شدهاند نياز به ماشين مجازي جاوا نرمافزار(JVM) دارند و بدون آن قادر به اجرا نيستند. (اگر به خاطر داشته باشيد پيش از اين گفته بوديم كه جاوا و جاوا اسكريپت دو زبان كاملا متفاوت عرضه شده از دو شركت مختلف هستند و تنها از نظر نام و تا حدودي شكل ظاهري كدها شبيه به يكديگرند)
اپلتها شبيه فناوري اكتيوايكس (Activex) شركت مايكروسافت هستند و برنامهنويس را قادر ميسازند تا امكانات جديدي به مرورگر كاربر اضافه كند. البته اپلتها بهدليل آنكه در محيطي تحتعنوان Sand box اجرا ميشوند امنيت دارند اما اكتيوايكس چنين امنيتي ندارد.
همانطور كه قبلا نيز اشاره كرديم سرويسدهنده وب از طريق دستوراتHTML كه در صفحات وب وجود دارد، تعامل بين سرويسدهنده و كاربر را كنترل ميكند. اين كار در سايتهايي كه مشتريان زيادي دارد، سرويسدهنده وب را دچار مشكل ميكند. بهتر است كنترل توسط مرورگر انجام شود و سرويسدهنده نقش پشتيبان را داشته باشد.
ضمنا رايانه كاربران معمولا بيكار است و منتظر پاسخگويي سرويسدهنده ميماند. يك روش حل اين مساله آن است كه بعضي از تعاملهاي سرويسدهنده در محيط مرورگر انجام شود. به جاي انتقال دادههاي HTML به سرويسدهنده، سرويسدهنده ميتواند يك برنامه كوچك را به مرورگر بفرستد و برنامه كاربردي را در ماشين مجازي اجرا كند. به اين ترتيب حجم اطلاعاتي كه بايد از سرويسدهنده به مرورگر ارسال شود، كاهش مييابد.
سرعت و كارايي
سرعت پايين برنامههاي جاوا در محيط اجرايشان ملاك خوبي براي كارايي آن نيست، زيرا در محيط وب كندي بيشتر به علت شبكه است و در گام نخست بايد سربار شبكه را از روي برنامهها برداشت، وگرنه در برنامههاي كاربردي بهينهسازيهاي بسياري به وجود آمده است كه موجب شده در آخرين آزمون كارايي، يك برنامه جاوا از 8/0 تا 3/1 همان برنامه در++ c سرعت داشته باشد كه 3/1 مربوط به بخش واسط كاربري (GUI) و سرعت 8/0 آن مربوط به تخليه حافظه(Garbage Collection) ميشده است و تاكنون هيچ الگوريتمي نتوانسته است در سرعت از الگوريتم تخليه حافظه جاوا پيشي بگيرد.
ضمنا ثابت شده است كه تجربه برنامهنويسي كه برنامهاي را مينويسد از انتخاب زباني كه برنامه با آن نوشته ميشود تاثير بيشتري در كارايي دارد و اين بدان معناست كه كارايي يك برنامه را برنامهنويس و روشهاي به كار رفته در برنامه وي مشخص ميكند و نه زباني كه با آن برنامه مينويسد. حذف اشارهگرها در جاوا به دليل مشكلاتي بوده است كه آنها در طول تاريخ استفادهشان به وجود آوردهاند. اگرچه اين موارد در برنامههاي سيستمي لازم به نظر ميرسد اما در محيطهاي تحت وب كه بستر اصلي جاوا است ميتوانند اثراتي به مراتب شديدتر نسبت به آنچه در برنامههاي سيستمي دارند داشته باشند و باعث ميشود كه توجه برنامهنويسان از مسائلي چون كارايي، قابليت اطمينان و مقياسپذيري برنامه به تنظيم اشارهگرها معطوف شود.
مقايسه با++ C
در زباني مانند++ C مفهومي به نام وراثت چندگانه وجود دارد كه باعث ايجاد مشكلاتي اساسي ميشد كه اكثر برنامهنويسان++ C از آن دوري ميكرده و ميكنند. ولي قابليت چندريختي (Polymerphism) يك كلاس از لحاظ شيءگرايي بسيار مهم بوده و بنابراين توجيهي براي وجود وراثت چندگانه را فراهم ميكرد.
در جاوا با وارد شدن مفهومي به نام Interface ، ديگر نيازي به وجود وراثت چندگانه احساس نشد و اين مفهوم از زبان جاوا حذف شد. درحالحاضر طراحان برنامهها حتي به اين نتيجه رسيدهاند كه وراثت معمولي هم باعث ايجاد مشكل بوده و تا آنجايي كه ميشود بايد از مفهومي به نام تركيب (Composition) استفاده كرد.
ضعف جاوا
مهمترين اشكالي كه برنامهنويسان ساير زبانها به جاوا ميگيرند سرعت اجرايي بسيار پايين آن است. يك برنامه جاوا به صورت بايت كد(byte code) است كه كد زبان ماشين مجازي است و بايد در آن محيط اجرا شود. به همين دليل سرعت اجراي پاييني در مقابل زبانهايي چون++ C دارد. به عنوان مثال ممكن است يك برنامه به زبان++ Cبهطور متوسط تا 10 برابر سريعتر از برنامه مشابه جاوا اجرا شود.
جاوا برخلاف شيءگرا بودن، در بخشي از قسمتها براي ايجاد انعطاف بيشتر، برخي از اصول شيءگرايي را ناديده گرفته است كه ميتوان آن را نيز از نقاط ضعفش برشمرد.
همان طور كه پيش از اين نيز اشاره كرديم، زبان جاوا نسبت به++ C سادهتر است و به همين دليل آموزش دادن و آموختن آن نيز راحتتر است كه البته به دليل به وجود آمدن اين سادگيها بسياري از نقاط قوتي كه در++ C وجود داشتهاند در جاوا حذف شدهاند كه مهمترين آن مفهوم اشارهگر (Pointer) است كه به آن اشاره كرديم. ضمنا با توجه به اين كه جاوا زباني مستقل از سيستمعامل است، استفاده از توابع API سيستمعامل در آن امكانپذير نيست.
منبع:جام جم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.