آموزش کامل برنامه نویسی جاوا

پیشگفتار

جاوا

مقدمه

جاوا [1] یکی از تکنولوژی های عمده ایجاد محتویات فعال در اینترنت است. اپلت های جاوا ، توسط کاوشگر بار و اجرا می شوند ، دارای بسیاری از قابلیت های Activex هستند ، اپلت های جاوا برای جلوگیری از اقدامات خرابکارانه ، فاقد توانایی های خاص ( از قبیل دسترسی به سیستم فایل[2] ) هستند و این آنها را بسیار محدود کرده است. از نظر تئوری ، اپلت های جاوا ایمن هستند چون اساسا نمی توانند کار های خطرناک انجام دهند!

علاوه بر آن ، چون جاوا زبانی برای اینترنت است ، از ایمنی و حفاظت ذاتی بالایی برخوردار است. طراحان جاوا از ابتدا یک محیط برنامه نویسی امن را مد نظر داشته اند. مسئله حفاظت سیستم ها رابطه تنگاتنگی با اشاره گر ها دارد.

اکثر مهاجمان برای ورود غیر قانونی به سیستم های دیگران از این اشاره گر ها استفاده می کنند و جاوا با حذف اشاره گرها این راه را سد کرده است.

تکنولوژی Activex یکی از قویترین ابزارهاییست که برنامه نویسان ویندوز در اختیار دارند. تقریبا هر برنامه ای که بنویسید از Activex استفاده خواهند کرد.

جهت کد نویسی و طراحی صفحات وب نیاز به یک نرم افزار ویرایش متن[3] ساده مانند Notepad که در تمامی ویندوز ها قابل دسترسی می باشد و نیاز به نصب نرم افزار ویرایش متن جدیدی نیست.

ضمنا سیستم شما باید دارای مشخصات سخت افزاری ذیل باشد :

  • حداقل سیستم مورد نیاز پنتیوم 233
  • 16 مگابایت حافظه رم[4]
  • حدود 600 مگابایت فضای آزاد

آشنایی با Activex

تکنولوژی Activex ، یکی از قوی ترین ابزار هاست که برنامه نویسان ویندوز در اختیار دارند. تقریبا هر برنامه ای که بنویسید از ۀن استفاده خواهند کرد. در این فصل با سرفصل ذیل آشنا خواهیم شد.

  • اهمیت مدول های نرم افزاری
  • تاریخچه و اصطلاحات Activex
  • درک مفهوم جاوا و کنترل Activex
  • امنیت و توزیع کنترل

برنامه نویسی مدولار سال ها برنامه نویسان را به خود مشغول کرده بود و در واقع یکی از محرک های اصلی توسعه سیستم عامل ویندوز هم همین ایده کد های قابل اشتراک و قابل استفاده مجدد بوده است. اولین گام در راه پیاده سازی عناصر مدولار تکنولوژی OLE [5] بود. هدف اولیه OLE ، ایجاد سند های مرکب [6] با استفاده از برنامه های مختلف بود.

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

تکنولوژی OLE ، خود بر یک استاندارد کلی تر به نام COM [7] استوار است. بزودی COM از سند های مرکب فراتر رفت و OLE را هم به دنبال خود می کشاند و از آن به بعد OLE اصطلاحی شد برای هر چیزی که از تکنولوژی COM استفاده می کرد. سالها بعد که شرکت مایکروسافت [8] به طور جدی درگیر اینترنت شد ، اصطلاح Activex هم وارد ادبیات کامپیوتری شد. ابتدا این اصطلاح فقط در رابطه با اینترنت و وب بود اما اوضاع بدین منوال باقی نماند و اکنون Activex به آن بخش از تکنولوژی های COM گفته می شود که در آنها یک قطعه نرم افزاری امکانات خود را در اختیار برنامه های دیگر می گذارد. یکی از ادعاهای Activex ( به ویژه به اینترنت مربوط می شود) پشتیبانی از نرم افزار های توزیع شده [9] است ، و این یعنی کنترل Activex به شما سرویس خواهند داد ، حتی اگر در کامپیوتری دیگر ( و هزاران کامپیوتر دورتر ) باشند. اما چه بر سر OLE آمد ؟ این تکنولوژی دوباره به وضعیت اولیه برگشت و اکنون فقط با سند های مرکب سروکار دارد.

ویژگی های Activex

بهترین وسیله برای ایجاد محتویات فعال در وب تکنولوژی Activex است. البته برخی با این عقیده مخالفند و باید گفت که این تکنولوژی مسلما تنها ابزار محتویات فعال وب نیست. پس اجازه دهید نگاهی به جنبه های مثبت و منفی این تکنولوژی بیندازیم :

نقاط قوت

کنترل Activex یکی از مهمترین نقاط قوت آن به شمار می رود و تقریبا از عهده ی هر کاری که یک برنامه عادی قادر به انجام آن باشد بر می آید.

از دیدگاه یک برنامه نویس وب این بهترین جنبه یک ابزار خلق محتویات دینامیک است. دیگر ابزار های محتویات فعال ، هستند. ActiveX ، در این زمینه بسیار محدود تر از CGI مانند جاوا و نکته مثبت دیگر ، حداقل برای بسیاری از افراد ، امکان استفاده از است. ActiveX مهارت های عادی برنامه نویسی در خلق کنترل های است. ActiveX روش انجام بارگیری های وب هم یکی از مزایای دارد می روید ، وقایع ذیل ActiveX وقتی به یک صفحه وب که عناصر اتفاق می افتد :

  • اطلاعات مختصری درباره کنترل و شماره ویرایش آن بار می شود.
  • کاوشگر بررسی می کند که آیا این نرم افزار در کامپیوتر شما نصب شده است یا خیر.
  • اگر این نرم افزار در سیستم شما وجود نداشت ( یا اینکه ویرایش آن قدیمی تر بود )، کاوشگر آن را بار کرده و سپس نصب و اجرا خواهد کرد.
  • اگر نرم افزار در سیستم شما وجود داشت ، کاوشگر آن را از همان جا اجرا خواهد کرد.

حتماً متوجه مزیت این روش شده اید : هر قطعه نرم افزاری فقط یک بار باید بار شود و دفعات بعد دیگر نیازی به بار شدن آن نخواهد بود ، بنابراین صرفه جویی زیادی در زمان نمایش آن صفحه وب خواهد شد. در ابزار هایی مانند جاوا ، این قبیل نرم افزار ها باید هر دفعه مجددا بار شوند و این اجرای آن ها را به مراتب کند تر خواهد کرد.

نقاط ضعف – هیچ چیز کامل نیست !

شاید مهم ترین جنبه منفی ActiveX ( ضعف ظاهراً یکی از تبعات اجتناب ناپذیر قدرت و انعطاف تکنولوژی است)، ضعف امنیتی آن باشد.. یک برنامه نویس شرور می تواند به راحتی با این ActiveX تکنولوژی نرم افزاری بسازد که به کامپیوتر دیگران صدمه بزند. با توجه به این وضعیت ، آیا می توان هنگام برخورد با کنترل های روی اینترنت احساس راحتی کرد ؟ پاسخ این سوال مثبت ActiveX است و در ادامه توضیح خواهیم داد که چگونه میکروسافت اقدامات امنیتی خاص را برای این تکنولوژی پیاده سازی کرده است. با این وجود همواره این مطلب را در نظر داشته باشید که هیچ سد امنیتی ذاتاً نفوذ ناپذیر نیست.

یکی دیگر از نقاط ضعف تکنولوژی کاوشگر های امروزی آن است که فقط برخی از آن از ActiveX پشتیبانی می کنند. اگر در یک صفحه وب وجود داشته باشد و فردی با یک کاوشگر که از ActiveX نرم افزار های پشتیبانی نمی کند این صفحه را باز کند قادر به استفاده از ActiveX مزایای آن نخواهد بود. خوشبختانه این مشکل آن چنان که به نظر می آید Netscape حاد نیست ، چون دو تا از مهم ترین کاوش گر های وب ( Navigator,Internet Explorer ) از این تکنولوژی می کنند ( اولی مستقیم. دومی از طریق یک افزودنی فایل نصب ) به هر حال ، وقتی با برنامه نویسی اینترنت سر و کار داریم ، این مشکل اساساً وجود ندارد چون این ما هستیم که شبکه را کنترل می کنیم آن است که تمام آن ها روی ActiveX مشکل دیگر رفتار کنترل های سیستم شما جا خوش کرده و فضای هارد دیسک را اشغال خواهند کرد. اما به نظر من نگرانی در این مورد هم بهبود وضعیت جاوا چگونه است ؟

جاوا یکی دیگر از تکنولوژی های عمده ایجاد محتویات فعال در اینترنت است.

