تارا فایل

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


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

من به مدت 240 ساعت در شرکت همراه نرم افزار نوین مشغول به کار شدم. هدف از این کار :
بمنظور آشنایی با محیط کاری و اینکه آنچه راکه در مدت کاردانی به صورت تئوری وتاحدودی عملی آموخته ام در جامعه کاری به صورت کاربردی از آن استفاده کنم و بکار گیرم.
این شرکت مجموعاً به چند بخش عمده تقسیم بندی شده است که شامل:
1- بخش تولید
2- بخش اداری- پرسنلی
3- بخش تبلیغات
4- بخش فروش
5- بخش خدمات پس از فروش
من در ابتدا مدتی در بخش فروش مشغول به کار شدم. نفرات متعددی در این بخش کار میکردند از جمله: مدیر بازاریابی و فروش – سرپرست فروش- سوپروایزر تهران و سوپروایزر شهرستانها. باشند
در این واحد نرم افزارهایی که توسط بخش تولید،تهیه و تایید شده و بارکد خورده باشند به فروش می رسد. این شرکت کاملاً به صورت مکانیزه عمل می کند.
هر نرم افزار در سایت این شرکت به صورت رایگان دانلود میشود اما برای اجرای آن باید مبلغی را به حساب شرکت مذکور واریز کنند، بعد از تایید واریز وجه کد فعال سازی به تعداد نرم افزار هایی که مشتری یا مشتریان خریداری می کنند در اختیار آنها قرار می گیرد و هر مشتری برای فعال سازی آن برنامه به صورت خودکار هنگامی که برنامه ها را فعال میکند اطلاعات او در سرور های شرکت ثبت و نگهداری می شود که البته قابل ذکر است که بخش(اتاق) سرور ها کاملاً ایزوله شده و هیچکس جز مسئول مربوطه اجازه دسترسی به آنها را ندارد.
سوپروایزر شهرستانها هم به امور نماینده ها در سراسر ایران نظارت میکند و به مشتری های شهرستانی شرکت خدمات می رساند.
بعد از آن مدتی در قسمت خدمات پس از فروش مشغول به کار شدم،این قسمت بسیار جالب بود چون تمام کاربران از اقسا نقات ایران و حتی خارج از ایران تماس گرفته و مشکلاتی که برای آنها از نسب برنامه گرفته تا مشکلاتی که هنگام نسب یا بعد از نسب نرم افزار پیش می آمد صحبت می کردند.
می توان گفت این قسمت یعنی همان بخش خدمات پس از فروش به نوعی قلب این شرکت میباشد و محبوبیت این شرکت در بین کاربران و حتی نمایندگان خود به دلیل خدمات نامحدود آن است و بدون اینکه وجهی دریافت کند تا مادامی که از آن نرم افزار استفاده می شود خدمات رایگان در اختیار آن کاربر گذاشته می شود.کاربران اغلب بصورت تماس تلفنی مشکلاتشان را مطرح کرده و مسئولین فنی و اپراتورها به آنها پاسخ میدهند تا مشکلات آنها را برطرف کنند و اگر مشکل آنها خیلی حاد بود به شرکت مراجعه میکنند ولی اکثراً با یک تماس مشکل برطرف میشود.در این بخش تمام خدمات به صورت رایگان در اختیار کاربران قرار میگیرد.
خدماتی که این بخش در اختیار یوزرهای خود میگذارد شامل :
1- نسب نرم افزار در کوتاهترین مدت ممکن
نکته:البته قابل ذکر است که تمام نرم افزارها به صورت پکیج به بازار عرضه شده که هرکدام از پکیج ها شامل: دفترچه راهنمای نسب و کد فعال سازی میباشد که با خواندن آن دفترچه به راحتی مراحل نسب انجام میشود. در این صورت حتی اگر کاربر نتواند این کار را انجام دهد مسئولین این بخش باکمال رضایت این خدمات را در اختیار کاربران
می گذارند.
2- چک کردن سرورها که حتی برای یک ثانیه هم متوقف نشوند.چون اگر چنین مسئله ای پیش بیاید در سراسر ایران فروشندگان و نمایندگان وعاملین فروش و موبایل فروشی ها کارشان مختل میگردد.
3- پاسخ گویی به مشتریانی که تماس تلفنی گرفته و میخواهند به صورت شنیداری و به کمک راهنمایی های اپراتور مشکلات خود را در زمینه ی نصب کردن برطرف نمایند.
4- حفاظت از سرورها کار کاملاً خطیری است که به این بخش محول شده و باید از نظر Security کاملاً واقب باشند که به هیچ یک از کدهای داخل سرور کوچکترین خدشه ای وارد نشود و تغییر و جابجایی در آنها صورت نگیرد.
5- نمایندگان استانها و شهرستانها که تماس میگیرند تا ببینند چه تعداد از کدهای آنها مصرف شده و چه تعداد از کدها باقی مانده است.مثلاً اگر کسی از مقررات سرپیچی کرده باشد(یعنی قانون کپی رایت را نادیده گرفته باشد)سریعاً باگزارشی که به این بخش میشود جلوی آن کد را گرفته و کد مذبور بلاک میشود تا فرد متخلف نتواند از آن برنامه استفاده کند بدین صورت که کد آنرا میسوزانند و اگر کاربر خطا کار بخواهد از آن استفاده کند پیغام :
" این کد فاقد اعتبار است" را نشان میدهد که این کار یکی از شاخص های شرکت است که هیچ یک از شرکتهای ایرانی تولید کننده نرم افزار به این مسئله توجه نکردند و بعد از مدت کوتاهی تمام نرم افزارهایی که آنها زحمات فراوانی برای تولید آن می کشند سریعاً هک میشود ولی تاکنون با گذشت پنج سال از تولیدات نرم افزارهای این شرکت هنوز هیچکس نتوانسته حتی یک نسخه را هم هک کند.
بخش بعدی مربوط به بخش تولید است که در آنجا دوگروه مشغول به فعالیت میباشند:
گروه اولProgramer ها هستند که استراکچرها و برنامه ها را مینویسند وبا برنامه های متعددی کار میکنند از جمله: C++ و java که در قسمت های بعدی به توضیح جامع و کاملتری از نرم افزار جاوا میپردازم.
گروه دوم Data intry ها هستند یعنی،افرادی که با نرم افزارها و ابزارهایی که توسط برنامه نویسان طراحی و ساخته شده است کار میکنند
که اطلاعات را وارد کرده و ایراد یابی میکنند تا در نهایت تایید شده و به مرحله بهره برداری برسد باید در نظر داشت که حتی کوچکترین خطا و اشتباه منجر به مشکلات بزرگی خواهد شد. این بخش نقش کلیدی و حیاتی را در تهیه برنامه ایفا میکند.
در قسمت ضمائم نیز چند نمونه از نرم افزارهای تولید شده توسط این شرکت و قابلیت های آنها را توضیح داده ام .
توضیحات ذکر شده مختصری از شرح کارآموزی من در این شرکت بود و من در طی این مدت با چگونگی عملکرد نرم افزار جاوا که یکی از نرم افزار های مورد استفاده در این شرکت بود تا حدودی آشنا شدم که در زیر به شرح قسمت هایی از آن پرداخته ام:

جاوا
جاوا یک زبان برنامه نویسی است که در اوایل دهه 90 توسط جاوا سافت، بخش نرم افزاری شرکت سان، توسعه داده شد. هدف آن بود که جاوا زبانی ساده، فوی و همه منظوره باشد. جاواتمام جنبه های مثبت C و C++را در خوددارد، و آن چیزهایی که برنامه نویسان از آن نفرت داشته اند ( مانند وراثت چند گانه، تحریف اپراتورها و اشاره گرها) را به کناری گذاشته است.
مهمترین ویژگی جاوا این است که اساساً شییء گر است. اولین ادعای oppتوانایی استفاده مجدد از کد است؛ چیزی که C++ با تمام ادعاهایش هرگز نتوانست بدان دست بابد، اما در اولین قدم خواهید دید که ادعای جاوا در این زمینه تا چه اندازه صحت دارد. تصورش را بکنید که با صرف کمی وقت بتوانید برنامه ای بنویسید که در سیستم های ویندوز، یونیکس و مکینتاش براحتی اجرا شود! همین که یک شرکت نرم افزاری بتواند برای تمام پلاتفرم های موجود در آن واحد پروژه ای را تولید کند ( و مقادیر عظیمی پول صرفه جویی کند) خود می تواند بهترین دلیل اقبال جاوا باشد . و امروزه دیگر همه ( و نه فقط شرکتهای نرم افزاری) به سمت جاوا کشیده شده اند.
با این ویژگی ( استقلال از پلاتفرم) یک برنامه نویس می تواند برای سیستمی برنامه بنویسید که هرگز با آن کار نکرده است. این ویژگی اصلی ترین علت توفیق جاوا در اینترنت است. اینترنت شبکه پچیده ای است از میلیونها کامپیوتر مختلف در سراسر دنیا، و مقاومت در مقابل این وسوسه که بتوانید برنامه ای بنویسید که روی تمام این سیستم های متفاوت و نامتجانس اجرا شود چندان ساده نیست.
جاوا یک زبان بسیار ساده است چون شما را وادار نمی کند تا در محیط جدید ( و ناآشنایی) کار کنید و این برای کسانی که اطلاعات فنی ناچیزی درباره کامپیوتر دارند بسیار مهم است . ساختار زبان جاوا در نگاه اول بسیار شبیه C و C++ است و این به هیچ وجه تصادفی نیست . C زببانی است ساخت یافته و C++ زبانیست شیی ء گرا ، و مهمتر از همه قسمت اعظم برنامه نویسان دنیا از آنها استفاده می کنند. از سوی دیگر این شباهت حرکت به طرف جاوا از برای این قبیل افراد ساده خواهد کرد بنابراین طراحان جاوا برای اجتناب از دوباره کاری از زبانهای C وC++ بعنوان مدل استفاده کردند. ( و آیا این خود به تنهایی نشانه نبوغ طراحان جاوا نیست؟) .
جاوا با دور انداختن اشاره گرها و بر دوش کشیدن بار مدیریت حافظه، برنامه نویسانC++ /C را برای همیشه از این کابوس ها رهایی بخشیده است. علاوه برآن، چون جاوا زبانی برای اینترنت است، از ایمنی و حفاظت ذاتی بالایی برخودار است. طراحان حاوا از ابتدا یک محیط برنامه نویسی امن را مد نظر داشته اند. مسئله حفاظت سیستم ها رابطه تنگاتنگی با اشاره گرها دارد؛ اکثر مهاجمان برای ورودی غیر قانونی به جاوا مکانیزم های حفاظتی دیگری هم دارد که در جای خود به آنها اشاره خواهیم کرد.
برای آشنایی بیشتر با جاوا بهتر است نگاه مختصری به تاریخچه آن بیندازیم. اما چون جاوا رابطه تنگاتنگی با اینترنت دارد، آوردن تاریخچه ای از اینترنت و وب خالی از فایده نیست.

