PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : تفاوتها و شباهتهای c++,java



آبجی
4th February 2010, 09:42 PM
مقدمه:
زبان C پس از تولد ، شوك بزرگي به دنياي كامپيوتر وارد كرد . اين زبانبطور
اساسي شيوه هاي تفكر و دستيابي به برنامه نويسي كامپيوتر را دگرگون ساخت . تولد C
ناشي از نياز به يك زبان ساخت يافته ، موثر و سطح بالا بعنوان جايگزينيبراي
كدهاي اسمبلي و پياده سازي برنامه نويسي سيستم بود . هنگاميكه يك زبانبرنامه
نويسي جديد متولد ميشود ، مقايسه ها شروع خواهد شد . مقايسه ها براساسمعيارهاي
زير انجام مي گيرند :
* راحتي كاربري در مقايسه با قدرتمندي زبانبرنامه نويسي
* ايمني در مقايسه با سطح كارآيي
* استحكام در مقايسه باتوسعه پذيري
قبل از ظهور زبان C برنامه نويسان با زبانهايي كار مي كردند كهقدرتبهينه سازي يك مجموعه خاص از خصايص را داشتند . بعنوان مثال هنگاميكه از فرترن براي نوشتن برنامه هاي موثر در كاربردهاي علمي استفاده مي كنيم ، برنامههايحاصله براي كدهاي سيستم چندان مناسب نيست. زبان بيسيك با اينكه براحتيآموختهمي شود ، اما قدرت زيادي نداشته و عدم ساخت يافتگي آن در برنامه هايبزرگ مشكلآفرين خواهد شد . از زبان اسمبلي براي توليد برنامه هاي كاملا" موثر استفادهمي شود ، اما آموزش و كار با اين زبان بسيار مشكل است . بعلاوه اشكالزداييكدهاي اسمبلي بسيار طاقت فرساست . مشكل اصلي ديگر اين بود كه زبانهاياوليه برنامه نويسي نظير بيسيك ، كوبولو فرترن براساس اصول ساخت يافته طراحينشده بودند . اين زبانها از Goto عنوانابزارهاي اوليه كنترل برنامه استفادهمي كردند . در نتيجه ، برنامه هاي نوشته
شده با اين زبانها توليد باصطلاح " كدهاي اسپاگتي "(spaghetti code() مي كردندمنظور مجموعه اي در هم تنيده ازپرشها و شاخه هاي شرطي است كه درك يك برنامهطولاني را ناممكن مي سازد . اگر چهزبانهايي نظير پاسكال ، ساخت يافته هستنداما فاقد كارايي لازم بوده و جنبه هاي ضروري براي كاربرد آنها در طيف وسيعي ازبرنامه ها وجود ندارد . ( بخصوص ويرايش پاسكال) استاندارد فاقد ابزارهاي كافيبراي استفاده در سطح كدهاي سيستم بود ) تا قبل از ابداع زبان C )، زبان ديگري قدرت نداشت تا خصلتهاي متضادي كه درزبانهاي قبلي مشاهده مي شد، را يكجا گردآوري كند . نياز به وجود يك چنين زبانيشديدا" احساس ميشد. در اوايل دهه 1970 ميلادي ، انقلاب رايانه اي در حال شكلگيريبود و تقاضا براي انواع نرم افزارها فشار زيادي روي برنامه نويسان وتواناييهايايشان اعمال ميكرد. درمراكز آموزشي تلاش مضاعفي براي ايجاد يك زبانبرنامه نويسيبرتر انجام مي گرفت . اما شايد از همه مهمتر توليد و عرضه انبوهسخت افزار
كامپيوتري بود كه بعنوان يك نيروي ثانويه روي زبانهاي برنامه نويسيعمل ميكرد. ديگر رايانه ها و اسرار دروني آنها پشت درهاي بسته نگهداري نمي شد . براي اولينبار بود كه برنامه نويسان واقعا" دسترسي نامحدودي به اسرار ماشينهايخود پيدانمودند . اين امر زمينه تجربيات آزادانه را بوجود آورد . همچنينبرنامه نويسانتوانستند ابزارهاي مورد نيازشان را ايجاد نمايند .
براي بررسي تاريخچه بايد به سال 1967 بازگرديم که مارتين ريچاردز زبان BCPL را براي نوشتن نرم افزارهاي سيستم عامل و کامپايلر در دانشگاه کمبريج ابداع کرد. سپس در سال 1970 کن تامپسون زبان B را بر مبناي ويژگيهاي زبان BCPL نوشت و از آن براي ايجاد اولين نسخه هاي سيستم عامل Unix در آزمايشگاههاي بل استفاده کرد. زبان C در سال 1972 توسط دنيس ريچي از روي زبان B و BCPL در آزمايشگاه بل ساخته شد و ويژگيهاي جديدي همچون نظارت بر نوع داده ها نيز به آن اضافه شد. ريچي از اين زبان براي ايجاد سيستم عامل Unix استفاده کرد اما بعدها اکثر سيستم عاملهاي ديگر نيز با همين زبان نوشته شدند. اين زبان با سرعت بسياري گسترش يافت و چاپ کتاب "The C Programming Language" در سال 1978 توسط کرنيگان و ريچي باعث رشد روزافزون اين زبان در جهان شد.
متاسفانه استفاده گسترده اين زبان در انواع کامپيوترها و سخت افزارهاي مختلف باعث شد که نسخه هاي مختلفي از اين زبان بوجود آيد که با يکديگر ناسازگار بودند. در سال 1983 انستيتوي ملي استاندارد آمريکا (ANSI) کميته اي موسوم به X3J11 را را مامور کرد تا يک تعريف فاقد ابهام و مستقل از ماشين را از اين زبان تدوين نمايد.در سال 1989 اين استاندارد تحت عنوان ANSI C به تصويب رسيد و سپس در سال 1990، سازمان استانداردهاي بين المللي (ISO) نيز اين استاندارد را پذيرفت و مستندات مشترک آنها تحت عنوان ANSI/ISO C منتشر گرديد.
با ظهور زبان C ، زمينهجهشهاي بزرگ در زبانهاي برنامه نويسي مهيا بسياري معتقدند كهايجاد زبان C راهگشاي دوران جديدي در زبانهاي برنامه نويسيبوده است . اين زبانبطور موفقيت آميزي تناقضهاي موجود در زبان هاي برنامه نويسيقبلي را مرتفع نمود . نتيجه فرآيند ايجاد زبان C ، يك زبان قدرتمند ، كارا وساخت يافته بود كهبراحتي قابل آموزش و فراگيري بود . اين زبان يك ويژگي غيرمحسوس اما مهم داشت : زبان C ، زبان برنامه نويسان بود . قبل از ابداع زبان C زبانهاي برنامه نويسييا جنبه هاي آموزشي داشته يا براي كارهاي اداري طراحيميشد . اما زبان C چيزديگري بود . اين زبان توسط برنامه نويسان واقعي و درگيربا كارهاي جدي ، طراحيو پياده سازي شده و توسعه يافت . جنبه هاي مختلف اينزبان توسط افرادي كه باخود زبان سر و كار داشته و برنامه نويسي مي كردند موردبررسي ، آزمايش و تفكر وتفكر مجدد قرار گرفته بود .
اصل اين فرآيند هم زبانيبود كه برنامه نويسان آنرا دوست داشتند. در حقيقت زبان C بسرعت مورد توجهبرنامه نويسان قرار گرفت تاجايي كه برنامه نويسان نسبت به C تعصب خاصي پيدانمودند . اين زبان مقبوليت ومحبوبيت زيادي در بين برنامه نويسان يافت . بطورخلاصه زبان C توسط برنامهنويسان و براي برنامه نويسان طراحي شده است .
نياز به++C طي دهه 1970 واوايل دهه 80 ميلادي زبان C نگين انگشتري برنامه نويسان بود و
هنوز هم در سطحوسيعي مورد استفاده قرار مي گيرد . از آنجاييكه C يك زبان موفقو سودمند بوده ،ممكن است بپرسيد چه نيازي به زبانهاي جديدتر وجود داشته است . پاسخ شما يك كلمهيعني پيچيدگي (Complexity) است . طي تاريخ كوتاه برنامه نويسيپيچيدگي فزايندهبرنامه ها نياز براي شيوه هاي بهتر مديريت پيچيدگي را بوجودآورده است . ++C پاسخي است به اين نياز مديريت پيچيدگي برنامه ها كه زمينه اصليپيدايش++C بودهاست . شيوه هاي برنامه نويسي از زمان اختراع رايانه تاكنون بطور قابل توجهيتغييرنموده اند . بعنوان مثال ، هنگاميكه رايانه ها اختراع شدند ، برنامهنويسي بااستفاده از دستور العملهاي باينري (Binary) ماشين انجام مي گرفت . ماداميكه برنامه ها شامل حدود چند دستور العمل بود ، اين روش كارآيي داشت .
بموازات رشد برنامه ها زبان اسمبلي ابداع شد تا برنامه نويسان بتوانند برنامههايبزرگتر و پيچيده تر را با استفاده از نشانه هايي كه معرف دستورالعملهايماشينبودند ، بنويسند . اما پيشرفت و رشد برنامه ها همچنان ادامه يافت وزبانهاي سطحبالايي معرفي شدند كه ابزارهاي مناسب براي مديريت پيچيدگي روزافزونبرنامه ها رادر اختيار برنامه نويسان قرار مي دادند .
اولين زبان مطرح دراين زمينه فرترن بود . اگر چه فرترن اولين گام در اين مسير بود، اما زباني استكه توسط آن برنامه هاي تميز و سهل الادراك نوشته مي شود.
در دهه 1960 ميلاديبرنامه نويسي ساخت يافته مطرح شد . با استفاده از زبانهايساخت يافته، براياولين بار امكان راحت نوشتن برنامه هاي بسيار پيچيده بوجودآمد . اما حتي باوجود روشهاي برنامه نويسي ساخت يافته ، هنگاميكه يك پروژه بهاندازه معيني ميرسيد ، پيچيدگي آن از توان مديريت برنامه نويس خارج مي شد . دراوائل دهه 1980ميلادي بسياري از پروژه هاي مديريت برنامه نويسي از مرزهايبرنامه نويسي ساختيافته گذشتند . براي حل اين قبيل مشكلات ، يك روش نوينبرنامه نويسي ابداع شد . اين روش را برنامه نويسي شي گرا يا باختصار oop مي نامند .
توصيف مختصراين روش عبارت استاز : oop يك نوع روش شناسي برنامه نويسي است كهامكان سازماندهي برنامه هايپيچيده از طريق بهره گيري از سه روش : وراثت ، كپسولسازي و چند شكلي ، راايجاد مي كند . در تحليل نهايي ، اگر چه C بزرگترين و مهمترين زبان برنامهنويسي جهان استاما محدوديتهايي در مديريت پيچيدگي برنامه ها دارد . هنگاميكهيك برنامه ازمحدوده 25000 تا 100000 خط از كدها تجاوز نمايد، آنچنان پيچيده ميشود كه دركآن بعنوان يك برنامه كلي ناممكن خواهد شد. ++C اين محدوديت را ازبين برده وبه برنامه نويس كمك مي كند تا برنامه هايي از اين بزرگتر را نيز دركو مديريتنمايد.
++C در سال 1979 ميلادي توسط Bjarne stoustrup هنگاميكه درآزمايشگاه بل در Marry Hill ايالت New jersy مشغول كار بود ، ابداع شد . او درابتدا اين زبانجديد را (C with classes) ناميد . اما در سال 1983 ميلادي ناماين زبان جديد به ++ Cتغيير يافت++C. تداوم زبان C بود كه جنبه هاي oop نيز بهآن اضافه مي شد. از آنجايي كه زبان++C براساس زبان C شكل گرفته ، در بر گيرندهكليه جنبه هاخسلتها (attributes) و مزاياي زبان C مي باشد . اين عوامل دلايلقاطعي برايموفقيت حتمي++C عنوان يك زبان برنامه نويسي هستند . ابداع++C درحقيقت تلاشيبراي ايجاد يك زبان كاملا" جديد برنامه نويسي نبود. در حقيقت پروژه++C منجر بهافزايش تواناييهاي زبان موفق C شد . چون++C از ابتداي تولدتاكنون داراي روايتهاي گوناگوني شده است ، در حالحاضر در تلاش استاندارد نمودناين زبان هستند.
با گسترش شبکه و اينترنت، نياز به زباني احساس شد که برنامه هاي آن بتوانند برروي هر ماشين و هر سيستم عامل دلخواهي اجرا گردد. شرکت سان مايکروسيستمز در سال 1995 ميلادي زبان Java را برمبناي C و ++C ايجاد کرد که هم اکنون از آن در سطح وسيعي استفاده مي شود و برنامه هاي نوشته شده به آن برروي هر کامپيوتري که از Java پشتيباني کند(تقريبا تمام سيستمهاي شناخته شده) قابل اجرا مي باشد. شرکت مايکروسافت در رقابت با شرکت سان، در سال 2002 زبان جديدي بنام #C(سي شارپ) را ارائه داد که رقيبي براي Java بشمار مي رود.