اپلت[10] های جاوا، که توسط کاوشگر بار و اجرا می شوند ، دارای بسیاری از قابلیت های ActiveX هستند ، اپلت های جاوا برای جلوگیری از اقدامات خرابکارانه ، فاقد توانایی خاص ( از قبیل دسترسی به سیستم فایل Systemfile هستند و این آنها را بسیار محدود کرده است. از نظر تئوری ، اپلت های جاوا ایمن هستند چون اساساً نمی توانند کار های خطرناک انجام دهند !

چون عناصر ActiveX معمولا کوچکند و چند ده مگابایت جایی که احتمالا ( صد ها کنترل ActiveX ) اشغال خواهند کرد در هارد دیسک های بسیار بزرگ امروزی نمی توانند مشکلی ایجاد کنند.

به کار بردن کنترل های ActiveX

کنترل های ActiveX صفحات اینترنتی شما را به صورت زنده در می آورند ، به طوری که شما قادر خواهید بود فایل های صوتی زنده را اجرا کرده و با نشانگر های متغیر را ببینید و بسیاری کار های مشابه دیگر را انجام دهید.

  1. به یک صفحه وب که دارای کنترل ActiveX است متصل شوید ، به عنوان مثال به آدرس فوق مراجعه کنید : http://carpoint.msn.COM
  2. گزینه مربوط به اجرای یک فایل صوتی یا تصویری را کلیک کنید.
  3. در صورت نیاز گزینه Yes را کلیک کنید تا نصب ActiveX بر روی دستگاه شما منتقل شده و اجرا می شود.

شکل ‏2‑1 :

اگر شما به یک پایگاه اینترنت که دارای یک کنترل ActiveX هست مراجعه کنید نرم افزار IE چک می کند که کدام کنترل ها به صورت دیجیتالی تایید شده اند. یک کنترل تایید شده دیجیتالی برنامه ای است که به صورت مستقل تایید شده است که دارای ویروس های کامپیوتری نیست و تاثیرات منفی بر روی دستگاه شما ندارد. شما می توانید پنجره ای بر روی صفحه مانیتور خود ببینید که به شما اطلاع می دهد که آیا نصب کردن این نرم افزار بر روی دستگاه شما به امنیت آن صدمه ای نمی زند و یا اخطار می دهد که در صورت نصب به دستگاه شما به صورت نرم افزاری آسیب می رساند.

نکته :

جریان داده : در اینترنت به جای اینکه فایل صوتی بزرگ را قبل از اینکه بشنوید به کامپیوترتان منتقل نکنید از جریان داده استفادده می شود. پایگاه های اینترنتی اطلاعات خود را به صورت یک جریان داده می فرستند ، کامپیوتر شما پس از چند ثانیه از شروع جریان داده آن را با خبر کرده و شروع به پخش آن می کند و به همین ترتیب فایل صوتی یا تصویری را تا انتها اجرا می کند.

اجرای Java Applet و نمایشگر ها

نرم افزار Java Applet را وقتی اجرا می کند که صفحه وب حاوی آن در حال شروع به نمایش بر روی صفحه کامپیوتر شما می باشد. هزاران Java Applet بر روی وب نظیر نشانگر های متغیر بالا و پایین برنده صفحه که از خود صدا تولید می کند ، ماشین حساب ها و بسیاری از عملکرد های دیگر ، وجود دارد.

اجرای یک : Java Applet

  1. به یک صفحه وب که دارای Java Applet هست متصل شوید. به عنوان مثال به آدرس های زیر مراجعه کنید :

http://www.gamelan.COM و یا http://www.javasoft.COM

  1. منوی Category را اتتخاب کنید و سپس گزینه مربوط به نمایش صفحه وب همراه با Java Applet را کلیک کنید. Java Applet به کامپیوتر شما منتقل خواهد شد و به اجرا در خواهد آمد.
  2. اگر لازم شد اطلاعات درخواستی اپلت های جاوا و یا منو های مناسب آن را کلیک کنید تا اجرای آن کامل شود.

شکل ‏2‑2 :

JIT خاموش کردن اجرا کننده

  1. منوی ابزار را کلیک کرده و سپپس Internet Option را کلیک کنید.
  2. جعبه Advance را کلیک کنید.
  3. صفحه را به پایین آورید تا به قسمت Java MV برسید.
  4. جعبه مربوط به گزینه Java COMplier 5 کلید OK را کلیک کنید.

نرم افزار IE دارای یک اجرا کننده نرم افزار است که دقیقاً در همان زمان گرفتن برنامه آن را اجرا می کند ( JIT ) بصورت پیش فرض روشن است. وقتی که شما با مشکلی در اجرای اپلت های جاوا برخورد کردید ، می توانید اجرا کننده JIT خود را در منوی Advance در Internet Optionخاموش کنید. بدین ترتیب اپلت های جاوا بر روی دستگاه شما دیگر اجرا نخواهند شد.

کنترل کردن Java و برنامه های ActiveX

توسط IE شما می توانید دقیقا تعیین کنید کنترل های Active و برنامه های Java Applet تا چه حد بر روی برنامه هایی دستگاه شما تاثیر بگذارند با استفاده از Security Zones استفاده کنندگان و مدیران شبکه می توانند درباره سطح دسترسی کنترل های Active و برنامه های Java Applet تصمیم بگیرند. به عنوان مثال شما می توانید به برنامه های Java Applet که از پایگاه های معتبر بر روی اینترنت دریافت می کنید اجازه دسترسی بیشتری به کامپیوترتان را بدهید و یا اینکه جاوا اپلت های گرفته شده از پایگاه های غیر معتبر را از لحاظ دسترسی به فایل های دستگاهتان محدود کنید تا نتوانند به آن ها آسیب برسانند.

شکل ‏2‑3

شکل ‏2‑4

تغییر دادن درجه امنیت برنامه های ActiveX

  • Internet Option را کلیک کنید و سپس گزینه منوی Tools را کلیک کنید.
  • گزینه Security را در بالای پنجره کلیک کنید.
  • بر روی گزینه مناسب کلیک کنید.
  • آن گاه می توانید با بالا بردن نشانه ، تدابیر امنیتی شدید تری اتخاذ کنید و یا بالعکس با پایین آوردن نشانه درجه امنیت را پایین تر بیاورید و در اصطلاح به Java Applet اطمینان کنید.
  • برای تغییر مشخصات حرفه اای تر می توانید گزینه Custom Level را کلیک کنید.
  • برای تغییر هر کدام از مشخصات زیر یکی از 3 گزینه ( قابل اجرا ) Prompt و Enable ( غیر قابل اجرا ) را انتخاب کنید.
  • مشخصه Script ActiveX در حقیقت امن بودن اسکریپت ها را چک می کند.
  • مشخصه ActiveX برنامه های بعدی امنیت اجرای کنترل های Plug-nis چک می کند.
  • گزینه بعدی مربوط به گرفتن کنترل های Signed علامت دیجیتالی تایید شده توسط ActiveX است.
  • گزینه بعدی مربوط به گرفتن کنترل های Unsigned علامت های دیجیتالی تایید نشده توسط ActiveX است.
  • گزینه بعدی مربوط به مقدار دهی و اجرای کنترل های ActiveX است که امنیت آن ها تایید نشده است.
  • گزینه OK و امنیت ActiveX را کلیک کنید.

مطمئناً تا به حال درباره ویروس های کامپیوتری ( برنامه هایی که با آلوده کردن سیستم ها صدماتی به آن ها می زنند ) چیز هایی شنیده اید. ویروس های مختلفی از انواع بی آزار تا بسیار مخرب وجود دارند و تلاش های زیادی صورت می گیرد تا جلوی این آلودگی و انتشار ویروس ها گرفته شود. اما آیا این احتمال وجود ندارد که ویروس ها ( یا دیگر نرم افزار های مخرب ) از طریق اینترنت پراکنده شوند ؟

در روز های اول وب این خطر چنران جدی نبود چون سند های HTML و فایل های گرافیکی و تصویری تنها انواع فایل هایی بود که روی اینترنت جابه جا می شد. این قبیل فایل ها می توانستند خراب باشند اما در ضمن هیچ خطری برای سیستمی که آن ها را بار می کرد نداشتند. اما با روی کار آمدن محتویات فعال اوضاع دگرگون شد ، چون در این حالت برنامه ها هم جزیی از وب شده بودند و یک برنامه هم قاعدتاً هر کاری می تواند انجا می دهد ( از پاک کردن فایل های کامپیوتری مقصد گرفته تا دزدیدن اطلاعات آن و انتقال آن ها به جاهای نامعلوم ). در اینجا بود که شرکت های تولید کننده ابزار های برنامه نویسی وب به ضرورت تمهیدات امنیتی پی بردند. وقتی در وب گشت و گذار می کنید. مایلید مطمئن باشید کد هایی که بار می کنید سیستم تان را بهم نخواهند ریخت ! برای مقابله با این مشکل بالقوه دو روش اساسی ابداع شد.

  1. روش اول آن بود که اساساً اجازه اعمال بالقوه خطرناک به برنامه های وب داده نشود. این راهی بود که جاوا در پیش گرفت. اپلت های جاوا قادر به انجام افعال بالقوه مخرب ( مانند دسترسی به سیستم فایل ) نیستند و می توانید مطمئن باشید که آن ها بی خطر هستند درست همانگونه که یک چاقوی پلاستیکی بی خطر است !
  2. در روش دوم ، که مایکروسافت برای عناصر ActiveX در پیش گرفت ، به جای محدود کردن ذاتی برنامه ها از یک تکنولوژی بنام کد تعیین اعتبار[11] برای تعیین صحت و سقم نرم افزار ها استفاده می شود. ایده نهفته در این روش این است که اگر شما بدانید که یک عنصر ActiveX ( یا هر نرم افزار دیگری ) از کجا آمده ( خالق آن کیست ) و تغییری هم در آن صورت نگرفته ، دیگر می توانید با خیال راحت از آن استفاده کنید. به این روش امضای دیجیتالی یا Digital Signing هم گفته می شود.

امضاء دیجیتالی از دیدگاه کاربران

وقتی از یک کاوشگر با قابلیت ActiveX استفاده می کنید در واقع سطوح امنییتی مختلفی را در اختیار دارید ، که می توانید از آن ها بسته به نیازتان استفاده کنید. این سطوح عبارتند از : ضعیف ، متوسط ، شدید. برای انتخاب سطح امنیتی دلخواه در کاوشگر Internet Explorer ، آیتم Internet Option را از منوی View انتخاب کرده و سپس به برگه Security بروید.

در قسمت پایین دیالوگ می توانید سایت های هر منطقه را انتخاب کرده و سپس در قسمت پایین دیالوگ سطح امنیتی هر منطقه را تعیین کنید . سایت های قابل اطمینان و شناخته شده را می توانید در منطقه موورد اعتماد[12] قرار دهید. این منطقه دارای سطح امنیتی ضعیف است. سایت های ناشناخته را در منطقه محدود[13] که سطح امنیتی بالایی دارد ، قرار دهید. سطوح امنیتی Internet Explorer عبارتند از :

  • شدید[14] : برنامه های بالقوه خطرناک هرگز بار نمی شوند. هر اقدامی برای بار کردن محتویات فعال به شما اطلاع داده خواهد شد.
  • متوسط[15] : هنگام بار کردن محتویات فعال به شما اخطار داده می شود ولی این امکان را خواهید داشت که ( بر اساس امضاء دیجیتالی ) آن را بار کنید.
  • ضعیف[16] : تمام محتویات فعال بدون هیچ اخطاری بار خواهند شد.
  • قابل تنظیم[17] : می توانید برای هر نوع محتویات فعال سطح امنیتی مناسب ( هرگز بار نشود ، با دادن اخطار بار شود ، همیشه بار شود ) را تعیین کنید. توصیه می شود تا زمانی که با تمام انواع محتویات موجود در وب آشنا نشده اید از این گزینه استفاده نکنید.

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

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

شکل ‏2‑5

شکل ‏2‑6

امضای دیجیتالی از دید برنامه نویسی

در یک امضای دیجیتالی سه دسته اطلاعات وجود دارد :

  1. هویت تولید کننده نرم افزار
  2. هویت منبع تایید کننده ( سازمانی که امضاء را صادر کرده )
  3. یک عدد رمز برای تایید این مطلب که محتویات نرم افزار دستکاری نشده است.

اگر می خواهید برای وب محتویات فعال بنویسید باید یک گواهینامه کد تعیین اعتبار برای خود دست و پا کنید تا بتوانید برای نرم افزار هی خود امضای دیجیتالی بگیرید. اگر فقط برای اینترنت برنامه می نویسید نیازی به مراحل ندارید چون سطح امنیتی در آن ها معمولاً پایین است و نیازی به امضای دیجیتالی وجود ندارد.

اگر صرفاً برای شرکت خود نرم افزار می نویسید می توانید از گواهینامه آن استفاده کنید. اما توصیه می شود خودتان هم از این گواهینامه بگیرید. با آن که شرکت های متعددی برای صدور گواهینامه کد تعیین اعتبار وجود دارند ، میکروسافت شرکت Verisign را توصیه می کند. برای کسب اطلاعات بیشتر می توانید به سایت وب این شرکت که در زیر آمده است مراجعه کنید :

http://www.verisign.com/developers/index.html

هزینه دریافت این گواهینامه 20 دلار در سال و مراحل انجام آن سیار ساده است :

  • در سایت مزبور ، یک فرم پر کنید و در آن اطلاعات خواسته شده ( از جمله اطلاعات مربوط به کارت اعتباری ) را وارد کنید.
  • شرکت Verisign کد شناسایی شما را با پست الکترونیک برایتان ارسال خواهد کرد.
  • به صفحه نصب گواهینامه رفته و کد شناسایی خود را وارد کنید. این کار باید در همان کامپیوتری که توسط آن کد شناسایی را گرفته اید ، انجام شود.
  • گواهینامه به کامپیوتر شما فرستاده خواهد شد.

هنگام ثبت گواهینامه دو گزینه در اختیار دارید : ذخیره کردن آن در یک فایل یا در رجیستری ویندوز. توصیه می شود گواهینامه خود را در یک فایل و روی دیسک ذخیره کنید تا بتوانید آن را از گزند نامحرمان حفظ کنید. در حقیقت ، دو فایل به کامپیوتر شما فرستاده می شود : یکی حاوی خود گواهینامه ( با پسوند ) SPC و دیگری حاوی کلید رمز بندی ( با پسوند ) PVK.

نرم افزار های مورد نیاز برای امضای دیجیتالی

بعد از دریافت کد تعیین اعتبار و کلید رمز بندی ، آماده اید تا امضای خود را به نرم افزار هایی که نوشته اید اضافه کنید. این برنامه ها هستند و میتوانید آن ها را ActiveX جزیی از کیت توسعه نرم افزار مجانی از سایت میکروسافت بردارید. فایل هایی که نیاز دارید از این قرارند :

  • Make Cert یک گواهینامه X.509برای تست می سازد.
  • Cert2 SPC یک گواهینامه توزیع نرم افزار آزمایشی می سازد.
  • Sing Code یک فایل محتویات فعال را امضا می کند.
  • Chk Trust اعتبار فایل را بررسی می کند (مشابه همان کاری که کاوشگر می کند).
  • Make CTL لیستی از گواهینامه های قابل اعتماد می سازد.
  • Cert Mgr برنامه مدیریت گواهینامه ها ؛ لیست های گواهینامه های قابل اعتماد و باطل شده.
  • Set Reg برنامه ثبت گواهینامه در رجیستری.

هستند و باید توجه داشت که تمام این ابزار ها برنامه های DOS اجرا شوند. برای باز کردن نرم افزار های فوق می توانید MS-DOS پنجره به جاوا چیست ؟

جاوا یک زبان برنامه نویسی است که در اوایل دهه 90 توسط Java Soft ، بخش نرم افزاری شرکت Sun توسعه داده شد. هدف آن بود که جاوا زبانی ساده ، قوی و همه منظوره باشد. جاوا تمام جنبه های مثبت C و C++ را در خود دارد و آن چیز هایی که برنامه نویسان C++ از آن نفرت داشته اند ( مانند وراثت چند گانه ، تحریف اپراتور ها و اشاره گر ها ) را به کناری گذاشته است.

مهم ترین ویژگی های جاوا این است که اساساً شی ء گرا است. اولین ادعای OOP توانایی استفاده مجدد از کد است : چیزی که C++ با تمام ادعاهایش هرگز نتوانست بدان دست یابد. اما در اولین قدم خواهید دید جاوا در این زمینه تا چه حد اندازه صحت دارد. تصورش را بکنید که با صرف کمی وقت بتوانید برنامه ای بنویسید که در سیستم های ویندوز ، یونیکس و مکینتاش براحتی اجرا شود.

همین که یک شرکت نرم افزاری بتواند برای تمام پلاتفرم های موجود در آن واحد پروژه ای را تولید کند ( و مقادیر عظیمی پول صرفه جویی کند ) خود می تواند بهترین دلیل اقبال جاوا باشد و امروز دیگر همه ( و نه فقط شرکت های نرم افزاری ) به سمت جاوا کشیده شده اند. با این ویژگی ( استقلال از پلاتفرم ) یک برنامه نویس می تواند برای سیستمی برنامه بنویسد که هرگز با آن کار نکرده است. این ویژگی اصلی ترین علت توفیق جاوا در اینترنت است. اینترنت شبکه پیچیده ای است از میلیون ها کامپیوتر مختلف در سراسر دنیا و مقاومت در مقابل این وسوسه که بتواند برنامه ای بنویسد که روی تمام این سیستم های متفاوت و نا متناجس اجرا شود چندان ساده نیست. جاوا یک زبان بسیار ساده است چون شما را وادار نمی کند تا در محیط جدید ( و نا آشنایی ) کار کنید و این برای کسانی که اطلاعات فنی ناچیز درباره کامپیوتر دارند بسیار مهم است. ساختار زبان جاوا در نگاه اول بسیار شبیه C و C++ است و این به هیچ وجه تصادفی نیست. C زبانی است ساخت یافته و C++ زبانیست شی ء گرا و مهم تر از همه قسمت اعظم برنامه نویسان دنیا از آن ها استفاده می کنند از سوی دیگر این شباهت حرکت به طرف جاوا را برای قبیل افراد ساده خواهد کرد بنابراین طراحان جاوا برای اجتناب از دوباره کاری از زبان های C و C++ بعنوان مدل استفاده کردند.

جاوا با دور انداختن اشاره گر ها و بر دوش کشیدن بار مدیریت حافظه برنامه نویسان C و C++ را برای همیشه از این کابوس ها رهایی بخشیده است. علاوه بر آن چون جاوا زبانی برای اینترنت است ، از اینی و حفاظت ذاتی بالایی برخوردار است. طراحان جاوا از ابتدا یک محیط برنامه نویسی امن را مد نظر داشته اند. مسئله حفاظت سیستم ها رابطه تنگاتنگی با اشاره گر ها دارد. اکثر مهاجمان برای ورود غیر قانونی به سیستم های دیگران از این اشاره گر ها استفاده می کنند و جاوا با حذف اشاره گر ها این راه را سد کرده است. جاوا مکانیزم های حفاظتی دیگری هم دارد که در جای خود به آن ها اشاره خواهیم کرد.

تکامل جاوا

جاوا هم مانند اکثر اختراعات مهم حاصل تلاش گروهی دانشمندان پیشتاز است. اما نکته جالب درباره جاوا آن است که جاوا از ویرانه های یک پروژه شکست خورده بر می آورد.

اگر پروژه گرین ( Green ) که شرکت Sun در سال 1991 آن را شروع کرد به موفقیت می انجامید امروز نه Sun دیگر یک شرکت کامپیوتری می بود و نه جاوا در سال 1991 ، شرکت Sun Microsystems در آغاز راه تبدیل شدن به بزرگترین تولید کننده ایستگاه های کاری Unix بود و در طول فقط پنج سال درآمدش را از 210 میلیون دلار به 2 میلیارد دلار رسانده بود و به نظر می رسد هیچ چیز نمی تواند جلودار آن باشد. عامل عمده موفقیت Sun کارهای پیشتازانه در ایجاد شبکه های باز بود و در این زمینه هیچ کس به پای آن نمی رسید.

مدیران Sun به این فکر افتادند تا کاری کنند که این رشد برای مدتی طولانی ادامه یابد یکی از زمینه های مورد علاقه Sun بازار دوم لوازم الکترونیکی بود ، پروژه Green بوجود آمد تا برای این بازار نرم افزاری پیشرفته خلق کند.

مهندسان Sun توجه خود را به میکروپروسسور هایی معطوف کردند تا دارای قابلیت استفاده در اینگونه سیستم ها باشند. اگر پروژه ی Green می خواست موفق باشد باید کاری میکرد تا سیستم مذبور بتواند به راحتی به بستر های سخت افزاری مختلف منتقل شود برای این منظور ابتدا از کامپایلر C++ استفاده شد ولی به زودی نارسایی های C++ در این زمینه خود را نشان دادند. مهندسان Sun خیلی سریع دریافتند که برای ادامه ی کار باید چیزی جدید و قوی خلق کنند. در همین زمان بود که James Gosling کار بر روی زبان جدید اوک Oak را شروع کرد تقدیر آن بود که این زبان جاوا نامیده شود، چون اداره ی ثبت نام های تجاری Oak را رد کرد.

به تدریج مهندسان یک دستگاه شبه PAD [18] ساختند که در آن از سیستم عامل ، زبان برنامه نویسی و واسط کاربر جاوا استفاده شده بود و با وجود ابتدایی بودن توانست توجه مدیران Sun را به خود جلب کند.

بعد ها گروهی که در پروژه ی Green کار کرده بودند شرکت انگلیسی Java Soft را بنیان نهادند.

شکل زیر پایگاه وب این شرکت را نشان می دهد.

شکل ‏2‑7

برای رفتن به این پایگاه اینترنتی می بایست به آدرس زیر مراجعه کنید :

http://www.sun.com

متاسفانه بخت با پروژه Green یار نبود و بعد از چند شکست متوالی Sun آن را کنار گذاشت. در همین زمان بود که عده ای از محققان NCSA شرکت Net Scape را تاسیس کردند و این اتفاقات با آتشی که به سرعت دنیا را در مینوردید و شبکه تار عنکبوتی جهانی www [19] نام داشت همزمان شد.

بنابراین اتفاقی نبود که مهندسان پروژه Green به سمت اینترنت و وب به عنوان بستر پروژه Sun روانه شوند و بعد از آن دیگر جزء تاریخ است.

چهار سال بعد پروژه Green به بار نشست و جاوا تبدیل به داغترین موضوع اینترنت شد ، همه از برنامه نویسان و طراحان صفحات وب گرفته تا کاربران اینترنت می خواهند از جاوا استفاده کنند. Sun بلافاصله برای جاوا یک کاوشگر هم تولید کرد. این اولین کاوشگری بود که می توانست اپلت های جاوا را اجرا کند و نام آن هم Hot Java بود.

درس زیر مراجعه کنید :

http://www.msdn.microsoft.com

ویژگی های زبان برنامه نویسی Java

جاوا ویژگی های متعددی دارد که آن را منحصر به فرد کرده است. جاوا هم کامپلیر[20] دارد و اینترپرتر.

هر کامپایلر فقط برای یک سیستم خاص ( مانند اینتل ، اپل یا آلفا ) می تواند کد اجرایی تولید کند اما کامپایلر جاوا کد اجرایی exe تولید نمی کند و در عوض یک فایل بینابینی می سازد که بایت کد Byte code نام دارد و بایت کد چیزی شبیه زبان اسمبلی است ، اما این زبان مختص هیچ پروسسور خاصی نیست بلکه زبان اسمبلی یک ماشین ویژه بنام ماشین مجازی جاوا ( Java Vitual Mashing ) دارد که روی ماشین مجازی جاوا اجرا می شود ، دستورات فایل بایت کد را به دستورات قابل فهم برای پروسسوری که روی آن اجرا می شود تبدیل خواهد کرد.

برنامه های کاربردی جاوا
اشیاء جاوا
ماشین مجازی جاوا
یونیکس ویندوز –Os2 مکینتاش
سیستم عامل

اما شاید از خود سوال کنید که چرا جاوا این همه کار را بر خود ( و دیگران ) سخت گرفته است ؟ این همه لایه و ماشین مجازی برای چیست ؟ یکی از ادعا های جاوا ، آزاد بودن از بستر سخت افزاری است اما این یعنی چه ؟ اگر جاوا بخواهد در اینترنت موفق باشد برنامه های آن باید بتوانند بدون هیچ اشکالی روی تمام کامپیوتر های متصل به اینترنت اجرا شوند. اما شما بهتر می دانید که اینترنت شبکه عظیمی است ازکامپیوتر های نامتناجس ، از سوپر کامپیوتر های عظیم گرفته تا PC های مبتنی بر پروسسور های اینتل و پاور پی سی تا ماشین های یونیکس مبتنی بر پروسسور های آلفا و… !

چگونه یک برنامه اجرایی می تواند روی این طیف وسیع کامپیوتر ها اجرا شود ؟

ایده اولیه ساده است : برنامه ها برای ماشین مجازی کامپایل شوند و این ماشین مجازی روی تمام کامپیوتر های متصل به اینترنت نصب شود.

این دقیقاً همان روشی است که جاوا در پیش گرفته است. برنامه تان را با یک کامپایلر جاوا کامپایل کنید ، آن را در پایگاه وب خود قرار دهید و به دیگران اطلاع دهید تا با یک کاوشگر مجهز به جاوا[21] این برنامه را که ممکن است در دل یک صفحه وب قرار داشته باشد اجرا کنند.

شاید هرگز تصور نمی کردید که برنامه ای را که با یک PC اپنتل نوشته اید روی یک ماشین مکینتاش یا یونیکس اجرا شود ولی اکنون به لطف جاوا این دیگر آرزویی دست نیافتنی نیست.

شی ء گرایی در جاوا به غایت خود رسیده است. جاوا در استفاده از اشیاء بسیار مفید و سخت گیر است و تخطی از اصول را نمی پذیرد. در C++ شما می توانید از اشیاء به موازات برنامه نویسی سبک قدیم استفاده کنید و اکثراً در پایان کار چنان ملغمه ای بوجود می آید که مدیریت آن با روش های برنامه نویسی شی ء گرا امکان دارد نه با روش های قدیمی. جاوا دیگر به شما اجازه نمی دهد تا خود را در چنین مخمصه ای گرفتار کنید !

شروع برنامه نویسی با جاوا

اولین برنامه ای که می نویسیم یک برنامه متکی به خود است بنام Hello Worldمی باشد. تفاوت یک برنامه متکی به خود و یک اپلت آن است که در برنامه متکی به خود ( که از این به بعد به آن فقط برنامه خواهیم گفت ) از متدی به نام ( main ) استفاده می شود در حالی که اپلت چنین متدی ندارد.

برنامه Hello World بسیار ساده است و فقط جمله Hello world را نمایش می دهد با این حال می توان از آن به عنوان سنگ بنای برنامه های پیشرفته تر استفاده کرد چون تمام برنامه های جوا ساختار کلی مشابهی دارند. بطور مثال به لیست زیر نگاه کنید :

برای کامپایل کردن برنامه باید از کامپایلر جاوا ( java ) استفاده کرد روش کار چنین است :

کامپایلر بعد از پایان کار یک فایل کلاس بنام Class ، HelloWorld تولید خواهد کرد. اصولاً کامپایلر برای هر کلاس برنامه یک فایل کلاس جداگانه تولید خواهد کرد. فایل تولید شده یک فایل اجرایی مستقل نیست. برای اجرای این فایل باید از اینترپرتر جاوا استفاده کرد.

اینترپرتر جاوا ، Java نام دارد. برای اجرای فایل کلاس تولید شده چنین باید کرد :

اگر همه چیز درست پیش رفته باشد ، باید جمله “HelloWorld” را روی صفحه کامپیوترخود مشاهده کنید.

نکته : دقت کنید که کامپایلر جاوا و اینترپرتر جاوا دو چیز متفاوتند ، کامپایلر از فایل متن برنامه یک فایل کلاس می سازد و اینترپرتر فایل کلاس را اجرا می کند.

ایجاد یک اپلت جاوا

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

باید سعی شود برنامه ها ، اپلت ها و صفحات وب را در دایرکتورهای جداگانه ذخیره کرد. اپلتی که در این قسمت می نویسیم Hello World Applet نام دارد. به لیست زیر نگاه کنید :

اپلت را با نام HelloWorldApplet ذخیره کنید. در مورد یک اپلت باید به چند نکته توجه کنید :

دستور import در خط 1 شبیه دستور include# در زبان C است با این دستور اپلت می تواند از کلاس های JDK برای کارهای گرافیکی استفاده کند.

متد Paint برای نمایش محتویات اپلت است در این جا عبارت Hello World روی صفحه نمایش داده خواهد شد اپلت ها متد main ندارند و به جای آن از متد های init و Start یا Paint استفاده می کنند.

برای کامپایل کردن این چنین باید کرد java Hello World Applet.java در این حالت هم کامپایلر یک فایل کلاس به نام Hello World Applet Class ایجاد خواهد کرد اما برای اجرای یک اپلت یک قدم دیگر هم باید برداشت و آن ایجاد یک فایل HTML است که اپلت در آن اجرا خواهد شد می توانید یک فایل HTML را برای این منظور مشاهده کنید :

برای اجرای اپلت HTML یک Hello World :

تحلیل برنامه

برای اجرای یک اپلت در فایل HTML باید از برچسب <applet> استفاده کرد برای مشخص کردن نام کلاسی که اپلت در آن است از صفت CODE استفاده کنید. برای مشخص کردن ابعاد پنجره ای که اپلت در آن اجرا خواهد شد از صفت های Width و Height استفاده کنید. اعداد مشخص شده بر حسب پیکسل هستند این فایل را با نام HelloWorldApplet.html ذخیره کنید حالا آماده اید تا اپلت را اجرا کنید این کار به دو روش امکان پذیر است :

  1. استفاده از کاوشگر های مجهز به جاوا مانند Net Scape
  2. استفاده از برنامه Applet Viewer که با JDK می آید.

این برنامه کل صفحه وب را نمی تواند نمایش دهد و فقط اپلت را نمایش خواهد داد. برای دیدن اپلت در یک کاوشگر ، فایل html فوق را باز کنید ، با این کار صفحه وب و اپلت درون آن به نمایش در خواهد آمد. روش استفاده از applet viewer چنین است.

نکته : با وجود اینکه می توان برنامه applet viewer را از محل فایل html اجرا کرد ولی در این حالت بدون بستن آن نمی توان اپلت را مجدداً بار کرد. در حالی که اگر مشاهده گر اپلت از محل دیگری اجرا شود ( مانند دستور فوق ) میتوان یک اپلت را تغییر داده ، مجدداً کامپایل کرده و سپس دوباره در مشاهده گر بار کرد.

بطور کلی جاوا یک زبان برنامه نویسی است که با آن می توان برنامه های متنوعی نوشت بیشترین کاربرد جاوا در اینجا اپلتهایی است که در کاوشگر های وب قابل مشاهده هستند.

اپلتها برنامه هایی هستند که جزیی از صفحات وب محسوب می شوند. تقریباً هر کاری با اپلت ها امکان پذیر است.

قدرت جاوا در سادگی و استقلال از آن بستر سخت افزاری ( چه در فایل منبع برنامه و چه در کد باینری آن ) است. با جاوا می توان برنامه هایی هم نوشت که بدون کاوشگر های وب قابل اجرا باشند.

اپلت های جاوا را فقط در فایل هایHTML می توان مورد استفاده قرار داد.

برنامه نویسی شیء گرا و جاوا

( Programming – OOP Object Oriented ) یکی از بزرگترین ایده های برنامه نویسی در دو دهه اخیر است نیاز به تسلط کامل دارد.

مفاهیم برنامه نویسی شی ء گرا

برنامه نویسی شی ء گرا قصد دارد مدلی از دنیای واقعی را وارد برنامه نویسی کامپیوتر کند دنیای اطراف ما از اشیاء ساخته شده است.

اشیاء ( Objects ) و کلاس ها ( Classes )

شی ء کلیدی ترین مفهوم برنامه نویسی شی ء گراست هر شی ء یک حالت و رفتار دارد و برنامه عبارت است از بر هم کنش بین اشیاء. یک حالت شی ء عبارت است از متغییر های عناصر داده ای شیی ء و مقدار آن ها. رفتار یک شی ء را متد های آن تعیین می کند. شی ء در واقع مقداری کد است که کار خاصیتی انجام می دهد.

هر شی ء کپسولی است از مقداری متغییر و کد که کار نگهداری و به روز در آوردن آن ها را ساده می کند. معمولاً درون یک شی ء از دسترس دنیای خارج به دور است و برای کار با آن باید از ارسال پیام استفاده کرد. مزیتش آن است که کاربر برای کار با آن هیچ نیازی به دانستن مکانیزم های درونی آن ندارد و فقط باید ساختار پیام ها را بداند. معمولاً ساختار پیام ها در اشیاء مختلف یکسان است. در دنیای واقعی هم وضع به همین منوال است مثلاً برای استفاده از یک تلوزیون شما هیچ نیازی به آشنایی با پیچیدگی های درون آن ندارید فقط کافی است بدانید که باید آن را به برق زده و روشن کنید و یک کانال را انتخاب کنید. کلاس در واقع الگویی است برای ایجاد شی ء. در واسط برنامه نویسی جاوا (java API) چندین کلاس مختلف وجود دارد.

چندین کلاس با هم یک کتابخانه کلاس Class Library می سازند.

برنامه نویسی جاووا اصولاً چیزی نیست جز طراحی و پیاده سازی کلاس ها.

برنامه نویسی شی ء گرا در جاوا

برنامه نویسی شی ء (OOP) یکی از بزرگترین ایده های برنامه نویسی در دو دهه اخیر است ، اما تسلط کامل بر این ایده به سال ها زمان و ممارست نیاز دارد. برنامه نویسی شی ء در واقع پیوند دنیای واقعی با برنامه نویسی کامپیوتر است. در این جا با مفاهیم برنامه نویسی شی ء گرا در جاوا و ارتباط این مفاهیم با ساختار برنامه ها آشنا می شویم :

  • شی ء و کلاس چیست و رابطه آن ها چگونه است.
  • یک شی ء یا کلاس دو جز مهم دارد : رفتار و حالت.
  • وراثت و نقش آن در طراحی برنامه ها.
  • بسته ها و واسط ها در جاوا.

ایجاد یک کلاس

در این قسمت یک مثال عملی خواهیم آورد. در این مثال یک موتور سیکلت را شبیه سازی می کنیم. یک موتور سیکلت واقعی دارای حالت و رفتار خاص خود است. حالت موتور سیکلت در واقع همان خواص آن ( مانند رنگ ، مدل ، نوع و…. ) است. مجموع این خواص یک موتور سیکلت خاص را مشخص خواهند کرد که از موتور سیکلت های دیگر قابل تمیز است. هر شی ء وهله ایست از یک کلاس.

کلاس های موجودی قابل لمس نیست ، در حالی که شی ء موجودی قابل لمس که به کلاس خود موجودیت داده است. مثلاً ، انسان یک کلاس است در حالی که شما نمونه ای هستید از کلاس انسان ، شما موجودیت دارید در حالی که چیزی به نام انسان وجود خارجی ندارد ، بلکه در اشیاء ( من ، شما ، دیگران ) موجودیت می یابد.

موتور سیکلت ما دارای رفتار هایی هم هست ، رفتارهایی مانند روشن شدن ، خاموش شدن ، تعویض دنده ، سرعت گرفتن ، ترمز کردن و غیره. ادیتور خود را اجرا کنید و کلاس موتور سیکلت را مانند ذیل تعریف کنید :

البته این کلاس هنوز کار چندانی انجام نمی دهد ( در واقع هیچ کاری انجام نمی دهد ! ) اجازه دهید کارمان را با تعریف چند متغیر حالت ادامه دهیم ، این تعریف ها را بعد از { وارد کنید :

نکته : بر خلاف C متغیر های Boolean فقط مقادیر True یا False می گیرند و نمی توانند عدد بگیرند.

حال چند رفتار ( متد ) به این کلاس اضافه می کنیم.

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

کد ذیل را بعد از تعریف متغیر های حالت اضافه کنید :

این متد ابتدا تست می کند که آیا موتور روشن است.

( engineState==True ) ، اگر چنین باشد فقط با پیامی این موضوع را گوشزد می کند. اگر موتور روشن نباشد ، آن را روشن کرده و پیام می دهد که کارش را به پایان رسانده است.

کلاس را با نام Motorcycle.java ذخیره کنید. این کلاس تا اینجا باید چنین باشد :

قبل از کمپایل کردن این کلاس ، اجازه دهید یک متد دیگر به آن اضافه کنیم. این متد ShowArts ، مقدار فعلی متغیر های حالت یک وهله خاص از این کلاس را نمایش خواهند داد. این متد چنین است :

این متد دو خط اطلاعات روی صفحه نمایش خواهد داد.

خط اول رنگ و نوع موتور سیکلت و خط دوم حالت موتور آن را نمایش می دهد.

فایل را ذخیره کرده و سپس آن را با java کامپایل کنید :

اگر سعی شود این کلاس را با اینترپرتر جاوا اجرا کنید ، با خطا مواجه خواهید شد چون اینترپرتر دنبال متدی به نام (main) می گردد و چون آن را نمی یابد پیام خطای ذیل را نمایش خواهد داد :

برای آن که این کلاس را عملیاتی کنیم باید یک برنامه جاوا بنویسیم و در آن از این کلاس استفاده کنیم.

اما روش ساده تر آن است که به این کلاسیک متد (main) اضافه کنیم. لیست زیر این متد را نشان می دهد.

متد (main) برای Motorcycle.java

با اضافه کردن این متد ، کلاس Motorcycle اکنون یک برنامه است و می توان آن را کامپایل و اجرا کرد. خروجی برنامه شبیه ذیل خواهد بود :

تحلیل برنامه

چیز هایی که در متد (main) می بینید خط 1 تعریف متد (main) است و شما آن را همواره به همین شکل خواهید دید. در خط 2 یک شیء از کلاس Motorcycle بنام m تعریف شده است. توجه کنید که با کلاس ها به طور منظم کاری صورت نمی گیرد بلکه یک وهله از آن ها ( یک شیء ) مورد استفاده قرار می گیرد. در خط های 3 و 4 متغیر های حالت این شیء ست می شوند :Yamaha RZ350 و رنگ زرد. در خط های 5 و 6 متد (ShowArts) فراخانی می شود ( در حقیقت فقط خط 6 فراخانی این متد است و خط 5 فقط پیامی است مبنی بر فراخوان آن ). این متد نوع ، رنگ و روشن یا خاموش بودن شی ء موتور سیکلت را نمایش خواهد داد. توجه کنید که در ابتدا موتور خاموش است.

خط 7 یک خط رسم می کند که قسمت های مختلف خروجی را از هم جدا می کند و فقط برای شکیل تر شدن برنامه است. در خط 9 با فراخوانی متد startEngine موتور روشن می شود. خط 12 دوباره متد (showArts) را فراخوانی کرده و مقدار متغیر های حالت را نمایش می دهد. در این لحظه موتور روشن است.

خط 15 سعی می کند که موتور را دوباره روشن کند ، ولی موتور قبلاً روشن شده است و پیام داده شده هم موید همین مطلب است.

وراثت[22]

وراثت یکی از کلیدی ترین مفاهیم برنامه نویسی شی ء گراست و تاثیر مستقیمی روی نحوه طراحی و نوشتن کلاس های جاوا دارد.

وراثت مکانیزمی است برای تغیر شکل دادن به کلاس ها و استفاده مجدد از آن ها ، با مکانیزم وراثت می توان به طور خودکار از اطلاعات کلاس های دیگر استفاده کرد.

اصطلاح جدید ( وراثت تمام کلاس ها را در یک سلسله مراتب گرد آورده و مرتب می کند ). به شکل زیر نگاه کنید :

شکل ‏2‑8 :

هر کلاس یک فوق کلاس (Super class) و یک یا چند زیر کلاس (Sub Class) دارد.

هر کلاس از کلاس های بالاتر خود در این سلسله مراتب ارث می برد و به کلاس پایین تر از خود ارث می دهد. هر زیر کلاس تمام متد ها و متغیر های فوق کلاس خود را به ارث می برد و دیگر نیازی به تعریف مجدد آن ها وجود ندارد.

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

ایجاد سلسله مراتب کلاس

وقتی تعداد کلاس ها زیاد است ، منطقی است که آن ها را در یک سلسله مراتب گرد آوریم تا بتوانیم نحوه به ارث رسیدن متد ها و خواص را بهتر کنترل کنیم. بدین ترتیب نیاز به دوباره نویسی کد ها به حداقل رسیده و هنگام نیاز به تغییر کد ها نیز اصلاحات فقط در یک نقطه انجام خواهد شد و از آن جا به تمام نقاط دیگر دسترسی خواهند یافت.

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

اجازه دهید با شروع از بالاترین کلاس جاوا در سلسله مراتب کلاس ها ، یعنی کلاس Object ، یک سلسله مراتب جدید بسازیم. کلی ترین کلاسی که می تواند این دو وسیله نقلیه را در خود جای دهد را کلاس Vehicle می نامیم. یک وسیله نقلیه ( Vehicle ) چیزی است که می تواند فردی را از نقطه ای به نقطه دیگر منتقل کند. در کلاس Vehicle فقط رفتار انتقال از نقطه a به نقطه b را تعریف خواهیم کرد و نه هیچ چیز بیشتر.

در ذیل کلاس Vehicle چه چیزی باید قرار دهیم ؟ مثلاً ماشین متحرک با نیروی انسانی و ماشین متحرک با موتور چطور است ؟ ماشین متحرک با نیروی انسان مثلاً می تواند پدال داشته باشد ( و یا هر مکانیزمی برای انتقال حرکت انسان به ماشین ). ماشین متحرک با موتور هم ( به احتمال زیاد !) یک موتور دارد ، به سوخت نیاز دارد و به وسیله ای برای تنظیم سرعت. در ذیل کلاس Engine Powered Vehicle می توانیم چند کلاس مثل Car ، Motorcycle و Truck قرار دهیم. ولی می توانیم با ایجاد یک کلاس بینایی باز هم رفتار ها را تقسیم بندی کنیم.

بلاخره کلاس Motorcycle را در ذیل کلاس Wheeled Two ( دو چرخ ) قرار داده ایم. اما شاید بپرسید که خواصی مثل رنگ و نوع را کجا باید قرار داد ؟ می توان این خواص را در کلاس Vehicle قرار داد تا تمام زیر کلاس ها آن ها را به ارث ببرند. تنها چیزی که باید به خاطر داشته باشید این است که وقتی یک حالت ( خاصیت ) یا رفتار را تعریف کردید ، دیگر به طور خودکار در سلسله مراتب به تمام زیر کلاس ها انتقال خواهد یافت ( بهارث خواهد رسید ).

شکل ‏2‑9

شکل ‏2‑10

وراثت چگونه عمل می کند

وراثت چگونه عمل می کند ؟ چگونه یک شی ء متغییر ها و متد های کلاس بالاتر را به طور خودکار بدست می آورد ؟ در مورد متغییر ها ، وقتی شیئی بوجود می آید یک مسیر دسترسی به تمام متغییر های کلاس مربوطه را بدست می آورد. در مورد متد ها هم وضع به همین منوال است و تعریف یک کد در اختیار تمام زیر کلاس ها قرار خواهند گرفت. وقتی در یک شی ء متدی فراخوانی می شود ، جاوا ابتدا در همان کلاسی که متد تعریف شده به دنبال کد آن می گردد. اگر کد آن را نیافت ، در سلسله مراتب یک پله بالاتر رفته و در فوق کلاس بدنبال آن خواهد گشت تا زمانی که کد متد را بیابند. به شکل زیر نگاه کنید.

شکل ‏2‑11 : نحوه تعیین متد ها

وقتی در یک زیر کلاس متدی با نام مشابه متدی در یک کلاس بالاتر تعریف شود ، کار ها کمی پیچیده خواهد شد. در این حالت متدی که زود تر ( در حرکت از پایین ) یافت شود اجرا خواهد شد. بدین ترتیب متد تعریف شده در زیر کلاس متد فوق کلاس را مخفی می کند. به این وضعیت تحریف ( Override ) متد گفته می شود. شکل زیر را ببینید.

شکل ‏2‑12

اصطلاح جدید

به تعریف یک متد با نام مشابه متدی در یک فوق کلاس ، تحریف می شود. متد زیر کلاس متد فوق کلاس را مخفی می کند.

وراثت منفرد و چند گانه

جاوا به گونه ای که دیدید از وراثت منفرد[23] استفاده می کند. وراثت منفرد یعنی هر کلاس جاوا می تواند فقط یک فوق کلاس داشته باشد. اما عکس آن درست نیست ، یعنی یک کلاس می تواند چندین زیر کلاس داشته باشد.

در زبان های شی ء گرای دیگر ، مانند C++ ، یک کلاس می تواند از چند فوق کلاس به ارث ببرد. به این وضعیت وراثت چند گانه[24] گفته می شود. با وراثت چند گانه می توان کلاس های فوق العاده جالبی بوجود آورد ، ولی کد نویسی آن ها بسیار دشوار است.

واسط ها Interfaces و بسته ها Packages

دیدید که در جاوا هر کلاس فقط از یک فوق کلاس ارث می برد. با این که وراثت منفرد برنامه نویسی را ساده تر می کند ولی کمی محدود تر هم هست. مثلاً ، اگر در شاخه های مختلف یک سلسله مراتب متد های مشابهی داشته باشید ، باید تمام آن ها را جداگانه پیاده سازی کنید. جاوا با استفاده از مفهومی بنام واسط مشکل به اشتراک گذاشتن متد ها را حل کرده است.

توضیح : واسط عبارت است از مجموعه ی نام چند متد ، بدون تعریف آن ها ، که واسط آن ها در اختیار کلاس استفاده کننده می گذارد.

یک کلاس جاوا می تواند در آن واحد از چندین واسط استفاده کند ، و با این کار کلاس های بسیار متفاوت می توانند رفتار های مشابهی داشته باشند.

در جاوا کلاس و واسط های مرتبط با هم در یک بسته گرد آورده می شوند. کلاس های اصلی جاوا در بسته ای بنام java گرد آورده شده اند و فقط محتویات این بسته است که در تمام نسخه های جاوا ثابت می ماند.

البته در بسته Java بسته های دیگری وجود دارند ولی بسته Java.lang به طور پیش فرض در اختیار تمام برنامه هاست. برای استفاده از بسته های دیگر باید آن ها را به طور صریح تعریف کرد. نام بسته ها و کلاس ها در هنگام تعریف با نقطه (.) از هم جدا می شوند. مثلاً برای استفاده از کلاس Color که در بسته awt ( که خود در داخل بسته Java می باشد ) قرار دارد ، باید چنین نوشت :

Java.awt.Color

وضعیت جاوا چگونه است ؟

جاوا یکی دیگر از تکنولوژی های عمده ایجاد محتویات فعال در اینترنت است.

اپلت هاای جاوا ، که توسط کاوشگر بار و اجرا می شوند ، دارای بسیاری از قابلیت های ActiveX هستند ، اپلت های جاوا برای جلوگیری از اقدامات خرابکارانه ، فاقد توانایی های خاص ( از قبیل دسترسی به سیستم فایل Systemfile هستند و این آن ها را بسیار محدود کرده است. از نظر تئوری ، اپلت های جاوا ایمن هستند چون اساساً نمی توانند کار های خطرناک انجام دهند !

کلیات جاوا :

حال نگاهی به دستورات جاوا می اندازیم و با آن ها آشنا می شویم. از این دستورات معمولاً در متد (main) استفاده می شود.

دستورات و عبارات :

یک دستور ساده ترین کاری است که در جاوا میتوان انجا داد ، هر دستور یک عمل انجام می دهد. در ذیل چند دستور ساده جاوا را مشاهده می کنید.

گاهی یک دستور مقدار برگشتی دارد مثل جمع دو عدد. به این نوع دستورات عبارت گفته می شود. مهم ترین چیزی که در مورد دستورات لازم جاوا باید به خاطر داشته باشید این است که در پایان هر دستور یک سمی کولون (:) لازم است. در غیر این صورت برنامه به درستی کامپایل نخواهد شد.

هر جا که بتوان از یک دستور استفاده کرد از یک دستور مرکب ، یا بلوک ، هم می توان استفاده کرد. دستورات یک بلوک درون یک جفت آکولاد ({}) قرار می گیرند.

متغییر ها و انواع داده :

یک متغییر ( Variable ) مکانی است در حافظه که می توان مقادیری را در آن ذخیره کرد. هر متغییری دارای سه چیز است : نام ، نوع ، مقدار. قبل از استفاده از یک متغییر باید آن را تعریف ( Declare ) کنید. در جاوا سه نوع متغییر وجود دارد : متغییر وهله ، متغییر کلاس ، متغییر محلی.

متغییر های وهله خواص یک شی ء خاص را در خود نگه می دارند.

متغییر های کلاس مانند متغییر های وهله هستند با این تفاوت که به وهله های یک کلاس مربوط می شوند. متغییر های محلی اغلب دردرون متد ها مورد استفاده قرار می گیرند و برای نگهداری مقادیر درون متد هستند ، در بلوک ها هم می توان از متغییر های محلی استفاده کرد. همین کد اجرای متد ( یا بلوک ) به پایان رسید ، متغییر های محلی درون آن هم از بین می روند.

با آن که نحوه تعریف این سه نوع متغییر یکسان است ، اما نحوه دسترسی به آن ها کمی متفاوت است.

نکته :

برخلاف زبانهای دیگر ، جاوا متغییر عمومی ( همگانی ) ندارد ، برای ارتباط بین اشیاء از متغییر های وهله و کلاس می توان استفاده کرد. به یاد داشته باشید که جاوا یک زبان شیء گراست و شما به هم کنش اشیاء فکر کنید و نه چیز دیگر.

تعریف متغییر ها :

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

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

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

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

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

نکاتی درباره نام متغییر ها :

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

نام متغییر ها در جاوا نسبت به نوع حروف حساس است و این دقت زیادی را در هنگام نوشتن برنامه ها می طلبد. به همین دلیل رعایت یک قرار داد هنگام نامگذاری متغییر ها می تواند کمک بزرگی در مقابله با مشکلات احتمالی باشد. قرارداد های استفاده شده چنین اند : نام های با معنی ، ترکیب چند کلمه ، کلمه اول با حروف کوچک شروع می شود ، کلمات بعدی با حرف بزرگ شروع می شوند ، به این مثال دقت کنید :

انواع متغییر ها :

هنگام تعریف هر متغییر علاوه بر نام آن باید نوع آن هم مشخص شود. نوع متغییر تعیین می کند که یک متغییر چه مقادیری را می تواند بگیرد. هر متغییر می تواند یکی از سه نوع ذیل باشد :

یکی از هشت نوع داده اولیه

نام یک کلاس یا واسط

یک آرایه

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

نوع اندازه محدوده
Byte 8 بیت 128 تا 127
Short 16 بیت 768/32 تا 767/32
Int 32 بیت 648/483/147/2 تا 647/483/147/2
Long 64 بیت 807/775/854/036/372/233/9 تا 807/775/854/036/372/223/9

این انواع همگی علامت دار هستند ، یعنی می توانند اعداد مثبت و منفی را در خود ذخیره کنند. نوع متغییر انتخاب شده به عددی که می خواهید ذخیره کنید بستگی دارد. اگر عدد بزرگ تر از متغییر باشد ، بی سرو صدا قیچی خواهد شد !

برای ذخیره کردن اعداد دارای ممیز از نوع اعشاری ( با ممیز شناور – floating point ) استفاده می شود. اعداد اعشاری در جاوا از استاندارد IEEE 754 تبعیت می کنند. در جاوا دو نوع عدد اعشاری وجود دارد :

(32 float بیت ، دقت ساده )

(64 Double بیت ، دقت مضاعف )

نوع داده کاراکتر (char) برای ذخیره کردن یک کاراکتر است. چون جاوا از یونی کد استفاده می کند هر متغییر Char دارای 16 بیت ( بدون علامت ) خواهد بود.

آخرین نوع داده اولیه درجاوا نوع منطقی (Boolean) است که می تواند دو مقدار True یا False بگیرد. برخلاف C ، نوع منطقی یک عدد نیست و نباید آن را با اعداد مقایسه کرد. علاوه بر این انواع ، متغییر های جاوا می توانند از نوع کلاس هم باشند :

این متغییر ها یک وهله از کلاس مربوطه هستند.

نکته :

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

مقدار دادن به متغییر ها :

بعد از تعریف متغییر ها ، با استفاده از عملکرد می توان به آن ها مقدار داد:

توضیحات (COMments) :

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

این نوع صحیح می تواند چند خطی باشد.

برای توضیحات تک خطی از // می توان استفاده کرد :

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

واژه ها :

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

واژه های عددی :

در جاوا چندین واژه صحیح جود دارد. مثلاً ، 4 یک واژه صحیح از نوع int است. اگر عدد واژه از یک int بزرگ تر باشد به طور خودکار به نوع long تبدیل خواهد شد. می توانید حتی یک عدد کوچک از نوع long داشته باشید ، برای این کار باید جلوی عدد از حرف l یا L استفاده کنید ، مثلاً 4L عدد صحیح 4 را در یک واژه long ذخیره می کند.

اعداد صحیح را به صورت اکتال ( در مبنای هشت ) و هگزا دسیمال ( در مبنای شانزده ) هم می توان ذخیره کرد. یک 0 در جلوی عدد نمایش دهنده اکتال بودن آن است – مانند 0777 یا 0004. اگر جلوی واژه 0X نوشته شود آن واژه به صورت هگزا دسیمال ذخیره خواهد شد ( 0XFF یا 450XAF ). در اعداد هگزا علاوه بر رقم های 0 تا 9 از حروف ( A ده تا F پانزده ) هم می توان استفاده کرد.

واژه های اعشاری معمولاً دو قسمت دارند. یک قسمت صحیح و یک قسمت اعشاری. تمام واژه های اعشاری صرف نظر از دقت عدد از نوع double خواهند بود مگر این که با قید حرف f ( یا F ) در جلوی آن تصریح شود که عدد مزبور از نوع float باید باشد. واژه های اعشاری را با استفاده از حرف E ( یا e ) می توان به صورت نمایش هم نوشت 4510e یا 2360E.

واژه های منطقی :

یک واژه منطقی فقط می تواند معادل کلمات کلیدی True یا False باشد.

واژه های کاراکتری :

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

کد مفهوم
/n خط جدید ( سر خط )
/t فاصله جدولی (tab)
/b یک کاراکتر به عقب
/r برگشت سر خط
/f یک خط به پایین
اسلاش وارونه
/- نقل تکی
/” نقل دو تایی
/ddd عدد اوکتال
xdd عدد هگزا دسیمال
/udddd کاراکتر یونی کد

واژه های رشته ای :

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

یک واژه رشته ای عبارتست از چند کاراکتر که در علامت نقل دو گانه محصور شده باشند :

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

در مثال آخر ، u2122/ کاراکتر یونی کد علامت تجاری TM است.

نکته:

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

تفاوت واژه های رشته ای با دیگر انواع واژه های رشته ای ( برای خلاف دیگر واژه ها ) اشیاء واقعی ( وهله های کلاس String ) هستند.

عبارات و عملگر ها :

عبارت (expression) ساده ترین واحد عملیاتی در جاواست.

اصطلاح جدید :

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

عملگر های جاوا عبارتند از عملگر های محاسباتی ، انواع مختلف انتساب مقدار ، افزایش و کاهش و عملیات منطقی.

محاسبات :

جاوا دارای پنج عملگر محاسباتی است. ( به جدول زیر نگاه کنید )

هر عملگر دو عملوند (Operand) لازم دارد. از عملگر تفریق (-) برای منفی کردن اعداد هم می توان استفاده کرد. تقسیم اعداد صحیح دارای خارج قسمت صحیح خواهد بود و مقدار اعشار آن نادیده گرفته خواهد شد. مثلاً حاصل تقسیم 31.9 معادل 3 خواهد بود. عملگر % باقیمانده تقسیم را بر می گرداند.

برای مثال حاصل عبارت 31%9 معادل 4 خواهد شد.

حاصل عملیات دو عدد صحیح هموار یک عدد صحیح خواهد بود. نوع داده مقدار برگشتی با نوع داده عملوندی که جای بیشتری اشغال می کند معادل خواهد بود.

عملگر مفهوم مثال
+ جمع 3+4
تفریق 5-7
* ضرب 5*5
/ تقسیم 7/14
% باقیمانده 7%20

در لیست زیر چند محاسبه ساده ریاضی را مشاهده می کنید.

خروجی :

تحلیل برنامه :

در این برنامه ساده جاوا ( به متد main ) توجه کنید. ابتدا متغییر ها تعریف شده اند ( خطوط 3 تا 6 ) به نحوه تعریف متغییر ها دقت کنید.

باقیمانده برنامه صرفاً چند عمل ساده ریاضی روی این متغییر ها و نمایش حاصل این محاسبات است.

دیگر نکته قابل توجه این برنامه متد (system.out.println) است.

این متد صرفاً یک پیام را روی خروجی استاندارد ( که معمولاً مانیتور است ) چاپ می کند. متد (system.out.println) فقط یک آرگومان ورودی دارد ولی می توان با عملگر + چند رشته را ترکیب کرد و به آن فرستاد.

انتساب مقادیر :

توضیح بیشتری درباره انتساب مقادیر :

نسبت دادن مقدار (assignment) به یک متغییر نوعی عبارت است : در حقیقت ، چون هر عبارت یک مقدار برگشتی دارد می توان چند عبارت انتسابی را به هم پیوند داد :

X=y=z=0:

همیشه ابتدا مقدار عبارت سمت راست محاسبه شده و یا به عبارت سمت چپ نسبت داده می شود. این بدان معناست که عبارت x=x+2 یک عبارت صحیح است : به x دو واحد اضافه شده و حاصل در x قرار داده می شود. عملیاتی از این دست چنان در برنامه نویسی رایج است که جاوا برای آن عملگر ویژه ای دارد ( این ویژگی را جاوا از C بعاریت گرفته است ). جدول علگر های ویژه را نشان داده است.

عبارت مفهوم
X+=y X=x+y
x-=y X=x-y
X*=y X=x*y
x/=y X=x/y

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

افزایش و کاهش :

مانند C و C++ در جاوا هم برای اضافه یا کم کردن 1 از عملگر های ++ یا – استفاده می شود. مثلاً عبارت x++ به x یکی اضافه می کند و معادل x=x+1 است. عبارت X—هم یکی از x کم می کند. بر خلاف C و C++ ، عملوند در عبارات ++ یا – می توانند اعشاری هم باشند.

عملگر های ++ و – میتوانند قبل یا بعد از متغیر قرار گیرند. در عبارات ساده این موضوع چندان اهمیتی ندارد ، ولی در عبارت پیچیده می تواند باعث بروز تفاوت هایی شود. برای مثال ، به دو عبارت ذیل دقت کنید.

Y=x++:

Y=++x:

نتیجه این دو عبارت بسیار متفاوت خواهد بود. در عملگر پسوند ++ یا y ، x—مقدار x را قبل از تغییر آن می گیرد : در عملگر پیشوند – یا x—مقار x بعد از تغییر به y داده می شود. در لیست زیر مثالی که این مطلب نشان می دهد آورده شده است.

مثال : آزمایش عملگر های پسوند و پیشوندی افزایش :

خروجی :

تحلیل برنامه :

در قسمت اول این برنامه ، x با عملگر های پیشوندی و پسوندی افزایش داده شده است. در هر دو مورد به x یکی اضافه شده است. در این مثال ساده نتیجه کار در هر دو مورد یکسان است.

در قسمت دوم ، از عبارت ++y=x استفاده کرده ایم. ایتدا مقدار مورد X به Y داده شده و سپس x یکی اضافه می شود : در نتیجه مقدار Y برابر با 0 ( مقدار اولیه x ) خواهد بود.

در قسمت سوم ، از عبارت پیشوندی Y=++X استفاده کرده ایم.

اینجا ، اتفاقی که می افتد بر عکس است یعنی ابتدا مقدار X افزایش داده شده و سپس به Y نسبت داده می شود. در این مورد مقدار y برابر با 2 ( مقدار x بعد از افزایش ) خواهد بود.

عملگر های منطقی :

عباراتی که مقدار برگشتی آن ها Boolean است را می توان با اپراتوری منطقی AND,OR,XOR با هم ترکیب کرد.

برای AND کردن دو عبارت باید از & یا && استفاده کرد. حاصل عبارت زمانی درست خواهد بود که هر دو قسمت درست باشند ، در غیر این صورت حاصل عبارت نادرست خواهد شد. تفاوت این دو عملگر در نحوه ارزیابی عبارت است. با عملگر & ، هر دو قسمت عبارت ارزیابی می شوند. اما با عملگر && اگر سمت چپ عبارت نادرست باشد ، برای تمام عبارت مقدار False برگشت داده می شود و سمت راست عبارت ارزیابی نخواهد شد.

برای OR کردن دو عبارت از| یا || استفاده می شود. حاصل عبارت زمانی درست خواهد بود که یکی یا هر دو قسمت آن درست باشند ، فقط وقتی عبارت نادرست است که هر دو قسمت آن نادرست باشند. با عملگر | هر دو قسمت عبارت ارزیابی می شوند. ولی عملگر || اگر قسمت اول درست باشد ، برای تمام عبارت مقدار True برگشت داده می شود و سمت راست عبارت فقط ارزیابی نخواهد شد.

هنگام XOR کردن دو عبارت ( که عملگر آن ^ است ) فقط زمانی حاصل عبارت درست خواهد بود که در قسمت آن ارزش متضاد داشته باشد و اگر هر دو قسمت عبارت هم ارزش باشد ، حاصل عبارت نادرست خواهد شد. در کل ، عملگر های ||و && برای عملیات منطقی و عملگر های | ، & ، ^ برای عملیات منطقی بیت گرا (Bitwise) مورد استفاده قرار می گیرند.

عملگر (!) NOT فقط روی یک آرگومان عمل کرده و ارزش آن را معکوس می کند. مثلاً ، اگر x درست باشد ، x ! نادرست خواهد بود.

عملگر های بیت گرا :

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

عملگر مفهوم
& AND بیت گرا
| OR بیت گرا
^ XOR بیت گرا
>> انتقال به چپ
<< انتقال به راست
<<< انتقال به راست و پر کردن با صفر
، مکمل بیت گرا
=>> انتساب مقدار بعد از انتقال به چپ (x=x<<y)
=<< انتساب مقدار بعد از انتقال به راست (x=x>>y)
=<<< انتساب مقدار بعد از انتقال به راست و پر کردن با صفر (x=x>>>y)
X&=y AND و انتساب مقدار (x=x&y)
X|=y OR و انتساب مقدار (x=x|y)
X^=y XOR و انتساب مقدار (x=x^y)

تقدم عملگر ها :

هنگام ارزیابی یک عبارت توسط کامپایلر ، تقدم عملگر ها نتیجه را مشخص می کند. در اغلب موارد ، این موضوع بر مقدار برگشتی عبارت تاثیر خواهد گذارد. به عبارت ذیل توجه کنید :

2/4+6Y=

اگر در این عبارت ابتدا 6+4 محاسبه شده و سپس بر 2 تقسیم شود حاصل 5 خواهد بود ولی اگر 2 ، 4 محاسبه شده و سپس با 6 جمع شود حاصل 8 خواهد شد. تقدم عملگر ها نحوه محاسبه عبارت را تعیین می کند ، از این رو می توان نتیجه کار پیش بینی کرد. در کل ، افزایش و کاهش قبل از محاسبات حسابی انجام می شوند : عملیات حسابی قبل از عملیات مقایسه انجام می شود : و مقایسه ها قبل از عملیات منطقی صورت خواهد گرفت.

در آخر مرحله انتساب مقدار انجام خواهد شد.

جدول زیر تقدم عملگر ها را در جاوا نشان می دهد.

تقدم عملگر ها از بالا و پایین کم می شود : عملگر های هر سطر دارای تقدم یکسانند و از چپ به راست ارزیابی خواهند شد. با توجه به جدول ، در عبارت y=6+4.2 ابتدا تقسیم و سپس جمع انجام خواهد شد بنابر این حاصل عبارت 8 خواهد بود.

عملگر توضیح
,[]() پرانتز () برای دسته بندی عبارات است ، برای دسترسی به متد ها و متغییر های یک شی ء یا کلاس از نقطه (.) استفاده می شود ، کروشه [] در آرایه ها مورد استفاده قرار می گیرد.
+++ — ! instanceof اگر یک شیء وهله ای از یک کلاس باشد ، عملگر instanceof درست خواهد بود با new یک وهله از کلاس ها ایجاد می شود ، () برای تغییر نوع داده متغییر ها به کار می رود.
*/% ضرب ، تقسیم ، باقیمانده
+- جمع ، تفریق
>>><<>> انتقال های بیت گرا
= <> مقایسه ها
=! = = تساوی
& AND
^ XOR
| OR
&& AND منطقی
|| OR منطقی
?: نوع خلاصه شده if … then … else
=/=*=-=+=

=|=&=^=%=<<< = ><

انواع انتساب مقدار ها

با استفاده از پرانتز همیشه می توان ترتیب ارزیابی عبارات را تغییر داد. پرانتز ها می توانند در درون هم قرار داشته باشند ( پرانتز های تو در تو ). ارزیابی از داخلی ترین پرانتز شروع می شود. اگر در مثال قبل از پارانتز مانند ذیل استفاده کنیم :

Y=(6+2)/2

ابتدا 4+6 محاسبه شده (10) و سپس بر 2 تقسیم می شود (y=5). هر گاه در حدس زدن نحوه ارزیابی عبارات توسط کامپایلر دچار شک و تردید شدید ، از پرانتز برای گروه بندی عبارت استفاده کنید.

عملیات رشته ای :

برای وصل کردن دو رشته به یکدیگر در جاوا از عملگر جمع (+) استفاده می شود. قبلاً دیدید که چگونه از این عملگر استفاده کردیم.

عملگر + از چند رشته یک رشته جدید می سازد. اگر هر یک عملوند های این عملکرد رشته نباشد به طور خودکار به رشته تبدیل خواهد شد.

عملگر =+ ( که در قسمت قبل با آن آشنا شدید ) روی رشته ها هم عمل می کند. مثلاً ، عبارت Name+-“Jr.”:My

معادل عبارت ذیل است :

یک برنامه جاوا از کلاس ها و اشیاء تشکیل می شود. هر کلاس و شیء دارای متد هایی است و یک متد از دستورات و عبارات ساخته می شود.

عملگر های جاوا :

عملگر مفهوم
+ جمع
منها
* ضرب
/ تقسیم
% باقیمانده
< کوچک تر است از
> بزرگ تر است از
<= کوچک تر یا مساوی
>= بزرگ تر یا مساوی
== تساوی
!= نا مساوی
&& AND منطقی
|| OR منطقی
! NOT منطقی
& AND
| OR
^ XOR
<< انتقال به چپ
>> انتقال به راست
>>> انتقال به راست و پر کردن با صفر
مکمل
= انتساب
++ افزایش
کاهش
+= جمع و انتساب
-= تفریق و انتساب
*= ضرب و تقسیم
/= تقسیم و انتساب
%= باقیمانده و انتساب
&= -AND انتساب
|= -OR انتساب
<<= انتقال به چپ و انتساب
>>= انتقال به راست و انتساب
^= -XOR و انتساب
>>>= انتقال به راست و پر کردن با صفر و انتساب
  1. Java
  2. System file
  3. Text Editor
  4. 16 Mb RAM Memory
  5. OLE : Object Linking and Embedding
  6. Compound documents
  7. COM : Component Object Model
  8. Microsoft company
  9. Distributed
  10. Applet
  11. Authenticode
  12. Trusted
  13. Restricted
  14. High
  15. Medium
  16. Low
  17. Custom
  18. Personal Digital Assistant
  19. Width Web World
  20. کامپایلر برنامه ای است که متن برنامه را گرفته و در پایان یک فایل exe تولید می کند ، بعد از کامپایل شدن یک برنامه ، دیگر به وجود کامپایلر نیازی نیست و می توان برنامه exe را روی هر کامپیوتر سازگاری اجرا کرد. اما اینترپرتر هیچ برنامه exe ای تولید نمی کند و برنامه را خط به خط اجرا می کند ، برای اجرای برنامه حتما باید اینترپرتر هم روی کامپیوتر مورد نظر باشد.
  21. Java – Enabled Brower
  22. Inheritance
  23. Single
  24. Multiple

دیدگاه بگذارید

profile avatar
  Subscribe  
Notify of
question