تاریخچه مختصر اینترنت وب
اینترنت به عنوان یک پروژه دولتی ایالات متحده امریکا در سال 1969 بدنیا آمد. این پروژه ، که درابتدا آرپانت (arpanet) نام داشت. فقط چهار کامپیوتر را در نقاط مختلف ایالات متحده به هم متصل می کرد. آرپانت بتدریج رشد کردو در سال 1972 پنجاه دانشگاه و مرکز تحقیقاتی نظامی در آن فعال بودند. در اواخر دهه 1980 متجاوز از هشتاد هزار کامپیوتر در این شبکه عظیم به هم متصل شده بودند. این کامپیوترها خود به دستجات ( شبکه های) کوچکتری تقسیم شده بوددند و شبکه شبکه ها ( یا اینترنت) آنها را به یکدیگر متصل می کرد. در تمام این مدت اینترنت ملک اختصاصی محققان و دانشگاهیان بود و با آن که شرکتهای خصوصی هم می توانستند به آن دسترسی داشته باشند ولی سیاست حاکم بر آن مانع استفاده تجاری از اینترنت شده بود. در سال 1991 با حذف ممنوعیت تجارت در اینترنت اوضاع دگرگون شد؛ ولی کماکان محدوده تجارت و تحقیق از هم جدا بود. از همین نقطه بود که رشد انفجاری اینترنت شروع شد به طوری که هم اکنون نزدیک به 100 میلیون کاربر در این شبکه عضویت دارند و اینترنت به تمام زاویای زندگی رسوخ کرده است.
با آن که اینترنت چندان جوان نیست اما از تولد وب ( یا شبکه تار عنکبوتی جهانی، World Wide Wed-WWW) زمان زیادی نمی گذرد. وب در سال 1989 در آزمایشگاه اروپایی فیزیک ذرات (CERN) متولد شد. وب حاصل زحمات تیم برنرز – لی_(tim berners-lee) بود که تلاش داشت تا فیزیکدانان سراسر دنیا بتواند اطلاعات خود را در شبکه اینترنت و به صورت اَبَرمتن(hypertext) با هم در در میان بگذرند . وی براساس زبان عمومی علامتگذاری استاندارد SGML یک زبان جدید بنام زبان علامتگذاری اَبَرمتن HTML بوجود آورد. برای انتقال اسناد HTMLهم یک پروتکل جدید ابداع شد که پروتکل انتقال اَبرمتن HTTPنام گرفت. این پروتکل وسیله ای بود برای جستجو، یافتن، بازیابی و نمایش سریع اسناد. با استفاده از ابرمتن می توان در شبکه ای از منابع، با برنامه ای بنام کاوشگر BROWSER بدنبال اسنادی با ویژگیهای خاص کاوش کرد. چون اولین کاوشگر فقط می توانست متون را نمایش دهد با اقبال کمی مواجه شد. در حقیقت درسال 1993 فقط پنجاه پایگاه وب در تمام دنیا وجود داشت. شروع محبوبیت وب ورشد برق آسای آن با ورود کاوشگر گرافیکی موزائیک MOSAIC همراه بود. این کاوشگر در NCSA ( مرکز ملی کاربردهای سوپر کامپیوتر) توسعه داده شد. امروزه در دنیا دهها کاوشگر گرافیکی و متجاوز از یکصد هزار پایگاه وب وجوددارد. موفقیت موزائیک باعث شد تا عده ای از محققان NCSA شرکت نت اسکیپ NETSCAPE را تاسیس کنند و این همان شرکتی است که معروفترین کاوشگر وب یعنی NetsCape Navigator را تولید کرده است. کاوشگر نت اسکیپ علاوه بر HTML قابلیت های متعددی در زمینه مالتی مدیا دارد که باعث تسریع در روند رشد اینترنت و وب شده است.
اما سال 1995 یکی از مهمترین سالها در تاریخ اینترنت و وب است: در این سال بود که میکروسافت ویدئوی اینترنتی را توسعه داد و صوت را تبدیل به یکی از اجزاء تفکیک ناپذیر اسناد ابرمتن کرد؛ نت اسکیپ با افزودن قابلیت های بی شمار به کاوشگر خود همه را شگفت زده کرد؛ اولین ویرایش زبان مدلسازی واقعیت مجازی VRML به بازار آمده و سان جاوا را در یک سینی طلایی بدنیا عرضه کرد.
توسعه دهندگان وب با جاو ابزاری را یافتند که باآن می توانستند صفحات تعاملی مالتی مدیا در اینترنت بوجود آورند و این نقطه عطف جدیدی در تاریخچه اینترنت به شمار می آید.
تکامل جاوا
جاوا هم مانند اکثر اختراعات مهم حاصل تلاش گروهی دانشمند پیشتاز است. اما نکته جالب درباره جاوا آن است که جاوا از ویرانه های یک پروژه شکست خورده سر برآورد . اگر پروژه گرین Greenکه شرکت سان در سال 1991 آن را شروع کرد به موفقیت می انجامد امروز نه سان دیگر یک شرکت کامپیوتری می بود و نه جاوا متولد می شد.
در سال 1991، شرکت سان میکروسیستمز در آغاز راه تبدیل شدن به بزرگترین تولید کننده ایستگاههای کاری یونیکس بود و در طول فقط پنج سال در آمدش را از 210 میلیون دلار به 5/2 میلیارد دلار رسانده بود و بنظر می رسد هیچ چیز نمی تواند جلودار آن باشد. عامل عمده موفقیت سان کارهای پیشتازانه اش در ایجاد شبکه های باز بود و در این زمینه هیچ کس به پای آن نمی رسید.
مدیران سان به این فکر افتادند تا کاری کنند که این رشد برای مدتی طولانی ادامه یابد. یکی از زمینه های مورد علاقه سان بازار لوازم الکترونیکی بود؛ پروژه گرین بوجود آمد تا برای این بازار نرم افزاری پیشرفته خلق کند. مهندسان سان توجه خود را به میکروپروسسورهایی معطوف کردند که دارای قابلیت استفاده در این گونه سیستم ها باشند. اگر پروژه گرین می خواست موفق باشد باید کاری می کرد تا سیستم مزبور بتواند براحتی به بسترهای سخت افزاری مختلف منتقل شود. برای این منظور ابتدا از کامپایلر C++ استفاده شد ولی بزودی نارسایی هایC++ در این زمینه خود را نشان دادند. مهندسان سان خیلی سریع دریافتند که برای ادامه کار باید چیزی جدید و قوی خلق کنند. در همین زمان بود که جیمز گاسلینگ کار بر روی زبان جدید اوکOak را شروع کرد . تقدیرآن بود که این زبان جاواJava نامیده شود، چون اداره ثبت نام های تجاری نام اوک را رد کرده بود.
بتدریج مهندسین یک دستگاه شبه PDA ساختند که در آن از سیستم عامل ، زبان برنامه نویسی و واسط کاربر جاوا استفاده شده بود و با وجود ابتدایی بودن توانست توجه مدیران سان را به خود جلب کند. بعدها گروهی که در پروژه گرین کار کرده بودند شرکت جاواسافت را بنیان نهادند.
متاسفانه بخت با پروژه گرین یار نبود و بعد از چند شکست متوالی، سان آن را کنار گذاشت. در همین زمان بود که عده ای از محققان NCSA شرکت نت اسکیپ را تاسیس کردند و این اتفاقات با آتشی که به سرعت دنیا را در می نوردید و شبکه تار عنکبوتی جهانی Wwwنام داشت همزمان شد. بنابراین اتفاقی نبود که مهندسان پروژه گرین به سمت اینترنت و وب به عنوان بستر پروژه سان جلب شوند. بعد از آن دیگر جزء تاریخ است، چهار سال بعد پروژه گرین به بار نشست و جاوا تبدیل به داغترین موضوع اینترنت شد: همه، از برنامه نویسان و طراحان صفحات وب گرفته تا کاربران اینترنت، می خواهند از جاوا استفاده کنند.
سان بلافاصله برای جاوا یک کاوشگر هم تولید کرد. این اولین کاوشگری بود که می توانست اپلت های جاوا را اجرا کند و نام آن هم هات جاواHotJava بود.
ویژگی های زبان برنامه نویسی جاوا
جاوا ویژگیهای متعددی دارد که آن را منحصر به فرد کرده است. جاوا هم کامپایلر دارد و هم اینترپرتر. ( توضیح: کامپایلر برنامه ای است که متن برنامه را گرفته و در پایان یک فایلexe تولید می کند. بعد از کامپایل شدن یک برنامه، دیگر به وجود کامپایلر نیازی نیست و می توان برنامه exe را روی هر کامپیوتر سازگاری اجرا کرد. اما اینترپرتر هیچ برنامه exe ای تولید نمی کند و برنامه را خط به خط اجرا می کند. برای اجرای برنامه حتماً باید اینترپرتر هم روی کامپیوتر مورد نظر موجود باشد). هر کامپایلر فقط برای یک سیستم خاص ( مانند اینتل، اپل یا آلفا) می تواند کد اجرایی تولید کند. اما کامپایلر جاوا کد اجراییexe تولید نمی کند و در عوض یک فایل بینابینی می سازد که بایت کد نام دارد. بایت کد چیزی شبیه زبان اسمبلی است، اما این زبان مختص هیچ پروسسور خاصی نیست بلکه زبان اسمبلی یک ماشین ویژه به نام ماشین مجازی جاوا jvm است. در هنگام اجرای چنین برنامه ای اینترپرتر زمان اجرای جاوا ، که روی ماشین مجازی جاوا اجرا می شود، دستورات فایل بایت کد را به دستورات قابل فهم برای پروسسوری که روی آن اجرا می شود تبدیل خواهد کرد.
اماشاید از خود سوال کنید که چرا جاوا این همه کار را بر خود( و دیگران) سخت گرفته است؟ این همه لایه و ماشین مجازی برای چیست؟ یکی از بزرگترین ادعاهای جاوا آزاد بودن از بستر سخت افزاری است. اما ، این یعنی چه؟ اگر جاوا بخواهد در اینترنت موفق باشد برنامه های آن باید بتوانند بدون هیچ اشکالی روی تمام کامپیوترهای متصل به اینترنت اجرا شود، اما شما بهتر می دانید که اینترنت شبکه عظیمی است از کامپیوترهای نامتجانس، از سوپر کامپیوترهای عظیم گرفته تا PC های مبتنی بر پروسسورهای اینتل و پاورپی سی تا ماشین های یونیکس مبتنی بر پروسسورهای آلفا و …! چگونه یک برنامه اجرایی می تواند روی این طیف وسیع کامپیوترها اجرا شود؟ ایده اولیه ساده است: برنامه ها برای یک ماشین مجازی کامپایل شوند و این ماشین مجازی روی تمام کامپیوترهای متصل به اینترنت نصب شود. این دقیقاً همان روشی است که جاوا در پیش گرفته است. برنامه تان را با یک کامپایلر جاوا کامپایل کنید؛ آن را در پایگاه وب خود قرار دهید و به دیگران اطلاع دهید تا با یک کاوشگر مجهز به جاوا این برنامه را ( که ممکن است در دل یک صفحه وب قرار داشته باشد) اجرا کنند. شاید هرگز تصور نمی کردید که برنامه ای را که با یک PCاینتل نوشته اید روی یک ماشین مکینتاش یا یونیکس اجرا شود، ولی اکنون به لطف جاوا این دیگر آرزویی دست نیافتنی نیست.
با آن که C و C++ بدون شک زبانهایی بسیار قدرتمندی هستند اما اشکالاتی ذاتی دارند که شاید هرگز نتواند از آن رهایی یابند. عمده ترین این اشکالات در مدیریت حافظه و اشاره گرهای آنها است. برای اکثر برنامه نویسانC++ /C مدیریت حافظه و اشاره گرها یک کابوس واقعی است. با آن که جاوا بدلیل محبوبیت فوق العاده C++ ظاهری شبیه آن دارند ولی در جاوا مدیریت حافظه به طور خودکار انجام می شود و اشاه گر هم اساساً در جاوا آرایه ها عضوی از یک کلاس هستند که تمام مشکلات کار با آرایه را از دوش برنامه نویس بر می دارد. جاوا در زمینه بهینه کردن استفاده از حافظه بسیار قویتراز اسلافش است، یکی از ویژگیهای جاوا پاکسازی خود کار حافظه از چیزهای بی مصرف است. ( این برنامه نام بامسمای آشغال جمع کن gc را دارد!) .
شیئ گرایی در جاوا به غایت خود رسیده است. جاوا در استفاده از اشیاء بسیار مفید و سخت گیر است و تخطی از اصول را نمی پذیرد. در C++ شما می توانید از اشیاء به موازات برنامه نویسی به سبک قدیم استفاده کنید و اکثراً در پایان کار چنان ملغمه ای بوجود می آید که مدیریت آن نه با روش های برنامه نویسی شیئ ء گرا امکان دارد نه با روش های قدیمی. جاوا دیگر به شما اجازه نمی دهد تا خود را در چنین مخمصه ای گرفتار کنید!
شروع برنامه نویسی با جاوا
اولین برنامه ای که می نویسم یک برنامه متکی به خود است بنامhello worldتفاوت یک برنامه متکی به خود و یک اپلت آن است که در برنامه متکی به خود ( که ازاین به بعد به آن فقط برنامه خواهیم گفت) از متدی بنام main() استفاده می شود در حالیکه اپلت چنین متدی ندارد.
برنامه helloworld بسیار ساده است و فقط جمله"Hello World!" را نمایش می دهد. با این حال، از آن می توان به عنوان سنگ بنای برنامه های پیشرفته تر استفاده کرد چون تمام برنامه های جاوا ساختار کلی مشابهی دارند .
class Helloworld{
public static void main(string args[]) {
system.out.println("hello world!");
}
}
این برنامه پنج خطی دارای تمام ویژگیهای یک برنامه کامل و مفصل شیئ گرا است .
نکته: برای نوشتن برنامه های جاوا از هر ادیتوری که خروجیASCII تولید کند می توانید استفاده کنید.
برنامه را با نام helloworld.java ذخیره کنید . نام برنامه باید همان نام کلاس برنامه باشد.
این برنامه دو قسمت مهم دارد:
-تمام برنامه در واقع یک تعریف کلاس است.
-کل برنامه در متد main() قرار دارد.
برای کامپایل کردن برنامه باید از کامپایلر جاوا Javac استفاده کرد . روش کار چنین است: javac helloworld.java نکته : در تمام این کتاب از کامپایلر سان، که با JDKمی آید، استفاده کرده ایم، اگر شما از کامپایلر دیگری استفاده می کنید به مستندات آن مراجعه کنید.

کامپایلر بعد از پایان کار یک فایل کلاس بنام helloworld.class تولید خواهید کرد. اصولاً کامپایلر برای هر کلاس برنامه یک فایل کلاس جداگانه تولید خواهد کرد. فایل تولید شده یک فایل اجرایی مستقل نیست. برای اجرای فایل باید از اینترپرتر جاوا استفاده کرد. اینتر پرتر جاوا ، java نام دارد. برای اجرای فایل کلاس تولید شده چنین کنید: Java heloworld اگر همه چیز درست پیش رفته باشد، جمله "hello world" را روی صفحه کامپیوتر خود مشاهده می کنید.
نکته: دقت کنید که کامپایلر جاواو ینتر پرتر جاوا دو چیز متفاوتند. کامپایلر از فایل متن برنامه یک فایل کلاس می سازد و اینتر پرتر فایل کلاس را اجرا می کند.
ایجاد یک اپلت جاوا
ایجاد اپلت با ایجادبرنامه فرق دارد و قواعد متفاوتی بر آن حکمفرماست، یک اپلت برای اجرا در صفحات وب نوشته می شود بنابراین کمی پیچیده تر از یک برنامه است. در واقع یک اپلت تا زمانی که در یک کاوشگر اجرا نشود خروجی خود را نمایش نخواهد داد .
نکته : سعی کنید برنامه ها، اپلت ها و صفحات وب را در دایر کتوریهای جدا گانه ذخیره کنید.
اپلتی که در این قسمت می نویسیم،HelloWorld Applet نام دارد.
Import java.awt.graphics;
Public class helloworldapplet extends java. applet.Applet{
Public void paint (graphics g) {
g.drawstring ("hello world!" , 5, 25);
}
}
اپلت را با نامHelloWordApplet.java ذخیره کنید. در موردیک اپلت باید به چند نکته توجه کنید:
– دستور import در خط 1 شبیه دستور#include در C است، با این دستور اپلت می تواند از کلاس های jdkبرای کارهای گرافیکی استفاده کند.
-متد paint() برای نمایش محتویات اپلت است. در این جا عبارتhello world! روی صفحه نمایش داده خواهد شد . اپلت ها متد main() ندارند و به جای آن از متدهای paint() یا start(), init() استفاده می کنند.
برای کامپایل کردن این اپلت چنین کنید:
درا ین حالت هم کامپایلر یک فایل کلاس به نام helloworld.class ایجاد خواهد کرد. اما برای اجرای یک اپلت یک قدم دیگر هم باید برداشت و آن ایجاد یک فایل html است که اپلت در ان اجرا خواهد شد .
<HTML>
<HEAD>
<TITLE>HELLO TO EVERYONE</TITEL>
</HEAD><BODY>
<P>MY JAVA APPLET SAYS:
<APPLETCODE="HELLOWORLDAPPLET.CLASS"WIDTH=150HEIGHT=25>
</APPLET>
</BODY>
</HTML>
تحلیل برنامه
برای اجرای یک اپلت در فایلHTML باید از بر چسب<APPLET> استفاده کرد به دو نکته ذیل دقت کنید:
-برای مشخص کردن نام کلاسی که اپلت در آن است از صفت CODE استفاده کنید.
-0برای مشخص کردن ابعاد پنجره ای که اپلت در آن اجرا خواهد شد از صفت های WIDTH و HEIGHT استفاده کنید. اعداد مشخص شده بر حسب پیکسل هستند.
این فایل را با نامHELLOWORLDAPPLE.HTML ذخیره کنید.حالا آماده اید تا اپلت را اجرا کنید. این کار به دو روش امکانپذیر است:
-استفاده از کاوشگرهای مجهز به جاوا مانند نت اسکیپ.
-استفاده از برنامه APPLETVIEWER که با JDK می آید. این برنامه کل صفحه وب را نمی تواند نمایش دهد و فقط اپلت را نمایش خواهد داد.
برای دیدن اپلت در یک کاوشگر، فایل HTML فوق را باز کنید، با این کار صفحه وب و اپلت درون آن به نمایش در خواهند امد. روش استفاده از APPLETVIEWER چنین است:
نکته: با اینکه می توان برنامه APPLETVIEWER را از محل فایل HTML اجرا کرد ولی در این حالت بدون بستن آن نمی توان اپلت را مجدداً بار کرد. در حالیکه اگر مشاهده گر اپلت از محل دیگری اجرا شود. ( مانند دستور فوق) می توان یک اپلت را تغییر داده، مجدداً کامپایل کرده و سپس دوباره در مشاهده گر بار کرد.
خلاصه
جاوا یک زبان برنامه نویسی است که با آن می توانید برنامه های متنوعی بنویسید. بیشترین کاربرد جاوا در ایجاد اپلت هایی است که در کاوشگرهای وب قابل مشاهده هستند. اپلت ها برنامه هایی هستند که جزیی از صفحات وب محسوب می شوند . تقریباً هر کاری با اپلت ها امکانپذیر است.
قدرت جاوا در سادگی و استقلال از آن از بستر سخت افزاری ( چه در مقابل منبع برنامه، و چه در کد باینری آن) است. باجاوا می توان برنامه هایی هم نوشت که بدون کاوشگرهای وب قابل اجرا باشند. امروز هم یک برنامه جاوا نوشتید و هم یک اپلت جاوا، و تفاوت آن دو را دیدید. اپلت های جاوا را فقط در فایل های HTML می توان مورد استفاده قرار داد.
برنامه نویسی شیئی گرا
یکی از بزرگترین ایده های برنامه نویسی در دو دهه اخیر است ، اما تسلط کامل بر این ایده به سالها زمان و ممارست نیاز دارد. برنامه نویسی شیئی گرا در واقع پیوند دنیای واقعی با برنامه نوسی کامپیوتر است. امروز با مفاهیم برنامه نویسی شیئی گرا در جاوا، و ارتباط این مفاهیم با ساختار برنامه ها آشنا می شوید:
-شیئی و کلاس چیست و رابطه آنها چگونه است.
-یک شییء یا کلاس دو جزءء مهم دارد: رفتار و حالت
-وراثت و نقش آن در طراحی برنامه ها
– بسته ها و واسط ها در جاوا
اگر از قبل با برنامه نویسی شی گرا آشنا هستید می توانید امروز را استراحت کنید و برای درس فردا آماده شوید.

