Learn Java
304 subscribers
92 photos
1 video
94 files
84 links
یاد گیری زبان برنامه نویسی جاوا و نکات و مفاهیم
کاربردی ان



@parsa8113
@bardiademon
Download Telegram
تفاوت میان دو متد toString و valueOf

هر شی در جاوا دارای یک متد toString است که به برنامه امکان می دهد تا رشته معرفی کننده ان شی را بدست اورد. متاسفانه این تکنینک نمیتواند همراه با نوع های بنیادین (flot,int.long,double,char,byte,short,)به کار گرفته شود چرا که انها متدی ندارند...
البته میتوان از کلاس های type-wrapper استفاده نمود اما تنها زمانی از این کلاس ها استفاده میشود که نیاز به دستکاری مقادیر با نوع های اصلی به صورت شی را داشته باشید.
کلاس String متد استاتیکی در نظر گرفته است که یک ارگومان از هر نوع دریافت کرده و آنرا به یک شی رشته تبدیل میکند.

یاداوری کلاس های type-wrapper:
type-wrapper (https://t.me/this_java/581)
@this_java
خطای کامپایل incompatiable types (نوع های ناسازگار) در چه صورت رخ میدهد؟

این خطا بر این نکته دلالت دارد که مبادرت به تخصیص مراجعه شی سوپر کلاس به متغیر زیر کلاس انجام شده است که اجازه اینکار وجود ندارد و کامپایلر از این تخصیص ممانعت میکند چرا که رابطه ی is-a تنها میان زیر کلاس و سوپر کلاس برقرار است نه میان سوپر کلاس و زیر کلاس!

@this_java
اجتناب از خطای کامپایل تبدیل نوع

درقسمت قبل گفتیم در صورتی که یک سوپر کلاس را به طور مستقیم به یک زیر کلاس تخصیص دهید خطای کامپایل نوع های ناسازگار رخ میدهد... اما چاره چیست؟
میتوان از روش تبدیل نوع (downcasting) استفاده کرد :

Circle c = (Circle) new Shape()
(در مثال بالا فرض بر این است که Circle از کلاس Shape ارث بری داشته است)
@this_java
واسط های تابعی

در جاوا SE 8 هر واسطی که فقط حاوی یک متد abstract باشد بعنوان یک واسط تابعی شناخته میشود.
مثال : اینترفیس Runnable
واسط های تابعی کاربرد گسترده ای در قابلیت های جدید lambda در جاوا SE 8 دارند
@this_java
فایل ها و استریم ها

نگاه جاوا به هر فایل بفرم یک استریم (stream) متوالی از بایت ها است. انتهای هر فایل با یک نماد پایان فایل (eof) یا به تعداد بایت های مشخص شده که در سیستم مدیریت نگهداری ساختار به ثبت رسیده , تعیین میشود. یک برنامه پردازش استریمی از بایت ها در جاوا , به هنگام رسیدن برنامه به انتهای استریم , یک مشخصه از سیستم عامل دریافت میکند-برنامه نیازی ندارد که از نحوه عرضه فایل یا استریم در لایه های زیرین پلتفرم چچیزی بداند. در برخی از موارد , مشخصه انتهای فایل بصورت یک استثنا رخ میدهد. در سایر موارد , مشخصه انتهای فایل , بصورت یک مقدار برگشتی از سوی یک متد معلوم میگردد

@this_java
برنامه ی کامپیوتری چیست ؟(Computer Program):

دستور العمل هایی که بیانگر راه حل قدم به قدم برای حل یک مسعله یا نشانگر ترتیب توالی انجام مراحل یک عمل یا رویداد می باشند , برنامه ی کامپیوتری نامیده میشود
هر برنامه کامپیوتری به حل یک مسعله خاص یا انجام یک عمل ویژه اختصاص دارد, مانند محاسبه و تعیین نمرات, تجزیه و تحلیل داده های بازاریابی و غیره.
در حقیقت وقتی یک نفر برنامه ای مینویسد مانند این است که مسعله ای را حل میکند یا طرز عمل کاری را ارایه میدهد. مسلما حل یک مسعله یا بیان طرز اجرای دقیق یک عمل, نیازمند قدرت منطق است تا راه حلی مناسب و دقیق جهت حل مسعله یا روش صحیح و دقیق انجام مراحل یک کار ارایه شود
@this_java
بدست اوردن ب م م دو عدد در جاوا :

import javax.swing.JOptionPane;
class BMM {
public static int bmm(int m, int n) {
int r = m % n;
if (r == 0) {
return n;
}
return bmm(n, r);
}
public static void main(String[] args) {
int m = Integer.valueOf(JOptionPane.showInputDialog(null, "عدد بزرگتر را وارد کنید"));
int n = Integer.valueOf(JOptionPane.showInputDialog(null, "عدد کوچکتر را وارد کنید"));
JOptionPane.showMessageDialog(null, bmm(m, n));
}
}
@this_java
وراثت در جاوا...
@this_java
مفهوم type casting در جاوا چیست؟
در توسعه نرم‌افزار برخی مواقع نیاز داریم تا دیتا تایپ داده‌های مورد استفاده در برنامۀ خود را تغییر دهیم که به فرآیند تغییر نوع داده‌ای به نوع دادۀ دیگر اصطلاحاً Casting گفته می‌شود (به طور مثال، فرض کنیم که در برنامه‌ای نیاز داریم تا داده‌ای با دیتا تایپ int را به داده‌ای از نوع double تبدیل کرده سپس در برنامۀ خود مورد استفاده قرار دهیم.)

نکته قابل‌توجه در ارتباط با کَست کردن این است که پس از تغییر دیتا تایپ داده‌ای به دیتا تایپی دیگر، دیتای جدید که نوع آن تغییر یافته جایگزین دیتای قبلی نمی‌شود بلکه داده‌ای با دیتا تایپ جدید تولید می‌شود. همچنین از میان تمامی دیتا تایپ‌های زبان برنامه‌نویسی جاوا نوع دادۀ boolean قابلیت کَست کردن ندارد.
نکته : در فرآیند کَستینگ دادۀ اولیه‌ای که قصد تغییر دیتا تایپ آن را داریم تحت عنوان دیتای Source و داده تولیدشده در نتیجه این فرآیند نیز دیتای Destination نامیده می‌شود. نکته حائز اهمیت در این مورد این است که چنانچه دیتای Destination از دیتای Source از لحاظ میزان حافظه مورد نیاز برای ذخیره‌سازی بزرگ‌تر باشد، فرایند کَست شدن با ضریب خطای به مراتب کمتری انجام می‌شود

@this_java
مقایسه دو رشته با متد equals:

متد equals مبادرت به تست هر دو شی برای تعیین برابری میکند(بررسی میکند که ایا محتویات در دو شی یکسان هستند یا خیر). اگر هر دو شی برابر باشند متد مقدار true و در غیر این صورت false برگشت میدهد. متد equals از روش مقایسه lexicographical استفاده میکند , که در ان مقادیر صحیح unicode که هر یک نشاندهنده یک کاراکتر در رشته مقایسه شوند است استفاده میشود. متد equals مقادیر صحیح unicode را که نشاندهنده کاراکتر های موجود در هر رشته می باشند , مقایسه میکند.

@this_java
مقایسه دو رشته با متد compareTo:

این متد در واسط Comparable اعلان شده و در کلاس String پیاده شده است. .. اگر رشته ها باهم برابر باشند این متد مقدار 0 و اگر رشته ای که متد compareTo را فراخوانی کرده کوچکتر از رشته ای باشد که به عنوان ارگومان به مقدار ارسال شده, -1 و اگر رشته ای که متد compareTo را فراخوانی کرده بزرگتر از رشته ای باشد که بعنوان ارگومان به مت ارسال شده, مقدار 1 برگرشت میدهد... متد compareTo از مقایسه lexicographical استفاده میکند

https://t.me/this_java/332

@this_java
یافتن مکان کاراکتر ها و زیر رشته ها

در بسیاری از برنامه جستجو برای یافتن یک کاراکتر یا مجموعه ای از کاراکتر ها در یک رشته ضروری است. برای مثال , برنامه نویس یک برنامه پردازشگر لغت ایجاد میکند و مایل است تا این برنامه از ویژگی جستجو در میان مستندات برخوردار باشد.برای پیاده سازی جستجو در کاراکتر های مشخص شده یا زیر رشته ها در درون یک رشته میتوانید از متد های indexOf و lastIndexOf که هردو متد های کلاس String هستند استفاده کنید

مثال :
String letters ="abcdefg";

System.out.println("LastIndexOf: "letters.lastIndexOf('c'));
System.out.println("IndexOf: "letters.indexOf("def"));
خروجی :
LastIndexOf 2
IndexOf: 3

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

اگر indexOf کاراکتر را پیدا کند, شاخص ان کاراکتر را در رشته باز میگرداند , در غیر اینصورت -۱ برگشت میدهد

@this_java
سلسه مراتب توارث

رابطه توارث را میتوان به فرم یک سلسه مراتب درختی تصور کرد. موجودیت یک کلاس در رابطه توارث با زیر کلاس های ان مشخص میگردد. اگرچه کلاس ها میتوانند موجودیت های مستقلی داشته باشند اما زمانیکه در ترتیبات توارثی بکار گرفته میشوند, با کلاس های دیگر مرتبط میگردند .

@this_java
متد های مسند

یکی دیگر از کاربردهای رایج در استفاده از متد های accsessor (متد های get به متد های accessor یا query معروف هستند)تست برقرار بودن یا نبودن یک شرط است- غالبا به این متد ها , متد های مسند یا predicate میگویند.مثالی از یک متد مسند میتواند متد isEmpty برای یک کلاس حامل باشد- کلاسی با قابلیت نگهداری تعدادی شی همانند یک لیست پیوندی,پشته یا صف. برنامه میتواند قبل از اقدام به خواندن ایتم دیگری از یک شی حامل از متد isEmpty استفاده کند. همچنین برنامه میتواند از متد isFull نیز استفاده کند, قبل ازینکه اقدامی در جهت افزودن یک ایتم دیگر به یک شی حامل داشته باشد.

@this_java
ترکیب

یک کلاس میتواند مراجعه هایی به شی های کلاس های دیگر بعنوان اعضا داشته باشد. به چنین قابلیتی ترکیب گفته میشود و گاها از ان بعنوان یک رابطه has-a یاد میشود.

@this_java
لیندا _ آموزش الگوهای طراحی جاوا: خلاقانه (با زیرنویس)