زمينه هاي پيدايش جاوا

تاريخچه زبانهاي برنامه نويسي بشرح زير است : زبان B منجر به ظهور زبان C و C
زمينه پيدايش C++ شد و در نهايت زبان جاوامتولد شد . درك زبان جاوا مستلزم :
درك زمينه هاي لازم براي ايجاد جاوا ،نيروهايي كه اين زبان را شكل داده اند و
مشخصاتي است كه اين زبان از اسلاف خودبه ارث برده است . نظير ساير زبانهاي
برنامه نويسي موفق ، جاوا نيز عناصر بارثبرده از اسلاف خود را با ايده هاي
ابتكاري كه ناشي از محيط منحصر بفرد اين زبانبوده درهم آميخته است . فصول بعدي
جنبه هاي عملي زبان جاوا شامل دستور زبان (syntax) و كتابخانه ها (libraries)
و كاربردهاي جاوا را توصيف مي كند . فعلا" چگونگي و علت ظهور جاوا و اهميت آن
را بررسي مي كنيم .
اگر چه جاوا تفكيكناپذيري با محيط هاي همزمان اينترنت پيوستگي دارد ، اما
بخاطر بسپاريد كه جاواقبل از هر چيز يك زبان برنامه نويسي است . ابداعات و
پيشرفت ها در زبانهايبرنامه نويسي كامپيوتر بدو دليل بروز مي كنند :
- تطابق با تغييرات محيط ها وكاربردها .
- ايجاد پالايش و پيشرفت در هنر برنامه نويسي .

آبجی
4th February 2010, 09:43 PM
مفهوم Object ( شيء) و خصوصيات آن
ما چه چيزهايي را Object مي‌گوييم. هر چيزي كه از خود "وجود" داشته باشد و به واسطه اين "وجود،" ما بتوانيم آن را درك كنيم، بشناسيم يا به عنوان يك موجود مستقل با آن ارتباط برقرار كنيم Object ناميده مي‌شود؛ مثلاً، ميز، ديوار، كامپيوتر، يا يك ويديوي Sony x50 و... .
نكته بسيار مهم كه بايد در نظر بگيريم اين است كه Objectها لزوماً قابل لمس (Tangible) نيستند؛ براي نمونه در نظر بگيريد كه به فروشگاهي مي‌رويد و يك "خريد" انجام مي‌دهيد. "خريد" هم يك Object به حساب مي‌آيد، زيرا چيزي است كه وجود دارد و به عنوان يك چيز مستقل قابل درك مي‌باشد.
شيي ء کليدي ترين مفهوم برنامه نويسي شي گرا است هر شي ء يک حالت و رفتار دارد و برنامه عبارت است از بر هم کنش بين اشياء . حالت يک شي ء عبارت است از متغيرهاي عناصر داده اي شييء و مقدار آنها . رفتار يک شي ء را متدهاي آن تعيين مي کند . شيء در واقع مقداري کد است که کار خاصيتي انجام مي دهد .
هر شيء کپسولي است از مقداري متغير و کد که کار نگهداري و به روز در آوردن آنها را ساده مي کند . معمولاً درون يک شيء از دسترس دنياي خارج به دور است و براي کار با آن بايد از ارسال پيام استفاده کرد . مزيتش آن است که کاربر براي کار با آن هيچ نيازي به دانستن مکانيزم هاي دروني آن ندارد و فقط بايد ساختار پيام ها را بداند . معمولاً ساختار پيام ها در اشياء مختلف يکسان است . در دنياي واقعي هم وضع به همين منوال است مثلاً براي استفاده از يک تلويزيون شما هيچ نيازي به آشنايي با پيچيدگيهاي درون آن نداريد فقط کافي است بدانيد که بايد آن را به برق زده و روشن کنيد و يک کانال را انتخاب کنيد . کلاس در واقع الگويي است براي ايجاد شيء .

آبجی
4th February 2010, 09:44 PM
Class و Objectهاي هر Class
دستگاه ويديوي Sony x50 را به ياد آوريد. آيا ممكن است در جهان يك ويديوي Sony x50 وجود داشته باشد كه ظاهر و طرز كار يا امكاناتي كه دارد، با ديگران تفاوت داشته باشد؟ اگر چنين باشد ما ديگر آن را يك Sony x50 خطاب نمي‌كنيم، چرا كه مي‌دانيم همه Sony x50 ها "بايد" مثل هم باشند، زيرا همه از يك رده، خانواده، يا اصطلاحاً يك Class هستند. وقتي كه در كارخانه Sony طرح ويديوي x50 را به دست مي‌آورند و در آن طرح همه خصوصيات و قابليتهاي سيستم مزبور را در نظر مي‌گيرند، در واقع Class اين ويديو را طراحي مي‌كنند و طبعاً هر ويديويي كه از روي اين طرح ساخته شود، بدون استثناي، تمام خصوصيات پيشبيني شده در اين طرح را خواهد داشت.
هر ويديويي كه از روي اين طرح به وجود مي‌آيد، يك Object از Class ، ويديوي Sony x50 به حساب مي‌آيد.
يك نكته بسيار مهم كه در مورد Objectهاي هر Class مطرح است، مساله استقلال اين Objectها مي‌باشد. فرض كنيد دو دستگاه ويديوي Sony x50 در منزل شما وجود دارد. هر دو اين ويديوها از Objectهاي يك كلاس به حساب مي‌آيند، ولي رفتارهايي كه از خود بروز مي‌دهند، كاملا مستقل از يكديگر است؛ مثلا زدن دكمه Play يكي از آنها سبب روشن شدن ديگري نمي‌شود. البته بايد توجه داشت كه در برنامه سازي شيء گرا، همه برنامه‌نويسان اين موارد را رعايت نمي‌كنند و از طرف ديگر هم بعضي زبانهاي برنامه‌سازي امكاناتي در اختيار برنامه‌نويسان قرار مي‌دهند كه ناقض بعضي از مفاهيم شيء گرايي مي‌باشند. نمونه اين موارد را خواهيم ديد.

محدود کننده اعضاي يک کلاس
public –> بدون هيچ محدوديتي
Private –> براي ساير اعضاي يک کلاس در دسترس هستند و کاربر نمي تواند به آن دسترسي داشته باشد.



تاريخچه زبان هاي شيئ گرا
Simula I و Simula67 اولين زبان هاي شيئ گرا که در سال 1965 توسط KristenNygard و Ole-john Dahl در نروژ پديد آمد.
Small Talk در سال 1970
در سال هاي 1980 تا 1983 وارد زبان C شد و ++C شکل گرفت.
و اکنون C#, C++, JAVA, ……

آبجی
4th February 2010, 09:44 PM
وراثت(Inheritance)
ارث بري در طبيعت هم وجود دارد . هر فرزند خصوصيات والد خود را به ارث مي برد و يک خصوصيات اضافه تري نيز دارد.کلاس پايه را Base Class و کلاس مشتق شده را Drived Class مي نامند . نحوه ي ارث بري هم به 2 گونه Public يا Private مي باشد.
Inheritance از جمله مفاهيم بسيار مهم در شيء گرايي به حساب مي‌آيد. براي درك هر چه بهتر اين مفهوم به مثال زير توجه فرماييد:
در جهان وسايل نقليه مختلفي وجود دارند كه هر يك به نحوي به ما در جابه‌جايي كمك مي‌كنند. هواپيما، قطار، ماشين، كشتي، موتور‌سيكلت، دوچرخه و ... همه از وسايل نقليه به شمار مي‌آيند. يك نكته در اينجا پر واضح است و آن اينكه اگر از اين ديدگاه بالا بنگريم، جز وسيله نقليه بودن، اين وسايل ربط خاصي به هم ندارند. پس چه چيز سبب مي‌شود تا ما همه را وسيله نقليه بخوانيم؟ پاسخ بسيار ساده است: Abstraction؛ يعني تمام خصوصيات غير مشترك را كنار گذاشتن و قرار دادن اشياء در يك دسته به خاطر وسيله نقليه بودن (خصوصيت مشترك.)
نتيجه اين مثال اين است كه Inheritance با Abstraction رابطه مستقيم دارد. حال با يك ديد برنامه‌نويسي مساله را بيشتر باز مي‌كنيم. يك Class به نام Vehicle در نظر بگيريد. تمام وسايلي كه در بالا نام برده شد، Objectهايي از اين Class به حساب مي‌آيند. در برنامه نويسي به اينگونه Classها كه در بالاترين سطح Abstraction قرار مي’گيرند، Base Class يا Super Class گفته مي‌شود. از يك ديدگاه ديگر مي‌توان وسايل نامبرده را به سه دسته هوايي، زميني و دريايي تقسيم كرد. اينجاست كه Objectها در دسته‌هاي مختلف قرار مي‌گيرند. توجه داشته باشيد كه همچنان بعد از اين تقسيم‌بندي جديد، تغييري در دسته‌بندي اول به وجود نمي‌آيد. اگر دقت كنيد متوجه مي‌شويد كه وسايل نقليه زميني، وسايل نقليه هوايي و وسايل نقليه دريايي هر سه زير‌مجموعه‌هاي وسايل نقليه هستند. به اينها Derived Class يا Sub Classهاي Vehicle مي‌گويند.
تا هر عمقي كه بخواهيم مي‌توانيم اين سلسله مراتب را ادامه دهيم. از آن جهت آن را وراثت مي‌خوانيم كه هر Sub Class تمام خصوصيات Super Class خود را داراست؛ مثلاً Sub Class اتومبيل BMW زير‌مجموعه Class اتومبيلهاي سواري به حساب مي‌آيد، پس تمام خصوصياتي را كه براي يك اتومبيل سواري تعريف مي‌شود، داراست. البته علاوه بر آن خصوصيات مشترك، ويژگيهاي خاص خود را نيز دارا مي‌باشد. اين روند را مي‌توان تا بالاترين Class، يعني وسايل نقليه، ادامه داد.
از ديدگاه OOP، براي هر Class سه نوع Method و Attribute در نظر گرفته مي‌شود: Public، Protectedو Private كه تفاوت اينها در Inheritance نمايان مي‌شود.
هر Method يا Attribute كه در يك Class به صورت Public تعريف شود، توسط همه Objectهاي Classهاي ديگر قابل دسترسي مي‌باشد.
هر Method يا Attribute كه در يك Class به صورت Protected تعريف شود، فقط توسطObjectهاي Classهايي كه از اين Class به ارث برده‌اند، قابل دسترسي مي‌باشد.
هر Method يا Attribute كه در يك Class به صورت Private تعريف شود، توسط هيچ Objectاي جز Objectهاي همان Class قابل دسترسي نمي‌باشد.