مفاهیم برنامه نویسی شیئء گرا
برنامه نویسی شیئی گرا قصد دارد مدلی از دنیای واقعی را وارد برنامه نویسی کامپیوتر کند. دنیای اطراف ما از اشیاء Object ساخته شده است.
اشیاء Object و کلاس هاclasses
شیئء کلیدی ترین مفهوم برنامه نویسی شیی ء گرا است. هر شیئء یک حالت ( یا خاصیت) و رفتار دارد، و برنامه عبارت است بر هم کنش بین اشیاء حالت یک شیئ عبارت است از متغیرهای ( عناصر داده ای) شیئی و مقدار آنها رفتار یک شیئ را متدهای آن تعیینن می کنند ( نزدیکترین مفهوم به متد همان تابع است) . شیئ در واقع مقداری کد است که کار خاصی انجام می دهد.
هر شیئ کپسولی است از مقداری متغیر و کد، که کار نگهداری و به روز در آوردن آنها را ساده می کند. معمولاً درون یک شیئ ( مانند یک کپسول در بسته ) از دسترس دنیای خارج بدور است و برای کار با آن باید از ارسال پیام استفاده کرد. مزیت کپسول آن است که کاربر برای کار با آن هیچ نیازی به دانستن مکانیز م های درونی آن ندارد و فقط باید ساختار پیام ها را بداند. معمولاً ساختار پیام ها در اشیاء مختلف یکسان است. در دنیای واقعی هم وضع به همین منوال است، مثلاً برای استفاده از یک تلویزیون شما هیچ نیازی به آشنایی با پیچیدگیهای درون آن ندارید فقط کافیست بدانید که باید آن را به برق بزنید، آن را روشن کنید و یک کانال را انتخاب کنید.
کلاس در واقع الگویی است برای ایجاد شیئی در واسط برنامه نویسی جاوا java APIچندین کلاس مختلف وجود دارد که در جای خود به آنها خواهیم پرداخت.
نکته : اگر باC آشنا باشید، می توانید کلاس را چیزی مانند struct و typedef تصور کنید؛ اما یک کلاس بسیار پیچیده تر و کارآتر از struct است.
چند کلاس با هم یک کتابخانه کلاس class library می سازند. برنامه نویسی جاوا اصولاً چیزی نیست جز طراحی و پیاده سازی کلاس ها.
ایجاد یک کلاس
برای درک بهتر مفاهیمی که تعریف شدند در این قسمت یک مثال عملی خواهیم آورد. در این مثال یک موتور سیکلت را شبیه سازی می کنیم . یک موتور سیکلت واقعی دارای حالت و رفتاری خاص خود است. حالت موتور سیکلت در واقع همان خواص آن ( مانند رنگ، مدل، نوع و .. ) است . مجموع این خواص یک موتور سیکلت خاص را مشخص خواهند کرد که از موتور سیکلت هاای دیگر قابل تمیز است. هر شئی وهله ایست از یک کلاس ، کلاس موجودی قابل لمس نیست، در حالیکه شئی موجودی است قابل لمس که به کلاس خود موجودیت داده است. مثلاً ، انسان یک کلاس است در حالیکه شما نمونه ای هستید از کلاس انسان؛ شما موجودیت دارد در حا لیکه چیزی به نام انسان وجود خارجی ندارد ، بلکه در اشیاء خاص ( من ، شما، دیگران) موجودیت می یابد.
موتور سیکلت ما دارای رفتارهایی هم هست، رفتارهایی مانند روشن شدن ، خاموش کردن، تعویض دنده،سرعت گرفتن، ترمز کردن و غیره.
وراثت، واسط ها و بسته ها
وراثت ( InheritanCe)
وراثت یکی از کلیدی ترین مفاهیم برنامه نویسی شیئی گراست و تایثر مستقیمی روی نحوه طراحی و نوشتن کلاس ها جاوا دارد. وراثت مکانیزمی است برای تغییر شکل دادن به کلاس ها و استفاده مجدد از آنها: با مکانیزم وراثت می توان به طور خودکار از اطلاعات کلاس های دیگر استفاده کرد.
هر کلاس یک فوق کلاس superclass و یک یا چند زیر کلاس subclass دارد. هر کلاس از کلاس های بالاتر خود در این سلسله مراتب ارث می برد و به کلاس پایین تر از خود ارث می دهد. هر زیر کلاس تمام متدها و متیرهای فوق کلاس خود را به ارث می برد و دیگر نیازی به تعریف مجدد آنها وجود ندارد.
بالاترین کلاس در سلسله مراتب کلاس های جاوا کلاسobject است و تمام کلاس های دیگر از این کلاس مشتق می شوند. این کلاس تعیین کننده کلیترین متدها و خواص تمام کلاس های ذیل خود است. معمولاً کلاس ها ضمن ارث بردن از کلاس های بالاتر از خود چیزهایی رابه آن اضافه و پیاده سازی می کنند.
ایجاد سسلسله مراتب کلاس
وقتی تعداد کلاس ها زیاد شود ، منطقی است که آنها را در یک سلسله مراتب گرد آوریم تا بتوانیم نحوه به ارث رسیدن متدها و خواص را بهتر کنترل کنیم بدین ترتیب نیاز به دوباره نویسی کدها به حداقل رسیده و هنگام نیاز به تغیر کدها نیز این اصلاحات فقط در یک نقطه انجام خواهند شد و از آنجا به تمام نقاط دیگر تسری خواهند یافت.
وراثت چگونه عمل می کند؟
وراثت چگونه عمل می کند؟ چگونه یک شیئ متغیرها و متدهای کلاس بالاتر را به طور خودکار بدست می آورد؟ در مورد متغیرها، وقتی شیئی بوجود می آید یک مسیر دسترسی به تمام متغیرهای کلاس مربوطه را بدست می آورد. در مورد متدها هم وضع به همین منوا ل است و تعریف یک متد در اختیار تمام زیر کلاس ها قرار خواهد گرفت. وقتی در یک شیئی متدی فراخوانی می شود، جاوا ابتدا در همان کلاسی که متد تعریف شده به دنبال کد آن می گردد اگر کد آن را نیافت. در سلسله مراتب یک پله بالاتر رفته و در فوق کلاس بدنبال آن خواهد گشت تا زمانیکه کد متد را بیابید.
وقتی در یک زیر کلاس متدی با نام مشابه متدی در یک کلاس بالاتر تعریف شود، کارها کمی پیچیده خواهد شد. در این حالت متدی که زودتر ( در حرکت از پایین) یافت شود اجرا خواهد شد. بدین ترتیب متد تعریف شده در زیر کلاس متد فوق کلاس را مخفی می کند. به این وضعیت تحریف overrideمتد گفته می شود.
وراثت منفرد و چند گانه
جاوا به گونه ای که دیدید از وراثت منفرد single استفاده می کند. وراثت منفرد یعنی هر کلاس جاوا می تواند فقط یک فوق کلاس داشته باشد. اما عکس آن درست نیست، یعنی یک کلاس می تواند چندین زیر کلاس داشته باشد.
در زبانهای شیئی گرای دیگر، مانندC++یک کلاس می تواند از چند فوق کلاس به ارث ببرد. به این وضعیت وراثت چندگانهmultipleگفته می شود . با وراثت چند گانه می توان کلاس های فوق العاده جالبی بوجود آورد. ولی کد نویسی آنها بسیار دشوارتر است.
واسط ها (InterfaCes) و بسته ها (PaCkages)
دیدیدکه در جاوا هر کلاس فقط از یک فوق کلاس ارث می برد. با اینکه وراثت منفرد برنامه نویسی را ساده تر می کند ولی کمی محدود کننده هم هست. مثلا اگر در شاخه های مختلف یک سلسله مراتب متدهای مشابهی داشته باشید، باید تمام آنها را جداگانه پیاده سازی کنید. جاوا با استفاده از مفهومی بنام واسط مشکل به اشتراک گذاشتن متدها را حل کرده است.
اصطلاح جدید
واسط عبارت است مجموعه نام چند متد، بدون تعریف آنها، که واسط آنها را در اختیار کلاس استفاده کننده می گذارد.
یک کلاس جاوا می تواند در آن واحد از چندین واسط استفاده کند، وبا این کار کلاس های بسیار متفاوت می توانند رفتارهای مشابهی داشته باشند.
در جاوا کلاس و واسط های مرتبط با هم در یک بسته گرد آورده می شوند. کلاس های اصلی جاوا در بسته ای بنام javaگرد آورده شده اند و فقط محتویات این بسته است که در تمام نسخه های جاوا ثابت می ماند. البته در بسته java بسته های دیگری وجود دارند ولی بستهjava.longبه طور پیش فرض در اختیار تمام برنامه هاست . برای استفاده از بسته های دیگر باید آنها را به طور صریح تعریف کرد. نام بسته ها و کلاس ها در هنگام تعریف با نقطه (. ) از هم جدا می شوند. مثلاً برای استفاده از کلاس color که در بسته awt( که خود در داخل بسته javaمی باشد) قرار دارد، باید چنین نوشت : .java.awt.color
ایجاد یک زیر کلاس
می خواهید یک اپلت بوجود آورید. تمام اپلت ها در جاوا زیر کلاس کلاسی بنام Applet هستند ( که در بسته java.applet قرار دارد). با ایجاد یک زیر کلاس از کلاسApplet می توانیم تمام رفتارهای آن ( از قبیل کار با پنجره ها، ارتباط با سیستم و پاسخ به رویدادهای کی بورد و ماوس ) را به ارث ببریم. در این مثال یک اپلت شبیه اپلت Hello world خواهیم ساخت که این عبارت را با رنگ و اندازه دیگری نمایش خواهد داد. ابتدا یک کلاس تعریف می کنیم:
Public class HelloAgainApplet extends java.applet.applet{
}
در اینجاکلاسی بنام HelloAgainApplet تعریف شده است ؛ به قسمت extends دقت کنید. در حقیقت این عبارت است که می گوید اپلت شما یک زیر کلاس از کلاسAppletخواهد بود. به مسیر کامل کلاس Appletدقت کنید، چون این بسته به طور پیش فرض برای جاوا تعریف نشده باید مسیر کامل آن ذکر شود:
کلمه public می گوید که این کلاس در اختیار تمام سیستم قرار خواهد داشت. تا اینجا کلاس ما تمام متغیرها و متدهایش را از کلاس بالاترAppletبه ارث برده و کاملا شبیه آن است اجازه دهید فونت آن را عوض کنیم:
Font f= new font ("TimesRoman" , font , bold, 36);
در اینجا f متغیری است که از کلاس font که جز بسته java.awt است. با تعریف فوق فونت سیستم از نوع TimesRoman ضخیم و با اندازه 36 خواهد شد. ( در مثال روز قبل فونت اپلت همان فونت پیش فرض سیستم بود). با استفاده از شئی فونت می توان فونت اپلت را تغییرداد.
حال باید متدی تعریف کرد تا از این فونت استفاده کند. متدی که عبارات را روی صفحه نمایش می دهد متدpaint()است که در اینجا آن را تحریف خواهیم کرد تا عبارت Hello world با فونت جدید رسم شود. تعریف جدید متد مزبور چنین است:
در اینجا به دو نکته باید توجه کنید. اول اینکه این متد public است چون متدی که همنام آن است خود public است. وقتی می خواهید متدی را تحریف کنید باید میدان دید scope آن مانند متد فوق کلاس متناظرش باشد دوم اینکه، متد paint() یک از آرگومان ورودی، که یک شئی از کلاسGraphics است، دارد . این کلاس یک روش مستقل از سخت افزار برای عملیات گرافیکی است .
در متد paint() سه کار انجام داده ایم:
-گفته شده که شیئی گرافیکی از فونت fاستفاده کند.
– گفته شده که رنگ رسم عبارت رنگ قرمز color.red است.
– در پایان هم عبارت "Hello Again" در نقطه (5,25) رسم می شود.
کلاس جدید به همین راحتی تعریف شد! اپلت ما تا این جا باید مانند ذیل باشد:
Public class HelloAgainApplet extends java. Applet.Applet{
Font f= new font("TimeRoman", font.bold, 36);
Public void paint (graphics g) {
g.setfont(f);
g.setcolor(color.red);
g.drawstring("Hello again!",5,40);
}
}
مثال ما یک اشتباه دارد . اپلت را کامپایل کنید. کامپایلر با پیغام ذی کاوش را متوقف خواهد کرد:
HelloAgainApplet.java:7:class Graphics not found in type declaration.
این پیغام خطا برای چیست؟ به یاد دارید که بسته پیش فرضjava بستهjava.longاست ولی شما در خط اول تعریف کلاس از بسته java.Appletاستفاده کرده اید. اما می بینید که کامپایلر از این خط خطا نگرفته است. چون مسیر کامل بسته را قید کرده ایم. یک راه حل برای رهایی از این قبیل مشکلات آن است که مسیر کامل تمام کلاس ها را قید کنیم. اما اگر در یک اپلت بدفعات از یک یا چند کلاس استفاده کنیم، هربار نوشتن نام کامل مسیر کلاس ها بسیار خسته کننده و وقت گیر خواهد بود. درا ین موارد بهتر است از دستور import استفاده کنیم. در اپلت فوق از سه کلاس (color,font,graphics) استفاده کرده ایم که همگی در بسته java.awt قرار دارند. بنابراین، دستورات ذیل را به اول برنامه،قبل از تعریف کلاس، اضافه کنید.
Import java.awt.graphics;
Import java.awt.font;
Import java.awt.color;
نکته : با استفاده از یک ستاره (*) می توان تمام کلاس هایpublic یک بسته را مورد استفاده قرار داد مانند ذیل:
Import java.awt.*;
حال که کلاس را تصحیح کرده ایم، می توانیم اپلت HelloAgainApplet را کامپایل کنیم.
خلاصه
یکی از سخت ترین جنبه های تسلط بر برنامه نویسی شیئی گرا درک همین مفاهیم ( عجیب و غریب) آن است. در اینجا مرور مجددی بر این مفاهیم خواهیم داشت.
کلاس : الگویی برای اشیاء که در آن رفتار و خواص شیئ، تعریف شده اند.
شئی: یک نمونه قابل لمس از یک کلاس، از یک روی کلاس می توان چند شیئ بوجود آورد که هر کدام رفتار و خواص خود را دارند.
وهله: هر شیئی یک وهله است از یک کلاس.
فوق کلاس: کلاسی که زیر والدینش ارث می برد.
متد کلاس: متدی که در یک کلاس تعریف می شود.

