همانطور که می دانید، ما به مبتدیان برنامه نویسی را برای شروع یادگیری زبان های برنامه نویسی با جاوا توصیه می کنیم و CodeGym همه چیز را دارد تا فرآیند یادگیری جاوا را حتی برای ناآماده ترین دانش آموزان قابل هضم کند. اما به همان اندازه که عناصر گیمیفیکیشن، داستان ساده و شخصیتهای خندهدار به سهولت این فرآیند کمک میکنند، یادگیری اصول اولیه جاوا به ندرت برای اکثر زبانآموزان جدید بدون چالش پیش میرود.
امروز میخواهیم نگاهی به برخی از سختترین زمینهها در اصول برنامهنویسی جاوا بیندازیم، سعی میکنیم بفهمیم چرا بسیاری از مردم آنها را دشوار میدانند و آیا کاری برای شما وجود دارد که در مورد آن انجام دهید.
1. ژنریک
ژنریک ها در جاوا انواعی هستند که دارای یک پارامتر هستند. هنگام ایجاد یک نوع عمومی، شما نه تنها یک نوع، بلکه نوع داده ای که با آن کار خواهد کرد را نیز مشخص می کنید. زبانآموزان جاوا معمولاً از ژنریکها به عنوان یکی از سختترین بخشهای جاوا یاد میکنند. "مساله اصلی من هنوز با Generics سروکار دارد. زمانی که متدهایی با پارامترهایی برای دنبال کردن داشته باشید، بسیار ساده تر است، اما زمانی که باید روش خود را بنویسید، گیج کننده می شود.
نکات و توصیه ها
در اینجا
نظری
درباره Generics در جاوا از راوی ردی، برنامه نویس با تجربه و استاد دانشگاه آورده شده است: "Java Generics کاری را انجام می دهد که قالب های C++ انجام نمی دهند - اجرای ایمنی نوع. پیاده سازی قالب های ++C یک ترفند ساده پیش پردازنده است و ایمنی نوع را تضمین نمی کند. ژنریک ها در جاوا مانند قالب های C++ هستند اما با ایمنی نوع اضافی. و IMHO، ایمنی نوع یک ویژگی اساسی هر محیط توسعه خوب است. و بله! آنها می توانند به دلیل جابجایی ذهنی ما بین پارامترها و انواع گیج کننده باشند. اما من معتقدم که صرف زمان برای تسلط بر آنها ارزش تلاش را دارد. زیرا زمانی که رابطها و Generics را فهمیدم، متوجه شدم که در جاوا خیلی بهتر فکر میکنم."
2. Multithreading
Multithreading در جاوا فرآیند اجرای دو یا چند رشته به طور همزمان برای دستیابی به حداکثر استفاده از CPU توسط برنامه است. Multithreading وظایف بسیار مهمی را حل می کند و می تواند برنامه های ما را سریعتر کند. اغلب چندین برابر سریعتر. اما این یکی از موضوعاتی است که بسیاری از زبان آموزان تازه جاوا تمایل دارند در آن گیر کنند. همه اینها به این دلیل است که چند رشته ای نیز می تواند به جای حل آنها مشکلاتی را ایجاد کند. دو مشکل خاص وجود دارد که multithreading می تواند ایجاد کند: بن بست و شرایط مسابقه. بن بست وضعیتی است که در آن چندین رشته منتظر منابعی هستند که توسط یکدیگر نگهداری می شوند و هیچ یک از آنها نمی توانند به کار خود ادامه دهند. شرط مسابقه یک خطای طراحی در یک سیستم یا برنامه چند رشته ای است که در آن عملکرد سیستم یا برنامه به ترتیب اجرای بخش هایی از کد بستگی دارد.
نکات و توصیه ها
در اینجا یک
توصیه
خوب در مورد نحوه برخورد با چند رشته ای از سوی S.Lott، معمار نرم افزار و کاربر فعال StackExchange، یک وب سایت محبوب پرسش و پاسخ ارائه شده است: «Multi-threading ساده است. کدنویسی یک برنامه برای چند رشته بسیار بسیار آسان است. یک ترفند ساده وجود دارد، و آن استفاده از یک صف پیام خوب طراحی شده (خودتان را رول نکنید) برای انتقال داده ها در بین رشته ها. بخش سخت این است که چندین رشته به طور جادویی یک شیء مشترک را به نوعی به روز کنند. این زمانی است که مستعد خطا می شود زیرا مردم به شرایط مسابقه ای که وجود دارد توجه نمی کنند. بسیاری از افراد از صف های پیام استفاده نمی کنند و سعی می کنند اشیاء مشترک را به روز کنند و برای خود مشکل ایجاد کنند. چیزی که مشکل می شود، طراحی الگوریتمی است که هنگام انتقال داده ها از میان چندین صف، به خوبی کار کند. این سخت است. اما مکانیک رشته های همزیستی (از طریق صف های مشترک) آسان است."
3. مسائل Classpath
خطاهای Classpath نیز یکی از مشکلاتی است که توسعه دهندگان جاوا در کار روزانه خود با آن مواجه هستند. «مشکلات Classpath ممکن است برای اشکالزدایی زمانبر باشد و در بدترین زمانها و مکانهای ممکن اتفاق بیفتد: قبل از انتشار، و اغلب در محیطهایی که تیم توسعهدهنده دسترسی چندانی به آن ندارند. Vasco Ferreira، توسعهدهنده جاوا/جاوا اسکریپت و نویسنده آموزشهای مرتبط با برنامهنویسی
میگوید
، آنها میتوانند در سطح IDE نیز اتفاق بیفتند و به منبع کاهش بهرهوری تبدیل شوند .
نکات و توصیه ها
«مشکلات مسیر کلاس آنقدرها هم که در ابتدا به نظر می رسد پایین یا غیر قابل دسترس نیستند. همه چیز در مورد موجود بودن / نبودن فایلهای فشرده (جارها) در فهرستهای خاص، نحوه یافتن آن دایرکتوریها و نحوه اشکال زدایی مسیر کلاس در محیطهایی با دسترسی محدود است. این کارشناس توضیح میدهد که با دانستن مجموعهای محدود از مفاهیم مانند Class Loader، Class Loader Chain و Parent First/Parent Last، میتوان این مشکلات را به طور موثر حل کرد.
4. چند شکلی و استفاده صحیح از آن
وقتی صحبت از اصول OOP می شود، بسیاری از مردم می گویند که درک چندشکلی با مشکل مواجه شده اند. Polymorphism توانایی یک برنامه برای برخورد با اشیاء با رابط یکسان به روشی یکسان، بدون اطلاعات در مورد نوع خاص شی است. علیرغم اینکه Polymorphism یک موضوع کاملاً اساسی است، نسبتاً گسترده است و بخش خوبی از پایه جاوا را تشکیل می دهد. برای بسیاری از دانش آموزان، پلی مورفیسم اولین مشکل در یادگیری جاوا است. همه به این دلیل که اشکال مختلفی از چندشکلی در زمینه های مختلف استفاده می شود که می تواند گیج کننده باشد.
نکات و توصیه ها
برای مقابله با چندشکلی راهی جز یادگیری آن وجود ندارد. توربن موگنسن، که در دانشگاه کپنهاگ برنامهنویسی تدریس میکند، این مفهوم
را توضیح میدهد
: «سربارگذاری ساده: + میتواند به معنای جمع اعداد صحیح، جمع ممیز شناور و (در برخی زبانها) الحاق رشتهها باشد. چندشکلی زیرگروهی: اگر B زیرگروهی از (به ارث میرسد) A باشد، هر مقدار از نوع B را میتوان در زمینهای استفاده کرد که انتظار مقداری از نوع A را دارد. زمینههای مختلف میتوانند آرگومانهای نوع متفاوتی را ارائه دهند، بنابراین نوع پارامتری شده را در انواع مختلف بتن نمونهسازی میکنید. این "الگو" یا "عمومی" نیز نامیده می شود و در زبان های OO معمولاً با استفاده از براکت های زاویه (مانند T<A>) مشخص می شود. پلی مورفیسم رابط. این اساساً مکانیزمی است که در آن چند شکلی زیرمجموعه را به زیرگروه هایی که یک رابط خاص را اجرا می کنند یا چند شکلی پارامتری را به تایپ پارامترهایی که یک رابط خاص را اجرا می کنند محدود می کنید.
5. انعکاس
انعکاس مکانیزمی است برای کاوش داده های یک برنامه در حین اجرا. Reflection به شما امکان می دهد اطلاعات مربوط به فیلدها، متدها و سازندگان کلاس را کشف کنید. همچنین به شما امکان می دهد با انواعی کار کنید که در زمان کامپایل وجود نداشتند، اما در زمان اجرا در دسترس بودند. انعکاس و یک مدل منطقی سازگار برای صدور اطلاعات خطا، ایجاد کد دینامیک صحیح را ممکن می سازد. اما برای بسیاری از افراد، تشخیص نحوه استفاده از Reflection چندان آسان نیست.
نکات و توصیه ها
در مورد بازتاب و جاوا، بازتاب به جاوا که برای تایپ استاتیک طراحی شده است، اجازه می دهد تا به صورت پویا تایپ شود. تایپ پویا ذاتاً شیطانی نیست. بله، به برنامه نویس اجازه می دهد تا اصول OOP خاصی را زیر پا بگذارد، اما در عین حال بسیاری از ویژگی های قدرتمند مانند پروکسی زمان اجرا و تزریق وابستگی را امکان پذیر می کند. بله، جاوا به شما امکان می دهد با استفاده از بازتاب به پای خود شلیک کنید. جیش لالوانی، یک برنامه نویس با تجربه جاوا و معمار برنامه،
توضیح می دهد
که باید به طور واضح اسلحه را به سمت پای خود بگیرید، ایمنی را بردارید و ماشه را فشار دهید .
6. جریان های ورودی/خروجی
Streams به شما امکان می دهد با هر منبع داده کار کنید: اینترنت، سیستم فایل رایانه یا چیز دیگری. استریم ها ابزاری جهانی هستند. آنها به یک برنامه اجازه می دهند که داده ها را از هر جایی دریافت کند (جریان های ورودی) و آن را به هر کجا ارسال کند (جریان های خروجی). وظیفه آنها یکسان است: گرفتن داده ها از یک مکان و ارسال آن به مکان دیگر. دو نوع جریان وجود دارد: جریان های ورودی (برای دریافت داده ها استفاده می شود) و جریان های خروجی (برای ارسال داده). چیزی که درک استفاده از استریم ها را برای بسیاری از مردم دشوار می کند این واقعیت است که جاوا دارای چندین کلاس جریان ورودی/خروجی است.
نکات و توصیه ها
جاوا دارای کلاسهای جریان ورودی/خروجی زیادی است که عمدتاً به دلیل دو عامل مؤثر است. اول میراث است. برخی از کلاس ها به دلایل تاریخی هنوز وجود دارند و از آنجایی که مضر تلقی نمی شوند، منسوخ نشده اند. دوم، انعطاف پذیری. برنامه های مختلف نیازمندی های متفاوتی دارند و بنابراین بسته به نیاز خود گزینه های متعددی دارید. جوناس ملین، کارشناس جاوا از سوئد
میگوید
: انتزاعهای مفید هنگام خواندن آن وضوح را به ارمغان میآورند و با چند خط کد میتوانید کارهای زیادی انجام دهید . درک کدام جنبههای جاوا برای شما سختتر بود یا برای مدتی درگیر آن بودید؟ تجربیات خود را در نظرات به اشتراک بگذارید.
GO TO FULL VERSION