هر کلاس از کلاسهاي بالاتر خود در اين سلسله مراتب ارث مي برد و به کلاس پايين تر از خود ارث مي دهد . هر زير کلاس تمام متدها و متغيرهاي فوق کلاس خود را به ارث مي برد و ديگر نيازي به تعريف مجدد آنها وجود ندارد .
بالاترين کلاس در سلسله مراتب کلاس هاي جاوا کلاس Object است و تمام کلاسهاي ديگر از اين کلاس مشتق مي شوند . اين کلاس تعيين کننده کلي ترين متدها و خواص تمام کلاس هاي ذيل خود است . معمولاً کلاس ها ضمن ارث بردن از کلاسهاي بالاتر از خود ، چيزهايي را به آن اضافه و پياده سازي مي کنند .

آبجی
4th February 2010, 09:45 PM
ايجاد سلسله مراتب کلاس
وقتي تعداد کلاس ها زياد است ، منطقي است که آنها را در يک سلسله مراتب گرد آوريم تا بتوانيم نحوه به ارث رسيدن متدها و خواص را بهتر کنترل کنيم . بدين ترتيب نياز به دوباره نويسي کدها به حداقل رسيده و هنگام نياز به تغيير کدها نيز اصلاحات فقط در يک نقطه انجام خواهد شد و از آنجا به تمام نقاط ديگر دسترسي خواهند يافت .
اجازه دهيد با استفاده از مثال Motorcycle موضوع را روشنتر کنيم . ديديد که کلاس Motorcycle چگونه طراحي شد ( و بخوبي کار کرد ). حال فرض کنيد بخواهيم کلاس جديدي بنام Car ( اتومبيل ) بسازيم . موتور سيکلت و اتومبيل شباهتهاي زيادي با هم دارند . در نظر اول بنظر مي رسد که بهتر است کلاس Motorcycle را باز کنيم و اطلاعات درون آن را به داخل کلاس جديدي بنام Car کپي کنيم . اما ايده بهتري هم وجود دارد و آن انتقال اطلاعات مشترک اين دو کلاس به يک کلاس کلي تر است . با اينکه اين روش کار بيشتري مي طلبد ولي توسعه آن و ايجاد کلاسهاي جديدتر ( مانند دوچرخه ، کاميون و غيره ) را ساده تر خواهد کرد .
اجازه دهيد با شروع از بالاترين کلاس جاوا در سلسله مراتب کلاس ها ، يعني کلاس Object ، يک سلسله مراتب جديد بسازيم . کلي ترين کلاسي که مي تواند اين دو وسيله نقليه را در خود جاي دهد را کلاس Vehicle مي ناميم . يک وسيله نقليه (Vehicle) چيزي است که مي تواند فردي را از نقطه اي به نقطه ديگر منتقل کند . در کلاس Vehicle فقط رفتار انتقال از نقطه a به نقطه b را تعريف خواهيم کرد و نه هيچ چيز بيشتر .
در ذيل کلاس Vehicle چه چيزي بايد قرار دهيم ؟ مثلاً ماشين متحرک با نيروي انساني و ماشين متحرک با موتور چطور است ؟ ماشين متحرک با نيروي انسان مثلاً مي تواند پدال داشته باشد ( و يا هر مکانيزمي براي انتقال حرکت انسان به ماشين ). ماشين متحرک با موتور هم ( به احتمال زياد! ) يک موتور دارد ، به سوخت نياز دارد و به وسيله اي براي تنظيم سرعت . در ذيل کلاس Engine Powered Vehicle مي توانيم چند کلاس مثل Car ، Motorcycle و Truck قرار دهيم . ولي مي توانيم با ايجاد يک کلاس بينايي باز هم رفتارها را تقسيم بندي کنيم .
بالاخره کلاس Motorcycle را در ذيل کلاس Two Wheeled ( دو چرخ ) قرار داده ايم . اما شايد بپرسيد که خواصي مثل رنگ و نوع را کجا بايد قرار داد ؟ مي توان اين خواص را در کلاس Vehicle قرار داد تا تمام زير کلاسها آنها را به ارث ببرند . تنها چيزي که بايد به خاطر داشته باشيد اين است که وقتي يک حالت ( خاصيت ) يا رفتار را تعريف کرديد ، ديگر به طور خودکار در سلسله مراتب به تمام زير کلاسها انتقال خواهد يافت ( به ارث خواهد رسيد ).

Data چند ريختي(Poly-Morphism)
ديديم كه Classهاي مختلف مي‌توانند رفتارها و خصوصياتي را از يكديگر (Super Classes) به ارث ببرند. با توجه به اين مفهوم، بايد در مورد مفهوم ديگري به نام Poly-morphism نيز صحبت كنيم.
عبارت است از چند شکل مختلف از يک عمل يا يک مفهوم يا تابع در سطوح مختلف ارث بري که در اثر Overrde ايجاد مي شود و در کلاس پايه حتما بايد يک کلاس Virtual داشته باشيم.

دو نوع Polymorphism داريم :
چند شکلي در زمان کامپايل - استفاده از Type Casting
چند شکلي در زمان اجرا

يك هواپيما و يك كشتي هر دو وسيله نقليه به شمار مي‌آيند. يكي از رفتارهايي كه هر وسيله نقليه دارد، حركت كردن است. پس ما در ClassVehicle يك Method خواهم داشت كه اين رفتار را تعريف خواهد كرد. سوالي كه مطرح است، اين است كه آيا همه وسايل نقليه يك جور حركت مي‌كنند؟ آيا مي‌توانيم اين نحوه حركت را در Vehicle Class تعريف كنيم و توقع داشته باشيم همه Sub Classهاي آن همان رفتار را به ارث ببرند و اصطلاحاً همه يك جور حركت كنند؟ مسلماً پاسخ هر دو سوال منفي خواهد بود، زيرا هرگز نمي‌توان پذيرفت كه هواپيما و كشتي يك جور حركت كنند. پس چه بايد كرد.
ما رفتار حركت كردن را در Vehicle Class به گونه‌اي تعريف مي‌كنيم كه صرفاً نشان دهيم همه Sub Classهاي آن اين رفتار را دارند ولي خودشان بايد چگونگي بروز آن رفتار را تعريف كنند. به يك چنين رفتاري در Vehicle Class اصطلاحاً Virtual Method گفته مي‌شود. به اين ترتيب مشاهده مي‌كنيم كه همه Sub Classها چنين رفتاري دارند، ولي "ريخت" انجام آن تفاوت دارد.

آبجی
4th February 2010, 09:45 PM
انواع سطوح زبان ها:
زبانها به سه دسته کلي تقسيم ميگردند :

1- زبان ماشين (سطح پايين) : اين زبان مستقيما با صفر و يک نوشته مي شود و بدون هيچ واسطه اي برروي کامپيوتر قابل اجرا است. طراحان سخت افزار هر کامپيوتر، زبان ماشين خاص خود را براي آن ماشين طراحي مي نمايند. به همين دليل هر برنامه اي که به زبان ماشين نوشته شود، فقط برروي همان ماشين خاص کار مي کند، بهمين دليل برنامه هاي نوشته شده به زبان ماشين را غير قابل حمل مي نامند. از طرف ديگر يادگيري اين زبان بسيار مشکل بوده و برنامه نويسي با آن نيز بسيار سخت است و همچنين احتمال بروز خطا نيز در آن زياد است.

2- زبان اسمبلي : اين زبان شکل ساده تر زبان ماشين است، بدين صورت که براي هر دستورالعمل زبان ماشين، يک اسم نمادين انتخاب شده است (مانند دستور ADD بجاي کد دودويي دستورالعمل جمع) که بخاطر سپردن و برنامه نويسي با آنها براي انسانها ساده تر است. اما اين برنامه ها براي ماشين قابل فهم نيست و بايد قبل از اجرا شدن توسط برنامه مترجمي بنام اسمبلر به زبان ماشين تبديل شود. توجه کنيد که از آنجا که هر دستور زبان اسمبلي معادل يک دستور زبان ماشين است، اين زبان نيز وابسته به ماشين مي باشد و برنامه هاي نوشته شده به اين زبان فقط برروي همان کامپيوتري که براي آن نوشته شده اند قابل اجرا است. علاوه براين کار با اين زبانها هنوز هم نسبتا مشکل بود و فقط متخصصين کامپيوتر قادر به استفاده از آنها بودند.

3- زبانهاي سطح بالا : دستورالعملهاي اين زبانها بسيار نزديک به زبان انسانها (بطور مشخص زبان انگليسي) مي باشد و بهمين دليل برنامه نويسي به آنها بسيار ساده تر بوده و مي توان الگوريتمها را به راحتي به اين زبانها تبديل کرد. از آنجا که اين زبانها به هيچ ماشين خاصي وابسته نيستند، برنامه هاي نوشته شده با اين زبانها (تا حد زيادي) قابل حمل مي باشند. مثالهايي از اين زبانها عبارتند از :
- بيسيک (Basic): براي کاربردهاي آموزشي
- فرترن (Fortran) : براي کاربردهاي علمي و مهندسي
- پاسکال (Pascal) : براي کاربردهاي آموزشي و علمي
برنامه هاي نوشته شده به اين زبانها ابتدا بايد به زبان ماشين ترجمه شوند تا برروي کامپيوتر قابل اجرا باشند. براي ترجمه اين زبانها از کامپايلرها و يا مفسرها استفاده مي شود.
معرفي سي‌پلاس‌پلاس
زبان برنامه‌نويسي ++C (تلفظ مي شود: سي پلاس پلاس) يک زبان برنامه‌نويسي کامپيوتري سطح بالا و عمومي (با کاربرد هاي متنوع) مي باشد. اين زبان از تمام روش هاي مرسوم برنامه نويسي از قبيل برنامه‌نويسي شي‌گرا، برنامه نويسي ساخت يافته و برنامه نويسي پايه پشتيباني مي کند.
زبان ++C در سال ۱۹۸۳ در آزمايشگاه هاي بل (Bell Labs) و بر مبناي زبان سي با افزودن امکانات برنامه نويسي شي گرا ساخته شد. اين زبان از حوالي سال ۱۹۹۰ ميلادي يکي از پرکاربردترين زبان‌هاي برنامه نويسي به شمار مي رود که براي برنامه نويسي سيستمي و برنامه نويسي ويژوال (بر مبناي GUI) در محيط هاي مختلف از قبيل ويندوز و لينوکس به صورت وسيع به کار مي رود.

آبجی
4th February 2010, 09:45 PM
ساختار برنامه ها

ساختار برنامه ها در اين زبان بدين صورت است که همانند زبان سي، هر برنامه بايستي يک تابع اصلي (main) به عنوان بدنه برنامه داشته باشد. هر برنامه معمولا از تعداد زيادي فايل تشکيل مي شود که به هم الحاق مي گردند (با دستور include) و به اين فايل هاي الحاقي سرآيند (Header) مي‌گوييم. فايل هاي الحاقي حاوي کد ها يا نسخه هاي اجرايي کلاس ها (مجموعه متغير ها و توابع) مي باشند که در بدنه اصلي برنامه از آنها استفاده مي شود. معمولاً هر کلاس (که تعريف يک نوع داده اي با متد هاي مربوط به آن است) را در يک سرآيند مي‌نويسند. هر سرآيند که معمولا تنها تعاريف (معرفي) کلاس را در خود دارد به همراه فايل هاي پياده سازي به زبان ++C يا پياده سازي هاي کامپايل شده (به صورت فايل اشيا مانند dll يا so يا ... ) مي تواند به کار برده شود. به مجموعه هاي يکپارچه اي از کلاس هاي پياده سازي شده (به صورت فايل هاي سرآيند با پياده سازي هاي کد يا اشياي زبان ماشين) که براي برنامه نويسي به کار مي روند، يک کتابخانه ++C گفته مي شود و قدرت اصلي اين زبان در امکان به کارگيري کتابخانه هاي آماده مي باشد. کتابخانه هاي بزرگ ++C مانند STL، MFC، QT و ... مجموعه قدرتمندي براي توليد برنامه در اين زبان ايجاد کرده اند.