ایجاد اشیاء جدید
هر برنامه جاوا مجموعه ای از یک یا چند کلاس است . یک کلاس الگوی بوجود آوردن شیئی است،شئی وهله ایست از یک کلاس که کار واقعی روی آن انجام می شود بنابراین ،
یک واژه رشته ای ( که مجموعه ایست از چند کاراکتر) وهله ایست از کلاس .string کلاسstring از این نظر یکی از کلاس های غیر عادی جاواست چون ایجاد وهله های آن بسیار ساده است . اما کلاس های دیگر به این سادگی نیستند و برای ایجاد وهله هایی از آنها باید از عملکردnewاستفاده کرد.
نکته : دیگر واژه های جاوا و انواع داده اولیه آن شیئی واقعی نیستند.
استفاده از new
برای ایجاد یک شئی جدید ، از یک کلاس ، باید از عملگر new استفاده کرد.
پرانتزهای بعد از نام کلاس بسیار مهم هستند. این پرانتزها می توانندخالی باشند ، که در این صورت یکی شیئی ساده از آن کلاس بوجود می آید. درون این پرانتزها می توان آرگومانهایی قرار داد که متدی بنام سازنده کلاسclass constructor مورد استفاده قرار خواهند گرفت.
تذکر : بعضی از کلاس ها اجازه نمی دهند بدون آرگومان یک وهله جدید از آنها درست کنید. در این موارد به مستندات کلاس مراجعه کنید.
New چه کاری انجام می دهد
وقتی از عملگرnew استفاده می کنید، اتفاقات مختلفی روی می دهد : ابتدا یک وهله جدید از کلاس مشخص شده ایجاد، و سپس حافظه به آن تخصیص داده می شود. علاوه بر این ( و مهمتر از همه) وقتی شیئ جدید ایجاد شد ، یک متد خاص در آن کلاس فراخوانی می شود. این متد خاص متد سازنده نام دارد.
اصلاح جدید
متد سازنده برای آماده سازی شیئی ایجاد شده مورد استفاده قرار می گیرد. متد سازنده تمام اعمالی را که یک شئی برای عملکرد صحیح نیاز دارد .انجام می دهد.
یک کلاس می تواند چند نوع متد سازنده با آرگومانهای مختلف داشته باشد. کلاسهایی که می توانند به چندین روش مختلف آرگومان بگیرید ( مانند کلاس Data) دارای چند متد سازنده هستند.
نکته ای درباره مدیریت حافظه
مدیریت حافظه در جاوا خودکار و دینامیک است . وقتی شما یک شیئ جدید بوجود می آورید. جاوا به طور خودکار مقدار حافظه لازم را به آن اختصاص می دهد و نیازی به دخالت مستقیم شما نیست.
اما وقتی کارتان با یک شئی به پایان رسید، چه خواهد شد؟ چگونه حافظه اشغال شده توسط آن شیئ را آزاد می کنید؟ باز هم جواب در مدیریت خودکار حافظه است. وقتی کارتان با یک شیئ به پایان رسید تمام ارجاعات به آن شیئ در برنامه از بین خواهد رفت و جاوا به طور خودکار تمام اشیاء بی مصرف را از حافظه پاک خواهد کرد، فقط کافیست که شما تمام ارجاعات به آن شیئی را قطع کنید. و بقیه کارها را به عهده جاوا بگذارید.
دسترسی به عمل کلاس ها و متغیرهای وهله و ست کردن آنها
حال که دیگر خودتان می توانید از روی کلاس ها شئی بسازید ( و اشیاء هم دارای متغیرهایی هستند) شاید از خود بپرسید که چگونه باید با این متغیرها کار کرد؟ ساده است! نحوه رفتار متغیرهای وهله و کلاس دقیقاً مانند متغیرهای محلی، که دیروز با آنها آشنا شدید است ؛ فقط نحوه دسترسی به آنها کمی متفاوت است .
گرفتن مقدار متغیرها
برای خواندن مقدار متغیرهای وهله باید از نامگذاری با نقطه dot notation استفاده کنید.
اصطلاح جدید
در نامگذاری با نقطه، نام هر متغیر دو قسمت دارد: نام شیئ در سمت چپ نقطه ، و نام متغیر در سمت راست نقطه.
مثلاً ، اگر یک شیئ بنام myobjectدارای متغیری بنام varباشد، برای ارجاع به مقدار این متغیر باید چننن نوشت:
Myobject.var
این نوع نامگذاری در وقع یک نوع عبارت است ( چون مقدار برگشتی دارد) و هر دو سمت نقطه هم عبارت هستند. این بدان معناست که دسترسی چند مرحله ای هم امکانپذیر است. اگر متغیر var خود یک شیئ باشد که دارای متغیری به نام state است. برای دسترسی به این متغیر می توان چنین نوشت:
Myobject.var.state;
ارزیابی عبارتهای نقطه ای از چپ براست صورت می گیرد .
تغییر دادن مقدار متغیرها
تغییر دادن مقدار متغییرها هم بسیار ساده است. کافیست از یک عملکرد انتساب در سمت راست عبارت استفاده کنید:
Myobject.var.state=true
متغیرهای کلاس
متغیرهای کلاس متغیرهایی هستند که در خود کلاس تعریف می شوند. به همین دلیل، مقدار آنها به کلاس و تمام وهله های آن می رسد. در مورد متغیرهای وهله چنین نیست چون در هر وهله از کلاس یک کپی جدید از آنها ایجاد می شود. متغیر کلاس در میان تمام وهله های کلاس مشترک است و فقط یک کپی از آن وجود دارد.
برای تعریف یک متغیر کلاس باید از کلمه کلیدی static استفاده کرد.
Class familymember{
Static string sumame= "johnson";
String name;
Int age;

}
هر وهله از کلاس familymember دارای متغیرهای name, age خاص خود است ولی در میان تمام این وهله ها متغیرsurnameمشترک است.
برای خواندن متغیرهای کلاس از همان روش نامگذاری نقطه ای استفاده می شود، ولی در این مورد می توان از نام کلاس هم استفاده کرد.
چون هر تغییری که یکی از وهله ها روی متغیرهای کلاس اعمال کند به سایر وهله ها هم سرایت می کند. امکان اشتباه در این موارد زیاد است. در این موارد بهتر است از نام کلاس برای نامگذاری متغیرهای کلاس استفاده کنید.
فراخوانی متدها
برای فراخوانی متدهای یک شیئ هم باید از نامگذاری نقطه ای استفاده کرد:
Myobject.methodone(arg1,arg2,arg3);
متدها حتماً باید()راداشته باشند، حتی گر هیچ آرگومانی نداشته باشند:
Myobject.methodNoArgs();

فراخوانی متدها هم می تواند چند مرحله ای باشد:
Myobject.var.methodTwo(arg1,arg2);
بهترین نمونه فراخوانی چند مرحله ای یک متد، دستور system.out.printin()است.
متدهای کلاس
یک کلاس علاوه بر متغیرهای کلاس می تواند دارای متدهای خاص خود هم باشد متدهای کلاس به وهله خاصی مربوط نیستند و مستقیماً به خود کلاس وابسته اند. مثلا کلاس string متدی دارد بنام valueOf() که یک آرگومان ( عدد صحیح، متغیر منطقی و از این قبیل) را گرفته و مقدار آن را بر می گرداند. این متد روی شیئی خاصی عمل نمی کند اما چون کاری که می کند به رشته ها مربوط است، در کلاس string تعریف شده است.
متدهای کلاس برای گرد آوردن متدهای کلی هم مناسب هستند، مانند کلاس math که دارای مجموعه برگی از اعمال ریاضی است. ولی برای استفاده از این اعمال هیچ نیازی به ایجاد وهله های کلاس math نداریم.
روش فراخوانی متدهای کلاس هم مانند متغیرهای کلاس است و به همان دلیلی که قبلا گفتیم بهتر از نام کلاس به جای نام شیئ استفاده شود.
ارجاع به اشیاء
هنگام کار با اشیاء بدفعات لازم می شود که ارجاعاتی به آنها داشته باشیم .وقتی یک شیئ را به متغیری نسبت می دهید، یایک شیئی را به عنوان آرگومان به متدی می فرستید در واقع دارید از ارجاع به آن اشیاء استفاده می کنید نه از خود آنها .
تغییر نوع اشیاء و انواع اولیه
گاهی در یک برنامه پیش می آید که نوع یک متغییر بدلایلی اشتباه است؛ ممکنست آن یک عدد صحیح باشد که میل دارید اعشاری باشد. برای تغییر نوع داده ها در جاوا روش هایی وجود دارد.
اصلاح جدید
تغییر نوع casting داده برای تبدیل مقدار یک شیئ از نوعی به نوع دیگر است تغییر نوع باعث ایجاد یک ارجاع جدید می شود و شیئی اصلی را تغییر نمی دهد.
مفهوم تغییرنوع ساده است و لی چون در جاوا انواع داده مختلفی وجود دارد، کار می تواند کمی پیچیده شود
تغییر انواع اولیه
با این نوع تغییر می توانید یک متغیر از انواع اولیه ( صحیح ، اعشاری ، …) را به نوع دیگری تبدیل کنید. البته فقط انواع عددی رامی توان به یکدیگر تبدیل کرد و نوع boolean قابل تبدیل به انواع دیگر نیست.
اگر متغیرهایی که تبدیل می کنید به انواع بزرگتر مثلاً intبهlong ویا intبه flotتبدیل شوند. معمولا هیچ مشکلی پیش نخواهد آمد. ولی هنگام تبدیل یک نوع به نوع کوچکتر مشکلاتی بروز خواهد کرد که برای جلوگیری از آنها باید از تغییر نوع صریح استفاده کنید . برای تغییر نوع صریح یک مقدار باید چنین کنید.
(typename)value
مثال ذیل مقدار حاصل از عبارت y/x را به نوع int تبدیل می کند:
(int)(x /y);
چون تقدم تغییر نوع بیشتراز اعمال ریاضی است باید از پرانتز استفاده کنید.
تغییر نوع اشیاء
می توان نوع اشیاء را هم به یکدیگر تبدیل کرد، اما در این میان یک محدودیت وجود دارد. کلاس هایی که به هم تبدیل می شوند باید بوسیله وراثت به هم مربوط باشند و نمی توان هر کلاسی را به کلاس دیگر تبدیل کرد.
هنگام تبدیل یک زیر کلاس به یک فوق کلاس نیاز به هیچ اقدام خاصی نیست و اغلب می توان یک زیر کلاس را به جای یک فوق کلاس به کار برد. مثلاً فرض کنید متدی دارید که دو آرگومان می گیرد: یکی از نوع Object و دیگری از نوعNumberدر اینجا شما می توانید به جای Object هر شیئ دیگری را بفرستید چون تمام اشیاء زیر کلاس Object هستند، و به جای Number هم می توانید هر نوع عددی بفرستید چون تمام انواع داده جاوا (int,float و …) زیر کلاس Number هستند.
هنگام تبدیل یک زیر کلاس به فوق کلاس باید از تغییر نوع صریح استفاده کنید:
(classname)object
به مثال ذیل توجه کنید، در این مثال یک وهله از کلاس GreenApple به یک وهله از کلاس Apple ( که فوق کلاس GreenApple است) تبدیل می شود:
GreenApple a;
Apple a2;
a=new GreenApple();
a2(apple) a;
علاوه بر تغییر نوع کلاس ها ، می توان یک شیئی را به یک واسط هم تبدیل کرد . البته مشروط به این که آن شیئ (با یکی از فوق کلاس های آن) واسط مورد نظر را پیاده سازی کرده باشند. با این کار یک شیئ می تواند بدون ساده سازی یک متد از متدهای آن واسط استفاده کند. درباره واسط ها در هفته سوم بیشتر صحبت خواهیم کرد.

