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



@parsa8113
@bardiademon
Download Telegram
parsakavianpoor.rar
585 KB
اتصال به سرور و اجرای دستورات در ان

@this_java
Socket.rar
21.2 KB
سورس کد سوکت کلاینت با جاوا
کامپایلر ها و مفسر ها :

زبان های سطح بالا و کامپایلر ها
زبان اسمبلی باعث افزایش سرعت برنامه نویسی شد اما هنوز هم مستلزم دستورات فراوانی برا انجام یک عمل ساده بود. برای افزایش سرعت برنامه نویسی زبان های سطح بالا توسعه پیدا کردند که با استفاده از یک عبارت میتوانند وظایف و اعمال وسیع تری انجام دهند. برنامه های مترجم که وظیفه تبدیل زبان های سطح بالا به زبان ماشین را بر عهده میگیرند کامپایلر نامیده میشوند

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

@this_java
#سوال

کلاس های عقیم چه کلاس هایی هستند؟

کلاس هایی که نمیتوان از انها ارث بری کرد

چگونگی تعریف کلاس های عقیم دقیقا مثل کلاس های معمولی میباشد با این تفاوت که کلمه ی final قبل از کلمه ی کلیدی class می اید:


public final class Name {

}
💢تعریف Front-End و Back-End به زبان ساده💢
ـ
📘 وقتی که ما از Front-end صحبت می‌کنیم، در واقع در مورد قسمتی از وب صحبت می‌کنیم که برای شما قابل مشاهده است. در واقع Front-end ظاهر سایت و رابط کاربری سایت است. تمامی بخشی که شما در وبسایت‌های مختلف می‌بینید ترکیبی از HTML و CSS و JavaScript هستند. برای مثال تمامی سایت‌هایی که دارای منوها، فرم‌ها، نوشته‌ها، طراحی‌ها و برخی عناصر واکنشگرا است که همگی ترکیبی از سه زبان بالا است.طبیعی است که با این تعریف، حدس بزنیم که یک توسعه دهنده رابط کاربری و طراح وب باید بر سه زبان بالا تسلط داشته باشد.
📕 اما Back-end به طور معمول از سه بخش تشکیل شده. یک سرور، یک برنامه (application) و پایگاه داده(database) در یک سایت خرید کالا، اگر شما اقدام به خرید کنید، در مراحل مختلف در حال تعامل با فرانت اند یا رابط کاربری آن وبسایت هستید و اطلاعات خود را وارد می‌کنید. وقتی که شما اطلاعات خودتان را وارد می‌کنید و درخواست خرید می‌دهید، برنامه یا اپلیکیشن وظیفه ذخیره سازی این اطلاعات را بر روی پایگاه داده برعهده دارد. تمامی اطلاعات بر روی سرور ذخیره می‌شود و هرگاه که شما دوباره به وبسایت مورد نظرتان برگردید تا فرآیند خرید را تکمیل کنید یا خرید دیگری را انجام دهید، اطلاعات شما همانجا خواهند بود.

@this_java
کدام زبان برای چه کاری مناسب است؟
IoT

اینترنت چیزی بیش ازشبکه ای از کامپیوتر ها نیست, در واقع یک (Internet of things) است. منظور از thnigs در اینجا هر شی با یک ادرس ip و قابلیت ارسال خودکار داده بر روی شبکه است , برای مثال یک خودرو با قابلیت پرداخت خودکار عوارض یک دستگاه نظارت قلب در بیمارستان, برنامه های موبایل که مسیر و موقعیت شما را ردگیری میکنند , دما سنج های هوشمند که اقدام به تنظیم درجه حرارت اتاق بر پایه وضعیت جوی و فعالیت در خانه میکنند.
@this_java
اسامی کلاس و شناسه ها در جاوا:

بطور قراردادی اسامی همه کلاس ها در جاوا با یک حرف بزرگ اغاز شده و حرف اول هر کلمه در ان نام نیز با حرف بزرگ اغار میگردد
نام یک کلاس جاوا بعنوان شناسه شناخته میشود و شامل مجموعه ای از کاراکتر های حروف, اعداد, نماد دلار و خط زیرین (_) است
شناسه ها نمیتوانند با یک رقم اغاز شده و حاوی فاصله باشند. برای مثال شناسه های زیر همگی معتبر هستند:
Welcome1, m_inputField1,button7,_value
اما اسامی زیر شناسه معتبر نمیباشند چرا که حاوی رقم و فاصله هستند:

7button, input field

