آموزش جدید Java
برای ثبت نام در دوره آموزش Java می توانید از لنک موجود استفاده نمایید .
مقدمه ای بر زبان و بستر اجرای Java
پروژه ی زبان برنامه نویسی جاوا را توسعه دهنده ی مشهور James Gosling در شرکت Sun Microsystem برای اولین بار کلید زده و در سال 1995 آن را به عنوان مولفه ی اصلی بستر اجرای جاوا (Java 1.0 [J2SE]) از شرکت Sun Microsystems منتشر کرد (Java 1.0 [J2SE]).
آخرین ویرایش رسمی و پایدار جاوا، بستر اجرای جاوا ورژن 8 یا 8 Java Standard Edition می باشد. با پیشرفت زبان Java و محبوبیتی که بدست آورد، تنظیمات مختلفی صورت گرفت تا جاوا با انواع پلت فرم ها سازگاری داشته و برنامه های نوشته شده با آن در تمامی محیط ها قابل اجرا باشد. برای مثال می توان به J2EE برای پیاده سازی اپلیکیشن های تجاری و بزرگ، J2ME برای توسعه ی اپلیکیشن های کوچک و تحت موبایل اشاره کرد.
ورژن های جدید J2 هر یک به ترتیب تحت عنوان Java SE"، Java EE و Java ME نام گذاری شدند. آنچه باعث محبوبیت بالای Java شده، شعار "کد را یکبار بنویس و آن را در همه بسترها اجرا کن" می باشد.
از ویژگی ها و امکانات زبان جاوا می توان به موارد زیر اشاره کرد:
- شی گرا یا Object Oriented – در آموزش Java همه چیز یک آبجکت است و از آنجایی که این زبان مبتنی بر مدل شی گرا/Object model می باشد، به راحتی می توان آن را گسترش داد.
- مستقل از بستر اجرای خاص و قابل اجرا بر روی محیط های مختلف/platform independent – برخلاف بیشتر زبان های برنامه نویسی مانند C و C++، زبان جاوا پس از کامپایل، مستقیما به زبان قابل فهم برای ماشین تبدیل نمی شود بلکه کامپایلر دستورات جاوا را به یک زبان میانی مستقل از پلت فرم به نام byte code ترجمه می کند. این زبان میانی را سپس برنامه ای به نام دستگاه مجازی جاوا یا JVM که نسخه های مختلف آن برای پلت فرم های متفاوت طراحی و پیاده سازی شده، به زبان قابل فهم برای ماشین تفسیر می کند.
- سادگی – Java طوری طراحی شده که یادگیری آن سهل باشد. پس از درک مفاهیم پایه ای شی گرایی و OOP، یادگیری باقی زبان بسیار آسان خواهد بود.
- امن (Secure) – Java به توسعه دهنده این امکان را می دهد که یک برنامه ی کارا، عاری از ویروس، قابل اطمینان و امن برای تمامی سیستم ها پیاده سازی کند. برنامه های مبتنی بر آموزش Java برای سنج هویت و authentication از روش رمزنگاری کلید عمومی (public-key encryption) بهره می گیرند.
- قابلیت اجرا بر روی پردازنده و محیط های مختلف به صورت یکسان/ Architecture-neutral- کامپایلر جاوا یک فایل حاوی آبجکت با فرمت خاص و architecture-neutral تولید می کند که برای کد کامپایل شده قابلیت اجرا بر روی پردازنده ی های مختلف و محیط های اجرایی مطرح را فراهم می آورد. این امکان با حضور سیستم زمان اجرای جاوا یا java runtime system در اختیار توسعه دهندگان برنامه ی جاوا قرار می گیرد.
- Portable و قابلیت اجرا بر روی هر سخت افزاری که JVM سازگار و مربوطه را دارد – خروجی کامپایلر جاوا یک کد غیر قابل اجرا به نام Bytecode است. در صورت وجود JVM یا دستگاه مجازی جاوا سازگار با سخت افزار میزبان، Bytecode را سیستم زمان اجرای جاوا یا Java run-time system که خود توسط jvm فراخوانی می شود، اجرا می نماید. کامپایلر مورد استفاده ی Java با ANSI C نوشته شده و یک زیرمجموعه از POSIX می باشد.
- Robust – Java سعی می کند با تاکید بر روی بررسی خطاها در زمان کامپایل و اجرا، شرایطی که ممکن است در آن خطاهای زیادی رخ دهد را از میان بردارد.
- قابلیت پردازش موازی و انجام چند کار به صورت همزمان (multi-threaded) – با قابلیت پردازش موازی زبان جاوا، این امکان برای توسعه دهنده فراهم شده که برنامه هایی پیاده سازی کند که چندین کار و عملیات را همزمان انجام دهد. این ویژگی زبان Java به توسعه دهنده امکان می دهد تا اپلیکیشن های تعاملی با قابلیت اجرا و پاسخ گویی سریع بنویسد.
- مفسری (Interpreted) – byte code که خروجی کامپایلر جاوا می باشد در حین اجرا به دستورات قابل فهم برای ماشین تبدیل می شود و این دستورات در حافظه ذخیره نمی شوند. فرایند توسعه بسیار سریع تر و تحلیلی خواهد بود چرا که پروسه ی linking (متصل کردن فایل ها فایل های اجرایی کوچک در قالب یک فایل اجرایی بزرگ واحد) افزایشی و سبک خواهد بود.
- کارایی بالا/high performance – به کمک کامپایلرهایی که کدها را در لحظه و به صورت داینامیک (Just-In-Time) ترجمه می کنند، سرعت اجرای برنامه افزایش می یابد.
- Distributed – قابلیت توسعه ی اپلیکیشن های تجاری، بزرگ و توزیع شده بر روی بستر وب و اینترنت را فراهم می آورد.
- Dynamic (داینامیک و دارای قابلیت تفسیر کد بر اساس دستگاه میزبان در زمان اجرا) – Java در اصل نسبت به C و C++ از ویژگی پویایی بیشتری برخودار است چرا که برای تطبیق با محیطی در حال تکامل تعبیه شده است. برنامه های مبتنی بر Java مقدار زیادی اطلاعات زمان اجرا (run-time) را با خود حمل می کنند که این اطلاعات می توانند جهت بررسی صحت و برطرف کردن دسترسی به آبجکت ها در زمان اجرا بکار روند.
پیشینه ای از جاوا
James Gosling پروژه ی زبان برنامه نویسی Java را در ژوئن سال 1991 جهت استفاده در یکی از چندین پروژه ی گیرنده ی دیجیتال تلویزیون (set-top box) خود کلید زد. زبان مورد نظر که در ابتدای امر "Oak"، اسم درختی که در بیرون دفتر مخترع زبان قرار داشت، نام گذاری شده بود و گاهی "Green" نیز نامیده می شد، در نهایت با استخراج کلمه ای تصادفی از یک لیست به Java تغییر نام یافت.
شرکت Sun اولین پیاده سازی و ویرایش عمومی از Java را تحت عنوان Java 1.0 در سال 1995 منتشر کرد. این زبان با شعار "کد را یکبار بنویس و آن را در تمامی محیط ها اجرا کن" یا WORA و ارائه ی runtime های رایگان برای بسترهای اجرا (platform) مطرح، محبوبیت بسیاری کسب کرد.
در تاریخ 13 نوامبر سال 2006، شرکت نام برده عمده ی قابلیت ها و ابزار Java را به صورت یک نرم افزار رایگان و متن باز (open source) تحت لیسانس GPL در اختیار عموم قرار داد.
در 8 مه سال 2007 میلادی، شرکت Sun پروسه را به اتمام رسانده و کل هسته (core) جاوا را به استثنای بخش کوچکی از کد که Sun مجوز نشر آن را نداشت، به صورت رایگان و متن باز (open-source) در اختیار توسعه دهندگان علاقه مند قرار داد.
آموزش ورودی و خروجی (Input و Output) در Java
Java با بهره گیری از مفهومی به نام stream (دنباله ای از داده ها با فرمت های مختلف برای مثال 8 بیتی/1 بایتی است که از منبعی خوانده شده یا در آن درج می شود) عملیات i/o را تسریع می بخشد. کلاس ها و توابع لازم برای پردازش ورودی و تولید خروجی در جاوا داخل پکیج java.io تعبیه شده است.
FileOutputStream در جاوا یک کلاس مشتق شده از کلاس انتزاعی OutputStream است که برای ایجاد دنباله ای از بایت های خروجی (output stream) و مشخص کردن یک فایل مقصد که داده ها در آن درج می شوند بکار می رود. به عبارت ساده تر بایت های خروجی را در فایل می نویسد.
کلاس FileInputStream بایت هایی ورودی را از یک فایل خوانده و بازیابی می کند. نمونه ی این کلاس قادر است یک جریان ورودی تعریف کرده و یک فایل به عنوان منبع این جریان تنظیم و ایجاد کند. از کلاس FileInputStream برای خواندن داده های مبتنی بر بایت (دنباله ای از بایت های خام) نظیر اطلاعات تصویری، صوتی، ویدئو و غیره ... استفاده می شود.
کلاس BufferedOutputStream برای قرار دادن دنباله ای از بایت های خروجی (output stream) از دیسک در حافظه واسط و به اصطلاح بافر کردن محتوا بکار می رود. این کلاس همان طور که از اسم آن پیدا است از buffer برای ذخیره ی موقت داده ها از دیسک استفاده می کند.
کلاس BufferedInputStream در جاوا جهت خواندن اطلاعات از دنباله ای از بایت ها و ذخیره ی موقت آن ها در buffer بکار می رود. این کلاس همان طور که از اسم آن پیدا است، برای افزایش کارایی و سرعت به صورت داخلی از مکانیزم buffer و ذخیره موقت اطلاعات در حافظه واسط بهره می گیرد.
کلاس SequenceInputStream در جاوا جهت خواندن داده از چندین input stream (برای مثال چند فایل ورودی) که در قالب یک sequence واحد به ترتیب به یکدیگر متصل شده اند، بکار می رود. این کلاس داده ها را به صورت متوالی و یکی پس از دیگری از input stream های متصل شده به هم می خواند.
کلاس ByteArrayOutputStream در جاوا برای درج داده های مشترک در چند فایل بکار می رود. output stream ای که این کلاس پیاده سازی می کند، داده ها را داخل آرایه ای از بایت ها (byte stream) قرار داده و سپس می تواند این داده ها را در چندین stream، برای مثال فایل خروجی، به صورت ثابت درج کند.
اسم کلاس ByteArrayInputStream از دو کلمه تشکیل شده است: ByteArray و InputStream. همان طور که از اسم آن پیدا است، می توان با استفاده از آن آرایه ای از بایت ها ورودی (input stream) را خواند. کلاس ByteArrayInputStream داری یک حافظه ی buffer داخلی است که به وسیله آن می توان آرایه ای از بایت های ورودی را به صورت stream خواند.
کلاس DataOutStream این امکان را برای اپلیکیشن فراهم می کند تا داده هایی از نوع اولیه (primitive) را در جریان خروجی (output stream) به روشی کاملا مستقل از ماشین و قابل اجرا (استفاده) در بسترهای مختلف درج کند. به عبارت دیگر این کلاس داده هایی از نوع اولیه را به متغیرهای قابل استفاده در انواع output stream ها که از بستر اجرا و platform مستقل هستند تبدیل می نماید.
کلاس DataInputStream این امکان را برای اپلیکیشن فراهم می کند تا داده هایی از نوع اولیه (primitive) را از input stream (برای مثال فایل ورودی) به صورت کاملا مستقل از ماشین (قابل فهم و اجرا بر روی بسترهای مختلف و مستقل از platform) بخواند.
کلاس FilterOutputStream پدر تمامی کلاس هایی است که جریان های خروجی (output stream) را فیلتر می کنند. این جریان های بایتی (output stream) بر روی یک output stream از قبل موجود قرار داشته و از آن به عنوان بستر پایه ای دریافت اطلاعات (data sink) استفاده می کنند. لازم به ذکر است که داده ها در طول مسیر ممکن است تبدیل شده یا قابلیت های جدیدی اضافه گردد.
کلاس FilterInputStream خود میزبان inputstream های دیگر بوده، از آن ها به عنوان منبع داده ای اصلی خود استفاده می کند و این احتمال وجود دارد که داده ها را در طول مسیر تبدیل کرده (تغییر شکل دهد) یا قابلیت های جدید اضافه کند.
کلاس Console قابلیت این را دارد که از console ورودی دریافت کرده و در آن خروجی چاپ کند. این کلاس تعدادی متد جهت خواندن متن و گذرواژه (password) در اختیار توسعه دهنده قرار می دهد. در Java
کلاس FilePermission در جاوا امکان دسترسی به فایل یا پوشه را فراهم می کند. این کلاس تمامی مجوزهای مربوط به فایل یا دایرکتوری را کپسوله می کند. مجوزهایی کپسوله سازی شده در این کلاس همگی مربوط به path و دسترسی به محل قرارگیری فایل می باشد. رشته path می تواند به دو صورت نگارش شود:
کلاس Writer یک کلاس abstract برای درج داده در character stream و دنباله ای از کاراکترها است. این کلاس را کلاس های دیگر به ارث برده و متدهای write(char[], int, int)، flush() و close() از این کلاس abstract را در خود پیاده سازی می کنند. بیشتر کلاس هایی که از Writer ارث بری دارند، متدهای آن را جهت افزایش کارایی و افزودن قابلیت مضاعف در سطح خود بازنویسی (override) می کنند.
کلاس Reader یک کلاس abstract است که برای خواندن دنباله ای از کاراکترها/character stream بکار می رود. کلاس هایی که از این کلاس ارث بری دارند فقط باید دو متد read(char[], int, int) و close() را پیاده سازی می کنند.آموزش Java
کلاس FileWriter برای درج داده های مبتنی بر کاراکتر در فایل بکار می رود. به عبارت دیگر، FileWriter یک کلاس مبتنی بر کاراکتر است که توسعه دهنده به واسطه ی آن می تواند اطلاعاتی را در قالب کاراکتر در فایل وارد کرده و آن را مدیریت کند. آموزش Java
توسعه دهنده به وسیله ی کلاس FileReader قادر خواهد بود داده های مبتنی بر کاراکتر را از فایل مورد نظر بخواند. نمونه ی این کلاس داده ها را در قالب دنباله ای از بایت ها مانند FileInputStream در خروجی برمی گرداند. آموزش Java
کلاس BufferedWriter به آبجکت های ساخته شده از روی کلاس Writer این امکان را می دهد که داده های خود را در حافظه واسط یا buffer ذخیره کرده و در اصطلاح از قابلیت buffering در عملیات ورودی پشتیبانی کند. آموزش Java
کلاس BufferedReader برای خواندن متن از یک input stream مبتنی بر کاراکتر بکار می رود. توسعه دهنده می تواند با فراخوانی متد readline() از این کلاس محتوای فایل مورد نظر را خط به خط بخواند. این کلاس به سبب استفاده از buffer، سرعت و کارایی اپلیکیشن را افزایش می دهد.آموزش Java
اسم کلاس CharArrayReader از دو واژه ی CharArray و Reader تشکیل شده است. همان طور که از اسم آن پیدا است، این کلاس به توسعه این امکان را می دهد تا آرایه ای از کاراکترها را به صورت stream یا دنباله ای از داده های ورودی بخواند. CharArrayReader نیز از کلاس Reader مشتق می شود.
کلاس CharArrayWriter یک حافظه ی واسط یا buffer جهت نگهداری موقت کاراکتر پیاده سازی کرده و به توسعه دهنده این امکان را می دهد تا داده های مشترک را در چندین فایل درج کند. آموزش Java
کلاس PrintStream متدهایی جهت درج داده در stream دیگر را در اختیار توسعه دهنده قرار می دهند. به عبارت دیگر با افزودن قابلیت جدید به یک stream دیگر، این بستر را فراهم می کند که داده های از نوع مختلف را به راحتی چاپ کند. آموزش Java