کامپایلر ها و مفسر ها :
زبان های سطح بالا و کامپایلر ها
زبان اسمبلی باعث افزایش سرعت برنامه نویسی شد اما هنوز هم مستلزم دستورات فراوانی برا انجام یک عمل ساده بود. برای افزایش سرعت برنامه نویسی زبان های سطح بالا توسعه پیدا کردند که با استفاده از یک عبارت میتوانند وظایف و اعمال وسیع تری انجام دهند. برنامه های مترجم که وظیفه تبدیل زبان های سطح بالا به زبان ماشین را بر عهده میگیرند کامپایلر نامیده میشوند
مفسر ها
فرایند کامپایل یک برنامه زبان سطح بالا به زبان ماشین میتواند زمان قابل توجهی از کامپیوتر را بگیرد.برنامه های مفسر (interpreter) میتوانند مستقیما برنامه های نوشته شده در زبان های سطح بالا را بدون نیاز به کامپایل به زبان ماشین تبدیل کنند. اگر چه اهسته تر عمل میکنند.پس از اینکه برنامه کاملا توسعه یافت . نسخه ی کامپایل ان تولید میشود تا اجرای برنامه سریع تر صورت بگیرد.
@this_java
زبان های سطح بالا و کامپایلر ها
زبان اسمبلی باعث افزایش سرعت برنامه نویسی شد اما هنوز هم مستلزم دستورات فراوانی برا انجام یک عمل ساده بود. برای افزایش سرعت برنامه نویسی زبان های سطح بالا توسعه پیدا کردند که با استفاده از یک عبارت میتوانند وظایف و اعمال وسیع تری انجام دهند. برنامه های مترجم که وظیفه تبدیل زبان های سطح بالا به زبان ماشین را بر عهده میگیرند کامپایلر نامیده میشوند
مفسر ها
فرایند کامپایل یک برنامه زبان سطح بالا به زبان ماشین میتواند زمان قابل توجهی از کامپیوتر را بگیرد.برنامه های مفسر (interpreter) میتوانند مستقیما برنامه های نوشته شده در زبان های سطح بالا را بدون نیاز به کامپایل به زبان ماشین تبدیل کنند. اگر چه اهسته تر عمل میکنند.پس از اینکه برنامه کاملا توسعه یافت . نسخه ی کامپایل ان تولید میشود تا اجرای برنامه سریع تر صورت بگیرد.
@this_java
#سوال
کلاس های عقیم چه کلاس هایی هستند؟
کلاس هایی که نمیتوان از انها ارث بری کرد
چگونگی تعریف کلاس های عقیم دقیقا مثل کلاس های معمولی میباشد با این تفاوت که کلمه ی final قبل از کلمه ی کلیدی class می اید:
public final class Name {
}
کلاس های عقیم چه کلاس هایی هستند؟
کلاس هایی که نمیتوان از انها ارث بری کرد
چگونگی تعریف کلاس های عقیم دقیقا مثل کلاس های معمولی میباشد با این تفاوت که کلمه ی final قبل از کلمه ی کلیدی class می اید:
public final class Name {
}
💢تعریف Front-End و Back-End به زبان ساده💢
ـ➖➖➖➖
📘 وقتی که ما از Front-end صحبت میکنیم، در واقع در مورد قسمتی از وب صحبت میکنیم که برای شما قابل مشاهده است. در واقع Front-end ظاهر سایت و رابط کاربری سایت است. تمامی بخشی که شما در وبسایتهای مختلف میبینید ترکیبی از HTML و CSS و JavaScript هستند. برای مثال تمامی سایتهایی که دارای منوها، فرمها، نوشتهها، طراحیها و برخی عناصر واکنشگرا است که همگی ترکیبی از سه زبان بالا است.طبیعی است که با این تعریف، حدس بزنیم که یک توسعه دهنده رابط کاربری و طراح وب باید بر سه زبان بالا تسلط داشته باشد.
📕 اما Back-end به طور معمول از سه بخش تشکیل شده. یک سرور، یک برنامه (application) و پایگاه داده(database) در یک سایت خرید کالا، اگر شما اقدام به خرید کنید، در مراحل مختلف در حال تعامل با فرانت اند یا رابط کاربری آن وبسایت هستید و اطلاعات خود را وارد میکنید. وقتی که شما اطلاعات خودتان را وارد میکنید و درخواست خرید میدهید، برنامه یا اپلیکیشن وظیفه ذخیره سازی این اطلاعات را بر روی پایگاه داده برعهده دارد. تمامی اطلاعات بر روی سرور ذخیره میشود و هرگاه که شما دوباره به وبسایت مورد نظرتان برگردید تا فرآیند خرید را تکمیل کنید یا خرید دیگری را انجام دهید، اطلاعات شما همانجا خواهند بود.
@this_java
ـ➖➖➖➖
📘 وقتی که ما از Front-end صحبت میکنیم، در واقع در مورد قسمتی از وب صحبت میکنیم که برای شما قابل مشاهده است. در واقع Front-end ظاهر سایت و رابط کاربری سایت است. تمامی بخشی که شما در وبسایتهای مختلف میبینید ترکیبی از HTML و CSS و JavaScript هستند. برای مثال تمامی سایتهایی که دارای منوها، فرمها، نوشتهها، طراحیها و برخی عناصر واکنشگرا است که همگی ترکیبی از سه زبان بالا است.طبیعی است که با این تعریف، حدس بزنیم که یک توسعه دهنده رابط کاربری و طراح وب باید بر سه زبان بالا تسلط داشته باشد.
📕 اما Back-end به طور معمول از سه بخش تشکیل شده. یک سرور، یک برنامه (application) و پایگاه داده(database) در یک سایت خرید کالا، اگر شما اقدام به خرید کنید، در مراحل مختلف در حال تعامل با فرانت اند یا رابط کاربری آن وبسایت هستید و اطلاعات خود را وارد میکنید. وقتی که شما اطلاعات خودتان را وارد میکنید و درخواست خرید میدهید، برنامه یا اپلیکیشن وظیفه ذخیره سازی این اطلاعات را بر روی پایگاه داده برعهده دارد. تمامی اطلاعات بر روی سرور ذخیره میشود و هرگاه که شما دوباره به وبسایت مورد نظرتان برگردید تا فرآیند خرید را تکمیل کنید یا خرید دیگری را انجام دهید، اطلاعات شما همانجا خواهند بود.
@this_java
ملزوماتی که یک برنامه نویس جاوا باید بداند:
http://javatime.blog.ir/category/شی-گرایی/
http://javatime.blog.ir/category/کد-تمیز/
http://javatime.blog.ir/tag/پلی%20مورفیسم%20در%20جاوا
http://javatime.blog.ir/tag/کلاس%20استاتیک%20در%20جاوا
http://javatime.blog.ir/tag/constructor%20overloading
http://javatime.blog.ir/tag/abstraction%20در%20شی%20گرایی
http://javatime.blog.ir/tag/قوانین%20نامگذاری%20در%20برنامه%20نویسی
http://javatime.blog.ir/tag/انتزاع%20در%20شی%20گرایی
http://javatime.blog.ir/tag/کپسوله%20سازی%20در%20شی%20گرایی
http://javatime.blog.ir/tag/مثال%20Abstraction
http://javatime.blog.ir/tag/تجرید%20در%20شی%20گرایی
@this_java
http://javatime.blog.ir/category/شی-گرایی/
http://javatime.blog.ir/category/کد-تمیز/
http://javatime.blog.ir/tag/پلی%20مورفیسم%20در%20جاوا
http://javatime.blog.ir/tag/کلاس%20استاتیک%20در%20جاوا
http://javatime.blog.ir/tag/constructor%20overloading
http://javatime.blog.ir/tag/abstraction%20در%20شی%20گرایی
http://javatime.blog.ir/tag/قوانین%20نامگذاری%20در%20برنامه%20نویسی
http://javatime.blog.ir/tag/انتزاع%20در%20شی%20گرایی
http://javatime.blog.ir/tag/کپسوله%20سازی%20در%20شی%20گرایی
http://javatime.blog.ir/tag/مثال%20Abstraction
http://javatime.blog.ir/tag/تجرید%20در%20شی%20گرایی
@this_java
javatime.blog.ir
شی گرایی :: جاوا بیاموزیم
۸ مطلب با موضوع «شی گرایی» ثبت شده است - محلی برای یادگیری جاوا
IoT
اینترنت چیزی بیش ازشبکه ای از کامپیوتر ها نیست, در واقع یک (Internet of things) است. منظور از thnigs در اینجا هر شی با یک ادرس ip و قابلیت ارسال خودکار داده بر روی شبکه است , برای مثال یک خودرو با قابلیت پرداخت خودکار عوارض یک دستگاه نظارت قلب در بیمارستان, برنامه های موبایل که مسیر و موقعیت شما را ردگیری میکنند , دما سنج های هوشمند که اقدام به تنظیم درجه حرارت اتاق بر پایه وضعیت جوی و فعالیت در خانه میکنند.
@this_java
اینترنت چیزی بیش ازشبکه ای از کامپیوتر ها نیست, در واقع یک (Internet of things) است. منظور از thnigs در اینجا هر شی با یک ادرس ip و قابلیت ارسال خودکار داده بر روی شبکه است , برای مثال یک خودرو با قابلیت پرداخت خودکار عوارض یک دستگاه نظارت قلب در بیمارستان, برنامه های موبایل که مسیر و موقعیت شما را ردگیری میکنند , دما سنج های هوشمند که اقدام به تنظیم درجه حرارت اتاق بر پایه وضعیت جوی و فعالیت در خانه میکنند.
@this_java
اسامی کلاس و شناسه ها در جاوا:
بطور قراردادی اسامی همه کلاس ها در جاوا با یک حرف بزرگ اغاز شده و حرف اول هر کلمه در ان نام نیز با حرف بزرگ اغار میگردد
نام یک کلاس جاوا بعنوان شناسه شناخته میشود و شامل مجموعه ای از کاراکتر های حروف, اعداد, نماد دلار و خط زیرین (_) است
شناسه ها نمیتوانند با یک رقم اغاز شده و حاوی فاصله باشند. برای مثال شناسه های زیر همگی معتبر هستند:
@this_java
بطور قراردادی اسامی همه کلاس ها در جاوا با یک حرف بزرگ اغاز شده و حرف اول هر کلمه در ان نام نیز با حرف بزرگ اغار میگردد
نام یک کلاس جاوا بعنوان شناسه شناخته میشود و شامل مجموعه ای از کاراکتر های حروف, اعداد, نماد دلار و خط زیرین (_) است
شناسه ها نمیتوانند با یک رقم اغاز شده و حاوی فاصله باشند. برای مثال شناسه های زیر همگی معتبر هستند:
Welcome1, m_inputField1,button7,_valueاما اسامی زیر شناسه معتبر نمیباشند چرا که حاوی رقم و فاصله هستند:
7button, input fieldمعمولا , شناسه ای که با یک حرف بزرگ شروع نمیشود نشاندهنده ی نام یک کلاس نمیباشد , جاوا به بزرگ یا کوچک بودن حروف حساس میباشد (case-senstive) به این معنی که حروف کوچک و بزرگ یکسان ارزیابی نمیشوند و به همین علت دو شناسه a1 و A1 بعنوان یک شناسه یکسان تفسیر نمیشوند (با اینکه هر دو معتبر هستند)
@this_java
white space چیست؟
برنامه نویسان برای اینکه کد خود را خوانا تر کنند از خطوط خالی , کاراکتر های فاصله (space) و تب (tab) استفاده میکنند .
به مجموعه این کاراکتر ها white space میگویند.
معمولا این کاراکتر ها توسط کامپایلر نادیده گرفته میشوند.
@this_java
برنامه نویسان برای اینکه کد خود را خوانا تر کنند از خطوط خالی , کاراکتر های فاصله (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
همونطوری که میدونید فیلد هایی با سطح دسترسی 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
از لینک بالا میتونید اونو دانلود کنید
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/nb90/nb90.html
از لینک بالا میتونید دانلودش کنید
نت بینز ده رو میتونید ازین لینک دانلود کنید :
https://netbeans.apache.org/download/nb100/nb100.html
https://netbeans.apache.org/download/nb100/nb100.html
Java_Dm.zip
48.7 KB
سورس کد اینترنت دانلود منیجر ساده به زبان جاوا
@this_java
@this_java
Design Pattern (الگوی طراحی) چیست؟
اگر با مفهوم Design Pattern (الگوی طراحی) آشنایی داشته باشید، به طور حتم میدانید که دیزاین پترنها به مجموعهای از راهکارها در صنعت توسعهٔ نرمافزار گفته میشوند که میتوانید از آنها در کدنویسی پروژهها، اعم از کوچک و بزرگ، استفاده نمایید و استفاده از این الگوها که توسط متخصصان باتجربه در زمینهٔ شییٔگرایی ابداع شدهاند کمک میکنند تا سورسکدی انعطافپذیرتر و تغییرپذیرتر داشته باشیم. چنانچه کماکان الگوهای طراحی را جزو چرخهٔ توسعه به حساب نمیآورید، در ادامه قصد داریم دلایلی را ذکر کنیم مبنی بر اینکه که چرا باید این سولوشنهای تستشده را در قالب یکسری به اصطلاح Best Practice در حین توسعهٔ نرمافزار به کار گیرید.
اولین کسی باشید که به این سؤال پاسخ میدهید
برنامه نویسی موازی با cuda در vs code
اگر با مفهوم Design Pattern (الگوی طراحی) آشنایی داشته باشید، به طور حتم میدانید که دیزاین پترنها به مجموعهای از راهکارها در صنعت توسعهٔ نرمافزار گفته میشوند که میتوانید از آنها در کدنویسی پروژهها، اعم از کوچک و بزرگ، استفاده نمایید و استفاده از این الگوها که توسط متخصصان باتجربه در زمینهٔ شییٔگرایی ابداع شدهاند کمک میکنند تا سورسکدی انعطافپذیرتر و تغییرپذیرتر داشته باشیم.
چنانچه کماکان الگوهای طراحی را جزو چرخهٔ توسعه به حساب نمیآورید، در ادامه قصد داریم دلایلی را ذکر کنیم مبنی بر اینکه که چرا باید این سولوشنهای تستشده را در قالب یکسری به اصطلاح Best Practice در حین توسعهٔ نرمافزار به کار گیرید.
عدم نیاز به اختراع مجدد چرخ
یک اصل ثابت در توسعهٔ نرمافزار وجود دارد و آن هم چیزی نیست جز اِعمال تغییرات در صورت نیاز. تغییرات هنگامی رخ میدهند که نیازمندیها عوض میشوند، سیستمها رشد میکنند، ویژگیهای جدید اضافه میشوند، کارایی باید بهبود یابد و موارد دیگری از این دست اما سؤال اینجا است که چگونه میتوان نرمافزاری تولید کرد به طوری که تأثیر این تغییرات در آن حداقلی باشد؟
نیاز به توضیح نیست که یکی از سختترین جنبههای توسعهٔ نرمافزاری چیزی نیست جز درک کدهای موجود، که احتمالاً توسط دولوپرهای دیگری نوشته شدهاند، و اصلاح این کدها به نحوی که نقصهای جدید یا نتایج ناخواسته بروز نکنند. با این توضیح، در پاسخ به سؤال فوق باید گفت که در واقع معجزهای در کار نیست ولی تکنیکهایی وجود دارند که میتوان از آنها در برنامهنویسی شییٔگرا استفاده کرد؛ تکنیکهایی که بر اثر تجربهٔ برنامهنویسان حرفهای در شرایط سخت ابداع شدهاند و برای استفادهٔ عموم به بازار عرضه شدهاند که این تکنیکها به Design Patterns معروف هستند و که نمایانگر سولوشنهایی هستند که برای حل مشکلات رایج در برنامهنویسی میتوان از آنها استفاده نمود.
آنچه در این خصوص لازم به یادآوری است اینکه الگوهای طراحی به عنوان بخشی از لایبرریها یا ماژولهای توسعهٔ نرمافزار نیستند بلکه راهبردهایی مرتبط با طراحی هستند که میتوانند در هستهٔ پروژههایتان گنجانده شده و باعث راحتی در ساخت سیستمهای شییٔگرا با قابلیت انعطاف و نگهداری بالا شده و از همین روی وقتی میتوان از تجربهٔ بهترین طراحان شییٔگرا استفاده کرد، چرا باید اقدام به اختراع مجدد چرخ نماییم؟
مهارتهای مربوط به شییٔگرایی خود را بهبود دهید
نیاز به توضیح نیست که سنگ بنای برنامهنویسی شییٔگرا چیزی نیست جز Abstraction ،Inheritance ،Polymorphism و Encapsulation که به ترتیب میتوان معادلهای «چندریختی»، «وراثت»، «انتزاع» و «کپسولهسازی» برای این اصطلاحات در نظر گرفت. با اینکه چنین چیزی کاملاً صحت دارد، اما طراحی سیستمهای شییٔگرا به همین جا ختم نمیشود زیرا همین قواعد پایهای میتوانند به سرعت باعث ایجاد مشکلاتی مثل تکرار کد، طراحی ضعیف و استفادهٔ بیش از حد از کلاسهای مختلف شود.
به طور کلی، در مجموعه الگوهای طراحی با گروهی از قواعد دیگر آشنا خواهید شد که بهتر از پایههای اولیهٔ شییٔگرایی به کار خواهند آمد و با شناخت این اصول و چگونگی ترکیب آنها در الگوهای طراحی، به طراح و معمار بهتری در زمینه شییٔگرایی بدل خواهید شد.
الگوها را در لایبرریها و زبانهای مختلف تشخیص دهید
دیزاین پترنها راهحلهای عمومی برای حل مشکلات رایج در برنامهنویسی شییٔگرا (OOP) هستند به این معنا که راهحلهایی هستند برای حل چالشهای طراحی نرمافزار و لازم به یادآوری است که شما نمیتوانید یک نمونه الگوی طراحی را برای افزودن به پروژهٔ خود دانلود و نصب نمایید بلکه باید الگوی طراحی را در داخل سیستمتان پیادهسازی کنید!
اگر با مفهوم 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
از زبانی مشترک با دیگر دولوپرها استفاده کنید
همانطور که در مورد بالا بیان شد، یکی از مزایای یادگیری دیزاین پترنها آشنایی با نوعی از معماری نرمافزار است که میان دولوپرهای حرفهای سراسر دنیا عمومیت دارد به طوری که اگر در تیم نرمافزاری خود قصد سرعت بخشیدن به کارتان را دارید، از طریق این الگوها نیروی جدیدی برای برقراری ارتباط دربارهٔ منظور خود در طرحهایتان با یکدیگر به دست خواهید آورد. به عنوان مثال، فرض کنید همگروهیتان میخواهد قسمت جدیدی از طراحیاش را برایتان شرح دهد. دو طرز بیان زیر برای این منظور امکانپذیر است:
من این کلاس برودکست رو ساختم که کارش پیدا کردن تمامی اشیائی هست که به آن گوش میدهند و هر وقت دیتای جدیدی برسه، اون پیام رو به تمامی گیرندهها میفرسته. جالب اینجاست که گیرندهها میتونن در هر زمانی به برودکست متصل شده یا خودشون رو حذف کنن و این روش کاملاً پویا و به اصطلاح Loosely Coupled هستش.
یا
من این کلاس برودکست را بر پایهٔ الگوی Observer ساختم.
در روش اول، باید مدت زیادی فکر کنید تا دقیقاً متوجه شوید که کلاس برودکست چه کاری انجام میدهد اما در روش دوم، طرز کار کلاس را از قبل میدانید و این قدرت بهکارگیری فهرست لغات مشترک برای الگوهای طراحی است. اگر به زبان الگوها ارتباط برقرار کنید، توسعهدهندگان دیگر فوراً و با جزئیات بیشتر متوجه طرحی که قصد بیان آن را دارید خواهند شد.
با اینکه در ترکیب و ساخت سیستمهای شییٔگرا به دست خودتان چیزهای زیادی برای یادگیری وجود دارد، اما میتوانید از مزایای شناخت و بینشی که از طریق مطالعه و استفاده از دیزاین پترنها به دست میآید، استفاده نمایید. همانطور که پیش از این گفتیم، الگوهای طراحی به یک باره ابداع نشدهاند بلکه در نتیجهٔ کار سخت و تجربهٔ عمیق از طریق ساخت تعداد زیادی سیستم مختلف به دست آمدهاند. در حین فرایند یادگیری الگوهای طراحی، شما به دیدگاه یک معمار باتجربه نرمافزاری دست یابید و در عین حال به سمت ساخت نرمافزارهای بهتر و ماندگارتر پیش خواهید رفت.
منبع :سکان اکادمی
@this_java