مهمترین تغییری که جاوا در برنامهنویسی ایجاد کرد، برنامه نویسی کاملا شیگراست. در برنامه نویسی جاوا همان طور که در مثال هایی که در جلسات قبل بیان شده بودند، می بینید، هر برنامه از تعدادی کلاس تشکیل شده است. در این جلسه سعی می کنیم با استفاده از یک مثال مفهوم کلاس را کامل توضیح دهیم. تمرین بیشتر برای این که دستتان با کلاس نویسی راحت شود، با خودتان است. (البته در پایان یک تمرین هم مطرح می کنم که جوابش را جلسهی بعد برایتان میآورم. قبل از رجوع به جلسهی بعد خودتان آن را بنویسید.)
دستور for یک یا چند دستور را تا زمانی که شرط مورد نظر نقض نشود، تکرار می کند. این دستور اصولا برای اجرای یک سری دستور به تعداد دفعات مشخص و سپس اجرای ادامه برنامه به کار می رود ولی شما می توانید از for برای ایجاد هر نوع حاقه ای استفاده کنید. ساختار کلی for به صورت زیر است:
Initialization : عبارتی است که شروع حلقه تکرار را مقدار دهی می کند. مثلا اگر شما یک متغیر شمارنده حلقه دارید که تعداد دفعات اجرای دستورات حلقه را در خود ذخیره می کند در این بخش به این متغیر مقدار صفر می دهید. مثلا می نویسیم : int counter = ۰ نکته ای که به آن باید توجه کنید این است که متغیری که در این بخش تعریف می کنید یک متغیر محلی است و فقط در داخل حلقه for تعریف شده می باشد.
Test : عبارت test باید یک متغیر Boolean و یا یک تابعی که Boolean بر می گرداند باشد. این عبارت بعد از هر بار تکرار حلقه چک می شود اگر true بود حلقه یک بار دیگر تکرار می شود و در غیر این صورت حلقه for به پایان رسیده و ادامه برنامه اجرا می شود. برای مثال اگر می خواهید حلقه شما ١٠ بار تکرار شود متغیر شمارنده حلقه که تعداد دفعات اجرای حلقه را در خود ذخیره کرده است در این بخش چک می کنیم : counter<۱۰ ( با توجه به این که از counter=۰ شروع کرده ایم این عبارت برای ١٠ بار تکرار حلقه درست خواهد بود.)
Increment : عبارت و یا تابعی است که که بعد از هر بار تکرار حلقه فراخوانده می شود. برای مثال برای این که بعد از هر بار تکرار حلقه یکی به متغیر شمارنده حلقه اضافه شود در این قسمت عبارت counter++ را می نویسیم.
مثال ١ :فرض کنید می خواهید مقادیر یک آرایه با طول ١٠ را به ترتیب با اعداد حقیقی پر کنید :
در این مثال چون بعد از for یک دستور آمده است نیازی به استفاده از بلوک ( باز و بسته کردن آکولاد {} ) نیست.
حلقه های for را می توان به صورت تو در تو نیز استفاده کرد. در نتیجه حلقه for داخلی به تعداد دفعات حلقه بیرونی اجرا می شود. فقط توجه داشته باشید که متغیر شمارنده حلقه هر یک از این حلقه های for تو در تو باید با دیگری متفاوت باشد.
مثال ٢ :فرض کنید می خواهید یک جدول ضرب ٩*٩ بنویسیم و در کنسول نمایش دهیم :
خروجی برنامه :
دستور While
While نیز یکی دیگر از دستورات تکرار حلقه ای است. این حلقه تا زمانی که شرط آن نقض نشود تکرار می شود. فرم کلی این دستور به شکل زیر است :
Condition : یک متغیر Boolean و یا تابعی که Boolean بر می گرداند می باشد و در حقیقت همان شرط حلقه است. تا زمانی که این عبارت true باشد حلقه اجرا می شود.
مثال ۳: فرض کنید می خواهیم از کاربر یک کاراکتر بگیرید و روی کنسول نمایش دهید تا زمانی که کاربر q را وارد کند. با وارد کردن q برنامه پایان می یابد.
دستور do while
do while دقیقا مانند while می ماند با این تفاوت که در do while ابتدا یک بار دستورات حلقه را اجرا می کند و در آخر حلقه شرط حلقه را چک می کند بنابراین حتی اگر شرط حلقه از همان ابتدا نیز اشتباه باشد حلقه یک بار اجرا می شود ولی در while شرط حلقه در همان ابتدا چک می شود. فرم کلی do while به شکل زیر است:
continue و break
دستورهای continue و break در حلقه ها کاربرد دارند و عملکرد آنها به شرح زیر است :
continue : در هر جای حلقه که بیاید آن دور از حلقه ناتمام رها شده و به دور بعدی می رود .یعنی دستورات بعد از continue اجرا نمی شوند.
Break : در هر جای حلقه که بیاید کلا حلقه را بدون در نظر گرفتن شرط آن رها کرده و برنامه را از بعد از حلقه ادامه می دهد.
مثال ۴ :
شرح مثال : در صورتی که کاربر c را وارد کند continue اجرا می شود و بنابراین آن دور از حلقه ادامه پیدا نمی کند و به دور بعد می رود بنابراین c در کنسول نوشته نمی شود . در صورتی که b توسط کاربر وارد شود، از حلقه while به طور کامل خارج شده و برنامه پایان می پذیرد.
نوشته شده توسط مسعود بلیتی ظهراب در سه شنبه دوازدهم شهریور 1387 |
عبارت های کنترلی جاوا دقیقا مشابه دیگر زبان های برنامه نویسی شامل دستورهای انتخابی if و switch و دستور تکراری for می باشد. در این بخش دو دستور if و Switch را بررسی می کنیم.
IF
دستور if برای چک کردن یک وضعیت یک متغیر و انجام یک سری دستور با توجه به وضعیت آن متغیر می باشد . در حقیقت if یک دستور شرطی می باشد. ساختار کلی این دستور در جاوا همانند فرم زیر است:
یعنی اگرعبارت condition که شرط ما می باشد درست بود دستور statement۱ و در غیر این صورت statement۲ را انجام می دهد. در صورتی که statement۱ یا statement۲ شامل بیش از یک دستور بودند آنها را داخل آکولاد می گزاریم:
برای مثال :
البته برای دستور else نیز می توان شرط گذاشت و همچنین می توان برای هر if به تعداد دلخواه else استفاده کرد. به این روش ،روش نردبانی می گویند. برای نمونه مثال قبل را به صورت زیر کامل می کنیم :
دستور if را می توان به صورت تو در تو نیز استفاده کرد. البته در این جور مواقع باید کاملا مراقب محدوده ی هر if و یا else باشید. همیشه برای if ها و else هایی که از یک خط بیشتر می شوند از آکولاد استفاده کنید تا محدوده آنها مشخص باشد. برای مثال فرض کنید می خواهیم متغیر grade را که نمره یک دانشجو هست بررسی کنید به طوری که اگر از ۵۰ کمتر بود مردود یا failed باشد و در صورتی که از ۵۰ بیشتر بود اگر از ۷۰ بیشتر بود به او نمره A و اگر کمتر بود نمره B بدهیم:
توجه به تو رفتگی ها در نوشتن دستورات شرطی و تکرار باعث خوانا تر شدن کد شما می شود و همچنین یافتن محدوده ی هر دستور و خطاهای محدوده را آسان تر می کند. خروجی این مثال :
Switch
این دستور تقریبا همان کار دستور if else if به صورت نردبانی را انجام می دهد. با این تفاوت که شما فقط روی یک متغیر می توانید کار کنید. فرم کلی این دستور به شکل زیر است:
در این سری دستور مقدار متغیر expression به ترتیب با هر یک از مقادیر value۱ تا valueN مقایسه می شود. با هر کدام از آن ها که برابر بود دستورات مربوط به آن مقدار را انجام می دهد و به دیگر به مقایسه ادامه نمی دهد. البته اگر دستور break در انتهای دستورات هر مقدار نوشته نشود باز هم به مقایسه ادامه می دهد. اگر expression با هیچ یک از مقادیر برابر نبود دستورات default اجرا می شود. برای نمونه فرض کنید می خواهیم با توجه به شماره روز اسم آن را چاپ کنیم :
دستور switch را نیز می توان به صورت تو در تو استفاده کرد و فقط باید به محدوده هر switch با توجه به آکولاد های آن توجه کنید.
نوشته شده توسط مسعود بلیتی ظهراب در سه شنبه دوازدهم شهریور 1387 |
در جلسه ی قبل راجع به متغیرها صحبت کردیم. چند نکته ی مهم را فراموش کردم که در این جلسه مطرح می کنم. ۱. در صورتی که بخواهید یکی از کاراکترهای جدول زیر را به یک کاراکتر اختصاص دهید، باید آن را با یک Back slash بنویسید. مثلا اگر میخواهید به کاراکترِ a مقدارِ " را بدهید باید عبارتِ زیر را تایپ کنید:
char a = “\””;
کاراکتر هدف
آن چه باید بنویسید
Tab
\t
New Line (Enter)
\n
Backspace
\b
Carriage return
\r
Formfeed
\f
Backslash (\)
\\
Single Quote (‘)
\'
Double Quote (“)
\"
Octal
\ddd
Hexadecimal
\xdd
Unicode Character
\udddd
۲. برای این که از رشته یا String در جاوا استفاده کنید، کافی است از کلاسِ از پیش تعریف شدهی String استفاده کنید. یعنی برای تعریفِ یک رشته با محتوای "Hi, Iím a string literal" کافی است عبارت زیر را بنویسید:
String str = “Hi, Iím a string literal”;
یا اگر میخواهید در پایانِ رشتهی خود یک خط به پایین بروید (یعنی یک Enter در پایانِ رشته بخورد)، طبقِ نکته ی ۱، کافی است عبارتِ زیر را بنویسید:
String str = “Hi, Iím a string literal\n”;
اما می رسیم به بحثِ اصلی این جلسه که عملگرها هستند. در جاوا پنج عملگرِ محاسباتی داریم که در جدول زیر میبینید:
مثال
معنای عملگر
عملگر
۳ + ۴ = ۷
جمع
+
۳ – ۴ = -۱
تفریق
-
۳ * ۴ = ۱۲
ضرب
*
۳ / ۴ = ۰
تقسیم
/
۲۰ % ۷ = ۶
باقیمانده ی تقسیم صحیح
%
قطعا اگر یک بار هم برنامه نویسی کرده باشید کار با این عملگرها را بلد هستید، به همین خاطر مثالی برای استفاده از این ها را نمی زنم. آخرِ این جلسه یک مثالِ کلی که همه ی مباحثِ متغیرها و عملگرها را شامل شود، خواهیم داشت. فقس یک نکته راجع به اینکه ۳ / ۴ = ۰ شده است بگویم. علت این اتفاق این است که دو عددِ ۳ و ۴ هر دو صحیح هستند و خود به خود، کامپایلر جاوا پاسخِ این دو را صحیح می کند. اما عملگرهای دیگری که در جاوا هستند، عملگرهای اختصاص یا Assignment هستند. در جدول زیر لیست آن ها را مشاهده می کنید.
معنای عملگر
عملگر
x = x + y
x += y
x = x - y
x -= y
x = x * y
x *= y
x = x / y
x /= y
x = x + ۱
x++
x = x + ۱
++x
x = x - ۱
x--
x = x - ۱
--x
برای این که کار با این عملگرها را بشناسید، فرض کنید یک متغیر a را می خواهید با ۱ جمع کنید. در شرایطِ عادی شما از عبارتِ x = x + ۱ استفاده می کردید ولی در جاوا می توانید از x += ۱ هم استفاده کنید. تفاوتِ عملگرهای x++ و ++x در این است که در حالتِ اول ابتدا در معادلهای که داریم x گذاشته می شود و سپس مقدار آن افزایش می یابد ولی در حالتِ دوم ابتدا مقدارِ x افزایش پیدا می کند و بعد در معادله گذاشته می شود. مثال زیر این را روشن تر می کند. فرض کنید عبارت های زیر را در برنامه ی جاوای خود بنویسیم:
int x = ۳; int y = (++x) + ۲; int z = (x++) + ۲;
پس از اجرای عبارت های فوق، مقدارِ y برابر با ۵ خواهد بود و مقدارِ z برابر با ۴. در جاوا عملگرهای مقایسه به شکل زیر هستند.
مثال
معنای عملگر
عملگر
x == ۳
اگر مقدار دو طرفِ این عملگر برابر باشد، true برمی گرداند
==
x != ۳
اگر مقدار دو طرفِ این عملگر برابر نباشد، true برمی گرداند
!=
x < ۳
اگر مقدار طرفِ اول کوچکتر از طرفِ دوم باشد، true برمی گرداند
<
x > ۳
اگر مقدار طرفِ اول بزرگتر از طرفِ دوم باشد، true برمی گرداند
>
x <= ۳
اگر مقدار طرفِ اول کوچکتر یا مساوی طرفِ دوم باشد، true برمی گرداند
<=
x >= ۳۶
اگر مقدار طرفِ اول بزرگتر یا مساوی طرفِ دوم باشد، true برمی گرداند
>=
این عملگرها هم احتیاج به توضیح ندارند. توضیحاتِ لازم در جدول بیان شده است. عملگرهای دیگری که در این بخش به آن میپردازیم، عملگرهای منطقی هستند. این عملگرها و معنای هر یک در جدول زیر بیان شده است.
مثال
معنای عملگر
عملگر
x && ۳
طرفِ اول با طرفِ دوم AND می شود.
&&
x || ۳
طرفِ اول با طرفِ دوم OR می شود.
||
!x
مقدارِ بعد از این عملگر، NOT می شود.
!
x ^ ۳
طرفِ اول با طرفِ دوم XOR می شود.
^
بعید است معنای عملگرهای منطقی را ندانید ولی برای احتیاط در جدول زیر معانی عمل گر ها را مشخص کرده ام.
true AND false = false
true AND true = true
false AND false = false
Not true = false
Not false = true
true OR false = true
true OR true = true
false OR false = false
true XOR false = true
true XOR true = false
false XOR false = false
بحثِ عملگر های دودویی میماند و ترتیبِ اجرای عمل گرها. ترتیب را در جلسه ی بعد خواهیم گفت، ولی عمل گرهای دودویی تخصصی تر از آن هستند که برای یک برنامه نویس معمولی مورد نیاز باشند. در صورتی که نیاز شد، حتما اطلاع دهید تا در جلساتِ بعدی توضیح دهیم. اما فقط یک مثال می ماند که قولِ آن را داده بودیم. مثال: فرض کنید معلمی می خواهد نمره ی امتحانی شاگردانش را افزایش دهد. فرض کنید این معلم چهار شاگرد دارد و به این ترتیب نمرات را افزایش می دهد که به هر یک از شاگردانش به اندازه ی ۲۰ درصدِ فاصله ی نمره اش تا ۲۰، نمره اضافه می کند. یعنی اگر نمره ی فردی ۱۰ باشد، نمره اش پس از افزایش ۱۲ خواهد شد. برنامه ی زیر این کار را برای چهار شاگردِ وی انجام می دهد. (توجه کنید که عبارت هایِ
System.out.print(“”); و System.out.println(“”);
عبارت هایی هستند که در کنسول عبارتی را چاپ می کنند. با این توضیح شما باید تقریبا کدِ زیر را بفهمید. این طور نیست؟)
این برنامه را اجرا کنید. پاسخی مشابه زیر خواهید دید.
نوشته شده توسط مسعود بلیتی ظهراب در سه شنبه دوازدهم شهریور 1387 |
متغیرها (Variables)، مکانهایی در حافظهی رایانه هستند که در آنها مقادیر ذخیره می شوند. این متغیرها در جاوا دارای نوع، نام و مقدار می باشند. نمونهی تعریفِ یک متغیر را در زیر مشاهده میکنید.
String name; int age; Boolean isReady;
در عباراتِ فوق، String، int و Boolean نوعِ متغیرها محسوب می شوند. و name، age و isReady نامِ آنها. شما میتوانید این متغیرها را هنگامِ تعریف مقداردهی نیز بکنید یا چند متغیر را در یک سطر تعریف نمایید. بنابراین عباراتِ زیر همه صحیح هستند.
String name=”mehdi”; int age = ۲۳, height, weight = ۵۹; Boolean isReady = true, isSingle;
در خصوصِ نامگذاری متغیرها دقت کنید که در جاوا نام های متغیرهایی که تعریف می شوند حتما بایستی یا با یکی از حروف الفبای انگلیسی یا زیرخط (underline) یا کاراکتر دلار ($)، شروع شود و شروعِ نام با عدد یا هر کاراکتر دیگری غیر از اینها خطای کامپایل را به دنبال دارد. در نام گذاری باید دقت کنید که از نام های حاضرِ جاوا استفاده نکنید، این نام ها در جدول زیر مشخص شده اند:
یک توصیه از بنده هم داشته باشید که نام های متغیرهای خود را با معنی انتخاب کنید. از طولِ نام متغیری که تعریف کرده اید هراس نداشته باشید و برای تعریفِ دقیق متغیر خود طولِ مناسب را انتخاب کنید. مثلا اگر می خواهید متغیری داشته باشید که در آن دمای هوای شمالِ شهرستانِ یزد را ذخیره کنید، می توانید از weatherTemperatureInTheNorthOfYazd استفاده کنید. نکته ی دیگر این که در استانداردی که معمولا کدنویسانِ به زبان جاوا رعایت می کنند، نام متغیرها را با حرفِ کوچک انگلیسی شروع می کنند.
اما در خصوصِ انواعِ داده، باید گفت که در جاوا ما سه نوع داده می توانیم تعریف کنیم. داده هایی که از ۸ نوعِ داده های پایه ی جاوا هستند. - داده هایی که از کلاسی مشتق شده اند. - داده هایی که آرایه ای در خود ذخیره می کنند.
مواردِ ۲ و ۳ را بعدا مفصلا بحث خواهیم کرد و در این بخش فقط به موردِ اول خواهیم پرداخت. داده های پایه ی جاوا شاملِ int، byte، short، long، char، float، double و boolean می باشند. ۴ نوعِ اول یعنی int، byte، short و long همه از نوعِ integer (اعدادِ صحیح) هستند و تنها تفاوتشان در حجمی از حافظه است که اشغال می کنند و بنابراین حداکثر مقداری که می پذیرند. مثلا اگر می خواهید از اعدادِ بزرگِ صحیح استفاده کنید متغیر خود را long تعریف کنید. (برای تعریفِ اعدادِ صحیحِ بزرگتر از این باید از کلاسِ BigInteger استفاده کنیم که احتمالا در آینده راجع به آن صحبت خواهیم کرد.
منظور از char متغیری است که یک کاراکتر را در خود ذخیره می کند. این کاراکتر می تواند حرف، عدد یا سیمبل دیگری باشد. بسته به این که نوعِ encoding ای که استفاده می شود حجمِ کاراکتر متفاوت بوده و تعدادِ کاراکترهای در دسترس نیز تغییر می کند. (بحثِ encoding هم طلبِ شما باشد تا یک وقتِ دیگر.)
اما منظور از float و double، متغیرهایی هستند که اعدادِ اعشاری را نگهداری می کنند.
هر کدام از این داده ها را به شکلی تعریف می کنند که لازم است به آن اشاره کنیم. (شکلِ تعریف داده ها یعنی شکلی که اگر داده ای به آن شکل نوشته شود، خود به خود داده توسطِ کامپایلر به نوعِ خاصی تعبیر می شود.) این اشکال عبارت اند از:
اگر داده ای را به صورتِ عددِ صحیح تایپ کنید، فرض می شود که از نوع int است. اگر به شکلِ اعشاری بوده و دارای ممیز باشد، float فرض می شود و اگر به صورتِ یک کاراکتر در میانِ ‘’ باشد، char فرض می شود، مثلِ ‘a’ و اگر true یا false نوشته شود، Boolean فرض می شود.
بیش از این توضیح راجع به نوع داده ها، شما را خسته خواهد کرد. به نظر من بیش از این اطلاعات را هنگامِ نوشتنِ برنامه ها در صورتِ لزوم یاد بگیرید، ماندگار تر و جذاب تر خواهد بود. بنابراین همین جا این قسمت را هم تمام می کنیم. منتظر باشید.
نوشته شده توسط مسعود بلیتی ظهراب در سه شنبه دوازدهم شهریور 1387 |
برای این که بتوانید بر برنامه نویسی به زبان جاوا مسلط شوید، نیاز است که با برنامه نویسی شیگرا آشنا شوید. ولی پیش از آن که جزییاتِ آن را توضیح دهیم، برای این که خستگی دو جلسه ی قبل را از تن به درکنید، یک برنامه ی ساده بدون توجه به این جزییات به زبان جاوا می نویسیم و نحوه ی اجرای آن را توضیح خواهیم داد. معمولا اولین برنامه ای که به زبان های برنامه نویسی مختلف به عنوان اولین برنامه نوشته می شود، برنامه ی “Hello World” است که در آن این کلمات را بر روی کنسول (صفحه ای مشکی رنگ که مشابه صفحه ی Dos بوده و برنامه ها با آن ارتباط برقرار می کنند)، می نویسند. ولی ما در این جا می خواهیم از این مثالِ روتین تبعیت نکرده و مثال دیگری بیاوریم. ما می خواهیم برنامه ای بنویسیم که از شما سه اسم را به عنوان ورودی می گیرد و سپس سه واژه ی Good، Bad و Ugly را (سه واژه در فیلم معروفِ خوب، بد، زشت)، به هر یک از اسامی نسبت می دهد و در کنسول می نویسد. برای نوشتن این برنامه برای آن که به محیطِ راحت و کارآمدِ eclipse از همان ابتدا معتاد نشوید، از ویرایشگر TextPad یا NotePad استفاده می کنیم. (تفاوتی نمی کند که از NotePad استفاده کنید یا TextPad، فقط در رنگی کردن کلمات و اجرای برنامه کار شما با TextPad کمی ساده تر است که تاثیر چندانی در این برنامه ی کوچک بر کار شما نخواهد داشت.) یک فایل با نامِ GoodBadUgly.java ایجاد کنید. (برای این کار در پوشه ی موردنظرِ خود راست کلیک کرده و یک فایلِ text ایجاد کنید و هنگامِ تغییر نام، پسوندِ آن را هم به java تغییر دهید.) در این فایل، برنامه ی زیر را کپی کرده و آن را ذخیره نمایید.
برای اجرای این برنامه، در صورتی که از سیستم عامل ویندوز استفاده می کنید، یا بر رویِ نامِ Run در Start Menu کلیک کنید و یا کلیدِ ویندوز را با R را با هم فشار دهید. اکنون در برابرِ نامِ Open، cmd نوشته و enter را فشار دهید. اکنون، کنسولِ ویندوز شما باز می شود. در کنسولِ خود، موارد زیر را (با اعمالِ تغییراتِ لازم که در ادامه توضیح داده ام) نوشته و enter را فشار دهید.
توجه داشته باشید که در به جایِ بخشِ باید آدرسِ bin در jdk را بنویسید و به جای آدرسِ فایلِ GoodBadUgly.java را که نوشته اید، بنویسید. در کامپیوتر من این آدرس ها از این قرارند:
بنابراین در کامپیوترِ من دستورات فوق به این شکل در می آید:
پس از اجرای این دستور، برنامه ی شما کامپایل می شود و در کنارِ فایلِ GoodBadUgly.java، یک فایلِ GoodBadUgly.class ایجاد می شود. حال باید برنامه را اجرا کنیم. به این منظور به جایِ javac در دستورِ بالا java گذاشته و دستور را اجرا کنید.
پس از اجرای دستورات فوق و وارد کردنِ اسامی، کنسول شما به شکل زیر در میآید:
الان که شما فایل را یک بار کامپایل نموده اید، هر بار که می خواهید دوباره برنامه را اجرا کنید، فقط دستورآخر را اجرا نمایید. (یعنی دستورِ “C:\Program Files\Java\jdk۱.۵.۰\bin”\java GoodBadUgly)
نوشته شده توسط مسعود بلیتی ظهراب در سه شنبه دوازدهم شهریور 1387 |
نصب جاوا پس از آن که Java Development Kit را که در جلسهی اول یک لینک برای آن گذاشته شده بود را دانلود کردید، بر روی فایل دانلودی (با نامِ J۲SE SDK ۵.۰.msi) دابل کلیک کنید. صفحهای مطابق شکل زیر ظاهر میشود.
پس از آن که گزینهی “I accept the terms in the license argument” را انتخاب نمودید، کلیدِ Next را فشار دهید.
از ویژگی های منحصر به فردِ جاوا این است که برنامه های نوشته شده به این زبان در تمامیِ سیستم عامل هایی که امروز در دنیا مورد استفاده قرار می گیرند، قابل اجرا هستند. برنامه های جاوا پس از کامپایل شدن به زبانِ ماشین یا بایتکد تبدیل می شوند. اما بایت کدهای جاوا به جای این که توسطِ خود سیستم عامل اجرا شوند، توسطِ ماشینِ مجازی ای که توسطِ سان عرضه شده است اجرا می شوند. این ماشین مجازی JVM نام دارد و برای تمامی سیستم های عاملِ موجود عرضه شده است. کافی است شما این ماشین را بر روی سیستم عامل های خود نصب کنید تا تمامی برنامه های جاوا بر روی کامپیوتر شما قابل اجرا باشد. البته امروز تقریبا تمامی سیستم های عامل به طور پیش فرض این ماشین را نصب می کنند و نیازی به نصبِ دستی ندارند.
زبان برنامه نویسی جاوا، زبانی است که توسطِ شرکتِ کامپیوتریِ سان میکروسیستمز (Sun Microsystems) از بزرگترین شرکت های کامپوتری که در آمریکا واقع است، عرضه شده است. این زبان برنامهنویسی بعد از ++C، عرضه شد و شباهت های بسیاری به این زبانِ قدرتمند برنامه نویسی دارد. بعد از جاوا، مایکروسافت زبان برنامه نویسیِ #C را عرضه کرد که تقریبا کپیِ جاواست. جاوا از چندسالِ پیش کدباز شد و از آن به بعد بود که با سرعتِ عجیبی در دنیایِ برنامه نویسی رشد کرد و تکنولوژی های متعددِ کدباز دیگری در اطرافش شکل گرفت.
تفاوتِ جاوا با برنامه ای نظیرِ ++C که بر روی تمامی سیستم های عامل قابل اجراست در این است که برنامه های کامپایل شده ی جاوا قابلِ اجرا در تمامی سیستم عامل ها هستند ولی ++C برای این که درهر سیستم عاملی اجرا شود باید دوباره توسطِ آن سیستم عامل کامپایل شود. به همین دلیل در صورتی که کسی بخواهد یک برنامه ی ++C را برای چند سیستم عامل عرضه کند باید پکیج های جداگانه ای از آن برنامه را خود تولید کند و برای هر سیستم عامل جداگانه عرضه کند. نکته ی دیگری که باید توجه داشت این است که این قابلیتِ جاوا را هنوز هیچ زبانِ برنامه نویسیِ رایجی ندارد. هر چند مایکروسافت ادعا می کند که زبانِ هم این گونه است ولی تا کنون هیچ ماشینِ مجازی ای برای اجرای برنامه های #C در سیستم عامل های دیگری غیر از ویندوز عرضه نشده است. این ادعای مایکروسافت هر چند امکانِ صحت دارد ولی به دلیلِ این که مایکروسافت می خواهد سلطه ی سیستم عامل خود را حفظ کند، هرگز به وقوع نخواهد پیوست و جز جنجالی تبلیغاتی نیست. بنابراین اگر می خواهید برنامه ای مستقل از پلتفرم (قابل اجرا در تمامی سیستم عامل ها) بنویسید، جاوا تنها گزینه ی شماست. از ویژگی های دیگرِ جاوا می توان به موارد زیر اشاره کرد:
کدباز و مجانی
سادگی
شی گرا
تفسیری (به ویژگیِ یادشده در شکل فوق گفته می شود)
پایداری
امنیت
مستقل از معماری
قابل حمل
کارایی مناسب
Multi Thread (به این قابلیتِ جاوا گفته می شود که می تواند از CPU در انجام چند فعالیت موازی استفاده کند.)
اما برای نوشتنِ برنامه ای به زبان جاوا شما به چند تکنولوژی و نرم افزار نیاز دارید. اولین نیاز شما، دانلود و نصبِ JDK است. JDK مخففِ کلمهی Java Development Kit یا ابزارِ توسعهی جاوا است که توسط سان مایکروسیستمز عرضه می شود. این ابزار در ایران قابل دانلود نیست، بنابراین ویرایشِ ۵ آن را در آدرس زیر می توانید دانلود کنید. چگونگی نصبِ آن و استفاده از آن را در جلسه ی دوم شرح خواهیم داد.
(هم اکنون ویرایشِ ۶ عرضه شده است ولی برای کارهایی که ما می خواهیم با جاوا انجام دهیم نیازی به آن نیست.) دومین نیاز شما، یافتنِ یک ویرایشگر است که تواناییِ فهمِ کدهای جاوا را داشته و آن را رنگی و قابل فهم کند. معمولا این ویرایش گر ها توانایی اجرای اتوماتیکِ برنامه ی جاوا و اجرایِ سریع آن ها را هم دارند. هم اکنون تعداد زیادی از این ویرایش گرها توسعه یافته اند که معروفترینِ آن ها عبارت اند از:
eclipse
IntelligIdea
NetBeans
JDeveloper
JBuilder
TextPad
DrJava
NotePad++
از میانِ این ویرایش گرها، سه ویرایش گرِ IntelligIdea و JBuilder و TextPad، تجاری بوده و برای استفاده از آن ها نیاز به پرداختِ هزینه دارید. ولی نگرانِ این نباشید، چون این ویرایش گرها در مقابلِ ویرایش گرِ eclipse ضعیف هستند. به جز IntelligIdea که هنوز در حالِ رشد و توسعه است و از طرفدارانِ پر و پاقرصی هم بهره میبرد، قابلیت ها و امکانِ توسعهی سایرین با eclipse قابل مقایسه نیستند. بنابراین از میان ویرایش گرهای یاد شده، ویرایش گر eclipse به دلیلِ زیبایی، سادگی و قدرت فوق العاده و ویرایشگر TextPad یا ++NotePad به دلیلِ سادگی وحجم بسیار کم و کارایی بالا توصیه میشود. دلیلِ برتریِ eclipse هم portable بودن، کدباز بودن و داشتنِ plug-in های بسیار است. به طوری که هم اکنون صدها هزار plug-in برای eclipse وجود دارد که به شما امکانِ استفاده از eclipse در هر زمینه ای و برای هر تکنولوژی می دهد. البته تعدادی از این plug-in ها هم تجاری هستند.
برخی مردم به علت شباهت اسمی، جاوا و جاوااسکریپت را با هم اشتباه میگیرند. در حالیکه این دو زبان گرچه در ظاهر و کلمات شبیهند ولی بطور ساختاری با یکدیگر متفاوتند. جاوا اسکریپت محصول شرکت نت اسکیپ است
نوشته شده توسط مسعود بلیتی ظهراب در سه شنبه دوازدهم شهریور 1387 |
سرعت پایین برنامههای جاوا در محیطی که اجرا میشوند ملاک کارایی نبوده زیرا در محیط وب مسئلهای که سرعت را کند میسازد، شبکه بوده و ابتدا باید سربار شبکه را از روی برنامهها برداشت. از طرف دیگر در برنامههای رومیزی هم در JDK 5.0 و 6.0، بهینه سازی بسیاری بوجود آمده که این مسئله باعث شده که در آخرین تست کارایی که انجام شده یک برنامه جاوا در محدودهی 0.8 تا 1.3 همان برنامه در ++C کارایی داشته باشد که 1.3 آن مربوط به بخش واسط کاربری و سرعت 0.8 آن مربوط به بسته تخلیه حافظه میشده که هیج الگوریتمی نتوانست از الگوریتم Garbage Collector جاوا پیشی بگیرد. همچنین سال ۱۹۹۹ در مقالهای آقای Lutz Prechelt به این مسئله را ثابت کردند که تجربه برنامهنویسی که برنامهای را مینویسد از انتخاب زبانی که برنامه برروی آن نوشته میشود در کارایی تأثیر بیشتری دارد و این بدان معناست که کارایی یک برنامه را برنامهنویس مشخص میکند و نه زبان برنامهنویسی( ایشان در همان مقاله از زبان جاوا استفاده نمودند تا ذهنیت بد را از بین ببرند)
حذف اشارهگرها در جاوا به دلیل مشکلاتی بوده که آنها در طول تاریخشان بوجود آوردهاند، اگرچه این موارد در برنامههای سیستمی لازم بنظر میرسد ولی در محیطهای تحتوب که بستر اصلی جاوا هستند میتوانند اثراتی به مراتب شدیدتر نسبت به آنچه در برنامههای سیستمی دارند داشته باشند و باعث میشود که توجه برنامهنویسان از مسائلی چون کارایی، قابلیت اطمینان و مقیاسپذیری برنامه به تنظیم اشارهگرها معطوف گردد.
وجود وراثت چندگانه در زبانی مانند ++C، باعث ایجاد مشکلات اساسیای میگردید که اکثر برنامهنویسان ++C از آن دوری میکرده و هنوز هم میکنند. ولی قابلیت چندریخته شدن یک کلاس از لحاظ شی گرایی بسیار مهم بوده و بنابراین توجیهی برای وجود وراثت چندگانه را فراهم مینمود. در جاوا با وارد شدن مفهومی به نام واسط برنامهسازی (Interface)، دیگر نیازی به وجود وراثت چندگانه احساس نشد و بنابراین از زبان جاوا حذف گردید. در حال حاضر اکثر طراحان برنامهها حتی به این نتیجه رسیدهاند که وراثت تکی هم باعث ایجاد مشکل بوده و تا آنجایی که میشود باید از Composition استفاده نمود و در تمامی کتابهای طراحی که از سال ۲۰۰۰ به این طرف چاپ شده به آن اشاره نمودهاند.
از ابتدای بوجود آمدن جاوا، کتابخانه JNI - Java Native Interface در آن وجود داشته که قابلیت فراخوانی و دستکاری برنامههایی در ++C و ... را میداده که از نمونههای آن میتوان به Jtwain که یک بستهایست که از کتابخانههای ویندوز برای اسکن عکس استفاده میکند، یا SWT که یک بسته نرمافزاریست که از کتابخانههای ویندوز و لینوکس (برحسب سیستم عامل) برای ساخت واسط کاربری (UI) استفاده میکند، نام برد.
نوشته شده توسط مسعود بلیتی ظهراب در سه شنبه دوازدهم شهریور 1387 |
مهمترین ایرادی که برنامه نویسان سایر زبانها به زبان جاوا میگیرند سرعت اجرایی بسیار پایین جاوا است. یک برنامه جاوا به صورت بایت کد میباشد و باید در ماشین مجازی جاوا اجرا گردد. به همین دلیل سرعت اجرای پایینی را در مقابل زبانهای قدرتمندی همچون ++C دارد. به صورت دیگر یک برنامه C به طور متوسط تا 10 برابر سریعتر از برنامه مشابه جاوا اجرا میگردد.
جاوا علی رغم شیءگرا بودن در بخشی از قسمتها برای ایجاد انعطاف بیشتر یا بازاریابی بهتر برخی اصول شی گرایی را نادیده گرفتهاست. از جمله این قسمتها قابلیت بازتابش Reflection میباشد. هدف اصلی بازتابش این است که استفاده مجدد از کدها و گسترش کدهای موجود و مهمتر از همه نوشتن برنامههای الحاقی آسان گردد ولی این مهم با زیر پا گذاشتن بعضی اصول ممکن شدهاست. برای نمونه با کمک بازتابش به راحتی میتوان متدهای خصوصی دیگر کلاسها را فراخوانی کرد!
زبان جاوا در مقابل زبانی مثل ++C ساده تر و یادگیری ان آسانتر است. این آسانتر بودن به سادگی به دست نیامدهاست بلکه با حذف بسیاری از موارد که باعث قدرتمند تر بودن زبان ++C بودهاند ایجاد شدهاست. مهمترین این موارد اشاره گرها و وراثت چندگانه بودهاند که در زبان جاوا یافت نمیشوند.
از آنجایی که جاوا زبانی با عدم وابستگی به بستر میباشد پس استفاده از توابع سیستم عامل را در برنامه نمیپذیرد. به همین صورت نمیتوان از واسطهای برنامه نویسی غیر از جاوا در آن استفاده نمود.
نوشته شده توسط مسعود بلیتی ظهراب در سه شنبه دوازدهم شهریور 1387 |
منظور از توزیع جاوا پیاده سازیهای مختلفی است که برای کامپایلر جاوا و همچنین مجموعه کتابخانه های استاندارد زبان جاوا( JDK ) وجود دارد. در حال حاضر چهار توزیع کننده عمده جاوا وجود دارند:
سان میکروسیستمز: توزیع کننده اصلی جاوا و مبدع آن میباشد. در اکثر موارد هنگامی که گفته میشود جاوا منظور توزیع سان میباشد.
GNU Classpath:این توزیع از سوی موسسه نرم افزارهای آزاد منتشر شده و تقریبا تمامی کتابخانه استاندارد زبان جاوادر آن بدون بهره گیری از توزیع شرکت سان از اول پیاده سازی شده است . یک کامپایلر به نام GNU Compiler for Java نیز برای کامپایل کردن کد های جاوا توسط این موسسه ایجاد شده است. فلسفه انتخاب نام Classpath برای این پروژه رها کردن تکنولوژی جاوا از وابستگی به علامت تجاری جاوا است بطوریکه هیچ وابستگی یا محدودیتی برای استفاده آن از لحاظ قوانین حقوقی ایجاد نشود و از طرفی به خاطر وجود متغیر محیطی classpath در تمامی محیط های احرایی برنامه های جاوا، این نام به نوعی تکنولوژی جاوا را برای خواننده القا می کند.کامپایلر GNU توانایی ایجاد کد اجرایی (در مقابل بایت کد توزیع سان) را داراست. لازم به ذکر است که در حال حاضر شرکت سان تقریبا تمامی کدهای JDK را تحت مجوز نرم افزار های آزاد به صورت متن باز منتشر کرده است و قول انتشار قسمت بسیار کوچکی از این مجموعه را که بدلیل استفاده از کدهای شرکت های ثانویه نتوانسته به صورت متن باز منتشر نماید در آینده نزدیک با باز نویسی این کد ها داده است.
مایکروسافت J#:این در حقیقت یک توزیع جاوا نیست. بلکه زبانی مشابه میباشد که توسط مایکروسافت و در چارچوب .net ارائه شدهاست. انتظار اینکه در سیستم عاملی غیر از ویندوز هم اجرا شود را نداشته باشید.
AspectJ:این نیز یک زبان مجزا نیست. بلکه یک برنامه الحاقی میباشد که امکان برنامه نویسی Aspect Oriented را به جاوا میافزاید. این برنامه توسط بنیاد برنامه نویسی جلوه گرا و به صورت کد باز ارائه شدهاست.
نوشته شده توسط مسعود بلیتی ظهراب در سه شنبه دوازدهم شهریور 1387 |
قابلیت خاصی در جاوا وجود دارد بنام اپلت. اپلتها امکانات فراوانی برای نوشتن برنامههای تحت وب در اختیار برنامه نویسان قرار میدهند که دیگر زبانهای برنامه نویسی فاقد آن هستند . البته وجود ماشین مجازی جاوا برای اجرای اپلت لازم است.
نمونه هایی از برنامه جاوا :
در زیر نمونهای از برنامهای که در جاوا نوشته شدهاست آورده شده است.البته برای کامپایل کردن این برنامه بایستی JDK بر روی سیستم مورد نظر نصب شده باشد.
در مقایسه با زبانهای دیگر، همچون ++C یا بیسیک یا فورترن، جاوا زبان نسبتاً جدیدتری است. شرکت سان مایکروسیستمز در سال ۱۹۹۱ یک پروژه تحقیقاتی به نام گرین (Green) را آغاز کرد. هدف این پروژه ایجاد زبانی جدید شبیه به ++C بود که نویسنده اصلی آن، جیمز گاسلینگ، آن را بلوط (Oak) نامید. اما بعدها به دلیل برخی مشکلات حقوقی[نیازمند منبع] از میان لیستی از کلمات تصادفی[۱] نام آن به جاوا تغییر کرد.
پروژه گرین به دلیل مشکلات بازاریابی در شرف لغو شدن بود تا اینکه گسترش وب در سال ۱۹۹۳ باعث نمایش تواناییهای وافر جاوا در این عرصه گشت. اینگونه بود که شرکت سان مایکروسیستمز در مه ۱۹۹۵جاوا را رسماً به بازار عرضه کرد.
نوشته شده توسط مسعود بلیتی ظهراب در سه شنبه دوازدهم شهریور 1387 |
جاوا یک زبان برنامهنویسی شئگراست که شرکت سان مایکروسیستمز آن را ابداع کردهاست. زبان جاوا شبیه به ++C است اما مدل شیءگرایی آسان تری دارد و از قابلیت های سطح پایین کمتری پشتیبانی می کند.یکی از قابلیتهای اصلی جاوا این است که مدیریت حافظه را بطور خودکار انجام میدهد. ضریب اطمینان عملکرد برنامههای نوشتهشده به این زبان بالا است و وابسته به سیستم عامل خاصی نیست، به عبارت دیگر میتوان آن را روی هر رایانه با هر نوع سیستم عاملی اجرا کرد. برنامههای جاوا به صورت کدهای بیتی همگردانی (کامپایل) میشوند. که مانند کد ماشین هستند و به ویژه وابسته به سیستم عامل خاصی نمی باشند.
نوشته شده توسط مسعود بلیتی ظهراب در سه شنبه دوازدهم شهریور 1387 |
درباره وبلاگ
وبلاگ مسعود بلیتی ظهراب. محل تولد : اهواز محل سکونت : آبادان تخصص : برنامه نویسی تحت وب با : ASP,ASP.NET,Ajax,PHP,MySQl MSSQL,XHTML,CSS,Javascript. برنامه نویسی میکروکنترلهای PIC. برنامه نویسی Win32 با : C#.NET,VB.NET,VB6.0 گرافیک : Photoshop , Flash
تجربه : طراحی بیش از 9 سایت داینامیک و استاتیک. طراحی آنتی ویروس فارسی . طراحی برنامه های اداری (ویژوال و تحت داس). طراحی ویروس پروگرامینگ (VDK).