PDA

View Full Version : مقاله: مروری اجمالی بر JavaSE7!



mazdadoost
جمعه 03 خرداد 1387, 13:47 عصر
برسی امکانات جدید در ویرایش بعدی JavaSE 7!
دوستان علاقمند به جاوا , چنانچه علاقمند به برسی امکانات و ویژه گی های احتمالی در جاوا علاقمند هستید پیشنهاد میکنم به خوندن ادامه مطالب ادامه بدین.

امکانات و ویژه گی هایی که در ادامه به اطلاعتون میرسه بعضا به احتمال پیاده شدن JSR هایی که در حال حاظر به صورت استاندارد به همراه JDK و JRE همراه نیستند.و البته Implemention هم ممکنه شده باشند اما به صورت استاندارد با جاوا همراه نیستند و طبق منابع غیر رسمی و رسمی سان در بلاگ ها و سمینار های مختلف از شون به عنوان مواردی که در JavaSE 7 که احتمالا در اواخر 2008 ارائه خواهد شد نام برده شده.

این امکانات بعضی مربوط به دستور زبان هستن -برخی مربوط به API های جدید و برخی مربوط به بهبود هایی که در پلت فرم مثل افزایش کارایی و سرعت اجرای برنامه ها ایجاد خواهد شد.در ادامه نظرتون رو به این ویژه گی ها جلب میکنم :لازم به ذکر است از بعضی از معادلات فارسی در متن استفاده شده و هدف انتقال مفهومه نوعی از اون کلمه و ارتباطش با کارکردش داشته این معادل سازی ها صرفا جنبه کمکی دارند و از نظر فنی (زبان فارسی)فاقد ارزش مستند هستند.

1-Closures(بستار):مشخصات این ویژه گی در JSR Proposal: Closures for Java آورده شده.مفهوم کلی به این شکله :قطعاتی از کد یا توابع که به عنوان عبارت تعریف میشن و(بله توابع چون به کلاسی وابسته نسیتند!حتی میشه به عنوان تابع بی نام هم ازشون استفاده کرد برای همین هم از واژه Function به جای Method استفاده شده.) در جایی از برنامه عملی رو انجام میدن.خروجی یک عبارت Closures شی ای از کلاس Closures خواهد بود و این شی به شما این امکان رو میده تا کل عبارت رو مثل یک تابع به کار ببرید یعنی بهش آرگومان بفرستید و ازش خروجی بگیرید!بیاین با یه مثال مسائل رو روشن تر کنیم :

public class SimpleClosure {

public static void main(String[] args) {
// function with no arguments; return value is always 42
int answer = { => 42 }.invoke();
System.out.println(answer);
}

}
همونطور که میبینید Closures با دستور زبان جدیدی تعریف میشه :

{ formal parameters => statements expression }
پارامتر ها (formal parameters) در واقع آرگومان های این تابع هستن و statements expression هم بدنه تابع.در مثال ما { => 42 } یه بستاره که آرگومانی نداره و همیشه خروجی 42 داره.به کاربرد متد invoke دقت کنید: این متد شی ضمنی عبارت بستار رو که با دستور { formal parameters => statements expression } ایجاد شده اجرا میکنه .و در نهایت خروجی در answer قرار داده و چاپ میشه! این سوال ممکنه پیش بیاد که این کار ها برای چیه!از همین مثال ساده حس پیچیده گی استفاده از Closures در برنامه نویبس ایجاد میشه :اما قدرت اصلی Closures ها وقتی معلوم میشه که به برنامه نویس های جاوا این امکانات رو میدن :
a) پیاده سازی امکانات پیشرفته زبانی مثل Function Pointer ها در C و یا Delegates در #C و VB.net !:

class DelegateDemo
{
/** You must always specify return types! **/
static { => void } method1 = { => System.out.println("This is method 1"); };
static { => void } method2 = { => System.out.println("This is method 2"); };

/** A method which takes a delegate of type void xyz(); **/
static void invoker({=> void} anyMethod)
{
anyMethod.invoke();
}

public static void main(final String[] args) {
invoker(method1);
System.out.println("Now passing method2!!");
invoker(method2);
}
}
b)

public class FunctionPointerWithClosures
{
static void invoker( { => void } block )
{
block.invoke();
}

public static void main( String[] args )
{
{ => void } method1 = { => System.out.println("Hello tutego"); };
{ => void } method2 = { => System.out.println("Hallo tutego"); };

invoker( Math.random() > 0.5 ? method1 : method2 );
}
}
به نظر من که خیلی جذابه!از نظر فنی Closures ها رو کامپایلر تبدیل به کد های معمولی جاوا میکنه و این ویژه گی یه ویژه گی کامپایلره خواهد بود همونطور که Inner Class ها در ویرایش های قبلی جاوا معرفی شدن.
مسائلی که در مورد استفاده از Closures ها ایجاد میشه :
زبان رو برای نوشتن و خوندن سخت میکنن!البته به دید برنامه نویس بستگی داره بعضی از برنامه نویس ها واقعا شیفته این نوع کد ها هستن.از طرفی آیا کلا برنامه نویسی با جاوا ساده هست!؟ شاید نگاه منحنی آموزشی تکنولوژی های جاوا مثل JPA-EJB-و کلا JavaEE به ما در رسیدن به این جواب کمک کنه که صرفا پیچیدگی کلی Closures ها نمیتونه دلیل استفاده نکردن از Closures ها باشه.هر چند بعد از عادتکردن بهشون بعید میدونم برای پیاده سازی چیزهایی که با Closures ها قابل پیاده سازی هستن برنامه نویسی به روش های قبلی رجوع کنه !در هر صورت اگه با Closures ها راحت نیستید خیلی ساده از اون ها استفاده نکنید!برسی بیشتر Closures ها رو به خودتون میسپارم.

