قوانین و اجزاء جاوا
در ویدئوی آموزشی حاضر بعد از معرفی اصول حاکم و قوانین تعریف شده در کار با جاوا، تمامی کامپوننت ها و اجزای جاوا معرفی و مورد بحث قرار می گیرند. در این ویدئو معماری زمان اجرا جاوا مورد بررسی قرار می گیرد و در ادامه جاوا با زبان های آشنای ++C و جاوااسکریپت مورد مقایسه قرار خواهد گرفت. کاربر با اصطلاحات JRE، JDK، JVM و انواع نسخه های ارائه شده جاوا شبیه SE، EE و ME آشنا خواهد شد.
فهرست مطالب آموزش
قوانین و اجزای جاوا:
برای شروعه این بحث قبل ازهرچیزی باید بگوییم که، جاوا از یکسری قوانین اولیه پیروی می کند. اول از همه می توان گفت جاوا یک زبان ساده و شیءگراست و می شود براحتی با آن کار کرد. کافی هست یکبار یاد بگیرید به چه صورت یک فرآیند مشخص را در جاوا انجام بدهید، بعد از آن دیگر می توانید از آن دستورالعمل در سراسر جاوا استفاده کنید، چون معماری و اصول دستورات این زبان هیچوقت تغییر نمی کند. جاوا یک زبان شیءگرا هست، پس وقتی با قوانین encapsulation یا کپسوله سازی، ارثبری و چند ریختی در این زبان آشنا بشوید و یاد بگیرید که این مفاهیم، به چه صورت در جاوا عمل میکنند و به چه صورت می شود آنها را اجرا کرد، در این لحظه هست که شناخت بهتری درمورد معماری و ساختاره برنامه خود خواهید داشت.
برای توسعه دهنده هایی که با زبان های برمبنای سی کارمیکنند مثل سی و سی پلاس پلاس، دستور زبان جاوا خیلی آشنا هست، و کار با جاوا برای آنها راحت هست. جاوا ساخته شد تا یک زبان قدرتمند و امن باشد. قدرت این زبان اصولاً بخاطر ویژگی شیءگرایی آن هست. چرا که شما می توانید هرچیزی را به عنوان یک شیء طراحی کنید، هر چیزی از جمله متدها یا توابع و حتی خاصیتهای مربوط به اعضای یک کلاس را. این ویژگی ها به شما این امکان را می دهد تا کد خود را در قطعات کوچکتر ایجاد کنید تا هم دیباگ کردن برنامه شما و هم نگهداری آن در طولانی مدت راحت تر باشد. همچنین جاوا طراحی شد تا قابل حمل و portable باشد، پس می توانید یکبار برنامه خود را کامپایل کنید و بعد آنرا روی سیستم عامل ها و پردازنده های مختلف اجرا کنید. این زبان طراحی شده تا عملکرد بالایی داشته باشد. نسخه ی اصلی ماشین مجازیه جاوا به سرعت برنامه های سی پلاس پلاس نبود ولی با گذشت زمان پیشرفت قابل توجهی داشت. برنامه های جاوا امروزی سرعتی مثل سی پلاس پلاس دارند و چه بسا گاهی سریعتر از برنامه هایی که با سی پلاس پلاس ساخته می شوند؛ هستند. در آخر هم باید بگوییم که جاوا به عنوان یک زبان مفسر ساخته شد. به علاوه جاوا حالت چند نخی یا همون multithreading را پشتیبانی می کند و همچنین یک زبان پویا هست. اینکه می گوییم این زبان مفسر هست یعنی اینکه وقتی برنامه به یک فرمت خاصی کامپایل شد، در زمان اجرا به صورت خط به خط تفسیر می شود به جای اینکه به طور مستقیم برنامه بیاید و تبدیل بشود به کد ماشین؛ این قابلیتی هست که باعث می شود، زبان قابل حمل و portable بشود. در حقیقت مهمترین تفاوتی که بین یک Compiler و یک مفسروجود دارد روشی هست که آنها کد اجرایی برنامه را اجرا می کنند. زمانیکه شما توسط Interpreter یا مفسر، کد را اجرا می کنید، کد در همان لحظه بصورت خط به خط اجرا می شود و بصورت خط به خط برای کامپیوتر کدها؛ جهت اجرا ارسال و ترجمه می شوند، در مقابل زمانیکه شما یک کد برنامه را توسط کامپایلر اجرا می کنید، کامپایلر کد شما را یکباره اجرا نمی کند بلکه کد را بصورت کامل بر روی دیسک شما قرار می دهد و به شما این امکان داده می شود که هر زمانی که دوست داشتید کد اجرایی را اجرا کنید. کامپایلر جاوا به جای ایجاد کد محلی ماشین، کد بایتی برای ماشین مجازی جاوا ایجاد می کند. برای اجرای دقیق برنامه، از مفسر جاوا برای اجرای کد های بایتی کامپایل شده؛ استفاده می شود. از آنجاییکه کد های بایتی جاوا به نوع کامپیوتر بستگی ندارند، برنامه های جاوا می توانند روی هر نوع کامپیوتری که JVM یا همان Java Virtual Machine ؛ را دارند اجرا بشوند. همچنین قابلیت multithreaded یا چند نخی برای این زبان باعث می شود ساختن برنامه هایی که نیاز دارند در یک زمان چند تا کار را انجام بدهند راحت شود. و خاصیت پویایی یا دینامیک هم در این زبان این امکان را می دهد که بشود انواع داده را در زمان اجرا تغییر داد، البته تا زمانی که این انواع داده با هم سازگار باشند. خب بیایید راجع به معماریه ، زمان اجرای جاوا صحبت کنیم. در این ساعت از طهاکو باز هم این موضوع را یادآور می شویم که جاوا یک زبان مفسر هست. به طوریکه کد برنامه ی شما به کدهای بایتی کامپایل می شود به جای اینکه به زبان ماشین تبدیل بشود. این قابلیت باعث می شود که برنامه های شما بتوانند بین سیستم عامل ها جا به جا بشوند. در حقیقت جاوا برنامه ای هست که در زمان اجرا دیکد می شود. کار شما با سیستم عامل شروع می شود. می توانید برنامه های جاوا را روی ویندوز، مک، لینوکس، سولاریس و یا هر سیستم عامل دیگه ای که دارای ماشین مجازی جاوا باشد و این ماشینِ مجازی برایِ آن تعریف شده باشد؛ اجرا کنید.
ماشین مجازی جاوا یا به اختصار JVM، برگرفته از کلماتِ Java Virtual Machine که بیشتر اوقات بکار گرفته می شود، توسط اوراکل ارائه شده، که البته در ابتدا توسط شرکت سان ماکروسیستم ساخته شده بود. ولی JVM های دیگری هم غیر از این JVM وجود دارند، مثلاً یکی از آنها توسط IBM ارائه شده است یا مثلاً یکی هم توسط شرکت گوگل برای اندروید ساخته شده، و انواع زیاد دیگری از این ماشین هایِ مجازی هم وجود دارند.
بعد از ماشین مجازی ران تایم هَستِه و کتابخانه های اضافه شده را داریم که در اولویت قرار می گیرند. ران تایم هَستِه گاهی Java Class Library بمعنیِ کتابخانه کلاس جاوا نامیده می شود. که شامل JDK و Java Runtime Environment یا محیط رانتایم جاوا یا به اختصار JRE می شود.
در آخر هم برنامه شما به کد بایتی کامپایل می شود و آن کد بایت در آخرین لایه از مراحلی که گفتیم اجرا می شود.
جاوا در مقایسه با C++
حالا بیایید تا جاوا را با زبان های محبوب دیگر مقایسه کنیم. اول سی پلاس پلاس. جاوا در اصل توسط توسعه دهنده های سی پلاس پلاس ایجاد شده است و آنها در نظر داشتند که کار توسعه دهنده ها را بهبود ببخشند. در تصویر زیر چند تا نکته هست که تفاوت جاوارو با C++ مشخص می کند.
اگه شما یک توسعه دهنده ی سی باشید، همه کدهای شما می توانند بخوبی در C++ هم اجرا شوند. این دو زبان با هم سازگار هستند، ولی این در مورد جاوا صادق نیست.
اگرچه قوانین و دستورات جاوا خیلی شبیه به سی و سی پلاس پلاس هستند ولی کدهای جاوا منحصر به خود برنامه ی جاوا هستند. جاوا قوانین و سینتکس خاص خودش را دارد. همانطور که قبلاً هم گفتیم سی پلاس پلاس به زبان Native یا بومیِ ماشین، کامپایل می شود و این باعث می شود سرعت آن بالا برود و بتواند به قابلیت های سطح پایین دسترسی داشته باشد، یعنی که برنامه شما باید برای هر سیستم عامل و پردازنده ای که می خواهیید روی آن اجرا کنید مجدد کامپایل بشود. در صورتی که جاوا به کدهای بایتی کامپایل می شود. چون سی پلاس پلاس به زبان Native یا بومیِ ماشین کامپایل می شود، و در حافظه سیستم قرار می گیرد تا در موقع نیاز به صورت مستقیم از سیستم فراخوانی بشود.
در جاوا یک رابط به نام Java Native Interface یا رابط محلی جاوا یا به اختصار JNI وجود دارد، که گاهاً به این JNI مراجعه می شود. که به شما اجازه می دهد توابع محلی را از طریق JVM صدا بزنید. اگه از JNI استفاده می کنید، باید کد محلی را خودتان ایجاد کنید که معمولاً اینکارو با سی پلاس پلاس انجام می شود.
C++ به شما اجازه میدهد که یکبار برنامه خودتان را بنویسید و بعد مادامی که از قوانین و استانداردها و کتابخانه های سی پلاس پلاس پیروی می کنید، می توانید اونو برای هر سیستم عاملی که می خواهید مجدد کامپایل کنید. درحالیکه برای جاوا، می توانید یکبار برنامه تان بنویسید و کامپایل کنید و بعد هرجایی که خواستید ران بگیرید.
جاوا در یک محیط ماشین مجازی حفاظت شده اجرا می شود، و باز هم لازم هست مجدد یادآوری کنیم که باید برای فراخوانی کردن توابع سیستمی سطح پایین یا low-level؛ به رابط JNI بروید.
این دو زبان از لحاظ مدیریت حافظه هم خیلی با هم متفاوتند. سی پلاس پلاس برای اختصاص دادن و یا خواندن از حافظه ای که بهش نیاز پیدا می کنید به مدیریت حافظه ی صریح نیاز دارد. ولی در جاوا، حافظه برای شما مدیریت شده است. همچنین فضاهای خاصی در حافظه وجود دارد که C++ می تواند از آنها استفاده کند ولی جاوا نمی تواند. مثلا C++ وراثت چندتایی را ساپورت می کند در حالیکه جاوا محدود می شود به یک ارثبریه تنها، اگرچه می توانید رابط های چندتایی را در جاوا پیاده سازی کنید.
حالا اجازه دهید جاوا را با جاوا اسکریپت مقایسه کنیم. با وجود اینکه نام های این زبان ها هر دو شامل تِرمِ جاوا می شود، ولی در حقیقت رابطه ی نزدیکی ندارند. اساس سینتکس هر دوی این زبان ها سی هست، ولی از طرف دیگر اهداف و قوانین متفاوتی دارند. جاوا اسکریپت براساس استاندارد ECMA Script هست و پیاده سازی های مختلفی از این استاندارد وجود دارد، شامل خود جاوا اسکریپت؛ یک نسخه از جاوا اسکریپت که مایکروسافت پیاده سازی کرده است، و گاهی با نام J Script شناخته می شود، Adobe’s ActionScript استفاده شده در فلش و خیلی از برنامه های دیگر. جاوا به کد بایتی کامپایل می شود، در حالیکه جاوا اسکریپت درحقیقت اصلاً کامپایل نمی شود، بلکه در زمان اجرا یا رانتایم تفسیر می شود. جاوا اسکریپت زبان برنامه نویسی تحت مروگرهای وب هست. برای اجرای کد جاوا در یک مرورگر وب، به یک پلاگین اضافی نیاز خواهید داشت. در جاوا، می توانید توابع محلی را از طریق رابط JNI فراخوانی کنید. ولی جاوا اسکریپت، حداقل وقتی در یک مروگروب پیاده سازی می شود، در یک sandbox به صورت امن اجرا می شود به طوری که اجازه ی دسترسی به منابع محلی را ندارد. کاری که Sand-box انجام می دهد جدا سازی اجرای برنامه ها است. به این گونه که برنامه هایی که در Sand-box اجرا می شوند دسترسی محدودتری به منابع سیستم از جمله حافظه دارند.هر دوی این زبان ها به طور گسترده ای قابل حمل و portable هستند، جاوا از طریق JVM های خودش و جاوا اسکریپت از طریق پیاده سازی گسترده ی این زبان در مرورگرهای مختلف و رانتایم های دیگر. هم جاوا و هم جاوا اسکریپت از مدیریت دسترسی حافظه استفاده میکنن ولی مدلهای ارثبریه متفاوتی دارن. جاوا از یک مدله ارثبریه بر مبنای کلاس استفاده میکنه در حالیکه جاوااسکریپت از چیزی به نام ارثبریه مبتنی بر prototype یا نمونه ی اصلی استفاده می کند.
جاوا در سه نسخه ی مختلف و متمایز منتشر شده است. در ابتدا باید بگوییم که همه، نسخه ای از این زبان را با عنوان پلتفرم جاوا، Standard Edition یا SE می شناسیم. این نسخه از زبانِ جاوا هسته و محیط ران تایم بحساب می آید. بعد از آن، پلفتروم جاوایی را داریم که، نسخه ی Enterprise یا سازمانی یا Java EE بحساب می آید. این یک نسخه استاندارد برای ساخت برنامه های تحت وب قدرتمند و صنعتی بکار می آید. و برنامه هایِ تحتِ سرورِ JEE بسیاری وجود دارند، که بعضی ها پولی و بعضیها هم رایگان هستند. پلتفروم جاوا، نسخه ی میکرو یا ME استانداردی برای برنامه نویسی میکرو کنترلرها، سنسورها، و دستگاه های موبایل بحساب می آید. برای مثال، سیم کارت های روی اکثر تلفن های هوشمند با جاوا برنامه نویسی شدهاند.
ما پیش از این به اصطلاح JRE و JDK اشاره کردیم. JRE یعنی محیط رانتایم. پیش از این، JRE به صورت اتوماتیک روی سیستم عامل های رایج مثل مک و ویندوز نصب می شد. ولی در مدلهای مدرن؛ از این سیستم عامل ها؛ JRE وجود ندارد و کاربران باید خودشان JRE را نصب کنند. البته JRE رایگان در اختیار کاربران هست و می توانند آنرا به صورت جداگانه از اوراکل دانلود کنند. نسخه هایی از JRE برای ویندوز، لینوکس، مک OS X، سولاریس و دیگر سیستم عامل ها وجود دارد. JRE همه ی برنامه های جاوا قابلِ تعریف برایِ سیستمهایِ مبتنی بر دسکتاپ را؛ اجرا می کند و همینطور در رانتایم در یک محیط JEE برای اجرای برنامه های بر پایه ی سرور استفاده می شود.
کیت توسعه جاوا
محیط رانتایم جاوا مشهور هست به اینکه مسائل امنیتی را در نظر می گیرد. این محیط خیلی در معرض هک هست، ولی اوراکل به بهترین نحو در مقابل این چالش ها از آن محافظت می کند، به صورتی که به طور منظم بروزرسانیهای آنرا ارسال می کند تا با پَچ هایِ امنیتی خود، هر مشکلِ احتمالی را حل کند. البته خود کاربران یا مدیران باید این بروزرسانی ها را روی کامپیوتر شخصی خود نصب کنند تا از امنیت سیستم خود اطمینان حاصل کنند. باز هم لازم با ذکر هست که سیستم عامل های موبایل ها، مثل اندروید، رانتایم مجزایی برای خودشان دارند و از JRE اوراکل استفاده نمی کنند. JDK یا Java SE Development Kit یا کیت توسعه ی جاوا اس ای، نیز به صورت کاملاً رایگان از اوراکل در دسترس هستند که به شما این امکان را می دهد تا برنامه های جاوا خودتان را طبقه بندی و کامپایل کنید و شامل این ابزارهای خط فرمان مهمی که در تصویر زیر می بینید و دیگر دستورات می شود.
اگه بخواهید برنامه جاوایی را از طریق خط فرمان بنویسید و کامپایل کنید، باید یاد بگیرید که چگونه از این دستورات استفاده کنید. ولی اگه از یکی از Java IDE های رایج، یا محیط های توسعه ی یکپارچه استفاده کنید، آنها جزییات مربوط به این عملیات ابزارهای خط فرمان را برایِ بالا بردنِ آگاهی شما در کار با آنها و در قالبِ راهنماهایِ کاملی؛ پشتیبانی می کنند. در این دوره ی آموزشی طهاکو، تمرکز ما روی اصول و اجزاء زبان برنامه نویسی Java SE هست. ما اینجا کاری با نسخه ی سازمانی جاوا و نسخه ی میکرو نداریم، البته این موضوع را متذکر می شویم که این نسخه ها هم عناصر مهمی از اکوسیستم جاوا هستند.
سینا صیدالی
بسیار کامل و مفهومی بود
از تلاش مدرسین و تیم طهاکو بسیار بسیار تشکر می کنم و برایتان بهترین ها را آرزومندم.
طهاکو
درود بر شما
کیفیت شایسته فرهیختگی شماست