تغییر نوع انواع اولیه به اشیاء و بالعکس
با تغییر نوع انواع اولیه و اشیا ء آشنا شدید. ولی آیا می توان این دو را به هم تبدیل کرد؟ پاسخ منفی است . انواع اولیه و اشیاء با هم بسیار فرق دارند و نمی توانید آنها را به طور خودکار به هم تبدیل کنید. با این حال، جاوا برای هر نوع اولیه یک کلاس ویژه دارد: integer برای float,int برای boolean و الی آخر . با استفاده از متدهای این کلاس ها می توانید برای تمام انواع اولیه شبه اشیایی تولید کنید. در مثال ذیل یک وهله از کلاس integer با مقدار 35 ایجاد شده است:
Integer intObject = new Integer(35);
برای خواندن مقدار این شیی می توانید از متد intValue() استفاده کنید:
Int thelnt = intObject.intValue(); // returns 35
برای آشنایی با متدهای تغییر نوع در این کلاس ها می توانید به مستندات API جاوا مراجعه کنید.
چند نکته دیگر
در این قسمت با چند نکته دیگر درباره کار با اشیاء آشنا خواهید شد:
-مقایسه اشیاء
– کپی کردن اشیاء
– پیدا کردن کلاس یک شیئ خاص
– تست اینکه آیایک شیئ و هله ای از یک کلاس خاص است یا خیر
مقایسه اشیاء
عملگرهای مقایسه مقادیر: تساوی ، عدم تساوی، بزرگتر، کوچکترو غیره. اکثر این عملگرها فقط روی انواع اولیه کار می کنند، نه روی اشیاء تنها استثناء در این مورد عملگرهای تساوی = = و نامساوی!= هستند. این عملگرها روی اشیاء هم عمل می کنند، اما فقط می گویند که دو عملوند یک شیئ هستند یا خیر. مثلاً اگر دو شیئ ازکلاس string داشته باشید که حرف به حرف مانند هم باشند، مقایسه آنها با عملگر= =منجر به درستی true نخواهد شد چون آن دو در واقع یک شیئ نیستند. این مقایسه برابری دو شیئ باید از متدهای ویژه در آن کلاس ها استفاده کرد.
نکته جاوا ( بر خلافC++) دارای مفهوم تحریف عملگر نیست ، عملگرهای جاوا فقط در مورد اعداد قابل استفاده اند.
تعیین کلاس یک شیی
آیا می خواهید بدانید یک شیئ از چه کلاسی است؟ روش کار چنین است:
String name = obj.getclass().getname();
در این مثال نام کلاس شیی رشته ایobj بر گشت داده خواهد شد . متد getclass()از متدهای کلاس object است؛ مقدار برگشتی این متد یک شیئ class است که دارای متدیست نام getname() .متد getname() نام آن کلاس را بر می گرداند.
برای تست اینکه آیا یک شیئ و هله ای از یک کلاس خاص است یا نه، می توانید از عملگر instanceof استفاده کنید:
"foo" instanceof string // true
Point pt = new point(10,10);
Pt instanceof string // false
عملگر instanceof دو عملوند دارد: یک شیئ در سمت چپ و نام یک کلاس در سمت راست، مقدار برگشتی عبارت شامل instanceof می تواند true یا falseباشد. از عملگر instanceof برای واسط ها هم می توان استفاده کرد.
کتابخانه کلاس جاوا
برای پایان دادن به درس امروز، اجازه دهید نگاهی به کتابخانه کلاس جاوا بیندازیم. این قسمت نباید زیاد برایتان نا آشنا بشد چون قبلاً هم با آنها کار کرده اید.
هر کتابخانه جاوا مجموعه ایست از چند کلاس، این کلاس ها دربسته javaقرار دارند. مستندات این کتابخانه ها همراه JDKمی آید؛ آشنایی با کتابخانه های جاوا شما را با قوتها و ضعفهای آن آشنا می کند. در ذیل چند بسته را که جزیی از کتابخانه کلاس جاوا هستند، مختصراً توضیح داده ایم:
-java.lang کلاس های زبان جاوا از جمله کلاس object، کلاس string و کلاس system کلاس های خاص انواع اولیه هم در همین بسته قرار دارند.
-java.util کلاس های کمکی جاوا مانند vector,date و hashtable
– java.io کلاس های ورودی و خروجی برای کار با استریم ها و فایل ها.
– java.net کلاس های پشتیبانی از شبکه، از جملهsocket وURL ( کلاسی برای ارجاع به سندهای WWW).
-java.awt ( جعبه ابزار پنجره سازی) کلاسهایی برای پیاده سازی واسط کاربر گرافیکی، از جمله window,menu,button,font,checkbox و غیره. کلاس های پردازش تصاویر هم در همنین بسته قرار دارند. Java.Image
-java.appletکلاس های پیاده سازی اپلت های جاوا، از جمله کلاسApplet و واسط AudioClip
هر کیت نرم افزاری جاوا می تواند علاوه بر کلاس های استاندارد فوق دارای کلاسهایی خاص خو د باشد. با اینکه نمی توان مفید بودن این قبیل کلاس ها را انکار کرد ولی استفاده از آنها یک خطر دارد، ممکنست سیستمی که برنامه های شما باید روی آن اجرا شوند دارای این کلاس های خاص ( وغیراستاندارد) نباشد و برنامه شمانتواند اجرا شود. بنابر این سعی کنید حتی الامکان از آنها استفاده نکنید.
خلاصه
مهمترین قسمت هر زبانی همانا متدهای آن است. با آن که کلاس ها و اشیاء چارچوب یک برنامه را می سازند اما رفتار یک برنامه را متدهای آن تعیین می کنند.
ایجاد متدهایی با نام مشابه و آرگومانهای متفاوت
در جاوا متدها می توانند یکدیگر را تحریف overloud کنند – یعنی چند متد با نام مشابه و امضاهای متفاوت مجاز است . با این ویژگی دیگر نیازی نیست برای کارهای بسیار شبیه هم متدهای مختلف بنویسید و کار کاربران برنامه هم ساده تر خواهد شد. وقتی در یک برنامه متدی فراخوانی می شود، جاوا نه تنها نام بلکه تعداد و نوع آرگومانهای آن را هم بررسی می کند.
برای تحریف متدها کافیست در یک کلاس چند متد با نام مشابه و فهرست ارگومانهای متفاوت تعریف کنید ( فقط بیاد داشته باشید که دو متد با امضای مشابه در جاوا مجاز نیست ) . در جاوا تفاوت متدها نه از مقدار برگشتی آنها بلکه از تعداد و نوع پارامترهای آنها استنباط می شود.یعنی اگر دو متد نام و پارامترهای یکسان داشته باشند ولی مقدار برگشتی آنها متفاوت باشد، خطای کامپایلر بروز خواهد کرد. در ضمن نام پارارمترها هم اهمیتی ندارد فقط تعداد و نوع آنها مهم است.
Class myrect{
Int x1 = 0;
Int y1 = 0;
Int x2 = 0;
Int y2 = 0;
}
وقتی وهله جدیدی از کلاسmyrectایجاد می شود تمام متغیرها مقدار 0می گیرند. برای آن که این یک مستطیل واقعی باشد . متدی بنام buildrect() تعریف می کنیم و در آن مقدار نقاط راست خواهیم کرد ( دقت کنید که چون نام پارامترهای این متد با متغیرهای وهله مشابه است، برای دسترسی به متغیرهای وهله از this استفاده کرده ایم).
Myrect buildrect(int x1,int y1,int x2,int y2){
this. x1 = x1;
this .y1 = y1;
this .x2 = x2;
this .y2 = y2;
return this;
}
حال اگر بخواهیم مستطیل را به روش دیگرآماده سازی کنیم ، چه باید بکنیم؟ آیا باید متد دیگری تعریف کنیم؟ خیر ، می توان از همان متد buildrect()برای این کار استفاد کرد. در ذیل از همان متدبا دو آرگومان استفاده کرده ایم:
Myrect buildrect(point topleft, point bottomright){
X1=topleft.x;
Y1=topleft.y;
X2=bottomright.x;
Y2=bottomright.y;
Return this;
}
( چونpointیکی از کلاس های جاوا است باید با دستور import قبل از تعریف کلاس ، آن را برای برنامه تعریف کنیم تا جاوا بتواندآن را پیدا کند).
برای پیچیده تر کردن اوضاع، متد buildrect() را به گونه ای دیگر هم تعریف می کنیم، یک راس، طول و عرض:
Myrect buildrect(point topleft, int w, int h){
X1=topleft.x;
Y1=topleft.y;
X2=(x1+w);
Y2=(y1+h);
Return this;
}
برای آنکه بتوانیم برنامه را تست کنیم یک متد main() به آن اضافه کرده ایم و از متد دیگری هم برای چاپ مختصات مستطیل استفاده شده است.
متدهای سازنده
علاوه بر متدهای معمولی ، هر کلاس می تواند یک متد سازنده constructor method هم داشته باشد.
اصطلاح جدید متد سازنده متد خاصی است که شیی ایجاد شده را آماده سازی می کند.
بر خلاف متدهای دیگر، متد سازنده را خود شما نمی توانید فراخوانی کنید، این متد را جاوا به طور خودکار هنگام ایجاد وهله جدیدی از یک کلاس فراخوانی می کند. وقتی جاوا ( با عملگر new) شییء جدیدی می سازد، سه اتفاق می افتد:
– به شییء جدید حافظه اختصاص می دهد
– – به متغیرهای وهله در آن شییء مقادیر پیش فرض می دهد (0 برای اعداد، null برای اشیاء false برای متغیرهای منطقی ، "" برای کارکاراکترها)
– متدی سازنده کلاس را فرا خوانی می کند.
– یک کلاس می تواند متد سازنده نداشته باشد، در این صورت آماده سازی شیء را باید در متدهای دیگر انجام دهید. متد سازنده را هم مانند متدهای دیگر می توان تحریف کرد؛ بدین ترتیب می توان یک شییء را به اشکال مختلف آماده سازی کرد.
سازنده های اصلی
سازنده های دو تفاوت با متدهای دیگر دارند:
-نام آنها همیشه مشابه نام کلاس است.
-مقدار برگشتی ندارند.
فراخوانی یک سازنده دیگر
گاهی یک سازده می تواند زیر مجموعه یک سازنده دیگر باشد؛ یعنی همان رفتار کلی با کمی تفاوت به جای آن که در اینگونه موارد چند سازنده بنویسیم، می توانیم در یک سازنده سازنده دیگر را فراخوانی کنیم.
جاوا برای این کار ( فراخوانی یک سازنده در سازنده دیگر) روش خاصی دارد:
This (arg1, arg2,arg3,…)
در اینجا آرگومانهای thisهمان آرگومانهای سازنده هستند.
تحریف سازنده ها
سازنده ها را مانند متدهای دیگر ( و با همان منظور ؛ عکس العمل نسبت به آرگومانهای متفاوت) می توان تعریف کرد. مثال کلاس myrectرا در نظر بگیرید، این کلاس به جای چند متد buildrect() می تواند چند متد سازنده داشته باشد.
پنهان کردن متدها
وقتی متدی در یک کلاس فراخوانی می شود جاوا ابتدا در همان کلاس به دنبال تعریف آن متد می گردد و اگر آنرا نیافت در سلسله مراتب کلاسها رو به بالا حرکت می کند تا تعریف متد را بیابد. این همان وراثت است یعنی یک کلاس متدهای کلاس های بالاتری از خود را هم درا ختیار دارد . اما گاهی دریک کلاس لازم است که تعریف یک متد موجود تغییر داده شود . به این ویژگی پنهان کردن متد method overriding گفته می شود . در اینجا متد تعریف شده امضای مشابهی با متد کلاس بالاتر دارد ولی رفتار آن متفاوت است.
ایجاد متدهایی که متدهای موجود را پنهان می کنند
برای پنهان کردن یک متد در کلاس های بالاتر کافیست متدی با همان امضا ( نام ، نوع برگشتی ، فهرست پارامترها) در کلاس خود تعریف کنیم.
فراخوانی متد اولیه
برای پنهان کاری یک متد موجود در فوق کلاس دو دلیل وجود دارد:
-جایگزین کردن کامل یک متد موجود توسط متدی جدید
-تقویت یک متد با رفتارهای جدید
متدی با امضای مشابه متدهای موجود در کلاس های بالاتر آن متدها را از دید برنامه پنهان می کند. ولی گاهی چیزی که لازم داریم اضافه کردن یک ویژگی یا رفتار جدید به یک متد موجود است نه از بین بردن کامل آن ، با این کار قادر خواهیم بود تا ضمن استفاده از قابلیت های متدهای دیگر ، چیزهایی به آنها اضافه کنیم.
پنهان کردن سازنده ها
سازنده ها را نمی توان پنهان کرد چون آنها همنام با کلاس خود هستند . اما گاهی لازم است که در یک سازنده، متد سازنده کلاس بالاتر هم فراخوانی شود. در اینجا هم باید از کلمه super استفاده کنیم، ولی چگونه؟ چون نام متد سازنده همان نام کلاس است ، باید چنین بنویسیم:
Super(arg1,arg2,…);
می بینید که شبیه اجرای یک متد سازنده در همان سازنده است . (this(…))
متدهای پایان دهنده
متدهای پایان دهنده finalizer نقطه مقابل متدهای سازنده هستنددرC++ به آنها متدهای مخرب گفته می شود) . این متدها آخرین رد پاهای شییء را از حافظه پاک می کنند. متد پایان دهنده عبارت است از finalize() متد پایان دهنده پیش فرض در کلاس Object هیچ کاری انجام نمی دهد. امضای متد پایان دهنده چنین است:
Protected void finalize(){

}
اگر فکر می کنید باید چیزی را از بین ببرید جای آن همین جاست . برای استفاده از پایان دهنده کلاس بالاتر از دستور super.finalize() استفاده کنید. توجه کنید که فراخوانی متد finalize() به خودی خود آشغال جمع کن جاوا را تحریک نمی کند؛ این مکانیزم فقط وقتی دست بکار می شود که تمام ارجاعات به یک شیی از بین بروند. در اکثر موارد نیازی به بکارگیری این متد وجود ندارد . روز 21 در این باره باز هم صحبت خواهیم کرد.
خلاصه
دیدیم که چگونه می توان متدها را تحریف کرد . با متدهای سازنده و آماده سازی اشیاء هم آشنا شدیم فهمیدیم که چگونه می توان از متدهایی که به یک شیئ ارث می رسند چشم پوشی کرد یا آنها را اصلاح کرد . بالاخره با محلی که می توانیم شیی خود را به طور کامل نابود کنیم هم آشنا شدیم.

تفاوت اپلت با برنامه
برنامه های جاو را می توان به صورت مستقل ، با کمک اینترپرتر جاوا احرا کرد: تقریباً تمام درس های هفته قبل به برنامه های جاوا اختصاص داشت. ولی اپلت های جاوا باید در یک کاوشگر وب اجرا شوند، این اپلت هابا کمک بر چسب های HTML دردل صفحه وب قرار داده می شوند. با آن که اپلت ها قابلیت های گرافیکی بیشتری دارند، محدودیت هایی هم دارند. این محدودیت ها از آنجا ناشی می شوند که اپلت ها اصولاً برنامه هایی خارجی هستند .و برای جلوگیری از صدمات احتمالی اپلت هاای موذی باید سدهایی سر راه آنها تعبیه کرد. با وجود تمام سدهای جاواا در مقابل اپلت ها، ویروس هایی با این اپلت هانوشته شده است که نشان می دهد حتی این محدودیت های هنم نمی تواند جلوی مو ذیگری عده ای را بگیرد، ولی به هر حال بودن آنها از نبودشان بهتر است؛ این محدودیت ها از این قرارند:
-اپلت، جز در موارد محدود، به سیستم فایل اجرا کننده آن دسترسی ندارد. حتی بعضی از کاوشگرها اجازه همین مقدار دسترسی محدود را هم نمیدهند.
-اپلت با هیچ نقطه ای از شبکه ، جز کامپیوتری که از آنجا بار شده است، نمیتواند تماس بگیرد .
-اپلت با هیچ برنامه ای را روی سیستم اجرا کننده آن اجرا کند.
– اپلت نمی تواند هیچ برنامه ای، جز فایل های DLL، را به داخل سیستم اجرا کننده آن بار کند.
علاوه بر این ، جاوا خود دارای مکانیزم هایی برای جلوگیری از اعمال مشکوک است.
نکته: با وجود تمام سدها و محدودیت های اعمال شده روی اپلت ها جاوا، هیچ چیز نمی تواند جلوی یک برنامه نویس با هوش را در رخنه به این سد بگیرد. شرکت سان تمام برنامه نویسان دنیا را به مبارزه طلبیده و از آنها دعوت کرده تا خلاقیت خود را با شکستن سدهای امنیتی جاوا محک بزنند.
ایجاد اپلت ها
می دانید که هر برنامه جاوا باید حداقل دارای یک کلاس باشد و وجود متد main()هم دراین کلاس الزامی است. اپلت های جاوا هم باید حداقل یک کلاس داشته باشند ولی به متد main() نیازی ندارند.
برای ایجاد یک اپلت، ابتدا باید یک زیر کلاس از کلاس Applet ( در بسته java.Applet ) بوجود آورید. کلاس اپلت تمام چیزهای مورد نیاز برای ارتباط با کاوشگرهای وب، عناصر گرافیک، ماوس، صفحه کلید و مانیتور را در خود دارد. با این که یک اپلت می تواند از کلاس های دیگر هم استفاده کند ولی عملکرد اصلی آن از کلاس Applet نشات می گیرد . امضای یک اپلت همیشه چنین است:
Public class myclass extends java.applet.Applet{

}
تمام اپلت های جاوا باید public باشند، البته فقط کلاس اصلی اپلت ولی سایر کلاس ها می توانندpublic یا private باشند. وقتی جاوا در یک صفحه وب به یک اپلت بر می خورد، کلاس اصلی و دیگر کلاس هارا از روی شبکه بار می کند. جاوا هنگام اجرای یک اپلت از کلاس اصلی آن یک وهله می سازد بنابراین چند اپلت بدون ایجاد مزاحمت برای یکدیگر می توانند در آن واحد در یک کاوشگر اجرا شوند.
مهمترین اقدامات یک اپلت
برنامه های جاوا دارای یک متدmain() هستند که از آنجا می توان رفتار برنامه را تنظیم کرد. اپلت ها از این نظر کمی پیچیده تر از برنامه ها هستند. در طول زندگی یک اپلت ( یعنی مدت زمانی که در حال اجراست) اتفاقات زیادی می تواند بیفتد – آماده سازی اپلت، رنگ آمیزی اجزاء گرافیکی، یا رویدادهای ماوس . هر یک از این رویدادها دارای یک متد خاص خود هستند. این متدها به صورت پیش فرض هیچ کاری انجام نمی دهند. بنابراین شما باید بسته به نیازهای اپلت خود این متدها را تحریف کنید. پنج تا از مهمترین این متدها که در موردشان بحث می کنیم: آماده سازی initialization ، شروع starting ، توقف stopping ، تخریب destroyingو رنگ آمیزی painting.
آماده سازی
آماده سازی زمانی روی می دهد که اپلت برای دفعه اول بار می شود. آماده سازی می تواند شامل ایجاد اشیاء مورد نیاز، مقدار دادن به متغیرها، بار کردن تصاویر یا فونت ها و ست کردن پارامترها باشد. متد این رویداد چنین است:
Public void init(){

}
شروع

بعد از آماده سازی ، اپلت شروع می شود . اگر یک اپلت متوقف شده باشد هم می توان آن را دوباره شروع کرد. مثلاً وقتی خواننده به یک صفحه دیگر می رود اپلت متوقف می شود، اگر یک اپلت متوقف شده باشد هم می توان آن را دوباره شروع کرد. مثلاً وقتی خواننده به یک صفحه دیگر می رود اپلت متوقف می شود، و هنگامیکه دوباره به این صفحه برگشت اپلت شروع خواهد شد. هر اپلت فقط یکبار آماده سازی می شود ولی می تواند چندین بار شروع شده و متوقف گردد متد شروع چنین است:
Public void start(){

}
اقداما ت زیادی هست که می توان آنها را در متد start() قرار داد.
توقف
توقف و شروع ملازم یکدیگرند، وقتی خواننده یک صفحه را موقتاً ترک می کند، اپلت های درون آن صفحه متوقف می شوند. یک اپلت را به صورت دستی هم می توان متوقف کرد. به صورت پیش فرض وقتی خواننده یک صفحه راترک می کند، تمام ریسمان thread هایی که اپلت راه اندازی کرده به اجرای خود ادامه می دهند.با متد stop() شما قادر خواهید بود این ریسمان ها را متوقف کنید،چون متد پیش فرض Stop() چنین کاری نمی کند. امضای این متد مانند ذیل است:
Public void stop(){
…}
تخریب
اصطلاح تخریب کمی خشن بنظر می رسد .اما در واقع منظور آن پاک کردن تمام ردپاهای یک اپلت بعد از پایان کار آن است : آزاد کردن منابع سیستم پایان دادن به ریسمانهایی که اپلت راه انداخته، و از بین بردن اشیایی که اپلت ایجاد کرده امضای متد destroy() چنین است:
Public void destroy(){

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

}
متد paint() یک آرگومان، وهله ای از کلاس Graphics می گیرد. این شیی را کاوشگر ایجاد کرده و به متد paintمی فرستد. بنابرا ین لازم نیست شما نگران آن باشد؛ ولی حتماً باید کلاس Graphics ( در بسته java.awt) را وارد اپلت خود کنید:
Import java.awt.Graphics;
قرار دادن اپلت در یک صفحه وب
بعد از ایجاد تمام کلاس های مورد نیاز اپلت و کامپایل کردن آن ( که مانند سایر برنامه های جاوا است )، باید با استفاده اززبان HTML یک صفحه وب Web page ساخته و اپلت را در آن قرار دهید.برای قراار دادن اپلت در صفحات وب باید از بر چسب tag خاصی استفاده کنید.
بر چسب <APPLET>:
برای قراردادن یک اپلت در صفحه وب باید از بر چسب <APPLET> استفاده کنید .

بازهم درباره بر چسب APPLET
در ساده ترین شکل ، با استفاده از WIDTH,CODEو HEIGHT می توان یک اپلت بوجود آورد. ولی ، بر چسب <APPLET> دارای صفات attributes دیگری هم هست که به طراحی بهتر یک صفحه وب کمک می کنند.
نکته : صفات <APPLET> بر چسب تقریباً همانند صفات بر چسب <MIG> است.

ALIGN
صفت ALIGN تعیین می کند که اپلت چگونه باید روی صفحه وب قرار گیرد . این صفت می تواند نه مقدار بگیرد: LEFT (چپ ) ، RIGHT ( راست)، TOP ( بالا) ، TEXTTOP ( متن بالا)، MIDDLE ( وسط) ، ABSMIDDLE ( وسط مطلق)، BASELINE ( خط مبنا)، BOTTOM ( پایین)، ABSBOTTOM ( پایین مطلق).
اگر داشته باشیمALIGN=LEFT وALIGN=RIGHT، اپلت از ( به ترتیب ) چپ و راست صفحه تراز می شود متنی که نوشته می شود آنقدر امتداد می یابد. یا به سمت دیگر اپلت برسد. در این جا می توان از بر چسب قطع خط <BR> استفاده کرد و با صفت CLEAR کاری کرد که یک متن طویل در چند خط نمایش داده شود: CLEAR=LEFT از اولین نقطه خالی در حاشیه چپ شروع می کند. CLEAR=RIGHT از راست شروع می کند و CLEAR=ALL از خطی شروع می کند که هر دوحاشیه آن خالی باشد.
اگر اپلت کوچک باشد و متن دنبال آن هم بیش از یک خط نباشد، می توان به گونه ای ساده تر عمل کرد. برای این کار می توان از هفت مقدار از صفت ALIGN به ترتیب ذیل استفاده کرد:
-ALIGN=TEXTTOP بالای اپلت را با بالای طویلترین متن موجود در خط تراز می کند.
-ALIGN=TOP بالای اپلت را با بالاترین آیتم موجود در خط ( که می تواند یک اپلت دیگر ، یم تصویر، یا صرفا بالای خط باشد) تراز می کند.
– ALIGN=ABSMIDDLE وسط اپلت را با وسط بزرگترین آیتم خط تراز می کند.
-ALIGN=MIDDLE وسط اپلت را با وسط خط مبنای متن تراز می کند.
– ALIGN=BASELINE پایین اپلت را با وسط خط مبنای متن تراز می کند.
مشابه ALIGN=BOTTOM است.
-ALIGNE=ABSBOTTOM پایین اپلت را با پایین ترین آیتم موجود در خط ( که می تواند خط مبنای متن ، یا یک اپلت دیگر، یا یک تصویر باشد) تراز می کند.

HSPACE و VSPACE
صفات VSPACE و HSPACE فضای بین اپلت ومتن اطراف آن را تعیین می کنند: HSPACE فاصله افقی و VSPACE فاصله عمودی است . این فواصل بر حسب پیکسل می باشند.

CODEBASE , CODE
صفتCODE نام فایل کلاس اپلت را مشخص می کند اگر از CODE برای تعیین نام اپلت استفاده کنیم، فایل کلاس اپلت باید در همان دایرکتوری فایل HTML باشد. اگر فایل کلاس اپلت در محل دیگری باشد باید از صفت CODEBASE استفاده کنید چون در CODE فقط نام اپلت را می توان مشخص کرد ولی با CODEBASE می توان مسیر فایل را هم مشخص کرد .به مثال ذیل توجه کنید:
<APPLET CODE="myclass.class"CODEBASE="classes"
WIDTH=100HEIGHT=100></APPLET>
در مثال فوق قابل کلاس در دایرکتوری classes قرار دارد.

ارسال پارامتر به اپلت ها
قبلاً دیدیدکه چگونه در برنامه های جاوا می توان به متد main() آرگومان فرستادو آنها را مورد استفاده قرار داد. ولی، اپلت ها دارای خط فرمان نیستند، بنابراین چگونه می توان به یک اپلت آرگومان های متفاوت فرستاد. این کاردر بر چسب <APPLET> امکانپذیر است. برای آن که یک اپلت بتواند پارامتر قبول کند، به دو چیز نیاز داریم:
-یک بر چسب <PARAM> در فایل HTML
-کد لازم برای تحلیل این پارامترها در اپلت
هر پارامتر دو قسمت دارد: یک نام و یک مقدار. مثلاً، در یک اپلت می توان رنگ متن یا سرعت نمایش انیمشن ها را به صورت پارامتر به آن ارسال کرد. نام پارامترها کاملاً اختیاری است.
هر پارامتر در فایل HTML به یک بر چسب <PARAM> نیاز دارد، هر بر چسب <PARAM> باید دارای دو صفت NAME و VALUE باشد.
وقتی اپلت بار می شود، پارامترها هم به آن ارسال می شوند. مقدار این پارامترها را می توان در متد init() و با استفاده از متد getParameter اخذ کرد. متد getParameter() فقط یک آرگومان می گیرد: نام پارامتر ؛ این متد مقدار پارامتر خواسته شده را بر می گرداند. توجه داشته باشید که مقدار برگشتی این متد همواره یک رشته است. دستور ذیل ( که در متد init() قرار خواهد داشت) مقدار پارامتر font را می گیرد:
String theFontName= getParameter("font");
نکته : نام پارامتر در بر چسب <param> و در متد getParameter()باید دقیقاً مانند هم باشند؛ توجه داشته باشید که جاوا نسبت به نوع حروف حساس است.
اگر پارامتر خواسته شده در متد getParameter() در فایل HTML وجود نداشته باشد، این متد مقدار Null را بر خواهدگرداند. کد ذیل برای مقابله با این وضعیت نوشته شده است:
If (thefontname= =null)
Thefontname="courier"
قبلاً هم گفتیم که متد getParameter() همواره یک رشته بر می گرداند – اگر مقدار برگشتی واقعاً یک رشته نیست، قبل از استفاده از آن باید نوع آن را عوض کنید:
Int thesize;
String s= getParameter("size");
If (s= =null)
Thesize=12;
Else thesize=integer.parsint(s);
برای درک بهتر این مطلب، با استفاده از تکنیک فوق تغییری در اپلت Hello Again Applet می دهیم. در اینجا نام بعد از Hello به صورت یک پارامتر به آن ارسال خواهد شد. ابتدا نگاه دیگری به شکل اولیه این اپلت می اندازیم:

اولین تغییری که در این اپلت می دهیم تعریف یک متغیر برای نگهداری نام است.
بهترین محل برای گرفتن پارامترها متد init() است . یک نام پیش فرض هم تعیین کرده ایم تا ( در صورت عدم وجود این پارامتر در فایل HTML ) اپلت بدون نام اجرا نشود:
Public void init(){
Name=getparameter("name");
If(name = = null)
Name="laura";
}
سپس این نام را با کلمه Hello ترکیب می کنیم تا پیام دلخواه بدست آید ( بهتر است اینکار را هم در متد init انجام دهیم):
قدم بعد تغییر دادن متد Drawstring در متد paint است:
g.drawstring (name,5,50);

خلاصه
بیشترین مورد مصرف زبان جاوا در ایجاد اپلت ها ست . چون اپلت ها در یک کاوشگر اجرا می شوند و با آن بر هم کنش دارند، از برنامه های جاوا پیچیده ترند.
-تمام اپلت های جاوا از کلاس applet ( در بسته java.applet ) مشتق می شوند. این کلاس شامل تمام رفتارهای اساسی اپلت ها می باشد، و با این عمل تمام این رفتارها به اپلت به ارث می رسد.
-اپلت ها پنج متد اصلی دارند: init(),start(),stop(),distroy(),paint()
-برای اجرای یک اپلت در فایل HTML باید از بر چسب <Applet> استفاده کرد. کاوشگرهای مجهز به جاوااپلت مشخص شده دراین قسمت را از خدمتگزار وب بار می کنند.
-اپلت بر خلاف برنامه های جاوا خط فرمان ندارد، بنابراین نمی توان مستقیماً به آنها آرگومان ارسال کرد.
برای ارسال پارامتر به اپلت ها باید از بر چسب <Param> در فایل HTML استفاده کرد. اپلت این مقدار پارامترها را با کمک متد getParameter اخذ می کند.

کلاس GraphiCs
با قابلیت های گرافیکی جاوا امکان رسم اشکال ساده روی صفحه نمایش وجوددارد. اکثر عملیات گرافیکی جاوا متدهای کلاس Graphics هستند. برای عملیات گرافیکی لازم نیست خود شما یک شیی از کلاس Graphics بسازید؛ متد paint() خود این کار را انجام خواهد داد. کلاس Graphics جزیی از بسته java.awt است، بنابراین باید حتماً این کلاس را ضمیمه اپلت خود کنید:
Import java.awt. Graphics;
Public class myclass extends java.applet.Applet{

}
سیستم مختصات گرافیکی
هر گرافیکی باید در محلی رسم شود : در واقع تمام متدهای گرافیکی آرگومانهایی دارندکه مکان رسم آنها را مشخص می کند. به سیستمی که نقاط در آن با زوج اعداد بیان می شوند، سیستم مختصات Coordination system گفته می شود.
در سیستم مختصات جاوا سمت چپ – بالای صفحه نمایش نقطه 0,0 است. X های مثبت به سمت راست می روند، و Y های مثبت به سمت پایین . سیستم مختصات جاوا، فقط اعداد صحیح را قبول می کند. چون سیستم مختصات گرافیکی جاوا با اغلب سیستم های گرافیکی، دیگر ( که از چپ – پایین شروع می شوند) تفاوت دارد، عادت کردن به آن کمی طول می کشد.

ترسیم و پر کردن اشکال
کلاس Graphics دارای متدهای متعددی برای رسم اشکال ساده گرافیکی – مانند خط، مستطیل، چند ضلعی، منحنی، و قوس می باشد.
نکته: کلاس Graphics برای نمایش تصاویر BMP و GIF هم متدهایی دارد. فردا بیشتر به این مطلب خواهیم پرداخت.
خط
متد Drawline() برای رسم خط است. این متد چهار آرگومان می گیرد: مختصات Xو Y شروع خط و مختصات X و Y انتهای خط.
Public void paint(Graphics g){
g.drawline(25,2575,75);
}
مستطیل
در جاوا سه نوع مستطیل می توان رسم کرد.
– مستطیل ساده
-مستطیل با گوشه های مدور
– مستطیل سه بعدی، یا سایه دار
برای هر یک از این انواع دو متد وجود دارد: متدی برای رسم ساد ( یک چهار ضلعی توخالی) و متدی برای رسم چهار ضلعی توپر.
برای رسم یک مستطیل ساده می توان از متدهاDrawRect یاFillrect استفاده کرد. این متدها هر دو چهار آرگومان می گیرند: X وY گوشه چپ – بالای مستطیل ، و عرض و ارتفاع آن.
مستطیل های با گوشه های مدور دارای گوشه های یخ هستند، متدهای Drawroundrect(),roundrect() برای این منظور هستند. این متدها علاوه بر چهار آرگومان قبلی دارای دو آرگومان دیگر هم هستند: عرض و ارتفاع پخی گوشه ها. این دو آرگومان مقدار پخی گوشه ها را مشخص می کنند .
در مثال ذیل طرز رسم دو مستطیل با گوشه های مدور را مشاهده می کنید: یکی توخالی با پخی 10 پیکسل و دیگری توپر با پخی 20 پیکسل .
مستطیل های سه بعدی در واقع به هیچ وجه سه بعدی نیستند، بلکه سایه آنها باعث تو هم سه بعدی خواهد شد. متدهای رسم مستطیل های سه بعدی علاوه بر چهار آرگومان معمول، دارای یک آرگومان دیگر ( از نوع boolean ) نیز هستند که بر جستگی (true) یا فرو رفتگی (false ) آن را مشخص می کند. در این مورد هم دو متد وجود دارد: draw3Drect(),fill3Drect در مثال ذیل دو مستطیل سه بعدی ( برجسته و فرو رفته) رسم می شوند.

چند ضلعی
برای رسم چند ضلعی به تعداد زیادی زوج عدد (X,Y) نیاز داریم. رسم چند ضلعی از یک نقطه شروع شده و بعد از رسم تمام اضلاع به نقطه اول ختم می شود . چند ضلعی ها هم می توانند تو خالی(drawpolygon()) و توپر (fillpolygon) باشند . علاوه بر آن می توان فهرست مختصات را هم مشخص کرد – آرایه ای از مختصات X و Y یا وهله ای از کلاس polygon.
در روش اول، متدهای مزبور سه آرگومان می گیرند:
-آرایه ای از اعداد صحیح برای مختصات X
-آرایه ای اعداد صحیح برای مختصاتY
– یک عدد صحیح که تعداد نقاط را مشخص می کند.
لازم به گفتن نیست که تعداد xها وYها باید یکسان باشد. مثال ذیل یک چند ضلعی تو خالی با روش اول رسم می کند.
دقت کنید که جاوا به طور خودکار چند ضلعی را نمی بندد، اگر می خواهید چنین کنید باید اولین نقطه آرایه را در آخر آن هم تکرار کنید. هنگام رسم چندضلعی های توپر این عمل خود به خود صورت خواهد گرفت.
روش دوم فراخوانی متدهای رسم چند ضلعی، از یک شیئ polygon استفاده می کند. اگراز قبل نمی دانید که چند ضلعی شما چند ضلع خواهد داشت، از این روش استفاده کنید. در این روش به جای دو آرایه مختلف با یک شیی سرو کار دارید. در این روش ابتدا باید یک چند ضلعی خالی ایجاد کنید:
Polygon poly =new polygon();
البته می توانید ابتدا نقاط را مشخص کرده و سپس این شیی را ایجاد کنید:
Int exes[]={39,94,97,142,53,58,26};
Int whys[]={33,74,36,70,108,80,106};
Int pts=exes.length;
Polygon poly=new polygon(exes,whys,pts);
همین که چند ضلعی ایجاد شد، می توان نقاطی را به آن اضافه کرد:
Poly.addpoint(20,35);
سپس می توان این شیی را به عنوان آرگومان به متدهای رسم چند ضلعی داد. در ذیل مثال قبل را با استفاده از شیی polygon بازنویسی کرده ایم، در ضمن چند ضلعی هم توپر رسم شده است.

بیضی
با استفاده از متدهای رسم بیضی می توان دایره و بیضی رسم کرد. بیضی ها هم مانند مستطیل ها هستند، چهار آرگومان دارند:x و y گوشه چپ – بالا و عرض و ارتفاع بیضی . بیضی ها را هم می توان تو خالی و توپر رسم کرد: drawOvail() و fillOvall() .
قوس
مشکلترین عنصر گرافیکی جاوا قوس است. یک قوس در واقع قسمتی از یک بیضی است. متدdrawArc() شش آرگومان می گیرد: نقطه شروع ، عرض و ارتفاع، زاویه شروع قوس ، و زاویه تشکیل دهنده طول قوس. قوس ها را توپر هم می توان رسم کرد، در این حالت نقطه شروع قوس به نقطه پایانی آن وصل خواهد شد.
مهمترین مساله در قوس ها این است که ابتدا یک بیضی که قوس قسمتی از آن خواهد بود محاسبه شده و سپس قسمتی از آن رسم شود. نقطه شروع قوس به نقطه پایانی آن وصل خواهد شد.
مهمترین مساله در قوس ها این است که ابتدا یک بیضی که قوس قسمتی از آن خواهد بود محاسبه شده و سپس قسمتی از آن رسم شود. نقطه شروع، عرض و ارتفاع قوس آنهایی نیستند که روی صفحه نمایش دیده می شوند، در واقع آنها متعلق به بیضی زیرین قوس هستند.
برای محاسبه دو آرگومان آخر متدهای رسم قوس باید کمی با دایره مثلثاتی آشنایی داشته باشید، زاویه صفر در ساعت 3 قرار دارد، 90 درجه در ساعت 12 ، 180 درجه در ساعت 9 و 270 درجه در ساعت 6، در مثال شکل 9-12، زاویه شروع قوس ( آرگومان پنجم) 90 درجه است. آرگومان ششم متدهای قوس، طول قوس را بر حسب درجه بیان می کنند ( نه نقطه پایانی آن) ، در مثال بالا طول قوس 180 درجه است. جهت مثبت مثلثاثی خلاف حرکت عقربه های ساعت است، در جاوا هم این قاعده رعایت شده است. سپس باید نقطه شروع و طول قوس محاسبه شوند. چون نقطه شروع این قوس منطبق با هیچیک از نقاط مشخص دایره مثلثاتی نیست، باید از روش سعی و خطا استفاده کنیم. این قوس تقریباً از زاویه 25 درجه شروع شده و طول آن 130 درجه ( در جهت خلاف حرکت عقربه های ساعت) است. حال که همه چیز را محاسبه کرده ایم. می توانیم کد لازم را بنویسیم به قطعه کد ذیل توجه کنید.
Public void paint(Graphics g){
g.drawarc(10,20,150,50,25,-130);
g.fillarc(10,80,150,50,25,-130);
}
در ذیل خلاصه ای از روش رسم قوس را ملاحظه می کنید:
-قوس را قطعه ای از یک بیضی کامل در نظر بگیرید.
-نقطه شروع، عرض و ارتفاع این بیضی فرضی را محاسبه کنید ( حتی اگر لازم باشد می توانید آن را رسم کنید).
-زاویه شروع قوس را محاسبه کنید.
-جهت و طول قوس را تعیین کنید ( مخالف حرکت عقربه های ساعت، مثبت، موافق حرکت عقربه های ساعت، منفی).

کپی کردن و پاک کردن
همینکه روی اپلت چیزهایی رسم کردید، ممکنست بخواهید آنها را جابجا کرده و یا حتی تمام اپلت را پاک کنید. کلاس Graphics دارای متدهایی برای این وظایف است . متد copyArea محتویات یک ناحیه مستطیلی را به ناحیه دیگر کپی می کند. این متد شش آرگومان می گیردx و y راس چپ – بالای مستطیلی که باید کپی شود، عرض و ارتفاع آن، و فاصله ای در محور x ها و yها که باید در آن کپی شود در مثال ذیل محتویات یک مربع به ابعاد 100 پیکسل در سمت راست خودش کپی می شود:
g.copyarea(0,0,100,100,100,0);
برای پاک کردن یک مستطیل باید از متدclearrect استفاده کرد. تعداد آرگومانهای این متد مانند متدهای drawrect و fillrect چهار تاست ، این متد مستطیل مزبور را با رنگ زمینه پاک می کند ( درباره ست کردن رنگ زمینه همین امروز بیشتر توضیح خواهیم داد). برای پاک کردن تمام اپلت ، ابتدا باید با متد size ابعاد آن را بدست آورید و سپس با متد clearrect آن را پاک کنید:
g.clearrect(0,0,size().width,size().height);
متن و فونت
با کمک کلاس های Graphics و font می توان روی صفحه متن نمایش داد. کلاسfontmetrics هم ( که اطلاعاتی در باره یک فونت می دهد) می تواند در این میان به ما کمک می کند. در اینجا فقط به نمایش متن می پردازیم و کار با صفحه کلید را به روزهای آینده وا می گذاریم.
ایجاد شیء فونت
برای نمایش متن ، ابتدا باید یک وهله از کلاس font بسازیم. یک شیی فونت تمام خواص فونت را ( از قبیل نام، نوع، اندازه) در خود دارد. نام فونت رشته ایست از قبیل "timesroman" ، "courirer" یا "helvetica" نوع فونت ها به صورت ثابت هایی در کلاس font تعریف شده اند: font.plain,font.bold,font.italic اندازه فونت هم یک عدد صحیح است.
روش ایجاد یک شیی از کلاس font چنین است:
Font f=new font("timesroman",font.bold,24);
مانند سایر کلاس های جاوا، کلاس font را هم باید با دستور import به اپلت خود ضمیمه کنید.
چون نوع فونت در واقع یک عدد صحیح است، می توان آنها را با هم ترکیب کرد:
Font.bold+font.italic
عبارت فوق یک فونت ضخیم و کج بوجود می آورد.
توجه داشته باشید که یک اپلت به فونت های موجود در سیستمی که روی آن اجرا می شود متکی است، اگر فونتی که در اپلت بکار رفته در آن سیستم وجود نداشته باشد . جاوا فونت courier را جایگزین این خواهد کرد . بنابراین همیشه سعنی کنیداز فونت های استاندارد استفاده کنید. برای بدست آوردن فونت های نصب شده در سیستمی که اپلت روی آن اجرا می شود می توانید از متد getfontlist() ( که متعلق به کلاس java.awt.toolkit است ) استفاده کنید.
رسم کاراکترها و رشته ها
بعد از ایجاد فونت، می توانید با متدهای drawchars و drawstrings کاراکترها و رشته های مورد نظر تان را نمایش دهید. اما قبل از آن باید با متد setfont فونت جاری سیستم راست کنید. توجه داشته باشید که جاوا همیشه از فونت جاری سیستم برای نمایش متن استفاده می کند.
پارامترهای دوم و سوم متدdrawstring() شروع متن را مشخص می کنند،x نسبت به لبه چپ اپلت محاسبه می وشد و y خط مبنای متن خواهد شد.
متدdrawchars شبیه متد drawstring است با این تفاوت که آرایه ای از کاراکترها را نمای می دهد این متد پنج آرگومان دارد نام آرایه، اولین عنصری که باید رسم شود، آخرین عنصری که باید رسم شود، x و y مکان نمایش متن.

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

رنگ
رنگ در همه جا زیباست و یک اپلت هم با رنگ زیباتر خواهد شد. جاوا برای استفاده از رنگ کلاسی بنام color دارد. رنگها در جاوا از مدل 24 بیتی پیروی می کنند: هشت بیت برای رنگهای قرمز، سبز، و آبی، هر یک ازاین رنگها می توانند مقداری بین 0 تا 255 داشته باشند. (0,0,0) رنگ سیاه و (255,255,255) رنگ سفید هستند. البته در رنگهای یک اپلت به رنگهای سیستمی که اپلت در آن اجرا می شود وابستگی دارند، و این هم به روش کاوشگر در نمایش رنگها وابسته است. این بدان معناست که با وجود آن که جاوا می تواند با طیفی از میلیونها رنگ کار کند، شاید در نهایت فقط تعداد کمی رنگ دیده شوند!

استفاده از شیئی COLOR
برای استفاده از رنگ ابتدا باید یک شیئ از کلاس colorبوجود آوریم. در کلاس color چند رنگ مهم از قبل تعریف شده اند.
اگر رنگی که نیاز دارید در میان این رنگهای استاندارد نیست. نگران نباشید، خودتان می توانید رنگ دلخواهتان را بسازید:
Color c=new color(140,140,140,);
دستور بالا یک رنگ خاکستری نسبتاً تیره بوجود خواهد آورد. شیئ color می تواند اعداد اعشاری بین 0.0 و 1.0 را هم قبول کند:
Color c=new color(0.55,0.55,0.55);

تست کردن و ست کردن رنگ جاری سیستم
برای آن که یک متن رنگی نمایش داده شود ابتدا باید رنگ جاری سیستم ست شود. این کار با متد setcolor انجام می شود:
g.setcolor(color.green);
بعد از این دستور تمام ترسیمات با این رنگ انجام خواهند شد. علاوه بر رنگ شیئ گرافیکی، می توان رنگ پیش زمینه و پس زمینه اپلت را هم با متدهای setforeground() و setblackground() ست کرد. این متدها در کلاس java.awt.component ( که اپلت به طور خودکار آن را به ارث می برد) قرار دارند.رنگ پس زمینه پیش فرض اپلت ها خاکستری است ، اما می توان آن را تغییر داد:
Setblackground(color.white);
با متد setforeground() می توان به یکباره رنگ تمام اشیایی که روی اپلت ترسیم می شوند راست کرد:
Setforeground(color.black);
هر set…() یک متد متناظر get…() برای گرفتن رنگ عنصر مورد نظر دارد. دستور ذیل رنگ پیش زمینه را به رنگ جاری اپلت ست می کند:
Setforeground(g.getcolor());
یک مثال ساده رنگی
در مثال ذیل تعدادی مربع روی اپلت رسم شده و هر کدام با یک رنگ تصادفی رنگ آمیزی می شوند، تعداد مرجع ها به ابعاد اپلت بستگی دارد.

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

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

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

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

مشکل اپلت ساعت دیجیتالی
اپلت ساعت دیجیتالی قسمت قبل چون از ریسمان استفاده نمی کند با مشکل مواجه است. در واقع حلقه while تمام توجه سیستم را به خود معطوف کرده و حتی اجازه اجرای متد paint() را نمی دهد. اجرای این اپلت به جز یک صفحه خالی هیچ حاصلی ندارد! حلقه while چنان سیستم را به خود مشغول می کند که امکان متوقف کردن معمولی اپلت هم وجود ندارد، چون حتی متد stop() را هم نمی توان اجرا کرد. راه حل مشکل اپلت ساعت دیجیتالی استفاده از ریسمان است. با این تدبیر اپلت می تواند بدون تحمیل بار جدی به سیستم، کارش را انجام دهد.

استفاده از ریسمان در اپلت ها
اما چگونه می توان در یک اپلت از ریسمان استفاده کرد؟ اینکار چندان مشکل نیست، و در واقع چون بسیار تکراری هم هست همین که یکبار آن را انجام دادید می توانید با استفاده از ابزارهای کپی و چسباندن کد در محیط برنامه نویسی ( دستوراتpasteوcopy ) از آن در اپلت های دیگر هم استفاده کنید. پس ، در استفاده از ریسمان ها هرگز کوتاهی نکنید!
برای استفاده از ریسمان ها در یک اپلت باید چهار تغییر در آن اعمال کنید:
-به امضای اپلت کلماتimplements runnable را اضافه کنید.
– یک متغیر وهله برای نگهداری این ریسمان بسازید.
– متد start() را طوری تغییر دهید که جز ایجاد و اجرای ریسمان کاری نکند.
– کارهای اجرایی اپلت خود را به متدی به نام run() منتقل کنید.
تغییر اول به تعریف کلاس اپلت مربوط می شود تا کنون تعریف کلاس اپلت های ما چنین بود:
Public class myappletclass extends java.applet.applet{

}
برای استفاده از ریسمان ها، کلاس اپلت را چنین تعریف کنید:

Public class myappletclass extends java.applet.applet implements runnable{

}
با این تغییر اپلت قادر خواهد بود تا از واسط Runnable استفاده کند. یک واسط (interface) عبارت بود از مجموعه نام متدهای مشترک در چند، کلاس که امکان می دهد تا در کلاس های مختلف آن رفتارها پیاده سازی شوند. در اینجا واسط Runnable رفتاری را تعریف می کند که یک اپلت برای اجرای ریسمان ها بدان نیاز دارد، بویژه اینکه این واسط یک تعریف پیش فرض برای متد run() در اختیار اپلت قرار می دهد.
تغییر دوم ایجاد یک متغیر وهله از نوع Threadاست (Thread کلاسی در java.lang است . بنابراین نیازی به import کردن آن ندارید):
Thread runner;
تغییر سوم به متد start() مربوط می شود، در این حالت این متد هیچ کاری جز ایجاد و اجرای ریسمان نباید انجام دهد:
Public vois start(){
If(runner = =null);{
Runner=new Thread(this);
Runner.start();
}
}
اگر متد start() کاری ندارد که انجام دهد، پس اعمال اپلت کجا باید انجام شوند؟ در متد جدیدی بنام run() :
Public void run(){
//what your applet actually does
}
هر کاری که ریسمان باید انجام شود، در این متد run() قرار می گیرد، متدrun() قلب اپلت ریسمان دار است. وقتی اپلتی دارای ریسمان است باید یک متد stop() هم داشته باشد تا هنگامیکه خواننده صفحه وب را ترک می کند اجرای ریسمان هم متوقف شود:
Public void stop(){
If (runner != =null){
Runner.stop();
Runner=null;
}
}
متد stop() دو کار انجام می دهد: اول اینکه ریسمان را متوقف می کند و دوم اینکه به شیی Thread مقدار null ( تهی) می دهد تا کاوشگر بتواند در صورت نیاز به حافظه این شیئ را از حافظه پاک کند. همین! و حالا اپلتی دارید که یک ریسمان دارد و می تواند بدون دردسر اجرا شود.

اصلاح اپلت ساعت دیجیتالی
اجازه دهید با دانشی که درباره ریسمانها بدست آوریم، مشکل اپلت ساعت دیجیتالی را حل کنیم. اینکار را با چهار تغییر مور د نظر در این اپلت شروع می کنیم. ابتدا امضای کلاس این اپلت را صلاح می کنیم:
Public class digitalThreads extends java.applet.applet
Implements runnable{
…}
سپس ، یک متغیر وهله از نوع Thread می سازیم:
Thread runner;
چون قسمت اعظم کد این اپلت در متد start() قرار دارد، مرحله سوم ( یعنی انتقال کدها به متد run() ) مهمترین قسمت کار است. اینکار بر خلاف ظاهرش بسیار ساده است، کافیست متد start() را به run() تغیر نام دهید و دو متد جدید بنامهای start() و stop() مانند ذیل وجود آورید:
Public void start(){
If(runner= =null);{
Runner=newThread(this);
Runner.start();
}
}
Public void stop(){
If (runner != =null){
Runner.stop();
Runner=null;
}
}
کاهش چشمک زدن انیمیشن
اگر تا بحال مثال های این کتاب را به طور عملی دنبال کرده باشید ( و امیدواریم چنین باشد) متوجه یک چشمک زدن (flickering) آزار دهنده خواهیدشد. در حقیقت، برنامه مشکلی ندارد و این مربوط به خود جاواست. اما چون چیز آزار دهنده ای است سعی می کنیم آن را برطرف کنیم.
چشمک زدن و راه های اجتناب از آن
چشمک زدن ناشی از روش جاوا در رنگ آمیزی اپلت هاست. ابتدای درس امروز دیدید که هنگام رنگ آمیزی اپلت ها وقتی متدrepaint() فراخوانی می شد متد paint() اجرا می گردید. در حقیقت بین فراخوانی متد repaint() و اجرای متد painnt() مراحل دیگری نیز وجود دارند:
1- فراخوانی متد repaint() باعث فراخوانی متد update() می شود.
2- متد update() صحفه را پاک کرده ( در واقع آن را با رنگ پس زمینه پر می کند) و بعد paint() را فرا خوانی می کند.
3- متد paint() محتویات فریم جاری را روی صفحه ترسیم می کند.
در واقع این متد update() ( مرحله دوم) است که منشا چشمک زدن است . وقتی بین دو فریم صفحه پاک شده و دوباره رنگ آمیزی می شود، قسمت ثابت صفحه ( قسمتی که بین دو فریم تغییر ننمی کند) بسرعت تغییر رنگ می دهد علت چشمک زدن همین است.
دو راه انتخاب از چشمک زدن در اپلت های جاوا وجود دارد:
-متدupdate() را طوری تغییر دهیم که یا اصولا صفحه را پاک نکند، یا فقط قسمتهایی که تغییر کرده را پاک کند.
– متدهای update() و paint() را تغییر دهیم و از بافر کردن دو گانه (double-buffering) استفاده کنیم.
روش دوم پیچیده بنظر می رسد و در واقع همینطور هم هست. بافر کردن دو گانه یعنی ترسیم فریم ها در جایی غیر از صفحه و سپ انتقال آن به صفحه نمایش فردا درباره این روش بیشتر صحبت خواهیم کرد، امروز به راه حل اول می پردازیم:
روش تحریف متد UPDATE
منشا چشمک زدن متد update() است، بنابراین برای کاهش این پدیده باید این متد را تحریف ( بازنویسی ) کرد. متد update() ( که متعلق به کلاس component است ) در حالت پیش فرض چنین است:
Public void update(Graphics g){
g.setcolor(getbackground());
g.fillrect(0,0,width,height);
paint(g);
}
به طور خلاصه، این متد ابتدا صفحه را پاک می کند ( در واقع با رنگ پس زمینه آن را پر می کند) و سپس با ست کردن رنگ به حالت اول متد paint() را فراخوانی می کند. هنگام تحریف متد update() باید همواره به این دو نکته توجه داشته باشید و کاری کنید که نتیجه مشابه بدست آید.
1-صفحه را پاک نکنید
2-ترسیم قسمت های ضروری
اصطلاح جدید برش clipping که قسمتی از کلاس Graphics است ، امکان می دهد که ترسیمات به قسمت خاصی از صفحه محدود شوند، با اینکه دستور ترسیم برای تمام صفحه است، ولی ترسیم فقط در قسمت برش خورده انجام خواهد شد.
سپس باید قسمت برش خورده را مشخص و ذخیره کنیم . چون در مثال ما هر دو قسمت مهره تغییر می کنند ( وقتی مهره کمی جابجا می شود، پشت آن خالی و جلوی آن پر می شود) باید دو متغیر وهله برای این دو قسمت تعریف کنیم.
حال می خواهیم اصلاح اپلت checkers را شروع کنیم. ابتدا دو متغیر وهله برای سمت چپ و راست مهره تعریف می کنیم: ux1 برای سمت چپ و ux2 برای سمت راست مهره:
Int ux1,ux2;
سپس باید متد run() را تغییر دهیم، شاید فکر کنید اینکار ساده است ولی بدلیل طرز عمل خاص متدهای paint() و repaint() اینکار می تواند پیچیده شود. مشکل از آنجا ناشی می شود که ممکن است برای هر فراخوانی متدrepaint() یک متد متناظر paint() فراخوانی نشود. اگر منابع سیستم محدود باشند ممکن است چند متد paint() را اجرا کرده و از اجرای بقیه صرفنظر می کند. اگر این حالت برای اپلت ما پیش آید، قسمتهایی از صفحه تغییر نمی کنند و مهره ردپایی از خود باقی خواهد گذاشت. برای غلبه بر این مشکل راه حل ساده ای وجود دارد: لبه پیشین مهره را در هر فریم به روز در آورید، ولی لبه پسین را فقط وقتی به روز در آورید که آخرین paint() واقعاً انجام شده باشد. با این تمهیدممکنست در لحظاتی ( که متدهای paint() در صف اجرا نمی شوند) مهره کشیده تر شود ولی در نهایت به حالت اول باز خواهد گشت.
وقتی مهره از راست به چپ می رود محاسبه ناحیه برش ، براساس مکان قدیم و جدید مهره ، ساده است. مقدار ux1 ( سمت چپ ناحیه برش) برابرست با مقدار قبلی x مهره (xpos) ومقدار ux2 برابر است با مکان x فعلی بعلاوه عرض مهره :
Public void run(){
Setbackground (color.blue);
While(true){
For(xpos=5; xpos<=105; xpos +=4){
}
For (xpos = 105; xpos >5;xpos-=4){
Repaint();
Try{thread.sleep(100);}
Catch (interruptedException e){
}
}
}
در حلقه for اول ، که مهره را به راست می برد، ابتدا ux2 ( سمت راست ناحیه برش) به روز در می آید:
Ux2=xpos+90;
سپس ، بعد از ux1,repaint() به روز در آورده می شود. ولی اینکار باید وقتی صورت گیرد که متد paint() واقعا اجرا شده باشد. اما چگونه می توان فهمید که این اتفاق روی داده است؟ می توانید ابتدا در متد paint() مقدار ux1 را به 0 سست کرده و سپس ببینید آیا می توانید مقدار آن را تغییر دهید یا باید برای رویداد paint() صبر کنید:
If(ux1= = 0) ux1=xpos;
شکل کامل شده حلقهfor را برای حرکت از چپ براست در ذیل می بینید:
For (xpos = 5; xpos <=105;xpos>=4){
Ux2=xpos+90;
Repaint();
Try{thread.sleep(100);}
Catch (interruptedexception e){}
If (ux1= =0) ux1 = xpos;
}
وقتی مهره به چپ می رود همه چیز معکوس می شود. در این حالت ux1 ( سمت چپ) لبه پیشین است و باید در هر فریم تغییر داده شود و ux2 لبه پسین است. بنابراین در حلقه for دوم ابتدا ux1 به روز در آورده می شود:
Ux1=xpos;
سپس ، بعد از فراخوانی repaint() ، لزوم به روز در آوردن ux2 بررسی می شود:
If (ux2 = = 0) ux2 = xpos +90;
شکل اصلاح شده حلقه for دوم را در ذیل می بینید:
For (xpos =150; xpos >5; xpos-=4){
Ux1= xpos;
repaint();
try { thread.sleep(100);}
catch (interruptedexception e){}
if (ux2= = 0) ux2 = xpos+90;
}
بدین ترتیب متد run() کامل می شود. حال باید متد update() را طوری تغییر دهیم که ناحیه ترسیم متد run() را محدود کند. برای برش دادن یک ناحیه باید از متد cliprect() استفاده کنیم. این متد مانند سایر متدهای گرافیکی چهار آرگومان می گیرد: x و y مکان شروع ناحیه و عرض و ارتفاع ناحیه در اینجاست که نقش ux1 و ux2 آشکار می شود. Ux1 معادل x گوشه بالای ناحیه برش است، با تفریق ux1 از ux2 عرض ناحیه برش بدست می آید – و در پایان متد paint() فراخوانی می شود . شکل اصلاح شده متدupdate() چنین است:
Public void update (Graphics g){
g.cliprect (ux1,5,ux2-ux1,95);
paint(g)
وقتی یک ناحیه برش وجود داشته باشد با اینکه متد paint() روی تمام صفحه اجرا می شود فقط ناحیه برش به روز در خواهد آمد.
برای آن که بتوانیم اجرای متد paint() را تست کنیم در متد مزبور بعد از کامل شدن ترسیمات، متغیرهای ux1 و ux2 را به 0 ست می کنیم:
Ux1= ux2 = 0;
با آن که تغییرات فوق چشمک زدن را به طور کامل حذف می کند اما بهبود قابل توجهی بدست خواهد داد.

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

نرم افزار فارسی ساز
کاربردها ی متداول :
فارسی ساز شامل 3 سری می باشد:
1- سری1: فارسیساز گوشیهای 6600
2- سری2: فارسیساز گوشیهای 6630-70N-72N
3- سری3:فارسیساز گوشیهای6670-6260-7610-3230
نرمافزار موذن همراه
کاربردها ی متداول :
1- انتخاب شهر محل سکونت
2- انتخاب موذن دلخواه
3- براساس مبانی فقه شیعه
4- منطبق بر ساعت اعلام شده صدا و سیما
5- پخش خودکار اذان

نرمافزار مناسک حج
کاربردها ی متداول :
1- ارائه احکام و موارد مربوط به حج
2- فتاوای 11 تن از علما برجسته شیعه
3- قابلیت جستجو در تمامی قسمتها

نرمافزار مفاتیحالجنان
کاربردها ی متداول :
1- متن کامل مفاتیحالجنان
2- صوت
3- اعمال مربوط به روزهای هفته
4- اعمال مربوط به روزهای ماه
5- زیارتنامهها
6- نمایش خودکار اعمال مربوط به روزهای مخصوص

نرمافزار تقویم هجری شمسی
کاربردها ی متداول :
1- ارائه تقویم براساس تاریخ شمسی
2- اعلام تعطیلات و مناسبتها براساس تاریخهای شمسی و قمری
3- امکان ثبت و یادآوری جلسات
4- قرار ملاقات، یادداشت و ثبت امور مالی
5- ارسال اتوماتیک پیام کوتاه در مناسبتهای مختلف
نرمافزار کنکور(در دست تولید)
کاربردها ی متداول :
1- برگزاری 11 مرحله کنکور آزمایشی
2- ارسال پاسخنامه
3- برنامهریزی تحصیلی هفتگی، ماهانه، سالانه
4- ارسال کتب کمک آموزشی الکترونیکی
5- بودجهبندی و انتخاب رشته
نرمافزار همیاد
کاربردها ی متداول :
1- یادگیری مطالب بر کمبنای سیستم جعبه لایتنر براساس تکرار مطالب مرور شده برای استقرار در حافظه بلند مدت
2- کاهش خطای اتفاقی به دلیل سیستم انتقال خودکار کارتها در مراحل مرور یا جابجایی
3- امکان ادامه سیر آموزشی هر درس به دلیل وجود توانایی ذخیره مراحل انجام شده قبلی و استفاده همزمان از تمامی فلش کارتهای کلیه دروس موجود در برنامه.
نرمافزار بانک اطلاعاتی مشاغل (نرمافزار در دست تولید)
کاربردها ی متداول :
1- بانک اطلاعات عمومی مشاغل
2- امکان جستجوی متنوع
3- بروزرسانی فصلی (هر سه ماه یکبار)
4- نیازمندیهای شهری

نرم افزار مرجع اطلاعات حقوقی(در دست تولید)
کاربردها ی متداول :
1- مرجع کاملی از اطلاعات حقوقی به تفکیک نوع قانون
2- مورد استفاده قضات و وکلا
3- مورد استفاده دانشجویان رشته حقوق
4- دفاتر اسناد رسمی

نرم افزار مرجع اطلاعات دارویی(در دست تولید)
کاربردها ی متداول :
1- مرجع کامل اطلاعات دارویی به تفکیک نوع دارو و درمان
2- مورد استفاده پزشکان و پرستاران
3- مورد استفاده دانشجویان پزشکی
4- موارد استفاده و تجویز دارو

نرم افزار آموزش زبان بر اساس سیستم INTERCHANGE
کاربردها ی متداول :
1- متن کامل کتاب (همراه با تصاویر)
2- صوت
3- امکان جستجوی کلمات
4- امکان حل تمرینات به همراه مشاهده پاسخ های صحیح
5- دیکشنری شخصی

نرم افزار گردشکری همراه
کاربردها ی متداول :
1- ارائه کلیه اطلاعات تاریخی،فرهنگی وزیارتی به تفکیک استان و شهر
2- زبان فارسی و انگلیسی
3- صنایع دستی و سوغات
4- موقعیت کامل مکانی

منابع وماخذ:
1- کتاب آموزش جاوا در 21 روز
2- اینترنت
3- کاتالوگ های تبلیغاتی شرکت همراه نرم افزار نوین
4- برخی از مجلات تخصصی نرم افزار های کامپیوتر

1


تعداد صفحات : 120 | فرمت فایل : word

بلافاصله بعد از پرداخت لینک دانلود فعال می شود