Mehdi Yasinzadeh
Mehdi Yasinzadeh
خواندن ۶ دقیقه·۲ سال پیش

part 1 - Java Programming


سلام به همه ی دوستداران و دشمنان #جاوا بخصوص مو صورتیای فانتزی
بعد از تغییر سه تا کتاب بالاخره کتاب خودمو پیدا کردم اونم چیزی نیست جز head first ?
تصمیم گرفتم هر فصلشو میخونم راجب نکات قشنگش مطلب بنویسم.

بچه ها یکم میخوام راجب خود کتاب بگم اصلا برای کیا خوبه چطوریه و....
ببینید بچه ها این کتاب لحن کنکوری و خشک نداره بلکه لحن بسیار منعطف و گاها مطالبش رو با شوخ طوبی خاصی مینویسه((:
اما بنظرم این کتاب برای کسی نیست که میخواد جاوا رو از صفر یاد بگیره چرا چون مثلا توی فصل اولش میاد حلقه ها رو میگه بدون اینکه متغییر ها رو گفته باشه پس اگر شما جاوا رو بلد نیستی این جا فیتیله پیچ میشین و کتاب رو پرت میکنید کنار که حق هم دارین?
خوب پس این کتاب برای کیه؟ بنظرم این کتاب برای کسیه که یکم جاوا رو بلده حالا شنیده توش یه کامپایلری هست یه JVM هست دیپ نشده توی دیتا تایپ ها که مثلا primitive هست و... و الان میخواد دانشش رو کامل تر کنه یا دانسته هاشو پیوسته کنه.

خوب پارت اول ما یه توضیح راجب jvm و java compiler هست که مختصر از نقطه ی شروع تا اجرای کد شما رو میگم و بعد هم یه قسمت جذاب داریم که صندلی داغ بین این دوتاس??



What you’ll do in Java

در اولین حرکت سامورایی کدمون رو مینویسیم کد جاواییمون که شامل متغییر ها کلاس و فانکشن ها هست.

حالا با استفاده از کامپایلر جاوا که همون javac هست کدمون رو کامپایل میکنم این آدم متشخص میاد یبار کل کد مارو میخونه و بعد اونو تبدیل میکنه به بایت کد(bytecodes) و فایل جدیدی که ساخته رو با یه ادیتور مثله ادیتور قدرتمند نوت پد ویندوز یا نانوی لینوکس باز کنید با عکس زیر روبه رو میشید?

بله عزیزای من همون طور که میبینید این bytecodes اون کدی بود که نوشته بودیم.
حالا این بایت کد رو میدیم به ماشین مجازی جاوا تا اجرا کنه کد رو برامون.

برای اجرای برنامه‌های نوشته شده و کامپایل شده به زبان دیابت زای? جاوا نیاز به برنامه‌ای هست که بهش ماشین مجازی جاوا (Java Virtual Machine) یا به اختصار JVM گفته میشه. این ماشین کدهای کامپایل شده به زبان جاوا را گرفته و اونارو اجرا می‌کنه.

بعله عزیزان این روند اجرای کدهای سم نه چیز اینترپرایز ما توی جاوا بود.

Fireside Chats


سلامی دوباره به جاوا کارای عزیز مخصوصا مو سبزای فانتزی?
با سری برنامه های صندلی داغ یا مناظره های خودمونی (دیگه نزدیک تایتله قبول کنید ناموسا) در خدممتون هستیم از مهمان های عزیزم دعوت میکنم خودشون رو معرفی کنن.

کامپایلر: سلام به همه ی بینندگان عزیز من javac یا همون جاوا کامپایلر هستم خیلی خوشحالم که امشب در خدمت شما و بینندگان عزیزمون هستم.?
ماشین مجازی جاوا: سلامممممم به همه ی شیطونای توی خونهههه من ماشین مجازی جاوا یا همون Java Virtual Machine هستم از خوبای جاوا شما میتونید منو JVM صدا کنید.?
مجری: خوب برنامه رو با این سوال شروع میکنم که کدوم کی از شما مهم تره؟؟؟

ماشین مجازی جاوا: شوخیتون گرفته معلومه که من مهم ترم من همون کسیم که واقعا برنامه ی شما رو ران میکنه اما کامپایلر صرفا به شما یه فایل میده که میتونید پرینتش کنید و بزارید برای آستر قفس پرندتون یا بزارینش بک گراند صفحه یا آتیشش بزنید یا هر چیز دیگه ای. هیچ کاربردی نداره تا من اجراش کنم.?
کامپایلر: اصلا این لحن رو درک نمیکنم☹️
ماشین مجازی جاوا: و اینکه اصلا کامپایلر شوخی سرش نمیشه اگر یه خطای کوچیک داشته باشی ازت میخواد اونو رفع کنی حتی اگر ازت ساعت ها زمان بگیره حتی اگر این یک خطای سینتکسی باشه مثله سیمی کالن....
کامپایلر: ببخشید اما بدون من دقیقا چی ران میشه یک دلیل داشته که جاوا ازین طراحی برای اجرای برنامه هاش استفاده کرده (داشتن کامپایلر برای بایت کد کردن).
اگر جاوا این کارو نمیکرد تو خودت مجبور بودی زمان اجرا یا runtime کد هارو مستقیم از سورس کد بخونی و ترجمه کنی و سرعت اجرای جاوا به طرز مفتضح و خنده داری آهسته و کند میشد??


ماشین مجازی جاوا: من نگفتم تو کاملا بی استفاده هستی اما جدی تو چیکار میکنی؟؟ یه برنامه نویس خودش میتونه بایت کد هارو بنویسه? رفیق تو یه مدت دیگه کارتو از دست میدی ها?
کامپایلر: ببخشید اما این دیدگاه احمقانسسسس حرفت زمانی درسته که تمام فرمت های بایت کدی که میاد سمتت درست باشه حتی اگر از یک کامپایلر جاوا بیرون نیومده بود، که این در عمل این غیرممکنه.
نوشتن بایت کد به وسیله ی برنامه نویس مثله این که بری مسافرت بعد به جای عکس گرفتن از منظره و لحظه هایی که دوست داری بیای اونا رو نقاشی کنی، بله این یک هنره اما کدوم شاسکولی این راه رو انتخاب میکنه و ممنونت میشم اگر منو رفیق خطاب نکنی((((:
ماشین مجازی جاوا: (با لبخند) اما تو هنوز بهم نگفتی واقعا چیکار میکنی!!
کامپایلر: ببین جاوا یک زبان قویییی در تایپ هاست و این یعنی من اجازه نمیدم متغییر ها مقادیر اشتباهی از دیتا تایپشون نگه دارن مثلا اگر استرینگه بیاد int نگه داره این یک ویژگی حیاتی برای safe بودن جاواس و من میتونم جلوگیری کنم از اتفاق افتادن بیشتر این خطا ها و من....
ماشین مجازی جاوا: اما بعضی از اونا از دستت در میره و من مجبورم ClassCastException پرت کنم و بعضی وقتا ملت رو وادار میکنم که نوع اشتباهی از چیزی را در آرایه‌ای قرار دهند که به چیز دیگری اعلام شده است و...

کامپایلر: حاجی هنوز حرفم کامل تموم نشده بوداااا? بله بعضی از خطاها زمان ران تایم ظاهر میشن اما بعضی ازینا بخاطر ویژگی dynamic binding جاواس. برنامه نویسای جاوا میتونن یه آبجکت جدید رو بسازن که برنامه نویس اصلی اصلا اونا رو نمیشناسه پس من باید یکم از خودم انعطاف پذیری نشون بدم.
اما کار من اینه که اجازه ندم هیچ چیزی هیچ چیزی که توی ران تایم اجرا نمیشه به سمتت بیاد معمولا میتونم به برنامه نویسا بگم چه زمانی یه چیزی کار نمیکنه مثلا وقتی میخوای یه شی از سوکت بزاری توی کد اما اشتباهاا یه شی از آبجکت Button میزای من اینجا خودمو به خاک و خون میکشم و به کاربر خطا میدم و ران تایم تو رو ازین خطا محفوظ نه میدارم.


ماشین مجازی جاوا: قبوله اما راجب سکیوریتی یا امنیت چطور؟؟؟ نگاه کن همه ی کار های امنیتی رو من انجام میدم و تو فقط یه چک میکنی سیمیکالن هارو؟؟؟ شوخی میکنی؟؟؟؟ واقعا ریسک بزرگیه????
کامپایلر: ببخشید اما منا خط اوللللللللل این جبهه ی دفاعی هستم همون طور که قبلا گفتم خطاهای دیتاتایپ میتونه تو رو متوقف کنه و من جلوی اونارو الان میگیرم و همچنین من جلوگیری میکنم از جاهایی که کدش نباید تغییر کنه مثلا از صدا زدن یا فراخوانی متد های private جلوگیری میکنم و جلوگیری میکنم از دیدن کد هایی که ملت نباید ببینن (راست میگه اگر کدت کامپایل شده باشه هیچی نمیفهمی ازش) مثلا جلوگیری میکنم از دیدن کلاس های حساس داده. میتونم ساعت ها راجب کارم برات توضیح بدم.?
ماشین مجازی جاوا: به هر حال منم تمام این کار هارو انجام میدم اگر چه مطمئن میشم کسی یواشکی اون کد های کامپایل شده رو قبل اجرا تغییر نمیده.
کامپایلر: احسنت اما همون طور که من قبلا اشاره کردم اگر من جلو گیری نکنم از ۹۹ درصد این خطا ها تو قطعاااااا به زمین گرم میشنی و متوقف میشی و حالا هم دیگه وقت کمه اگر موافق باشی بقیه ی مناظره رو بزاریم برای بعدا نظرت؟
ماشین مجازی جاوا: حله داداش میتونی روی من حساب کنی.



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

jvmjavajavacجاواماشین مجازی جاوا
شاید یک برنامه نویس ...
شاید از این پست‌ها خوشتان بیاید