PDA

مشاهده نسخه کامل : از جاوا بیشتر بدانیم !


amin10043
Sep-23-2008, 00:19
سلام من قصد دارم که در اینجا یه کم دقیق تر و البته پایه ای تر به سراغ زبان جاوا بریم. زبانی که به نظر هنوز تو کشور ما نتونسته جای خودشو پیدا کنه.
دوستان اگه مطلب جالب و خواندنی دارن حتما کمک کنن.

amin10043
Sep-23-2008, 00:31
جاوا زبان متولد دهه 90 است که توسط شرکت سان مایکروسیستمز ارائه شد. جاوا زبانی صد در صد شی گرا است به طوری که در مورد این زبان گفته اند که برنامه نویسان این زبان برای دستشویی رفتن هم کلاس طراحی می کنن تا قابلیت استفاده مجدد رو داشته باشه (!) . از ویژگیهای مهم این زبان می شه به مدیریت بسیار قوی حافظه اشاره کرد که یکی از نقاط قوتش محسوب می شه.قابلیت مهم بعدیش عدم وابستگی به پلتفرمه که باعث شده به سرعت در اینترنت و موبایل ها رواج پیدا کنه. علتش هم این است که کامپایلر جاوا در زمان کامپایل یک سری کد های میانی به نام بایت کد تولید می کنه و بعدش به وسیله اسمبلر یا همون ماشین مجازی که داره به زبان مقصد ترجمه میشه.
اما کاربر هایی که جاوا داره:
برنامه‌های تحت وب
برنامه‌نویسی سیستم‌های کوچک مانند موبایل، پاکت پی‌سی و ...؛
برنامه‌های کاربردی بزرگ (Enterprise)؛
برنامه‌های رومیزی (Desktop)؛
و غیره.

علاوه بر اینا جاوا یک قابلیت دیگه به نام اپلت هم داره برای نوشتن برنامه های تحت وب که البته به دلیل سرعت پایین خیلی مورد توجه عام قرار نگرفتن.
اینم همون هللو ورد جاوایی:
public class Test{
public static void main(String[] args) {
System.out.println("HelloWorld!");
}
}

amin10043
Sep-23-2008, 01:53
اما بعد از این تعریف مقدماتی یکم دقیق تر به ویژگیهای این زبان می پردازیم :

شي گرا :Object Oriented

جاوا يك زبان برنامه نويسي شي گرا است . یعنی اینکه به جاي فكر كردن به قسمت هاي رويه برنامه ، بايد به كاربرد داده ها و روش هاي استفاده صحیح از داده ها توجه بشه.
در يك سيستم شي گرا ، يك كلاس مجموعه اي از داده ها و روش هاست كه روي آن داده عمل ميكنند. همراه بودن داده ها و متد ها رفتار و حالت يك شي را بيان مي دارد .کلاس ها به صورت سلسله مراتبی مرتب شده اند بنابر اين يك زير كلاس ميتواند رفتار هايي را از كلاس بالاتر به ارث ببرد .
جاوا به همراه دسته ي گسترده اي از كلاس هايي است كه در بسته هايي مرتب شده اند و شما مي توانيد از آنها در برنامه ي خود استفاده كنيد . که به آنها package گفته می شود. مانند java.awt package برای رابط های گرافیکی یا java.io package برای ورودی/خروجی.
برخلاف زبان c در جاوا فقط کلاس داریم. هر برنامه زبان جاوا شامل حداقل یک کلاس است.اکثر چیز هایی که در جاوا با آن سروکار داریم بصورت کلاس(یا بهتر آبجکت) است بجز نوع داده ای پایه مانند int ,...
برخلاف اکثر زبانهای برنامه نویسی شی گرا مانند c++ در جاوا مفهومی به نام وراثت چندگانه که یکی از اصلی ترین مفاهیم شی گرایی است را نمی بینیم.علت عدم حضور این مفهوم در جاوا کاهش پیچیدگی شی گرایی بود. اما جاوا چه جایگزینی برای آن پیشنهاد می کند؟
interface ها که اولین بار توسط جاوا معرفی شد برای حل مشکل وراثت چندگانه بود که به خوبی علاوه بر کاهش پیچیدگی باعث شد که شی گرایی در جاوا بصورت کامل انجام پذیرد. هر چند که اخیرا حتی وراثت تکی هم از نظر خیلی ها باعث پیچیدگی است و قصد حذف آنرا دارند.

amin10043
Sep-23-2008, 02:10
تفسیر یا کامپایل ؟؟

شاید یکی از مهمترین تفاوت های زبان جاوا با اکثر زبانها تفاوت در نحوه اجرای برنامه هاست. در جاوا برای تحقق شعار اصلی سازندگان یعنی write once run anywhere نیازمند مکانیزمی بودند تا وابستگی به بستر را از بین ببرند برای همین علاوه بر کامپایلر به اینترپرتر هم نیاز بود. تا کامپایلر برنامه مبدا رو به یک کد میانی (بایت کد) تبدیل کنه و اینتر پرتر(همون ماشین مجازی) اون رو به کد مقصد تبدیل کنه تا دیگه مشکل وابستگی به بستر پیش نیاد. هرچندکه باعث کندی زمان اجرا می شد اما با استفاه کردن از کامپایلر های درست به موقع(just in time) این مشکل هم حل شد.

amin10043
Sep-23-2008, 02:25
سادگی :
جاوا يك زبان ساده است . طراحان جاوا سعي در اين داشتند تا زباني بوجود بياورند كه برنامه نويسان بتوانند به سرعت آن را ياد بگيرند . بنابراين تعداد ساختار هاي اين زبان تقريبا كم است . هدف ديگر طراحي اين زبان اين بود كه به منظور راحتي انتقال آن ، آن را طوري طراحي كنند كه براي عده ي زيادي از برنامه نويسان آشنا باشد . اگر شما يك برنامه نويس C يا C هستيد ، خواهيد فهميد كه جاوا از بسياري از ساختار هاي C و ‍ C استفاده ميكند .
براي اينكه اين زبان را هم به طور ساده و هم آشنا و ملموس و هم كوچك نگه دارند بسياري از خصوصيات C و C را در آن حذف كردند . اينها خصوصياتي بودند كه باعث مي شدند برنامه نويسي ضعيفي صورت بگيرد يا آنهايي بودند كه به ندرت در برنامه استفاده مي شدند . براي مثال جاوا از دستور goto استفاده نمي كند ، در عوض از دستورهايbreak , continue در مواقع نياز استفاده مي كند .
جاوا از سر فايل ها(header files) استفاده نمي كند و پردازشگر C را هم حذف كرده است . به اين دليل كه جاوا يك زبان شي گرا است ، ساختار هاي C مثل struct , union از آن برداشته شده است . جاوا حتي بارگذاري مجدد و خواص چندگانه ارث بري از C را هم حذف كرده است . شايد مهمترين پارامتر ساده بودن جاوا عدم استفاده اين زبان از اشاره گر ها باشد . اشاره گر ها يكي از بيشترين موجوديت هاي دردسرساز در C , C هستند . چون جاوا ساختمان ندارد و آرايه ها و رشته ها اشياء آن هستند ، بنابراين احتياجي به اشاره گر نيست .جاوا به طور خودكار آدرس دهي و دستذسي به محتواي موجود در يك آدرس را براي شما انجام ميدهد .
جاوا حتي زباله هاي حافظه اي را هم به طور خودكار جمع آوري ميكند .(Garbage Collectin) (* جمع آوري آشغال فرايندي است براي ترميم خودكار حافظه انباشته شده . بلوك هايي از حافظه كه زماني به فايل ها اختصاص داشتند اما مدتي است كه از آنها استفاده نمي شود و بلوك هايي از حافظه كه هنوز مورد استفاده قرار ميگيرند ممكن است حركت داده شوند تا از به هم پيوستن فضاهاي خالي حافظه بلوك هاي خالي بزرگتري بدست آيد .
[ از كتاب : Microsoft computer dictionary] * ) بنابراين لازم نيست كه نسبت به موضوع مديريت حافظه نگران باشيد ، همه اينها شما را از نگراني در مورد اشاره گر هاي بي ارزش ، خطرناك و هرز هاي حافظه رها ميكنند . بنابر اين شما ميتوانيد وقت خود را صرف بهبود برنامه تان كنيد .

amin10043
Sep-23-2008, 02:27
قدرت :
جاوا براي نوشتن نرم افزارهاي قدرتمند و بسيار ايمن ساخته شده است . جاوا هنوز هم به طور قطع نرم افزار ها را تضمين نميكند . تقريبا هنوز هم امكان نوشتن برنامه هاي مشكل ساز در جاوا وجود دارد ، هرچند كه جاوا برخي از انواع مشخص خطاهاي برنامه نويسي را حذف كرده كه به طرز چشمگيري نوشتن نرم افزار هاي ايمن را آسان تر كرده است .
جاوا يك زبان تايپ شده قدرتمند است ،‌ كه اجازه چك شدن مشكلات و خطاهاي تايپي را در زمان كامپايل مي دهد . جاوا بسيار قويتر از c تايپ شده است كه بسياري از خصوصيات انعطاف پذير در زمان كامپايل را از c به ارث برده است . مخصوصا هنگام اعلان توابع .جاوا به مدل اعلان صريح احتياج دارد ، زيرا كه از مدل اعلان صريح c پشتيباني نميكند . اين مسئله مارا از اينكه كامپايلر ميتواند خطاهاي زمان اعلان را بدست آورد ، مطمئن ميكند . مسئله اي كه منجر به ايجاد برنامه هاي ايمن تري ميشود .
يكي از چيزهايي كه باعث شده كه جاوا ساده باشد عدم وجود اشاره گر ها ومحاسبات بر روي آنها است . اين ويژگي حتي قدرت جاوا را هم با از ميان بردن يك كلاس سراسري اشاره گر افزايش ميدهد .
به طور مشابه تمام دسترسي به آرايه ها و رشته ها در زمان اجرا چك مي شوند تا از قطعي بودن آنها اطمينان حاصل شود .با از بين بردن امكان دوباره نويسي حافظه و داده هاي هرزه ، تعويض نقش اشياء از نوعي به نوع ديگر هم در زمان اجرا كنترل ميشود تا از مجاز بودن آن اطمينان حاصل شود .
سرانجام زباله جمع كن خودكار جاوا بسياري از عمليات پاكسازي مرتبط با معماري حافظه را راه اندازي ميكند . چيزي كه از خطاهاي خطر ساز مرتبط با تخصيص و آزاد سازي حافظه جلوگيري ميكند .

