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

استاندارد

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

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

حال پس از معرفی modifier ها و متدها بار دیگر به مبحث مهم کلاس ها پرداختیم.

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

شی گرایی و کلاس

برنامه نویسی شیءگرائی (object oreinted programming) وسیله ای برای مدل کردن صحیح دنیای واقعی با استفاده از اشیا (objects) در برنامه و استفاده مجدد از کد است.

یک شی در برنامه دقیقا همان طور تعريف می شود که در دنيای واقعی است؛ خواص معینی دارد که آن را توصیف می کند و متدهایی که می توانید برای انجام کار معینی روی شیء استفاده کنید.

هدف کلی Java اضافه کردن شیءگرائی به زبان برنامه نویسی است.

یک شیء برای نگهداری داده استفاده می شود. داده و توابعی که روی داده کار می کنند به هم مربوط هستند بنابراين داده و توابع هردو با هم دریک بسته قرار می گیرند.

شیءگرائی بيشتر روی داده تاکيد دارد تا عمليات و توابعی که روی داده کار می کنند.

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

شرحی از داده ها و توابعی که می توانند روی داده کار کنند را کلاس (class) می نامند.

کلاس را به عنوان الگوئی برای توليد شیء می توان تصور کرد. کلاس در واقع يک نوع داده user-defined است.

اشياء نمونه هائی از کلاس ها هستند که در زمان اجرا ايجاد می شوند.

چهار مفهوم اصلی وجود دارند که اساس برنامه نویسی شیءگرائی را می سازند و توسط کلاس ها ارائه می شوند. این مفاهیم انتزاع (abstraction)، کپسوله کردن (encapsulation)، توارث (inheritance) و چندریختی (polymorphism) هستند.

انتزاع:

شیء گرائی ابزاری را برای برنامه نویس فراهم می کند که اجزای فضای مسئله را توسط اشيا نمایش دهد. مسئله به بخش های تشکيل دهنده تجزيه می شود.

هر مولفه يک شیء می شود که شامل داده های مرتبط و دستورالعمل های خود است.

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

مثال. درباره خصوصیات کلی وسيله نقليه بدون سروکارداشتن با یک وسيله و مدل خاص می توان بحث کرد. يک نمونه شیء MyVehicle از کلاس Vehicle که خواص کلی و توابع وسايل نقليه را در بر دارد می توان ايجاد کرد. تابع Print مشخصات کلی وسيله نقليه را نمايش می دهد.

Vehicle MyVehicle;
MyVehicle.Print();

کپسوله کردن:

قرار دادن داده و توابعی که روی داده کار می کنند را در یک بسته کپسوله کردن می گویند.

در برنامه نویسی رویه گرا (مشابه آنچه تا کنون انجام می داديد) معلوم نیست چه تابعی روی چه متغیری کار می کند. در برنامه های پیچیده تر این روابط تیره تر می شوند. در برنامه نویسی شیءگرائی داده و توابع مربوط به آن، که اغلب متد (method) ناميده می شوند، در يک بسته به نام کلاس قرار می گیرند بنابراین کاملا مشخص است چه تابعی روی چه داده ای کار می کند.

کپسوله کردن امکان پنهان کردن اطلاعات را نيز فراهم می کند.

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

وراثت:

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

یک کلاس می تواند اعضای عمومی را از کلاس دیگر را به ارث ببرد.

توارث اجازه می دهد کلاس جديدی شامل کليه داده ها و توابع کلاس (های) پياده سازی شود.

کلاس موجود را کلاس پايه (base) و کلاس جديد که اعضای کلاس پايه را به ارث می گيرد را کلاس مشتق شده (derived) می نامند.

مثال. فرض کنيد يک کلاس پايه به نام Shape داريم که در واقع منظورش اشکال کلی در ریاضی است.

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

بنابراين می توان برای هر کدام کلاس های فرعی را تعريف کرد که خواص کلاس Shape را به ارث می برند علاوه براين که دارای فيلدهای جديد ديگری هم هستند.

شکل زیر رابطه بین این کلاس ها را نشان می دهد. و نشان می دهد که همه ی آن ها از کلاس Shape به ارث می برند.

 