يك برنامه نمونه
در اين قسمت براي آشنايي اوليه با زبان C++ يك برنامه نمونه آورده شده است كه بدون هيچ تغييري در محيط BorlandCPP قابل اجرا است.

// This Program Computes the Area of a Circle
#include <stdio.h>
void main() {
int radius ;
float area;
cout<<"please enter radius : ";
cin>>radius;
area = 2 * 3.14 * radius;
cout<<"Area is "<<area;
}

please enter radius : 10
Area is 62.8
درمورد برنامه فوق به نکات زير توجه کنيد :
- خط اول يک توضيح درمورد برنامه است. در زبان C++ براي توضيحات يک خطي از علامت // استفاده مي گردد. اما چنانچه توضيحات بيش از يک خط بود،- آن را با علامت /* شروع کرده و با */ پايان دهيد. کامپايلر از اين توضيحات صرفنظر خواهد کرد. اين توضيحات باعث مي شوند که برنامه شما خواناتر شده و ديگران بهتر آن را درک کنند.

آبجی
4th February 2010, 09:46 PM
- هر دستوري که با علامت # شروع شود،- يک دستورC++ نيست،- بلکه جزودستورات پيش پردازنده محسوب مي گردد. دستورات پيش پردازنده،- دستوراتي هستند کهتوسط کامپايلر قبل از شروع به کامپايل انجام مي شوند. بعنوان مثال دستور #include باعث مي شود که تعاريف اوليه مربوط به توابعي (زيربرنامه هايي) که قصد استفاده ازآنها را داريم به برنامه اضافه شود. در مثال بالا براي استفاده از توابع Cout و Cin که در کتابخانه استاندارد C تعريف شده اند،- فايل سرآمد stdio.h را که اينتوابع در آن تعريف شده اند را استفاده کرده ايم.
- هر برنامه C بايد داراي تابعي به نام main باشد که اجراي برنامه ازآن شروع مي شود و در حقيقت همان برنامه اصلي است. البته مي توان هر تعداد ديگريتابع (زيربرنامه) نيز تعريف کرد،- اما وجود تابع main الزامي است. دقت کنيد که گرچهاين تابع پارامتر ورودي ندارد،- اما از پرانتز باز و بسته تنها استفاده شدهاست.
- در زبان++C هر بلوک برنامه با علامت { آغاز شده و با } پايان مييابد. اين دو معادل دستورات begin و end در زبانهاي ديگر ازجمله پاسکال مي باشند کهبراي سادگي زبان انتخاب شده اند.
- دو خط بعدي به تعريف متغيرهاي radius و area مي پردازد. در زبان++ Cقبل از استفاده از هر متغيري بايد آن را اعلان نماييد. اعلان متغير شامل نام و نوعمتغير است. در مثال فوق،- متغير radius از نوع عدد صحيح (integer) و متغير area ازنوع عدد اعشاري (float) تعريف شده اند.
- توابع Cout و Cin جزو کتابخانه استاندارد++ Cمحسوب مي گردند وبه ترتيب براي چاپ اطلاعات در خروجي استاندارد (نمايشگر) و دريافت اطلاعات از ورودياستاندارد (صفحه کليد) استفاده مي شوند. براي چاپ رشته مورد نظر بايد آنها را درداخل علامت " قرار داد.
- دقت کنيد که در پايان هر دستورالعمل از علامت ; استفاده شده است. در مجموع++ Cيک زبان قالب آزاد است و شما مي توانيد دستورات را به هر نحوي که دوستداريد قرار دهيد (مثلا چند دستور در يک خط از برنامه). تنها چيزي که نشاندهندهپايان يک دستور است،- علامت ; است(و نه انتهاي خط).

آبجی
4th February 2010, 09:46 PM
چگونه می توان از وقف ها در زبان C++ استفاده کرد ؟
خوب بد نیست اینجا کمی هم درباره وقفه ها صحبت کنیم . وقفه ها سیگنال هایی هستند که از برنامه های در حال اجرا و یا دستگاه های جانبی کامپیوتر (چاپگر و مونیتور و موس و . . .) در خواست می شود , وقتی وقفه ای اتفاق می افتد اجرای برنامه به تعویق افتاده محتویات ثباتهای CS و IP در پشته نگهداری شده و کنترل روال پاسخگو یی به این وقفه منتقل می شود . پس از پاسخگو یی به وقفه مورد نظر محتویات CS و IP از پشته ها بازیابی می شود. تعداد 256 وقفه وجود دارد که هر یک دارای زیر برنامه و توابع مخصوص به خود می باشند که می تواند اعمال مختلفی را انجام دهند . لیست وقفه ها را می توانید در مراجع اصلی زبان اسمبلی و با جستجو در اینترنت پیدا کنید .
خوب در زبان C/C++ برای اجرای وقفه ها ابتدا ثباتهای مورد نیاز مقدار دهی شده و با استفاده از تابع زیر اجرا می شود
int ( int intnum , union REGS *in , union REGS *out )
union : یونیونها یک قالب داده می باشد که می تواند انواع مختلفی از داده ها را در خود نگهداری کند و فقط یک نوع داده را می تواند در یک زمان نگهداری کند و این همان تفاوت union با struct ها می باشد , struct ها می تواند در یک زمان چند نوع داده مختلف را نگهداری کند (int , long , double , char)

آبجی
4th February 2010, 09:46 PM
معرفی چند تابع برای تبدیل انواع داده ها :

نام تابع
شرح وظیفه

atof
برای تبدیل یک رشته به عدد اعشاری


Atoi
تبدیل رشته به عددی از نوع Integer


Atol
تبدیل رشته به عددی از نوع Long


ecvt and fcvt
تبدیل عدد اعشاری به رشته


gcvt
تبدیل عدد اعشاری به رشته


strtod
تبدیل رشته به عدد اعشاری از نوع Double


strtol
تبدیل رشته به عددی از نوع Long


_strtold
تبدیل رشته به long double




نکاتی در مورد توابع


. clreol : این تابع تمام کاراکترها که بعد از مکان نما قرار دارد را تا آخر آن خط پاک میکند بدون آنکه موقعیت مکان نما تغییر کند . علت اینکه من از تابع cptintf در مثال زیر استفاده کردم این است که توابع clreol - clrscr و getch هر سه در کتابخانه Conio.H هستند و تابع cprintf هم در این کتابخانه است و دیگر از printf استفاده نکردم همچنین یکی دیگر از مزیت های cprintf این است که برای چاپ text های رنگی در خروجی از این تابع استفاده می شود , در حالیکه printf چنین امکانی را در اختیارمان قرار نمی دهد .

2 . delline : این تابع سبب می شود که خطی که مکان نما (Cursor) در آن قرار دارد حذف شود .

3 . insline : با استفاده از این تابع می توان یک خط خالی در بالای مکانی که مکان نما قرار دارد


textmode : این تابع نوع نمایش text در صفحه نمایش را کنترل می کند .

آبجی
4th February 2010, 09:47 PM
الگوریتم برج هانوی

برج هانوی , معمایی است که از سه میله و N دیسک با اندازه های متفاوت . فرض شود که اگر دیسکی روی یک میله باشد , فقط دیسکی که قطر آن کوچکتر است می تواند بالای آن قرار گیرد مسئله چنین است که هر بار فقط یک دیسک انتقال یابد .
را حل : این مسئله با استفاده از یک الگوریتم باز گشتی حل می شود .
-اگر فقط یک دیسک باشد آنگاه آن را به میله مورد نظر انتقال می دهیم .
-اگر n > 1 باشد ; برای این کار n-1 دیسک بالای میله 1 را به میله 2 انتقال می دهیم . حالا دیسک پایینی میله 1 را ثابت باقی می ماند . حال دیسک باقیمانده در در میله 1 را به میله 3 منتقل میکنیم . سرانجام بار دیگر بصورت بازگشتی الگوریتم را فرا خانده تا n - 1 دیسک میله دو را به 3 منتقل کند .
اکنون موفق شدیم n دیسک را از میله 1 به 3 منقل کنیم .

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

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

آبجی
4th February 2010, 09:47 PM
يك شي كلاس(in the java.lang package) به عنوان ريشه كلاس سلسله مراتبي جاوا انجام وظيفه ميكند .
جاوا بر خلاف C++ طوري طراحي شده است كه از همان ابتدا به صورت شي گرا باشد . اكثر چيز ها در جاوا اشيا هستند . ارقام ابتدايي ، كاراكترها و مدل هاي منطقي تنها استثناء ها هستند . حتي رشته ها هم در جاوا به وسيله اشيا حاضر ميشوند ،همان طور كه ساختمان هاي مهم ديگر اين زبان ، مثل نخ ها احضار ميشوند . يك كلاس يك واحد پايه براي كامپايل و اجرا شدن در جاوا است . تمام برنامه هاي جاوا متشكل از كلاس ها است .
درست است كه جاوا طوري طراحي شده است كه مثل C++ باشد و خاصيت هاي آن را داشته باشد ، اما هنگامي كه با آن كار كنيد خواهيد فهميد كه بسياري از پيچيده گي هاي آن زبان را از بين برده است .
اگر شما يك برنامه نويس C++ هستيد حتما لازم است كه ساختار هاي شي گرايي در جاوا را به دقت مطالعه كنيد . اگرچه تركيب و نحوه دستورات آن تقريبا شبيه C++ است ،‌اما رفتار هاي آن خيلي مشابه نيست .

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

معماري خنثي و قابل حمل :
Architecture Neutral and Portable

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

پويا و توزيع شده :Dynamic and Distributed

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

آبجی
4th February 2010, 09:47 PM
ساده :Simple
جاوا يك زبان ساده است . طراحان جاوا سعي در اين داشتند تا زباني بوجود بياورند كه برنامه نويسان بتوانند به سرعت آن را ياد بگيرند . بنابراين تعداد ساختار هاي اين زبان تقريبا كم است . هدف ديگر طراحي اين زبان اين بود كه به منظور راحتي انتقال آن ، آن را طوري طراحي كنند كه براي عده ي زيادي از برنامه نويسان آشنا باشد . اگر شما يك برنامه نويس C يا C++ هستيد ، خواهيد فهميد كه جاوا از بسياري از ساختار هاي C و ‍ C++ استفاده ميكند .
براي اينكه اين زبان را هم به طور ساده و هم آشنا و ملموس و هم كوچك نگه دارند بسياري از خصوصيات C و C++ را در آن حذف كردند . اينها خصوصياتي بودند كه باعث مي شدند برنامه نويسي ضعيفي صورت بگيرد يا آنهايي بودند كه به ندرت در برنامه استفاده مي شدند . براي مثال جاوا از دستور goto استفاده نمي كند ، در عوض از دستورهايbreak , continue در مواقع نياز استفاده مي كند .
جاوا از سر فايل ها(header files) استفاده نمي كند و پردازشگر C را هم حذف كرده است . به اين دليل كه جاوا يك زبان شي گرا است ، ساختار هاي C مثل struct , union از آن برداشته شده است . جاوا حتي بارگذاري مجدد و خواص چندگانه ارث بري از C++ را هم حذف كرده است . شايد مهمترين پارامتر ساده بودن جاوا عدم استفاده اين زبان از اشاره گر ها باشد . اشاره گر ها يكي از بيشترين موجوديت هاي دردسرساز در C , C++ هستند . چون جاوا ساختمان ندارد و آرايه ها و رشته ها اشياء آن هستند ، بنابراين احتياجي به اشاره گر نيست .جاوا به طور خودكار آدرس دهي و دستذسي به محتواي موجود در يك آدرس را براي شما انجام ميدهد .
جاوا حتي زباله هاي حافظه اي را هم به طور خودكار جمع آوري ميكند .(Garbage Collectin) (* جمع آوري آشغال فرايندي است براي ترميم خودكار حافظه انباشته شده . بلوك هايي از حافظه كه زماني به فايل ها اختصاص داشتند اما مدتي است كه از آنها استفاده نمي شود و بلوك هايي از حافظه كه هنوز مورد استفاده قرار ميگيرند ممكن است حركت داده شوند تا از به هم پيوستن فضاهاي خالي حافظه بلوك هاي خالي بزرگتري بدست آيد .
[ از كتاب : Microsoft computer dictionary] * ) بنابراين لازم نيست كه نسبت به موضوع مديريت حافظه نگران باشيد ، همه اينها شما را از نگراني در مورد اشاره گر هاي بي ارزش ، خطرناك و هرز هاي حافظه رها ميكنند . بنابر اين شما ميتوانيد وقت خود را صرف بهبود برنامه تان كنيد .

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