amin10043
Sep-25-2008, 00:09
اما بعد از این مباحث پایه ای جاوا به سراغ فناوری های پر کاربرد تر جاوا یعنی برنامه نویسی سمت سرور می ریم.
در بخش اول قصد دارم که در مورد Servlet اونچه رو که می دونم اینجا بگم.

amin10043
Sep-25-2008, 00:40
Servlet:
در حقیقت servlet چیزی جز یه ابزار برای گسترش پروتکل HTTP نیست.سرولت بعد از متولدشدن جاوا به کتابخانه های زمان اجرای اون اضافه شد.که هم اکنون در javax.Servlet قرار داره.
اما بخش های اصلی سرولت به شرح زیر است:


Cookie
Session


اما هر کدوم از اینا چی هستن و چه کاربردی دارن ؟


همون طور که از نامش پیداس برای ارسال یک درخواست از کلاینت به سمت سرور ایجاد می شه که شامل اطلاعاتی نظیر مشخصات سیستم عامل کلاینت و مشخصات مرورگر آدرس آی پی و اطلاعاتی از این دست است که به سرور فرستاده می شه.و در آدرس زیر قابل دسترسی است:
javax.servlet.


کلاسی که شامل اطلاعاتی است که از سمت سرور به کلاینت فرستاده می شود که شامل اطلاعاتی درباره سرور و تاریخ انقضا پاسخ و داده فرمت شده میباشد که روی مرور گر میفرستد.ودر آدرس زیر قرار دارد:
javax.servlet.

Cookie:
کوکی ها اطلاعاتی هستند که سرور در کلاینت ها نگه داری می کند و کلاس کوکی شامل اطلاعاتی برای مدیریت ذخیره و بازیابی کوکی ها در میزبان است.که در یک آرایه در آبجکت درخواست موجود است.(دیگه خداییش همه اینو حداقل می دونن جیه !!!!)

Session:
برای کسانی که برنامه نویسی سمت سرور رو قبلا تجربه کردن کاملا مفهوم جا افتاده ای هستش.اما در یک توضیح مختصر باید بگم که در زمان ایجاد اتصال بین کلاینت و سرور اطلاعات کلاینت در سرور نگه داری می شود تا سرور در هر لحظه بداند که چگونه با یک کلاینت در ارتباط باشد.در حقیقت راهی برای اتصال کلاینت با سرور محسوب می شه( کشتم خودمو ! )
حالا این حرفا جه ربطی به بحث ما داره ؟
خوب دیگه واضحه برای اینکه ما این ارتباط رو برقرار کنیم و اطلاعات کلاینت هارو هم مدیریت کنیم پیشنهاد بهتری دارین ؟!!!!!!!!!!


در این بخش که اصلی ترین بخش نیز محسوب مبشه پردلزش و خروجی ثبت می شه.و در آدرس زیر قرار داره :
javax.servlet.

amin10043
Sep-25-2008, 02:34
اما سوالی که اینجا پیش میاد اینه که حالا چه طوری می تونیم یه سرولت بسازیم.
برای ساخت یک سرولت شما باید یک کلاس ساده بسازید و به شکل زیر آن را از کلاس مشتق کنید. در این کلاس دو متد doPost و doGet وجود دارد که خروجی فرم و پردازش فرم در آن انجام میگیرد

حالابریم سراغ یه مثال کاربردی:

import java.io.*;
import javax.servlet.*;
import javax.servlet.
import javax.servlet.
import javax.servlet.
/**
*
* @author Amin
*/
public class NewClass extends {

/** Creates a new instance of NewClass */
public NewClass() {
}
protected void doPost( request, response)
throws ServletException,IOException
{
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out=response.getWriter();
out.print("<html>");
out.print("<head>");
out.print("<title> Just For Test!</title>");
out.print("<meta "Content-Type\" content=\"text/html; charset=utf-8\">");
out.print("</head>");
out.print("<body>");
out.print("<form method='POST' >");
out.print("<div align = 'center'>");
for(int i=0;i!=8;i++)
{
out.println("<font size=\""+String.valueOf(i)+"\">Welcome To Java Web Base"+"</font>"+"<br />");

}
out.println("</form>");
out.println("</body>");
out.println("</html>");
out.close();

}
protected void doGet( request, response)
throws ServletException
{

}

}