در رابطه با ارث بری در بخش های آینده بیشتر صحبت خواهد شد.

چند ریختی:

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

چندریختی یک رابط مشترک را برای پیاده سازی های مختلف از يک تابع در اختيار می گذارد که برای اشیا تحت شرایط مختلف متفاوت عمل کند.

نگاهی دقیق تر به ایجاد شی با استفاده از new

اگر بخواهیم نگاهی دقیق تر به تعریف اشیا با عملگر new داشته باشیم باید بگوییم که فرآیند تعریف یک شی در جاوا به دو قسمت تقسیم می‌شود:

  1. تعریف متغیری برای نگهداری آدرس شی در حافظه
  2. ایجاد شی در حافظه و نسبت‌دادن آن به متغیر تعریف‌شده

مثلا فرض کنید Class زیر را داشته باشیم:

class myClass{
    int a;
    char b;
}

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

عملگر new ، حافظه هر شی را به صورت پویا تخصیص می دهد.

شکل کلی آن در ذیل نشان داده شده است :

ClassVar ObjName= new ClassName();

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

ClassName نام کلاسی است که نمونه ای از آن ایجاد می شود.

همان طور که می دانید برای ایجاد متغیر ما نیازی به عملگر new داریم. چرا که انواع داده های پایه جاوا به صورت شی پیاده سازی نمی شوند. بلکه به صورت متغیرهای «معمولی» پیاده سازی می شوند.

این کار به خاطر بازدهی بیشتر انجام می گیرد.

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

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

در آینده ، با آن دسته از نگارشهای «شیئی» انواع داده های پایه آشنا خواهید شد که برای استفاده در شرایطی مهیا شده اند که همان نوع شیء ها مورد نیاز می باشند.

مهم است به خاطر داشته باشید که new حافظه شیء ها را در طی اجرا ایجاد کنند. اما ، از آنجایی که حافظه محدوداست، این احتمال وجود دارد که new به دلیل عدم وجود حافظه کافی نتواند حافظه لازم برای یک شیء را تخصیص دهد.

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

یعنی ، هر کلاس نوعی چارچوب منطقی ایجاد می کند که رابطه بین اعضایش را تعریف می کند.

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

از این رو ، هر کلاس ، نوعی ساختار منطقی است.

هر شیء نیز نوعی واقعیت فیزیکی است (یعنی هر شیء فضایی را در حافظه اشغال می کند) . مهم است که این تمایز را به ذهن خود بسپارید.

متغیرها یا Field های کلاس

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

مگر آن که در بیرون از تابع، به صورت public تعریف شده باشند که آن هم خاصیت public بودن است که آن متغیر را به این صورت در میاورد و نه متد.

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

حال که با متدها و modifier ها آشنا شده اید به بررسی بیشتر متغیرهای کلاس می پردازیم.

می توانید متغیرهایی را در خارج از متدها تنظیم کنید که همه ی متدهای موجود در گروه شما می توانند ببینند.

این متغیرها، متغیرهای Field (یا متغیرهای Instance) نامیده می شوند. می توانید آنها را دقیقا به روش دیگر متغیرها تنظیم کنید.

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

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

شما تمایل به از دست دادن پیگیری مقادیری را دارید که در این متغیرها می باشند، بنابراین اشکال زدایی کد شما بسیار سخت تر می شود.

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

به عنوان مثال Class زیر را مشاهده نمایید:

static class myClass{
    private int a;
    private char b;
}

هر دو متغیر a و b به صورت private تعریف شده اند.

برای دسترسی به این متغیرها بهتر است به جای آن که آن ها را public اعلام نموده، یک متد به صورت public تعریف کرده و آن متد این متغیرها را برگرداند:

static class myClass{
    private int a;
    private char b;
    public int geta(){
    return a;
    }
    public char getb(){
    return b;
    }
}

به عنوان مثال، کلاس بالا، دو متد geta و getb متغیرهای a و b را برای شما بر می گردانند.

در بخش های آینده همچنان به مبحث Class ها می پردازیم.

بخش بعدی ، سازنده و مخرب را در Class ها بررسی می کنیم.

آموزش برنامه نویسی جاوا (بخش چهاردهم: معرفی و آموزش نحوه استفاده از کلاس های StringBuilder و StringBuffer )