ايمن : Secure
يكي از دلايل پرطرفدار بودن جاوا اين است كه يك زبان ايمن است . اين ويژگي مخصوصا به خاطر طبيعت توزيع شده ي آن بسيار مهم است .بدون وجود امنيت شما قطعا نميخواهيد كه يك كد را از يك سايت تصادفي اينترنت بارگذاري كنيد و به آن اجازه اجرا شدن روي كامپيوتر خودتان را هم بدهيد . اين دقيقا همان چيزي است كه مردم هرروز با يك كد جاوا انجام ميدهند . جاوا به صورت ايمن طراحي شده و چندين لايه كنترل امنيت به وجود مي آورد كه شما را در برابر كد هاي خطرساز محافظت مي كنند و به كاربر اجازه ميدهد كه برنامه هاي ناشناخته را با خيال راحت اجرا كند .
همان طور كه ديديم ، برنامه جاوا نميتواند اشاره گر ها را به حافظه يا آرايه هاي سرريز يا حافظه خواندني خارج از محدوده يك آرايه يا رشته اشاره ، اشاره دهد. اين خصوصيت يكي از اصلي ترين وسايل دفاع جاوا در برابر كدهاي خطرساز است . دومين راه دفاع در برابر كد هاي خطرساز ، پردازش كدهاي بايتي به صورت قابل تصديق و تاييد است كه مفسر جاوا به روي هر كدي كه در حال بار گذاري باشد اعمال ميكند . اين مراحل تاييد از اينكه كد به صورت درستي ساخته شده اطمينان حاصل ميكنند ، كه براي مثال پشته سرريزي يا زيرريزي نداشته باشد ، يا شامل كد هاي بايتي غير مجاز نباشد .
كدهاي بايتي خراب يا خطرساز ممكن است از ضعف هاي اجرايي در مفسر جاوا سوء‌ استفاده كنند . لايه اي كه در اينجا ما را به طور ايمن محافظت ميكند ، مدل جعبه شني (Sand box) است : كدهاي ناشناخته در يك جعبه شني قرار ميگيرند جايي كه ميتوانند به صورت ايمن اجرا شوند ، بدون اينكه هيچ صدمه اي به بقيه اجزاء يا محيط جاوا بزنند .
وقتي يك برنامه كاربردي يا ديگر كدهاي ناشناخته در جعبه شني در حال اجرا است ،‌ چند محدوديت در مورد كاري كه ميتواند انجام دهد ، وجود دارد . واضح ترين اين محدوديت ها اين است كه هيچ دسترسي به هيچ يك از فايل هاي محلي سيستم وجود ندارد . در جعبه شني محدوديت ديگري هم وجود دارد كه به وسيله كلاس مديريت امنيت اعمال ميشود . اين مدل در ابتدا از اينكه سيستم هاي امنيتي را نصب كرده ايد يا نه ، مطمئن ميشود ، چرا كه همه كلاس هاي جاوا نياز به عمليات حساسي مانند دسترسي به سيستم فايل را دارند . اگر فراخواني به وسيله يك كد ناشناخته به صورت مستقيم يا غير مستقيم انجام شد ،‌ مدير امنيت مورد استثناء‌ را مي فرستد و عمليات صورت نمي گيرد .
و سرانجام در جاوا 1-1 يك راه حل ممكن ديگر براي مشكلات امنيتي وجود دارد ، به وسيله ضميمه كردن يك امضاء ديجيتالي به كد جاوا كه اصل آن كد ميتواند به صورت پنهاني و نهفته ساخته شود . اگر شما اعتماد خود را به يك شخص يا يك سازمان مشخص كرده باشيد ، كدي كه امضاء آن هويت مورد اعتماد روي آن قرار دارد ،‌ ايمن و مطمئن است . حتي زمانيكه در حال بارگذاري شدن در شبكه است و ممكن است حتي بدون جلوگيري توسط جعبه شني اجرا شود .

آبجی
4th February 2010, 09:48 PM
عملكرد سطح بالا :High Performance
جاوا يك زبان تفسير شده است ، بنابر اين هرگز به سرعت زبان كامپايل شده اي مثل C نخواهد بود . گفته ميشود كه جاوا 0-1 به اندازه 20 برابر از C كند تر است . جاوا 1-1 تقريبا سرعتي دو برابر جاوا 1-1 دارد . بنابراين ممكن است عاقلانه باشد اينكه بگوييم كد C كامپايل شده 10 برابر سريع تر از كد هاي تفسير شده ي جاوا اجرا ميشود . اما قبل از اينكه به خاطر اين موضوع مايوس شويد ، آگاه باشيد كه اين سرعت بيشتر از آن چيزي است كه براي برنامه هاي پرسرعت ، كاربردهاي GUI(Graphical User Interface ) ، برنامه هاي برمبناي شبكه ، جايي كه برنامه كاربردي معمولا آماده براي اجرا شدن است ، انتظار براي كاربر كه يك دستوري اعمال كند و يا انتظار براي دريافت از شبكه ، لازم است .
به علاوه قسمت هايي كه به سرعت هاي بالا نياز دارند ، كه كارهايي از قبيل الحاق رشته ها و مقايسه را انجام ميدهند ، با كد محلي جاوا اجرا ميشوند .
علاوه بر اين كارايي ، بسياري از مفسر هاي جاوا اكنون شامل كامپايلر هاي فقط در زمان " just in time " نيز هستند كه ميتواند كدهاي بايتي جاوا را براي هر نوعCPU در زمان اجرا به كد ماشين ترجمه كند . فرمت كد بايتي جاوا با اين كامپايلر هاي در زمان در مركز كافي و مناسب است و انصافا كدهاي خوبي توليد ميكند . در حقيقت Sun ادعا ميكند كه كارايي كد هاي بايتي كه به كد ماشين تبديل شده اند ، تقريبا به خوبي كارآيي آن در C و C++ است .
اگر شما خواهان اين هستيد كه قابل حمل بودن كد ها را قرباني بهبود در سرعت آن كنيد ، ميتوانيد بخش قابل توجهي از برنامه خود را در C و C++ بنويسيد و از روش هاي مخصوص جاوا براي مشترك كردن با اين كد محلي جاوا استفاده كنيد .

چند نخ كشي شده :Multitbreaded

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

بنيادهاي كلاس java

چيزي كه بايد درباره يك كلاس بدانيد اين است كه كلاس يك نوع جديد داده را تعريف
مي كند . هربار كه اين نوع تعريف شود ، مي توان از آن براي ايجاد اشيائي از
همان نوع استفاده نمود . بنابراين ، يك كلاس قالبي (template) براي يك شي ئ است
و يك شي ئ نمونه اي (instance) از يك كلاس است . چون شي ئ يك نمونه از يك كلاس است .
غالبا" كلمات شي ئ (object) و نمونه (instance) را بصورت مترادف بكار مي بريم .


شكل عمومي يك كلاس


