مفهوم type casting در جاوا چیست؟
در توسعه نرمافزار برخی مواقع نیاز داریم تا دیتا تایپ دادههای مورد استفاده در برنامۀ خود را تغییر دهیم که به فرآیند تغییر نوع دادهای به نوع دادۀ دیگر اصطلاحاً Casting گفته میشود (به طور مثال، فرض کنیم که در برنامهای نیاز داریم تا دادهای با دیتا تایپ int را به دادهای از نوع double تبدیل کرده سپس در برنامۀ خود مورد استفاده قرار دهیم.)
نکته قابلتوجه در ارتباط با کَست کردن این است که پس از تغییر دیتا تایپ دادهای به دیتا تایپی دیگر، دیتای جدید که نوع آن تغییر یافته جایگزین دیتای قبلی نمیشود بلکه دادهای با دیتا تایپ جدید تولید میشود. همچنین از میان تمامی دیتا تایپهای زبان برنامهنویسی جاوا نوع دادۀ boolean قابلیت کَست کردن ندارد.
نکته : در فرآیند کَستینگ دادۀ اولیهای که قصد تغییر دیتا تایپ آن را داریم تحت عنوان دیتای Source و داده تولیدشده در نتیجه این فرآیند نیز دیتای Destination نامیده میشود. نکته حائز اهمیت در این مورد این است که چنانچه دیتای Destination از دیتای Source از لحاظ میزان حافظه مورد نیاز برای ذخیرهسازی بزرگتر باشد، فرایند کَست شدن با ضریب خطای به مراتب کمتری انجام میشود
@this_java
در توسعه نرمافزار برخی مواقع نیاز داریم تا دیتا تایپ دادههای مورد استفاده در برنامۀ خود را تغییر دهیم که به فرآیند تغییر نوع دادهای به نوع دادۀ دیگر اصطلاحاً Casting گفته میشود (به طور مثال، فرض کنیم که در برنامهای نیاز داریم تا دادهای با دیتا تایپ int را به دادهای از نوع double تبدیل کرده سپس در برنامۀ خود مورد استفاده قرار دهیم.)
نکته قابلتوجه در ارتباط با کَست کردن این است که پس از تغییر دیتا تایپ دادهای به دیتا تایپی دیگر، دیتای جدید که نوع آن تغییر یافته جایگزین دیتای قبلی نمیشود بلکه دادهای با دیتا تایپ جدید تولید میشود. همچنین از میان تمامی دیتا تایپهای زبان برنامهنویسی جاوا نوع دادۀ boolean قابلیت کَست کردن ندارد.
نکته : در فرآیند کَستینگ دادۀ اولیهای که قصد تغییر دیتا تایپ آن را داریم تحت عنوان دیتای Source و داده تولیدشده در نتیجه این فرآیند نیز دیتای Destination نامیده میشود. نکته حائز اهمیت در این مورد این است که چنانچه دیتای Destination از دیتای Source از لحاظ میزان حافظه مورد نیاز برای ذخیرهسازی بزرگتر باشد، فرایند کَست شدن با ضریب خطای به مراتب کمتری انجام میشود
@this_java
مقایسه دو رشته با متد equals:
متد equals مبادرت به تست هر دو شی برای تعیین برابری میکند(بررسی میکند که ایا محتویات در دو شی یکسان هستند یا خیر). اگر هر دو شی برابر باشند متد مقدار true و در غیر این صورت false برگشت میدهد. متد equals از روش مقایسه lexicographical استفاده میکند , که در ان مقادیر صحیح unicode که هر یک نشاندهنده یک کاراکتر در رشته مقایسه شوند است استفاده میشود. متد equals مقادیر صحیح unicode را که نشاندهنده کاراکتر های موجود در هر رشته می باشند , مقایسه میکند.
@this_java
متد 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
این متد در واسط Comparable اعلان شده و در کلاس String پیاده شده است. .. اگر رشته ها باهم برابر باشند این متد مقدار 0 و اگر رشته ای که متد compareTo را فراخوانی کرده کوچکتر از رشته ای باشد که به عنوان ارگومان به مقدار ارسال شده, -1 و اگر رشته ای که متد compareTo را فراخوانی کرده بزرگتر از رشته ای باشد که بعنوان ارگومان به مت ارسال شده, مقدار 1 برگرشت میدهد... متد compareTo از مقایسه lexicographical استفاده میکند
https://t.me/this_java/332
@this_java
Telegram
Learn Java
جاوا به زبان ساده 29
متد ()compareToIgnoreCase شبیه متد ()compareTo یک String(رشته( را از نظر لغوی مقایسه
می کند. تنها تفاوت آنها این است که متد ()compareToIgnoreCase هنگام مقایسه دو String(رشته(
حروف بزرگ)uppercase )یا کوچک)lowercase )را نادیده می گیرد.…
متد ()compareToIgnoreCase شبیه متد ()compareTo یک String(رشته( را از نظر لغوی مقایسه
می کند. تنها تفاوت آنها این است که متد ()compareToIgnoreCase هنگام مقایسه دو String(رشته(
حروف بزرگ)uppercase )یا کوچک)lowercase )را نادیده می گیرد.…
یافتن مکان کاراکتر ها و زیر رشته ها
در بسیاری از برنامه جستجو برای یافتن یک کاراکتر یا مجموعه ای از کاراکتر ها در یک رشته ضروری است. برای مثال , برنامه نویس یک برنامه پردازشگر لغت ایجاد میکند و مایل است تا این برنامه از ویژگی جستجو در میان مستندات برخوردار باشد.برای پیاده سازی جستجو در کاراکتر های مشخص شده یا زیر رشته ها در درون یک رشته میتوانید از متد های indexOf و lastIndexOf که هردو متد های کلاس String هستند استفاده کنید
مثال :
اگر indexOf کاراکتر را پیدا کند, شاخص ان کاراکتر را در رشته باز میگرداند , در غیر اینصورت -۱ برگشت میدهد
@this_java
در بسیاری از برنامه جستجو برای یافتن یک کاراکتر یا مجموعه ای از کاراکتر ها در یک رشته ضروری است. برای مثال , برنامه نویس یک برنامه پردازشگر لغت ایجاد میکند و مایل است تا این برنامه از ویژگی جستجو در میان مستندات برخوردار باشد.برای پیاده سازی جستجو در کاراکتر های مشخص شده یا زیر رشته ها در درون یک رشته میتوانید از متد های indexOf و lastIndexOf که هردو متد های کلاس String هستند استفاده کنید
مثال :
String letters ="abcdefg";خروجی :
System.out.println("LastIndexOf: "letters.lastIndexOf('c'));
System.out.println("IndexOf: "letters.indexOf("def"));
LastIndexOf 2متد lastIndexOf عمل جستجو را از انتهای رشته شروع و به سمت ابتدای ان حرکت میکند. اگر متد موفق به یافتن کاراکتر شود شاخص انرا باز میگرداند در غیر اینصورت مقدار -۱ برگشت داده میشود
IndexOf: 3
اگر indexOf کاراکتر را پیدا کند, شاخص ان کاراکتر را در رشته باز میگرداند , در غیر اینصورت -۱ برگشت میدهد
@this_java
سلسه مراتب توارث
رابطه توارث را میتوان به فرم یک سلسه مراتب درختی تصور کرد. موجودیت یک کلاس در رابطه توارث با زیر کلاس های ان مشخص میگردد. اگرچه کلاس ها میتوانند موجودیت های مستقلی داشته باشند اما زمانیکه در ترتیبات توارثی بکار گرفته میشوند, با کلاس های دیگر مرتبط میگردند .
@this_java
رابطه توارث را میتوان به فرم یک سلسه مراتب درختی تصور کرد. موجودیت یک کلاس در رابطه توارث با زیر کلاس های ان مشخص میگردد. اگرچه کلاس ها میتوانند موجودیت های مستقلی داشته باشند اما زمانیکه در ترتیبات توارثی بکار گرفته میشوند, با کلاس های دیگر مرتبط میگردند .
@this_java
متد های مسند
یکی دیگر از کاربردهای رایج در استفاده از متد های accsessor (متد های get به متد های accessor یا query معروف هستند)تست برقرار بودن یا نبودن یک شرط است- غالبا به این متد ها , متد های مسند یا predicate میگویند.مثالی از یک متد مسند میتواند متد isEmpty برای یک کلاس حامل باشد- کلاسی با قابلیت نگهداری تعدادی شی همانند یک لیست پیوندی,پشته یا صف. برنامه میتواند قبل از اقدام به خواندن ایتم دیگری از یک شی حامل از متد isEmpty استفاده کند. همچنین برنامه میتواند از متد isFull نیز استفاده کند, قبل ازینکه اقدامی در جهت افزودن یک ایتم دیگر به یک شی حامل داشته باشد.
@this_java
یکی دیگر از کاربردهای رایج در استفاده از متد های accsessor (متد های get به متد های accessor یا query معروف هستند)تست برقرار بودن یا نبودن یک شرط است- غالبا به این متد ها , متد های مسند یا predicate میگویند.مثالی از یک متد مسند میتواند متد isEmpty برای یک کلاس حامل باشد- کلاسی با قابلیت نگهداری تعدادی شی همانند یک لیست پیوندی,پشته یا صف. برنامه میتواند قبل از اقدام به خواندن ایتم دیگری از یک شی حامل از متد isEmpty استفاده کند. همچنین برنامه میتواند از متد isFull نیز استفاده کند, قبل ازینکه اقدامی در جهت افزودن یک ایتم دیگر به یک شی حامل داشته باشد.
@this_java
ترکیب
یک کلاس میتواند مراجعه هایی به شی های کلاس های دیگر بعنوان اعضا داشته باشد. به چنین قابلیتی ترکیب گفته میشود و گاها از ان بعنوان یک رابطه has-a یاد میشود.
@this_java
یک کلاس میتواند مراجعه هایی به شی های کلاس های دیگر بعنوان اعضا داشته باشد. به چنین قابلیتی ترکیب گفته میشود و گاها از ان بعنوان یک رابطه has-a یاد میشود.
@this_java
Forwarded from Parsa
2d8358-FL2903_Ex_Files_Learn_Java_Cryptography.zip
198.4 KB
اعضای کلاس استاتیک
هر شی از یک کلاس دارای کپی از تمام متغیر های نمونه متعلق به کلاس خود است. با این همه , در موارد مشخص, تمام شی های کلاس میتوانند کپی از یک متغیر خاص را به اشتراک در اورند . یک فیلد استاتیک , که متغیر کلاس نامیده میشود , چنین متغیری است, یک برنامه فقط حاوی یک کپی از این متغیر در حافظه است, تعداد شی های نمونه سازی شده از کلاس اهمیت ندارند و بر تعداد کپی های این متغیر در حافظه تاثیری نمیگذارند. یک متغیر استاتیک نشان دهنده ی اطلاعات و شی در مورد کلاس است. تمام شی های کلاس اطلاعات یکسانی را به اشتراک میگذارند. اعلان یک متغیر استاتیک با کلمه کلیدی static اغاز میشود.
برای توضیح اینکه چرا به کلاس استاتیکی نیاز است(کلاسی که دارای فیلد یا متد استاتیک باشد) , به بررسی یک بازی ویدیویی میپردازیم. فرض کنید که در این بازی , سفینه های مریخی که با کلاس Martian مشخص شده اند , مورد حمله سفینه های دیگر قرا گرفته اند. هر سفینه مریخی قادر به درگیری با سفینه های دشمن است به شرطی که هر سفینه مطمعن باشد حداقل چهار سفینه ی خودی در صحنه هستند. اگر مجموع Martian ها کمتر از پنج باشد, انگاه سفینه پا به فرار خواهد گذاشت.به همین دلیل هر سفیه باید از تعداد سفینه ها (martianCount) مطلع باشد . میتوانیم martianCount را به عنوان یک متغیر نمونه به هر کلاس Martian اعطا کنیم (متغیر نمونه یعنی متغیری که وابسته به نمونه های یا شی های ساخته شده از کلاس است). اگر چنین کاری انجام دهیم هر Martian یک نسخه (کپی ) جداگانه از داده نمونه خواهد داشت و هربار که یک Martian ایجاد میکنیم باید متغیر نمونه martianCount را در هر Martian بروز کنیم..کپی های اضافی موجب تلف شدن حافظه میشوند و به روز کردن این تعداد کپی , زمان زیادی مطلبد. بجای اینکار متغیر martianCount را بصورت استاتیک اعلان میکنیم, از اینرو این متغیر یک داده سراسری در کلاس خواهد بود. هر سفینه میتواند مقدار این متغیر را مشاهده کند , اما برنامه فقط یک کپی از این متغیر استاتیک را به منظور حفظ فضا در خود نگهداری میکند. در کنار اینکار در زمان هم صرفه جویی میشود چرا که سازنده martian فقط مقدار متغیر استاتیکی را افزایش میدهد
@this_java
هر شی از یک کلاس دارای کپی از تمام متغیر های نمونه متعلق به کلاس خود است. با این همه , در موارد مشخص, تمام شی های کلاس میتوانند کپی از یک متغیر خاص را به اشتراک در اورند . یک فیلد استاتیک , که متغیر کلاس نامیده میشود , چنین متغیری است, یک برنامه فقط حاوی یک کپی از این متغیر در حافظه است, تعداد شی های نمونه سازی شده از کلاس اهمیت ندارند و بر تعداد کپی های این متغیر در حافظه تاثیری نمیگذارند. یک متغیر استاتیک نشان دهنده ی اطلاعات و شی در مورد کلاس است. تمام شی های کلاس اطلاعات یکسانی را به اشتراک میگذارند. اعلان یک متغیر استاتیک با کلمه کلیدی static اغاز میشود.
برای توضیح اینکه چرا به کلاس استاتیکی نیاز است(کلاسی که دارای فیلد یا متد استاتیک باشد) , به بررسی یک بازی ویدیویی میپردازیم. فرض کنید که در این بازی , سفینه های مریخی که با کلاس Martian مشخص شده اند , مورد حمله سفینه های دیگر قرا گرفته اند. هر سفینه مریخی قادر به درگیری با سفینه های دشمن است به شرطی که هر سفینه مطمعن باشد حداقل چهار سفینه ی خودی در صحنه هستند. اگر مجموع Martian ها کمتر از پنج باشد, انگاه سفینه پا به فرار خواهد گذاشت.به همین دلیل هر سفیه باید از تعداد سفینه ها (martianCount) مطلع باشد . میتوانیم martianCount را به عنوان یک متغیر نمونه به هر کلاس Martian اعطا کنیم (متغیر نمونه یعنی متغیری که وابسته به نمونه های یا شی های ساخته شده از کلاس است). اگر چنین کاری انجام دهیم هر Martian یک نسخه (کپی ) جداگانه از داده نمونه خواهد داشت و هربار که یک Martian ایجاد میکنیم باید متغیر نمونه martianCount را در هر Martian بروز کنیم..کپی های اضافی موجب تلف شدن حافظه میشوند و به روز کردن این تعداد کپی , زمان زیادی مطلبد. بجای اینکار متغیر martianCount را بصورت استاتیک اعلان میکنیم, از اینرو این متغیر یک داده سراسری در کلاس خواهد بود. هر سفینه میتواند مقدار این متغیر را مشاهده کند , اما برنامه فقط یک کپی از این متغیر استاتیک را به منظور حفظ فضا در خود نگهداری میکند. در کنار اینکار در زمان هم صرفه جویی میشود چرا که سازنده martian فقط مقدار متغیر استاتیکی را افزایش میدهد
@this_java