2-Swing Application Framework:هدف از این JSRکنترل روند برنامه های Swing .تنها کاری که باید انجام بدین پیاده سازی متد های Framework و Interface هاش .مثلا launch(), initialize(), startup(), ready(), exit(), shutdown().برای برنامه نویسان Swing خبر های جدید تری هم هست.

3- Beans binding:چیزی که منتظرش بودیم.متصل کردن خودکار خصوصیات Bean ها!دیگه لازم نیست خودمون مواظب تغیر خواص یه bean و بروز رسانی bean دیگه بر اساس مقدار جدید باشیم.این برای Component های Swing که اغلب مجبوریم در Action Listener ها براشون کد لازم برای بروز رسانی مقادیر سایر Bean ها کد بنویسم خیلی راهگشاست.Bindig در .net-Flash و Flex بود!آیا ُSun کپی برداری میکنه همونطور که در مورد Closures انجام داده؟

4-Superpackages(ابر بسته ها!):در مورد پکیج هایی که در یه پکیج قرار دارند یه اصل کلی هست : یا همه یا هیچ!اگه در پکیجی در پکیجی به صورت Private باشه از خارج پکیج در دسترس نیست!با Superpackages ها میتونید در عین پنهان کردن عناصر ی از داخل پکیج طی فرایندی به عنوان Export بعضی دیگه از عناصر رو به بیرون پکیح صادر کنید!این سطحی از کپسوله سازی بهتر رو برای برنامه های بزرگتر ایجاد میکنه!

5-Separate Compilation:در حال حاظر چنانچه قسمتی از پیاده سازی کد ها (کلاس ها یا انتر فیس ها)انجام نشده باشن برای کامپایل کردن قسمت هایی از برنامه که از این کد ها استفاده کردن با خطای کامپایلر مواجه میشد!با این تکنیک میتونید بخش های مورد نظر رو کامپایل کنید!

6-SuperJARs / JAva Module (JAM)(ابر jar!):یه ابر جار پیاده سازی JSR 277: Java Module System!و کمک میکنه که تا Deploy کردن برنامه ها بهتر -کاملتر و البته به دید من کمی سختر (نیاز به کار بیشتر نسبت به jar)صورت بگیره.تمام اطلاعات برنامه از لحاظ Dependencies-Versioning-Classloading-Packaging-Distribution و .. در فرمت جدید آرشیو با پسوند JAM در دسترس خواهد بود (اجساس میکنم این ویژهگی هم چیزی شبیه اسمبلی های دات نت خواهد بود!البته باید منظر بود و JAM ها رو در عمل دید!)

6-پشتیبانی از Script نویسی برای زبان های JRuby-Jython-Beanshell! (جاوا اسکریپت در SE 6 معرفی شد.)

7-NIO2: filesystem API-filesystem API

8-Java Persistence API from JSR 220:ساده تر شدن و افزایش امکانات.این امکانات در حال حاضر در JavaEE هست و ورودش به SE فصل جدیدی رو برای برنامه نویسان دیتا بیس برای برنامه های SE بلز خواهد کرد!

9-JSR 255 JMX 2.0:آُسان شدن استفاده.و annotations بیس شدن!

10-Web Services Connector for JMX Agents:اکسپوز کردن JMX ها با وب سرویس ها که منجر به گسترش JMX در سطح وب و Extranet ها خواهد شد.

11-قابلیلت پشتیبانی از XMLو Xpath queries در سطح زبان!این ویژه گی رو در ActionScript ورژن 3 در Flash پلیر 9 دیدم. و الان از دیدنش در جاوا خوشحالم.

elt.appendChild(<present>
<who>currentSpeaker</who>
<day>Calendar.TUESDAY</day>
</present>);

12-ویژه گی ای که واقعا منتظرش بودم!پیاده سازی متد های get و set در Bean ها با روشی که با .net فریم ورک 3 به #C برای کار با Property ها اظافه شد!

private String foo;
public String getFoo() {..}
public void setFoo(String foo){..}
public property String foo;
تکنیک خوندن و نوشتنشون جالبتر و حتی بکره!

a->Foo = b->Foo;
13-استفاده از String ها در Switch ها!چقدر دیر!

14-توانایی مقایسه Enum ها:

boolean isRoyalty(Rank r) {
return rank >= Rank.JACK && rank != Rank.ACE;
}

15-ساختن وهله ها با دستور زبان خلاصه تر :واقعا جذابه (اینها همخ مدیون دینامیک تر شدن زبانه!)

Map<String,List<Integer>> m = new HashMap<String,List<Integer>>();
Map<String,List<Integer>> m = new(); ??
Map<String,List<Integer>> m = new Hashmap(); ??

سخن آخر :
مسلما همنطور که گفتم این فهرست ویژهگی های احتمالیه!با این وجود به نظر جذابه!اما هنوز هم چیز های بسیاری هست که باید انجام بشه تا خبر Release شدن JavaSE 7 رو برای من و خیلی از برنامه نویس های جاوا هیجان انگیز تر کنه.چه چیز هایی !؟:
1-اضافه شدن Model های برای Component های Swing که بتونن View رو از منابعی مثل XML,JDBC,Web Services, و یا حتی Object های JPA به شکل خودکار و رفت و برگشتی BIND کنن!شاید چیزی مثل Dataset ها و Datasource های دات نت!چرا چنین چیزی تا الان با جاوا نبوده!البته طراحان سان و سایر اعضاء JCP نظرات خودشون رو دارن..چیزی که برنامه نویس ها ی جاوا رو به سمت ایجاد فریم ورک های متنوعی کرده که هر کدوم روش خودشون رو دارن!به نظرم برای کار های مرسوم برنامه های تجاری مخصوصا دیتا بیس خیلی خوب میشه که ارتباط Swing با Model های مختلف ساده-استاندارد و شفاف بشه!
2-پشتیبانی بیشتر و هوشمندانه از رابط های جدید کابری در پلت فرم های جدید!همه ما چه اونهایی که از Windows استفاده میکنن چه اونهایی که دز Mac-linux -یا Unix استفاده می کنن شاهد پیشرفت های جدید و جذابی در امکانات بصری و تکنولوژی های دیگری هستیم که هر چند از سیستمی به سیستم دیگه متفاوتن اما همه گی شامل مفاهیم مشترکی هستند که به شکل رقابتی در پلت فرم های رقیب پیاده سازی شدن.خیلی خوب می شد اگه با نگاهی عمیق به این مفاهیم امکاناتی برای دسترسی به این امکانات به صورت استاندارد در خود API جاوا تعبیه شه تا استفاده از JNI حد اقل برای امکانات معمول و به شدت مورد نیاز برنامه ها به حد اقل برسه.این هم قابلیت انتقال رو افزایش میده هم کار برنامه نویس های جاوا رو آسون میکنه.هر چند که معتقدم عملی شدن این کار بسیار سخت و هزینه بر خواهد بود.آخرین تلاش های سان در این زمینه معرفی Java Desktop API در SE6 بوده!به نظرم خیلی جای کار داره.

در انتها از بابت وقتی که بابت خوندن این مطالب صرف کردین ممنونم.و خاطر نشان میکنم این مطالب بخشی شامل دید گاهای شخصی و برخی شامل این منابعی هست که در انتها آوردم هست.امید وارم مفید بوده باشه. و البته کمک کنید تا مطلب بهتر و پالوده تر شه.چنانچه دوستان با همه یا قسمتی از نظرات بنده مخالفن بسیار خ.شوقت میشم که باشون به بحث و مبادله نظر بپردازم.
با تشکر.
منابع :
http://www.builderau.com.au/blogs/syslog/viewblogpost.htm?p=339270936
http://sun.systemnews.com/articles/122/1/ja/19645
http://blogs.sun.com/dannycoward/resource/Java7Overview_Prague_JUG.pdf
http://www.javac.info/

pooyanm
سه شنبه 14 خرداد 1387, 11:50 صبح
دوست من واقعا کارت بیسته! حتما ادامه بده و بیشتر بنویس خیلی خوب بود، منتظر ادامه مقاله می مونم موفق باشی

mazdadoost
جمعه 17 خرداد 1387, 22:26 عصر
دوستان عزیز :
با تشکر از توجه و لطف شما.

saeed_Z_F
شنبه 18 خرداد 1387, 17:45 عصر
سلام
کارتون بسیار مفید بود ممنون .

ebrahhimi
سه شنبه 22 تیر 1389, 10:27 صبح
از تاپیکت ممنونم اگه ادامه داره ممنون میشم.

-------------------------------
همیشه اون کسی زرنگتره که زود تر از همه از جوی بپره .

jlover
سه شنبه 22 تیر 1389, 12:36 عصر
من روی nio2 خیلی تمرکز کرده بودم این اواخر و یه یوتیلیتی کوچولو هم با استفاده از این ای پی آی نوشتم (این روزها سخت گرفتارم، ولی به زودی در تالار جاوا قرار میدومش، ممکنه به درد خیلی از جاواکارها بخوره-به درد خودم که خیلی میخورد!-البته به درد دیگران هم میخوره...به هر حال)

هدفم از این پست این بود که در همین رابطه یه پی دی اف ضمیمه کنم که به معرفی اجمالی NIO2 می پردازه

خدمت شما

بدرود