<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Iran Developers Network &#187; جاوا &#8211; Java</title>
	<atom:link href="http://www.irandevelopers.com/category/programming/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.irandevelopers.com</link>
	<description>IDN بزرگترین مرجع توسعه دهندگان ایران - آموزش زبانهای برنامه نويسی</description>
	<lastBuildDate>Mon, 23 Aug 2010 08:51:43 +0000</lastBuildDate>
	<language>fa</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>چرا جاوا زبانی جالب است؟</title>
		<link>http://www.irandevelopers.com/programming/java/why-java-2120/</link>
		<comments>http://www.irandevelopers.com/programming/java/why-java-2120/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 19:31:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[جاوا - Java]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/uncategorized/-2120/</guid>
		<description><![CDATA[در یکی از مقالات شرکتSun، زبان جاوا را با این خصوصیات شرح می دهد: جاوا یک زبان ساده، شی گرا، توزیع شده، تفسیر شده، قدرتمند، ایمن، با معماری خنثی، قابل حمل، با عملکرد سطح بالا چند نخ کشی شده و پویا است. Sun تصدیق می کند که به طور قطع این کلمات رشته هایی از [...]]]></description>
			<content:encoded><![CDATA[<p>در یکی از مقالات شرکتSun، زبان جاوا را با این خصوصیات شرح می دهد: جاوا  یک زبان ساده، شی گرا، توزیع شده، تفسیر شده، قدرتمند، ایمن، با معماری  خنثی، قابل حمل، با عملکرد سطح بالا چند نخ کشی شده و پویا است. Sun تصدیق  می کند که به طور قطع این کلمات رشته هایی از واژه های متداول در زبان  برنامه نویسی هستند، اما حقیقت این است که این واژه ها به طور ماهرانه ای  خصوصیات این زبان را شرح می دهند. حال به برخی از خصلت های جاوا در پشت این  واژه ها می پردازیم.</p>
<p>شی گرا Object Oriented :<br />
جاوا یک زبان برنامه  نویسی شی گرا است. برای یک برنامه نویس این به این معنا است که به جای فکر  کردن به قسمت های رویه برنامه، باید به کاربرد داده ها و روش هایی که روی  آن داده ها عمل می کنند، توجه شود.اگر شما به برنامه نویسی با اعلان رویه  در C عادت کرده اید، ممکن است دریابید که به هنگام استفاده از جاوا مجبور  به تغییر در روش و چگونگی برنامه تان هستید. هنگامی که فهمیدید این الگوی  جدید چقدر قدرتمند است، به سرعت با آن هماهنگ می شوید . در یک سیستم شی  گرا، یک کلاس مجموعه ای از داده ها و روش هایی است که روی آن داده عمل می  کنند. همراه بودن داده ها و متد ها رفتار و حالت یک شی را بیان می دارد.  کلاس ها به صورت سلسله مراتبی مرتب شده اند، بنابر این یک زیر کلاس می  تواند رفتار هایی را از کلاس بالاتر به ارث ببرد. یک کلاس سلسله مراتبی  همیشه یک کلاس ریشه دارد که کلاسی است با رفتار های کاملاً عمومی . جاوا به  همراه دسته گسترده ای از کلاس هایی است که در بسته هایی مرتب شده اند و  شما می توانید از آنها در برنامه خود استفاده کنید. یک شی کلاس(in the  java.lang package) به عنوان ریشه کلاس سلسله مراتبی جاوا انجام وظیفه می  کند . درست است که جاوا طوری طراحی شده است که مثل C++ باشد و خاصیت های آن  را داشته باشد، اما هنگامی که با آن کار کنید خواهید فهمید که بسیاری از  پیچیده گی های آن زبان را از بین برده است . اگر شما یک برنامه نویس C++  هستید حتماً لازم است که ساختار های شی گرایی در جاوا را به دقت مطالعه  کنید. اگرچه ترکیب و شیوه دستورات آن تقریباً شبیه C++ است، اما رفتار های  آن خیلی مشابه نیست .<br />
● تفسیر شدهInterpreted :<br />
جاوا یک زبان تفسیر  شده است. کامپایلر جاوا به جای ایجاد کد محلی ماشین، کد بایتی برای ماشین  مجازی جاوا ایجاد می کند. برای اجرای دقیق برنامه، از مفسر جاوا برای اجرای  کد های بایتی کامپایل شده استفاده می شود. به دلیل اینکه کدهای بایتی جاوا  به نوع کامپیوتر بستگی ندارند، برنامه های جاوا می توانند روی هر نوع  کامپیوتری که JVM (Java )Virtual Machine را دارند، اجرا شوند . در محیط  تفسیر شده، مرحله لینک استاندارد توسعه برنامه از دید کاربر پنهان است. اگر  جاوا تنها یک مرحله لینک داشت، فقط بارگذاری کلاس جدید به محیط پردازش می  شد که این خصوصیت با چرخه کامپایل-لینک-اجرا ی آرام و طاقت فرسای زبان هایی  مانند C یا C++ در تضاد است .<br />
● معماری خنثی و قابل حمل:<br />
به دلیل  اینکه برنامه های جاوا در فرمت کد بایتی با معماری خنثی کامپایل شده اند،  برنامه کاربردی جاوا می تواند در هر سیستمی اجرا شود.البته با این شرط که  آن سیستم توانایی پیاده سازی ماشین مجازی جاوا را داشته باشد. این مسأله  تقریباً برای کاربردهای توزیع شده روی اینترنت و یا دیگر شبکه های ناهمگن  مهم است. اما روش معماری خنثی برای کاربردهای بر مبنای شبکه مفید است . به  عنوان یک توسعه دهنده برنامه های کاربردی، در بازار نرم افزاری امروز ممکن  است بخواهید مدل های کاربردی خود را توسعه دهید، به طوری که بتواند رویPc،  مکینتاش و سیستم عامل Unix اجرا شود .با وجود گونه های مختلف Unix Windows  روی Pc و مکینتاش قوی جدید، رفته رفته تولید نرم افزار برای همه انواع این  کامپیوتر ها سخت می شود. اگر شما برنامه تان را در جاوا بنویسید می تواند  روی همه این کامپیوترها اجرا شود. در حقیقت تفسیر شده بودن جاوا و تعریف یک  استاندارد، معماری خنثی داشتن و فرمت کد بایتی آن از بزرگترین دلایل قابل  حمل بودن آن به شمار می آیند .<br />
اما جاوا باز از این هم بیشتر گام برمی  دارد، با اطمینان حاصل کردن از اینکه هیچیک از جنبه های وابستگی اجرایی  زبان را ندارد. برای مثال جاوا به طور صریح اندازه هریک از انواع داده را  تعریف می کند که این با C تفاوت دارد، برای مثال هریک از انواع صحیح می  تواند بسته به نوع کامپیوتر۱۶-۳۲ یا ۶۴ بیت طول داشته باشد . هنگامی که به  صورت تکنیکی امکان نوشتن برنامه های غیر قابل حمل در جاوا فراهم شد،  جلوگیری از چند خاصیت وابسته به نوع کامپیوتر که توسط جاوا API تولید شده و  به طور قطع قابل حمل نوشته شده است، آسان است . یک برنامه جاوا به تولید  کنندگان نرم افزار کمک می کند تا از قابل حمل بودن کد هایشان اطمینان حاصل  کنند. برنامه نویسان فقط برای پرهیز از دام غیر قابل حمل بودن برنامه  احتیاج به یک تلاش ساده دارند که شعار تجارتی شرکتSun را زنده نگهدارند و  آن شعار این است : « یک بار بنویس، همه جا اجرا کن» .<br />
● پویا و توزیع  شده: Dynamic and Distributed<br />
جاوا یک زبان پویا است. هر کلاس جاوا می  تواند در هر زمانی روی مفسر جاوا بارگذاری شود. سپس این کلاس های بارگذاری  شده پویا می توانند به صورت پویا معرفی شوند. حتی کتابخانه کدهای محلی می  تواند به طور پویا بارگذاری شود. کلاس ها در جاوا با کلاس Class فراخوانی  می شوند؛ شما می توانید به طور پویا در مورد یک کلاس در زمان اجرا اطلاعاتی  بدست بیاورید. این خصوصیت در جاوا به طور درستی موجود است. با وجود بازتاب  API اضافه شده (Application Program Interface) که به برنامه ساز امکان می  دهد که با برنامه از طریق یک برنامه کاربردی دیگر ارتباط برقرار کند .  جاوا حتی با نام زبان توزیع شده نیز خوانده می شود. به طور ساده این به این  معنا است که این زبان پشتیبانی سطح بالایی برای شبکه به وجود می آورد.  برای مثال کلاس URL و کلاس های مرتبط با آن در بسته ava.net، خواندن فایل  های دوردست را به همان سادگی خواندن فایل های محلی کرده است. به طور مشابه  در جاوا ۱‎/،۱ احضار روش کنترلی RMI (RemoteMethod Invocation)، API به یک  برنامه جاوا اجازه می دهد که روش هایی از اشیاء دور دست جاوا را به همان  صورتی که اگر آن اشیاء محلی بودند آنها را می خواند، بخواند .(جاوا حتی از  سیستم شبکه ای سطح پایین که شامل آدرس مقصد و مسیر جریانی که توسط سوکت ها  متصل شده است، نیز پشتیبانی می کند). طبیعت توزیع شده جاوا زمانیکه با  امکانات پویای بارگذاری کلاس همراه می شود، واقعاً درخشنده است. این  خصوصیات با هم این امکان را برای مفسر جاوا به وجود می آورند که کدها را از  اینترنت بارگذاری و اجرا کند. (همان طور که بعداً خواهیم دید جاوا باعث می  شود که با وجود ابزار قدرتمند و ایمن این کار به طور مطمئن انجام شود).  این چیزی است که در هنگام بارگذاری و اجرای یک برنامه کاربردی از اینترنت  توسط مرورگر وب، اتفاق می افتد. اما داستان پیچیده تر از این هم می تواند  باشد. تصور کنید یک پردازشگر کلمه چند رسانه ای در جاوا نوشته شده است.  وقتی از این برنامه پرسیده می شود که چند نوع از داده هایی را که قبلاً  هرگز وارد نشده را نمایش دهد، ممکن است به طور دینامیکی یک کلاس را که می  تواند داده را شناسایی کند، از شبکه بارگذاری کند و بعد کلاس دیگری را که  بتواند داده را از درون یک پوشه ترکیبی بخواند ، باز به طور دینامیکی  بارگذاری می کند.<br />
● ساده Simple :<br />
جاوا یک زبان ساده است. طراحان  جاوا سعی در این داشتند تا زبانی به وجود بیاورند که برنامه نویسان بتوانند  به سرعت آن را یاد بگیرند. بنابراین تعداد ساختارهای این زبان تقریباً کم  است. هدف دیگر طراحی این زبان این بود که به منظور راحتی انتقال آن، آن را  طوری طراحی کنند که برای عده زیادی از برنامه نویسان آشنا باشد. اگر شما یک  برنامه نویس C یا C++ هستید، خواهید فهمید که جاوا از بسیاری از ساختار  های C و C++ استفاده می کند . برای اینکه این زبان را هم به طور ساده و هم  آشنا و ملموس و هم کوچک نگه دارند بسیاری از خصوصیات C و C++ را در آن حذف  کردند. اینها خصوصیاتی بودند که باعث می شدند برنامه نویسی ضعیفی صورت  بگیرد یا آنهایی بودند که به ندرت در برنامه استفاده می شدند. برای مثال  جاوا از دستور goto استفاده نمی کند، در عوض از دستورهای break، continue  در مواقع نیاز استفاده می کند. جاوا از سر فایل ها(header files) استفاده  نمی کند و پردازشگر C را هم حذف کرده است. به این دلیل که جاوا یک زبان شی  گرا است، ساختارهای C مثل struct، union از آن برداشته شده است. جاوا حتی  بارگذاری مجدد و خواص چندگانه ارث بری از C++ را هم حذف کرده است. شاید مهم  ترین پارامتر ساده بودن جاوا عدم استفاده این زبان از اشاره گرها باشد.  اشاره گرها یکی از بیشترین موجودیت های دردسرساز در C، C++ هستند. چون جاوا  ساختمان ندارد و آرایه ها و رشته ها اشیاء آن هستند، بنابراین احتیاجی به  اشاره گر نیست. جاوا به طور خودکار آدرس دهی و دسترسی به محتوای موجود در  یک آدرس را برای شما انجام می دهد.<br />
● قدرتمند Robust:<br />
جاوا برای  نوشتن نرم افزارهای قدرتمند و بسیار ایمن ساخته شده است. جاوا هنوز هم به  طور قطع نرم افزار ها را تضمین نمی کند. تقریباً هنوز هم امکان نوشتن  برنامه های مشکل ساز در جاوا وجود دارد، هرچند که جاوا برخی از انواع مشخص  خطاهای برنامه نویسی را حذف کرده که به طرز چشمگیری نوشتن نرم افزارهای  ایمن را آسان تر کرده است . جاوا یک زبان تایپ شده قدرتمند است، که اجازه  چک شدن مشکلات و خطاهای تایپی را در زمان کامپایل می دهد. جاوا بسیار قویتر  از C++ تایپ شده است که بسیاری از خصوصیات انعطاف پذیر در زمان کامپایل را  از C به ارث برده است. مخصوصاً هنگام اعلان توابع، جاوا به مدل اعلان صریح  احتیاج دارد. این مسأله ما را از اینکه کامپایلر می تواند خطاهای زمان  اعلان را بدست آورد، مطمئن می کند. مسأله ای که منجر به ایجاد برنامه های  ایمن تری می شود. یکی از چیزهایی که باعث شده که جاوا ساده باشد عدم وجود  اشاره گر ها ومحاسبات بر روی آنها است. این ویژگی حتی قدرت جاوا را هم با  از میان بردن یک کلاس سراسری اشاره گر افزایش می دهد.<br />
● ایمن Secure:<br />
یکی  از دلایل پرطرفدار بودن جاوا این است که یک زبان ایمن است. این ویژگی  مخصوصاً به خاطر طبیعت توزیع شده آن بسیار مهم است. بدون وجود امنیت شما  قطعاً نمی خواهید که یک کد را از یک سایت تصادفی اینترنت بارگذاری کنید و  به آن اجازه اجرا شدن روی کامپیوتر خودتان را هم بدهید. این دقیقاً همان  چیزی است که مردم هرروز با یک کد جاوا انجام می دهند. جاوا به صورت ایمن  طراحی شده و چندین لایه کنترل امنیت به وجود می آورد که شما را در برابر کد  های خطرساز محافظت می کنند و به کاربر اجازه می دهد که برنامه های  ناشناخته را با خیال راحت اجرا کند . کدهای بایتی خراب یا خطرساز ممکن است  از ضعف های اجرایی در مفسر جاوا سوءاستفاده کنند. لایه ای که در اینجا ما  را به طور ایمن محافظت می کند، مدل جعبه شنی (Sand box) است: کدهای  ناشناخته در یک جعبه شنی قرار می گیرند جایی که می توانند به صورت ایمن  اجرا شوند، بدون اینکه هیچ صدمه ای به بقیه اجزا یا محیط جاوا بزنند . وقتی  یک برنامه کاربردی یا دیگر کدهای ناشناخته در جعبه شنی در حال اجرا است،  چند محدودیت در مورد کاری که می تواند انجام دهد، وجود دارد. واضح ترین این  محدودیت ها این است که هیچ دسترسی به هیچ یک از فایل های محلی سیستم وجود  ندارد. در جعبه شنی محدودیت دیگری هم وجود دارد که به وسیله کلاس مدیریت  امنیت اعمال می شود. این مدل در ابتدا از اینکه سیستم های امنیتی را نصب  کرده اید یا نه، مطمئن می شود، چرا که همه کلاسهای جاوا نیاز به عملیات  حساسی مانند دسترسی به سیستم فایل را دارند. اگر فراخوانی به وسیله یک کد  ناشناخته به صورت مستقیم یا غیر مستقیم انجام شد، مدیر امنیت مورد استثنا  را می فرستد و عملیات صورت نمی گیرد . و سرانجام در جاوا ۱‎/۱ یک راه حل  ممکن دیگر برای مشکلات امنیتی وجود دارد، به وسیله ضمیمه کردن یک امضای  دیجیتالی به کد جاوا که اصل آن کد می تواند به صورت پنهانی و نهفته ساخته  شود. اگر شما اعتماد خود را به یک شخص یا یک سازمان مشخص کرده باشید، کدی  که امضای آن هویت مورد اعتماد روی آن قرار دارد، ایمن و مطمئن است. حتی  زمانیکه در حال بارگذاری شدن در شبکه است و ممکن است حتی بدون جلوگیری توسط  جعبه شنی اجرا شود.<br />
● عملکرد سطح بالا High Performance :<br />
جاوا یک  زبان تفسیر شده است، بنابر این هرگز به سرعت زبان کامپایل شده ای مثل C  نخواهد بود. کد C کامپایل شده ۱۰ برابر سریع تر از کد های تفسیر شده جاوا  اجرا می شود. اما قبل از اینکه به خاطر این موضوع مأیوس شوید، آگاه باشید  که این سرعت بیشتر از آن چیزی است که برای برنامه های پرسرعت، کاربردهایGUI  (Graphical User Interface)، برنامه های برمبنای شبکه، جایی که برنامه  کاربردی معمولاً آماده برای اجرا شدن است، انتظار برای کاربر که یک دستوری  اعمال کند و یا انتظار برای دریافت از شبکه، لازم است. به علاوه قسمت هایی  که به سرعت های بالا نیاز دارند، که کارهایی از قبیل الحاق رشته ها و  مقایسه را انجام می دهند، با کد محلی جاوا اجرا می شوند . علاوه بر این  کارایی، بسیاری از مفسرهای جاوا اکنون شامل کامپایلرهای فقط در زمان « just  in time » نیز هستند که می تواند کدهای بایتی جاوا را برای هر نوعCPU در  زمان اجرا به کد ماشین ترجمه کند. اگر شما خواهان این هستید که قابل حمل  بودن کد ها را قربانی بهبود در سرعت آن کنید، می توانید بخش قابل توجهی از  برنامه خود را در C و C++ بنویسید و از روش های مخصوص جاوا برای مشترک کردن  با این کد محلی جاوا استفاده کنید.<br />
● چند نخ کشی شده Multitbreaded:<br />
در  یک برنامه کاربردی بر مبنای GUI شبکه ای، مثل مرورگر وب، تصور اینکه چند  چیز بتوانند به طور همزمان اجرا شوند، آسان است. یک کاربر می تواند همزمان  با اینکه دارد یک صفحه وب را می خواند به یک کلیپ صوتی گوش دهد و همزمان در  پس زمینه مرورگر یک عکس را بارگذاری کند. جاوا یک زبان چندنخ کشی شده است،  که از چندین رشته اجرایی (گاهی پردازش سبک وزن خوانده می شود) پشتیبانی می  کند و می تواند چندین کار را انجام دهد. یکی از مزیت های چندنخ کشی شده  این است که عملکرد سطح بالایی برای کاربردهای گرافیکی برای کاربر فراهم می  کند. اگر شما سعی کرده اید که با نخ ها در C و C++ کار کنید، می دانید که  کمی مشکل است. جاوا برنامه نویسی با نخ را بسیار آسان کرده است، با به وجود  آوردن زبان درون ساخته شده که از نخ ها پشتیبانی می کند. بسته jana.lang  یک کلاس بوجود آورده است که از روش هایی برای شروع و پایان یک نخ و مرتب  کردن ترتیب گره ها در میان چیزهای دیگر، پشتیبانی می کند.به دلیل اینکه  جاوا استفاده از نخ ها را بسیار ساده می کند، کلاس جاوا در شماری از جاها  از این نخ ها استفاده می کند. برای مثال هر برنامه کاربردی که انیمیشن اجرا  می کند، از نخ ها استفاده کرده است.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/java/why-java-2120/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>عمومی سازی و بومی سازی در جاوا قسمت دوم</title>
		<link>http://www.irandevelopers.com/programming/javalocalizationp28712011256-1492/</link>
		<comments>http://www.irandevelopers.com/programming/javalocalizationp28712011256-1492/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 09:26:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[جاوا - Java]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=1492</guid>
		<description><![CDATA[۶- نمایش اعداد ۱٫۶- استفاده از فرمتهای از پیش تعریف شده با فراخوانی متدهای موجود در کلاس NumberFormat می‌توان رشته‌های حاوی اعداد، مقادیر پولی و علامت درصد را برای یک منطقه جغرافیایی خاص نمایش داد. ۱٫۱٫۶- اعداد با استفاده از متدهای کلاس NumberFormat می‌توان چگونگی نمایش اعداد از نوع double را تعریف کرد. مثال زیر [...]]]></description>
			<content:encoded><![CDATA[<div class="articleBody"><strong>۶- نمایش اعداد</strong></p>
<p><strong>۱٫۶- استفاده از فرمتهای از پیش تعریف  شده</strong><br />
با فراخوانی متدهای موجود در کلاس NumberFormat می‌توان رشته‌های حاوی  اعداد، مقادیر پولی و علامت درصد را برای یک منطقه جغرافیایی خاص نمایش داد.</p>
<p><strong>۱٫۱٫۶- اعداد</strong><br />
با استفاده از متدهای کلاس NumberFormat  می‌توان چگونگی نمایش اعداد از نوع double را تعریف کرد. مثال زیر یک عدد اعشاری را  با توجه به منطقه تعریف شده نمایش میدهد:</p>
<pre class="Code">Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String amountOut;

numberFormatter = NumberFormat.getNumberInstance(currentLocale);
amountOut = numberFormatter.format(amount);
System.out.println(amountOut + " " + currentLocale.toString());</pre>
<p>متد getNumberInstance الگوی نمایش منطقه مورد نظر را در صورت وجود  برمیگرداند. خروجی مثال برای چندین منطقه مختلف:</p>
<pre class="Code">۳۴۵ ۹۸۷,۲۴۶  fr_FR
345.987,246  de_DE
345,987.246  en_US</pre>
<p><strong>2.1.6- پول</strong><br />
اگر برنامه شما تجاری باشد، شما ممکن است نیاز  داشته باشید اعداد یا مقادیر پولی را نمایش دهید. مشابه اعداد، مقادیر پولی را نیز  می‌توان با توجه به یک منطقه خاص نمایش داد، با این تفاوت که متد  getCurrencyInstance الگوی نمایش منطقه مورد نظر را برمی‌گرداند.</p>
<pre class="Code">Double currency = new Double(9876543.21);
NumberFormat currencyFormatter;
String currencyOut;

currencyFormatter = NumberFormat.getCurrencyInstance(currentLocale);
currencyOut = currencyFormatter.format(currency);
System.out.println(currencyOut + " " + currentLocale.toString());</pre>
<p>خروجی مثال برای چندین منطقه مختلف:</p>
<pre class="Code">۹ ۸۷۶ ۵۴۳,۲۱ F   fr_FR
9.876.543,21 DM  de_DE
$9,876,543.21    en_US</pre>
<p>در نگاه اول ممکن است خروجی برنامه اشتباه به نظر برسد، چراکه مقادیر  عددی با هم یکسانند، البته <span dir="ltr">۹۸۷۶۵۴۳,۲۱F</span> و <span dir="ltr">۹٫۸۷۶٫۵۴۳٫۲۱ DM</span> یکی نیست. بخاطر داشته باشید که کلاس NumberFormat  از نرخهای ارزی بی اطلاع است. بنابراین متدهای کلاس NumberFormat تنها نمایش مقادیر  را برعهده دارند و عمل تبدیل ارزها به یکدیگر را انجام نمی‌دهند.</p>
<p><strong>۳٫۱٫۶- درصد</strong><br />
برای نمایش علامت درصد (%) برای یک منطقه خاص در  کلاس NumberFormat متد getPercentInstance تعریف شده است. برای مثال مقدار ۰٫۷۵  بصورت ۷۵% نمایش داده می شود. مثال:</p>
<pre class="Code">Double percent = new Double(0.75);
NumberFormat percentFormatter;
String percentOut;

percentFormatter = NumberFormat.getPercentInstance(currentLocale);
percentOut = percentFormatter.format(percent);</pre>
<p><strong>2.6- فرمتهای سفارشی</strong><br />
از کلاس DecimalFormat می‌توان برای  تعریف چگونگی نمایش اعداد برای یک منطقه یا کشور خاص استفاده کرد. این کلاس امکان  تعریف صفرهای قبل و بعد از اعداد، جداکننده دسیمال (،)، علامت درصد (%)، علامت نقطه  اعشاری (/)، علامت پول و هر پسوند یا پیشوند دیگر را به شما می دهد. البته برای  تغییر علامت جداکننده ها می‌توان از کلاس DecimalFormatSymbols نیز در کنار  DecimalFormat کمک گرفت.</p>
<p><strong>۳٫۶- ساختن الگو</strong><br />
با تعریف الگو  می‌توان چگونگی نمایش اعداد را کنترل نمود، این الگو در قالب یک رشته تعریف می شود.  جدول زیر لیستی از کاراکترهای مورد نیاز برای تعیین الگو را نشان می دهد.</p>
<table border="0" cellspacing="1" cellpadding="2" width="310" align="center">
<tbody>
<tr bgcolor="#eeeeee">
<td align="middle"><strong>علامت</strong></td>
<td align="right"><strong>شرح</strong></td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">۰</td>
<td align="right">عدد صفر</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">#</td>
<td align="right">عدد</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">,</td>
<td align="right">جداکننده اعشاری</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">E</td>
<td align="right">جدا کننده مانتیس و توان در اعداد نمایی</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">;</td>
<td align="right">جدا کننده فرمتها</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">-</td>
<td align="right">پیشوند اعداد منفی</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">%</td>
<td align="right">علامت درصد (با ضرب در عدد ۱۰۰)</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">X</td>
<td align="right">هر کاراکتر دیگری که در پسوند و پیشوند استفاده شود</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">‘</td>
<td align="right">برای آوردن کاراکترهای خاص در پسوند و  پیشوند</td>
</tr>
</tbody>
</table>
<p>کد زیر چگونگی تعریف الگو برای کلاس  DecimalFormat را نشان میدهد:</p>
<pre class="Code">DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);</pre>
<p>جدول زیر چند نمونه از تعریف الگو و خروجی آن را نشان می دهد:</p>
<table border="0" cellspacing="1" cellpadding="2" align="center">
<tbody>
<tr bgcolor="#eeeeee">
<td width="75" align="middle"><strong>مقدار</strong></td>
<td width="135" align="middle"><strong>الگو</strong></td>
<td width="75" align="middle"><strong>خروجی</strong></td>
<td align="middle"><strong>توضیح</strong></td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle" valign="top"><span dir="ltr">۱۲۳۴۵۶٫۷۸۹</span></td>
<td align="middle" valign="top"><span dir="ltr">###,###.###</span></td>
<td align="middle" valign="top"><span dir="ltr">۱۲۳,۴۵۶٫۷۸۹</span></td>
<td align="right">علامت (#) نشان دهنده عدد، علامت (,) جداکننده دسیمال و علامت (.)  جداکننده اعشاری</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle" valign="top"><span dir="ltr">۱۲۳۴۵۶٫۷۸۹</span></td>
<td align="middle" valign="top"><span dir="ltr">###,##</span></td>
<td align="middle" valign="top"><span dir="ltr">۱۲۳۴۵۶٫۷۹</span></td>
<td align="right">عدد مورد نظر دارای سه رقم اعشار است در حالیکه الگو دو رقم اعشار  تعریف کرده است. بنابراین نتیجه حاصل گرد می شود.</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle" valign="top"><span dir="ltr">۱۲۳٫۷۸</span></td>
<td align="middle" valign="top"><span dir="ltr">۰۰۰۰۰۰٫۰۰۰</span></td>
<td align="middle" valign="top"><span dir="ltr">۰۰۰۱۲۳٫۷۸۰</span></td>
<td align="right">طبق الگو قبل و بعد از عدد به اندازه صفرهای تعریف شده، عدد صفر  قرار می گیرد.</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle" valign="top"><span dir="ltr">۱۲۳۴۵٫۶۷</span></td>
<td align="middle" valign="top"><span dir="ltr">$###,###.###</span></td>
<td align="middle" valign="top"><span dir="ltr">$۱۲,۳۴۵٫۶۷</span></td>
<td align="right">علامت دلار ($) بعنوان پیشوند تعریف شده است.</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle" valign="top"><span dir="ltr">۱۲۳۴۵٫۶۷</span></td>
<td align="middle" valign="top"><span dir="ltr">\u00A5###,### .###</span></td>
<td align="middle" valign="top"><span dir="ltr">¥۱۲,۳۴۵٫۶۷</span></td>
<td align="right">علامت ین (¥) با استفاده از مقدار یونی کد U+00A5</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle" valign="top"><span dir="ltr">12345.67</span></td>
<td align="middle" valign="top"><span dir="ltr">###,###.###\uE816</span></td>
<td align="middle" valign="top"><span dir="ltr">ریال۱۲,۳۴۵٫۶۷</span></td>
<td align="right">کلمه ریال با استفاده از مقدار یونی کد  U+E816</td>
</tr>
</tbody>
</table>
<p><strong>7- فارسی سازی در  جاوا</strong></p>
<p><strong>۱٫۷- تاریخ هجری شمسی</strong><br />
تقویم هجری شمسی در ایران و نواحی  اطراف مانند افغانستان، جمهوری های آسیای مرکزی و کردهای بین النهرین به طور رسمی  استفاده میگردد. تقویم جلالی بخاطر اقدام جلال الدین ملکشاه سلجوقی که توسط شاعر و  ریاضیدان بزرگ ایرانی عمر خیام در اواخر قرن پنجم به تصحیح تقویم هجری شمسی همت  گمارد، نامگذاری شد. تقویم گریگوری نیز از نام پاپ گریگوری هشتم که آخرین تغییرات  را در سال ۱۵۸۲ ب.م. در تقویم میلادی ایجاد کرد، گرفته شده است. طول سال در این دو  تقویم کم و بیش به یک اندازه است، اما براساس روش‌های کاملا متفاوتی پایه گذاری  شده‌اند.</p>
<p>تقویم جلالی دارای خصوصیتی طبیعی وکلی است. این تقویم تمام چهار  فصل سال را با آغازی مصادف با اولین روز بهار (در نیمکره شمالی) در بر میگیرد.  همچنین این تقویم دارای یک قانون منظم (نه یکنواخت) برای روزهای ماه است. شش ماه  اول هر سال ۳۱ روز و شش ماه دوم در سال‌های کبیسه ۳۰ روز میباشد، در غیر اینصورت  ماه آخر سال ۲۹ روزه خواهد بود. تقویم جلالی تقریبا&#8221; با سیستم رایج زودیاک (Zodiac  System) غرب تطابق دارد.</p>
<p>در این دو مورد تقویم گریگوری با تقویم جلالی  دارای اختلافاتی است. در این تقویم ارتباطی بین سال و فصل‌ها وجود ندارد. به طور  قراردادی، تعداد روزها در هفت ماه سال ۳۱ روز، در چهار ماه ۳۰ روز و یک ماه در سال  به طور نامنظم ۲۸ یا ۲۹ روز است.</p>
<p>علاوه بر این، تقویم جلالی از حرکت وضعی  زمین (حرکت زمین به دور خورشید) تبعیت میکند. یک سال خورشیدی تقریبا معادل ۳۶۵ روز،  ۵ ساعت و ۴۹ دقیقه است. بر اساس تقویم جلالی، آغاز سال (تحویل سال) زمانی است که  خورشید از نیمکره جنوبی به سمت نیمکره شمالی از روی خط استوا میگذرد. حال اگر لحظه  تحویل سال قبل از ظهر (به وقت تهران) باشد، سال جدید (اول فروردین ماه) از همان روز  آغاز میشود. در غیر اینصورت، آغاز سال نو روز بعد خواهد بود. در این روش (به طور  تقریبی) در هر ۳۳ سال، ۸ سال کبیسه تعیین میگردد. سالهای کبیسه، سال‌هایی هستند که  پس از تقسیم بر ۳۳ باقیمانده آنها ۶، ۲۲، ۱۷، ۱۳، ۹، ۵، ۱ و ۳۰ باشد. بعنوان مثال،  چنانچه ۱۳۷۰ را به ۳۳ تقسیم کنیم، باقیمانده ۱۷ خواهد بود پس سال ۱۳۷۰ سال کبیسه  است. سال کبیسه بعدی سال ۱۳۷۵ میباشد –با چهار فاصله– در صورتیکه به طور معمول  فاصله بین دو سال کبیسه ۳ سال است.</p>
<p>تقویم گریگوری از روش ساده‌ای استفاده  کرده که دارای اختلافاتی با سال طبیعی میباشد. در این روش هر چهار سال یکبار سال  کبیسه خواهد بود، مگر سال‌هایی که قابل قسمت به ۱۰۰ باشند، اما بر ۴۰۰ نباشند. در  نتیجه سال ۲۰۰۰ سال کبیسه است (از آنجایی که بر ۴۰۰ قابل قسمت است) اما سال ۲۱۰۰  کبیسه نیست.</p>
<p>مواردیکه در مبحث تاریخ هجری شمسی بایستی در نظر گرفته شوند  عبارتند از:</p>
<ul>
<li>محاسبه سالهای کبیسه</li>
<li>تبدیل تاریخ میلادی به تاریخ هجری شمسی</li>
<li>تبدیل تاریخ هجری شمسی به تاریخ میلادی</li>
<li>نمایش تاریخ شمسی به شکلهای مختلف (کوتاه، کامل)</li>
<li>تابع چک کننده تاریخ هجری شمسی</li>
<li>Persian Date Taglib</li>
</ul>
<p><strong>2.7- تقویم هجری شمسی</strong><br />
مواردیکه در  مبحث تقویم هجری شمسی بایستی لحاظ شود عبارتست از:</p>
<ul>
<li>تفکیک مقادیر سال، روز، ماه برای تاریخ تعیین شده</li>
<li>مشخص کردن روز هفته/ اولین روز هفته / اولین روز ماه</li>
<li>قابلیت تغییر تاریخ با متدهای roll و add</li>
<li>Persian Calendar Taglib</li>
</ul>
<p><strong>3.7- نمایش اعداد</strong><br />
همانطور که  قبلا&#8221; گفته شد می‏توان از متدهای تعریف شده در کلاسهای NumberFormat و  DecimalFormat برای نمایش اعداد، مقادیر پولی و درصد استفاده کرد.</p>
<p><strong>۴٫۷- بانک اطلاعاتی</strong></p>
<ul dir="ltr">
<li>Database Character-Set (1252, 1256)</li>
<li>Sorting (Sequence Order)</li>
<li>JDBC Driver</li>
<li>Middle Conversion</li>
<li>Communication with Application Server</li>
</ul>
<p><strong>5.7- صفحات  HTML/JSP</strong></p>
<ul dir="ltr">
<li>Character Encoding</li>
<li>Page Direction (Right to Left / Left to Right)</li>
<li>Text Wrapping</li>
<li>Language</li>
</ul>
<p><strong>مثالهای کاربردی</strong><br />
۱- استفاده از Resource  Bundle برای فارسی سازی<br />
۱٫۱- تعریف MessagesBundle_ar_SA.properties</p>
<pre class="Code">label.login.userName=شناسه کاربر
label.login.password=رمزعبور

button.login=ورود
button.cancel=انصراف

label.calendar.date=تاریخ
label.calendar.year=سال
label.calendar.month=ماه
label.calendar.day=روز

label.calendar.pm= ب.ظ
label.calendar.am= ق.ظ</pre>
<p>۱٫۲- استفاده از Resource Bundle در JSP</p>
<pre class="Code">&lt;%@ page contentType="text/html;charset=1256"
         import="java.util.Locale,
         java.util.ResourceBundle"
%&gt;

&lt;%
   Locale locale = new Locale("ar", "SA");
   ResourceBundle msgs = ResourceBundle.getBundle("MessagesBundle", locale);
%&gt;

&lt;HTML lang="ar"&gt;
  &lt;HEAD&gt;
    &lt;TITLE&gt;Login Form &lt;/TITLE&gt;
    &lt;META http-equiv="Content-Type" content="text/html; charset=windows-1256"&gt;
   &lt;/HEAD&gt;
  &lt;BODY&gt;

    &lt;%=msgs.getString("label.login.userName")%&gt;
    &lt;%=msgs.getString("label.login.password")%&gt;

  &lt;/BODY&gt;
&lt;/HTML&gt;</pre>
<p>3.1- استفاده از Resource Bundle در Servlet</p>
<pre class="Code">import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import java.util.ResourceBundle;
import java.util.Locale;

public class I18NServlet extends HttpServlet {

  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

    Locale locale = new Locale("ar", "SA");
    ResourceBundle msgs = ResourceBundle.getBundle("MessagesBundle", locale);

    PrintWriter out = response.getWriter();
    out.println(msgs.getString("label.calendar.date")
      + ":" +  new java.util.Date());

    out.close();
  }
}</pre>
<p>2- نمایش مقادیر عددی<br />
۱٫۲- استفاده از فرمتهای از پیش تعریف شده</p>
<pre class="Code">static public void displayNumber(Locale currentLocale) {

  Integer quantity = new Integer(123456);
  Double amount = new Double(345987.246);
  NumberFormat numberFormatter;
  String quantityOut;
  String amountOut;

  numberFormatter = NumberFormat.getNumberInstance(currentLocale);
  quantityOut = numberFormatter.format(quantity);
  amountOut = numberFormatter.format(amount);
  System.out.println(quantityOut + " " + currentLocale.toString());
  System.out.println(amountOut + " " + currentLocale.toString());
}</pre>
<pre class="Code">static public void displayCurrency(Locale currentLocale) {

  Double currency = new Double(9876543.21);
  NumberFormat currencyFormatter;
  String currencyOut;

  currencyFormatter = NumberFormat.getCurrencyInstance(currentLocale);
  currencyOut = currencyFormatter.format(currency);
  System.out.println(currencyOut + " " + currentLocale.toString());
}</pre>
<pre class="Code">static public void displayPercent(Locale currentLocale) { 

  Double percent = new Double(0.75);
  NumberFormat percentFormatter;
  String percentOut;

  percentFormatter = NumberFormat.getPercentInstance(currentLocale);
  percentOut = percentFormatter.format(percent);
  System.out.println(percentOut + " " + currentLocale.toString());
}</pre>
<p>2.2- تعریف الگوی جدید</p>
<pre class="Code">static public void customFormat(String pattern, double value) {
  DecimalFormat myFormatter = new DecimalFormat(pattern);
  String output = myFormatter.format(value);
  System.out.println(value + " " + pattern + " " + output);
} 

customFormat("###,###.###", 123456.789);
customFormat("###.##", 123456.789);
customFormat("000000.000", 123.78);
customFormat("$###,###.###", 12345.67);
customFormat("\u00a5###,###.###", 12345.67);
customFormat("###,###/###\ue816", 12345.67);</pre>
<p>3- تنظیمات فارسی در صفحات HTML<br />
3.1- تعریف زبان و Code Page</p>
<pre class="Code">&lt;HTML lang="fa"&gt;
  &lt;HEAD&gt;
    &lt;META content="text/html; charset=windows-1256" http-equiv="Content-Type"&gt;
    &lt;META content="fa" http-equiv="Content-Language"&gt;
  &lt;/HEAD&gt;

  ...
&lt;/HTML&gt;</pre>
<pre class="Code">&lt;HTML&gt;
  &lt;HEAD&gt;
    &lt;META content="text/html; charset=UTF-8" http-equiv="Content-Type"&gt;
    &lt;META content="fa" http-equiv="Content-Language"&gt;
  &lt;/HEAD&gt;

  ...
&lt;/HTML&gt;</pre>
<p>2.3- راست به چپ صفحات</p>
<pre class="Code">&lt;HTML dir="rtl"&gt;
   ...
&lt;/HTML&gt;</pre>
<p>3.3- Text Wrapping</p>
<pre class="Code">&lt;TD nowrap&gt;
...
&lt;/TD&gt;</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/javalocalizationp28712011256-1492/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>عمومی سازی و بومی سازی در جاوا</title>
		<link>http://www.irandevelopers.com/programming/javalocalizationp18712011252-1488/</link>
		<comments>http://www.irandevelopers.com/programming/javalocalizationp18712011252-1488/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 09:25:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[جاوا - Java]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=1488</guid>
		<description><![CDATA[۱- مقدمه عمومی سازی به فرآیند طراحی یک نرم افزار بمنظور تطبیق با زبانها و کشورهای مختلف بدون نیاز به تغییر در کد برنامه گفته می‌شود. یک برنامه عمومی شده دارای مشخصات زیر است: در کنار یکسری اطلاعات بومی شده، برنامه می تواند در هر کشور و به هر زبانی اجرا شود. عناصر متنی مانند [...]]]></description>
			<content:encoded><![CDATA[<p><strong>۱- مقدمه</strong><br />
عمومی سازی به فرآیند طراحی یک نرم افزار بمنظور تطبیق با  زبانها و کشورهای مختلف بدون نیاز به تغییر در کد برنامه گفته می‌شود. یک برنامه  عمومی شده دارای مشخصات زیر است:</p>
<ul>
<li>در کنار یکسری اطلاعات بومی شده، برنامه می تواند در هر کشور و به هر زبانی  اجرا شود.</li>
<li>عناصر متنی مانند پیغامها و عنوان اجزا رابط کاربر، در داخل کد برنامه (hard  coding) مشخص نمی‌شوند، بلکه در یک منبع خارج از کد برنامه ذخیره و بصورت دینامیک  بازیابی می‌شوند.</li>
<li>پشتیبانی از زبانهای جدید بدون نیاز به کامپایل مجدد برنامه.</li>
<li>اطلاعات حساس به منطقه جغرافیایی از قبیل تاریخ، پول و اعداد مطابق با  استانداردهای تعریف شده در کشور کاربر نهایی نمایش داده می‌شود.</li>
<li>به آسانی قابل بومی سازی است.</li>
</ul>
<p>بومی سازی به فرآیند تطبیق نرم  افزار برای یک منطقه یا زبان خاص با اضافه کردن اجزا مربوط به آن منطقه و نیز ترجمه  پیغامها گفته می‌شود. معمولا&#8221; بیشترین زمان فاز بومی سازی صرف ترجمه متن می‌شود .  سایر اطلاعات از قبیل صدا و تصویر در صورت نیاز بومی سازی می‌شود. تیم بومی ساز نرم  افزار همچنین امکان نمایش اطلاعاتی از قبیل تاریخ، اعداد و پول را برای یک منطقه  خاص فراهم می آورند.</p>
<p><strong>۱٫۱- Internationalization</strong><br />
عمومی سازی  در حوزه برنامه نویسی عبارتست از فرآیند طراحی و نوشتن یک برنامه بطوریکه بتوان  بصورت سراسری و در کشورهای مختلف از آن استفاده کرد.</p>
<p>یک برنامه عمومی شده  قابلیت پشتیبانی زبانهای مختلف و پارامترهای وابسته مانند تاریخ، زمان، پول و&#8230; را  بدون نیاز به تغییر کد برنامه دارا می‌باشد. این ایده تحت عنوان (soft coding) یا  جداسازی اجزاء رابط کاربر از کد منطق برنامه نیز مطرح می‌شود.</p>
<p><img class="alignnone size-full wp-image-1489" title="11113" src="http://www.irandevelopers.com/wp-content/uploads/2009/02/11113.jpg" alt="11113 عمومی سازی و بومی سازی در جاوا" width="382" height="333" /></p>
<p>به  جای کلمه Internationalization از مخفف آن I18N استفاده می‌شود. توضیح اینکه بین  کاراکترهای شروع و پایان این کلمه ۱۸ کاراکتر وجود دارد. بنابراین برای سهولت از  کلمه I18N و همچنین از I18N&#8217;d به جای Internationalizationed استفاده می‌شود.</p>
<p><strong>۲٫۱- Localization</strong><br />
بومی‌سازی به فرآیند طراحی و پیاده‌سازی  یک نرم افزار با قابلیت تطابق با یک زبان، فرهنگ، کشور و منطقه خاص گفته می‌شود.  بسیاری از برنامه‌های نوشته شده برای یک کشور یا منطقه خاصی تنها در آن محدوده  جغرافیائی قابل استفاده‌ می‌باشند.</p>
<p>به جای کلمه Localization از مخفف آن  L10N نیز استفاده می‌شود.</p>
<p><img class="alignnone size-full wp-image-1490" title="22223" src="http://www.irandevelopers.com/wp-content/uploads/2009/02/22223.jpg" alt="22223 عمومی سازی و بومی سازی در جاوا" width="339" height="243" /></p>
<p>برای  مثال یک بسته نرم افزاری حسابداری یا مالی که برای کشورهای آمریکا، کانادا، مکزیک و  برزیل نوشته می‌شود، بایستی قابلیت بومی سازی برای پشتیبانی نوع نمایش و گزارشات،  قوانین و پارامترهای مرتبط مانند تاریخ، زمان و پول هر کشور را داشته باشد.</p>
<p><strong>۲- عمومی سازی و بومی سازی در زبان جاوا</strong><br />
برخلاف سایر زبانهای  برنامه‌نویسی، برنامه‌نویسان جاوا از امکانات و قابلیت‌های خوبی برای I18N برخوردار  هستند.</p>
<p><strong>۱٫۲- پشتیبانی یونی‌کد (Unicode Support)</strong><br />
کاراکترست  (Character Set) زبان جاوا بر مبنای یونی‌کد (Unicode) است، بدین منظور نوع داده‌ای  char برای تطابق با یونی‌کد، دو بایتی (۱۶ بیت) در نظر گرفته شده است. بنابراین نوع  داده‌ای String که با استفاده از char ساخته می‌شود نیز یونی‌کد را پشتیبانی  می‌کند. یونی‌کد طوری تعریف شده است که مقادیر ۰ تا ۱۲۷ برای استاندارد ASCII و ۰  تا ۲۵۵ برای استاندارد <span dir="ltr">ISO 8859-1 (Latin-1)</span> را در برمی‌گیرد.  به دلیل شروع شدن دو استاندارد با عدد صفر، برنامه‌نویسانی که از قابلیت‌های I18N  استفاده نمی‌کنند یا آشنا نیستند نیز می‌توانند بدون نیاز به شناخت یونی‌کد،  برنامه‌هایی بنویسند که یونی‌کد را پشتیبانی کند، اما برنامه‌نویسانی که در محیط  ویندوز برنامه می‌نویسند بایستی از تفاوت‌های استاندارد ISO 8859-1 و <span dir="ltr">Windows Latin-1 (CP1252)</span> آگاهی داشته باشند.</p>
<p>طول ۱۶ بیتی  نوع داده‌ای char امکان ذخیره سازی مقادیر ۰ تا ۶۵۵۳۵ را فراهم می‌سازد. یک مقدار  یونی‌کد با <span dir="ltr">&#8216;\u&#8217;</span> شروع و یک مقدار هگزادسیمال (مبنای ۱۶) از  ۰۰۰۰ تا FFFF پس از آن قرار می‌گیرد. دو خط مثال زیر، کاراکتر a را تعریف می‌کند:</p>
<pre class="Code">char c1 = 'a'
char c2 = '\u0061'</pre>
<p>نسخه JDK 1.3 یونی‌کد ۲٫۱ و نسخه JDK 1.4 یونی‌کد ۳٫۰ را پشتیبانی  می‌کند.</p>
<p>سؤالی که مطرح می‌شود این است که آیا همه پلاتفرم‌ها یونی‌کد را  پشتیبانی می‌کنند؟ جواب: در جاوا تمام استریم‌ها (Stream) که کاراکترها را پشتیبانی  می‌کنند (java.io.Reader و java.io.Writer) به صورت اتوماتیک یک لایه مخفی که وظیفه  تبدیل یونی‌کد به Encoding خاص سیستم عامل و بالعکس را انجام می‌دهند را فراخوانی  می‌سازند. از طرف دیگر کلاسهای java.io.InputStreamReader و  java.io.OutputStreamWriter دارای متدهایی برای تبدیل Encoding می‌باشند.</p>
<p><strong>۲٫۲- Locale</strong><br />
Locale در زبان جاوا مجموعه‌ای از کلاسها برای  سفارشی کردن، تغییر، نمایش و شکل دهی اطلاعات است. این کلاسها روی انتخاب زبان،  تقویم، تاریخ و زمان تأثیر می‌گذارند. یک شیء از کلاس java.util.Locale نشان‌دهنده  یک ناحیه جغرافیائی خاص با زبان آن ناحیه می‌باشد.</p>
<p><strong>۳٫۲-  Language</strong><br />
زبانهای قابل استفاده در Locale طبق استاندارد ISO 639 می‌باشد.  جدول زیر چند مثال از نام زبان و کد تعریف شده را نشان می‌دهد. یک کد زبان با  جزئیات آن زبان در نواحی مختلف استفاده نمی‌شود، برای مثال ممکن است Canadian  French و Swiss French دارای گرامر و قوانین و واژه‌های متفاوت باشند ولی برای هر  دو این زبانها کد fr در نظر گرفته می‌شود. به همین دلیل تنها زبانهای عمومی تعریف  شده‌اند:</p>
<table border="0" cellspacing="1" cellpadding="2" width="150" align="center">
<tbody>
<tr bgcolor="#eeeeee">
<td align="middle"><strong>کد زبان</strong></td>
<td align="middle"><strong>زبان</strong></td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">en</td>
<td align="middle">English</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">fr</td>
<td align="middle">French</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">zh</td>
<td align="middle">Chinese</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">ja</td>
<td align="middle">Japanese</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">ar</td>
<td align="middle">Arabic</td>
</tr>
</tbody>
</table>
<p><strong>4.2-  Country</strong><br />
کشورهای قابل استفاده در Locale طبق استاندارد ISO 3165 می‌باشد. کد  کشور در این استاندارد ۲ رقمی و با حروف بزرگ تعریف شده است. جدول زیر تعدادی از  کشورهای تعریف شده را نشان می‌دهد.</p>
<table border="0" cellspacing="1" cellpadding="2" width="150" align="center">
<tbody>
<tr bgcolor="#eeeeee">
<td align="middle"><strong>کد کشور</strong></td>
<td align="middle"><strong>کشور</strong></td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">US</td>
<td align="middle">United States</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">FR</td>
<td align="middle">France</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">CA</td>
<td align="middle">Canada</td>
</tr>
<tr bgcolor="#f9f9f9">
<td align="middle">SA</td>
<td align="middle">Saudi Arabia</td>
</tr>
</tbody>
</table>
<p><strong>5.2-  Variant</strong><br />
Variant یک پسوند اختیاری برای یک Locale می‌باشد. Variant یک  Locale سفارشی تعریف می‌کند که با Language و Country قابل ساخت نیست. از Variant  می‌توان برای اضافه کردن یک مشخصه اضافی برای تعریف Locale استفاده کرد. برای مثال  en _ us نشاندهنده <span dir="ltr">English (United States)</span> است اما en_us_ca  برای تعریف <span dir="ltr">English (U.S.A, California)</span> یا en_us_mac برای  تعریف <span dir="ltr">English (U.S.A, Macintosh)</span> می‌باشد.</p>
<p><strong>۳-  استفاده از Locale در جاوا</strong><br />
کلاس Locale دو سازنده (Constructor) دارد:</p>
<pre class="Code">Locale (String language, String country)
Locale (String language, String country, String variant)</pre>
<p>مثال:</p>
<div class="Code">Locale mylocale = new Locale (&#8220;en&#8221;, &#8220;US&#8221;)</div>
<p>در مثال بالا  en زبان انگلیسی و US کشور آمریکا را تعریف می‌کند.</p>
<p><strong>۱٫۳-  Number</strong><br />
عبارت ۱,۲۳۴ چه عددی را نشان می‌دهد؟ جواب به منطقه و کشور بستگی  دارد. در آمریکا این عبارت معنی &#8220;یک هزار و دویست و سی و چهار&#8221; را دارد اما در  فرانسه این عبارت به معنی &#8220;یک و دویست و سی و چهار هزارم&#8221; است. بنابراین در نظر  گرفتن قوانین نمایش اعداد و جدا کننده‌ها بسیار مهم بنظر می‌رسد. کلاس  java.text.NumberFormat تعریف چگونگی نمایش اعداد برای یک منطقه خاص را به عهده  دارد.</p>
<p><strong>۲٫۳- Currency</strong><br />
هر کشور یا منطقه دارای واحد پولی  جداگانه است. علاوه بر این مواردی از قبیل علامت اعداد منفی، صفر، جداکننده رقم‌ها،  علامت نقطه اعشاری و مکان قرار گرفتن علامت پول ($۱۰، ۱۰ ریال) نیز در کشورها  متفاوت است. متد getCurrencyInstance در کلاس java.text.NumberFormat امکان پرداختن  به جزئیات شکل دهی اعداد پولی یک کشور خاص را فراهم می‌سازد.</p>
<p><strong>۳٫۳-  Date</strong><br />
مشابه سایر ساختارهای حساس به موقعیت جغرافیایی، فیلد تاریخ نیز جزئیات  خاص خود را دارد. کوتاه یا کامل بودن تاریخ، جدا کننده روز، ماه و سال و نیز ترتیب  آنها در کشورهای مختلف با یکدیگر متفاوت است.</p>
<p><strong>۴٫۳-  Calendar</strong><br />
کلاس java.text.Calendar بسیار نزدیک به کلاس java.util.Date است و  اجازه می‌دهد سال، ماه، روز و زمان را از یک تاریخ استخراج نمایند. متد  getCalendarInstance یک Calendar برای کشور مورد نظر بر می‌گرداند. تنها تقویم  پیاده‌سازی توسط شرکت سان میکرو سیستم تقویم Gregorian می‌باشد. برای ساختن  تقویم‌های محلی توصیه می‌شود از کلاس Calendar جاوا استفاده شود.</p>
<p><strong>۵٫۳- Resource Bundle</strong><br />
ویژگی عمومی ساختن در JDK، مکانیزمی  برای جداسازی عناصر رابط کاربر و سایر اطلاعات حساس به منطقه جغرافیایی از منطق  برنامه است. این جداسازی انتقال فرآیند و تبدیل را آسان می‌سازد. بدین معنی که یک  کد واحد نوشته می‌شود، در حالیکه ممکن است ۳۰ نسخه به زبان‌های مختلف از آن تولید  شود.</p>
<p>Resource Bundle شامل یک فایل با فرمت ASCII است. نام این فایل شامل  دو قسمت، نام اصلی و یک پسوند است. برای مثال برای ایجاد یک Resource Bundle با نام  MyBundle برای زبانهای ژاپنی و فرانسوی دو فایل بنام‌های MyBundle_ja_JP و  MyBundle_fr_FR با پسوند properties تعریف می‌شود. هر فایل Resource Bundle شامل  یکسری زوج کلید / مقدار است. در هر خط بایستی یک زوج کلید / مقدار تعریف شود. مثال:</p>
<pre class="Code">#MyResource.properties
#&lt;key&gt;=&lt;value&gt;
Text_not_found=The file could not be found
Text_Hello=Hello, world!</pre>
<p>متد getBundle در کلاس java.util.ResourceBundle امکان دسترسی به یک  Resource Bundle را فراهم می‌سازد. مثال کاملی از تعریف Locale برای زبان فارسی در  انتهای این مقاله ذکر شده است.</p>
<p><strong>۶٫۳- Character Sets</strong><br />
زبان  جاوا با استفاده از یونی‌کد برای نمایش متن، فرآیند ذخیره سازی، دستکاری و نمایش  کاراکترها را آسان ساخته است. یونی‌کد یک کارکترست ۱۶ بیتی است بدین معنی که  می‌تواند ۲<sup>۱۶</sup> کاراکتر تعریف کند. هر کاراکتر در این مجموعه منحصر بفرد  است.</p>
<p><strong>۷٫۳- Layout Manager</strong><br />
Layout Manager در یک برنامه چند  زبانه بدلیل دو مشکل اساسی در هنگام ترجمه رابط کاربر بسیار مهم است:</p>
<ul type="1">
<li>افزایش و کاهش طول متن ترجمه شده</li>
<li>موقعیت اجزاء رابط کاربر</li>
</ul>
<p>متن ترجمه شده اغلب کوتاه‌تر یا بلندتر از  متن اصلی است. Layout Manager نقش بسیار مهمی دارد چون اندازه اجزاء رابط کاربر را  با توجه به طول متن استفاده شده در عنوان آن تغییر می‌دهد و همچنین جابجایی اجزاء  رابط کاربر را بدلیل تغییر اندازه متن کنترل می‌کند.</p>
<p><strong>۴- یک مثال  ساده</strong><br />
در این قسمت یک مثال ساده که پیغام‌هایی را به چندین زبان نمایش می‌دهد  توضیح داده می‌شود. در این مثال با کلاسهای Locale و ResourceBundle جاوا آشنا  می‌شوید.</p>
<p><strong>۱٫۴- قبل از Internationalization</strong><br />
در نظر بگیرید که  یک برنامه نوشته اید که چند پیغام را نمایش می‌دهد:</p>
<pre class="Code">public class NotI18N {
    static public void main(String[] args) {
        System.out.println("Hello.");
        System.out.println("How are you?");
        System.out.println("Goodbye.");
    }
}</pre>
<p>حال شما تصمیم گرفته اید که برنامه را طوری تغییر دهید که پیغام‌ها را به  زبانهای فرانسه، آلمانی و فارسی نمایش دهد. متاسفانه تیم برنامه نویس با زبانهای  دیگر آشنایی چندانی ندارد، بنابراین شما به یک مترجم برای ترجمه پیغامها به زبانهای  ذکر شده نیاز دارید. از آنجاییکه مترجم شما برنامه نویس نیست، شما مجبور هستید این  پیغامها را از داخل کد برنامه خارج و در یک فایل متن ذخیره نمایید تا مترجم آن را  ترجمه کند. علاوه بر این برنامه بایستی انعطاف پذیر باشد و قابلیت اضافه کردن یک  زبان جدید را نیز داشته باشد.</p>
<p><strong>۲٫۴- بعد از  Internationalization</strong><br />
کد زیر تغییر یافته برنامه شما را نشان می‌دهد. توجه  کنید که متن پیغامها از داخل کد برنامه خارج شده است:</p>
<pre class="Code">import java.util.*;

public class I18NSample {

    static public void main(String[] args) {

        String language;
        String country;

        if (args.length != 2) {
            language = new String("en");
            country = new String("US");
        } else {
            language = new String(args[0]);
            country = new String(args[1]);
        }

        Locale currentLocale;
        ResourceBundle messages;

        currentLocale = new Locale(language, country);

        messages = ResourceBundle.getBundle("MessagesBundle", currentLocale);
        System.out.println(messages.getString("greetings"));
        System.out.println(messages.getString("inquiry"));
        System.out.println(messages.getString("farewell"));
    }
}</pre>
<p>برای کامپایل و اجرای برنامه به فایلهای زیر نیاز دارید:</p>
<div dir="ltr">- I18NSample.java<br />
- MessageBundle.properies<br />
-  MessageBundle_de_DE.properties<br />
- MessageBundle_en_US.properties<br />
-  MessageBundle_fr_FR.properties<br />
-  MessageBundle_ar_SA.properties</div>
<p><strong>3.4- اجرای  برنامه</strong><br />
برنامه عمومی شده انعطاف پذیر است: این برنامه به کاربر نهایی اجازه  می‌دهد کشور و زبان را بصورت پارامتر به برنامه وارد کند.</p>
<p>مثال زیر نتیجه  اجرای برنامه را برای زبان فرانسوی <span dir="ltr">(French)</span> fr و کشور فرانسه  <span dir="ltr">(France) FR</span> نشان می‌دهد:</p>
<pre class="Code">greetings = Bonjour
farewell = Au revoir
inquiry = Comment allez-vous?</pre>
<p>فایل MessageBundle_fr_FR.properties</p>
<pre class="Code">% java I18NSample fr FR

Bonjour.
Comment allez-vous?
Au revoir.</pre>
<p>خروجی برنامه</p>
<p>مثال بعدی نتیجه اجرای برنامه را برای زبان انگلیسی  <span dir="ltr">(English) en</span> و کشور آمریکا <span dir="ltr">(United States)  US</span> نشان می‌دهد:</p>
<pre class="Code">greetings = Hello
farewell = Goodbye
inquiry = How are you?</pre>
<p>فایل MessageBundle.properties</p>
<pre class="Code">% java I18NSample en US

Hello.
How are you?
Goodbye.</pre>
<p>خروجی برنامه</p>
<p><strong>۵- اقدامات لازم برای I18N</strong><br />
بسیاری از  برنامه‌ها از ابتدا عمومی و چند زبانه نیستند. این برنامه ها ممکن است از یک  Prototype شروع شوند و یا قابلیت چند زبانه بودن در آنها در نظر گرفته نشده باشد.  برای I18N ساختن یک برنامه موجود، بایستی مراحل زیر طی شده باشد:</p>
<p><strong>۱٫۵- شناسایی اطلاعات حساس به زبان و منطقه</strong><br />
پیغامهای متنی  صریح ترین فرم اطلاعاتی هستند که به زبان و منطقه جغرافیایی وابستگی دارند. بهرحال  سایر اطلاعات نیز ممکن است به این دو عامل وابستگی داشته باشند. لیست زیر اطلاعات  حساس به ملیت را نشان می‌دهد:</p>
<ul>
<li>پیغامها</li>
<li>عنوان اجزای رابط کاربر</li>
<li>صداها</li>
<li>رنگها</li>
<li>گرافیک و تصاویر</li>
<li>تاریخ</li>
<li>زمان</li>
<li>پول</li>
<li>واحدهای اندازه گیری</li>
<li>شماره تلفن</li>
<li>آدرسهای پستی</li>
<li>طراحی صفحات</li>
</ul>
<p><strong>۲٫۵- جداسازی متنهای قابل ترجمه و انتقال به  Resource Bundles</strong><br />
فرآیند ترجمه هزینه بر و گران است. شما می توانید این  هزینه را با جداسازی متنهای نیازمند ترجمه و قرار دادن آنها در یک Resource Bundle  کاهش دهید.</p>
<p>متنهای قابل ترجمه شامل پیغامهای وضعیت، پیغامهای خطا، فایلهای  log و عنوان اجزا GUI می‌باشند. ضمن جداسازی این اطلاعات از کد برنامه، متغیرهایی  که از این عنوانها استفاده می کنند بایستی بطور صریح و جداگانه تعریف شوند:</p>
<pre class="Code">String buttonLabel = "OK";
...
JButton okButton = new JButton(buttonLabel);</pre>
<p><strong>3.5- پیغامهای ترکیبی (Compound Messages)</strong><br />
پیغامهای ترکیبی  حاوی اطلاعات متغیر است. برای مثال در پیغام &#8220;.The disk contains 1100 files&#8221; عدد  ۱۱۰۰ می تواند متغیر باشد. ترجمه این نوع پیغام بسیار مشکل است، زیرا برای مثال محل  قرار گرفتن عدد ۱۱۰۰ در این عبارت در زبانهای مختلف با یکدیگر متفاوت است. پیغام  زیر قابل ترجمه نیست چون ترتیب قرار گرفتن قسمتهای این جمله در داخل کد برنامه مشخص  شده است.</p>
<pre class="Code">Integer fileCount;
...
String diskStatus = "The disk contains " + fileCount.toString() + " files.";</pre>
<p><strong>4.5- نمایش اعداد و پول</strong><br />
اگر برنامه اعداد یا پول را نمایش  می‌دهد، بایستی این اطلاعات به روشی مستقل از کشور یا منطقه خاص نمایش داده شود. کد  زیر عمومی نیست چرا که نمی تواند اعداد را بصورت صحیح در تمام کشورها نمایش دهد:</p>
<pre class="Code">Double amount;
TextField amountField;
...
String displayAmount = amount.toString();
amountField.setText(displayAmount);</pre>
<p>در جاوا کلاس NumberFormat برای تغییر نمایش اعداد به زبانهای مختلف در  نظر گرفته شده است.</p>
<p><strong>۵٫۵- نمایش تاریخ و زمان</strong><br />
نمایش تاریخ و  زمان نیز مشابه اعداد با توجه به زبان و کشور متفاوت است. اگر شما کدی مشابه زیر در  برنامه دارید، بایستی آنرا تغییر دهید:</p>
<pre class="Code">Date currentDate = new Date();
TextField dateField;
...
String dateString = currentDate.toString();
dateField.setText(dateString);</pre>
<p>در زبان جاوا کلاس DateFormat وظیفه تنظیم چگونگی نمایش تاریخ و زمان را  بر عهده دارد.</p>
<p><strong>۶٫۵- استفاده از قابلیتهای یونی‌کد</strong><br />
کد زیر سعی  می‌کند کاراکتر بودن یک حرف را بررسی کند:</p>
<pre class="Code">char ch;
...
if ((ch &gt;= 'a' &amp;&amp; ch &lt;= 'z') ||
    (ch &gt;= 'A' &amp;&amp; ch &lt;= 'Z'))       // WRONG!</pre>
<p>این کد تنها برای زبان انگلیسی قابل استفاده است. برای مثال این کد، حرف  ü در کلمه آلمانی Grün را یا حرف پ در کلمه پارس را کاراکتر تشخیص نمی‌دهد.</p>
<p>متدهای مقایسه موجود در کلاس Character از استاندارد یونی‌کد برای شناسایی  کاراکترها استفاده می‌کند. بنابراین کد بالا را می توان بصورت زیر تغییر داد:</p>
<pre class="Code">char ch;
...
if (Character.isLetter(ch))</pre>
<p><strong>7.5- مقایسه رشته‌ها</strong><br />
معمولا هنگام مرتب سازی متن، رشته ها  با یکدیگر مقایسه می‌شوند. یک برنامه معمولی برای مقایسه دو رشته ممکن است از کدی  بصورت زیر استفاده کند:</p>
<pre class="Code">String target;
String candidate;
...
if (target.equals(candidate)) {
...
if (target.compareTo(candidate) &lt; 0) {
...</pre>
<p>متدهای String.equals و String.compareTo عمل مقایسه را بصورت باینری  انجام می دهند که برای بیشتر زبانهای موجود ناکارآمد است. برای مقایسه دو رشته بهتر  است از کلاس Collator استفاده شود.</p>
<p><strong>۸٫۵- تبدیل متنهای غیر  یونی‌کد</strong><br />
کاراکترها در زبان برنامه نویسی جاوا بصورت یونی‌کد ذخیره می‌شود.  اگر برنامه شما از اطلاعات غیر از یونی‌کد استفاده می‌کند، بایستی اطلاعات را به  یونی‌کد تبدیل نمایید.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/javalocalizationp18712011252-1488/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>بررسی معماری Applet-to-Servlet در جاوا</title>
		<link>http://www.irandevelopers.com/programming/applettoservlet8711281159-1463/</link>
		<comments>http://www.irandevelopers.com/programming/applettoservlet8711281159-1463/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 08:29:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[اینترنت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[جاوا - Java]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=1463</guid>
		<description><![CDATA[در طراحی برنامه‌های مبتنی بر وب و چند لایه می‌توان از روش Applet-to-Servlet استفاده کرد. اپلت‌ها یک مکانیزم مناسب جهت تولید رابط‌های گرافیکی قدرتمند و پویا هستند و از طرف دیگر Servletها نیز یک راه حل کارآمد برای کنترل درخواست‌ها در یک سرویس دهنده وب (Web Server) یا سرویس دهنده برنامه‌های کاربردی (Application Server) هستند. [...]]]></description>
			<content:encoded><![CDATA[<p>در طراحی برنامه‌های مبتنی بر وب و چند لایه می‌توان از روش Applet-to-Servlet  استفاده کرد. اپلت‌ها یک مکانیزم مناسب جهت تولید رابط‌های گرافیکی قدرتمند و پویا  هستند و از طرف دیگر Servletها نیز یک راه حل کارآمد برای کنترل درخواست‌ها در یک  سرویس دهنده وب (Web Server) یا سرویس دهنده برنامه‌های کاربردی (Application  Server) هستند. در مدل‌های برنامه‌نویسی شرکت سان که بهترین راه حل‌های تولید  برنامه‌های بزرگ جاوا را بر پایه پلاتفرم Java 2 ارائه می‌کند، استفاده از اپلتها،  HTML و Java Server Page درسمت سرویس گیرنده و Servletها بهمراه Enterprise Java  Beans) EJB) یا سایر Componentهای کمکی در سمت سرویس دهنده توصیه می‌شود.</p>
<p><strong>اپلت‌ها:</strong><br />
اپلت‌ها برنامه‌های جاوا هستند که در داخل سرویس  دهنده وب اجرا می شوند و از کلاس java.applet.Applet یا javax.swing.JApplet ارث  می‌گیرند. در مقایسه با صفحات HTML، اپلتها می‌توانند رابط کاربر قدرتمندتر و  پویاتری تولید نمایند. از اپلت‌ها می‌توان در برنامه‌های بزرگ برای مشاهده یا تغییر  اطلاعات ارسالی از سمت سرویس دهنده استفاده کرد. برای مثال از یک اپلت می‌توان برای  مشاهده یا تغییر رکوردهای بانک اطلاعاتی یا کنترل وضعیت سرویس دهنده یا برنامه‌های  در حال اجرای روی آن استفاده کرد.</p>
<p>یک اپلت می‌تواند دارای یک کلاس منفرد یا  چندین کلاس باشد. برای تسریع در انتقال کلاس‌ها به سرویس گیرنده از حالت فشرده  کلاس‌ها در قالب Java Archive File) JAR) می‌توان استفاده کرد. در نتیجه کد اپلت هر  زمان که در سمت سرویس دهنده تغییر کند، با اولین مراجعه مجدد کاربر به سایت  بروزرسانی می‌شود.</p>
<p>از آنجاییکه اپلت‌ها در سمت سرویس گیرنده اجرا می‌شوند،  یکسری تدابیر امنیتی برای اپلتها در نظر گرفته شده است که نواقص و ایرادهای  Microsoft ActiveX را برطرف می‌کند. از جمله محدودیت‌های اپلتها این است که به  منابع سرویس گیرنده دسترسی ندارند و در روی سرویس گیرنده نمی‌توانند فایلی را  بخوانند یا بنویسند و یا برنامه‌ای را اجرا نمایند.</p>
<p><strong>Servletها:</strong><br />
Java Servletها اجزاء نرم‌افزاری سمت سرویس دهنده  هستند که مشابه برنامه‌های CGI کنترل درخواستهای وب، برگرداندن اطلاعات پویا برای  سرویس گیرنده، دسترسی به بانک اطلاعاتی و ارتباط با سایر اجزاء نرم‌افزاری موجود  روی سرویس دهنده را انجام می‌دهند. بر خلاف CGI که به ازای هر درخواست سرویس گیرنده  یک کپی از برنامه در سمت سرویس دهنده بارگذاری و اجرا می شود، Servletها تنها یکبار  در سرویس دهنده بارگذاری و به ازای هر درخواست سرویس گیرنده فراخوانی می‌شوند. شکل  زیر تفاوت بین Srevlet و CGI را نشان می‌دهد.</p>
<p><img class="alignnone size-full wp-image-1464" title="11112" src="http://www.irandevelopers.com/wp-content/uploads/2009/02/11112.jpg" alt="11112 بررسی معماری Applet to Servlet در جاوا" width="450" height="325" /></p>
<p><strong>معماری‌های  موجود</strong><br />
چندین معماری برای روش Applet-to-Servlet وجود دارد که در ادامه سه  مورد از آن بررسی می‌شود.</p>
<ul type="1">
<li><strong>معماری دو لایه (Two-Tier)</strong><br />
در این معماری تنها از اپلت در سمت سرویس  گیرنده استفاده می‌شود و اپلتها از طریق پروتکلهایی مانند JDBC و (Remote Method  Invocation) RMI به منابع سیستم -بانکهای اطلاعاتی، دایرکتوریهای Light Weight  Directory Access Protocol) LDAP) و EJB Component- مستقیما&#8221; دسترسی پیدا می‌کنند.  شکل زیر این معماری را نشان می‌دهد:</p>
<p><img class="alignnone size-full wp-image-1465" title="22222" src="http://www.irandevelopers.com/wp-content/uploads/2009/02/22222.jpg" alt="22222 بررسی معماری Applet to Servlet در جاوا" width="241" height="253" /></p>
<p>اگر چه این معماری ساده به  نظر می‌رسد، اما دارای مشکلات و معایبی است که عبارتند از:</p>
<ul>
<li>در این روش تمام اطلاعات دسترسی به سرویس دهنده و منابع آن شامل شناسه کاربر،  رمز عبور، مشخصات بانک اطلاعاتی، مشخصات سرویس دهنده و هر چیز دیگری بایستی در داخل  کد اپلت تعریف شود. در نتیجه احتمال دسترسی کاربر به این اطلاعات وجود دارد. (برای  مثال استفاده از یک De-Compiler)</li>
<li>بانک اطلاعاتی یا هر سیستمی که اپلت به آن نیاز دارد روی همان ماشین سرویس  دهنده وب قرار می‌گیرد و در نتیجه سرویس دهنده همزمان بعنوان سرویس دهنده بانک  اطلاعاتی و سرویس دهنده وب عمل می کند. در اینصورت اگر دسترسی به یکسری از اطلاعات  توسط Firewall محدود شده باشد، اپلت‌ها نمی‌توانند به این منابع دسترسی پیدا کنند.</li>
<li>مکانیزم Clustering و Pooling روی سرویس دهنده بسیار مشکل و حتی ناممکن  می‌باشد.</li>
</ul>
</li>
<li><strong>معماری سه لایه (Three-Tier)</strong><br />
یک راه حل بهتر نسبت به معماری دو لایه،  استفاده از Servlet برای کپسوله کردن ارتباط با منابع سرویس دهنده می‌باشد. در این  معماری Servlet مشکلات امنیتی حاصل از محدودیت‌های اپلت را برطرف می‌کند و همچنین  دسترسی اپلت‌ها را به Business Logic و Enterprise Information Systems کنترل  می‌کند. در این روش اپلت درخواست را به Servlet می‌فرستد و Servlet پس از برقراری  ارتباط با بانک اطلاعاتی یا هر منبع مورد نیاز دیگر و انجام محاسبات، نتیجه را برای  اپلت ارسال می‌نماید.</p>
<p><img class="alignnone size-full wp-image-1466" title="33331" src="http://www.irandevelopers.com/wp-content/uploads/2009/02/33331.jpg" alt="33331 بررسی معماری Applet to Servlet در جاوا" width="350" height="305" /></p>
<p>مزایا و معایب این معماری  عبارتند از:</p>
<ul>
<li>در این معماری لایه‌های سیستم می‌توانتد روی چندین سرویس دهنده توزیع شوتد و  تمام لایه‌ها با یک بانک اطلاعاتی واحد ارتباط برقرار می‌کنتد.</li>
<li>استفاده از این معماری باعث قابلیت گسترش (Scalability) و ماژوله بودن سیستم می  شود‌.</li>
<li>قرار گرفتن لایه منطق برنامه در Servlet که پیچیدگی برنامه را افزایش داده و  قابلیت حمل (Portability) را کاهش می‌دهد.</li>
</ul>
</li>
<li><strong>معماری چند لایه (N-Tier)</strong><br />
اگر از تکنولوژی Enterprise Java Beans  استفاده ‌شود، Servlet بعنوان یک میانجی عمل می‌کند. استفاده از EJB باعث حذف  Business Logic و انتقال آن به EJB می‌شود. در این روش اپلت با Servlet تماس  می‌گیرد و Servlet اطلاعات را به EJB می‌فرستد و بالعکس. استفاده از EJB ،Servlet  ،HTML و اپلت حداکثر انعطاف پذیری و کارایی را درکنار پیچیدگی و هزینه بیشتر به  همراه دارد.</p>
<p><img class="alignnone size-full wp-image-1467" title="44441" src="http://www.irandevelopers.com/wp-content/uploads/2009/02/44441.jpg" alt="44441 بررسی معماری Applet to Servlet در جاوا" width="350" height="401" /></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/applettoservlet8711281159-1463/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>چرا جاوا زبانی جالب است ؟</title>
		<link>http://www.irandevelopers.com/programming/howjavaisgood-870905-531/</link>
		<comments>http://www.irandevelopers.com/programming/howjavaisgood-870905-531/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 21:32:20 +0000</pubDate>
		<dc:creator>هاله مردانیان</dc:creator>
				<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[جاوا - Java]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=531</guid>
		<description><![CDATA[در یکی از مقالات در باره ی زبان شرکتSun جاوا را با این خصوصیات شرح می دهد : جاوا یک زبان ساده ، شی گرا ،‌توزیع شده ، تفسیر شده ، قدرتمند ، ایمن ، با معماری خنثی ، قابل حمل ، با عملکرد سطح بالا چند نخ کشی شده و پویا است . Sun [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">در یکی از مقالات در باره ی  زبان شرکت</span><span style="font-size: 10pt; font-family: Tahoma;">Sun</span><span style="font-size: 10pt; font-family: Tahoma;"> جاوا را با این خصوصیات<span> </span>شرح می دهد :</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">جاوا یک زبان ساده ، شی گرا  ،‌توزیع شده ، تفسیر شده ، قدرتمند ، ایمن ، با معماری خنثی ، قابل حمل ، با عملکرد  سطح بالا چند نخ کشی شده و پویا است .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">Sun</span><span style="font-size: 10pt; font-family: Tahoma;"> تصدیق میکند که به طور قطع این کلمات رشته هایی از واژه های متداول  در زبان برنامه نویسی هستند ، اما حقیقت این است که این واژه ها به طور ماهرانه ای  خصوصیات این زبان را شرح میدهند .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">حال به برخی از خصلت های  جاوا در پشت این واژه ها میپردازیم .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span><strong><span style="font-size: 10pt; font-family: Tahoma;">شی گرا </span></strong><span style="font-size: 10pt; font-family: Tahoma;">:</span><span style="font-size: 10pt; font-family: Tahoma;">Object Oriented</span><strong></strong></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">جاوا یک زبان برنامه نویسی  شی گرا است . برای یک برنامه نویس این به این معنا است که به جای فکر کردن به قسمت  های رویه برنامه ، باید به کاربرد داده ها و روش هایی که روی آن داده ها عمل میکنند  ، توجه شود.</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">اگر شما به برنامه نویسی با  اعلان رویه در </span><span style="font-size: 10pt; font-family: Tahoma;">C</span><span style="font-size: 10pt; font-family: Tahoma;"> عادت  کرده اید ،ممکن است دریابید که به هنگام استفاده از جاوا مجبور به تغییر در روش و  چگونگی برنامه تان هستید . هنگامی که فهمیدید این الگوی جدید چقدر قدرتمند است ، به  سرعت با آن هماهنگ میشوید .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">در یک سیستم شی گرا ، یک  کلاس مجموعه ای از داده ها و روش هایی است که روی آن داده عمل میکنند. همراه بودن  داده ها و متد ها رفتار و حالت یک شی را بیان می دارد . کلاس ها به صورت سلسله  مراتبی مرتب شده اند ، بنابر این یک زیر کلاس میتواند رفتار هایی را از کلاس بالاتر  به ارث ببرد . یک کلاس سلسله مراتبی همیشه یک کلاس ریشه دارد که کلاسی است با رفتار  های کاملا عمومی .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">جاوا<span> </span>به همراه دسته ی گسترده ای از کلاس هایی است که  در بسته هایی مرتب شده اند و شما می توانید از آنها در برنامه ی خود استفاده  کنید</span><span style="font-size: 10pt; font-family: Tahoma;"> </span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>. برای مثال جاوا کلاس  هایی را ایجاد میکند که :</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>بخش های رابط گرافیکی را میسازند </span><span style="font-size: 10pt; font-family: Tahoma;">(the java.awt package)</span><span style="font-size: 10pt; font-family: Tahoma;"> ،کلاس هایی که  عملیات ورودی و خروجی را به عهده دارند</span><span style="font-size: 10pt; font-family: Tahoma;">(the java.io  package)</span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>و کلاس هایی که از شبکه پشتیبانی میکنند </span><span style="font-size: 10pt; font-family: Tahoma;">(the  java.net<span> </span>package )</span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>.</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">یک شی کلاس</span><span style="font-size: 10pt; font-family: Tahoma;">(in the java.lang package)</span><span style="font-size: 10pt; font-family: Tahoma;"> به  عنوان ریشه کلاس سلسله مراتبی جاوا انجام وظیفه میکند .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>جاوا بر خلاف </span><span style="font-size: 10pt; font-family: Tahoma;">C++</span><span style="font-size: 10pt; font-family: Tahoma;"> طوری طراحی شده است که از همان ابتدا به صورت شی گرا باشد .<span> </span>اکثر چیز ها در جاوا اشیا هستند . ارقام  ابتدایی ، کاراکترها و مدل های منطقی تنها استثناء ها هستند . حتی رشته ها هم در  جاوا به وسیله اشیا حاضر میشوند ،همان طور که ساختمان های مهم دیگر این زبان ، مثل  نخ ها<span> </span>احضار میشوند . یک کلاس یک واحد  پایه برای کامپایل و اجرا شدن در جاوا است . تمام برنامه های جاوا متشکل از کلاس ها  است .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>درست است که جاوا طوری طراحی شده است که مثل </span><span style="font-size: 10pt; font-family: Tahoma;">C++</span><span style="font-size: 10pt; font-family: Tahoma;"> <span lang="FA"><span> </span>باشد و  خاصیت های آن را داشته باشد ، اما هنگامی که با آن کار کنید خواهید فهمید که بسیاری  از پیچیده گی های آن زبان را از بین برده است .</span></span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">اگر شما یک برنامه نویس </span><span style="font-size: 10pt; font-family: Tahoma;">C++</span><span style="font-size: 10pt; font-family: Tahoma;"> هستید حتما لازم است که ساختار های شی گرایی در جاوا را به دقت  مطالعه کنید . اگرچه ترکیب و نحوه دستورات آن تقریبا شبیه </span><span style="font-size: 10pt; font-family: Tahoma;">C++</span><span style="font-size: 10pt; font-family: Tahoma;"> است ،‌اما رفتار های آن خیلی مشابه نیست .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">تفسیر شده :</span><span style="font-size: 10pt; font-family: Tahoma;">Interpreted</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">جاوا یک زبان تفسیر شده است  . کامپایلر جاوا به جای ایجاد کد محلی ماشین ، کد بایتی برای ماشین مجازی جاوا  ایجاد میکند . برای اجرای دقیق برنامه ، از مفسر جاوا برای اجرای کد های بایتی  کامپایل شده استفاده میشود . به دلیل اینکه<span> </span>کد های بایتی جاوا به نوع کامپیوتر بستگی ندارند ، برنامه های جاوا میتوانند  روی هر نوع کامپیوتری که </span><span style="font-size: 10pt; font-family: Tahoma;">JVM</span><span style="font-size: 10pt; font-family: Tahoma;"> </span><span style="font-size: 10pt; font-family: Tahoma;">(Java Virtual  Machine)</span><span style="font-size: 10pt; font-family: Tahoma;"> را دارند ،  اجرا شوند .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">در محیط تفسیر شده ، مرحله  لینک استاندارد توسعه برنامه از دید کاربر پنهان است . اگر جاوا تنها یک مرحله لینک  داشت ، فقط بارگذاری کلاس جدید به محیط پردازش میشد که یک پردازش نموی سبک وزن است  که در زمان اجرا مشاهده میشود . که این خصوصیت با چرخه کامپایل-لینک-اجرا ی آرام و  طاقت فرسای زبان هایی مانند </span><span style="font-size: 10pt; font-family: Tahoma;">C</span><span style="font-size: 10pt; font-family: Tahoma;"> یا </span><span style="font-size: 10pt; font-family: Tahoma;">C++</span><span style="font-size: 10pt; font-family: Tahoma;"> در تضاد است .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">معماری خنثی و قابل حمل  :</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">Architecture Neutral and  Portable</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">به دلیل اینکه برنامه های  جاوا در فرمت کد بایتی با معماری خنثی کامپایل شده اند ، برنامه کاربردی جاوا  میتواند در هر سیستمی اجرا شود.</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">البته با این شرط که آن  سیستم توانایی پیاده سازی ماشین مجازی جاوا را داشته باشد . این مسئله<span> </span>تقریبا برای کاربرد های توزیع سده روی اینترنت  و یا دیگر شبکه های ناهمگن مهم است . اما روش معماری خنثی برای کاربرد های بر مبنای  شبکه مفید است .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">به عنوان یک توسعه  دهنده<span> </span>برنامه های کاربردی در بازار نرم  افزاری<span> </span>امروز ممکن است بخواهید مدل های  کاربردی خود را توسعه دهید ، به طوری که بتواند روی </span><span style="font-size: 10pt; font-family: Tahoma;">Pc</span><span style="font-size: 10pt; font-family: Tahoma;"> ،  مکینتاش و سیستم عامل </span><span style="font-size: 10pt; font-family: Tahoma;">Unix</span><span style="font-size: 10pt; font-family: Tahoma;"> اجرا شود .با وجود گونه های مختلف </span><span style="font-size: 10pt; font-family: Tahoma;">Unix </span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>، </span><span style="font-size: 10pt; font-family: Tahoma;">Windows</span><span style="font-size: 10pt; font-family: Tahoma;"> روی </span><span style="font-size: 10pt; font-family: Tahoma;">Pc</span><span style="font-size: 10pt; font-family: Tahoma;"> و  مکینتاش قوی جدید ، رفته رفته تولید نرم افزار برای همه انواع این کامپیوتر ها سخت  می شود . اگر شما برنامه تان را در جاوا بنویسید میتواند روی همه ی این کامپیوترها  اجرا شود . </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">در حقیقت تفسیر شده بودن  جاوا وتعریف یک استاندارد<span> </span>، معماری خنثی  داشتن و فورمت کد بایتی آن از بزرگترین دلایل قابل حمل بودن آن به شمار می آیند  .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">اما جاوا باز از این هم  بیشتر گام برمیدارد ،‌ با اطمینان حاصل کردن از اینکه هیچیک از جنبه های وابستگی  اجرایی زبان را ندارد . برای مثال جاوا به طور صریح اندازه هریک<span> </span>از انواع داده<span> </span>را تعریف میکند که این با </span><span style="font-size: 10pt; font-family: Tahoma;">C</span><span style="font-size: 10pt; font-family: Tahoma;"> <span lang="FA">تفاوت دارد<span> </span>، برای مثال هریک از  انواع صحیح می تواند بسته به نوع کامپیوتر۱۶-۳۲ یا ۶۴ بیت طول داشته باشد  .</span></span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">هنگامی که به صورت تکنیکی  امکان نوشتن برنامه های غیر قابل حمل در جاوا فراهم شد ، جلوگیری از چند خاصیت  وابسته به نوع کامپیوتر که توسط جاوا </span><span style="font-size: 10pt; font-family: Tahoma;">API</span><span style="font-size: 10pt; font-family: Tahoma;"> تولید شده و به طور قطع قابل حمل نوشته شده است ، آسان است  .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">یک برنامه جاوا<span> </span>به تولید کنندگان نرم افزار کمک میکند تا از  قابل حمل بودن کد هایشان اطمینان حاصل کنند . برنامه نویسان فقط برای پرهیز از دام  غیر قابل حمل بودن برنامه احتیاج به یک تلاش ساده دارند که شعار تجارتی  شرکت</span><span style="font-size: 10pt; font-family: Tahoma;">Sun </span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>را زنده نگهدارند و آن شعار این است  :</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">« یک بار بنویس ، همه جا  اجرا کن » .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">پویا و توزیع شده  :</span><span style="font-size: 10pt; font-family: Tahoma;">Dynamic and  Distributed </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">جاوا یک زبان پویا است . هر  کلاس جاوا میتواند در هر زمانی روی مفسر جاوا بارگذاری شود . سپس این کلاس های  بارگذاری شده ی<span> </span>پویا میتوانند به صورت  پویا معرفی شوند . حتی کتابخانه کد های محلی<span> </span>میتواند به طور پویا بارگذاری شود .کلاس ها در جاوا با کلاس </span><span style="font-size: 10pt; font-family: Tahoma;">Class</span><span style="font-size: 10pt; font-family: Tahoma;"> فراخوانی میشوند ؛ شما میتوانید به طور پویا در مورد یک کلاس در  زمان اجرا اطلاعاتی بدست بیاورید . این خصوصیت در جاوا ۱-۱ به طور درستی موجود است  . با وجود بازتاب </span><span style="font-size: 10pt; font-family: Tahoma;">API</span><span style="font-size: 10pt; font-family: Tahoma;"> اضافه شده </span><span style="font-size: 10pt; font-family: Tahoma;">(Application  Program Interface )</span><span style="font-size: 10pt; font-family: Tahoma;"> که به برنامه  ساز امکان میدهد که با برنامه از طریق یک برنامه کاربردی دیگر ارتباط برقرار کند  .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">جاوا حتی با نام زبان توزیع  شده نیز خوانده میشود . به طور ساده این به این معنا است که این زبان پشتیبانی سطح  بالایی برای شبکه به وجود می آورد . برای مثال کلاس </span><span style="font-size: 10pt; font-family: Tahoma;">URL</span><span style="font-size: 10pt; font-family: Tahoma;"> و کلاس های مرتبط با آن در بسته ی </span><span style="font-size: 10pt; font-family: Tahoma;">Java.net </span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>، خواندن فایل های دوردست  را به همان سادگی خواندن فایل های محلی کرده است . به طور مشابه در جاوا ۱-۱ ،  احضار روش کنترلی </span><span style="font-size: 10pt; font-family: Tahoma;">RMI</span><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">(Remote Method<span> </span>Invocation  )</span><span style="font-size: 10pt; font-family: Tahoma;"> ،</span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>API </span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>به یک برنامه جاوا اجازه  میدهد که روش هایی از اشیاء دور دست جاوا را به همان صورتی که اگر آن اشیاء محلی  بدند آنها را میخواند ، بخواند<span> </span>.( جاوا  حتی از سیستم شبکه ای سطح پایین که شامل آدرس مقصد و مسیر جریانی که توسط سوکت ها  متصل شده است ، نیز پشتیبانی میکند .)</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">طبیعت توزیع شده ی جاوا  زمانیکه با امکانات پویای بارگذاری کلاس همراه میشود ، واقعا درخشنده است . این  خصوصیات با هم این امکان را برای مفسر جاوا به وجود می آورند که کد ها را از  اینترنت بارگذاری و اجرا کند . ( همان طور که بعدا خواهیم دید جاوا باعث میشود که  با وجود ابزار قدرتمند و ایمن این کار به طور مطمئن انجام شود .) این<span> </span>چیزی است که در هنگام بارگذاری و اجرای یک  برنامه کاربردی از اینترنت توسط مرورگر وب ، اتفاق می افتد<span> </span>. اما داستان پیچیده تر از این هم میتواند باشد  . تصور کنید یک پردازشگر<span> </span>کلمه چند رسانه  ای در جاوا نوشته شده است<span> </span>. وقتی<span> </span>از این برنامه پرسیده میشود که چند نوع از داده  هایی را که قبلا هرگز وارد نشده را نمایش دهد ، ممکن است به طور دینامیکی یک کلاس  را که میتواند داده را شناسایی کند ، از شبکه بارگذاری کند و بعد کلاس دیگری را که  بتواند داده را از درون یک پوشه ترکیبی بخواند ، باز به طور دینامیکی بارگذاری  میکند . برنامه ای مانند این از منابع توزیع شده در شبکه<span> </span>برای رشد و سازگاری خودکار کاربران استفاده  میکند .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">ساده :</span><span style="font-size: 10pt; font-family: Tahoma;">Simple </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">جاوا یک زبان ساده است .  طراحان جاوا سعی در این داشتند تا زبانی بوجود بیاورند که برنامه نویسان بتوانند به  سرعت آن را یاد بگیرند . بنابراین تعداد ساختار های این زبان تقریبا کم است . هدف  دیگر طراحی این زبان این بود که به منظور راحتی انتقال آن ، آن را طوری طراحی کنند  که برای عده ی زیادی از برنامه نویسان آشنا باشد . اگر شما یک برنامه نویس </span><span style="font-size: 10pt; font-family: Tahoma;">C</span><span style="font-size: 10pt; font-family: Tahoma;"> یا</span><span style="font-size: 10pt; font-family: Tahoma;"> C++ </span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>هستید ، خواهید فهمید که جاوا از بسیاری از  ساختار های </span><span style="font-size: 10pt; font-family: Tahoma;">C</span><span style="font-size: 10pt; font-family: Tahoma;"> و  ‍</span><strong><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>C++</span></strong><strong><span style="font-size: 10pt; font-family: Tahoma;"> ا</span></strong><span style="font-size: 10pt; font-family: Tahoma;">ستفاده  میکند .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">برای اینکه این زبان را هم  به طور ساده و هم<span> </span>آشنا و ملموس و هم<span> </span>کوچک نگه دارند بسیاری از خصوصیات </span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>C </span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>و </span><span style="font-size: 10pt; font-family: Tahoma;">C++</span><span style="font-size: 10pt; font-family: Tahoma;"> را در آن حذف کردند . اینها خصوصیاتی بودند که باعث می شدند<span> </span>برنامه نویسی ضعیفی صورت بگیرد<span> </span>یا آنهایی بودند که به ندرت در برنامه استفاده  می شدند . برای مثال جاوا از دستور </span><span style="font-size: 10pt; font-family: Tahoma;">goto</span><span style="font-size: 10pt; font-family: Tahoma;"> استفاده نمی کند ، در عوض از<span> </span>دستورهای</span><span style="font-size: 10pt; font-family: Tahoma;"> </span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span></span><span style="font-size: 10pt; font-family: Tahoma;">break , continue</span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>در مواقع نیاز استفاده  می کند .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">جاوا از سر فایل  ها</span><span style="font-size: 10pt; font-family: Tahoma;">(header files) </span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>استفاده نمی کند و پردازشگر </span><span style="font-size: 10pt; font-family: Tahoma;">C</span><span style="font-size: 10pt; font-family: Tahoma;"> را هم حذف کرده است . به این دلیل که جاوا یک زبان شی گرا است ،  ساختار های </span><span style="font-size: 10pt; font-family: Tahoma;">C</span><span style="font-size: 10pt; font-family: Tahoma;"> مثل </span><span style="font-size: 10pt; font-family: Tahoma;">struct ,  union</span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>از آن برداشته شده است . جاوا حتی<span> </span>بارگذاری مجدد و خواص چندگانه ارث بری از </span><span style="font-size: 10pt; font-family: Tahoma;">C++</span><span style="font-size: 10pt; font-family: Tahoma;"> را هم حذف کرده است . شاید مهمترین پارامتر ساده بودن جاوا عدم  استفاده این زبان از اشاره گر ها باشد . اشاره گر ها یکی از بیشترین موجودیت های  دردسرساز<span> </span>در </span><span style="font-size: 10pt; font-family: Tahoma;">C , C++</span><span style="font-size: 10pt; font-family: Tahoma;"> هستند . چون جاوا ساختمان ندارد و آرایه ها و رشته ها اشیاء آن  هستند ، بنابراین<span> </span>احتیاجی به اشاره گر  نیست .جاوا به طور خودکار آدرس دهی و دستذسی به محتوای موجود در یک آدرس را برای  شما انجام میدهد . </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">جاوا حتی زباله های حافظه ای  را هم به طور خودکار جمع آوری میکند .</span><span style="font-size: 10pt; font-family: Tahoma;">(Garbage  Collectin)</span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>(* جمع آوری آشغال فرایندی است برای ترمیم  خودکار حافظه انباشته شده . بلوک هایی از حافظه که زمانی به فایل ها اختصاص داشتند  اما مدتی است که از آنها استفاده نمی شود و بلوک هایی از حافظه که هنوز مورد  استفاده قرار میگیرند<span> </span>ممکن است حرکت داده  شوند<span> </span>تا از به هم پیوستن فضاهای خالی  حافظه بلوک های خالی بزرگتری بدست آید . </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">[ از کتاب : </span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>Microsoft computer  dictionary</span><span style="font-size: 10pt; font-family: Tahoma;">] * )  بنابراین<span> </span>لازم نیست که نسبت به موضوع  مدیریت حافظه نگران باشید ، همه اینها شما را از نگرانی در مورد اشاره گر های بی  ارزش ، خطرناک و هرز های حافظه رها میکنند . بنابر این شما میتوانید وقت خود را صرف  بهبود برنامه تان کنید .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">قدرتمند :</span><span style="font-size: 10pt; font-family: Tahoma;">Robust </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">جاوا برای نوشتن نرم  افزارهای قدرتمند و بسیار ایمن ساخته شده است . جاوا هنوز هم به طور قطع نرم افزار  ها را تضمین نمیکند . تقریبا هنوز هم امکان نوشتن برنامه های مشکل ساز در جاوا وجود  دارد ، هرچند که جاوا برخی از انواع مشخص خطاهای برنامه نویسی را حذف کرده که به  طرز چشمگیری نوشتن نرم افزار های ایمن را آسان تر کرده است .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">جاوا یک زبان تایپ شده  قدرتمند است ،‌ که اجازه چک شدن مشکلات<span> </span>و  خطاهای تایپی را در زمان کامپایل می دهد . جاوا بسیار قویتر از </span><span style="font-size: 10pt; font-family: Tahoma;">C++</span><span style="font-size: 10pt; font-family: Tahoma;"> تایپ شده است که بسیاری از خصوصیات انعطاف پذیر در زمان کامپایل را  از </span><span style="font-size: 10pt; font-family: Tahoma;">C</span><span style="font-size: 10pt; font-family: Tahoma;"> به  ارث برده است . مخصوصا هنگام اعلان توابع .جاوا به مدل اعلان صریح احتیاج دارد ،  زیرا که از مدل اعلان صریح </span><span style="font-size: 10pt; font-family: Tahoma;">C</span><span style="font-size: 10pt; font-family: Tahoma;"> پشتیبانی نمیکند . این مسئله مارا از اینکه کامپایلر میتواند خطاهای زمان اعلان را  بدست آورد ، مطمئن میکند . مسئله ای که منجر به ایجاد برنامه های ایمن تری میشود  .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">یکی از چیزهایی که باعث شده  که جاوا ساده باشد عدم وجود اشاره گر ها ومحاسبات بر روی آنها است . این ویژگی حتی  قدرت جاوا را هم با از میان بردن یک کلاس سراسری اشاره گر افزایش میدهد  .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">به طور مشابه تمام دسترسی به  آرایه ها و رشته ها در زمان اجرا چک می شوند تا از قطعی بودن آنها اطمینان حاصل شود  .با از بین بردن امکان دوباره نویسی حافظه و داده های هرزه ، تعویض نقش اشیاء از  نوعی به نوع دیگر هم در زمان اجرا کنترل میشود تا از مجاز بودن آن اطمینان حاصل شود  . </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">سرانجام زباله جمع کن خودکار  جاوا بسیاری از عملیات پاکسازی مرتبط با معماری حافظه را راه اندازی میکند . چیزی  که از خطاهای خطر ساز مرتبط با تخصیص و آزاد سازی حافظه جلوگیری میکند  .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">ایمن : </span><span style="font-size: 10pt; font-family: Tahoma;">Secure</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">یکی از دلایل پرطرفدار بودن  جاوا این است که یک زبان ایمن است . این ویژگی مخصوصا به خاطر طبیعت توزیع شده ی آن  بسیار مهم است .بدون وجود امنیت شما قطعا نمیخواهید که یک کد را از یک سایت تصادفی  اینترنت بارگذاری کنید و به آن اجازه اجرا شدن روی کامپیوتر خودتان را هم بدهید .  این دقیقا همان چیزی است که مردم هرروز با یک کد جاوا انجام میدهند . جاوا به صورت  ایمن طراحی شده و چندین لایه کنترل امنیت به وجود می آورد که شما را در برابر کد  های خطرساز محافظت می کنند و به کاربر اجازه میدهد که برنامه های ناشناخته را با  خیال راحت اجرا کند .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">همان طور که دیدیم ، برنامه  جاوا نمیتواند اشاره گر ها را به حافظه یا آرایه های سرریز یا حافظه خواندنی  خارج<span> </span>از محدوده یک آرایه یا رشته اشاره ،  اشاره دهد. این خصوصیت یکی از اصلی ترین وسایل دفاع جاوا در برابر کدهای خطرساز است  . دومین راه دفاع در برابر کد های خطرساز ، پردازش کدهای بایتی به صورت قابل تصدیق  و تایید است که مفسر جاوا به روی هر کدی که در حال بار گذاری باشد اعمال میکند .  این مراحل تایید از اینکه کد به صورت درستی ساخته شده اطمینان حاصل میکنند ، که  برای مثال پشته سرریزی یا زیرریزی نداشته باشد ، یا شامل کد های بایتی غیر مجاز  نباشد .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">کدهای بایتی خراب یا خطرساز  ممکن است از ضعف های اجرایی در مفسر جاوا سوء‌ استفاده کنند . لایه ای که در اینجا  ما را به طور ایمن محافظت میکند ، مدل جعبه شنی </span><span style="font-size: 10pt; font-family: Tahoma;">(Sand  box)</span><span style="font-size: 10pt; font-family: Tahoma;"> است : کدهای  ناشناخته در یک جعبه شنی قرار میگیرند<span> </span>جایی که میتوانند به صورت ایمن اجرا شوند ، بدون اینکه هیچ صدمه ای به بقیه  اجزاء یا محیط جاوا بزنند .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">وقتی یک برنامه کاربردی یا  دیگر کدهای ناشناخته در جعبه شنی در حال اجرا است ،‌ چند محدودیت در مورد کاری که  میتواند انجام دهد ، وجود دارد . واضح ترین این محدودیت ها این است که هیچ دسترسی  به هیچ یک از فایل های محلی سیستم وجود ندارد . در جعبه شنی محدودیت دیگری هم وجود  دارد که به وسیله کلاس مدیریت امنیت اعمال میشود<span> </span>. این مدل در ابتدا از اینکه سیستم های امنیتی را نصب کرده اید یا نه ،  مطمئن میشود ، چرا که همه کلاس های جاوا نیاز به عملیات حساسی مانند دسترسی به  سیستم فایل را دارند . اگر فراخوانی به وسیله یک کد ناشناخته به صورت مستقیم یا غیر  مستقیم انجام شد ،‌ مدیر امنیت مورد استثناء‌ را می فرستد و عملیات صورت نمی گیرد  .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">و سرانجام در جاوا ۱-۱ یک  راه حل ممکن دیگر برای مشکلات امنیتی وجود دارد ، به وسیله ضمیمه کردن یک امضاء  دیجیتالی به کد جاوا که اصل آن کد میتواند به صورت پنهانی و نهفته ساخته شود . اگر  شما اعتماد خود را به یک شخص یا یک سازمان مشخص کرده باشید ، کدی که امضاء آن هویت  مورد اعتماد روی آن قرار دارد ،‌ ایمن و مطمئن است . حتی زمانیکه<span> </span>در حال بارگذاری شدن در شبکه است و ممکن است  حتی بدون جلوگیری توسط جعبه شنی اجرا شود .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span><span style="font-size: 10pt; font-family: Tahoma;">عملکرد سطح بالا  :</span><span style="font-size: 10pt; font-family: Tahoma;">High  Performance </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">جاوا یک زبان تفسیر شده است  ، بنابر این هرگز به سرعت زبان کامپایل شده ای مثل </span><span style="font-size: 10pt; font-family: Tahoma;">C</span><span style="font-size: 10pt; font-family: Tahoma;"> نخواهد بود . گفته میشود که جاوا ۰-۱ به اندازه ۲۰ برابر از </span><span style="font-size: 10pt; font-family: Tahoma;">C</span><span style="font-size: 10pt; font-family: Tahoma;"> کند  تر است . جاوا ۱-۱ تقریبا سرعتی دو برابر جاوا ۱-۱ دارد . بنابراین ممکن است  عاقلانه باشد اینکه بگوییم کد </span><span style="font-size: 10pt; font-family: Tahoma;">C</span><span style="font-size: 10pt; font-family: Tahoma;"> کامپایل شده ۱۰ برابر سریع تر از کد های تفسیر شده ی جاوا اجرا میشود . اما قبل از  اینکه به خاطر این موضوع مایوس شوید ، آگاه باشید که این سرعت بیشتر از آن چیزی است  که برای برنامه های پرسرعت ، کاربردهای </span><span style="font-size: 10pt; font-family: Tahoma;">GUI</span><span style="font-size: 10pt; font-family: Tahoma;"> </span><span style="font-size: 10pt; font-family: Tahoma;">(Graphical  User Interface )</span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>، برنامه های برمبنای شبکه ، جایی که برنامه  کاربردی معمولا آماده برای اجرا شدن است ، انتظار برای کاربر که یک دستوری اعمال  کند و یا انتظار برای دریافت از شبکه ، لازم است .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">به علاوه قسمت هایی که به  سرعت های بالا نیاز دارند ، که کارهایی از قبیل الحاق رشته ها و مقایسه را انجام  میدهند ، با کد محلی جاوا اجرا میشوند .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">علاوه بر این کارایی ،  بسیاری از مفسر های جاوا اکنون شامل کامپایلر های فقط در زمان </span><span style="font-size: 10pt; font-family: Tahoma;">&#8221; just in time &#8220;</span><span style="font-size: 10pt; font-family: Tahoma;"> نیز هستند که  میتواند کدهای بایتی جاوا را برای هر نوع</span><span style="font-size: 10pt; font-family: Tahoma;">CPU </span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>در زمان اجرا به کد ماشین  ترجمه کند . فرمت کد بایتی جاوا با این کامپایلر های در زمان در مرکز کافی و مناسب  است و انصافا کدهای خوبی تولید میکند . در حقیقت </span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>Sun</span><span style="font-size: 10pt; font-family: Tahoma;"> ادعا میکند که  کارایی کد های بایتی که به کد ماشین تبدیل شده اند ، تقریبا به خوبی کارآیی آن  در</span><span style="font-size: 10pt; font-family: Tahoma;"> C </span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>و </span><span style="font-size: 10pt; font-family: Tahoma;">C++</span><span style="font-size: 10pt; font-family: Tahoma;"> است .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">اگر شما خواهان این هستید که  قابل حمل بودن کد ها را قربانی بهبود در سرعت آن کنید ، میتوانید بخش قابل توجهی از  برنامه خود را در </span><span style="font-size: 10pt; font-family: Tahoma;">C</span><span style="font-size: 10pt; font-family: Tahoma;"> و </span><span style="font-size: 10pt; font-family: Tahoma;">C++</span><span style="font-size: 10pt; font-family: Tahoma;"> بنویسید و از روش های مخصوص جاوا برای مشترک کردن با این کد محلی  جاوا استفاده کنید .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">چند نخ کشی شده  :</span><span style="font-size: 10pt; font-family: Tahoma;">Multitbreaded </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;"> </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">در یک برنامه کاربردی بر  مبنای </span><span style="font-size: 10pt; font-family: Tahoma;">GUI</span><span style="font-size: 10pt; font-family: Tahoma;"> شبکه ای ، مثل مرورگر وب ، تصور اینکه چند چیز بتوانند به طور  همزمان اجرا شوند ، آسان است . یک کاربر میتواند همزمان با اینکه دارد یک صفحه وب  را میخواند به یک کلیپ صوتی گوش دهد و همزمان در پس زمینه مرورگر یک عکس را  بارگذاری کند . </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">جاوا یک زبان چندنخ کشی شده  است ، که از چندین رشته اجرایی (گاهی پردازش سبک وزن خوانده میشود) پشتیبانی میکند  و میتواند چندین کار را انجام دهد . یکی از مزیت های چندنخ کشی شده این است که  عملکرد سطح بالایی برای کاربردهای گرافیکی برای کاربر فراهم میکند . </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">اگر شما سعی کرده اید که با  نخ ها در </span><span style="font-size: 10pt; font-family: Tahoma;">C</span><span style="font-size: 10pt; font-family: Tahoma;"> و </span><span style="font-size: 10pt; font-family: Tahoma;">C++</span><span style="font-size: 10pt; font-family: Tahoma;"> کار کنید ، میدانید که کمی مشکل است . جاوا برنامه نویسی با نخ ها  را بسیار آسان تر کرده است ، با به وجود آوردن زبان درون ساخته شده ای که از نخ ها  پشتیبانی میکند . بسته </span><span style="font-size: 10pt; font-family: Tahoma;">jana.lang </span><span style="font-size: 10pt; font-family: Tahoma;"><span> </span>یک کلاس بوجود آورده است  که از روش هایی برای شروع و پایان یک نخ ، و مرتب کردن ترتیب گره ها در میان چیز  های دیگر ، پشتیبانی میکند . </span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">حتی دستورات زبان جاوا از نخ  ها پشتیبانی میکنند ، که با استفاده از کلمات کلیدی مطابق شده . این کلمات کلیدی  علامت گذاری بخش های کد یا تمامی روش هایی را که باید فقط با یک نخ در یک زمان اجرا  شوند را به شدت آسان کرده است .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">به دلیل اینکه جاوا استفاده  از نخ ها را بسیار ساده میکند ، کلاس جاوا در شماری از جاها از این نخ ها استفاده  میکند . برای مثال هر برنامه کاربردی که انیمیشن اجرا میکند ، از نخ ها استفاده  کرده است .</span></p>
<p class="MsoNormal" style="margin: 0in 18.3pt 0pt 45pt; text-align: justify;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;">به طور مشابه جاوا از برنامه  های نا همگام ، ورودی ها و خروجی های بلاک نشده با اخطاری به وسیله سیگنال ها یا  وقفه ها پشتیبانی نمیکند ، در این صورت شما باید یک نخ بسازید که روی هر کانال  ورودی خروجی که با آن کار میکنید بلاک شده باشد .</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/howjavaisgood-870905-531/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>آموزش جاوا &#8211; integers ( اعداد صحیح )</title>
		<link>http://www.irandevelopers.com/programming/java-integer-870905-529/</link>
		<comments>http://www.irandevelopers.com/programming/java-integer-870905-529/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 21:30:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[جاوا - Java]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=529</guid>
		<description><![CDATA[جاوا چهار نوع عدد صحیح تعریف می کند : byte، short،، int،، long، . کلیه این اعداد دارای علامات مثبت و منفی هستند . جاوا از اعداد صحیح غیر علامت دار و فقط مثبت پشتیبانی نمی کند . بسیاری از زبانهای برنامه نویسی شامل Cو C++و هم از اعداد صحیح علامت دار و هم از [...]]]></description>
			<content:encoded><![CDATA[<div class="txt"><span style="font-size: x-small;">جاوا چهار نوع عدد صحیح تعریف می کند : byte، short،،  int،، long، . کلیه<br />
این اعداد دارای علامات مثبت و منفی هستند . جاوا از اعداد  صحیح غیر علامت دار و<br />
فقط مثبت پشتیبانی نمی کند . بسیاری از زبانهای برنامه  نویسی شامل Cو C++و هم<br />
از اعداد صحیح علامت دار و هم از اعداد صحیح فاقد علامت  پشتیبانی می کنند . اما<br />
طراحان جاوا احساس می کردند که اعداد صحیح فاقد علامت  غیر ضروری است . بویژه<br />
آنها احساس کردند که مفهوم فاقد علامت (unsigned) بیشتر  برای مشخص کردن رفتار<br />
بیت بالاتر از حد مجاز (high-order bit) استفاده می شود  که علامت یک int را<br />
هنگامیکه بعنوان یک رقم عنوان می شود ، مشخص می کند . بعدا&#8221;  خواهید دید که<br />
جاوا مفهوم بیت بالاتر از حد مجاز (high-order bit) را بگونه ای  متفاوت مدیریت<br />
می کند ، یعنی با اضافه کردن یک عملگر ویژه حرکت به راست فاقد  علامت unsigned)<br />
(right shift . بدین ترتیب نیاز به یک نوع عدد صحیح فاقد علامت  منتفی شده است .<br />
پهنای (widit) یک نوع عدد صحیح را نباید با میزان حافظه ای که  مصرف می کند<br />
اشتباه گرفت ، بلکه نشانه رفتاری است که برای متغیرها و عبارات آن  نوع تعریف<br />
می شود . محیط حین اجرای جاوا از هر اندازه ای که نیاز داشته باشد ،  استفاده<br />
می کند ، البته تا آن اندازه ای که انواع براساس اعلام قبلی شما رفتار  کنند . در<br />
حقیقت ، حداقل یک پیاده سازی byte وجود دارد که ، short را بعنوان  مقادیر ۳۲<br />
بیتی ذخیره می کند تا عملکرد را توسعه دهد. زیرا آنچه درحال حاضر  مورد استفاده<br />
قرار می گیرد ، اندازه کلمه (word size) اکثر کامپیوترهاست .<br />
پهنا و دامنه این انواع اعداد صحیح همانطوریکه در جدول زیر مشاهده می کنید<br />
طیف وسیعی دارند :<br />
دامنه پهنا نام<br />
long 64- 9/ 223/ 372/ 036/ 845/  775/ 808 to 9/ 223/ 372<br />
/036/ 854/ 775/ 807<br />
int 32- 2/ 147/ 483/ 648 to 2/  147/ 483/ 647<br />
short 16- 32/ 768 to 32/ 767<br />
byte 8- 128 to 127</p>
<p>اکنون  نگاه دقیقتری به هر یک از انواع عدد صحیح خواهیم داشت .<br />
byte</p>
<p>کوچکترین  نوع عدد صحیح byte است . این یک نوع علامت دار ۸ بیتی است که دامنه<br />
آن از ۱۲۸-  تا ۱۲۷ می باشد . متغیرهای نوع byte بویژه هنگامیکه با یک جریان<br />
داده از یک  شبکه یا یک فایل کار میکنید ، سودمند خواهند بود . همچنین هنگامیکه<br />
با داده  دودویی ( باینری ) خام مشغول کار هستید که ممکن است بطور مستقیم با<br />
سایر انواع  توکار جاوا سازگاری نداشته باشند ، بسیار سودمند هستند .<br />
متغیرهای byte را با  استفاده از واژه کلیدی byte اعلام می کنیم . بعنوان<br />
مثال ، در زیر دو متغیر  byte با اسامی bو cو را اعلام کرده ایم : + byte b/ c;</p>
<p>short</p>
<p>یک نوع  ۱۶ بیتی علامت داراست . دامنه آن از ۷۶۸ ۳۲/- تا ۷۶۷ ۳۲/ است . short<br />
در اصل کم  استفاده ترین نوع در جاوا می باشد ، چون طوری تعریف شده که بایت بالای<br />
آن اول  می آید ( آن را big-endian format میگویند ). این نوع برای کامپیوترهای ۱۶<br />
بیتی  که بسرعت از رده خارج شده اند ، کاربری دارد .<br />
در زیر مثالهایی از چگونگی اعلان  متغیرهای short را مشاهده می کنید : + short s;<br />
+ short t;</p>
<p>نکته :  Endiannes توصیف کننده چگونگی ذخیره شدن انواع داده چند بایتی short int<br />
و longو  در حافظه است . اگر ۲ بایت برای معرفی یک نوع short استفاده<br />
شود ، آن بایتی که  ابتدا قرار می گیرد ( مهمترین یا کم اهمیت ترین ? )<br />
می گوید که یک ماشین  big-endian است ، بدان معنی که مهمترین بایت اول<br />
آمده و بعد از آن بایت کم  اهمیت تر قرار دارد . ماشینهایی نظیر SPARC و power pc<br />
از نوع big-endian و  ماشینهای سری lntelx86نوع little-endianع<br />
هستند .<br />
int</p>
<p>رایجترین نوع  عدد صحیح int است . این یک نوع ۳۲ بیتی علامت دار است که دامنه<br />
آن از  ۲/۱۴۷/۴۸۳/۶۴۸- تا ۲/۱۴۷/۴۸۳/۶۴۷ گسترده است . علاوه بر کاربردهای دیگر<br />
متغیرهای از نوع int برای کنترل حلقه ها و نمایه سازی آرایه ها مورد استفاده  قرار<br />
می گیرند . هر بار که یک عبارت عدد صحیح شامل byte، short،و intو و ارقام  لفظی<br />
(literal) داشته باشید، کل عبارت قبل از انجام محاسبات به int ارتقائ می  یابد.<br />
نوع int روان ترین و کاراترین نوع است و اکثر اوقات هنگامیکه میخواهید  رقمی<br />
را برای شمارش یا نمایه سازی آرایه ها یا انجام محاسبات عدد صحیح بوجود  آورید<br />
باید از آن استفاده نمایید . شاید بنظر آید که استفاده از انواع shortو  byteو<br />
سبب صرفه جویی در فضا شود ، اما هیچ تضمینی وجود ندارد که جاوا این انواع  را<br />
بطرق داخلی به int ارتقائ ندهد . همواره بیاد داشته باشید که نوع ، مشخص  کننده<br />
رفتار است نه اندازه . ( تنها استثنائ در این مورد، آرایه است که در آنجا  byte<br />
بصورت تضمینی برای هر عضو آرایه فقط یک بایت ، short دو بایت و int از  چهار<br />
بایت استفاده می کند . )<br />
long</p>
<p>یک نوع ۶۴ بیتی علامت دار است و  برای مواردی مفید است که یک نوع int طول<br />
کافی برای دربرگرفتن مقدار مورد نظر  نداشته باشد. دامنه long کاملا&#8221; وسیع است .<br />
این نوع ، برای کار با اعداد خیلی  بزرگ مناسب است . بعنوان مثال ، در زیر<br />
برنامه ای را مشاهده می کنید که مسافت  طی شده توسط نور در تعداد مشخص روز را بر<br />
حسب مایل محاسبه می کند . </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ // Compute distance light travels using long  variables.<br />
+ class Light {<br />
+ public static void main(String args[] ){<br />
+  int lightspeed;<br />
+ long days;<br />
+ long seconds;<br />
+ long distance;<br />
+<br />
+  // approximate speed of light in miles per second<br />
+ lightspeed =  86000;<br />
+<br />
+ days = 1000; // specify number of days here<br />
+<br />
+ seconds =  days * 24 * 60 * 60; // convert to seconds<br />
+<br />
+ distance = lightspeed *  seconds; // compute distance<br />
+<br />
+ System.out.print(&#8220;In &#8221; + days);<br />
+  System.out.print(&#8221; days light will travel about &#8220;);<br />
+  System.out.println(distance + &#8221; miles .&#8221;);<br />
+ }<br />
+  }</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">خروجی این برنامه بقرار زیر خواهد بود : ln  1000 days light will travel about 4730400000000 miles.</span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/java-integer-870905-529/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>انواع اعداد اعشاری جاوا</title>
		<link>http://www.irandevelopers.com/programming/number-java-870905-527/</link>
		<comments>http://www.irandevelopers.com/programming/number-java-870905-527/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 21:29:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[جاوا - Java]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=527</guid>
		<description><![CDATA[اعداد اعشاری یا همان اعداد حقیقی برای ارزش گذاری عبارتهایی که نیازمند دقت بیشتری هستند ، استفاده می شوند . بعنوان نمونه ، محاسباتی نظیر ریشه دوم و محاسبات مثلثاتی نظیر سینوس و کسینوس منجربه جوابهایی می شوند که برای تعیین دقت آن نیاز به نوع عدد اعشاری می باشد . جاوا یک مجموعه استاندارد [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin: 0in 0in 0pt; direction: rtl; unicode-bidi: embed; text-align: right;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">اعداد اعشاری یا همان  اعداد حقیقی برای ارزش گذاری عبارتهایی که نیازمند<br />
دقت بیشتری هستند ، استفاده  می شوند . بعنوان نمونه ، محاسباتی نظیر ریشه دوم<br />
و محاسبات مثلثاتی نظیر سینوس  و کسینوس منجربه جوابهایی می شوند که برای تعیین<br />
دقت آن نیاز به نوع عدد اعشاری  می باشد . جاوا یک مجموعه استاندارد (</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">IEEE-754</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">)<br />
از انواع عدد اعشاری و عملگرها را پیاده سازی می کند. دو نوع  عدد اعشاری تعریف<br />
شده یعنی </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">float</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">و </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">double</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">و هستند که بترتیب معرف دقت معمولی و  مضاعف می باشند .<br />
پهنا و دامنه آنها را در زیر نشان داده ایم :<br />
دامنه پهنا  بر حسب تعداد بیت نام<br />
</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">double 64 1.7e-308 to  1.7e+308</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"><br />
</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">float</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> 32 3.4</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">e-038 to 3.4e+038</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"></p>
<p>هر یک از انواع  اعشاری را متعاقبا&#8221; مورد بررسی قرار می دهیم .<br />
</span><strong><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">float</span></strong><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"></p>
<p>این نوع مشخص کننده یک مقدار  با دقت معمولی بوده که از ۳۲ بایت حافظه<br />
استفاده می کند . دقت معمول روی بعضی  پردازنده ها سریعتر بوده و نسبت به دقت<br />
مضاعف نیمی از فضا را اشغال می کند ،  اما هنگامیکه مقادیر خیلی بزرگ یا خیلی<br />
کوچک باشند ، دقت خود را از دست میدهد .  متغیرهای نوع </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">float</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> برای زمانی مناسب<br />
هستند که از یک عضو کسری استفاده می کنید اما  نیازی به دقت خیلی زیاد ندارید .<br />
بعنوان مثال ، نوع </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">float</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> برای معرفی دلار و سنت بسیار مناسب است . + </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">float hightemp/ lowtemp</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">;</p>
<p></span><strong><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">double</span></strong><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"></p>
<p>دقت مضاعف که با واژه کلیدی </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">double</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> معین می شود برای ذخیره کردن یک مقدار ۶۴<br />
بیت فضا را اشغال می  کند . دقت مضاعف روی برخی پردازنده های جدید که برای<br />
محاسبات ریاضی با سرعت  زیاد بهینه شده اند ، واقعا&#8221; سریعتر از دقت معمولی عمل<br />
می کند . کلیه توابع  مثلثاتی نظیر ()</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">sin </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">، </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">()cos</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> و ()</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">sqrt</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> مقادیر مضاعف را<br />
برمی گردانند . هنگام اجرای محاسبات مکرر که  نیاز به حفظ دقت دارید و یا هنگام<br />
کار با ارقام خیلی بزرگ </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">double</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> بهترین انتخاب است .<br />
در زیر برنامه ای را مشاهده می کنید که از </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">double</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> استفاده نمود تا محیط یک<br />
دایره را محاسبه کند : </span><span style="font-family: Tahoma;" dir="ltr"></span></p>
<p style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Tahoma;">+ // Compute the area of a  circle.<br />
+ class Area {<br />
+ public static void main(String args[] ){<br />
+  double pi/ r/ a;<br />
+<br />
+ r = 10.8; // radius of circle<br />
+ pi = 3.1416; //  pi/ approximately<br />
+ a = pi * r * r; // compute area<br />
+<br />
+  System.out.println(&#8220;Area of circle is &#8221; + a);<br />
+ }<br />
+ }</p>
<p></span><span style="font-family: Tahoma;" dir="rtl" lang="AR-SA"></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt; direction: rtl; unicode-bidi: embed; text-align: right;" dir="rtl"><strong><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">کاراکترها</span></strong><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"><br />
در جاوا از نوع داده </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">char</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> برای ذخیره کردن کاراکترها استفاده می شود . اما<br />
برنامه نویسان </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">C</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">و </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">C</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">++و آگاه باشند که </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">char</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> در جاوا مشابه </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">char</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> در زبانهای </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">C</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> و </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">C</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">++<br />
نیست . در زبانهای </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">C</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">و </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">C</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">++و ، نوع </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">char</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> یک نوع عدد صحیح با پهنای ۸ بیت<br />
است . اما جاوا متفاوت عمل می  کند . جاوا از کدهای جهانی (</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">unicode</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">) برای معرفی<br />
کاراکترها استفاده می کند . کدهای جهانی یک مجموعه  کاملا&#8221; جهانی از کاراکترها<br />
هستند که می توانند همه کاراکترها را معرفی نمایند .  این مجموعه شامل دهها<br />
مجموعه کوچک تر کاراکتری نظیر </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">Latin</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">، </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">Greek</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">،، </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">Arabic</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">،، </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">Cyrillic</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">،، </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">Hebrew</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">، </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">Katakana</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"><br />
، </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">Hangul</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">، و امثال آن است .<br />
برای این منظور ، ۱۶ بیت مورد نیاز است .  بنابراین </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">char</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> در جاوا یک نوع ۱۶<br />
بیتی است . دامنه </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">char</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">از ۰ز تا ۶۵/۵۳۶ می باشد . در نوع </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">char</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> مقدار منفی وجود<br />
ندارد . مجموعه استاندارد کاراکترها موسوم به </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">ASCII</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> همچون گذشته دارای دامنه<br />
از ۰ تا ۱۲۷ و مجموعه کاراکترهای ۸  بیتی توسعه یافته موسوم به </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">lso-Latin-1</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"><br />
دارای دامنه از ۰ تا ۲۵۵ می باشند .<br />
چون در جاوا امکان  نوشتن ریز برنامه ها برای کاربری جهانی وجود دارد ، بنظر<br />
می رسد که بهتر است  جاوا از کدهای جهانی برای معرفی کاراکترها استفاده نماید .<br />
البته بکار بردن  کدهای جهانی درمورد زبانهایی نظیر انگلیسی ،آلمانی ،اسپانیایی<br />
یا فرانسوی که  کاراکترهای آنها را می توان براحتی داخل ۸ بیت جای داد ، تا حدی<br />
سبب نزول  کارآیی خواهد شد . اما این بهایی است که برای رسیدن به قابلیت حمل<br />
جهانی در  برنامه ها باید پرداخت .<br />
نکته : اطلاعات بیشتر درباره کدهای جهانی را در  آدرسهای وب زیر پیدا خواهید<br />
نمود : </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">http://www .unicode  .org</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"><br />
</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">http://www .stonehand  .com/unicode</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> .</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">html</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"></p>
<p>در زیر برنامه ای را  مشاهده می کنید که متغیرهای </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">char</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> را نشان می دهد : </span><span style="font-family: Tahoma;" dir="ltr"></span></p>
<p style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Tahoma;">+ // Demonstrate char data  type.<br />
+ class CharDemo {<br />
+ public static void main(String args[] ){<br />
+  char ch1/ ch2;<br />
+<br />
+ ch1 = 88; // code for X<br />
+ ch2 = &#8216;Y&#8217;;<br />
+<br />
+  System.out.print(&#8220;ch1 and ch2 :&#8221;);<br />
+ System.out.println(ch1 + &#8221; &#8221; +  ch2);<br />
+ }<br />
+ }</span><span style="font-family: Tahoma;" dir="rtl" lang="AR-SA"></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt; direction: rtl; unicode-bidi: embed; text-align: right;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">این برنامه خروجی زیر را  نشان خواهد داد : </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">ch1 and ch2 <img src='http://www.irandevelopers.com/wp-includes/images/smilies/icon_mad.gif' alt="icon mad انواع اعداد اعشاري جاوا " class='wp-smiley' title="انواع اعداد اعشاري جاوا " /> y</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"></p>
<p>دقت کنید که  مقدار ۸۸به </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">ch1</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> نسبت داده شده ، که مقدار متناظر با حرف </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">x</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> در<br />
کد </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">ASCII</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> ( و کد جهانی ) است . قبلا&#8221; هم گفتیم که مجموعه کاراکتری </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">ASCII</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> َ۱۲۷<br />
مقدار اولیه در مجموعه کاراکتری کدهای جهانی را اشغال  کرده است . بهمین دلیل<br />
کلیه فوت و فنهای قدیمی که قبلا&#8221; با کاراکترها پیاده  کرده اید ، در جاوا نیز به<br />
خوبی جواب می دهند .<br />
اگر چه انواع </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">char</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA"> عدد صحیح محسوب نمی شوند ، اما در بسیاری از شرایط<br />
می توانید  مشابه عدد صحیح با آنها رفتار کنید . بدین ترتیب قادرید دو کاراکتر<br />
را با هم  جمع نموده و یا اینکه مقدار یک متغیر کارکتری را کاهش دهید . بعنوان<br />
مثال ،  برنامه زیر را در نظر بگیرید : </span><span style="font-family: Tahoma;" dir="ltr"></span></p>
<p style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Tahoma;">+ // char variables behave like  integers.<br />
+ class CharDemo2 {<br />
+ public static void main(String args[]  ){<br />
+ char ch1;<br />
+<br />
+ ch1 = &#8216;X&#8217;;<br />
+ System.out.println(&#8220;ch1 contains &#8221; +  ch1);<br />
+<br />
+ ch1++; // increment ch1<br />
+ System.out.println(&#8220;ch1 is now &#8221; +  ch1);<br />
+ }<br />
+ }</span><span style="font-family: Tahoma;" dir="rtl" lang="AR-SA"></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt; direction: rtl; unicode-bidi: embed; text-align: right;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">خروجی این برنامه بشرح  زیر خواهد بود</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> : ch1 contains x<br />
ch1 is now y</p>
<p></span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">در برنامه ابتدا مقدار</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> x</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">به</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> ch1 </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">داده میشود . سپس</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> ch1 </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">افزایش می یابد</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> . </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">این</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"><br />
</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">روال باعث می شود تا</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> ch1 </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">حرف</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> y </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">را اختیار کند، که کاراکتر بعدی در  ترتیب</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> ASCII<br />
( </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">و کدهای جهانی ) می باشد</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> .<br />
Boolean</p>
<p></span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">جاوا یک نوع ساده موسوم</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr" lang="AR-SA"> </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">به</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> <strong>boolean</strong> </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">برای مقادیر منطقی دارد .  این نوع فقط</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"><br />
</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">یکی از مقادیر ممکن</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> true</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">یا</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> false</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">ا را اختیار می کند . این نوعی است  که توسط</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"><br />
</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">کلیه عملگرهای رابطه ای  نظیر</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr" lang="AR-SA"> </span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr">b</span><span style="font-family: Tahoma;" dir="ltr"><br />
</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">شرطی</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr" lang="AR-SA"> </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">که دستورهای کنترلی نظیر</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> if</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">و</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> for</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">و را مدیریت می کنند ، استفاده می  شود</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> .<br />
</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">در زیر</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr" lang="AR-SA"> </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">برنامه ای مشاهده می کنید که  نوع</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> boolean </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">را نشان می دهد</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> : </span><span style="font-family: Tahoma;" dir="ltr"></span></p>
<p style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Tahoma;">+ // Demonstrate boolean  values.<br />
+ class BoolTest {<br />
+ public static void main(String args[] ){<br />
+  boolean b;<br />
+<br />
+ b = false;<br />
+ System.out.println(&#8220;b is &#8221; + b);<br />
+ b =  true;<br />
+ System.out.println(&#8220;b is &#8221; + b);<br />
+<br />
+ // a boolean value can  control the if statement<br />
+ if(b )System.out.println(&#8220;This is  executed.&#8221;);<br />
+<br />
+ b = false;<br />
+ if(b )System.out.println(&#8220;This is not  executed.&#8221;);<br />
+<br />
+ // outcome of a relational operator is a boolean  value<br />
+ System.out.println(&#8220;10 &gt; 9 is &#8221; +( 10 &gt; 9));<br />
+ }<br />
+  }</span><span style="font-family: Tahoma;"></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt; direction: rtl; unicode-bidi: embed; text-align: right;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">خروجی برنامه فوق بقرار  زیر خواهد بود</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> : </span><span style="font-family: Tahoma;" dir="ltr"></span></p>
<p style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Tahoma;">b is false<br />
b is true<br />
This is  executed.<br />
10&gt;9 is true</span><span style="font-family: Tahoma;"></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt; direction: rtl; unicode-bidi: embed; text-align: right;" dir="rtl"><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">درباره این</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr" lang="AR-SA"> </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">برنامه سه نکته جالب توجه وجود دارد  . اول اینکه وقتی که مقدار</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> boolean<br />
</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">توسط</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> ()println </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">خارج می شود ، می بینید  که</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> &#8220;true&#8221;</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">یا</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> &#8220;false&#8221;</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">ا بنمایش</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"><br />
</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">درمی آید . دوم</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr" lang="AR-SA"> </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">اینکه یک متغیر</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> boolean </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">بتنهایی برای کنترل  دستور</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> if </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">کفایت</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"><br />
</span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">می کند . دیگر نیازی</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr" lang="AR-SA"> </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">به نوشتن یک دستور</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> if </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">بقرار زیر نخواهد بود</span><span style="font-size: 10pt; font-family: Tahoma;" dir="ltr"> : + if(b == true&#8230; )</p>
<p></span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">سوم اینکه ، پی آمد یک عملگر رابطه  ای نظیربولین یک مقدار </span><span style="font-size: 10pt; font-family: Tahoma;" lang="AR-SA">است </span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/number-java-870905-527/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>متغیرها و اعمال روی آنها</title>
		<link>http://www.irandevelopers.com/programming/vars-java-870905-525/</link>
		<comments>http://www.irandevelopers.com/programming/vars-java-870905-525/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 21:28:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[جاوا - Java]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=525</guid>
		<description><![CDATA[در یک برنامه جاوا ، متغیر ، اساسی ترین واحد ذخیره سازی است . یک متغیر به وسیله ترکیبی از یک شناسه ، یک نوع و یک مقدار ده اولیه اختیاری تعریف خواهد شد . علاوه بر این ، کلیه متغیرها دارای یک قلمرو هستند که رویت پذیری آنها را تعریف می کند و یک [...]]]></description>
			<content:encoded><![CDATA[<div class="txt"><span style="font-size: x-small;">در یک برنامه جاوا ، متغیر ، اساسی ترین واحد ذخیره  سازی است . یک متغیر به<br />
وسیله ترکیبی از یک شناسه ، یک نوع و یک مقدار ده اولیه  اختیاری تعریف خواهد<br />
شد . علاوه بر این ، کلیه متغیرها دارای یک قلمرو هستند که  رویت پذیری آنها را<br />
تعریف می کند و یک زمان حیات نیز دارند. متعاقبا&#8221; این اجزائ  را مورد بررسی<br />
قرار می دهیم .</p>
<p><strong>اعلان یک متغیر Declaring a  variable </strong><br />
در جاوا کلیه متغیرها قبل از استفاده باید اعلان شوند . شکل  اصلی اعلان متغیر<br />
بقرار زیر می باشد : type identifier [=value]  [/identifier[=value]&#8230;];</p>
<p>مقدار شناسه مقدار شناسه نوع<br />
نوع (type) یکی  از انواع اتمی جاوا یا نام یک کلاس یا رابط است . ( انواع<br />
کلاس و رابط بعدا&#8221;  بررسی خواهد شد . ) شناسه نام متغیر است . می توانید با<br />
گذاشتن یک علامت تساوی  و یک مقدار ، متغیر را مقدار دهی اولیه نمایید . در ذهن<br />
بسپارید که عبارت مقدار  دهی اولیه باید منتج به یک مقدار از همان نوعی ( یا<br />
سازگار با آن نوع ) که برای  متغیر مشخص شده ، گردد . برای اعلان بیش از یک نوع<br />
مشخص شده ، از فهرست کاماهای  (&#8216;) جدا کننده استفاده نمایید .<br />
در زیر مثالهایی از اعلان متغیر از انواع  گوناگون را مشاهده می کنید . دقت<br />
کنید که برخی از آنها شامل یک مقدار دهی اولیه  هستند . </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ int a/ b/ c; // declares three ints/ a/ b/ and  c.<br />
+ int d = 3/ e/ f = 5; // declares three more ints/ initializing<br />
+ // d  and f.<br />
+ byte z = 22; // initializes z.<br />
+ double pi = 3.14159; // declares  an approximation of pi.<br />
+ char x = &#8216;x&#8217;; // the variable x has the value  &#8216;x&#8217;.</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">شناسه هایی که انتخاب می کنید هیچ عامل  ذاتی در نام خود ندارند که نوع آنها<br />
را مشخص نماید . بسیاری از خوانندگان بیاد  می آورند زمانی را که FORTRAN کلیه<br />
شناسه های از Iتا Nا را پیش تعریف نمود تا  از نوع INTEGER باشند ، در حالیکه<br />
سایر شناسه ها از نوع REAL بودند . جاوا به  هر یک از شناسه های متناسب شکل گرفته<br />
امکان اختیار هر نوع اعلان شده را داده  است .</p>
<p><strong>مقدار دهی اولیه پویا Dynamic intialization </strong><br />
اگر چه مثالهای قبلی از ثابت ها بعنوان مقدار ده اولیه استفاده کرده  اند<br />
اما جاوا امکان مقداردهی اولیه بصورت پویا را نیز فراهم آورده است . این  موضوع<br />
با استفاده از هر عبارتی که در زمان اعلان متغیر باشد ، انجام می گیرد .<br />
بعنوان مثال ، در زیر برنامه کوتاهی را مشاهده می کنید که طول ضلع یک مثلث<br />
قائم الزاویه را با داشتن طول دو ضلع مقابل محاسبه می کند : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ // Demonstrate dynamic initialization.<br />
+ class  DynInit {<br />
+ public static void main(String args[] ){<br />
+ double a = 3.0/ b =  4.0;<br />
+ // c is dynamically initialized<br />
+ double c = Math.sqrt(a * a + b *  b);<br />
+<br />
+ System.out.println(&#8220;Hypotenuse is &#8221; + c);<br />
+ }<br />
+  }</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">در اینجا سه متغیر محلی a، b،، c، اعلان  شده اند . دو تای اولی توسط<br />
ثابت ها مقدار دهی اولیه شده اند . اما متغیر C  بصورت پویا و بر حسب طول اضلاع<br />
مثلث قائم الزاویه ( بنابر قانون فیثاغورث )  مقدار دهی اولیه می شود . این<br />
برنامه از یکی از روشهای توکار جاوا یعنی ()sqrt  که عضوی از کلاس Math بوده و<br />
ریشه دوم آرگومانهای خود را محاسبه میکند استفاده  کرده است . نکته کلیدی اینجا<br />
است که عبارت مقدار دهی اولیه ممکن است از هر یک  از اجزائ معتبر در زمان مقدار<br />
دهی اولیه ، شامل فراخوانی روشها ، سایر متغیرها  یا الفاظ استفاده نماید .</p>
<p><strong>قلمرو زمان حیات متغیرها<br />
</strong>تابحال کلیه متغیرهای استفاده شده ، در زمان شروع روش ()main اعلان می  شدند.<br />
اما جاوا همچنین به متغیرها امکان می دهد تا درون یک بلوک نیز اعلام شوند  .<br />
همانطوریکه قبلا&#8221; توضیح دادیم ، یک بلوک با یک ابرو باز و یک ابرو بسته محصور<br />
می شود : یک بلوک تعریف کننده یک قلمرو است . بدین ترتیب هر بار که یک بلوک<br />
جدید را شروع میکنید ، یک قلمرو جدید نیز بوجود می آورید . همانطوریکه احتمالا&#8221;<br />
از تجربیات برنامه نویسی قبلی بیاد دارید ، یک قلمرو (scope) تعیین کننده آن<br />
است که چه اشیائی برای سایر بخشهای برنامه قابل رویت هستند . این قلمرو همچنین<br />
زمان حیات (lifetime) آن اشیائ را تعیین می کند .<br />
اکثر زبانهای کامپیوتری  دو طبقه بندی از قلمروها را تعریف می کنند : سراسری<br />
(global) و محلی (local) .  اما این قلمروهای سنتی بخوبی با مدل موکد شی ئ گرایی<br />
جاوا مطابقت ندارند . اگر  چه در جاوا هم می توان مقادیری را بعنوان قلمرو<br />
سراسری ایجاد نمود ، اما این  فقط یک نوع استثنائ است و عمومیت ندارد . در جاوا<br />
قلمرو اصلی همانهایی هستند که  توسط یک کلاس یا یک روش تعریف می شوند . حتی همین<br />
تمایز نیز تا حدی ساختگی و  مصنوعی است . اما از آنجاییکه قلمرو کلاس دارای<br />
مشخصات و خصلتهای منحصر بفردی  است که قابل استفاده در قلمرو تعریف شده توسط<br />
روش نیست ، این تمایز تا حدی  محسوس خواهد بود . بخاطر تفاوتهای موجود ، بحث<br />
قلمرو کلاس ( و متغیرهای اعلان  شده داخل آن ) این مبحث بتعوق افتاده است . در حال<br />
حاضر فقط قلمروهای تعریف شده  توسط یک روش یا داخل یک روش را بررسی می کنیم .<br />
قلمرو تعریف شده توسط یک روش با  یک ابروی باز شروع می شود. اما اگر آن روش<br />
دارای پارامترهایی باشد ، آنها نیز  داخل قلمرو روش گنجانده خواهند شد . بعدا&#8221;<br />
نگاه دقیقتری به پارامترها خواهیم  داشت و فعلا&#8221; کافی است بدانیم که پارامترها<br />
مشابه هر متغیر دیگری در یک روش کار  می کنند .<br />
بعنوان یک قانون عمومی ، متغیرهای اعلان شده داخل یک قلمرو برای  کدهایی که<br />
خارج از قلمرو تعریف می شوند ، قابل رویت نخواهند بود ( قابل دسترسی  نیستند ).<br />
بدین ترتیب ، هنگامیکه یک متغیر را درون یک قلمرو اعلان می کنید ، در  حقیقت آن<br />
متغیر را محلی دانسته و آن را در مقابل دستیابیها و تغییرات غیر مجاز  محافظت<br />
می کنید . در حقیقت ، قوانین قلمرو اساس کپسول سازی را فراهم می کنند .<br />
قلمروها را می توان بصورت تودرتو (nesting) محفوظ داشت . بعنوان مثال ، هر<br />
زمان یک بلوک کد ایجاد کنید ، یک قلمرو جدید تودرتو ایجاد نموده اید . هنگامیکه<br />
این واقعه روی می دهد ، قلمرو بیرونی ، قلمرو درونی را دربرمی گیرد . این بدان<br />
معنی است که اشیائ اعلان شده در قلمرو بیرونی برای کدهای داخل قلمرو درونی قابل<br />
رویت هستند اما عکس این قضیه صادق نیست . اشیائاعلان شده داخل قلمرو درونی برای<br />
بیرون قلمرو قابل رویت نخواهند بود .<br />
برای درک تاثیر قلمروهای تودرتو ،  برناه ریز را در نظر بگیرید : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ // Demonstrate block scope.<br />
+ class Scope {<br />
+  public static void main(String args[] ){<br />
+ int x; // known to all code within  main<br />
+<br />
+ x = 10;<br />
+ if(x == 10 ){ // start new scope<br />
+ int y = 20; //  known only to this bock<br />
+<br />
+ // x and y both known here.<br />
+  System.out.println(&#8220;x and y :&#8221; + x + &#8221; &#8221; + y);<br />
+ x = y * 2;<br />
+ }<br />
+ // y  = 100 :// Error! y not known here<br />
+<br />
+ // x is still known here.<br />
+  System.out.println(&#8220;x is &#8221; + x);<br />
+ }<br />
+ }</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">همانطوریکه توضیحات نشان می دهند ، متغیر x در ابتدای قلمروی ()main اعلان<br />
شده و برای کلیه کدهای متعاقب داخل ()main قابل دسترسی می باشد . داخل بلوک if<br />
متغیر y اعلان شده است . از آنجاییکه یک بلوک معرف یک قلمرو است ، y فقط برای<br />
سایر کدهای داخل بلوک خود قابل رویت است . این دلیل آن است که خارج بلوک<br />
مربوطه ، خط y=100 در خارج توضیح داده شده است . اگر نشانه توضیح راهنمایی را<br />
تغییر مکان دهید ، یک خطای زمان کامپایل (compile-time error) اتفاق می افتد<br />
چون y برای بیرون از بلوک خود قابل رویت نیست . داخل بلوک if متغیر x قابل<br />
استفاده است زیرا کدهای داخل یک بلوک ( منظور یک قلمرو تودرتو شده است ) به<br />
متغیرهای اعلان شده در یک قلمرو دربرگیرنده دسترسی دارند .<br />
داخل یک بلوک ،  در هر لحظه ای می توان متغیرها را اعلان نمود ، اما فقط زمانی<br />
معتبر می شوند که  اعلان شده باشند . بدین ترتیب اگر یک متغیر را در ابتدای یک<br />
روش اعلان می کنید،  برای کلیه کدهای داخل آن روش قابل دسترس خواهد بود. بالعکس<br />
اگر یک متغیر را در  انتهای یک بلوک اعلان کنید ، هیچ فایده ای ندارد چون هیچیک<br />
از کدها به آن  دسترسی ندارند . بعنوان مثال این قطعه از برنامه غیر معتبر است<br />
چون نمی توان از  count قبل از اعلان آن استفاده نمود : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ // This fragment is wrong!<br />
+ count = 100; //  oops! cannot use count before it is declared!<br />
+ int  count;</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">یک نکته مهم دیگر در اینجا وجود دارد  که باید بخاطر بسپارید: متغیرها زمانی<br />
ایجاد می شوند که قلمرو آن ها وارد شده  باشد ، و زمانی خراب می شوند که قلمرو<br />
آنها ترک شده باشد . یعنی یک متغیر هربار  که خارج از قلمروش برود ، دیگر مقدار<br />
خود را نگهداری نخواهد کرد . بنابراین ،  متغیرهای اعلان شده داخل یک روش مقادیر<br />
خود را بین فراخوانی های آن روش نگهداری  نمی کنند . همچنین یک متغیر اعلان شده<br />
داخل یک بلوک ، وقتی که بلوک ترک شده  باشد ، مقدار خود را از دست خواهد داد .<br />
بنابراین ، زمان حیات (lifetime) یک  متغیر محدود به قلمرو آن می باشد .<br />
اگر اعلان یک متغیر شامل مقدار دهی اولیه آن  باشد ، آنگاه هر زمان که به<br />
بلوک مربوطه وارد شویم ، آن متغیر مجددا&#8221; مقدار دهی  اولیه خواهد شد . بعنوان<br />
مثال برنامه زیر را در نظر بگیرید : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ // Demonstrate lifetime of a variable.<br />
+ class  LifeTime {<br />
+ public static void main(String args[] ){<br />
+ int x;<br />
+<br />
+  for(x = 0; x &lt; 3; x++ ){<br />
+ int y =- 1; // y is initialized each time block  is entered<br />
+ System.out.println(&#8220;y is :&#8221; + y); // this always prints- 1<br />
+  y = 100;<br />
+ System.out.println(&#8220;y is now :&#8221; + y);<br />
+ }<br />
+ }<br />
+  }</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">خروجی تولید شده توسط این برنامه بقرار زیر  است : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">y is- :1<br />
y is now:100<br />
y is- :1<br />
y is  now:100<br />
y is- :1<br />
y is now:100</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">همانطوریکه مشاهده می کنید ، هر بار که به حلقه for داخلی وارد می شویم ، y<br />
همواره بطور مکرر مقدار اولیه ۱- را اختیار می کند . اگر چه بلافاصله به این<br />
متغیر مقدار ۱۰۰ نسبت داده می شود، اما هر بار نیز مقدار خود را از دست میدهد.<br />
و بالاخره آخرین نکته : اگر چه میتوان بلوکها را تودرتو نمود، اما نمیتوانید<br />
متغیری را اعلان کنید که اسم آن مشابه اسم متغیری در قلمرو بیرونی باشد. از این<br />
نظر جاوا با زبانهای Cو C++و متفاوت است . در زیر مثالی را مشاهده می کنید که<br />
در آن تلاش شده تا دو متغیر جدا از هم با اسم اعلان شوند . در جاوا اینکار مجاز<br />
نیست . در Cو C++و این امر مجاز بوده و دو bar کاملا&#8221; جدا خواهند ماند . </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ // This program will not compile<br />
+ class  ScopeErr {<br />
+ public static void main(String args[] ){<br />
+ int bar = 1;<br />
+  { // creates a new scope<br />
+ int bar = 2; // Compile-time error &#8212; bar already  defined!<br />
+ }<br />
+ }<br />
+ }</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;"><span style="color: red;">تبدیل خودکار و تبدیل غیر خودکار انواع</span><br />
اگر تجربه قبلی برنامه  نویسی داشته اید ، پس می دانید که کاملا&#8221; طبیعی است که<br />
مقداری از یک نوع را به  متغیری از نوع دیگر نسبت دهیم . اگر این دو نوع سازگار<br />
باشند ، آنگاه جاوا بطور  خودکار این تبدیل (conversion) را انجام می دهد .<br />
بعنوان مثال ، همواره امکان  دارد که مقدار int را به یک متغیر long نسبت داد .<br />
اما همه انواع با یکدیگر  سازگاری ندارند ، بنابراین هر گونه تبدیل انواع مجاز<br />
نخواهد بود . بعنوان نمونه  ، هیچ تبدیلی از doubleبه byte تعریف نشده است .<br />
خوشبختانه ، امکان انجام  تبدیلات بین انواع غیر سازگار هم وجود دارد . برای<br />
انجام اینکار ، باید از  تبدیل cast استفاده کنید که امکان یک تبدیل صریح بین<br />
انواع غیر سازگار را بوجود  می آورد . اجازه دهید تا نگاه دقیقتری به تبدیل<br />
خودکار انواع و تبدیل cast  داشته باشیم .</p>
<p>تبدیل خودکار در جاوا Java&#8217;s Automatic conyersions<br />
هنگامیکه یک نوع داده به یک متغیر از نوع دیگر نسبت داده می شود ، اگر دو<br />
شرط زیر فراهم باشد ، یک تبدیل خودکار نوع انجام خواهد شد :<br />
ؤ دو نوع با  یکدیگر سازگار باشند .<br />
ؤ نوع مقصد بزرگتر از نوع منبع باشد .<br />
هنگامیکه این  دو شرط برقرار باشد ، یک تبدیل پهن کننده (widening) اتفاق<br />
می افتد . برای مثال  نوع int همواره باندازه کافی بزرگ است تا کلیه مقادیر<br />
معتبر byte را دربرگیرد،  بنابراین نیازی به دستور صریح تبدیل cast وجود ندارد.<br />
در تبدیلات پهن کننده ،  انواع رقمی شامل انواع عدد صحیح و عدد اعشاری با هر<br />
یک از انواع سازگاری دارند  . اما انواع رقمی با انواع charو booleanو سازگار<br />
نیستند . همچنین انواع charو  booleanو با یکدیگر سازگار نیستند .<br />
همانطوریکه قبلا&#8221; ذکر شد ، جاوا هنگام  ذخیره سازی یک ثابت عدد صحیح لفظی<br />
(Literal integer constant) به متغیرهای از  انواع byte، short،و longو ، یک<br />
تبدیل خودکار نوع را انجام می دهد .</p>
<p>تبدیل غیر خودکار انواع ناسازگار<br />
اگر چه تبدیلات خودکار انواع بسیار  سودمند هستند ، اما جوابگوی همه نیازها<br />
نیستند . بعنوان مثال ، ممکن است  بخواهید یک مقدار int را به یک متغیر byte<br />
نسبت دهید. این تبدیل بطور خودکار  انجام نمی گیرد، زیرا یک byteاز intز کوچکتر<br />
است .این نوع خاص از تبدیلات را  گاهی تبدیل باریک کننده (narrowing conversions)<br />
می نامند ، زیرا بطور صریح  مقدار را آنقدر باریک تر و کم عرض تر می کنید تا با<br />
نوع هدف سازگاری یابد .<br />
برای ایجاد یک تبدیل بین دو نوع ناسازگار ، باید از cast استفاده نمایید .  cast<br />
یک تبدیل نوع کاملا&#8221; صریح است . شکل عمومی آن بقرار زیر می باشد : ( target  &#8211; type )value</p>
<p>نوع نوع مقصد یا هدف<br />
در اینجا نوع هدف ، همان نوعی است که  مایلیم مقدار مشخص شده را به آن تبدیل<br />
کنیم . بعنوان مثال ، قطعه زیر از یک  برنامه تبدیل غیر خودکار از intبه byte<br />
را اجرا می کند . اگر مقدار integer  بزرگتر از دامنه یک byte باشد ، این مقدار<br />
به مدول ( باقیمانده تقسیم یک  integer بر دامنه ) byte کاهش خواهد یافت . + int a;<br />
+ byte b;<br />
+ //&#8230;<br />
+  b =( byte )a;</p>
<p>هر گاه که یک مقدار اعشاری به یک عدد صحیح نسبت داده شود ،  شکل دیگری از<br />
تبدیل اتفاق می افتد : بریدن ، truncation . همانطوریکه می دانید  ، اعداد صحیح<br />
دارای قسمت اعشاری نیستند . بنابراین هنگامیکه یک مقدار اعشاری به  یک نوع عدد<br />
صحیح نسبت داده می شود ، جزئ اعشاری از بین خواهد رفت ( بریده خواهد  شد ) .<br />
بعنوان مثال ، اگر مقدار ۱٫۲۳ را به یک عدد صحیح نسبت دهیم ، مقدار  حاصله فقط<br />
عدد ۱ می باشد . مقدار ۰٫۲۳ بریده (truncated) خواهد شد . البته اگر  اندازه<br />
اجزائ عدد کلی آنچنان بزرگ باشد که در نوع عدد صحیح مقصد نگنجد ، آنگاه  مقدار<br />
فوق به مدول دامنه نوع هدف کاهش خواهد یافت .<br />
برنامه زیر نشان دهنده  برخی از تبدیلات انواع است که مستلزم تبدیل cast<br />
می باشند : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ // Demonstrate casts.<br />
+ class Conversion {<br />
+  public static void main(String args[] ){<br />
+ bytt b;<br />
+ int i = 257;<br />
+  double d = 323.142;<br />
+<br />
+ System.out.println(&#8220;\nConversion of int to  byte.&#8221;);<br />
+ b =( byte )i;<br />
+ System.out.println(&#8220;i and b &#8221; + i + &#8221; &#8221; +  b);<br />
+<br />
+ System.out.println(&#8220;\nConversion of double to int.&#8221;);<br />
+ i =(  int )d;<br />
+ System.out.println(&#8220;d and i &#8221; + d + &#8221; &#8221; + i);<br />
+<br />
+  System.out.println(&#8220;\nConversion of double to byte.&#8221;);<br />
+ b =( byte )d;<br />
+  System.out/println(&#8220;d and b &#8221; + d + &#8221; &#8221; + b);<br />
+ }<br />
+  }</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">خروجی این برنامه بقرار زیر می باشد : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">Conversion of int to byte.<br />
i and b 257  1</p>
<p>Conversion of double to int.<br />
d and i 323.142 323</p>
<p>Conversion  of double to byte.<br />
d and b 323.142 67<br />
</span></p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/vars-java-870905-525/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>آرایه ها در جاوا</title>
		<link>http://www.irandevelopers.com/programming/array-java-870905-523/</link>
		<comments>http://www.irandevelopers.com/programming/array-java-870905-523/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 21:27:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[جاوا - Java]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=523</guid>
		<description><![CDATA[یک آرایه گروهی از متغیرهای یک نوع است که با یک نام مشترک به آنها ارجاع می شود . می توان آرایه ها را برای هر یک از انواع ایجاد نمود و ممکن است این آرایه ها دارای یک یا چندین بعد باشند . برای دسترسی به یک عضو آرایه از نمایه (index) آن آرایه [...]]]></description>
			<content:encoded><![CDATA[<div class="txt"><span style="font-family: Tahoma;"><span style="font-size: x-small;">یک آرایه گروهی از متغیرهای یک نوع  است که با یک نام مشترک به آنها ارجاع<br />
می شود . می توان آرایه ها را برای هر یک  از انواع ایجاد نمود و ممکن است این<br />
آرایه ها دارای یک یا چندین بعد باشند .  برای دسترسی به یک عضو آرایه از نمایه<br />
(index) آن آرایه استفاده می شود . آرایه  ها یک وسیله مناسب برای گروه بندی<br />
اطلاعات مرتبط با هم هستند .<br />
نکته : اگر  با Cو C++و آشنایی دارید ، آگاه باشید . آرایه ها در جاوا بطور<br />
متفاوتی نسبت به  زبانهای دیگر کار می کنند .</p>
<p><span style="color: darkviolet;">آرایه های یک  بعدی</span><br />
آرایه یک بعدی بطور ضروری فهرستی از متغیرهای یکنوع است . برای  ایجاد یک<br />
آرایه ، باید یک متغیر آرایه از نوع مورد نظرتان ایجاد کنید . فرم  عمومی اعلان<br />
یک آرایه یک بعدی بقرار زیر است : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">type var-name [];</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">نام متغیر نوع<br />
در اینجا type اعلان کننده نوع اصلی آرایه است . نوع اصلی  تعیین کننده نوع<br />
داده برای هر یک از اعضائ داخل در آرایه است . بنابراین ، نوع  اصلی آرایه تعیین<br />
می کند که آرایه چه نوعی از داده را نگهداری می کند . بعنوان  مثال ، در زیر<br />
یک آرایه با نام month-days با نوع آرایه ای از عدد صحیح اعلان  شده است . </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ int month_days[];</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">اگر چه این اعلان تثبیت می کند که month-days یک متغیر آرایه است ، اما بطور<br />
واقعی آرایه ای وجود ندارد . در حقیقت ، مقدار month-days برابر تهی (null)<br />
می باشد که یک آرایه بدون مقدار را معرفی می کند . برای پیوند دادن month-days<br />
با یک آرایه واقعی و فیزیکی از اعداد صحیح ، باید از یک عملگر new استفاده<br />
نموده و به month-days منتسب کنید. new یک عملگراست که حافظه را اختصاص میدهد.<br />
بعداnew &#8221; را با دقت بیشتری بررسی می کنیم ، اما لازم است که هم اکنون از آن<br />
استفاده نموده و حافظه را برای آرایه ها تخصیص دهید . فرم عمومی new آنگونه که<br />
برای آرایه های یک بعدی بکار می رود بقرار زیر ظاهر خواهد شد : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">array-var=new type  [size];</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">اندازه نوع متغیر آرایه<br />
در اینجا  type مشخص کننده نوع داده ای است که تخصیص داده می شود، size مشخص<br />
کننده تعداد  اعضائ آرایه است و array-var متغیر آرایه است که به آرایه پیوند<br />
می یابد . یعنی  برای استفاده از new در تخصیص یک آرایه ، باید نوع و تعداد<br />
اعضایی که تخصیص می  یابند را مشخص نمایید . اعضائ آرایه که توسط new تخصیص<br />
می یابند بطور خودکار با  مقدار صفر مقدار دهی اولیه می شوند . این مثال یک<br />
آرایه ۱۲ عضوی از اعداد صحیح  را تخصیص داده و آنها را به month-days پیوند<br />
می دهد . </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ month_days = new  int[12];</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">بعد از اجرای این دستور ،  month-days به یک آرایه ۱۲ تایی از اعداد صحیح<br />
ارجاع خواهد نمود . بعلاوه کلیه  اجزائ در آرایه با عدد صفر مقدار دهی اولیه<br />
خواهند شد .<br />
اجازه دهید مرور  کنیم : بدست آوردن یک آرایه مستلزم پردازش دو مرحله ای است .<br />
اول باید یک متغیر  با نوع آرایه مورد نظرتان اعلان کنید . دوم باید حافظه ای که<br />
آرایه را نگهداری  می کند ، با استفاده از new تخصیص دهید و آن را به متغیر<br />
آرایه نسبت دهید .  بنابراین در جاوا کلیه آرایه ها بطور پویا تخصیص می یابند .<br />
اگر مفهوم تخصیص  پویا برای شما ناآشناست نگران نباشید . این مفهوم را بعدا&#8221;<br />
تشریح خواهیم کرد .<br />
هر بار که یک آرایه را تخصیص می دهید ، می توانید بوسیله مشخص نمودن نمایه<br />
آن داخل کروشه [] به یک عضو مشخص در آرایه دسترسی پیدا کنید . کلیه نمایه های<br />
آرایه ها با عدد صفر شروع می شوند. بعنوان مثال این دستور مقدار ۲۸ را به دومین<br />
عضو month-days نسبت می دهد . </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ month_days[1] = 28;</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">خط بعدی مقدار ذخیره شده در نمایه ۳ را نمایش می دهد . </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+  System.out.println(month_days[3]);</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">با کنار  هم قرار دادن کلیه قطعات ، در اینجا برنامه ای خواهیم داشت که یک<br />
آرایه برای  تعداد روزهای هر ماه ایجاد می کند . </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ // Demonstrate a one-dimensional array.<br />
+ class  Array {<br />
+ public static void main(String args[] ){<br />
+ int  month_days[];<br />
+ month_days = new int[12];<br />
+ month_days [0] = 31;<br />
+  month_days [1] = 28;<br />
+ month_days [2] = 31;<br />
+ month_days [3] = 30;<br />
+  month_days [4] = 31;<br />
+ month_days [5] = 30;<br />
+ month_days [6] = 31;<br />
+  month_days [7] = 31;<br />
+ month_days [8] = 30;<br />
+ month_days [9] = 31;<br />
+  month_days [10] = 30;<br />
+ month_days [11] = 31;<br />
+ System.out.println(&#8220;April  has &#8221; + month_days[3] + &#8221; days .&#8221;);<br />
+ }<br />
+ }</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">وقتی این برنامه را اجرا میکنید ، برنامه ، تعداد روزهای ماه آوریل را چاپ<br />
میکند. همانطوریکه ذکر شد، نمایه های آرایه جاوا با صفر شروع می شوند، بنابراین<br />
تعداد روزهای ماه آوریل در month-days[3] برابر ۳۰ می باشد .<br />
این امکان  وجود دارد که اعلان متغیر آرایه را با تخصیص خود آرایه بصورت زیر<br />
ترکیب نمود :  + int month_days[] = new int[12];</p>
<p>این همان روشی است که معمولا&#8221; در برنامه  های حرفه ای نوشته شده با جاوا مشاهده<br />
می کنید .<br />
می توان آرایه ها را زمان  اعلانشان ، مقدار دهی اولیه نمود . پردازش آن بسیار<br />
مشابه پردازشی است که برای  مقدار دهی اولیه انواع ساده استفاده می شود . یک<br />
مقدار ده اولیه آرایه فهرستی  از عبارات جدا شده بوسیله کاما و محصور شده بین<br />
ابروهای باز و بسته می باشد .  کاماها مقادیر اجزائ آرایه را از یکدیگر جدا<br />
می کنند . آرایه بطور خودکار آنقدر  بزرگ ایجاد می شود تا بتواند ارقام اجزایی<br />
را که در مقدار ده اولیه آرایه مشخص  کرده اید ، دربرگیرد . نیازی به استفاده از new<br />
وجود ندارد . بعنوان مثال ، برای  ذخیره نمودن تعداد روزهای هر ماه ، کد<br />
بعدی یک آرایه مقدار دهی اولیه شده از  اعداد صحیح را بوجود می آورد : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ // An improved version of the previous  program.<br />
+ class AutoArray {<br />
+ public static void main(String args[]  ){<br />
+ int month_days[] = { 31/ 28/ 31/ 30/ 31/ 30/ 31/ 31/ 30/ 31/ 30/ 31  };<br />
+ System.out.println(&#8220;April has &#8221; + month_days[3] + &#8221; days .&#8221;);<br />
+  }<br />
+ }</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">وقتی این برنامه را اجرا کنید ،  همان خروجی برنامه قبلی را خواهید دید .<br />
جاوا بشدت کنترل می کند تا مطمئن شود  که بطور تصادفی تلاشی برای ذخیره نمودن<br />
یا ارجاع مقادیری خارج از دامنه آرایه  انجام ندهید . سیستم حین اجرای جاوا<br />
کنترل می کند که کلیه نمایه های آرایه ها  در دامنه صحیح قرار داشته باشند . ( از<br />
این نظر جاوا کاملا&#8221;با Cاو C++و متفاوت  است که هیچ کنترل محدوده ای در حین اجرا<br />
انجام نمی دهند . ) بعنوان مثال ،  سیستم حین اجرا ، مقدار هر یک از نمایه ها به month-days<br />
را کنترل می کند تا  مطمئن شود که بین ارقام ۰ و ۱۱ داخل قرار داشته<br />
باشند . اگر تلاش کنید تا به  اجزائ خارج از دامنه آرایه ( اعداد منفی یا اعدادی<br />
بزرگتر از طول آرایه )  دسترسی یابید، یک خطای حین اجرا (run-time error) تولید<br />
خواهد شد .<br />
در زیر  یک مثال پیچیده تر مشاهده می کنید که از یک آرایه یک بعدی استفاده<br />
می کند . این  برنامه میانگین یک مجموعه از ارقام را بدست می آورد . </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ // Average an array of values.<br />
+ class Average  {<br />
+ public static void main(String args[] ){<br />
+ double nums[] = {10.1/  11.2/ 12.3/ 13.4/ 14.5};<br />
+ double result = 0;<br />
+ int i;<br />
+<br />
+ for(i=0;  i&lt;5; i++)<br />
+ result = result + nums[i];<br />
+<br />
+  System.out.println(&#8220;Average is &#8221; + result / 5);<br />
+ }<br />
+  }</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">آرایه های چند بعدی<br />
در جاوا آرایه  های چند بعدی در واقع آرایه ای از آرایه ها هستند . این قضیه<br />
همانطوریکه انتظار  دارید ظاهر و عملکردی مشابه آرایه های چندبعدی منظم (regular)<br />
دارد . اما  خواهید دید که تاوتهای ظریفی هم وجود دارند . برای اعلان یک متغیر<br />
آرایه چند  بعدی ، با استفاده از مجموعه دیگری از کروشه ها هر یک از نمایه های<br />
اضافی را  مشخص می کنید. بعنوان مثال ، عبارت زیرر یک متغیر آرایه دو بعدی بنام twoD<br />
را  اعلان می کند . </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ int twoD[][] = new  int[4][5];</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">این عبارت یک آرایه ۴در ۵ر را  تخصیص داده و آن را به twoD نسبت می دهد . از<br />
نظر داخلی این ماتریس بعنوان یک  آرایه از آرایه نوع int پیاده سازی خواهد شد .<br />
بطور فرضی ، این آرایه را می  توان بصورت شکل زیر نمایش داد .<br />
</span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">Right index determines column.</p>
<p>|| || || ||  ||<br />
\/ \/ \/ \/ \/</p>
<p>|<br />
| [0][4] | [0][3] | [0][2] | [0][1] | [0][0]  &gt;<br />
|<br />
| |<br />
| [1][4] | [1][3] | [1][2] | [1][1] | [1][0] &gt;<br />
Left  index<br />
determines |<br />
| [2][4] | [2][3] | [2][2] | [2][1] | [2][0] .&gt; row<br />
|<br />
| |<br />
| [3][4] | [3][3] | [3][2] | [3][1] | [3][0] &gt;<br />
Given  :int twoD[][] = new int [4][5];</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">برنامه بعدی  هر عضو آرایه را از چپ به راست ، و از بالا به پایین شماره داده<br />
و سپس مقادیر  آنها را نمایش می دهد : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ // Demonstrate a two-dimensional array.<br />
+ class  TwoDArray {<br />
+ public static void main(String args[] ){<br />
+ int twoD[][] =  new int[4][5];<br />
+ int i/ j/ k = 0;<br />
+<br />
+ for(i=0; i&lt;4; i++)<br />
+  for(j=0; j&lt;5; j++ ){<br />
+ twoD[i][j] = k;<br />
+ k++;<br />
+<br />
+ }<br />
+<br />
+  for(i=0; i&lt;4; i++ ){<br />
+ for(j=0; j&lt;5; j++)<br />
+  System.out.print(twoD[i][j] + &#8221; &#8220;);<br />
+ System.out.println)(;<br />
+ }<br />
+  }<br />
+ }</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">خروجی این برنامه بقرار زیر خواهد  بود : ۰ ۱ ۲ ۳ ۴<br />
</span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">۵ ۶ ۷ ۸ ۹<br />
۱۰ ۱۱ ۱۲ ۱۳ ۱۴<br />
۱۵ ۱۶ ۱۷ ۱۸  ۱۹</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">هنگام تخصیص حافظه به یک آرایه چند بعدی ،  کافی است فقط حافظه برای اولین<br />
بعد را مشخص نمایید . می توانید ابعاد دیگر را  جداگانه تخصیص دهید . بعنوان<br />
مثال ، کد زیر حافظه اولین بعد twoD را هنگام  اعلان آن تخصیص می دهد . این کد<br />
حافظه دومین بعد را بصورت دستی اختصاص می دهد . </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ int twoD[][] = new int[4][];<br />
+ twoD[0] = new  int[5];<br />
+ twoD[1] = new int[5];<br />
+ twoD[2] = new int[5];<br />
+ twoD[3] = new  int[5];</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">اگرچه در این حالت اختصاص انفرادی  حافظه به دومین بعد هیچ مزیتی ندارد، اما<br />
احتمال چنین مزیتهایی وجود دارد .  بعنوان مثال ، هنگامیکه ابعاد را بصورت دستی<br />
اختصاص می دهید ، نیازی نیست که  همان ارقام برای اجزائ هر بعد را تخصیص دهید .<br />
همانطوریکه قبلا&#8221; گفتیم ، از  آنجاییکه آرایه های چند بعدی واقعا&#8221; آرایه ای از<br />
آرایه ها هستند ، طول هر یک از  آرایه ها تحت کنترل شما قرار می گیرند . بعنوان<br />
مثال ، برنامه بعدی یک آرایه دو  بعدی ایجاد می کند که در آن اندازه های دومین<br />
بعد نامساوی هستند . </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ // Manually allocate differing size second  dimension.<br />
+ class TwoDAgain {<br />
+ public static void main(String args[]  ){<br />
+<br />
+<br />
+ int twoD[][] = new int[4][];<br />
+ twoD[0] = new int[1];<br />
+  twoD[1] = new int[2];<br />
+ twoD[2] = new int[3];<br />
+ twoD[3] = new  int[4];<br />
+<br />
+ int i/ j/ k = 0;<br />
+<br />
+ for(i=0; i&lt;4; i++)<br />
+ for(j=0;  j<br />
+ towD[i][j] = k;<br />
+ k++;<br />
+ }<br />
+<br />
+ for(i=0; i&lt;4;  i++ ){<br />
+ for(j=0; j<br />
+ System.out.print(twoD[i][j] + &#8221; &#8220;);<br />
+  System.out.println)(;<br />
+ }<br />
+ }<br />
+ }</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">خروجی این برنامه بقرار زیر می باشد : ۰<br />
</span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">۱ ۲<br />
۳ ۴ ۵<br />
۶ ۷ ۸ ۹</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">آرایه ای که توسط این برنامه ایجاد می شود ، بصورت زیر خواهد بود :<br />
</span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">| [۰][۰] |</p>
<p>| [۱][۰] | [۱][۱] |</p>
<p>| [۲][۰]  | [۲][۱] | [۲][۲] |</p>
<p>| [۳][۰] | [۳][۱] | [۳][۲] | [۳][۳]  |</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">از آرایه های چند بعدی ناجور ( یا  نامنظم ) در اکثر برنامه ها استفاده نمیشود<br />
زیرا برخلاف آنچه مردم هنگام مواجه  شدن با یک آرایه چند بعدی انتظار دارند<br />
رفتار می کنند . اما این آرایه ها در  برخی شرایط بسیار کارا هستند . بعنوان<br />
مثال ، اگر نیاز به یک آرایه دو بعدی  خیلی بزرگ دارید که دارای تجمع پراکنده<br />
باشد ( یعنی که یکی و نه همه اجزائ آن  مورد استفاده قرار می گیرند ) ، آنگاه<br />
آرایه بی قاعده احتمالا&#8221; یک راه حل کامل  خواهد بود .<br />
این امکان وجود دارد که آرایه های چند بعدی را مقدار دهی اولیه  نمود . برای<br />
اینکار ، فقط کافی است هر یک از مقدار ده اولیه ابعاد را داخل  مجموعه ابروهای<br />
ختص خودش قرار دهید . برنامه بعدی یک ماتریس ایجاد می کند که هر  یک از اجزائ<br />
آن شامل حاصلضرب نمایه های سطرها و ستونها هستند. همچنین دقت  نمایید که می توان<br />
از عبارات همچون مقادیر لفظی داخل مقدار ده اولیه آرایه  استفاده نمود . </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ // Initialize a two-dimensional array.<br />
+ class  Matrix {<br />
+ public static void main(String args[] ){<br />
+ double m[][] =  {<br />
+ { 0*0/ 1*0/ 2*0/ 3*0 };<br />
+ { 0*1/ 1*1/ 2*1/ 3*1 };<br />
+ { 0*2/ 1*2/  2*2/ 3*2 };<br />
+ { 0*3/ 1*3/ 2*3/ 3*3 };<br />
+ };<br />
+ int i/ j;<br />
+<br />
+  for(i=0; i&lt;4; i++ ){<br />
+ for(j=0 j&lt;4; j++)<br />
+ System.out.print(m[i][j]  + &#8221; &#8220;);<br />
+ System.out.println)(;<br />
+ }<br />
+ }<br />
+  }</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">پس از اجرای این برنامه ، خروجی آن بقرار  زیر خواهد بود : ۰ ۰ ۰ ۰<br />
</span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">۰ ۱ ۲ ۳<br />
۰ ۲ ۴ ۶<br />
۰ ۳ ۶  ۹</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">همانطوریکه مشاهده می کنید، هر سطر در  آرایه همانگونه که در فهرستهای مقدار<br />
دهی اولیه مشخص شده ، مقدار دهی اولیه شده  است .<br />
مثالهای بیشتری درباره استفاده از آرایه چند بعدی بررسی می کنیم . برنامه<br />
بعدی یک آرایه سه بعدی ۳x4x5 ایجاد می کند . سپس حاصل نمایه های مربوطه را برای<br />
هر عضو بارگذاری می کند . در نهایت این حاصل ها را نمایش خواهد داد : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ // Demonstrate a three-dimensional array.<br />
+  class threeDDatrix {<br />
+ public static void main(String args[] ){<br />
+ int  threeD[][][] = new int[3][4][5];<br />
+ int i/ j/ k;<br />
+ for(i=0; i&lt;3;  i++)<br />
+ for(j=0; j&lt;4; j++)<br />
+ for(k=0; k&lt;5; k++)<br />
+ threeD[i][j][k]  = i * j * k;<br />
+<br />
+ for(i=0; i&lt;3; i++ ){<br />
+ for(j=0; j&lt;4; j++ ){<br />
+  for(k=0; k&lt;5; k++)<br />
+ System.out.print(threeD[i][j][k] + &#8221; &#8220;);<br />
+  System.out.println)(;<br />
+ }<br />
+ System.out.println)(;<br />
+ }<br />
+ }<br />
+  }</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">خروجی این برنامه بقرار زیر خواهد بود : ۰  ۰ ۰ ۰ ۰<br />
</span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">۰ ۰ ۰ ۰ ۰<br />
۰ ۰ ۰ ۰ ۰<br />
۰ ۰ ۰ ۰ ۰</p>
<p>۰ ۰ ۰ ۰  ۰<br />
۰ ۱ ۲ ۳ ۴<br />
۰ ۲ ۴ ۶ ۸<br />
۰ ۳ ۶ ۹ ۱۲</p>
<p>۰ ۰ ۰ ۰ ۰<br />
۰ ۲ ۴ ۶ ۸<br />
۰ ۴ ۸  ۱۲ ۱۶<br />
۰ ۶ ۱۲ ۱۸ ۲۴</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">دستور زبان  جایگزین اعلان آرایه<br />
یک شکل دوم برای اعلان یک آرایه بصورت زیر وجود دارد : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">type [] var-name;</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">نام متغیر نوع<br />
در اینجا کروشه ها بعداز مشخص کننده نوع می آیند نه بعداز  نام متغیر آرایه .<br />
بعنوان مثال دو شکل اعلان زیر یکسان عمل می کنند : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ int a1[] = new int[3];<br />
+ int[] a2 = new  int[3];</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">دو شکل اعلان زیر هم یکسان عمل می  کنند : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ char twod1[][] = n<br />
</span></p>
</div>
<p><!--   - Rate Form    ---></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/array-java-870905-523/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>اولین برنامه ساده java</title>
		<link>http://www.irandevelopers.com/programming/first-simplejava-870905-521/</link>
		<comments>http://www.irandevelopers.com/programming/first-simplejava-870905-521/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 21:25:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[جاوا - Java]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=521</guid>
		<description><![CDATA[اکنون که اصول اساسی شی ئ گرایی جاوا مورد بررسی قرار گرفته ، به برخی از برنامه های واقعی جاوا نگاه خواهیم کرد. کار را با کامپایل کردن و اجرای برنامه کوتاه زیر شروع می کنیم . خواهیم دید که این برنامه بیشتر از حد تصور شما کار لازم دارد . + /* + This [...]]]></description>
			<content:encoded><![CDATA[<div class="txt"><span style="font-family: Tahoma;"><span style="font-size: x-small;">اکنون که اصول اساسی شی ئ گرایی  جاوا مورد بررسی قرار گرفته ، به برخی از<br />
برنامه های واقعی جاوا نگاه خواهیم  کرد. کار را با کامپایل کردن و اجرای برنامه<br />
کوتاه زیر شروع می کنیم . خواهیم  دید که این برنامه بیشتر از حد تصور شما کار<br />
لازم دارد . </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ /*<br />
+ This is a simple Java program.<br />
+ Call  this file &#8220;Example.java&#8221;.<br />
+ /*<br />
+ class Exaample {<br />
+ // Your program  begins with a call to main.)(<br />
+ public static void main( String args []  ){<br />
+ System.out.println( &#8220;This is a simple Java program.&#8221;);<br />
+ }<br />
+  }</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">نکته : در توصیف زیرین از JDK(JAVA  Developer&#8217;s Kit() استاندارد استفاده شده<br />
است که توسط خود شرکت Sun  Microsystems عرضه شده است . اگر از یک محیط<br />
توسعه یافته دیگر برای جاوا  استفاده می کنید ، آنگاه باید از رویه<br />
متفاوتی برای کامپایل کردن و اجرای  برنامه استفاده کنید . در این مورد<br />
به راهنمای کاربران کامپایلر خود مراجعه  نمایید .</p>
<p>وارد نمودن برنامه Entering the program<br />
در بسیاری از زبانهای  کامپیوتری ، نام فایلی که کد منبع (Source code) یک<br />
برنامه را نگهداری می کند  بصورت اختیاری انتخاب می شود . اما در جاوا اینگونه<br />
نیست . اولین چیزی که باید  درباره جاوا بدانید این است که نامی را که برای<br />
فایل منبع انتخاب می کنید ،  بسیار اهمیت دارد . در این مثال ، نام فایل منبع<br />
باید Example JJAVA باشد . چرا  ?<br />
در جاوا یک فایل منبع را بطور رسمی واحد کامپایل سازی (Compilation unit)<br />
می گویند . این فایل یک فایل متنی است که دربرگیرنده یک یا چندین تعریف کلاس<br />
(class definition) است . در کامپایلر جاوا باید از فایل منبعی استفاده نمود<br />
که دارای پسوند فایل JAVA باشد . دقت کنید که این پسوند دارای چهار کاراکتر<br />
است . حتما&#8221; می دانید که سیستم عامل شما باید توانایی حمایت از پسوندهای<br />
طولانی تر را داشته باشد . بدین ترتیب Dos و ویندوز ۳٫۱ توانایی حمایت از جاوا<br />
( لااقل تاکنون ) را ندارند. اما ویندوز NT و۹۵ بخوبی ازعهده اینکار برمی آیند.<br />
یکبار دیگر به برنامه فوق نگاه کنید، نام کلاس تعریف شده توسط برنامه ،Example<br />
می باشد ، این یک تصادف یا اتفاق نیست . در جاوا کلیه کدها باید داخل یک کلاس<br />
جای بگیرند . براساس آیین نامه ، نام آن کلاس باید با نام فایلی که برنامه را<br />
نگهداری می کند ، مطابقت داشته باشد . همچنین باید مطمئن شوید که حروف بزرگ در<br />
نام فایل با نام کلاس مطابقت و هماهنگی داشته باشند . دلیل این است که جاوا<br />
بسیار حساس نسبت به مورد است . از این نظر آیین نامه ای که نامهای فایل را به<br />
نامهای کلاس مرتبط می کند ، ممکن است اختیاری بنظر رسد . اما ، این آیین نامه<br />
سبب شده تا نگهداری و سازماندهی برنامه ها آسان تر انجام شود .</p>
<p>کامپایل  نمودن برنامه Compiling the program<br />
برای کامپایل نمودن برنامه Example ،  کامپایلر javac را اجرا نموده و نام<br />
فایل منبع را روی خط فرمان (command line)  بصورت زیر مشخص نمایید : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ c:\&gt;javac  Example.java</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">کامپایلر javac فایلی تحت نام  Example.class ایجاد می کند که شامل روایت کد<br />
بایتی از برنامه است . همانگونه  که قبلا&#8221; بحث شد ، کد بایتی جاوا نوعی معرفی<br />
میانی از برنامه شماست که  دربرگیرنده دستورالعملهایی است که مفسر جاوا آنها را<br />
اجرا می کند . بنابراین  خروجی javac کدی که مستقیما&#8221; قابل اجرا باشد ، نخواهد<br />
بود .<br />
برای اجرای  واقعی برنامه ، باید از مفسر (interpreter) جاوا تحت نام java<br />
استفاده نمایید .  بدین منظور نام کلاس Example را بعنوان یک آرگومان (argument)<br />
خط فرمان بصورت  زیر وارد نمایید . </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ c:\&gt;java Example</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">پس از اجرای این برنامه ، خروجی بصورت زیر بنمایش درمی آید : This is a  simple Java program.</p>
<p>هنگامیکه کد منبع جاوا کامپایل شود ، هر کلاس بتنهایی  در فایل خروجی مخصوص<br />
خود که فایل آن بعد از کلاس و پسوند class ذکر می شود،  قرار خواهد گرفت . بهمین<br />
دلیل است که باید نام فایلهای منبع جاوا را مطابق همان  کلاسی که آن را در بر<br />
می گیرد انتخاب نمود تا نام فایل منبع با نام فایل class.  مطابقت داشته باشد .<br />
وقتی که مفسر جاوا را همانگونه که نشان دادیم اجرا می کنید  ، شما در حقیقت نام<br />
کلاسی که مایلید مفسر آن را اجرا کند ، مشخص می نمایید .  مفسر بطور خودکار به<br />
دنبال یک فایل می گردد که دارای پسوند class. باشد . اگر  آن را پیدا کند ، کدی<br />
را که در آن کلاس مشخص شده وجود دارد ، اجرا خواهد نمود .</p>
<p>نگاهی دقیقتر به برنامه نمونه اول<br />
اگر چه عبارت Example jjava بسیار  کوتاه است ، اما دربرگیرنده چندین جنبه<br />
کلیدی است که در همه برنامه های جاوا  وجود خواهند داشت . اجازه دهید تا هر یک<br />
از بخشهای برنامه را با دقت بیشتری  بررسی کنیم .<br />
برنامه با خط زیر شروع می شود :<br />
</span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ /*<br />
+ This is a simple Java program.<br />
+ Call  this file &#8220;Example .java&#8221;.<br />
+ /*</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">این یک  &#8221; توضیح &#8220;(Comment() است . مثل بسیاری از زبانهای برنامه نویسی ،جاوا<br />
به شما  امکان وارد نمودن یک ملاحظه (Remark) در فایل منبع برنامه را می دهد .<br />
محتوی یک  &#8221; توضیح &#8221; توسط کامپایلر نادیده گرفته خواهد شد . در عوض ، یک &#8221;<br />
توضیح &#8221; ، توصیف  کننده یا شرح دهنده عملکرد برنامه است به هر کسی که کد منبع<br />
را مطالعه نماید .  در این مثال ، &#8221; توضیح &#8221; ، توصیف کننده برنامه بوده و بیاد<br />
شما می اندازد که  فایل منبع را بایدExample.java بنامید . البته ، در برنامه های<br />
واقعی ،&#8221;  توضیحات &#8221; بطور کلی توصیف می کنند که چگونه برخی از بخشهای یک برنامه<br />
کار کرده  و یا اینکه یک جنبه خاص از برنامه چکاری انجام خواهد داد .<br />
جاوا از سه روش برای  &#8221; توضیحات &#8221; پشتیبانی می کند. اول آن چیزی است که بالای<br />
برنامه مشاهده می کنید  که آن را توضیح چند خطی (multiline comment) می گویند .<br />
این نوع از &#8221; توضیح &#8221;  باید با علامت /* و با علامت */ پایان یابد . هر چیزی که<br />
بین این دو علامت قرار  گیرد توسط کامپایلر نادیده گرفته خواهد شد . همانطوریکه<br />
از نام این روش پیداست  ، یک توضیح ، چند خطی ممکن است چندین خط دراز داشته<br />
باشد .<br />
خط بعدی کد  برنامه بصورت زیر می باشد : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ class Exaple {</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">این خط از واژه کلیدی class استفاده می کند تا اعلان نماید که یک کلاس جدید<br />
در حال تعریف شدن است . Example شناسه ای (identifier) است که نام کلاس می  باشد.<br />
کل تعریف کلاس ، شامل : کلیه اعضائ خود ، بین علامات ابروباز ({) و  ابروبسته (})<br />
قرار می گیرد . استفاده از علامات فوق در جاوا مشابه روش استفاده  از آنها در C<br />
و C++ است . فعلا&#8221; درباره جزئیات مربوط به یک کلاس نگران نباشید  مگر دقت به اینکه<br />
در جاوا ، کلیه فعالیت برنامه ای داخل یک علامت اتفاق می افتد  . این امر یکی از<br />
دلایلی است که کلیه برنامه های جاوا شی ئ گرا هستند .<br />
خط  بعدی برنامه یک &#8221; توضیح یک خطی &#8220;(single-line comment() بصورت زیر است : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ // Your program begins with a call to  main.)(</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">این نوع دوم &#8221; توضیحی &#8221; است که توسط  جاوا پشتیبانی می شود. یک توضیح یک خطی<br />
با علامت // شروع شده و در انتهای خط  پایان می یابد . بعنوان یک قانون عمومی<br />
برنامه نویسان از توضیحات چند خطی برای  ملاحظات طولانی تر و از توضیحات یک خطی<br />
برای توضیحات کوتاه و خط به خط استفاده  می کنند .<br />
خط بعدی کد بقرار زیر می باشد : </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ public static void main( String args []  ){</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">این خط شروع کننده روش ()main است .  همانطوریکه توضیح متعاقب آن پیشنهاد<br />
می کند ، این خطی است که برنامه در آن شروع  به اجرا می نماید . کلیه برنامه های<br />
کاربردی جاوا با فراخوانی ()main شروع به  اجرا می کنند. ( درست شبیه C++/C. ).<br />
معنای دقیق بخشهای مختلف این خط را فعلا&#8221;  نمی توان توضیح داد ، زیرا درک آن<br />
مستلزم آگاهی از روش Java برای کپسول سازی  است . اما از آنجاییکه اکثر مثالهای<br />
موجود در بیشتر قسمتهای این بحث از این خط  از کط استفاده می کنند ، بهتر است<br />
مرور کوتاهی بر بخشهای مختلف آن داشته باشیم  .<br />
واژه کلیدی public یک توصیفگر دسترسی (access specifier) است که به برنامه<br />
نویس امکان داده تا قابلیت و سطح مشاهده اعضائ کلاس را کنترل نماید . وقتی که<br />
عبارت public قبل از یک عضو کلاس قرار می گیرد ، آنگاه آن عضو را می توان با<br />
کدهای خارج از کلاس که اعلان شده ، مورد دسترسی قرار داد . ( مخالف این عبارت<br />
عبارت .private است که از دسترسی به یک عضو توسط کدهای تعریف شده در خارج کلاس<br />
جلوگیری می نماید . ) در این حالت ()main باید بعنوان public اعلام شود ، زیرا<br />
باید توسط کدهای خارج از کلاس هنگامیکه برنامه آغاز می شود ، فراخوانی شود .<br />
واژه کلیدی Static به ()main امکان داده تا بدون معرفی شدن توسط یک کلاس نمونه<br />
فراخوانی شود . این امر ضروری است چون ()main قبل از اینکه هر یک از اشیائ<br />
ساخته شوند توسط مفسر جاوا فراخوانی خواهد شد . واژه کلیدی Void بسادگی به<br />
کامپایلر می گوید که ()main مقداری را بازگردان نمی کند . همانطوریکه خواهید<br />
دید ، ممکن است روشها (methods) نیز مقادیر را بازگردان کنند . اگر این مطالب<br />
تا حدی گیج کننده است ، نگران نباشید . کلیه این مطالب با جزئیات بیشتری در<br />
قسمتهای بعد بررسی خواهد شد .<br />
همانطوریکه بیان شده ()main روشی است که  هنگام شروع یک برنامه کاربردی جاوا<br />
فراخوانی می شود . بیاد آورید که جاوا بسیار  حساس نسبت به مورد است . بنابراین<br />
برای جاوا Mainو mainو دو مفهوم متفاوت دارند  . نکته مهم این است که کامپایلر<br />
جاوا فقط کلاسهایی را که شامل روش ()main  نباشند ، کامپایل خواهد نمود . اما<br />
مفسر جاوا راهی برای اجرای این کلاسها ندارد  . بنابراین اگر بجای main عبارت Main<br />
را تایپ کرده باشید ، کامپایلر همچنان  برنامه شما را کامپایل خواهد کرد .<br />
اما مفسر جاوا یک گزارش خطا می دهد زیرا  توانایی یافتن روش ()main را ندارد .<br />
اطلاعاتی که لازم است به یک روش ارسال  کنید ، توسط متغیرهای مشخص شده بین<br />
مجموعه پرانتزهایی که بعد از نام روش قرار  می گیرند ، دریافت خواهد شد . این<br />
متغیرها را پارامترها (parameters) می نامند  . اگر برای یک روش داده شده نیاز<br />
به پارامتری نباشد ، از پرانتزهای خالی  استفاده می کنید . در حال حاضر ()main<br />
فقط یک پارامتر دارد ، که البته بسیار  پیچیده هم هست . String args [] یک<br />
پارامتر با نام args را اعلان میکند که یک  آرایه از نمونه های string کلاس میباشد.<br />
( آرایه مجموعه ای از اشیائ مشابه هم  هستند . ) اشیائ از نوع string ، رشته های<br />
کاراکترها را ذخیره می کنند . در این  حالت ، args هر نوع آرگومان خط فرمان<br />
حاضر در هنگام اجرای برنامه را دریافت می  کند . این برنامه از این اطلاعات<br />
استفاده نمی کند ، اما برنامه های دیگر چنین  استفاده ای را انجام می دهند .<br />
آخرین کاراکتر روی خط ، علامت { است . این علامت  نشان دهنده شروع بدنه ()main<br />
است . تمامی کدهایی که یک روش را تشکیل می دهند  بین ابرو باز و ابرو بسته همان<br />
روش قرار می گیرند .<br />
یک نکته دیگر : ()main  نقطه شروع بکار مفسر است . یک برنامه پیچیده شامل<br />
دهها کلاس است که فقط یکی از  آنها لازم است یک روش ()main داشته باشد تا کارها<br />
را شروع نماید . هنگامیکه ریز  برنامه ها (applets) برنامه های جاوا که در<br />
مرورگرهای وب تعبیه می شوند را  ایجاد می کنید ، بهیچوجه از ()main استفاده<br />
نخواهید کرد، زیرا مرورگرهای وب از  وسائل متفاوتی برای شروع اجرای ریزبرنامه ها<br />
استفاده می کنند .<br />
خط بعدی کد  بقرار زیر میباشد. دقت کنید که این خط داخل ()main قرار میگیرد. </span></p>
<div dir="ltr">
<p align="left"><span style="font-size: x-small;">+ System.out.println(&#8220;This is a simple Java  program.&#8221;);</p>
<p></span></p>
</div>
<p><span style="font-size: x-small;">این خط رشته &#8220;This is a simple  Java program&#8221; را بعنوان خروجی ارائه می دهد<br />
که بعد از آن یک خط جدید روی صفحه  ظاهر خواهد شد . خروجی بطور واقعی با روش<br />
توکار ()println همراه است . در این  حالت ، ()println نمایش دهنده رشته ای است<br />
که در آن ثبت شده . خواهید دید که از  ()println برای نمایش سایر انواع اطلاعات<br />
نیز استفاده می شود . خط بالا با  system.out شروع می شود . اگر چه در این مرحله<br />
توضیح این مطلب بسیار دشواراست ،  اما بطور اختصار system یک کلاس از پیش تعریف<br />
شده است که دسترسی به سیستم را  فراهم آورده و out نیز جریان خروجی است که به<br />
کنسول (console) مرتبط شده است .<br />
همانطوریکه احتمالا&#8221; حدس زده اید ، خروجی ( و نیز ورودی ) کنسول بندرت در<br />
برنامه ها و ریز برنامه های جاوا مورد استفاده قرار می گیرند . از آنجاییکه  اکثر<br />
محیط های جدید کامپیوتری دارای طبیعت پنجره ای و گرافیکی هستند ، کنسول  l/o<br />
اکثرا&#8221; برای برنامه های کمکی ساده و برنامه های نمایشی استفاده می شود .  بعدا&#8221;<br />
شیوه های دیگری برای ایجاد خروجی با استفاده از جاوا ر خواهید آموخت .  اما فعلا&#8221;<br />
ما استفاده از روشهای l/o کنسول را ادامه می دهیم .<br />
دقت کنید که  ()println با یک علامت ویرگول نقطه (;)(semicolon) پایان میگیرد.<br />
کلیه دستورات  (statements) در جاوا با همین علامت پایان می گیرند . دلیل اینکه<br />
سایر خطوط  برنامه با این علامت پایان نمی گیرند این است که آنها را از نظر ند . </span></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/first-simplejava-870905-521/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