هنگاميكه يك كلاس را تعريف مي كنيد ، در حقيقت شكل و طبيعت دقيق آن كلاس را
اعلان مي كنيد . ابتكار را با توصيف داده هاي موجود در آن كلاس و كدهايي كه روي
آن داده ها عمل مي كنند ، انجام مي دهيد . در حاليكه كلاسها ممكن است خيلي ساده
فقط شامل داده يا فقط كد باشند، اكثر كلاسهاي واقعي هردو موضوع را دربرميگيرند.
بعدا" خواهيد ديد كه كد يك كلاس ، رابط آن به داده هاي همان كلاس را توصيف ميكند.
يك كلاس را با واژه كليدي class اعلان مي كنند داده يا متغيرهايي كه داخل يك كلاس تعريف شده اند را متغيرهاي نمونه instance)
(variables مي نامند . كدها ، داخل روشها (methods) قرار مي گيرند . روشها و
متغيرهاي تعريف شده داخل يك كلاس را اعضائ (members) يك كلاس مي نامند . در اكثر
كلاسها ، متغيرهاي نمونه يا روي روشهاي تعريف شده براي آن كلاس عمل كرده يا توسط
اين روشها مورد دسترسي قرار مي گيرند . بنابراين ، روشها تعيين كننده چگونگي
استفاده از داده هاي يك كلاس هستند .
متغيرهاي تعريف شده داخل يك كلاس ، متغيرهاي نمونه خوانده شده زيرا هر نمونه
از كلاس ( يعني هر شي ئ يك كلاس ) شامل كپي خاص خودش از اين متغيرهاست . بنابراين
داده مربوط به يك شي ئ ، جدا و منحصر بفرد از داده مربوط به شي ئ ديگري است . ما
بزودي اين نكته را بررسي خواهيم نمود ، اما فعلا" بايد اين نكته بسيار مهم را
بياد داشته باشيد .
كليه روشها نظير()main همان شكل عمومي را دارند كه تاكنون استفاده كرده ايم .
اما ، اكثر روشها را بعنوان staticيا publicا توصيف نمي كنند . توجه داشته
باشيد كه شكل عمومي يك كلاس ، يك روش ()main را توصيف نمي كند . كلاسهاي جاوا
لزومي ندارد كه يك روش ()main داشته باشند . فقط اگر كلاس ، نقطه شروع برنامه
شما باشد ، بايد يك روش ()main را توصيف نماييد . علاوه بر اين ، ريز برنامه ها
(applets) اصولا" نيازي به روش ()main ندارند .
نكته : برنامه نويسان C++ آگاه باشند كه اعلان كلاس و پياده سازي روشها در يك
مكان ذخيره شده و بصورت جداگانه تعريف نمي شوند. اين حالت گاهي فايلهاي
خيلي بزرگ java ايجاد مي كند ، زيرا هر كلاس بايد كاملا" در يك فايل منبع
تكي تعريف شود . اين طرح در جاوا رعايت شد زيرا احساس مي شد كه در بلند
مدت ، در اختيار داشتن مشخصات ، اعلانها و پياده سازي در يك مكان ، امكان
دسترسي آسانتر كد را بوجود مي آورد .

آرايه ها در جاوا

يك آرايه گروهي از متغيرهاي يك نوع است كه با يك نام مشترك به آنها ارجاع
مي شود . مي توان آرايه ها را براي هر يك از انواع ايجاد نمود و ممكن است اين
آرايه ها داراي يك يا چندين بعد باشند . براي دسترسي به يك عضو آرايه از نمايه
(index) آن آرايه استفاده مي شود . آرايه ها يك وسيله مناسب براي گروه بندي
اطلاعات مرتبط با هم هستند .
نكته : اگر با Cو C++و آشنايي داريد ، آگاه باشيد . آرايه ها در جاوا بطور
متفاوتي نسبت به زبانهاي ديگر كار مي كنند .

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

آبجی
4th February 2010, 09:49 PM
عملگرها ی ریاضی و بیتی

جاوا يك محيط عملگر غني را فراهم كرده است . اكثر عملگرهاي آن را مي توان
در چهار گروه طبقه بندي نمود : حسابي arithmetic رفتار بيتي bitwise رابطه اي ralational
و منطقي logical جاوا همچنين برخي عملگرهاي اضافي براي اداره
حالتهاي خاص و مشخص تعريف كرده است .
نكته : اگر با C++/C آشنايي داريد ، حتما" خوشحال مي شويد كه بدانيد كاركرد
عملگرها در جاوا دقيقا"مشابه با C++/C است . اما همچنان تفاوتهاي ظريفي
وجود دارد .

انواع ساده The simple Types

جاوا هشت نوع ساده ( ياابتدايي ) از داده را تعريف مي كند : short bbyte int
، long،، char،، float،، double،، boolean، اين انواع را مي توان در چهار
گروه بشرح زير دسته بندي نمود :
ؤ integers ( اعداد صحيح ) : اين گروه دربرگيرنده byte، short،، int،و longو
ميباشد كه مختص ارقام علامتدار مقدار كل (whole-valued signed numbers) ميباشد.
ؤ floating-point numbers ( اعداد اعشاري ) : اين گروه دربرگيرنده float و double
است كه معرف اعدادي است با دقت زياد .
ؤ characters ( كاراكترها ) : اين گروه فقط شامل char بوده كه نشانه هايي
نظير حروف و ارقام را در يك مجموعهخاص از كاراكترها معرفي مي كند .
ؤ Boolean ( بولي ) : اين گروه فقط شامل boolean است . كه نوع خاصي ازمعرفي
و بيان مقادير صحيح / ناصحيح مي باشد .
شما مي توانيد از اين انواع همانطوريكه هستند استفاده كرده ، يا آرايه ها و
انواع كلاسهاي خود را بسازيد .
انواع اتمي معرف مقادير تكي و نه اشيائپيچيده هستند . اگر چه جاوا
همواره شي ئ گرا است ، اما انواع ساده اينطورنيستند . اين انواع ، مشابه انواع
ساده اي هستند كه در اكثر زبانهاي غير شي ئگرا مشاهده مي شود . دليل اين امر
كارايي است . ساختن انواع ساده در اشيائ سببافت بيش از حد كارايي و عملكرد
مي شود .
انواع ساده بگونه اي تعريف شده اندتا يك دامنه روشن و رفتاري رياضي داشته
باشند . و زبانهايي نظير Cو C++و امكانمي دهند تا اندازه يك عدد صحيح براساس
ملاحظات مربوط به محيط اجرايي تغيير يابد . اما جاوا متفاوت عمل مي كند . بدليل
نيازهاي موجود براي قابليت حمل جاوا ،كليه انواع داده در اين زبان داراي يك
دامنه كاملا" تعريف شده هستند . بعنوانمثال يك int هميشه 32 بيتي است ، صرفنظر
از اينكه زير بناي خاص محيطي آن چگونهباشد . اين حالت به برنامه هاي نوشته شده
اجازه مي دهد تا با اطمينان و بدون درنظر گرفتن معماري خاص يك ماشين اجراشوند.

آبجی
4th February 2010, 09:49 PM
ويژگيهاي زبان برنامه نويسي Java
جاوا ويژگيهاي متعددي دارد که آن را منحصربه فرد کرده است . جاوا هم کامپايلر دارد و اينترپرتر . توضيح : ( کامپايلر برنامه اي است که متن برنامه را گرفته و در پايان يک فايل exe توليد مي کند. بعد از کامپايل شدن يک برنامه ، ديگر به وجود کامپايلر نيازي نيست و مي توان برنامه exe را روي هر کامپيوتر سازگاري اجرا کرد . اما اينترپرتر هيچ برنامه exe اي توليد نمي کند و برنامه را خط به خط اجرا مي کند ، براي اجراي برنامه حتما بايد اينترپرتر هم روي کامپيوتر مورد نظر موجود باشد).
هر کامپايلر فقط براي يک سيستم خاص ( مانند اينتل ، اپل يا آلفا ) مي تواند کد اجرايي توليد کند اما کامپايلر جاوا کد اجرايي Exe توليد نمي کند و در عوض يک فايل بينابيني مي سازد که بايت کد Byte code نام دارد و بايت کد چيزي شبيه زبان اسمبلي است ، اما اين زبان مختص هيچ پروسسور خاصي نيست بلکه زبان اسمبلي يک ماشين ويژه بنام ماشين مجازي جاوا ( Java Virtual Mashing) دارد که روي ماشين مجازي جاوا اجرا مي شود ، دستورات فايل بايت کد را به دستورات قابل فهم براي پروسسوري که روي آن اجرا مي شود تبديل خواهد کرد .

برنامه نويسي با جاوا
برنامه اي مي نويسيم يک برنامه متکي به خود است بنام Hello World . تفاوت يک برنامه متکي به خود و يک اپلت آن است که در برنامه متکي به خود ( که از اين به بعد به آن فقط برنامه خواهيم گفت ) از متدي بنام ()main استفاده مي شود در حاليکه اپلت چنين متدي ندارد .
برنامه Hello World بسيار ساده است و فقط جمله “Hello World” را نمايش مي دهد با اين حال مي توان از آن به عنوان سنگ بناي برنامه هاي پيشرفته تر استفاده کرد چون تمام برنامه هاي جاوا ساختار کلي مشابهي دارند .
براي کامپايل کردن برنامه بايد از کامپايلر جاوا (javac) استفاده کرد روش کار چنين است :
Java HelloWorld. java
کامپايلر بعد از پايان کار يک فايل کلاس بنام HelloWorld. Class توليد خواهد کرد . اصولاً کامپايلر براي هر کلاس برنامه يک فايل کلاس جداگانه توليد خواهد کرد . فايل توليد شده يک فايل اجرايي مستقل نيست . براي اجراي اين فايل بايد از اينترپرتر جاوا استفاده کرد . اينترپرتر جاوا، Java نام دارد . براي اجراي فايل کلاس توليد شده چنين بايد کرد :
Java HelloWorld

کامپايلر جاوا و اينترپرتر جاوا دو چيز متفاوتند . کامپايلر از فايل متن برنامه يک فايل کلاس مي سازد و اينترپرتر فايل کلاس را اجرا مي کند .
دستورات و عبارات
يک دستور ساده ترين کاري است که در جاوا مي توان انجام داد ، هر دستور يک عمل انجام مي دهد . در ذيل چند دستور ساده جاوا را مشاهده مي کنيد .

گاهي يک دستور مقدار برگشتي دارد مثل جمع دو عدد . به اين نوع دستورات عبارت گفته مي شود. مهمترين چيزي که در مورد دستورات لازم جاوا بايد به خاطر داشته باشيد اين است که در پايان هر دستور يک سمي کولون ( لازم است . در غير اينصورت برنامه بدرستي کامپايل نخواهد شد .
هر جا که بتوان از يک دستور استفاده کرد از يک دستور مرکب ، يا بلوک ، هم مي توان استفاده کرد . دستورات يک بلوک درون يک جفت آکولاد ({}) قرار مي گيرند.
از اين لحاظ جاوا و سی پلاس پلاس با هم مشابهند.

آبجی
4th February 2010, 09:50 PM
متغيرها و انواع داده
يک متغير (Variable) مکاني است در حافظه که مي توان مقاديري را در آن ذخيره کرد.. هر متغير داراي سه چيز است : نام ، نوع ، مقدار . قبل از استفاده از يک متغير بايد آنرا تعريف (Declare) کنيد . در جاوا سه نوع متغير وجود دارد : متغير وهله ، متغير کلاس ، متغير محلي .
متغيرهاي وهله خواص يک شيء خاص را در خود نگه مي دارند . متغيرهاي کلاس مانند متغيرهاي وهله هستند با اين تفاوت که به وهله هاي يک کلاس مربوط مي شوند . متغيرهاي محلي اغلب در درون متدها مورد استفاده قرار مي گيرند و براي نگهداري مقادير درون متد هستند ، در بلوک ها هم مي توان از متغيرهاي محلي استفاده کرد.همين کد اجراي متد ( يا بلوک ) به پايان رسيد ، متغيرهاي محلي دورن آن هم از بين مي روند .
با آن که نحوه تعريف اين سه نوع متغير يکسان است ، اما نحوه دسترسي به آنها کمي متفاوت است.
نکته :
بر خلاف سی پلاس پلاس ، جاوا متغير عمومي ( همگاني ) ندارد . براي ارتباط بين اشياء از متغيرهاي وهله و کلاس مي توان استفاده کرد . به ياد داشته باشيد که جاوا يک زبان شييء گرا است و شما به هم کنش اشياء فکر کنيد و نه چيز ديگر .




تعريف متغيرها
براي استفاده از يک متغير در برنامه هاي جاوا و سی پلاس پلاس ، ابتدا بايد آن را تعريف کنيد . تعريف متغير از يک نوع و يک نام تشکيل مي شود .

تعريف يک متغير مي تواند در هر کجاي يک متد انجام شود ، ولي بهتر است در ابتداي متد باشد .

چند متغير از يک نوع را مي توان در يک جا تعريف کرد :

و حتي مي توان در هنگام تعريف متغير به آن مقدار داد.

به متغيرهاي محلي قبل از استفاده حتماً بايد مقدار داد، در غير اينصورت برنامه بدرستي کامپايل نخواهد شد . مقدار دادن اوليه به متغيرهاي وهله و کلاس الزامي نيست . چون اين متغيرها هنگام تعريف داراي مقدار پيش فرض هستند .


نکاتي درباره نام متغيرها
نام متغيرها در جاوا و سی پلاس پلاس مي تواند با يک حرف ، زير خط (_) يا علامت دلار ($) شروع شود ولي نبايد با يک عدد آغاز شود . بعد از حرف اول مي توان از تمام حروف ديگر استفاده کرد ولي هنگام استفاده از % ، * ، @ و مانند آنها ( که در اپراتورها هستند ) به مشکلاتي که مي تواند بروز کند دقت کنيد .
جاوا بر خلاف سی پلاس پلاس از کاراکترهاي يوني کد (Unicode) استفاده مي کند ، يوني کد استانداردي است که بر خلاف اسکي براي هر کاراکتر از دو بايت استفاده مي کند و مي تواند در آن واحد تا 65000 کاراکتر را پشتيباني کند . البته تمام کاراکترهاي ذيل 00CO رزرو شده اند و شما مي توانيد از کاراکترهاي بالاي اين حد آزادانه استفاده کنيد .
نام متغيرها در هر دو زبان نسبت به نوع حروف حساس است و اين دقت زيادي را در در هنگام نوشتن برنامه ها مي طلبد . به همين دليل رعايت يک قرارداد هنگام نامگذاري متغيرها مي تواند کمک بزرگي در مقابله با مشکلات احتمالي باشد .
قراردادهاي استفاده شده چنين اند : نام هاي با معني ، ترکيب چند کلمه ، کلمه اول با حرف کوچک شروع مي شود ، کلمات بعدي با حرف بزرگ شروع مي شوند . به اين مثال در جاوا دقت کنيد :


انواع متغيرها
هنگام تعريف هر متغير علاوه بر نام آن بايد نوع آن هم مشخص شود . نوع متغير تعيين مي کند که يک متغير چه مقاديري را مي تواند بگيرد . هر متغير مي تواند يکي از سه نوع ذيل باشد :
• يکي از هشت نوع داده اوليه
• نام يک کلاس يا واسط
• يک آرايه
هشت نوع داده اوليه جاوا براي کار با اعداد صحيح ، اعداد اعشاري ، کاراکترها و مقادير منطقي ( درست يا نادرست ) هستند ، به آنها انواع اوليه گفته مي شود. در جاوا چهار نوع عدد صحيح (Integer) وجود دارد .



به جدول زير نگاه کنيد .

اين انواع همگي علامت دار هستند ، يعني مي توانند اعداد مثبت و منفي را در خود ذخيره کنند . نوع متغير انتخاب شده به عددي که مي خواهيد ذخيره کنيد بستگي دارد . اگر عدد بزرگتر از متغير باشد ، بي سرو صدا قيچي خواهد شد !
براي ذخيره کردن اعدا داراي مميز از نوع اعشاري ( با مميز شناور – floating point ) استفاده مي شود . اعداد اعشاري در جاوا از استاندارد IEEE 754 تبعيت مي کنند . دو نوع عدد اعشاري وجود دارد : float 32bit دقت ساده و Double 64bit دقت مضاعف .
نوع داده کاراکتر (char) براي ذخيره کردن يک کاراکتر است . چون جاوا از يوني کد استفاده مي کند هر متغير Char داراي 16 بيت ( بدون علامت ) خواهد بود .
آخرين نوع داده اوليه در جاوا نوع منطقي (Boolean) است که مي تواند دو مقدار True يا False بگيرد . بر خلاف ++C ، نوع منطقي يک عدد نيست و نبايد آن را با اعداد مقايسه کرد . علاوه بر اين انواع ، متغيرهاي جاوا مي توانند از نوع کلاس هم باشند :

اين متغيرها يک وهله از کلاس مربوطه هستند .
در جاوا ( بر خلاف ++C ) ، دستور typedef وجود ندارد . براي تعريف انواع جديد در جاوا ، ابتدا يک کلاس جديد ايجاد کنيد ، و سپس متغيري از نوع اين کلاس تعريف کنيد .

آبجی
4th February 2010, 09:50 PM
مقدار دادن به متغيرها
بعد از تعريف متغيرها ، با استفاده از عملگر = مي توان به آنها مقدار داد :

توضيحات (Comments) :
سه نوع توضيح در اين زبانها وجود دارد . در نوع اول در جاوا و ++C از */ براي شروع و از /* براي ختم آن استفاده مي شود . کامپايلر هر چه را بين اين دو علامت بيابد ناديده خواهد گرفت .

*/
اين نوع توضيح مي تواند چند خطي باشد .
در نوع دوم براي توضيحات تک خطي از // مي توان استفاده کرد:

در نوع سوم توضيح که برنامه javadoc از آن استفاده مي کند يا **/ شروع و با /* پايان مي يابد . اين نوع توضيح از همه نظر شبيه نوع اول است .


واژه ها
براي نمايش مقادير مشخص و ساده از واژه ها (Literal) استفاده مي شود . اين واژه ها مي تواند عدد ، کاراکتر ، رشته يا مقادير منطقي باشند .

واژه هاي عددي :
چندين واژه صحيح وجود دارد . مثلاً ، 4 يک واژه صحيح از نوع int است . اگر عدد واژه از يک int بزرگتر باشد بطور خودکار به نوع long تبديل خواهد شد . مي توانيد حتي يک عدد کوچک از نوع long داشته باشيد ، براي اينکار در جاوا بايد جلوي عدد از حرف l يا L استفاده کنيد . مثلاً ، 4L عدد صحيح 4 را در يک واژه long ذخيره مي کند .
واژه هاي اعشاري معمولاً دو قسمت دارند . يک قسمت صحيح و يک قسمت اعشاري . تمام واژه هاي اعشاري صرفنظر از دقت عدد از نوع double خواهند بود مگر اينکه با قيد حرف f ( يا F ) در جلوي آن تصريح شود که عدد مزبور از نوع float بايد باشد . واژه هاي اعشاري را با استفاده از حرف E ( يا e ) مي توان به صورت نمايش هم نوشت – 10e45 يا -3.6E-2 .

واژه هاي منطقي :
در جاوا يک واژه منطقي فقط مي تواند معادل کلمات کليدي True يا False باشد .

واژه هاي کاراکتري :
يک واژه کاراکتري عبارت است از يک حرف که با علامت نقل محصور شده باشد ‘a’ ، ‘#’ و غيره .در جاوا واژه هاي کاراکتري به صورت يوني کد ( 16 بيتي ) ذخيره مي شوند در حاليکه در سی پلاس پلاس به صورت اسکي ذخيره می شوند. . در جدول زير چند کد غير چاپي خاص و کاراکترهاي يوني کد را مشاهده مي کنيد . ( در جدول d نماينده يک رقم است ) .


واژه هاي رشته اي :
يک رشته (String) عبارتست از مجموعه چند کاراکتر . هر رشته در جاوا وهله ايست از کلاس String . بر خلاف ++C ، رشته ها در جاوا آرايه ساده کاراکترها نيستند ( اگر چه بسياري از خواص آرايه ها را ندارند ) . چون رشته هاي جاوا اشياء حقيقي هستند ، متدهايي دارند که کار با آنها را بسيار زنده مي سازند .
يک واژه رشته اي عبارت است از چند کاراکتر که در علامت نقل دو گانه محصور شده باشند :

رشته ها مي توانند شامل کدهاي خاص جدول زير نيز مي باشند :

در مثال آخر ، \u2122 کاراکتر يوني کد علامت تجاري ™ است .

- اينکه شما مي توانيد در رشته هاي جاوا از کاراکترهاي يوني استفاده کنيد بدان معنا نيست که مي توانيد آن کاراکترها را ببينيد . براي ديدن اينگونه کاراکترها کامپيوتر يا سيستم عامل شما بايد از يوني کد پشتيباني کند و فونت بکار رفته را هم داشته باشد .
- تفاوت واژه هاي رشته اي با ديگر انواع واژه هاي رشته اي ( بر خلاف ديگر واژه ها ) اشياء واقعي (وهله هاي کلاس String ) هستند .


عبارات و عملگرها
عبارت (expression) ساده ترين واحد عملياتي است .
عبارت دستوري است که يک مقدار بر مي گرداند . در عبارات از علايم خاصي استفاده مي شود که به آنها عملگر (Operator) گفته مي شود . ساده ترين نوع عبارات به مقايسه مقادير و محاسبه مي پردازد . عبارات را مي توان به يک متغير نسبت داد چون داراي مقدار برگشتي است .
عملگرهاي جاوا عبارتند از عملگرهاي محاسباتي ، انواع مختلف انتساب مقدار ، افزايش و کاهش ، و عمليات منطقي .

محاسبات
هر دو زبان داراي پنج عملگر محاسباتي است .
هر عملگر دو عملوند (Operand) لازم دارد . از عملگر تفريق (-) براي منفي کردن اعداد هم مي توان استفاده کرد . تقسيم اعداد صحيح داراي خارج قسمت صحيح خواهد بود و مقدار اعشار آن ناديده گرفته خواهد شد . مثلاً حاصل تقسيم 9/31 معادل 3 خواهد بود . عملگر % باقيمانده تقسيم را بر مي گرداند .
براي مثال حاصل عبارت 9%31 معادل 4 خواهد شد .
حاصل عمليات دو عدد صحيح همواره يک عدد صحيح خواهد بود . نوع داده مقدار برگشتي با نوع داده عملوندي که جاي بيشتري اشغال مي کند معادل خواهد بود .

آبجی
4th February 2010, 09:50 PM
انتساب مقادير
نسبت دادن مقدار (assignment) به يک متغير نوعي عبارت است ; در حقيقت ، چون هر عبارت يک مقدار برگشتي دارد مي توان چند عبارت انتسابي را به هم پيوند داد:
X=y=z=0;
هميشه ابتدا مقدار عبارت سمت راست محاسبه شده و به عبارت سمت چپ نسبت داده مي شود . اين بدان معناست که عبارت x=x+2 يک عبارت صحيح است ؛ به x دو واحد اضافه شده و حاصل در x قرار داده مي شود . عملياتي از اين دست چنان در برنامه نويسي رايج است که جاوا براي آن عملگر ويژه اي دارد ( اين ويژگي را جاوا از ++C بعاريت گرفته است ) . جدول عملگر هاي ويژه را نشان داده است .

در عبارت پيچيده ممکن است نتيجه اين عملگرهاي ويژه با معادلهايشان يکسان نباشد . اين موضوع کاملاً به نوع عبارت ، پيچيدگي آن و ترتيب محاسبه بستگي دارد .

آبجی
4th February 2010, 09:51 PM
افزايش و کاهش

مانند ++C در جاوا هم براي اضافه يا کم کردن 1 از عملگرهاي ++ يا -- استفاده مي شود . مثلاً عبارت ++X به X يکي اضافه مي کند و معادل x=x+1 است . عبارت X-- هم يکي از x کم مي کند . بر خلاف ++C ، عملوند در عبارات ++ يا -- مي توانند اعشاري هم باشند .
عملگرهاي ++ و -- مي توانند قبل يا بعد از متغير قرار گيرند . در عبارات ساده اين موضوع چندان اهميتي ندارد ، ولي در عبارات پيچيده مي تواند باعث بروز تفاوتهايي شود . براي مثال ، به دو عبارت ذيل دقت کنيد :
y = x++;
y = ++ x;

نتيجه اين دو عبارت بسيار متفاوت خواهد بود . در عملگر پسوند ++ يا x-- ، y مقدار x را قبل از تغيير آن مي گيرد ؛ در عملگر پيشوند ( -- يا --x ) مقدار x بعد از تغيير به y داده مي شود . در ليست زير مثالي که اين مطلب را نشان مي دهد آورده شده است .

مقايسه ها
هر دو زبان براي مقايسه مقادير عبارات متعددي دارد . تمام اين عبارات يک مقدار Boolean (يعني True يا False ) بر مي گرداند . جدول زير عملگرهاي مقايسه اي را نشان مي دهد :




عملگرهاي منطقي
عباراتي که مقدار برگشتي آنها Boolean است را مي توان با اپراتورهاي منطقي AND ، OR ، XOR با هم ترکيب کرد .
براي AND کردن دو عبارت بايد از & يا && استفاده کرد . حاصل عبارت زماني درست خواهد بود که هر دو قسمت درست باشند ، در غير اينصورت حاصل عبارت نادرست خواهد شد . تفاوت اين دو عملگر در نحوه ارزيابي عبارت است . با عملگر& ، هر دو قسمت عبارت ارزيابي مي شوند . اما با عملگر && اگر سمت چپ عبارت نادرست باشد ، براي تمام عبارت مقدار False برگشت داده مي شود و سمت راست عبارت ارزيابي نخواهد شد .
براي OR کردن دو عبارت از | يا || استفاده مي شود . حاصل عبارت زماني درست خواهد بود که يکي يا هر دو قسمت آن درست باشند ، فقط وقتي عبارت نادرست است که هر دو قسمت آن نادرست باشند . با عملگر | هر دو قسمت عبارت ارزيابي مي شوند . ولي عملگر || اگر قسمت اول درست باشد ، براي تمام عبارت مقدار True برگشت داده مي شود و سمت راست عبارت فقط ارزيابي نخواهد شد .
هنگام XOR کردن دو عبارت ( که عملگر آن ^ است ) فقط زماني حاصل عبارت درست خواهد بود که در قسمت آن ارزش متضاد داشته باشد و اگر هر دو قسمت عبارت هم ارزش باشد ، حاصل عبارت نادرست خواهد شد . در کل ، عملگرهاي || و && براي عمليات منطقي و عملگرهاي | ، & و ^ براي عمليات منطقي بيت گرا (Bitwise) مورد استفاده قرار مي گيرند .
عملگر NOT (!) فقط روي يک آرگومان عمل کرده و ارزش آن را معکوس مي کند . مثلاً ، اگر x درست باشد ، X ! نادرست خواهد بود .
بر خلاف C++ ، متغيرهاي Boolean فقط مقادير True يا False مي گيرند و نمي توانند عدد بگيرند .


عملگرهاي بيت گرا
عملگرهاي بيت گرا روي بيت هاي عملوند ها عمل مي کنند . چون عمليات بيت گرا جزء مباحث پيشرفته برنامه نويسي است در جدول زير اين عملگرها را مشاهده مي کنيد :



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

دلايل استفاده از OOP:
1- سادگي و سرعت در ايجاد برنامه هاي بزرگ
2- پشتيباني ساده تر و ارزان تر
3- مناسب براي پروژه هاي گروهي
4- مناسب براي طراحي و پياده سازي

از برتري‌هاي جاوا نسبت به زبانهاي مايکروسافتي مثل سي‌شارپ که بسيار شبيه اين زبان هست مي‌توان موارد زير را نام برد:
1 - سيستم عامل: هر چقدر زبانهاي net. قوي باشند در آخر بر روي پلت فرم ويندوز که يکي از غير قابل اعتمادترين سيستم عامل ها در برنامه نويسي Enterprise است اجرا مي‌شوند، ولي جاوا از اين نظر انتخابي خوب است. (هنوز پروژه mono به نتايج پاياني خود نرسيده)
2- قابليت حمل: جاوا بر روي پلتفرم‌هاي گوناگوني قابل اجرا است، از ATM و ماشين رختشويي گرفته تا سرورهاي سولاريس با قابليت پشتيباني از 1024 cpu براي پردازش.
3- جاوا بيشتر از يک زبان است: جاوا فقط يک زبان نيست و انجمن‌هايي متشکل از بزرگان صنايع و برنامه‌نويسان زيادي مشغول به توسعه و ايجاد استانداردهاي جديد و به روز هستند.
جاوا يک زبان برنامه نويسي است که در اوايل دهه 90 توسط Java Soft ، بخش نرم افزاري شرکت Sun توسعه داده شد . هدف آن بود که جاوا زباني ساده ، قوي و همه منظوره باشد . جاوا تمام جنبه هاي مثبت ++C را در خود دارد ، و آن چيزهايي که برنامه نويسان ++C از آن نفرت داشته اند ( مانند وراثت چند گانه ، تحريف اپراتورها و اشاره گرها ) را به کناري گذاشته است.
مهمترين ويژگيهاي جاوا اين است که اساساً شيء گرا است . اولين ادعاي OOP توانايي استفاده مجدد از کد است : چيزي که ++C با تمام ادعاهايش هرگز نتوانست بدان دست يابد . تصورش را بکنيد که با صرف کمي وقت بتوانيد برنامه اي بنويسيد که در سيستم هاي ويندوز ، يونيکس و مکينتاش براحتي اجرا شود . همين که يک شرکت نرم افزاري بتواند براي تمام پلاتفرم هاي موجود در آن واحد پروژه اي را توليد کند ( و مقادير عظيمي پول صرفه جويي کند ) خود مي تواند بهترين دليل اقبال جاوا باشد و امروز ديگر همه ( و نه فقط شرکتهاي نرم افزاري ) به سمت جاوا کشيده شده اند . با اين ويژگي ( استقلال از پلاتفرم ) يک برنامه نويس مي تواند براي سيستمي برنامه بنويسد که هرگز با آن کار نکرده است . اين ويژگي اصلي ترين علت توفيق جاوا در اينترنت است . اينترنت شبکه پيچيده اي است از ميليونها کامپيوتر مختلف در سراسر دنيا ، و مقاومت در مقابل اين وسوسه که بتواند برنامه اي بنويسد که روي تمام اين سيستم هاي متفاوت و نامتجانس اجرا شود چندان ساده نيست .
جاوا يک زبان بسيار ساده است چون شما را وادار نمي کند تا در محيط جديد ( و نا آشنايي ) کار کنيد و اين براي کساني که اطلاعات فني ناچيزي درباره کامپيوتر دارند بسيار مهم است . ساختار زبان جاوا در نگاه اول بسيار شبيه C و ++C است و اين به هيچ وجه تصادفي نيست . C زباني است ساخت يافته و ++C زبانيست شيء گرا و مهمتر از همه قسمت اعظم برنامه نويسان دنيا از آنها استفاده مي کنند از سوي ديگر اين شباهت حرکت به طرف جاوا را براي اين قبيل افراد ساده خواهد کرد. بنابراين طراحان جاوا براي اجتناب از دوباره کاري از زبانهاي C و ++C بعنوان مدل استفاده کردند .
جاوا با دور انداختن اشاره گرها و بر دوش کشيدن بار مديريت حافظه ، برنامه نويسان C و++C را براي هميشه از اين کابوس ها رهايي بخشيده است . علاه بر آن چون جاوا زباني براي اينترنت است، از ايمني و حفاظت ذاتي بالايي برخوردار است . طراحان جاوا از ابتدا يک محيط برنامه نويسي امن را مد نظر داشته اند . مسئله حفاظت سيستم ها رابطه تنگاتنگي با اشاره گرها دارد . اکثر مهاجمان براي ورود غير قانوني به سيستم هاي ديگران از اين اشاره گرها استفاده مي کنند و جاوا با حذف اشاره گرها اين راه را سد کرده است . جاوا مکانيزم هاي حفاظتي ديگري هم دارد.
جاوا شباهت‌هايي به سي‌پلاس‌پلاس دارد، ولي قابليت انتقال آن بهتر است و استفاده از آن ساده تر از ++C است. همچنين مديريت حافظه نيز توسط خود ماشين مجازي جاوا انجام مي‌شود. طراحي اين زبان به گونه ايست که داراي اطمينان بسياري بوده و وابسته به سيستم عامل خاصي نيست. و دليل اين موضوع اين است که جاوا يک ماشين مجازي در سيستم شما راه مي‌اندازد و برنامه‌ها را در آن ماشين مجازي اجرا مي‌کند. اين ماشين مجازي «ماشين مجازي جاوا» يا به اختصار JVM ناميده مي‌شود. البته راه انداختن يک ماشين مجازي باعث دو مشکل مي‌شود. هنگامي که نرم‌افزار شما در يک ماشين مجازي اجرا مي‌شود سرعت کمتري خواهد داشت، همچنين شما نياز داريد قبل از اجراي برنامه‌هاي جاوا يکبار سيستم مجازي جاوا را که حجم نسبتاً بالايي دارد، از اينترنت (http://www.mypersianforum.com/wiki/%C3%98%C2%A7%C3%9B%C2%8C%C3%99%C2%86%C3%98%C2%AA%C 3%98%C2%B1%C3%99%C2%86%C3%98%C2%AA) بارگذاري (http://www.mypersianforum.com/wiki/%C3%98%C2%A8%C3%98%C2%A7%C3%98%C2%B1%C3%9A%C2%AF%C 3%98%C2%B0%C3%98%C2%A7%C3%98%C2%B1%C3%9B%C2%8C) و يا از جاي ديگري تهيه و نصب کنيد ولي مزيت آن عدم وابستگي به سيستم عامل مقصد است.
مهم‌ترين ايرادي که برنامه نويسان ساير زبان‌ها به زبان جاوا مي گيرند سرعت اجرايي بسيار پايين جاوا است. يک برنامه جاوا به صورت بايتکد مي باشد و بايد در ماشين مجازي جاوا اجرا گردد. به همين دليل سرعت اجراي پاييني را در مقابل زبان‌هاي قدرتمندي همچون ++C دارد. به صورت ديگر يک برنامه ++C به طور متوسط تا 10 برابر سريعتر از برنامه مشابه جاوا اجرا مي‌گردد. جاوا علي رقم شيء گرا بودن در بخشي از قسمت‌ها براي ايجاد انعطاف بيشتر يا بازاريابي بهتر برخي اصول شي گرايي را ناديده گرفته است. از جمله اين قسمت‌ها قابليت بازتابش (http://www.mypersianforum.com/w/index.php) Reflection مي باشد. هدف اصلي بازتابش اين است که استفاده مجدد از کدها و گسترش کدهاي موجود و مهم‌تر از همه نوشتن برنامه‌هاي الحاقي آسان گردد ولي اين مهم با زير پا گذاشتن بعضي اصول ممکن شده است. براي نمونه با کمک بازتابش به راحتي مي‌توان متدهاي خصوصي ديگر کلاس‌ها را فراخواني کرد!
زبان جاوا در مقابل زباني مثل ++C ساده تر و يادگيري ان آسانتر است. اين آسانتر بودن به سادگي به دست نيامده است بلکه با حذف بسياري از موارد که باعث قدرتمند تر بودن زبان ++C بوده‌اند ايجاد شده است. مهم‌ترين اين موارد اشاره گرها و وراثت چندگانه بوده‌اند که در زبان جاوا يافت نمي شوند. از آنجايي که جاوا زباني با عدم وابستگي به بستر مي باشد پس استفاده از توابع سيستم عامل را در برنامه نمي پذيرد. به همين صورت نمي‌توان از واسط‌هاي برنامه نويسي غير از جاوا در آن استفاده نمود.
جاوا از وراثت منفرد Single استفاده مي کند . وراثت منفرد يعني هر کلاس جاوا مي تواند فقط يک فوق کلاس داشته باشد . اما عکس آن درست نيست ، يعني يک کلاس مي تواند چندين زير کلاس داشته باشد .
در زبانهاي شيء گراي ديگر ، مانند ++C، يک کلاس مي تواند از چند فوق کلاس به ارث ببرد . به اين وضعيت وراثت چند گانه (Multiple) گفته مي شود . با وراثت چند گانه مي توان کلاس هاي فوق العاده جالبي بوجود آورد ، ولي کد نويسي آنها بسيار دشوار است .
ديديد که در جاوا هر کلاس فقط از يک فوق کلاس ارث مي برد . با اينکه وراثت منفرد برنامه نويسي را ساده تر مي کند ولي کمي محدودتر هم هست . مثلاً ، اگر در شاخه هاي مختلف يک سلسله مراتب متدهاي مشابهي داشته باشيد ، بايد تمام آنها را جداگانه پياده سازي کنيد . جاوا با استفاده از مفهومي بنام واسط مشکل به اشتراک گذاشتن متدها را حل کرده است .
واسط عبارت است از مجموعه ي نام چند متد ، بدون تعريف آنها ، که واسط آنها در اختيار کلاس استفاده کننده مي گذارد .
يک کلاس جاوا مي تواند در آن واحد از چندين واسط استفاده کند ، و با اين کار کلاس هاي بسيار متفاوت مي توانند رفتارهاي مشابهي داشته باشند .
در جاوا کلاس و واسط هاي مرتبط با هم در يک بسته گرد آورده مي شوند . کلاس هاي اصلي جاوا در بسته اي بنام java گرد آورده شده اند و فقط محتويات اين بسته است که در تمام نسخه هاي جاوا ثابت مي ماند . البته در بسته Java بسته هاي ديگري وجود دارند ولي بسته Java.lang به طور پيش فرض در اختيار تمام برنامه هاست . براي استفاده از بسته هاي ديگر بايد آنها را به طور صريح تعريف کرد . نام بسته ها و کلاس ها در هنگام تعريف با نقطه (.) از هم جدا مي شوند . مثلاً براي استفاده از کلاس Color که در بسته awt ( که خود در داخل بسته Java مي باشد ) قرار دارد ، بايد چنين نوشت : java.awt.Color.

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد