# فناوری جاوا > برنامه‌نویسی جاوا >  آموزش جاوا قسمت سوم :ساختار برنامه نویسی در جاوا بخش

## hotice

برای ادامه این قسمت شما بایدJDK را بخوبی نصب کرده باشید. وبرای تست نصب  JDK برنامه های نمونه ای که در بخش قبل ارائه کردیم اجرا کنید.
حالا وقت شروع برنامه نویسی است. در این بخش  موارد زیر را مطرح می کنیم :
-	یک برنامه ساده جاوا
-	توضیحات
-	نوع داده ها
-	متغیر ها
-	معرفی و مقدار دهی 
-	رشته ها
-	کنترل روند
-	آرایه ها

در این بخش مفاهیم پایه برنامه نویسی جاوا مانند داده ها،حلقه ها،رشته ها،.... و نحوه پیاده سازی آنها را خواهیم گفت.
متاسفانه در جاوا بسادگی نمی توانید GUI بسازیم برای اینکار باید کاملا با ساختار اضافه کردن جعبه متن، کلید ها و نحوه پاسخ دادن انها و چیزهای دیگر را بدانیم. تا وقتی که تکنیک های ساخت GUI را توضیح دهیم اجازه دهید که مفاهیم پایه و اولیه جاوا را بگوئیم.
بیشتر برنامه هایی که در این بخش میگوئیم یک خروجی ساده به کنسول می فرستد.( در ویندوزکنسول همان پنجره MS-DOS است).ورودی را برای راحتی کار از یک پنجره pop-up می گیریم.
*یک برنامه ساده جاوا :*
به ساده ترین برنامه جاوا توجه کنید که چگونه پیغامی را در پنجره کنسول نمایش میدهد:
public class FirstSample
&#125;
public static void main&#40;String&#91;&#93; args&#41;
&#125;
System.out.println&#40;"Hello, World"&#41;;
&#123;
&#123;
این برنامه کوچک ارزش این را دارد که وقت خود صرفش کنیم برای اینکه در تمام برنامه های دیگر که می نویسیم تکرار خواهد شد.
_نکته :_ قبلا از هر چیزی دوباره این نکته را تکرار کنم "جاوا حساس به متن است" یعنی Main  با main فرق میکند خیلی ها موقع نوشتن برنامه در این مورد با مشکل مواجه می شوند.
(در این بخش در مورد کلاسها زیاد صحبت نکردم و بیشتر به اصول و پایه برنامه نویسی پرداختم.)
حالا برویم سرکد برنامه وخط به خط آنرا مرور کنیم : کلمه کلیدی public محدوده دسترسی را تعین میکند.public تعین میکند که آیا بقیه قسمت ها می توانند به این کد دسترسی داشته باشند.کلمه کلیدی class این را بیاد شما می آورد که همه چیز در جاوا درون کلاس ها قرار میگیرد. یک کلاس مثل محفظه ای برای رفتارهای منطقی برنامه است.
کلمه بعد از class نام کلاس است. برای نام گذاری کلاس از قوائد عمومی نام گذاری استفاده میکنیم.(نامها باید با حروف شروع شوند و میتوانند با ترکیبی از حروف و عدد خاتمه پیدا کنند.) اندازه خاصی برای طول نام تعین نشده یعنی شما می توانید طول نام تان هر اندازه ای باشد.
_نکته :_ برای نام ها شما نمی توانید از کلمات کلیدی رزرو شده در جاوا استفاده کنید برای مثال : if ,public
خوب نام این کلاس FristSample است که با حرف بزرگ شده و با ترکیبی از حروف بزرگ و کوچک خاتمه پیداکرده.
باید برای کد برنامه خود باید فایلی همنام کلاس عمومی (public) با پسوند .java بسازیم. برای این برنامه فایل ما بدین نام خواهد بود : FristSample.java ( باز هم تاکید می کنم بزرگ و کوچکی حروف مهم است حتی برای نام فایل) اگر این کار را رعایت نکنید یک اخطار از طرف کمپایلر در یافت خواهید کرد.(public class FristSample میگوید که باید فایلی بانام FristSample.java داشته باشید)
اگر مرحله نام گذاری فیال را صحیح اجام داده باشید وهمچنین خطایی در سورس کد نباشد.کمپایلر جاوا اتوماتیک بایت کد ها در فایلی با همین نام و با پسوند .class در همان دایرکتوری ذخیره میکند."FristSample.class"
در انتها برا ی اجرا بایت کد ها را بدین صورت اجرا میکنید :
java FristSample
_توجه :_ پسوند .class موقع اجرا نوشته نمی شود.
وقتی برنامه را اجرا میکنیدبسادگی رشته زیر را نمایش می دهد :    Hello, World
_توجه :_ اپلت ها ساختاری متفاوت با برنامه بالا دارند که در آینده در مورد انها مفصل توضیح خواهم داد.
وقتی شما از دستور: ] نام کلاس [ java استفاده می کنید.برای اجرای برنامه ، مفسر جاوا از متد main شروع می کند که شما کلاس آنرا نشان داده اید.پس شما باید همیشه متد main را در کلاسی که می خواهید اجرایش کنید داشته باشید.در ضمن شما می توانید متد هایی را خود به کلاس اضافه کنید و در متد main آنها را فراخوانی کنید.
نکته بعدی براکت ها در سورس کد هستند("{}").براکت ها در جاوا مثل c/C++‎ برای جداکردن قسمت ها برنامه از یک دیگر استفاده میشود که معمولا به هر قسمت بلاک گفته می شود.در جاوا تمام متد ها با براکت باز شروع و با براکت بسته پایان می یابد.
کلمه کلیدی بعدی static void است که تا وقتی که توضیحات کاملی راجه به آن ارائه ارائه دهم فکر کنید که برای اجرای برنامه جاوا به این قسمت نیاز دارد.main هم این را یاد اوری میکند کند که تمام برنامه های اجرایی به متد main نیاز دارند.
public class  classname
&#123;
public static void main&#40;String&#91;&#93; args&#41;
&#123;
program instruction
&#125;
&#123;
_نکته برای برنامه نویسان C++‎ :_
 کلاس های جاوا خیلی شبیه به کلاسهای C++‎ هستنداما تفاوتهایی که بین انهاست احتمال داره شما را به اشتباه بیندازه برای مثال تمامی فانکشنها، متدهای کلاس ها هستند.از این رو متد main باید درون یک کلاس باشد. با static در c/C++‎ هم آشنا هستید اگر انها را درون کلاس تعریف می کردیم نمی توانستد روی اشیاء کار کنند.اما متد main درون جاوا همیشه static است.
در قسمت بعد براکت ها شروع و پایان بدنه متد را نشان می دهد.این متد فقط یک دستور دارد:
System.out.prinln

در جاوا اکثر دستورات با سیمیکالن(";") پایان می پذیرد.
متد main شمامل دستوری است که یک متن را به خروجی کنسول می فرستد. اینجا از شئ System.out استفاده کردیم و بعد متد println را صدا زدیم و یک رشته به آن پاس داده ایم. این متد پارامتر ی که به ان پاس داده شده را در پنجره کنسول نمایش و خط را پایان میدهد.بعد از هر بار فراخوانی این متد رشته درون یک خط جدید چاپ می شود.مثل c/C++‎ محدوده رشته با دابل کوتیشن مشخص می شود.
_نکته :_ سینتکس عمومی جاوا برای دست رسی به یک متد بصورت زیر است :
Object.metod(parameters)
متد ها در جاوا مثل فانکشن ها در بقیه زبانها می توانند : هیچ ، یک و بیشتر پارامتر بگیرند.(در بعضی از زبانها به پارامتر آرگومانها هم میگویند).اگر یک متد پارامتر هم نگیرد باز هم باید از پرانتز استفاده کنید.مثلا :System.out.println() یک خط خلی چاپ میکند.
*توضیحات در برنامه :*
برای اضافه کردن توضیحات در برنامه شما سه روش دارید.
بیشتر افراد معمولا از // برای توضیح گذاری در برنامه استفاده می کنند.این نوع توضیح گذاری با // شروع می شود و تا انتهای خط ادامه می یابد.اگر توضیحی طولانی دارید میتوانید از چند خط همراه با //  استفاده کنید و یا از /*  و /*  برای مشخص کردن محدوده  توضیحات استفاده کنید.روش سوم روشی است که برای مستند سازی از آن استفاده می شود که به آن JavaDoc گفته می شود که با /** شروع و با /* پایان می پذیرد. در اینده توضیحات کاملتری راجع به JavaDoc خواهیم داد.
/*
This is the first sample program
Copyright hotice
*/
public class FirstSample
&#125;
public static void main&#40;String&#91;&#93; args&#41;
&#125;
System.out.println&#40;"Hello, World"&#41;;
&#123;

*نوع های داده ها :*
در جاوا هر متغیری باید قبل از استفاده باید تعریف شود.(بعضی از زبانهای برنامه  نویسی مثل VB این امکان را می دهد که شما بدون تعرف متغیر از آن استفاده کنید). در جاوا هشت نوع اولیه وجود دارد.چهار تا از آنها عدد صحیح دو تا ممیز شناور یکی هم کاراکتر است که برای ذخیره یونی کد از آن استفاده می شود و دیگری برای نشان دادن درست وغلط بودن که boolean گویند.
*اعداد صحیح چهار نوع زیر هستند :*
int 4 bytes -2,147,483,648 to 2,147,483, 647 &#40;just over 2 billion&#41;
short 2 bytes -32,768 to 32,767
long 8 bytes -9,223,372,036,854,775,808L to 9,223,372,036,854,775,807L
byte 1 byte -128 to 127

_نکته :_ میزان فضای اشغال شده توسط متغیر ها در جاوا برای تمام سیستم ها یکسان است. زبان c/C++‎ در هر ماشین و در پردازش گرهای متفاوت ، اندازه های متفاوتی برای ذخیره اطلاعات دارند.
*اعداد ممیز شناور:*
float 4 bytes approximately ±3.40282347E+38F (6–7 significant decimal digits)
double 8 bytes approximately ±1.79769313486231570E+308 
نکته : محاسبه ممیز شناور براساس استاندارد IEEE754 است مخصوصاً سه بخش زیر :
-	مثبت نامتناهی
-	منفی نامتناهی
-	NoN (یک عدد نیست)

برای نشان دادن سرریزها(overflow) یا خطا ها کاربرد دارد.مثلا نتیجه تقسیم یک عدد بر صفر مثبت نامتناهی است و یا محاسبه صفر تقسیم بر صفر و یا جذر یک عدد منفی، NoN می شود.برای تست یک عدد که مثلا  NoN است یا نه می توانید بصورت زیر آنرا بکار ببرید :
If &#40;Double.isNon&#40;x&#41;&#41;
*کاراکتر :*
تک کوتیشن ها نشانگر نوع char هستند برای مثال : 'H' یک کاراکتر است و با  "H" فرق می کند که یک رشته است.
نوع char نشانگر یک حرف در جدول Unicode است.یونی کد برای مدیریت راحت تر حروف غیر لاتین طراحی شده.یونی کد ، یک کد 2 بایتی است که حروف اصلی تمام زبانها را دارد و اجازه میدهد که 65536 کاراکتر که تا بحال 35000 آن پر شده استفاده کنیم.همچنین بسیار غنی تر نصبت به اجدادش یعنی Ascll که1 بایت بود و 128 حرف داشت و یا ISO 8859-1 با 256 کاراکتر. تمام کاراکتر های مجموعه های بالا زیر مجموعه کاراکتر های یونی کد هستند دقیقا 256 کاراکتر اول جدول یونی کد(که بعضی از برنامه نویسان به آن قسمت لاتین-1 یونی کد میگویند).
یونی کد نه تنها شامل حروف بلکه شامل اعداد و علائم تجاری مثل : @،®یا© نیز هست.جالب توجه که حتی اعداد فارسی و عربی در یونی کد گنجانده شده.
یونی کد بین 0 تا 65535 کارکتر دارد که برای دسترسی به آنها معمولا از کد های هگزا دسیمال استفاده می شود.مثلا برای علامت ™ از '\h2122' استفاده می  کنیم توجه کنید که '\hxxxx' ضروری است.برای اطلاعات بیشتر راجع به یونی کد می توانید به سایت www.unicode.org سربزنید.
*نوع boolean :*
این نوع دارای دو مقدار true و false است که برای تست کردن منطق شرط بکار می رود.
_نکته :_ در C++‎ برای false از صفر و برای true از مقدار غیر صفر استفاده می شد. اما در جاوا شما نمی توانید از عدد صحیح  بجای نوع  boolean استفاده کنید.

*متغیر ها :*
بعد از معرفی نوع داده ها به متغیر ها می رسیم.در جاوا هر متغیری یک نوع دارد برای تعریف متغیر در جاوا بدین صورت عمل می شود که ابتدا نوع متغیر سپس نام متغیر را می نویسیم. به مثال زیر توجه کنید:
double salary;
int vacationDays;
long earthPopulation;
char yesChar;
boolean done;
به سیمیکالن (";") بعد از معرفی هر متغیر توجه کنید.گذاشتن سیمیکالن بعد از معرفی متغیر لازم است.
نام گذاری متغیر باید با حرف شروع ومی تواند با ترکیبی از حرف و عدد خاتمه یابد.حروفی که برای نام گذاری متغیر می توانید استفاده کنید تمام حروفی است که در جدول یونیکد موجود می باشد.برای اعداد هم همینطور.ما از کاراکتر هایی مثل : ™،®،© نمی توانیم استفاده کنیم.برای طول نام هم محدودیتی نداریم.درضمن از کلمات رزرو شده جاوا نمی توانید استفاده کنید.
_نکته :_ برای اینکه بفهمیم از کدام نام ها می توانیم برای نام گذاری متغیر ها استفاده کنیم از متد های isJavaIdentiferStart و isJavaIdenerpart در کلاس Character می توانیم کمک بگیریم.
چندین متغیر را در یک جا با هم تعریف کرد مثلا : int i,j; که تعریف متغیر بدین صورت را توصیه نمی کنیم اگر متغیر هارا جدا تعریف کنیم خواندن آن راحت تر می شود.
نکته : برای تعریف متغیر ها شما می توانید از حروف بزرگ و کوچک استفاده کنید.مثلا box,Box دو متغیر جدا هستند.
*مقدار دهی متغیر ها :*
بعد از تعریف متغیر ها می توانید آنها را مقدار دهی کنید.برای مقدار دهی ابتدا نام متغیر بعد علا مت مساوی وبعد مقداری که باید درمتغیر ذخیره شود را می نویسیم:
int i;
i=123;
در ضمن همانجا بعد از معرفی متغیر هم می توانید آنرا مقدار دهی کنید : char test='A';
هر جایی از برنامه بجز خارج از کلاس می توانید متغیر های خود را تعریف کنید.

*ثابت ها :*
کلمه کلیدی final نشانگر یک ثابت است.یعنی اینکه یکبار برای همیشه می توانید به آن مقدار بدهید.(معمولا ثابت ها با حروف بزرگ نوشته می شوند) :
public class Constants
&#123;
public static void main&#40;String&#91;&#93; args&#41;
&#123;
final double CM_PER_INCH = 2.54;
double paperWidth = 8.5;
double paperHeight = 11;
System.out.println&#40;"Paper size in centimeter&#58; "+ paperWidth * CM_PER_INCH + " by "+ paperHeight * CM_PER_INCH&#41;;
&#125;
&#125;

این احتمال وجود دارد که چندین متد بخواهند به یک ثابت دست رسی داشته باشند این ثابت هارا خارج از متد در بدنه کلاس تعریف می کنند که به آنها ثابت کلاس گفته می شود.ثابت های کلاس را معمولا ایستا(static) تعریف می کنند.برای اینکه این نوع از متغیر ها بدون ساخت نمونه ای از شئ قابل دسترسی باشند. وبرای این که بقیه کلاسها به آن دسترسی داشته باشند با دسترسی عمومی (public) تعریف می شود.در ضمن کلمه const که در بعضی از زبانها از آن برای تعریف ثابت استفاده می شد یک کلمه رزرو شده در جاواست.
public class Constants2
&#123;
public static final double CM_PER_INCH = 2.54;;
public static void main&#40;String&#91;&#93; args&#41;
&#123;
double paperWidth = 8.5;
double paperHeight = 11;
System.out.println&#40;"Paper size in centimeter&#58; "+ paperWidth * CM_PER_INCH + " by "+ paperHeight * CM_PER_INCH&#41;;
&#125;
&#125;


_توجه :_ قسمت هایی مثل عملگر ها،کاهنده ها، افزاینده ها،عملگر های مرتبط و boolean ،عملگر های بیتی، تبدیل بین نوع ها،اولویت عمل گر ها بعلت اینکه به راحتی در کتابهای C++‎ یافت می شود و همچنین این تاپیک هم داره زیادی طولانی میشه توضیح نمیدم.

*توابع و ثابت های ریاضی :*
کلاس Math شامل مجموعه ای از توابع و ثابتهای ریاضی است.برای مثال اگر بخواهید ریشه یک عدد را بدست بیاورید از متد sqrt بصورت زیر استفاده می کینم :
double x = 4;
double y = Math.sqrt&#40;x&#41;;
System.out.println&#40;y&#41;;
نکته آخر :
یک تفاوت میان متد sqrt و متد println وجود دارد.متد println روی شئ System.out عمل میکند.شئ out از کلاس System معرف دستگاه استاندارد خروجی است که متد println رشته پاس شده را روی آن چاپ می کند.اما متد sqrt از کلاس Math روی شئ کار نمی کند.پارامتری که می گیرد یک عدد است که ریشه آنرا بر می گرداند.متد هایی مثل این را متد استاتیک می گویند.
به بعضی از متد ها وثابت هایی که در کلاس Math وجود دارد توجه کنید :
Math.sin
Math.cos
Math.tan
Math.atan
Math.atan2
Math.exp
Math.log
Math.PI
Math.E
در قسمت بعد با قیمانده بحث را مورد بررسی قرار می دهیم.

موفق باشید.  :)

----------


## MM_Mofidi

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


این سه قسمت اول امیدوارم زیاد غلط نداشته باشه :oops: 
https://www.sharemation.com/mofidivb...%20Persian.pdf

----------


## hotice

سلام
کارا ان کرد که تمام کرد. :D 
موفق باشید. :)

----------


## mani_khalili

کار جالبی است. امیدوارم موفق باشید. در زیر لینک پی دی اف PDF فارسی کتاب جاوا را می گذارم

http://www.atlassoft.ir/books.html

----------


## fatemeh-r

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

http://www.rasekhoon.net/article/sho...ans-(IDE)-(1)/

----------