معمولا , شناسه ای که با یک حرف بزرگ شروع نمیشود نشاندهنده ی نام یک کلاس نمیباشد , جاوا به بزرگ یا کوچک بودن حروف حساس میباشد (case-senstive) به این معنی که حروف کوچک و بزرگ یکسان ارزیابی نمیشوند و به همین علت دو شناسه a1 و A1 بعنوان یک شناسه یکسان تفسیر نمیشوند (با اینکه هر دو معتبر هستند)

@this_java
white space چیست؟

برنامه نویسان برای اینکه کد خود را خوانا تر کنند از خطوط خالی , کاراکتر های فاصله (space) و تب (tab) استفاده میکنند .
به مجموعه این کاراکتر ها white space میگویند.
معمولا این کاراکتر ها توسط کامپایلر نادیده گرفته میشوند.

@this_java
خواندن و نوشتن متغیر های یک کلاس بدون setter and getter :

همونطوری که میدونید فیلد هایی با سطح دسترسی private رو بدون setter و getter نمیشه خوند یا نوشت..
اما با استفاده از reflection میشه اینکارو بدون ایجاد setterو getter انجام داد

ابتدا دو کلاس ایجاد کنید و نام انهارا به ترتیب A و B قرار دهید.. در کلاس A یک متغیر private قرار داده و کلاس B رو به شکل زیر بنویسید:

class A{
private int i = 220;
}

class B {
public static void main(String[] args) {
A name = new A();
Field f = A.class.getDeclaredField("i"); // variable name

f.setAccessible(true); // Abracadabra
System.out.println(f.get(name));

}
}
OUTPUT:
————————-> 220;

برای ست کردن هم به این روش عمل کنید:

class A{
private int i = 220;
}

class B {
public static void main(String[] args) {
A name = new A();
Field f2 = A.class.getDeclaredField("i");
f2.setAccessible(true);
f2.set(d, 20);
System.out.println(f2.get(name));

}
}
OUTPUT:
————————-> 20;

موفق باشید
@this_java
دوستان بالاخره Jdk 11 اومد

https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html

از لینک بالا میتونید اونو دانلود کنید
NetBeans 9 هم منتشر شد

https://netbeans.apache.org/download/nb90/nb90.html

از لینک بالا میتونید دانلودش کنید
نت بینز ده رو میتونید ازین لینک دانلود کنید :
https://netbeans.apache.org/download/nb100/nb100.html
Java_Dm.jar
19.3 KB
اینترنت دانلود منیجر ساده
Java_Dm.zip
48.7 KB
سورس کد اینترنت دانلود منیجر ساده به زبان جاوا
@this_java
Design Pattern (الگوی طراحی) چیست؟

اگر با مفهوم Design Pattern (الگوی طراحی) آشنایی داشته باشید، به طور حتم می‌دانید که دیزاین پترن‌ها به مجموعه‌‌ای از راه‌کارها در صنعت توسعهٔ نرم‌افزار گفته می‌شوند که می‌توانید از آن‌ها در کدنویسی پروژه‌ها، اعم از کوچک و بزرگ، استفاده نمایید و استفاده از این الگوها که توسط متخصصان باتجربه در زمینهٔ شییٔ‌گرایی ابداع شده‌اند کمک می‌کنند تا سورس‌کدی انعطاف‌پذیرتر و تغییرپذیرتر داشته باشیم. چنانچه کماکان الگوهای طراحی را جزو چرخهٔ توسعه به حساب نمی‌آورید، در ادامه قصد داریم دلایلی را ذکر کنیم مبنی بر اینکه که چرا باید این سولوشن‌های تست‌‌شده را در قالب یکسری به اصطلاح Best Practice در حین توسعهٔ نرم‌افزار به کار گیرید.
اولین کسی باشید که به این سؤال پاسخ می‌دهید
برنامه نویسی موازی با cuda در vs code

اگر با مفهوم Design Pattern (الگوی طراحی) آشنایی داشته باشید، به طور حتم می‌دانید که دیزاین پترن‌ها به مجموعه‌‌ای از راه‌کارها در صنعت توسعهٔ نرم‌افزار گفته می‌شوند که می‌توانید از آن‌ها در کدنویسی پروژه‌ها، اعم از کوچک و بزرگ، استفاده نمایید و استفاده از این الگوها که توسط متخصصان باتجربه در زمینهٔ شییٔ‌گرایی ابداع شده‌اند کمک می‌کنند تا سورس‌کدی انعطاف‌پذیرتر و تغییرپذیرتر داشته باشیم.

چنانچه کماکان الگوهای طراحی را جزو چرخهٔ توسعه به حساب نمی‌آورید، در ادامه قصد داریم دلایلی را ذکر کنیم مبنی بر اینکه که چرا باید این سولوشن‌های تست‌‌شده را در قالب یکسری به اصطلاح Best Practice در حین توسعهٔ نرم‌افزار به کار گیرید.

عدم نیاز به اختراع مجدد چرخ
یک اصل ثابت در توسعهٔ نرم‌افزار وجود دارد و آن هم چیزی نیست جز اِعمال تغییرات در صورت نیاز. تغییرات هنگامی رخ می‌دهند که نیازمندی‌ها عوض می‌شوند، سیستم‌ها رشد می‌کنند، ویژگی‌های جدید اضافه می‌شوند، کارایی باید بهبود یابد و موارد دیگری از این دست اما سؤال اینجا است که چگونه می‌توان نرم‌افزاری تولید کرد به طوری که تأثیر این تغییرات در آن حداقلی باشد؟

نیاز به توضیح نیست که یکی از سخت‌ترین جنبه‌های توسعهٔ نرم‌افزاری چیزی نیست جز درک کدهای موجود، که احتمالاً توسط دولوپرهای دیگری نوشته شده‌اند، و اصلاح این کدها به نحوی که نقص‌های جدید یا نتایج ناخواسته بروز نکنند. با این توضیح، در پاسخ به سؤال فوق باید گفت که در واقع معجزه‌ای در کار نیست ولی تکنیک‌هایی وجود دارند که می‌توان از آن‌ها در برنامه‌نویسی شییٔ‌گرا استفاده کرد؛ تکنیک‌هایی که بر اثر تجربهٔ برنامه‌نویسان حرفه‌ای در شرایط سخت ابداع شده‌اند و برای استفادهٔ عموم به بازار عرضه شده‌اند که این تکنیک‌ها به Design Patterns معروف هستند و که نمایانگر سولوشن‌هایی هستند که برای حل مشکلات رایج در برنامه‌نویسی می‌توان از آن‌ها استفاده نمود.

آنچه در این خصوص لازم به یادآوری است اینکه الگوهای طراحی به عنوان بخشی از لایبرری‌ها یا ماژول‌های توسعهٔ نرم‌افزار نیستند بلکه راهبردهایی مرتبط با طراحی هستند که می‌توانند در هستهٔ پروژه‌های‌تان گنجانده شده و باعث راحتی در ساخت سیستم‌های شییٔ‌گرا با قابلیت انعطاف و نگهداری بالا شده و از همین روی وقتی می‌توان از تجربهٔ بهترین طراحان شییٔ‌گرا استفاده کرد، چرا باید اقدام به اختراع مجدد چرخ نماییم؟

مهارت‌های مربوط به شییٔ‌گرایی خود را بهبود دهید
نیاز به توضیح نیست که سنگ بنای برنامه‌نویسی شییٔ‌گرا چیزی نیست جز Abstraction ،Inheritance ،Polymorphism و Encapsulation که به ترتیب می‌توان معادل‌های «چندریختی»، «وراثت»، «انتزاع» و «کپسوله‌سازی» برای این اصطلاحات در نظر گرفت. با اینکه چنین چیزی کاملاً صحت دارد، اما طراحی سیستم‌های شییٔ‌گرا به همین جا ختم نمی‌شود زیرا همین قواعد پایه‌ای می‌توانند به سرعت باعث ایجاد مشکلاتی مثل تکرار کد، طراحی ضعیف و استفادهٔ بیش از حد از کلاس‌های مختلف شود.

به طور کلی، در مجموعه الگوهای طراحی با گروهی از قواعد دیگر آشنا خواهید شد که بهتر از پایه‌های اولیهٔ شییٔ‌گرایی به کار خواهند آمد و با شناخت این اصول و چگونگی ترکیب آن‌ها در الگوهای طراحی، به طراح و معمار بهتری در زمینه شییٔ‌گرایی بدل خواهید شد.