استاندارد

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

کلاس StringBuilder در جاوای 5 معرفی شد.

تفاوت بین StringBuffer و StringBuilder در این است که متدهای موجود در کلاس StringBuilder ویژگی tread Safe بودن را ندارند به عبارت دیگر متدهای این کلاس باهم سنکرون نیستند. اما باید گفت که کلاس StringBuilder سرعت بیشتری دارد. پس تا حد امکان از این کلاس استفاده کنید.

اما اگر سنکرون بودن و tread safe بودن برایتان اهمیت دارد از کلاس StringBuffer استفاده کنید. روش استفاده از این کلاس ها برای الحاق رشته ها با هم یا concat کردن رشته ها به شکل کد زیر است:

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

متدهای کلاس StringBuffer

اولین متدی که به آن می پردازیم متد append است. این متد برای اتصال دو رشته به هم به کار می رود. در واقع رشته ی دوم، به انتهای رشته ی اول ، چسبیده می شود.

در شکل زیر، انواع متغیرهایی که این متد می تواند به عنوان آرگومان ورودی اش بپذیرد را مشاهده می کنید. خروجی این متد نیز یک شی از نوع StringBuffer است.

کد زیر، مثالی برای این متد است:

StringBuffer myString1 = new StringBuffer("Gsm");
myString1.append(" Developers");
System.out.print(myString1);

خروجی کد بالا برابر است با:

Gsm Developers

مشاهده می کنید که رشته ای که در ابتدا به عنوان مقدار برای myString1 تعریف کرده بودیم (“Gsm”) با استفاده از متد append، به رشته ی دومی (“Developers “) متصل شده است.

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

نکته: دقت کنید که این متد ورودی نمی پذیرد.

کد زیر به عنوان مثالی از متد Reverse ، نحوه کار با این متد را به شما آموزش می دهد:

StringBuffer myString1 = new StringBuffer("Gsm Developers");
myString1.reverse();
System.out.print(myString1);

خروجی کد بالا :

srepoleveD msG

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

آرگومان های قابل پذیرش را می توانید در شکل زیر مشاهده کنید:

مثال این متد را هم می توانید در زیر مشاهده کنید:

StringBuffer myString1 = new StringBuffer("Gsm Developers");
myString1.insert(3, 123);
myString1.insert(17,".com");
System.out.print(myString1);

خروجی کد بالا:

Gsm123 Developers.com

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

مثالی از این متد را در زیر مشاهده می کنید:

نکته: به قسمت هایی که بر اساس دو مقداری که داده شد، حذف می شوند دقت کنید.

StringBuffer myString1 = new StringBuffer("0123456");
myString1.delete(3,5);
System.out.print(myString1);

خروجی کد بالا ( به عدد 5 که در رشته حذف نشده است دقت کنید):

01256

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

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

کد زیر یک مثال از این متد را نشان می دهد:

StringBuffer myString1 = new StringBuffer("0123456");
myString1.replace(3, 5, "Gsm");
System.out.print(myString1);

خروجی این کد:

012Gsm56

متدهای length ، index و substring در این دو کلاس نیز وجود دارند. این متدها در بخش های قبلی توضیح داده شد و کار با آن ها همانند کار را کلاس String است.

آموزش برنامه نویسی جاوا (بخش پنجم: عبارات کنترل کننده حلقه ها)

استاندارد

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

دستور Break

دستور break در زبان جاوا دو کاربرد دارد.

  1. وقتی که در اجرای حلقه به خط break می نویسیم حلقه در همان نقطه تمام شده و خارج می شود. و برنامه از خط بعد از حلقه ادامه پیدا می کند.
  2. در بلوک switch مورد استفاده قرار می گیرد که شرط case ها از یکدیگر جدا باشد که این بخش را در مطالب آینده توضیح خواهیم داد.

این دستور در واقع فقط یک کلمه است که به شکل زیر نوشته می شود:

Break;

برای مثال می توانید کد زیر را ببینید:

public static void main(String[] args) {

	      for(int i=1;i<50;i=i+1){
	         System.out.print("i is : " + i );
	       if(i==6)
			   break;
	         System.out.print("\n");
	      }
	}

خروجی کد بالا به شرح زیر است:

i is : 1
i is : 2
i is : 3
i is : 4
i is : 5
i is : 6

در حلقه بالا گفتیم که وقتی i برابر 6 شد، از حلقه خارج (Break) شو.

دستور continue

دستور Continue در همه حلقه ها قابل استفاده است. و کاربرد آن بدین صورت است که در هرجای حلقه که این دستور وجود داشته باشد، ادامه اجرا لغو و به ابتدای حلقه برمی گردیم. دقت داشته باشید که اگر در داخل حلقه for قرار داشته باشیم بخش update پس از رسیدن به continue اجرا خواهد شد و سپس شرط حلقه چک می شود. همچنین اگر در حلقه while یا do…while باشد وقتی به دستور continue می رسیم به ابتدای حلقه رفته و شرط حلقه چک می شود. شکل نوشتاری این دستور به شکل زیر است:

continue;

برای درک بهتر به مثال زیر توجه فرمایید:

public static void main(String[] args) {
		// TODO Auto-generated method stub

	      for(int i=1;i<10;i=i+1){

		       if(i==6)
				   continue;

	         System.out.print("i is : " + i );

	         System.out.print("\n");
	      }
	}

خروجی برنامه بالا به این صورت است:

i is : 1
i is : 2
i is : 3
i is : 4
i is : 5
i is : 7
i is : 8
i is : 9

همان طور که می بینید عدد 6 برای i نشان داده نشده است، زیرا وقتی به این عدد می رسیم حلقه به ابتدای اجرای خود می رود و چیزی چاپ نمی کند.

شکل پیشرفته حلقه for

در نسخه 5 جاوا یک حلقه for جدید معرفی شد. این حلقه برای پیمایش مجموعه ها و لیست ها و آرایه ها به کار می رود. به این معنی که تک تک اعضای مجموعه را یکی یکی پیمایش می کند. شکل نوشتاری این حلقه به صورت زیر است:

for(declaration : expression)
{
   //Statements
}

در قسمت declaration باید یک متغیر تعریف کنیم. نوع این متغیر باید متناسب با نوع آیتم های مجموعه مورد نظر باشد. برای مثال اگر قصد پیمایش لیستی از اعداد صحیح داریم این متغیر باید از نوع int باشد.

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

public static void main(String[] args) {
	      int [] numbers = {10, 20, 30, 40, 50};

	      for(int x : numbers ){
	         System.out.print( x );
	         System.out.print(",");
	      }
	      System.out.print("\n");
	      String [] names ={"Gsm", "Developers", "Team", "Site"};
	      for( String name : names ) {
	         System.out.print( name );
	         System.out.print(",");
	      }
	}

 

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

10,20,30,40,50,
Gsm,Developers,Team,Site,

آموزش برنامه نویسی جاوا (مقدمه)

استاندارد

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

در این بخش ابتدا کمی در مورد جاوا توضیح می دهیم.

جاوا (به انگلیسی: Java) یک زبان برنامه‌نویسیِ شیءگرا است که برای نخستین بار توسط جیمز گاسلینگ در شرکت سان مایکروسیستمز ایجاد گردید و در سال ۱۹۹۵ به عنوان بخشی از سکوی جاوا منتشر شد. زبان جاوا شبیه به ++C است اما مدل شیءگرایی آسان‌تری دارد و از قابلیت‌های سطح پایین کمتری پشتیبانی می‌کند. یکی از قابلیت‌های بنیادین جاوا این است که مدیریت حافظه را بطور خودکار انجام می‌دهد. ضریب اطمینان عملکرد برنامه‌های نوشته‌شده به این زبان نسبت به زبانهای نسل اول C بالا است و وابسته به سیستم‌عامل خاصی نیست. برنامه‌های جاوا به صورت بایت کد (کامپایل) می‌شوند که توسط واسط JVM به کدهای ماشین اجرا می‌شوند؛ و در صورت وجود JVM مانند سایر زبانهای مبتنی بر آن وابسته به سیستم‌عامل خاصی نیستند. (منبع : ویکی پدیا)

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

جاوا برای نوشتن انواع برنامه‌های کاربردی مناسب است. با جاوا می‌توان انواع برنامه‌های زیر را نوشت:

  • برنامه‌های تحت وب
  • برنامه‌نویسی سیستم‌های کوچک مانند تلفن همراه، رایانه جیبی و …
  • برنامه‌های کاربردی بزرگ (Enterprise)
  • برنامه‌های رومیزی (Desktop)
  • و غیره.

سیستم‌عامل: تا سال ۲۰۰۴ net. تنها بر روی پلت فرم ویندوز اجرا می‌شد و برخی ویندوز را سیستم‌عامل غیرقابل اعتمادی در برنامه‌نویسی Enterprise می‌دانستند. ولی جاوا از این نظر انتخاب خوبی محسوب می‌شد.
قابلیت حمل: جاوا بر روی سکوهای رایانش گوناگونی قابل اجرا است، از ATM و ماشین رختشویی گرفته تا سرورهای سولاریس با قابلیت پشتیبانی از 1024 CPU برای پردازشقابلیت حمل: جاوا بر روی سکوهای رایانش گوناگونی قابل اجرا است، از ATM و ماشین رختشویی گرفته تا سرورهای سولاریس با قابلیت پشتیبانی از 1024 CPU برای پردازش.

قابلیت حمل: جاوا بر روی سکوهای رایانش گوناگونی قابل اجرا است، از ATM و ماشین رختشویی گرفته تا سرورهای سولاریس با قابلیت پشتیبانی از 1024 CPU برای پردازش.

جاوا از نظر ساختار بسیار شبیه زبان C و ++C است. و این به هیچ وجه تصادفی نیست. C زبانی است ساخته یافته و ++C زبانی شی گرا است. مهم تر از همه آنست که ++C زبان خیلی از برنامه نویسان در دنیا است.

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

OOP مخفف Object Oriented Programming می باشد. بهمین دلیل این بخش را با بحث جنبه های نظری OOP آغاز می کنیم.

3 اصل OOP

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

این مدل شامل کپسول سازی (Encapsulation)، وراثت (Inheritance) و چند شکلی (polymorphism) می باشد.

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

ریزبرنامه ها applets

از جاوا برای تولید دو نوع برنامه می توان استفاده نمود: برنامه های کاربردی (applications) و ریزبرنامه ها (applets)

یک برنامه کاربردی برنامه ای است که روی رایانه شما و تحت نظارت یک سیستم عامل اجرا می شود. بدین ترتیب یک برنامه کاربردی ایجاد شده توسط جاوا مشابه برنامه های ایجاد شده توسط C و ++C خواهد بود.

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

یک ریز برنامه (applets) یک برنامه کاربردی است که برای انتقال و حرکت روی اینترنت و اجرا توسط یک مرورگر قابل انطباق با جاوا طراحی شده است. یک ریز برنامه در حقیقت یک برنامه ظریف جاوا است که بطور پویا در سراسر اینترنت قابل بارگذاری باشد. درست مثل یک تصویر، یک فایل صوتی یا یک قطعه ویدئویی.

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

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

اپلت‌ها امکانات فراوانی برای نوشتن برنامه‌های تحت وب در اختیار برنامه‌نویسان قرار می‌دهند.

البته وجود ماشین مجازی جاوا برای اجرای اپلت لازم است. اپلت‌ها نظیر فناوری سیلورلایت شرکت مایکروسافت هستند که برنامه‌نویسان را قادر می‌سازد تا امکاناتی را به مرورگر کاربر بیفزایند. البته تفاوت این دو در امنیت می‌باشد به گونه‌ای که سیلورلایت به دلیل اینکه در محیطی به نام جعبه شنی (sandbox) اجرا می‌شوند امن هستند ولی اپلتها فاقد چنین امنیتی هستند و به سادگی هدف حملات استاندارد Social Engineering Toolkit در Kali Linux واقع می‌شوند.

قابلیت های جاوا

  • ساده
  •  شىء گرا
  • (Portable) قابل انتقال
  • (Distributed) توزیع شده
  • کارایى بالا
  • (Interpreted) ترجمه شده
  • Multithreaded (چند نخی)
  • پویا
  • (Secure)  ایمن
  • جاوا مجانی ولی Open Source نیست.