smh
29-11-07, 00:43
قسمت اول
در یكی از مقالات شركتSun، زبان جاوا را با این خصوصیات شرح میدهد:
جاوا یك زبان ساده، شی گرا، توزیع شده، تفسیر شده، قدرتمند، ایمن، با معماری خنثی، قابل حمل، با عملكرد سطح بالا چند نخ كشی شده و پویا است.
Sun تصدیق میکند كه به طور قطع این كلمات رشتههایی از واژههای متداول در زبان برنامه نویسی هستند، اما حقیقت این است كه این واژهها به طور ماهرانهای خصوصیات این زبان را شرح میدهند.
حال به برخی از خصلتهای جاوا در پشت این واژهها میپردازیم.
شی گرا: Object Oriented
جاوا یك زبان برنامه نویسی شیگرا است. برای یك برنامه نویس این به این معنا است كه به جای فكر كردن به قسمتهای رویه برنامه، باید به كاربرد داده ها و روشهایی كه روی آن داده ها عمل میكنند، توجه شود.
اگر شما به برنامه نویسی با اعلان رویه در C عادت كرده اید، ممكن است دریابید كه به هنگام استفاده از جاوا مجبور به تغییر در روش و چگونگی برنامهتان هستید. هنگامی كه فهمیدید این الگوی جدید چقدر قدرتمند است، به سرعت با آن هماهنگ میشوید .
در یك سیستم شی گرا، یك كلاس مجموعهای از دادهها و روشهایی است كه روی آن داده عمل میكنند. همراه بودن دادهها و متدها رفتار و حالت یك شی را بیان می دارد. كلاسها به صورت سلسله مراتبی مرتب شده اند، بنابر این یك زیر كلاس میتواند رفتار هایی را از كلاس بالاتر به ارث ببرد. یك كلاس سلسله مراتبی همیشه یك كلاس ریشه دارد كه كلاسی است با رفتار های كاملا عمومی .
جاوا به همراه دسته ی گسترده ای از كلاس هایی است كه در بسته هایی مرتب شده اند و شما میتوانید از آنها در برنامهی خود استفاده كنید.
یك شی كلاس(in the java.lang package) به عنوان ریشه كلاس سلسله مراتبی جاوا انجام وظیفه میكند .
درست است كه جاوا طوری طراحی شده است كه مثل C++ باشد و خاصیت های آن را داشته باشد ، اما هنگامی كه با آن كار كنید خواهید فهمید كه بسیاری از پیچیدهگی های آن زبان را از بین برده است .
اگر شما یك برنامه نویس C++ هستید حتما لازم است كه ساختار های شی گرایی در جاوا را به دقت مطالعه كنید. اگرچه تركیب و نحوه دستورات آن تقریبا شبیه C++ است، اما رفتار های آن خیلی مشابه نیست .
تفسیر شده: Interpreted
جاوا یك زبان تفسیر شده است. كامپایلر جاوا به جای ایجاد كد محلی ماشین، كد بایتی برای ماشین مجازی جاوا ایجاد میكند. برای اجرای دقیق برنامه، از مفسر جاوا برای اجرای كد های بایتی كامپایل شده استفاده میشود. به دلیل اینكه كدهای بایتی جاوا به نوع كامپیوتر بستگی ندارند، برنامههای جاوا میتوانند روی هر نوع كامپیوتری كه JVM (Java Virtual Machine) را دارند، اجرا شوند .
در محیط تفسیر شده، مرحله لینك استاندارد توسعه برنامه از دید كاربر پنهان است. اگر جاوا تنها یك مرحله لینك داشت، فقط بارگذاری كلاس جدید به محیط پردازش میشد كه این خصوصیت با چرخه كامپایل-لینك-اجرا ی آرام و طاقت فرسای زبان هایی مانند C یا C++ در تضاد است .
معماری خنثی و قابل حمل: Architecture Neutral and Portable
به دلیل اینكه برنامههای جاوا در فرمت كد بایتی با معماری خنثی كامپایل شده اند، برنامه كاربردی جاوا میتواند در هر سیستمی اجرا شود.
البته با این شرط كه آن سیستم توانایی پیاده سازی ماشین مجازی جاوا را داشته باشد. این مسئله تقریبا برای كاربردهای توزیع شده روی اینترنت و یا دیگر شبكههای ناهمگن مهم است. اما روش معماری خنثی برای كاربردهای بر مبنای شبكه مفید است .
به عنوان یك توسعه دهنده برنامه های كاربردی، در بازار نرم افزاری امروز ممكن است بخواهید مدلهای كاربردی خود را توسعه دهید، به طوری كه بتواند رویPc، مكینتاش و سیستم عامل Unix اجرا شود .با وجود گونههای مختلف Unix ،Windows روی Pc و مكینتاش قوی جدید، رفته رفته تولید نرم افزار برای همه انواع این كامپیوتر ها سخت میشود. اگر شما برنامهتان را در جاوا بنویسید میتواند روی همهی این كامپیوترها اجرا شود.
در حقیقت تفسیر شده بودن جاوا وتعریف یك استاندارد، معماری خنثی داشتن و فورمت كد بایتی آن از بزرگترین دلایل قابل حمل بودن آن به شمار می آیند .
اما جاوا باز از این هم بیشتر گام برمیدارد، با اطمینان حاصل كردن از اینكه هیچیك از جنبههای وابستگی اجرایی زبان را ندارد. برای مثال جاوا به طور صریح اندازه هریك از انواع داده را تعریف میكند كه این با C تفاوت دارد، برای مثال هریک از انواع صحیح میتواند بسته به نوع کامپیوتر16-32 یا 64 بیت طول داشته باشد .
هنگامی که به صورت تکنیکی امکان نوشتن برنامههای غیر قابل حمل در جاوا فراهم شد، جلوگیری از چند خاصیت وابسته به نوع کامپیوتر که توسط جاوا API تولید شده و به طور قطع قابل حمل نوشته شده است، آسان است .
یك برنامه جاوا به تولید كنندگان نرم افزار كمك میكند تا از قابل حمل بودن كد هایشان اطمینان حاصل كنند. برنامه نویسان فقط برای پرهیز از دام غیر قابل حمل بودن برنامه احتیاج به یك تلاش ساده دارند كه شعار تجارتی شركتSun را زنده نگهدارند و آن شعار این است :
" یك بار بنویس ، همه جا اجرا كن" .
پویا و توزیع شده: Dynamic and Distributed
جاوا یك زبان پویا است. هر كلاس جاوا میتواند در هر زمانی روی مفسر جاوا بارگذاری شود. سپس این كلاسهای بارگذاری شدهی پویا میتوانند به صورت پویا معرفی شوند. حتی كتابخانه كدهای محلی میتواند به طور پویا بارگذاری شود. كلاسها در جاوا با كلاس Class فراخوانی میشوند؛ شما میتوانید به طور پویا در مورد یك كلاس در زمان اجرا اطلاعاتی بدست بیاورید. این خصوصیت در جاوا به طور درستی موجود است . با وجود بازتاب API اضافه شده (Application Program Interface ) كه به برنامه ساز امكان میدهد كه با برنامه از طریق یك برنامه كاربردی دیگر ارتباط برقرار كند .
جاوا حتی با نام زبان توزیع شده نیز خوانده میشود. به طور ساده این به این معنا است كه این زبان پشتیبانی سطح بالایی برای شبكه به وجود می آورد. برای مثال كلاس URL و كلاس های مرتبط با آن در بستهی ava.net ، خواندن فایلهای دوردست را به همان سادگی خواندن فایلهای محلی كرده است. به طور مشابه در جاوا 1-1، احضار روش كنترلی RMI (Remote Method Invocation ) ، API به یك برنامه جاوا اجازه میدهد كه روشهایی از اشیاء دور دست جاوا را به همان صورتی كه اگر آن اشیاء محلی بودند آنها را میخواند، بخواند .( جاوا حتی از سیستم شبكهای سطح پایین كه شامل آدرس مقصد و مسیر جریانی كه توسط سوكتها متصل شده است ، نیز پشتیبانی میكند).
طبیعت توزیع شدهی جاوا زمانیكه با امكانات پویای بارگذاری كلاس همراه میشود، واقعا درخشنده است . این خصوصیات با هم این امكان را برای مفسر جاوا به وجود میآورند كه كدها را از اینترنت بارگذاری و اجرا كند. ( همان طور كه بعدا خواهیم دید جاوا باعث میشود كه با وجود ابزار قدرتمند و ایمن این كار به طور مطمئن انجام شود). این چیزی است كه در هنگام بارگذاری و اجرای یك برنامه كاربردی از اینترنت توسط مرورگر وب، اتفاق میافتد. اما داستان پیچیده تر از این هم میتواند باشد. تصور كنید یك پردازشگر كلمه چند رسانهای در جاوا نوشته شده است. وقتی از این برنامه پرسیده میشود كه چند نوع از دادههایی را كه قبلا هرگز وارد نشده را نمایش دهد، ممكن است به طور دینامیكی یك كلاس را كه میتواند داده را شناسایی كند، از شبكه بارگذاری كند و بعد كلاس دیگری را كه بتواند داده را از درون یك پوشه تركیبی بخواند، باز به طور دینامیكی بارگذاری میكند.
--------------------------------------------------
dev.ir
در یكی از مقالات شركتSun، زبان جاوا را با این خصوصیات شرح میدهد:
جاوا یك زبان ساده، شی گرا، توزیع شده، تفسیر شده، قدرتمند، ایمن، با معماری خنثی، قابل حمل، با عملكرد سطح بالا چند نخ كشی شده و پویا است.
Sun تصدیق میکند كه به طور قطع این كلمات رشتههایی از واژههای متداول در زبان برنامه نویسی هستند، اما حقیقت این است كه این واژهها به طور ماهرانهای خصوصیات این زبان را شرح میدهند.
حال به برخی از خصلتهای جاوا در پشت این واژهها میپردازیم.
شی گرا: Object Oriented
جاوا یك زبان برنامه نویسی شیگرا است. برای یك برنامه نویس این به این معنا است كه به جای فكر كردن به قسمتهای رویه برنامه، باید به كاربرد داده ها و روشهایی كه روی آن داده ها عمل میكنند، توجه شود.
اگر شما به برنامه نویسی با اعلان رویه در C عادت كرده اید، ممكن است دریابید كه به هنگام استفاده از جاوا مجبور به تغییر در روش و چگونگی برنامهتان هستید. هنگامی كه فهمیدید این الگوی جدید چقدر قدرتمند است، به سرعت با آن هماهنگ میشوید .
در یك سیستم شی گرا، یك كلاس مجموعهای از دادهها و روشهایی است كه روی آن داده عمل میكنند. همراه بودن دادهها و متدها رفتار و حالت یك شی را بیان می دارد. كلاسها به صورت سلسله مراتبی مرتب شده اند، بنابر این یك زیر كلاس میتواند رفتار هایی را از كلاس بالاتر به ارث ببرد. یك كلاس سلسله مراتبی همیشه یك كلاس ریشه دارد كه كلاسی است با رفتار های كاملا عمومی .
جاوا به همراه دسته ی گسترده ای از كلاس هایی است كه در بسته هایی مرتب شده اند و شما میتوانید از آنها در برنامهی خود استفاده كنید.
یك شی كلاس(in the java.lang package) به عنوان ریشه كلاس سلسله مراتبی جاوا انجام وظیفه میكند .
درست است كه جاوا طوری طراحی شده است كه مثل C++ باشد و خاصیت های آن را داشته باشد ، اما هنگامی كه با آن كار كنید خواهید فهمید كه بسیاری از پیچیدهگی های آن زبان را از بین برده است .
اگر شما یك برنامه نویس C++ هستید حتما لازم است كه ساختار های شی گرایی در جاوا را به دقت مطالعه كنید. اگرچه تركیب و نحوه دستورات آن تقریبا شبیه C++ است، اما رفتار های آن خیلی مشابه نیست .
تفسیر شده: Interpreted
جاوا یك زبان تفسیر شده است. كامپایلر جاوا به جای ایجاد كد محلی ماشین، كد بایتی برای ماشین مجازی جاوا ایجاد میكند. برای اجرای دقیق برنامه، از مفسر جاوا برای اجرای كد های بایتی كامپایل شده استفاده میشود. به دلیل اینكه كدهای بایتی جاوا به نوع كامپیوتر بستگی ندارند، برنامههای جاوا میتوانند روی هر نوع كامپیوتری كه JVM (Java Virtual Machine) را دارند، اجرا شوند .
در محیط تفسیر شده، مرحله لینك استاندارد توسعه برنامه از دید كاربر پنهان است. اگر جاوا تنها یك مرحله لینك داشت، فقط بارگذاری كلاس جدید به محیط پردازش میشد كه این خصوصیت با چرخه كامپایل-لینك-اجرا ی آرام و طاقت فرسای زبان هایی مانند C یا C++ در تضاد است .
معماری خنثی و قابل حمل: Architecture Neutral and Portable
به دلیل اینكه برنامههای جاوا در فرمت كد بایتی با معماری خنثی كامپایل شده اند، برنامه كاربردی جاوا میتواند در هر سیستمی اجرا شود.
البته با این شرط كه آن سیستم توانایی پیاده سازی ماشین مجازی جاوا را داشته باشد. این مسئله تقریبا برای كاربردهای توزیع شده روی اینترنت و یا دیگر شبكههای ناهمگن مهم است. اما روش معماری خنثی برای كاربردهای بر مبنای شبكه مفید است .
به عنوان یك توسعه دهنده برنامه های كاربردی، در بازار نرم افزاری امروز ممكن است بخواهید مدلهای كاربردی خود را توسعه دهید، به طوری كه بتواند رویPc، مكینتاش و سیستم عامل Unix اجرا شود .با وجود گونههای مختلف Unix ،Windows روی Pc و مكینتاش قوی جدید، رفته رفته تولید نرم افزار برای همه انواع این كامپیوتر ها سخت میشود. اگر شما برنامهتان را در جاوا بنویسید میتواند روی همهی این كامپیوترها اجرا شود.
در حقیقت تفسیر شده بودن جاوا وتعریف یك استاندارد، معماری خنثی داشتن و فورمت كد بایتی آن از بزرگترین دلایل قابل حمل بودن آن به شمار می آیند .
اما جاوا باز از این هم بیشتر گام برمیدارد، با اطمینان حاصل كردن از اینكه هیچیك از جنبههای وابستگی اجرایی زبان را ندارد. برای مثال جاوا به طور صریح اندازه هریك از انواع داده را تعریف میكند كه این با C تفاوت دارد، برای مثال هریک از انواع صحیح میتواند بسته به نوع کامپیوتر16-32 یا 64 بیت طول داشته باشد .
هنگامی که به صورت تکنیکی امکان نوشتن برنامههای غیر قابل حمل در جاوا فراهم شد، جلوگیری از چند خاصیت وابسته به نوع کامپیوتر که توسط جاوا API تولید شده و به طور قطع قابل حمل نوشته شده است، آسان است .
یك برنامه جاوا به تولید كنندگان نرم افزار كمك میكند تا از قابل حمل بودن كد هایشان اطمینان حاصل كنند. برنامه نویسان فقط برای پرهیز از دام غیر قابل حمل بودن برنامه احتیاج به یك تلاش ساده دارند كه شعار تجارتی شركتSun را زنده نگهدارند و آن شعار این است :
" یك بار بنویس ، همه جا اجرا كن" .
پویا و توزیع شده: Dynamic and Distributed
جاوا یك زبان پویا است. هر كلاس جاوا میتواند در هر زمانی روی مفسر جاوا بارگذاری شود. سپس این كلاسهای بارگذاری شدهی پویا میتوانند به صورت پویا معرفی شوند. حتی كتابخانه كدهای محلی میتواند به طور پویا بارگذاری شود. كلاسها در جاوا با كلاس Class فراخوانی میشوند؛ شما میتوانید به طور پویا در مورد یك كلاس در زمان اجرا اطلاعاتی بدست بیاورید. این خصوصیت در جاوا به طور درستی موجود است . با وجود بازتاب API اضافه شده (Application Program Interface ) كه به برنامه ساز امكان میدهد كه با برنامه از طریق یك برنامه كاربردی دیگر ارتباط برقرار كند .
جاوا حتی با نام زبان توزیع شده نیز خوانده میشود. به طور ساده این به این معنا است كه این زبان پشتیبانی سطح بالایی برای شبكه به وجود می آورد. برای مثال كلاس URL و كلاس های مرتبط با آن در بستهی ava.net ، خواندن فایلهای دوردست را به همان سادگی خواندن فایلهای محلی كرده است. به طور مشابه در جاوا 1-1، احضار روش كنترلی RMI (Remote Method Invocation ) ، API به یك برنامه جاوا اجازه میدهد كه روشهایی از اشیاء دور دست جاوا را به همان صورتی كه اگر آن اشیاء محلی بودند آنها را میخواند، بخواند .( جاوا حتی از سیستم شبكهای سطح پایین كه شامل آدرس مقصد و مسیر جریانی كه توسط سوكتها متصل شده است ، نیز پشتیبانی میكند).
طبیعت توزیع شدهی جاوا زمانیكه با امكانات پویای بارگذاری كلاس همراه میشود، واقعا درخشنده است . این خصوصیات با هم این امكان را برای مفسر جاوا به وجود میآورند كه كدها را از اینترنت بارگذاری و اجرا كند. ( همان طور كه بعدا خواهیم دید جاوا باعث میشود كه با وجود ابزار قدرتمند و ایمن این كار به طور مطمئن انجام شود). این چیزی است كه در هنگام بارگذاری و اجرای یك برنامه كاربردی از اینترنت توسط مرورگر وب، اتفاق میافتد. اما داستان پیچیده تر از این هم میتواند باشد. تصور كنید یك پردازشگر كلمه چند رسانهای در جاوا نوشته شده است. وقتی از این برنامه پرسیده میشود كه چند نوع از دادههایی را كه قبلا هرگز وارد نشده را نمایش دهد، ممكن است به طور دینامیكی یك كلاس را كه میتواند داده را شناسایی كند، از شبكه بارگذاری كند و بعد كلاس دیگری را كه بتواند داده را از درون یك پوشه تركیبی بخواند، باز به طور دینامیكی بارگذاری میكند.
--------------------------------------------------
dev.ir