الگوها را در لایبرری‌ها و زبان‌های مختلف تشخیص دهید
دیزاین پترن‌ها راه‌حل‌های عمومی برای حل مشکلات رایج در برنامه‌نویسی شییٔ‌گرا (OOP) هستند به این معنا که راه‌حل‌هایی هستند برای حل چالش‌های طراحی نرم‌افزار و لازم به یادآوری است که شما نمی‌توانید یک نمونه الگوی طراحی را برای افزودن به پروژهٔ خود دانلود و نصب نمایید بلکه باید الگوی طراحی را در داخل سیستم‌تان پیاده‌سازی کنید!
برنامه‌نویسان غالباً با الگوهایی در لایبرری‌ها، پکیج‌ها و ماژول‌هایی که استفاده می‌کنند مواجه می‌شوند که از آن جمله می‌توان به پکیج I/O در جاوا اشاره کرد. زبان برنامه‌نویسی جاوا از الگوی Decorator استفاده می‌کند که اجازه می‌دهد تا یک آبجکت ورودی/خروجی از فایل اصلی گرفته و سپس آن را با امکانات جدیدی طبق نیاز خود ترکیب کنید که این روش بسیار خوبی برای طراحی یک سیستم ورودی/خروجی فایل است و اگر از قبل با الگوهای طراحی و به طور خاص الگوی دکوراتور آشنا باشید، به سادگی متوجه چگونگی طراحی این آبجکت و روش کار آن خواهید شد. در یک کلام، به کار بردن این دیزاین پترن باعث می‌شود سریع‌تر طراحی سیستم را درک کنید.

از زبانی مشترک با دیگر دولوپرها استفاده کنید
همان‌طور که در مورد بالا بیان شد، یکی از مزایای یادگیری دیزاین پترن‌ها آشنایی با نوعی از معماری نرم‌افزار است که میان دولوپرهای حرفه‌ای سراسر دنیا عمومیت دارد به طوری که اگر در تیم نرم‌افزاری خود قصد سرعت بخشیدن به کارتان را دارید، از طریق این الگوها نیروی جدیدی برای برقراری ارتباط دربارهٔ منظور خود در طرح‌های‌تان با یکدیگر به دست خواهید آورد. به عنوان مثال، فرض کنید هم‌گروهی‌تان می‌خواهد قسمت جدیدی از طراحی‌اش را برایتان شرح دهد. دو طرز بیان زیر برای این منظور امکان‌پذیر است:

من این کلاس برودکست رو ساختم که کارش پیدا کردن تمامی اشیائی هست که به آن گوش می‌دهند و هر وقت دیتای جدیدی برسه، اون پیام رو به تمامی گیرنده‌ها می‌فرسته. جالب اینجاست که گیرنده‌ها می‌تونن در هر زمانی به برودکست متصل شده یا خودشون رو حذف کنن و این روش کاملاً پویا و به اصطلاح Loosely Coupled هستش.

یا

من این کلاس برودکست را بر پایهٔ الگوی Observer ساختم.

در روش اول، باید مدت زیادی فکر کنید تا دقیقاً متوجه شوید که کلاس برودکست چه کاری انجام می‌دهد اما در روش دوم، طرز کار کلاس را از قبل می‌دانید و این قدرت به‌کارگیری فهرست لغات مشترک برای الگوهای طراحی است. اگر به زبان الگوها ارتباط برقرار کنید، توسعه‌دهندگان دیگر فوراً و با جزئیات بیشتر متوجه طرحی که قصد بیان آن را دارید خواهند شد.

با اینکه در ترکیب و ساخت سیستم‌های شییٔ‌گرا به دست خودتان چیزهای زیادی برای یادگیری وجود دارد، اما می‌توانید از مزایای شناخت و بینشی که از طریق مطالعه و استفاده از دیزاین پترن‌ها به دست می‌آید، استفاده نمایید. همان‌طور که پیش از این گفتیم، الگوهای طراحی به یک باره ابداع نشده‌اند بلکه در نتیجهٔ کار سخت و تجربهٔ عمیق از طریق ساخت تعداد زیادی سیستم مختلف به دست آمده‌اند. در حین فرایند یادگیری الگوهای طراحی، شما به دیدگاه یک معمار باتجربه نرم‌افزاری دست یابید و در عین حال به سمت ساخت نرم‌افزارهای بهتر و ماندگارتر پیش خواهید رفت.
منبع :سکان اکادمی

@this_java
الگوی Factory

همونطور که تا حدودی از اسم این الگو پیداست، با ساختن یه به اصطلاح کارخونه، این امکان رو فراهم میکنیم که زمان تولید شئ، بجای اینکه خودمون تولیدش کنیم، به اون کارخونه بگیم چی میخوایم (ویژگی های شئ مورد نظر رو بهش میدیم) و اون کارخونه خودش شئ رو میسازه و میده بهمون.

مزیت های این الگو عبارتند از کاهش خطوط کد، سهولت توی تولید اشیاء، عدم نیاز به تغییر زیاد در صورت تغییر کلاس (کارخونه خودش تغییر لازمه رو اعمال میکنه) و ...

خب بریم مثالش رو ببینیم:

فرض کنیم یه اینترفیس وسیله ی نقلیه داریم:

public interface Vehicle { void showVehicleType();}

حالا دو تا کلاس دیگه داریم، یکی ماشین و یکی دیگه موتور که هردوتاشون نوعی وسیله ی نقلیه هستن:

public class Car implements Vehicle {
@Override
public void showVehicleType() {
System.out.println("Vehicle: Car");
}
}

public class MotorCycle implements Vehicle {
@Override
public void showVehicleType() {
System.out.println("Vehicle: MotorCycle"); }
}

برای پیاده سازی الگوی Factory، یه کلاس به اسم VehicleFactory میسازیم:

public class VehicleFactory {
public Vehicle createVehicle(String vehicleType){ if(vehicleType == null){
return null;
}
else if(vehicleType.equals("Car")){
return new Car();
}
else if(vehicleType.equals("MotorCycle")){
return new MotorCycle();
}
return null; }
}


و حالا فقط کافیه زمانی که میخوایم یه ماشین یا موتور بسازیم به شکل زیر عملی کنیم:

VehicleFactory vehicleFactory = new VehicleFactory();Vehicle car = vehicleFactory.createVehicle("Car");car.showVehicleType();

خروجی: Vehicle: Car
Vehicle motorCycle = vehicleFactory.createVehicle("MotorCycle"); motorCycle.showVehicleType();
:خروجی Vehicle: MotorCycle

به همین راحتی! ما توی این مثال از رشته برای تعیین نوع وسیله نقلیه استفاده کردیم. مشخصه که هر رشته ای بجز Car یا MotorCycle استفاده کنیم، null بر میگرده.

طبیعتاً میشه شیوه های دیگه ای هم برای نشان دادن نوع وسیله نقلیه استفاده کرد، برای مثل استفاده از رشته ی استاتیک:

public class VehicleFactory { public static final String TYPE_CAR = "Car"; public static final String TYPE_MOTORCYCLE = "MotorCycle"; public Vehicle createVehicle(String vehicleType){ if(vehicleType == null){ return null; } else if(vehicleType.equals(TYPE_CAR)){ return new Car(); } else if(vehicleType.equals(TYPE_MOTORCYCLE)){ return new MotorCycle(); } return null; } }

و برای تعریف شئ به شکل زیر عمل کنیم:

Vehicle motorCycle = vehicleFactory.createVehicle(VehicleFactory.TYPE_MOTORCYCLE);

یه روش دیگه استفاده از enum برای تعیین نوع کلاس درخواستی هست:

public class VehicleFactory {
public enum VehicleTypeEnum{
CAR, MOTOR_CYCLE
}
public Vehicle createVehicle(VehicleTypeEnum vehicleTypeEnum){
if(vehicleTypeEnum== null){ return null;
}
else if(vehicleTypeEnum.equals(VehicleTypeEnum.CAR)){
return new Car();
} else if(vehicleTypeEnum.equals(VehicleTypeEnum.MOTOR_CYCLE)){
return new MotorCycle(); } return null; }}

و زمان ساخت شئ به شکل زیر عمل کنیم:

Vehicle car = vehicleFactory.createVehicle(VehicleFactory.VehicleTypeEnum.CAR);

البته برای اینکه اصل open/close از اصول پنجگانه solid رو هم رعایت کرده باشیم میتونیم کلاس کارخونمون رو به شکل زیر پیاده سازی کنیم:

public class VehicleFactory {
public Vehicle createCar(){
return new Car();
}
public Vehicle createMotorCycle(){
return new MotorCycle();
}
}

و طبیعتاً برای ساخت شئ به شکل زیر عمل میکنیم:

Vehicle carObject = vehicleFactory.createCar();Vehicle motorCycleObject = vehicleFactory.createMotorCycle();

با کلیت این الگو آشنا شدیم. مثل هر الگوی دیگه ای با توجه به زمان، نوع و دلیل استفاده از این الگو میتونیم تغییرات لازمه ی خودمون را پیاده سازی کنیم. برای مثال تابع یا توابع سازنده ی اشیاء داخل کارخونه رو استاتیک تعریف کنیم که نیازی به تعریف شئ از کلاس کارخونه نداشته باشیم، یا در صورت نیاز از الگوی سینگلتون برای اشیاء ساخته شده استفاده کنیم، یا زمان ساخت اشیاء پارامترهایی هم پاس بدیم و با توجه به اون پارامترها تغییراتی روی شئ انجام بدیم، یا حتی بریم سراغ ارثبری ها چند سطحی و ...

@this_java
👍1