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
آیا ++a و a++ در جاوا با یکدیگر تفاوت دارند؟
اگر عملگر ++ بعد از متغییر بیاید، یک واحد اضافه شدن پس از اتمام عملیات مقداردهی انجام می شود (یعنی محاسبات بر اساس مقدار قبلی انجام می شود):
int a = 1;
int b = a++;// b=1
int c = a; // c=2
اما اگر عملگر ++ قبل از متغییر بیاید، ابتدا یک واحد به متغییر اضافه می شود و سپس محاسبات انجام می شود:
int a = 1;
int b = ++a;// b=2
int c = a; // c=2
@this_java
اگر عملگر ++ بعد از متغییر بیاید، یک واحد اضافه شدن پس از اتمام عملیات مقداردهی انجام می شود (یعنی محاسبات بر اساس مقدار قبلی انجام می شود):
int a = 1;
int b = a++;// b=1
int c = a; // c=2
اما اگر عملگر ++ قبل از متغییر بیاید، ابتدا یک واحد به متغییر اضافه می شود و سپس محاسبات انجام می شود:
int a = 1;
int b = ++a;// b=2
int c = a; // c=2
@this_java
تفاوت مابین field وProperty در چیست؟
Field: یک متغیر خصوصی در یک کلاس است ...که اغلب برای استفاده ی داخلی کلاس در نظر گرفته شده است
Property:متغیر های خصوصی که دارای ستر و گتر هستند و برای دستکاری از بیرون کلاس نیز درنظر گرفته شده اند
@this_java
Field: یک متغیر خصوصی در یک کلاس است ...که اغلب برای استفاده ی داخلی کلاس در نظر گرفته شده است
Property:متغیر های خصوصی که دارای ستر و گتر هستند و برای دستکاری از بیرون کلاس نیز درنظر گرفته شده اند
@this_java
یافتن یک کاراکتر مشخص از یک رشته
متد indexOf و lastIndexOf مکان کاراکتر مربوطه در رشته را برگشت میدهند ... همانطور که میدانید اولین عضو رشته در صفرمین خانه قرار میگیرد...برای بدست اوردن یک کاراکتر با داشتن مکان مربوط به ان (درواقع برعکس متد lastindexof)
باید از متدی به نام charAt در کلاس String بهره ببریم :
String this_java= "this_java";
char c = this_java.charAt(0);
System.out.println(c);
خروجی;
t
برای اطلاع از چگونگی نحوه ی کارکرد indexOf و lastIndexOf پست زیر را در کانال مطالعه کنید:
https://t.me/this_java/610
@this_java
متد indexOf و lastIndexOf مکان کاراکتر مربوطه در رشته را برگشت میدهند ... همانطور که میدانید اولین عضو رشته در صفرمین خانه قرار میگیرد...برای بدست اوردن یک کاراکتر با داشتن مکان مربوط به ان (درواقع برعکس متد lastindexof)
باید از متدی به نام charAt در کلاس String بهره ببریم :
String this_java= "this_java";
char c = this_java.charAt(0);
System.out.println(c);
خروجی;
t
برای اطلاع از چگونگی نحوه ی کارکرد indexOf و lastIndexOf پست زیر را در کانال مطالعه کنید:
https://t.me/this_java/610
@this_java
Telegram
Learn Java
یافتن مکان کاراکتر ها و زیر رشته ها
در بسیاری از برنامه جستجو برای یافتن یک کاراکتر یا مجموعه ای از کاراکتر ها در یک رشته ضروری است. برای مثال , برنامه نویس یک برنامه پردازشگر لغت ایجاد میکند و مایل است تا این برنامه از ویژگی جستجو در میان مستندات برخوردار…
در بسیاری از برنامه جستجو برای یافتن یک کاراکتر یا مجموعه ای از کاراکتر ها در یک رشته ضروری است. برای مثال , برنامه نویس یک برنامه پردازشگر لغت ایجاد میکند و مایل است تا این برنامه از ویژگی جستجو در میان مستندات برخوردار…
Hospital.zip
67 KB
سورس کد برنامه ی مدیریت بیمارستان با استفاده از فریمورک محبوب hibernate و دیتابیس Postgresql
@this_java
@this_java
spring book.pdf
2 MB
کتاب فارسی اموزش Spring از سایت تحلیل داده
@this_java
@this_java
دیتابیس های nosql
دیتابیس های nosql یا not only SQL دیتابیسهایی هستند که هر کدام برای مقصد و منظور خاص درست شدند ولی هیچکدام نمیتونن جایگزین دیتابیس های relational بشن، دلیلشم اینه که در همه business ها به دیتابیس هایی که ویژگی های دیتابیس های relational را دارند نیازه.
از Graph برای پیداکردن پترن های خاص مابین انتتی های متفاوت که واقعا یک دیتابیس relational نمیتونه براحتی انجام بده استفاده میشه.
مثلا شما نمیتونین مفهوم mutual friend هارو بهمین راحتی توی شبکه های اجتماعی با استفاده از یک دیتابیس relational پیاده سازی کنین. مثال این دیتابیس Neo4J
در مورد column database ها: این دیتابیس ها برای این خوب هستن که شما با مقدار بزرگی big amount of data سرو کار دارین و براتون عملکرد سیستمتان با performance بالا خیلی مهمه. مثال این دیتابیس Apache Cassandra
زمانی از key value دیتابیس ها استفاده میکنیم که تعداد زیادی small transaction دارین که میخواین با سرعت زیاد انجام بشه. مثلا خواندن تغییرات سنسورهای آب و هوا در یک منطقه و ذخیره و خوندن آن ها توی دیتابیس، IoT و اینها خیلی از این دیتابیس استفاده میکنند مثال این دیتابیس Redis
در مورد دیتابیس های داکیومنت document based به دیتابیس هایی گفته میشود که ما کاتالوگی از دیتا داریم و نگه داشتیم و برای مصرف خاص میخوایم استفاده کنیم
مثلا شما برای ذخیره اطلاعات آخرین تراکنش های یک حساب بانکی میتونین دیتاهارو توی یک آرشیو اطلاعاتی توسط دیتابیس های داکیومنت مثل mongodb نگه دارین
@this_java
دیتابیس های nosql یا not only SQL دیتابیسهایی هستند که هر کدام برای مقصد و منظور خاص درست شدند ولی هیچکدام نمیتونن جایگزین دیتابیس های relational بشن، دلیلشم اینه که در همه business ها به دیتابیس هایی که ویژگی های دیتابیس های relational را دارند نیازه.
از Graph برای پیداکردن پترن های خاص مابین انتتی های متفاوت که واقعا یک دیتابیس relational نمیتونه براحتی انجام بده استفاده میشه.
مثلا شما نمیتونین مفهوم mutual friend هارو بهمین راحتی توی شبکه های اجتماعی با استفاده از یک دیتابیس relational پیاده سازی کنین. مثال این دیتابیس Neo4J
در مورد column database ها: این دیتابیس ها برای این خوب هستن که شما با مقدار بزرگی big amount of data سرو کار دارین و براتون عملکرد سیستمتان با performance بالا خیلی مهمه. مثال این دیتابیس Apache Cassandra
زمانی از key value دیتابیس ها استفاده میکنیم که تعداد زیادی small transaction دارین که میخواین با سرعت زیاد انجام بشه. مثلا خواندن تغییرات سنسورهای آب و هوا در یک منطقه و ذخیره و خوندن آن ها توی دیتابیس، IoT و اینها خیلی از این دیتابیس استفاده میکنند مثال این دیتابیس Redis
در مورد دیتابیس های داکیومنت document based به دیتابیس هایی گفته میشود که ما کاتالوگی از دیتا داریم و نگه داشتیم و برای مصرف خاص میخوایم استفاده کنیم
مثلا شما برای ذخیره اطلاعات آخرین تراکنش های یک حساب بانکی میتونین دیتاهارو توی یک آرشیو اطلاعاتی توسط دیتابیس های داکیومنت مثل mongodb نگه دارین
@this_java
👍1
swing در مقابل AWT
درواقع دو مجموعه از کامپوننت های GUI در جاوا وجود دارد . قبل از اینکه swing در java SE 1.2 معرفی شود, GUI های جاوا با کامپوننت هایی از Abstract window Tolkit که به اختصار awt نامیده میشود در پکیج java.awt ایجاد میشدند. زمانیکه یک برنامه جاوا با awt gui در پلتفرم های مختلف جاوا اجرا میشد, ی gui برنامه در هر پلتفرم با ظاهری متفاوت به نمایش در می امدند.
کامپوننت های swing gui به شما این امکان را میدهند تا ظاهر متحد الشکلی برای برنامه خود در میان تمام پلتفرم ها و استفاده از آن را فراهم اورید . حتی برنامه میتواند در زمان اجرا ظاهر و عملکرد خود را بر حسب نیاز کاربر تغییر دهد.
@this_java
درواقع دو مجموعه از کامپوننت های GUI در جاوا وجود دارد . قبل از اینکه swing در java SE 1.2 معرفی شود, GUI های جاوا با کامپوننت هایی از Abstract window Tolkit که به اختصار awt نامیده میشود در پکیج java.awt ایجاد میشدند. زمانیکه یک برنامه جاوا با awt gui در پلتفرم های مختلف جاوا اجرا میشد, ی gui برنامه در هر پلتفرم با ظاهری متفاوت به نمایش در می امدند.
کامپوننت های swing gui به شما این امکان را میدهند تا ظاهر متحد الشکلی برای برنامه خود در میان تمام پلتفرم ها و استفاده از آن را فراهم اورید . حتی برنامه میتواند در زمان اجرا ظاهر و عملکرد خود را بر حسب نیاز کاربر تغییر دهد.
@this_java
lock-and-feel چیست؟
به ظاهر و روشی که کاربر با یک برنامه در تعامل قرار میگیرد,lock-and-feel برنامه گفته میشود
@this_java
به ظاهر و روشی که کاربر با یک برنامه در تعامل قرار میگیرد,lock-and-feel برنامه گفته میشود
@this_java
کامپوننت های سبک وزن در مقابل کامپوننت های سنگین وزن
اکثر کامپوننت های سویینگ واقعا به کامپوننت های GUI پشتیبانی شده توسط لایه های زیرین پلتفرم که برنامه بر روی ان اجرا میشود, بستگی ندارند. چنین کامپوننت های کامپوننت های سبک وزن یا lightweight شناخته میشوند. کامپوننت های AWT با پلتفرم محلی متصل میشوند و کامپوننت های سنگین وزن heavywheight را بوجود می اورند.. چرا که انها متکی به سیستم windowing پلتفرم محلی هستند تا عملکرد و ظاهر انهارا تعیین کند. تعدادی از کامپوننت های سویینگ از جمله کامپوننت های سنگین وزن هستند و همانند AWT کامپوننت های سنگین وزن سویینگ مستلزم تعامل مستقیم با سیستم windowing محلی هستند که ممکن است در ظاهر و عملکرد انها محدودیتی بوجود اورد.کامپوننت های سبک وزن به شما اجازه میدهند تا کنترل بیشتری بر روی ظاهر عملکرد انها داشته باشید
@this_java
اکثر کامپوننت های سویینگ واقعا به کامپوننت های GUI پشتیبانی شده توسط لایه های زیرین پلتفرم که برنامه بر روی ان اجرا میشود, بستگی ندارند. چنین کامپوننت های کامپوننت های سبک وزن یا lightweight شناخته میشوند. کامپوننت های AWT با پلتفرم محلی متصل میشوند و کامپوننت های سنگین وزن heavywheight را بوجود می اورند.. چرا که انها متکی به سیستم windowing پلتفرم محلی هستند تا عملکرد و ظاهر انهارا تعیین کند. تعدادی از کامپوننت های سویینگ از جمله کامپوننت های سنگین وزن هستند و همانند AWT کامپوننت های سنگین وزن سویینگ مستلزم تعامل مستقیم با سیستم windowing محلی هستند که ممکن است در ظاهر و عملکرد انها محدودیتی بوجود اورد.کامپوننت های سبک وزن به شما اجازه میدهند تا کنترل بیشتری بر روی ظاهر عملکرد انها داشته باشید
@this_java