X
تبلیغات
www.barnamenevisi.blogfa.com
در مورد زبان های برنامه نویسی

آموزش: چگونه فولدر دلخواه را رمزگذاری کنیم

Winrar

سئوالی که برای بسیاری از کاربران پیش می آید این است که، اگر کامپیوتری داشته باشیم که به صورت مشترک با افراد دیگر از آن استفاده می کنیم و تعدادی فایل های شخصی در آن وجود داشته باشد، چطور می توانیم این فایل های شخصی را از دسترس سایرین خارج کنیم؟ در ادامه روش های مختلف خارج کردن فایل های شخصی از دسترس سایر کاربران را به شما آموزش می دهیم.

کاملا منطقی است که این سئوال برای بسیاری از کاربران پیش بیاید. چراکه ویندوز هیچ راه مفیدی برای رمزگذاری فولدرها ارائه نکرده است. یکی از بهترین روش ها فشرده سازی فایل یا فولدرها و رمز گذاری برروی فایل فشرده است.

شما می توانید فایل و فولدر های شخصی خود را توسط برنامه های مختلف فشرده و رمزگذاری کنید. یکی از بهترین نرم افزارهای فشرده سازی که محبوبیت بسیار زیادی نیز دارد، WinRar است. شما می توانید این برنامه رایگان و بسیار مفید را از وب سایت RarLab دریافت کنید.

پس از نصب این برنامه، با کلیک راست کردن روی هر فولدر، گزینه Add to archive را انتخاب کنید. در پنجره ای که باز می شود، برگه Advanced را انتخاب کنید و روی دکمه Set Password کلیک کنید تا رمز عبور مورد نظر را اعمال کنید. هر بار که نیاز داشته باشید فولدر را باز کنید باید روی آن کلیک راست کرده و گزینه Extract را بزنید تا پس از وارد کردن رمز عبور، فایل زیپ مجددا به شکل فولدر تبدیل شود. به خاطر داشته باشید پس از فشرده و رمزگذاری فایل یا فولدرهای مورد نظر می بایست اصل فایل یا فولدرهای را حذف کنید و از فایل فشرده استفاده نمایید.

از دیگر برنامه هایی که می تواند نیاز شما را برطرف کند، برنامه 7-Zip است.

البته اگر دوست ندارید فولدر های شما به حالت زیپ و فشرده در بیایند می توانید از برنامه Folder Lock یا Protected Folder استفاده کنید. برای خرید برنامه باید هزینه کنید ولی در سایت های مختلف می توانید برنامه Crack شده این دو نرم افزار را تهیه کنید. این برنامه ها، فایل های شما را زیپ نمی کنند و تنها روی آنها Password قرار می دهد.

اگر سئوالی در مورد هر کدام از برنامه ها دارید و یا پیشنهاد بهتری برای قفل گذاشتن روی فولدر ها دارید، پیشنهاد خود را در بخش نظرات، برای ما ارسال کنید.

نوشته شده توسط نیلوفر جمشیدی در ساعت 14:48 | لینک  | 

 

همه چیز در مورد سیستم عامل آندروید

کمتر از سه سال پیش زمانی که سیستم عامل آندروید برای نخستین بار توسط کنسرسیومی به رهبری گوگل معرفی شد، کمتر کسی پیش‌بینی می‌کرد که در این مدت کوتاه این سیستم عامل موفق به پیشی گرفتن از سیستم عامل‌های پرطرفدار و جا افتاده‌ تلفن همراه چون ویندوزموبایل، لینوکس و پالم شده و خود را به عنوان تهدیدی جدی برای رقبایی چون سیمبین، RIM و آیفون نشان دهد. آندروید پا را از این هم فراتر گذاشته و علاوه بر حضور قدرتمند در بازار تلفن‌های همراه هوشمند، وارد عرصه‌های دیگری مانند تبلت‌ها و حتی تلویزیون نیز شده است.


کمتر از سه سال پیش زمانی که سیستم عامل آندروید برای نخستین بار توسط کنسرسیومی به رهبری گوگل معرفی شد، کمتر کسی پیش‌بینی می‌کرد که در این مدت کوتاه این سیستم عامل موفق به پیشی گرفتن از سیستم عامل‌های پرطرفدار و جا افتاده‌ تلفن همراه چون ویندوزموبایل، لینوکس و پالم شده و خود را به عنوان تهدیدی جدی برای رقبایی چون سیمبین، RIM و آیفون نشان دهد. آندروید پا را از این هم فراتر گذاشته و علاوه بر حضور قدرتمند در بازار تلفن‌های همراه هوشمند، وارد عرصه‌های دیگری مانند تبلت‌ها و حتی تلویزیون نیز شده است.

به نوشته ی هومن کبیری،  رشد اعجاب‌آور آندروید به گونه‌ای بوده است که بسیاری از کارشناسان پیش‌بینی می‌کنند این سیستم عامل تا سال ۲۰۱۲ دومین سیستم عامل پرطرفدار تلفن‌های همراه جهان خواهد بود. تخمینی که نه تنها دور از دسترس نمی‌نماید بلکه بسیار محافظه‌کارانه به شمار می‌رود. چرا که با روند رشد این سیستم عامل و اقبال شرکت‌های مختلف به آن، کسب رتبه اول نیز برای آندروید چندان دور از ذهن نیست. مروری خواهیم داشت بر تاریخچه و روند شکل‌گیری این سسیتم عامل، موفقیت‌ها و چشم‌انداز آتی آن.

معنای آندروید
پیش از ورود به اطلاعات مربوط به آندروید، نخست به نام آن می‌پردازیم. بنابر ترجمه دیکشنری کمبریج، آندروید این گونه تعریف شده است: «یک ربات (ماشینی که به وسیله کامپیوتر کنترل می‌شود) که به گونه‌ای ساخته شده تا شکل ظاهری شبیه به انسان داشته باشد.» شاید بتوان نزدیک‌ترین معنی در زبان فارسی به آندروید را آدم آهنی یا آدم ماشینی دانست.

از مدیریت شرکت کوچک آندروید تا مدیریت پروژه در خلاق‌ترین شرکت جهان
در ماه ژوئیه سال ۲۰۰۵ گوگل شرکت آندروید در پالو آلتوی کالیفرنیا را خرید. شرکت کوچک آندروید که توسط اندی روبین، ریچ ماینرز، نیک سیرز و کریس وایت پایه‌گذاری شده بود، در زمینه تولید نرم‌افزار و برنامه‌های کاربردی برای تلفن‌های همراه فعالیت می‌کرد. اندی روبین مدیر ارشد اجرایی این شرکت پس از پیوستن آندروید به گوگل به سمت قائم‌مقام مدیریت مهندسی این شرکت و مسئول پروژه آندروید در گوگل منصوب شد.

در واقع می‌توان روبین را پایه‌گذار آندروید دانست. چرا که وی علاوه بر اینکه ایده تولید آندروید را در شرکت کوچک خود پرورش داد، در سمت مدیر این پروژه در شرکت گوگل توانست ایده خود را پیاده‌سازی کند و سیستم عامل آندروید را با نام شرکت کوچک پیشین خود روانه بازار نماید.

تیم آندروید به رهبری روبین فعالیت خود را برای تولید پلتفرم موبایل مبتنی بر کرنل لینوکس آغاز کردند. درز اخباری از فعالیت‌های این تیم به خارج از گوگل، سبب بروز شایعاتی مبنی بر تمایل گوگل به تولید تلفن همراه در اواخر سال ۲۰۰۶ گردید. این شایعات زمانی بیشتر قوت گرفت که در سپتامبر ۲۰۰۷ نشریه اینفورمیشن ویک در گزارشی خبر از ثبت چندین حق امتیاز و اختراع در حوزه تلفن همراه توسط گوگل داد.

تولد یک آدم آهنی!
با اعلام زمان کنفرانس خبری شرکت گوگل در نوامبر سال ۲۰۰۷ دیگر تمامی رسانه‌ها و افکار عمومی جهان چشم انتظار مشاهده نخستین تلفن همراه ساخت گوگل بودند. ولی غافلگیری بزرگ رخ داد. هیچ خبری از «یک» گوشی تلفن همراه نبود بلکه خبر داغ آن روز در مورد ورود صدها تلفن همراه در سال‌های پیش رو بود که توسط شرکت‌های مختلف تولید می‌شد. «اتحادیه گوشی باز» یا Open Handset Alliance در روز ۵ نوامبر ۲۰۰۷ اعلام موجودیت کرد.

۳۴ شرکت فعال در زمینه تولید نرم‌افزار، تولید گوشی‌های تلفن همراه، اپراتور تلفن همراه و تولید کننده نیمه رساناها و پردازنده‌های تلفن همراه اعضای مؤسس این اتحادیه بودند. در میان نام‌های مشهور در بین اعضای مؤسس، شرکت‌هایی چون سامسونگ، LG، موتورولا، HTC، T-Mobile، NTT DoCoMo، اینتل، Nvidia، تگزاس اینسترومنتس، کوآلکام، برادکام، تلفونیکا، اسپرینت، eBay و البته گوگل به چشم می‌خوردند. اریک اشمیت مدیر ارشد اجرایی گوگل در این مراسم گفت: «اعلام امروز بسیار جاه‌طلبانه‌تر از معرفی تنها «یک» تلفن گوگلی است که در چند هفته اخیر توسط رسانه‌ها پیش‌بینی شده بود.

از دیدگاه ما پلتفرمی که ما ارائه کرده‌ایم، هزاران تلفن گوناگون را به بازار روانه خواهد کرد.» نخستین گوشی مبتنی بر آندروید توسط شرکت HTC با همکاری T-Mobile تولید شد. این گوشی که به فاصله کمتر از یک سال از تشکیل اتحادیه Open Handset Alliance یعنی در ۲۲ اکتبر ۲۰۰۸تولید شد، در بازارهای مختلف به نام‌های HTC Dream، T-Mobile G1 و Era G1 به بازار عرضه گردید.

آدم آهنی تقویت می‌شود
نهم دسامبر ۲۰۰۸ روز تاریخی دیگری برای آندروید بود. در این روز ۱۴ عضو جدید از نام‌های معروف صنعت تلفن همراه جهان به اتحادیه Open Handset Alliance پیوستند. در بین این نام‌ها باید به سونی اریکسون، اریکسون، توشیبا، آسوس، گارمین، هوآوی و آرم اشاره کرد. روند پیوستن شرکت‌های بزرگ به اتحادیه تا به امروز نیز ادامه داشته است و شرکت‌هایی چون ایسر، آلکاتل، لنوو، شارپ، فاکسکان، NEC، کیوسرا، NXP، ST-Ericsson، مارول، ZTE و دل نیز از جمله شرکت‌هایی بوده‌اند که به جمع پشتیبانی کنندگان آندروید پیوسته‌اند.

کپی‌رایت و حق امتیاز
حق امتیاز آندروید به صورت اپن سورس بر اساس حق امتیاز آپاچی یا Apache License ارائه می‌گردد. بر این اساس شرکت‌های عضو اتحادیه می‌توانند با دسترسی به کدهای اصلی آندروید آن را مطابق دلخواه خود تغییر دهند و کد تغییر یافته را بدون عودت دادن برای خود حفظ کنند.

ویرایش‌های آندروید با طعم شیرینی‌جات و دسرها!
گوگل ویرایش‌های گوناگون آندروید را علاوه بر شماره ویرایش با نام یک شیرینی یا دسر معرفی می‌کند. این نام البته از ترتیب حروف الفبا برای حرف اول آن نام نیز پیروی می‌کند به گونه‌ای که ویرایش‌های منتشر شده آندروید تا به امروز به این نام‌ها بوده‌اند:

Cupcake که نوعی کیک کوچک شبیه به کیک یزدی ایرانی است ولی با اندازه‌ای کمی بزرگ‌تر برای ویرایش ۵/۱ آندروید، Donut که در ایران هم به همان نام شهرت دارد و نوعی پیراشکی محسوب می‌شود، برای ویرایش ۶/۱، Éclair که نوعی شیرینی خامه‌ای است شبیه به لطیفه ولی با اندازه بزرگ‌تر برای ویرایش‌های ۲ و ۱/۲، Froyo (مخفف Frozen yogurt ) نوعی دسر است که با ماست یخ زده تهیه می‌شود برای ویرایش ۲/۲٫ نام ویرایش بعدی آندروید هم Gingerbread یا نان زنجفیلی گذاشته شده است. همان گونه که مشاهده می‌شود ترتیب نام‌های شرینی‌ها و دسرها بر اساس حروف الفبا است. حالا که طعم این ویرایش‌ها را چشیدیم شاید بهتر باشد سری هم به ویژگی‌های فنی آنها بزنیم.

 


ادامه مطلب
نوشته شده توسط نیلوفر جمشیدی در ساعت 14:43 | لینک  | 

 

زبان‌های برنامه‌نویسی ساختارهای زبانی دستورمداری در رایانه‌ها هستند که به‌وسیلهٔ آنها می‌توان یک الگوریتم را به‌وسیلهٔ ساختارهای دستوری متفاوت برای اجرای رایانه توصیف کرد و با این روش امکان نوشتن برنامه جهت تولید نرم‌افزارهای جدید بوجود می‌آید. معمولاً هر زبان برنامه‌نویسی دارای یک محیط نرم‌افزاری برای وارد کردن متن برنامه، اجرا، همگردانی و رفع اشکال آن هستند. عموماً زبانهای برنامه نویسی را به پنج نسل تقسیم می‌کنند:

  • نسل اول زبان ماشین - زبان صفرو یک
  • نسل دوم زبانهایی مانند اسمبلی -قابل فهم تر برای انسان
  • نسل سوم زبانهایی مانند کوبول و پی ال وان و... -دستورات قابل فهم تر برای انسان و نیاز به کمپایلرها
  • نسل چهارم مثل زبانهای اوراکل و فاکس پرو و اس کیو الها - نزدیک به محاوره‌های انسانی
  • نسل پنج زبانهایی مانند prolog , ops5 - تمرکز بر حل مسئله و استفاده از الگوریتمهای نوشته شده توسط برنامه نویس

یک زبان برنامه نویسی یک زبان مصنوعی است که برای بیان محاسباتی که توسط یک ماشین (مخصوصا رایانه) قابل انجام است، طراحی شده‌است.زبان‌های برنامه نویسی برای ایجاد برنامه‌هایی به کار می‌روند که رفتار یک ماشین را مشخص می‌کنند، الگوریتم دقیق را بیان می‌کنند، و یا روشی برای ارتباط انسانند. بسیاری از زبان‌های برنامه نویسی تعدادی قالب از ویژگی‌های نوشته شده دستوری(syntax) و معناشناسی (semantics) دارند، چرا که رایانه‌ها دستورات دقیقا مشخص نیاز دارند. برخی توسط سند خصوصیات (specification document) تعیین شده‌اند. (برای مثال یک استاندارد ISO)، در حالی که برخی دیگر دارای پیاده سازی غالبی می‌باشند.(مانند Perl) اولین زبان برنامه نویسی به قبل از اختراع رایانه باز می‌گردد، و برای هدایت رفتار ماشین‌هایی مانند دستگاه‌های نساجی اتوماتیک و نوازنده‌های پیانو به کار می‌رفت. هزاران زبان برنامه نویسی خلق شده‌اند، بیشتر در زمینهٔ رایانه، زمینه‌ای که هر ساله بسیاری دیگر ایجاد می‌شوند.

تقسیم‌بندی

زبان‌های برنامه نویسی را می‌توان از چهار دیدگاه متفاوت مورد بررسی قرار داده و تقسیم بندی کرد: الف)روش‌های برنامه نویسی ۱-زیر روالی ۲-ساخت یافته ۳-مدولار ۴-شئ گرا ب)نزدیکی به زبان ماشین ۱-سطح پایین ۲-سطح میانی ۳-سطح بالا ج)نوع ترجمه ۱-مفسری ۲-کامپایلری د)رابط برنامه نویسی ۱-مبتنی بر متن ۲-مبتنی بر گرافیک (ویژوال)


تعاریف

ویژگی‌هایی که غالبا برای تشکیل یک زبان برنامه نویسی مهم شمرده می‌شوند:

  • تابع :یک زبان برنامه نویسی، زبانی است که برای نوشتن برنامه‌های رایانه‌ای به کار می‌رود که رایانه‌ای را برای انجام محاسبات یا اجرای الگوریتم و یا احتمالا کنترل دستگاه‌های خارجی مثل چاپگر، ربات و... درگیر می‌کنند.
  • هدف: زبان‌های برنامه نویسی با زبان‌های طبیعی تفاوت دارند و آن اینکه زبان‌های طبیعی فقط برای فعل و انفعالات بین مردم به کار می‌روند، در حالیکه زبان‌های برنامه نویسی همچنین به انسانها اجازه می‌دهد که از طریق دستورات با ماشین‌ها ارتباط برقرار کنند. برخی زبان‌های برنامه نویسی بوسیله یک دستگاه استفاده می‌شوند تا دستگاه دیگری را کنترل کند. برای مثال برنامه‌های پست اسکریپت(post script) غالبا توسط برنامه دیگری برای کنترل یک چاپگر و یا نمایشگر ایجاد می‌شوند.
  • ساختارها: زبان‌های برنامه نویسی ممکن است ساختارهایی برای تعریف و تغییر داده ساختارها یا کنترل جریان اجرا داشته باشند.
  • توان بیانگر: نظریه محاسبات، زبان‌ها را بوسیله محاسباتی که توان بیان آنها را دارند طبقه بندی می‌کند. تمام زبان‌های "کامل تورینگ" می‌توانند مجموعه یکسانی از الگوریتم‌ها را پیاده سازی کنند.ANSI/ISO SQL و Charity مثال‌هایی هستند از زبان‌هایی که کامل تورینگ نیستند، ولی غالبا زبان برنامه نویسی نامیده می‌شوند.

برخی مولفین اصطلاح" زبان برنامه نویسی" را محدود به آنهایی می‌کنند که می‌توانند تمام الگوریتم‌های ممکن را پیاده سازی کنند، گاهی اوقات اصطلاح" زبان رایانه" برای زبان‌های برنامه نویسی محدودتر به کار می‌رود. زبان‌های غیر محاسباتی، مانند زبان‌های مارک آپ(markup) HTML یا گرامرهای قراردادی مثل BNF، معمولاً زبان برنامه نویسی محسوب نمی‌شوند. یک زبان برنامه نویسی(که می‌تواند کامل تورینگ نباشد) ممکن است در این زبان‌های غیر محاسباتی (میزبان) تعبیه شوند.

کاربرد

زبان برنامه نویسی یک مکانیزم ساخت یافته برای تعریف داده‌ها، و عملیات یا تبدیل‌هایی که ممکن است بطور اتوماتیک روی آن داده انجام شوند، فراهم می‌کند. یک برنامه نویس از انتزاعات آماده در زبان استفاده می‌کند تا مفاهیم به کار رفته در محاسبات را بیان کند. این مفاهیم به عنوان یک مجموعه از ساده‌ترین عناصر موجود بیان می‌شوند(مفاهیم ابتدایی نامیده می‌شوند). زبان‌های برنامه نویسی با غالب زبان‌های انسانی تفاوتی دارد و آن این است که نیاز به بیان دقیق تر و کامل تری دارد. هنگام استفاده از زبان‌های طبیعی برای ارتباط با دیگر انسان‌ها، نویسندگان و گویندگان می‌توانند مبهم باشند و اشتباهات کوچک داشته باشند، و همچنان انتظار داشته باشند که مخاطب آنها متوجه شده باشد. اگرچه، مجازا، رایانه‌ها "دقیقا آنچه که به آنها گفته شده را انجام می‌دهند." و نمی‌توانند "بفهمند" که نویسنده دقیقا چه کدی مد نظر نویسنده بوده‌است] البته امروزه برنامه‌هایی برای انجام این کار تولید شده‌اند و تلاش‌های بسیاری در این زمینه انجام شده ولی هنوز به نتیجهٔ رضایت بخشی نرسیده است[. ترکیب تعریف زبان، یک برنامه، و ورودی برنامه بطور کامل رفتار خروجی را به هنگام اجرای برنامه (در محدوده کنترل آن برنامه) مشخص می‌کند. برنامه‌های یک رایانه ممکن است در یک فرآیند ناپیوسته بدون دخالت انسان اجرا شوند، یا یک کاربر ممکن است دستورات را در یک مرحله فعل و انفعال مفسر تایپ کند.در این حالت "دستور"ها همان برنامه‌ها هستند، که اجرای آنها زنجیروار به هم مرتبطند.به زبانی که برای دستور دادن به برنامه‌ای استفاده می‌شود، زبان اسکریپت می‌گویند. بسیاری از زبان‌ها کنار گذاشته شده‌اند، برای رفع نیازهای جدید جایگزین شده‌اند، با برنامه‌های دیگر ترکیب شده‌اند و در نهایت استعمال آنها متوقف شده‌است. با وجود اینکه تلاش‌هایی برای طراحی یک زبان رایانه" کامل" شده‌است که تمام اهداف را تحت پوشش قرار دهد، هیچ یک نتوانستند بطور کلی این جایگاه را پر کنند. نیاز به زبان‌های رایانه‌ای گسترده از گستردگی زمینه‌هایی که زبان‌ها استفاده می‌شوند، ناشی می‌شود: • محدوده برنامه‌ها از متون بسیار کوچک نوشته شده توسط افراد عادی تا سیستم‌های بسیار بزرگ نوشته شده توسط صدها برنامه نویس است • توانایی برنامه نویس‌ها: از تازه کارهایی که بیش از هر چیز به سادگی نیاز دارند تا حرفه‌ای‌هایی که با پیچیدگی قابل توجهی کنار می‌آیند. • برنامه‌ها باید سرعت، اندازه و سادگی را بسته به سیستم‌ها از ریزپردازندها تا ابر رایانه‌ها متناسب نگه دارند. • برنامه‌ها ممکن است یک بار نوشته شوند و تا نسل‌ها تغییر نکنند، و یا ممکن است پیوسته اصلاح شوند. • در نهایت، برنامه نویس‌ها ممکن است در علایق متفاوت باشند: آنها ممکن است به بیان مسائل با زبانی خاص خو گرفته باشند.

یک سیر رایج در گسترش زبان‌های برنامه نویسی این است که قابلیت حل مسائلی با درجات انتزاعی بالاتری را اضافه کنند. زبان‌های برنامه نویسی اولیه به سخت‌افزار رایانه گره خورده بودند. همانطور که زبان‌های برنامه نویسی جدید گسترش پیدا کرده‌اند، ویژگی‌هایی به برنامه‌ها افزوده شده که به برنامه نویس اجازه دهد که ایده‌هایی که از ترجمه ساده به دستورات سخت‌افزار دورتر هستند نیز استفاده کند. چون برنامه نویس‌ها کمتر به پیچیدگی رایانه محدود شده‌اند، برنامه‌های آنها می‌تواند محاسبات بیشتری با تلاش کمتر از سوی برنامه نویس انجام دهند. این به آنها این امکان را می‌دهد که کارایی بیشتردر واحد زمان داشته باشند. "پردازنده‌های زبان طبیعی" به عنوان راهی برای ازبین بردن نیاز به زبان‌های اختصاصی برنامه نویسی پیشنهاد شده‌اند. هرچند، این هدف دور است و فواید آن قابل بحث است. "ادسگر دیجسترا" موافق بود که استفاده از یک زبان رسمی برای جلوگیری از مقدمه سازی ساختارهای بی معنی واجب است، و زبان برنامه نویسی طبیعی را با عنوان "احمقانه" رد کرد، "آلن پرلیس" نیز مشابها این ایده را رد کرد. مطابق با متدولوژی نامتجانس استفاده شده توسط langpop.com در سال ۲۰۰۸، ۱۲ زبان پرکاربرد عبارتند از: C, C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby, Shell, SQL, and Visual Basic.

المان‌ها

تمام زبان‌های بزنامه نویسی تعدادی بلوک‌های ابتدایی برای توضیح داده و پردازش یا تبدیل آنها(مانند جمع کردن دو عدد با انتخاب یک عضو از یک مجموعه)دارند. این " عناصرابتدایی" بوسیله قوانین معناشناسی و دستوری تعریف می‌شوند که ساختار و معنای مربوطه را توضیح می‌دهند.

دستور(syntax)

فرم سطحی یک زبان برنامه نویسی دستور آن نامیده می‌شود. غالب زبان‌های برنامه نویسی کاملا متنی اند؛ و از دنبالهٔ متون شامل کلمات، اعداد، نشانگذاری، بسیار شبیه زبان نوشتاری طبیعی استفاده می‌کنند. از طرف دیگر، برنامه‌هایی نیز وجود دارند که بیشتر گرافیکی اند، و از روابط بصری بین سمبل‌ها برای مشخص کردن برنامه استفاده می‌کنند. دستور یک زبان ترکیبات ممکن سمبل‌ها برای ایجاد یک برنامهٔ درست را از نظر دستوری مشخص می‌کند. معنایی که به یک ترکیب سمبل‌ها داده می‌شود با معناشناسی اداره می‌شود(قراردادی یا نوشته شده در پیاده سازی منبع). از آنجا که اغلب زبان‌ها متنی هستند، این مقاله دستور متنی را مورد بحث قرار می‌دهد.

دستور زبان برنامه نویسی معمولاً بوسیله ترکیب عبارات معین(برای ساختار لغوی) و فرم توضیح اعمال(برای ساختار گرامری) تعریف می‌شوند. متن زیر یک گرامر ساده، به زبان lisp است: expression ::= atom | list atom  ::= number | symbol number  ::= [+-]?['۰'-'۹']+ symbol  ::= ['A'-'Za'-'z'].* list  ::= '(' expression* ')' این گرامر موارد ذیل را مشخص می‌کند:

  • یک عبارت یا atom است و یا یک لیست
  • یک atom یا یک عدد است و یا یک سمبل
  • یک عدد دنباله ناشکسته‌ای از یک یا تعداد بیشتری اعداد دهدهی است، که یک علامت مثبت و یا منفی می‌تواند پیش از آن بیاید.
  • یک سمبل حرفی است که بعد از هیچ یا تعدادی کاراکتر (جز فاصله) می‌آید.
  • یک لیست تعدادی پرانتز است که می‌تواند صفر یا چند عبارت در خود داشته باشد.

"۱۲۳۴۵"، "()"، "(a b c۲۳۲ (۱))" مثال‌هایی هستند از دنباله‌های خوش فرم در این گرامر.

همه برنامه‌هایی که از لحاظ دستوری درست هستند، از نظر معنا درست نیستند. بسیاری از برنامه‌های درست دستوری، بد فرم اند، با توجه به قوانین زبان؛ و ممکن است (بسته به خصوصیات زبان و درست بودن پیاده سازی) به خطای ترجمه و یا استثنا(exception) منتج شود. در برخی موارد، چنین برنامه‌هایی ممکن است رفتار نامشخصی از خود نشان دهند. حتی اگر یک برنامه در یک زبان به خوبی بیان شده باشد، ممکن است دقیقا مطلوب نویسنده آن نبوده باشد.

به عنوان مثال در زبان طبیعی، ممکن نیست به برخی از جملات درست از لحاظ گرامری، معنای خاصی اتلاق کرد و یا ممکن است جمله نادرست باشد:

  • "ایده‌های بی رنگ سبز با خشم می‌خوابند."از نظر دستوری خوش فرم است ولی معنای مورد قبولی ندارد.
  • "جان یک مجرد متاهل است." از نظر دستوری درست است، ولی معنایی را بیان می‌کند که نمی‌تواند درست باشد.

این قسمت از زبان C از نظر دستوری درست است، اما دستوری را انجام می‌دهد که از نظرمعنایی تعریف نشده است(چون p یک اشاره گر خالی است، عمل p->real,p->im معنای خاصی ندارد.) complex *p = NULL; complex abs_p = sqrt (p->real * p->real + p->im * p->im);

گرامر مورد نیاز برای مشخص کردن یک زبان برنامه نویسی می‌تواند با جایگاهش در "سلسله مراتب چامسکی" طبقه بندی شود. دستور اغلب زبان‌های برنامه نویسی می‌تواند بوسیله یک گرامر نوع ۲ مشخص گردد، برای مثال، گرامرهای مستقل از متن.

معناشناسی ایستا

معناشناسی ایستا محدودیت‌هایی بر روی ساختار مجاز متن‌ها تعیین می‌کند که بیان آنها در فرمول دستوری استاندارد مشکل و یا غیر ممکن است. مهمترین این محدودیت‌ها به وسیله سیستم نوع گذاری انجام می‌شود.

سیستم نوع گذاری

یک سیستم نوع گذاری مشخص می‌کند که یک زبان برنامه نویسی چگونه مقادیر و عبارات را در نوع(type) دسته بندی می‌کند، چگونه می‌تواند آن نوع‌ها را تغییر دهد و رفتار متقابل آن‌ها چگونه‌است. این کارعموما توضیح داده ساختارهایی که می‌توانند در آن زبان ایجاد شوند را شامل می‌شود. طراحی و مطالعه سیستم‌های نوع گذاری بوسیله ریاضیات قراردادی را تئوری نوع گذاری گویند.

زبان‌های نوع گذاری شده و بدون نوع گذاری

یک زبان نوع گذاری شده‌است اگر مشخصات هر عملیات، نوع داده‌های قابل اجرا توسط آن را با نشان دادن نوع‌هایی که برای آنها قابل اجرا نیست، تعیین کند. برای مثال، "این متن درون گیومه قرار دارد" یک رشته‌است. در غالب زبان‌های برنامه نویسی، تقسیم یک رشته با یک عدد معنایی ندارد. در نتیجه غالب زبان‌های برنامه نویسی مدرن ممکن است اجرای این عملیات را توسط برنامه‌ها رد کنند. در برخی زبان‌ها، عبارات بی معنی ممکن است هنگام ترجمه(compile) پیدا شود(چک کننده نوع ایستا)، و توسط کامپایلر رد شود، در حالی که در سایر برنامه‌ها، هنگام اجرا پیدا شود.(چک کننده نوع دینامیک) که به استثنای در حال اجرا منتج شود(runtime exception). حالت خاص زبان‌های نوع دار زبان‌های تک نوعند. این زبان‌ها غالبا اسکریپتی و یا مارک آپ هستند، مانند rexx وSGML و فقط یک داده گونه دارند—غالبا رشته‌های کاراکتری که هم برای داده‌های عددی و هم برای داده‌های سمبلی کاربرد دارند. در مقابل، یک زبان بدون نوع گذاری، مثل اکثر زبان‌های اسمبلی، این امکان را می‌دهد که هر عملیاتی روی هر داده‌ای انجام شود، که معمولاً دنباله‌ای از بیت‌ها با طول‌های متفاوت در نظر گرفته می‌شوند. زبان‌های سطح بالا که بی نوع هستند شامل زبان‌های ساده رایانه‌ای و برخی از انواع زبان‌های نسل چهارم.

در عمل، در حالیکه تعداد بسیار کمی از دیدگاه نظریه نوع، نوع گذاری شده تلقی می‌شوند(چک کردن یا رد کردن تمام عملیات‌ها)، غالب زبان‌های امروزی درجه‌ای از نوع گذاری را فراهم می‌کنند. بسیاری از زبان‌های تولیدکننده راهی را برای گذشتن یا موقوف کردن سیستم نوع فراهم می‌کنند.

نوع گذاری ایستا و متحرک

در نوع گذاری ایستا تمام عبارات نوع‌های خود را قبل از اجرای برنامه تعیین می‌کنند(معمولا در زمان کامپایل). برای مثال، ۱ و (۲+۲) عبارات عددی هستند؛ آنها نمی‌توانند به تابعی که نیاز به یک رشته دارد داده شوند، یا در متغیری که تعریف شده تا تاریخ را نگه دارد، ذخیره شوند.

زبان‌های نوع گذاری شده ایستا می‌توانند با مانیفست نوع گذاری شوند یا با استفاده از نوع استنباط شوند. در حالت اول، برنامه نویس بیشتر صریحا نوع‌ها را در جایگاه‌های منتنی مشخص می‌نویسد(برای مثال، در تعریف متغیرها). در حالت دوم، کامپایلر نوع عبارات و تعریف‌ها را بر اساس متن استنباط می‌کند. غالب زبان‌های مسیر اصلی(mainstream) ایستا نوع گذاری شده، مانند C#,C++ و Java، با مانیفست نوع گذاری می‌شوند

نوع گذاری قوی و ضعیف

نوع گذاری ضعیف این امکان را ایجاد می‌کند که با متغیری به جای متغیری دیگر برخورد شود، برای مثال رفتار با یک رشته به عنوان یک عدد. این ویژگی بعضی اوقات ممکن است مفید باشد، اما ممکن است باعث ایجاد برخی مشکلات برنامه شود که موقع کامپایل و حتی اجرا پنهان بمانند.

نوع گذاری قوی مانع رخ دادن مشکل فوق می‌شود. تلاش برای انجام عملیات روی نوع نادرست متغیر منجر به رخ دادن خطا می‌شود. زبان‌هایی که نوع گذاری قوی دارند غالبا با نام "نوع-امن" و یا امن شناخته می‌شوند. تمام تعاریف جایگزین برای "ضعیف نوع گذاری شده" به زبان‌ها اشاره می‌کند، مثل perl, JavaScript, C++، که اجازه تعداد زیادی تبدیل نوع داخلی را می‌دهند. در جاوااسکریپت، برای مثال، عبارت ۲*x به صورت ضمنی x را به عدد تبدیل می‌کند، و این تبدیل موفقیت آمیز خواهد بود حتی اگر x خالی، تعریف نشده، یک آرایه، و یا رشته‌ای از حروف باشد. چنین تبدیلات ضمنی غالبا مفیدند، اما خطاهای برنامه نویسی را پنهان می‌کنند.

قوی و ایستا در حال حاضر عموما دو مفهوم متعامد فرض می‌شوند، اما استفاده در ادبیات تفاوت دارد، برخی عبارت "قوی نوع گذاری شده" را به کار می‌برند و منظورشان قوی، ایستایی نوع گذاری شده‌است، و یا، حتی گیچ کننده تر، منظورشان همان ایستایی نوع گذاری شده‌است. بنابراین C هم قوی نوع گذاری شده و هم ضعیف و ایستایی نوع گذاری شده نامیده می‌شود.

معناشناسی اجرا

وقتی که داده مشخص شد، ماشین باید هدایت شود تا عملیات‌ها را روی داده انجام دهد. معناشناسی اجرا ی یک زبان تعیین می‌کند که چگونه و چه زمانی ساختارهای گوناگون یک زبان باید رفتار برنامه را ایجاد کنند.

برای مثال، معناشناسی ممکن است استراتژی را که بویسله آن عبارات ارزیابی می‌شوند را تعریف کند و یا حالتی را که ساختارهای کنترلی تحت شرایطی دستورها را اجرا می‌کنند.

کتابخانه هسته

اغلب زبان‌های برنامه نویسی یک کتابخانه هسته مرتبط دارند(گاهی اوقات "کتابخانه استاندارد" نامیده می‌شوند، مخصوصا وقتی که به عنوان قسمتی از یک زبان استاندارد ارائه شده باشد)، که به طور قراردادی توسط تمام پیاده سازی‌های زبان در دسترس قرار گرفته باشند. کتابخانه هسته معمولاً تعریف الگوریتم‌ها، داده ساختارها و مکانیزم‌های ورودی و خروجی پرکاربرد را در خود دارد. کاربران یک زبان، غالبا با کتابخانه هسته به عنوان قسمتی از آن رفتار می‌کنند، اگرچه طراحان ممکن است با آن به صورت یک مفهوم مجزا رفتار کرده باشند. بسیاری از خصوصیات زبان هسته‌ای را مشخص می‌کنند که باید در تمام پیاده سازی‌ها موجود باشند، و در زبان‌های استاندارد شده این کتابخانه هسته ممکن است نیاز باشد. بنابراین خط بین زبان و کتابخانه هسته آن از زبانی به زبان دیگر متفاوت است. درواقع، برخی زبان‌ها به گونه‌ای تعریف شده‌اند که برخی از ساختارهای دستوری بدون اشاره به کتابخانه هسته قابل استفاده نیستند. برای مثالف در جاوا، یک رشته به عنوان نمونه‌ای از کلاس “java.lang.String” تعریف شده است؛ مشابها، در سمال تاک(smalltalk) یک تابع بی نام(یک "بلاک") نمونه‌ای از کلاس BlockContext کتابخانه می‌سازد. بطور معکوس، Scheme دارای چندین زیرمجموعه مرتبط برای ایجاد سایر ماکروهای زبان می‌باشد، و در نتیجه طراحان زبان حتی این زحمت را نیز تحمل نمی‌کنند که بگویند کدام قسمت زبان به عنوان ساختارهای زبان باید پیاده سازی شوند، و کدام یک به عنوان بخشی ازکتابخانه.

عمل

طراحان زبان و کاربران باید مصنوعاتی ایجاد کنند تا برنامه نویسی را در عمل ممکن سازند و کنترل کنند. مهمترین این مصنوعات خصوصیات و پیاده سازی‌های زبان هستند.

خصوصیات

خصوصیات یک زبان برنامه نویسی باید تعریفی فراهم کند که کاربران و پیاده کننده‌های زبان می‌توانند از آن استفاده کنند تا مشخص کنند که رفتار یک برنامه درست است. با داشتن کد منبع: خصوصیات یک زبان برنامه نویسی چندین قالب می‌تواند بگیرد، مانند مثال‌های زیر:

  • تعریف صریح دستور، معناشناسی ایستا، ومعناشناسی اجرای زبان. درحالیکه دستور معمولاً با یک معناشناسی قراردادی مشخص می‌شود، تعاریف معناشناسی ممکن است در زبان طبیعی نوشته شده باشند (مثل زبان C)، یا معناشناسی قراردادی(مثل StandardML ,Scheme)
  • توضیح رفتار یک مترجم برای زبان(مثل C,fortran). دستور و معناشناسی یک زبان باید از این توضیح استنتاج شوند، که ممکن است به زبان طبیعی یا قراردادی نوشته شود.
  • پیاده سازی منبع یا مدل. گاهی اوقات در زبان‌های مشخص شده(مثل: prolog,ANSI REXX).دستور و معناشناسی صریحا در رفتار پیاده سازی مدل موجودند.

پیاده سازی

پیاده سازی یک زبان برنامه نویسی امکان اجرای آن برنامه را روی پیکربندی مشخصی از سخت‌افزار و نرم‌افزار را فراهم می‌کند. بطور وسیع، دو راه رسیدن به پیاده سازی زبان برنامه نویسی وجود دارد. کامپایل کردن و تفسیر کردن. بطور کلی با هر بک از ابن دو روش می‌توان یک زبان را پیاده سازی کرد.

خروجی یک کامپایلر ممکن است با سخت‌افزار و یا برنامه‌ای به نام مفسر اجرا شود. در برخی پیاده سازی‌ها که از مفسر استفاده می‌شود، مرز مشخصی بین کامپایل و تفسیر وجود ندارد. برای مثال، برخی پیاده سازی‌های زبان برنامه نویسی بیسیک کامپایل می‌کنند و سپس کد را خط به خط اجرا می‌کنند.

برنامه‌هایی که مستقیما روی سخت‌افزار اجرا می‌شوند چندین برابر سریعتر از برنامه‌هایی که با کمک نرم‌افزار اجرا می‌شوند، انجام می‌شوند.

یک تکنیک برای بهبود عملکرد برنامه‌های تفسیر شده کامپایل در لحظه آن است. در این روش ماشین مجازی، دقیقا قبل از اجرا، بلوک‌های کدهای بایتی که قرار است استفاده شوند را برای اجرای مستقیم روی سخت‌افزار ترجمه می‌کند.

تاریخچه

پیشرفت‌های اولیه

اولین زبان برنامه نویسی به قبل از رایانه‌های مدرن باز می‌گردد. قرن ۱۹ دستگاه‌های نساجی و متون نوازنده پیانو قابل برنامه نویسی داشت که امروزه به عنوان مثال‌هایی از زبان‌های برنامه نویسی با حوزه مشخص شناخته می‌شوند. با شروع قرن بیستم، پانچ کارت‌ها داده را کد گذاری کردند و پردازش مکانیکی را هدایت کردند. در دهه ۱۹۳۰ و ۱۹۴۰، صورت گرایی حساب لاندای آلونزو چرچ و ماشین تورینگ آلن تورینگ مفاهیم ریاضی بیان الگوریتم‌ها را فراهم کردند؛ حساب لاندا همچنان در طراحی زبان موثر است.

در دهه ۴۰، اولین رایانه‌های دیجیتال که توسط برق تغذیه می‌شدند ایجاد شدند. اولین زبان برنامه نویسی سطح بالا طراحی شده برای کامپیوتر پلانکالکول بود، که بین سال‌های ۱۹۴۵ و ۱۹۴۳ توسط کنراد زوس برای ز۳ آلمان طراحی شد.

کامپیوترهای اوایل ۱۹۵۰، بطور خاص ÜNIVAC ۱ و IBM ۷۰۱ از برنامه‌های زبان ماشین استفاده می‌کردند. برنامه نویسی زبان ماشین نسل اول توسط نسل دومی که زبان اسمبلی نامیده می‌شوند جایگزین شد. در سال‌های بعد دهه ۵۰، زبان برنامه نویسی اسمبلی، که برای استفاده از دستورات ماکرو تکامل یافته بود، توسط سه زبان برنامه نویسی سطح بالا دیگر: FORTRAN,LISP , COBOL مورد استفاده قرار گرفت. نسخه‌های به روز شده این برنامه‌ها همچنان مورد استفاده قرار می‌گیرند، و هر کدام قویا توسعه زبان‌های بعد را تحت تاثیر قرار دادند. در پایان دهه ۵۰ زبان algol ۶۰ معرفی شد، و بسیاری از زبان‌های برنامه نویسی بعد، با ملاحظه بسیار، از نسل algol هستند. قالب و استفاده از زبان‌های برنامه نویسی به شدت متاثر از محدودیت‌های رابط بودند.

پالایش

دوره دهه ۶۰ تا اواخر دهه ۷۰ گسترش مثال‌های عمده زبان پرکاربرد امروز را به همراه داشت. با این حال بسیاری از جنبه‌های آن بهینه سازی ایده‌های اولیه نسل سوم زبان برنامه نویسی بود:

  • APL برنامه نویسی آرایه‌ای را معرفی کرد و برنامه نویسی کاربردی را تحت تاثیر قرار داد.
  • PL/i(NPL) دراوایل دهه ۶۰ طراحی شده بود تا ایده‌های خوب فورترن و کوبول را بهم پیوند دهد.
  • در دهه ۶۰، Simula اولین زبانی بود که برنامه نویسی شئ گرا را پشتیبانی می‌کرد، در اواسط دهه۷۰. Smalltalk به دنبال آن به

عنوان اولین زبان کاملا شئ گرا معرفی شد.

  • C بین سال‌های ۱۹۶۹ تا ۱۹۷۳ به عنوان زبان برنامه نویسی سیستمی طراحی شد و همچنان محبوب است.
  • Prolog، طراحی شده در ۱۹۷۲، اولین زبان برنامه نویسی منطقی بود.
  • در ۱۹۷۸ ML سیستم نوع چند ریخت روی لیسپ ایجاد کرد، و در زبان‌های برنامه نویسی کاربردی ایستا نوع گذاری شده پیشگام شد.

هر یک از این زبان‌ها یک خانواده بزرگ از وارثین از خود به جای گذاشت، و مدرنترین زبان‌ها از تبار حداقل یکی از زبان‌های فوق به شمار می‌آیند.

دهه‌های ۶۰ و ۷۰ مناقشات بسیاری روی برنامه نویسی ساخت یافته به خود دیدند، و اینکه آیا زبان‌های برنامه نویسی باید طوری طراحی شوند که آنها را پشتیبانی کنند.

"ادسگر دیکسترا" در نامه‌ای معروف در ۱۹۶۸ که در ارتباطات ACM منتشر شد، استدلال کرد که دستورgoto باید از تمام زبان‌های سطح بالا حذف شود.

در دهه‌های ۶۰ و ۷۰ توسعهٔ تکنیک‌هایی صورت گرفت که اثر یک برنامه را کاهش می‌داد و در عین حال بهره وری برنامه نویس و کاربر را بهبود بخشید. دسته کارت برای ۴GL اولیه بسیار کوچکتر از برنامهٔ هم سطح بود که با ۳GL deck نوشته شده بود.

یکپارچگی و رشد

دهه ۸۰ سال‌های یکپارچگی نسبی بود. C++ برنامه نویسی شئ گرا و برنامه نویسی سیستمی را ترکیب کرده بود. ایالات متحده ایدا(زبان برنامه نویسی سیستمی که بیشتر برای استفاده توسط پیمان کاران دفاعی بود) را استاندارد سازی کرد. در ژاپن و جاهای دیگر، هزینه‌های گزافی صرف تحقیق در مورد زبان نسل پنجم می‌شد که دارای ساختارهای برنامه نویسی منطقی بود. انجمن زبان کاربردی به سمت استانداردسازی ML و Lisp حرکت کرد. به جای ایجاد مثال‌های جدید، تمام این تلاش‌ها ایده‌هایی که در دهه‌های قبل حلق شده بودند را بهتر کرد.

یک گرایش مهم در طراحی زبان در دهه ۸۰ تمرکز بیشتر روی برنامه نویسی برای سیستم‌های بزرگ از طریق مدول‌ها، و یا واحدهای کدهای سازمانی بزرگ مقیاس بود. مدول-۲، ایدا. و ML همگی سیستم‌های مدولی برجسته‌ای را در دهه ۸۰ توسعه دادند. با وجود اینکه زبان‌های دیگر، مثل PL/i، پشتیبانی بسیار خوبی برای برنامه نویسی مدولی داشتند. سیستم‌های مدولی غالبا با ساختارهای برنامه نویسی عام همراه شده‌اند.

رشد سریع اینترنت در میانه دهه ۹۰ فرصت‌های ایجاد زبان‌های جدید را فراهم کرد. Perl، در اصل یک ابزار نوشتن یونیکس بود که اولین بار در سال ۱۹۸۷ منتشر شد، در وب‌گاه‌های دینامیک متداول شد. جاوا برای برنامه نویسی جنب سروری مورد استفاده قرار گرفت. این توسعه‌ها اساسا نو نبودند، بلکه بیشتر بهینه سازی شده زبان و مثال‌های موجود بودند، و بیشتر بر اساس خانواده زبان برنامه نویسی C بودند. پیشرفت زبان برنامه نویسی همچنان ادامه پیدا می‌کند، هم در تحقیقات و هم در صنعت. جهت‌های فعلی شامل امنیت و وارسی قابلیت اعتماد است، گونه‌های جدید مدولی(mixin، نماینده‌ها، جنبه‌ها) و تجمع پایگاه داده.

۴GLها نمونه‌ای از زبان‌هایی هستند که محدوده استفاده آنها مشخص است، مثل SQL. که به جای اینکه داده‌های اسکالر را برگردانند، مجموعه‌هایی را تغییر داده و بر می‌گردانند که برای اکثر زبان‌ها متعارفند. Perl برای مثال، با "مدرک اینجا" خود می‌تواند چندین برنامه ۴GL را نگه دارد، مانند چند برنامه جاوا سکریبت، در قسمتی از کد پرل خود و برای پشتیبانی از چندین زبان برنامه نویسی با تناسب متغیر در "مدرک اینجا" استفاده کند.

سنجش استفاده از زبان

مشکل است که مشخص کنیم کدام زبان برنامه نویسی بیشتر مورد استفاده‌است، و اینکه کاربرد چه معنی می‌دهد با توجه به زمینه تغییر می‌کند. یک زبان ممکن است زمان بیشتری از برنامه نویس بگیرد، زبان دیگر ممکن است خطوط بیشتری داشته باشد، و دیگری ممکن است زمان بیشتری از پردازنده را مصرف کند. برخی زبان‌ها برای کاربردهای خاص بسیار محبوبند. برای مثال: کوبول همچنان در مراکزداده متحد، غالبا روی کامپیوترهای بزرگ توانا است؛ fortran در مهندسی برنامه‌های کاربردی، C در برنامه‌های تعبیه شده و سیستم‌های عامل؛ و بقیه برنامه‌ها معمولاً برای نوشتن انواع دیگر برنامه‌ها کاربرد دارند. روش‌های مختلفی برای سنجش محبوبیت زبان‌ها، هر یک متناسب یا یک ویژگی محوری متفاوت پیشنهاد شده‌است:

  • شمارش تعداد تبلیغات شغلی که از آن زبان نام می‌برند.
  • تعداد کتاب‌های آموزشی و شرح دهندهٔ آن زبان که فروش رفته‌است.
  • تخمین تعداد خطوطی که در آن زبان نوشته شده اند- که ممکن است زبان‌هایی را که در جستجوها کمتر پیدا می‌شوند دست کم گرفته شوند.
  • شمارش ارجاع‌های زبان(برای مثال، به اسم زبان) در موتورهای جستجوهای اینترنت.

طبقه بندی‌ها هیچ برنامه غالبی برای دسته بندی زبان‌های برنامه نویسی وجود ندارد. یک زبان مشخص معمولاً یک زبان اجدادی ندارد. زبان‌ها معمولاً با ترکیب المان‌های چند زبان پیشینه بوجود می‌آیند که هربار ایده‌های جدید درگردشند. ایده‌هایی که در یک زبان ایجاد می‌شوند در یک خانواده از زبان‌های مرتبط پخش می‌شوند، و سپس از بین خلاهای بین خانواده‌ها منتقل شده و در خانواده‌های دیگر ظاهر می‌شوند.

این حقیقت که این دسته بندی ممکن است در راستای محورهای مختلف انجام شوند، این وظیفه را پیچیده تر می‌کند؛ برای مثال، جاوا هم یک زبان شیءگرا(چون به برنامه نویسی شیءگرا تشویق می‌کند) و زبان همزمان(چون ساختارهای داخلی برای اجرای چندین جریان موازی دارد) است. پایتون یک زبان اسکریپتی شیءگراست.

در نگاه کلی، زبان‌های برنامه نویسی به مثال‌های برنامه نویسی و یک دسته بندی بر اساس محدوده استفاده تقسیم می‌شوند. مثال‌ها شامل برنامه نویسی رویه‌ای، برنامه نویسی شیءگرا، برنامه نویسی کاربردی، وبرنامه نویسی منطقی؛ برخی زبان‌ها ترکیب چند مثالند. یک زبان اسمبلی مثالی از یک مدل مستقیم متضمن معماری ماشین نیست. با توجه به هدف، زبان‌های برنامه نویسی ممکن است همه منظوره باشند، زبان‌های برنامه نویسی سیستمی، زبان‌های اسکریپتی، زبان‌های محدوده مشخص، زبان‌های همزمان/ گسترده(و یا ترکیب اینها). برخی زبان‌های همه منظوره تا حد زیادی برای اهداف آموزشی طراحی شده‌اند.

یک زبان برنامه نویسی ممکن است با فاکتورهای غیر مرتبط به مثال‌های برنامه نویسی دسته بندی شود. برای مثال، غالب زبان‌های برنامه نویسی کلمات کلیدی زبان انگلیسی را استفاده می‌کنند، در حالیکه تعداد کمی این کار را نمی‌کنند. سایر زبان‌ها ممکن است براساس داخلی بودن یا نبودن دسته بندی شوند.

نوشته شده توسط نیلوفر جمشیدی در ساعت 16:18 | لینک  | 

 

جملات بزرگان در مورد برنامه نویسی

باگ كردن يك كد چندين مرتبه از نوشتن آن سخت‌تر است. بنابراين اگر كد اوليه خود را بسيار هوشمندانه بنويسيد، جهت ديباگ كردن آن به اندازه‌ي كافي باهوش نخواهيد بود! Brian Kernighan

تنها دو نوع زبان برنامه نويسي وجود دارد: آنهايي كه برنامه نويس‌ها از آن شكايت دارند و آن‌هايي كه اصلا مورد استفاده قرار نمي‌گيرند! BjarneStroustrup

هر كسي مي‌تواند كدي بنويسد كه يك كامپيوتر آن‌را درك كند. يك برنامه نويس خوب كدي را مي‌نويسد كه براي ساير همكارانش قابل درك باشد. Martin Fowler

اندازه‌گيري درصد پيشرفت يك پروژه برنامه نويسي با شمارش تعداد سطرهاي كدهاي آن همانند اندازه گيري درصد پيشرفت ساخت يك هواپيما از طريق وزن كردن آن است! Bill Gates

 برنامه نويسي سطح پايين Low-Levelروح برنامه نويس‌ها را جلا مي‌بخشد! John Carmack, ID software

بزرگي واقعي با اندازه گيري مقدار آزادي كه به ديگران عطا مي‌كنيد، سنجيده مي‌شود و نه به اينكه چگونه ديگران را وادار مي‌كنيد تا آنچه را كه مد نظر شما است اجرا كنند. Larry Wall

 هيچگاه از gets و sprintf استفاده نكنيد، در غير اينصورت شياطين به زودي به سراغ شما خواهند آمد! FreeBSD Secure Programming Guidelines

صحبت كردن ساده است. كدت رو نشون بده! Linus Torvalds علوم رايانه هيچگاه شخصي را تبديل به يك برنامه نويس خوب نمي‌كنند همانطور كه مطالعه در مورد رنگ‌ها و قلم‌ها شما را تبديل به يك نقاش خوب نمي‌كند. Eric Raymond

برنامه نويسي مانند س.ك.س است. يك اشتباه و سپس تحمل كردن و پشتيباني آن تا آخر عمر! Michael Sinz

هيچ برنامه‌اي تا زمانيكه آخرين يوزر آن بميرد به پايان نخواهد رسيد! از يك گروه پشتيباني نرم افزار ناشناس!

پايان دنياي يونيكس 2 به توان 32 ثانيه پس از اول ژانويه 1970 است! ناشناس زماني‌ كه كد مي‌نويسيد
فرض كنيد شخصي كه قرار است در آينده از كدهاي شما نگهداري كند يك ديوانه‌ي زنجيري است كه آدرس خانه‌ي شما را مي‌داند! Rick Osborne سادگي يك برنامه يكي از شرايط قابل اطمينان بودن آن است. Edsger Dijkstra

يونيكس سيستم عامل ساده‌اي است، اما شما بايد فرد باهوشي باشيد تا بتوانيد اين سادگي را درك كنيد! Dennis Ritchie
اگر به كامپايلر دروغ بگوئيد او بعدا انتقام خواهد گرفت! Henry Spencere Perl

تنها زبان برنامه نويسي است كه پيش و پس از رمزنگاري RSA به يك شكل به نظر مي‌رسد!
Keith Bostic

نوشته شده توسط نیلوفر جمشیدی در ساعت 15:58 | لینک  | 

رمز موفقیت در برنامه نویسی (برای تازه کارها)

 

این مقاله یک مقاله خیلی قدیمی است و به تازگی تصمیم گرفتم که تکمیلش کنم.

مقدمه

در این مقاله قصد دارم به یکی از سوالاتی که مکرر از من پرسیده شده و آخریش هم چند روز پیش بود جواب بدم. اکثر کسانی که علاقه مند به برنامه نویسی هستند ، در ابتدای راه مدام می پرسند که از کجا باید شروع کنیم؟ کدام زبان برنامه نویسی بهتر است؟ از کجا می توانیم یک منبع خوب پیدا کنیم؟ و ... . مشکل اینجاست که جواب اکثر این سوالات یا نا مشخص است و یا بسیار طولانی که هیچکس نه وقت و نه حوصله این را دارد که توضیح دهد. بنابراین طبق معمول در این مقاله قرار است ماهیگیری یاد داده شود.

در ابتدای امر باید بگویم که یکی از مشکلات اساسی ، عادت کردن ما به سیستم آموزشی است که سال ها در آن تحصیل کرده ایم. در این سیستم تنها حفظیات ارزشمند هستند و جایی برای تفکر و ابتکار وجود ندارد. و این دقیقا نقطه مقابل برنامه نویسی است. چون در برنامه نویسی رفته رفته با پیشرفت تکنولوژی حفظیات بی ارزشتر می شوند و تنها خلاقیت و ابتکار است که آینده یک برنامه نویس را  رقم می زند.

با وجود موتورهای جستجو که در عرض چند ثانیه می توانند نیاز ما به اطلاعات را تامین کنند دیگر نیازی به حفظ کردن نیست. حدود 10 ، 11 سال پیش شاید این مطلب درست بود (البته در ایران) چون دسترسی به اینترنت محدود بود ، همچنین اینترنت پیشرفت لازم را نکرده بود تا افراد عادی بتوانند به راحتی با آن کارکنند. در طی این 10 ، 11 سال خیلی تکنولوژی ها و استاندارد ها به وجود آمده اند. و بسیاری از نرم افزارها به مرور کامل و کاملتر شده اند. سایت های زیادی متولد شدند. بسیاری از دانشگاه ها منابع آموزشی را از طریق سایت های اختصاصیشان در اختیار عموم قرار داده اند. با ابتکار و هنر تعدادی برنامه نویس در خلق سیستم های مدیریت محتوای منبع باز و رایگان (Open Source Content Management System) امکان به وجود آمدن بی شمار انجمن تخصصی در زمینه های مختلف با حداقل هزینه فراهم گشته است. که هر کدام از این انجمن ها را می توان یک منبع کاربردی و غنی اطلاعات به حساب آورد.

یکی از مواردی که همیشه برای من سوال بوده برخی آزمون های برنامه نویسی هستند که بر روی کاغذ انجام می شوند و یکی از معیارهای ارزشیابی آن ها هم درستی syntax است!! امروزه با وجود مفسرها (interpreter) و همگردان های (compiler) پیشرفته ای که تولید شده اند دیگر نیاز به نگرانی برنامه نویس نیست. برخی از این ابزار های پیشرفته خطای syntax را نه بعد از تفسیر و یا همگردانی بلکه در همان زمان نوشتن برنامه به برنامه نویس گوشزد می کنند و حتی برخی از اشتباهات را هم خوشان اصلاح می کنند. جدای از این ها معمولا برای هر کدام از زبان های برنامه نویسی کلی مرجع سریع وجود دارد که با یک نگاه می توان syntax مورد نیاز را پیدا و استفاده کرد.

اصل مطلب

برای این که مقاله مفید واقع شود ، فردی را تصور کنید که می خواهد یک پروژه (تفاوتی نمی کند در چه زمینه باشد) را اجرا کند. این فرد مبانی برنامه نویسی را گذرانده ولی آشنایی با زبانی که قرار است این پروژه به وسیله آن انجام شود و همچنین تکنولوژی های مرتبط با آن را را ندارد. چه باید بکند؟ از کجا باید شروع کند؟ منابع آموزشی مورد نیازش را از کجا باید تامین کند؟ و ...

  1. برای شروع لازم است یک مرجع سریع تهیه کند. از کجا؟ اگر آشنایی با زبان انگلیسی نداشته باشد مجبور است سری به کتاب فروشی های داخلی بزند و دنبال کتاب های کم حجم در رابطه با زبان مورد نظرش بگردد. کتاب هایی که با پیشوند یا پسوند عناوینی مثل "مرجع سریع" ، "آموزش گام به گام" ، "در چند قدم" ، "برای مبتدی ها" ، "آموزش در 21 روز" ، "آموزش در یک هفته" و ... همراه هستند از دسته مراجع سریع هستند. مراجع سریع معمولا چیزی حدود 100 صفحه هستند.
    در صورتی که با زبان انگلیسی آشنا باشد خیلی عالی است چون می تواند از کتاب ها و منابع الکترونیک استفاده کند. استفاده از این منابع چند مزیت دارد :
    1.  به روز هستند.
    2.  با ترجمه عجیب و غریب مترجمان ایرانی خراب نشده!
    3.  در هر زمینه این بالاخره یک چیزی می تواند پیدا کند.
    4. هزینه زیادی را صرفه جویی کرده.
    5.  مطمئن است برای کم کردن حجم آن چیزی از کتاب زده نشده است!
    6. می تواند از امکان جستجو استفاده کند که صرفه جویی زیادی در زمان به همراه دارد.
    برای پیدا کردن منابع مورد نظرش باید از اینترنت و یکی از موتورهای جستجو استفاده کند. می تواند از لغات کلیدی با ترکیب زیر استفاده کند که در همه آن ها x نام زبان برنامه نویسی یا تکنولوژی مورد نظر است (این موارد تنها نمونه هستند ، می تواند بسته به نیاز خود تکریبات جدیدی نیز اضافه کند) :
    pdf x
    chm x
    reference manual x
    x complete reference
    step by step guide
    beginner x for
    tutorial x
    x fast reference
    ...
    دو فرمت  PDF (Portable Document Format - Acrobat Reader software) و CHM (Compiled HTML Help - Compatible with Windows Operation System) معمولا برای کتب الکترونیکی مورد استفاده قرار می گیرند که با اضافه کردن یکی از این دو فرمت به رشته جستجو سریع تر به مقصود می رسد.
     
  2. چند روزی را باید صرف مطالعه کامل این مرجع سریع کند. این مطالعه حتما باید سطحی باشد و نیازی به تمرین مطالب گفته شده در کتاب و حفظ کردن (حفظ اخ) آن ها نیست. تنها قدری تامل کفایت می کند. بعد از این مرور سطح چه چیزهایی به دست می آورد :
    1. نگرانیش کم می شود و بسیاری از مجهولاتی که در ذهنش نسبت به کار وجود دارد از بین می رود.
    2. متوجه می شود که چه امکاناتی در اختیار دارد و کجا باید از این امکانات استفاده می کند.
    3. اگر فردی با ضریب هوشی معمولی به بالا باشد ، در موقع مطالعه کتاب قسمتی از نقشه (Plan) پروژه در ذهنش نقش می بندد که در موقع شروع کار بسیار کمک خواهد کرد.
    4. حالا می داند هر کدام از مطالبی که نیاز دارد را کجای کتاب می تواند پیدا کند.
نوشته شده توسط نیلوفر جمشیدی در ساعت 15:51 | لینک  | 

زبان برنامه نویسی #F چیست؟
زبان برنامه نویسی تابعی بهترین روش حل مسایل کامپیوتریست اما زبان برنامه نویسی تابعی خالص برای برنامه نویسی همه منظوره مناسب نمیباشد بنابراین به تدریج زبانهای برنامه نویسی تابعی در کنار زبانهای شی گرا و دستوری باقی مانده و استفاده عمومی نیافتند. مچنین در این مدل ویژگیهای افزوده شده را به راحتی میتوان در هر برنامه ای نوشت و به راحتی به آن افزود. F# یک زبان طبیعی به وجود آمده بر این مبناست بعلاوه بسیار بیشتر از یک زبان برنامه نویسی تابعی میباشد. برخی از زبانهای برنامه نویسی تابعی معروف بطور کلی (OCAML , Haskel , Lisp) با دستورات زمان اجرای سفارشی کار میکند و این مسئله باعث نبود روش برنامه نویسی چند فعالیته میشود.
F# یک زبان همه منظوره برای محیط .Net است که برای حالت اجرا بصورت همه منظوره به کار میرود و به راحتیهر سه مدل برنامه نویسی را شامل میشود. برای حل مسایل مختلف در موثرترین روش میتوانید محیط خاص آنرا در برنامه انتخاب کنید. شما میتوانیداز برنامه نویسی توصیفی استفاده کنید و یا توابع را به راحتی با هم ترکیب کنید و یا روشهای شی گرا و دستوری را در همان برنامه استفاده کنید و از قابلیتهای مختلف هر کدام در برنامه سود ببرید. مثل دیگر برنامه های تابعی F# نوع قوی دارد اما از نوع استنتاجی هم سود میبرد بنابراین برنامه نویسان نیاز ندارند زمان زیادی برای توضیح انواع توابع هدر دهند مگر اینکه در موارد خاص ابهاماتی دربرنامه پیش بیاید که لزوم داشته باشد به وضوح بیان شود.علاوه بر این F# بصورت کاملی با چهارچوب .Net و کتابخانه کلاس اصلی آن یعنی BCL ترکیب شده و به راحتی میتوان از آن در F# استفاده کرد و این مسئله مانند C#‎‎ و VB میباشد و حتی در مواردی استفاده از BCL در F# از دیگر زبانهای تحت .Net راحت تر است.

F# مدل خود را از روی OCAML انتخاب کد که زبان برنامه نویسی تابعی شی گرای موفقی بود سپس با گسترش قابلیتها خوب این برنامه آنها را از نظر فنی و فلسفه کار داخل غالب .Net گنجاند. این زبان کاملا از غالب .Net پشتیبانی کرده و به کاربران این امکان را میدهد که هر چیزی که در محیط .Net ارائه شده است با F# استفاده کنند. کامپایلر F# میتواند تمام پیاده سازیهای زیر ساختار زبانهای معمول را بپذیرد و از روشهای معمول .Net بدون تغییر کد استفاده کند. همچنین میتواند برای کد نویسی IL به صورت برچسب دار استفاده شود.

F# محدود به محیط ویندوز نبوده و میتوان آنرا در لینوکس ، مکینتاش و... استفاده کرد که بخشی از کتاب مورد ترجمه به نحوه عملکرد روی لینوکس میپردازد.کامپایلر F# را میتوان داخل محیط Virtual Studio افزود و با عیب یاب آن به چک کردن دستورات به صورت اتوماتیک پرداخت. همچنین این کامپالر راهنمایی هایی برای استفاده از تمامی توابع عرضه میکند که در نوع خود بینظیر است و برنامه نویسان اشاره میکنند که این مسئله بسیار برای شبیه کردن برنامه به زندگی واقعی موثر است.

F# توسط دکتر دون سیم ابداع شد. در حال حاضرمحصولیست وابسته به تیمی کوچک اما کاملا پیشرفته واقع در مرکز تحقیقات مایکروسافت - کمبریج - لندن - انگلستان با این حال F# در حد یک زبان آکادمیک یا تحقیقاتی نیست و برای خیلی از برنامه های دنیای واقعی (که تعداد آنها به شدت در حال افزایش است) به کار میرود. با توجه به اینکه زبان تابعی دیگری به ندرت در محیط .Net اجرا میشوند F# بعنوان استاندارد این نوع زبانها در آمده است. زبانهای برنامه نویسی تابعی در این میان از F# تبعیت میکنند زیرا این زبان کیفیت پیاده سازی و اشتراک با .Net و Virtual Studio را بسیار بهتر در خود دارد. هیچ برنامه برنامه نویسی .Net دیگری از لحاظ کارکرد ، استفاده و انعطاف پذیری به پای F# نمیرسد.
نوشته شده توسط نیلوفر جمشیدی در ساعت 15:34 | لینک  | 

همانطور که میدانید زبان C در سال 1972 توسط آقای ریچی طراحی شد ..علت نامگذاری زبان C این است که چون بعد از زبان B طراحی شده است آن را C نامیده اند .
برنامه نویسان زبان های برنامه نویسی را به سه دسته مختلف زبان های سطح بالا . زبان های میانی و زبان های سطح پایین طبقه بندی می کنند . زبان C در این طبقه بندی در جمع زبانهای میانی قرار می گیرد علت آن هم این است که چون همانند زبان های سطح پایینی مثل زبان اسمبلی می تواند مستقیما به حافظه دسترسی داشته باشد و همچون زبان سطح بالای پاسکال قابلیت خوانایی بالایی دارد ...
زبان C جزو یکی از قدرتمند ترین زبان های موجود می باشد (بوده و هست )..قابلیت های انعطاف بالای این برنامه قابلیت بهره برداری از سخت افزار و... جزو عوامل قدرتمند نگه داشتن این زبان می باشند .
اصول کلی در نوشتن یک برنامه

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

1-تعین نیازهای برنامه
2-تحلیل برنامه
3-طراحی الگوریتم برنامه
4-پیاده سازی الگوریتم
5-تست و کنترل برنامه
6-ذخیره برنامه

----------------------------------------------------------------------------------
یک مثال : فرض کنید از ما می خواهند برنامه ای بنویسیم تا میانگین دو عدد را پیدا کند ؟

مراحلی که طی می کنیم به شرح زیر است :
ابتدا پیش خود کمی فکر می کنیم و به این نتیجه می رسیم که برای اینکه روی این دو عدد عملیاتی انجام دهیم لازم است این برای این دو عدد حافظه ای را در نظر بگیریم (این دو عدد را داخل متغیر هایی از جنس آن عدد قرار دهیم ).سپس باید روی این دو عمل اعمال محاسباتی خود را انجام دهیم (که در این مثال باید آن دو را با هم جمع کرد و تقسیم بر 2 کرد ). اکنون نوبت این است که جواب بدست آمده برای این محاسبه در حافظه ذخیره شود تا بتوان از آن استفاده کرد (پس باید یک متغیر دیگر از نوع جواب محاسبات انجام شده تعریف کرد و این نتیجه را درون آن متغیر ریخت ... سپس بر طبق دستور با حافظه خود(متغیر سوم ) به دلخواه رفتار می کنیم ..(یعنی می توان آن را چاپ کرد .. وارد برنامه ای دیگر کرد و...)
--------------------------------------------------------------------------------
همانطور که می بینید این گونه ای از پیاده سازی یک طرح برای برنامه(الگوریتم برنامه ) است که سپس می توان آن را به شکل کد در آورد و پیاده سازی کرد ....
آیا به نظرتان این طرح (الگوریتم )نمی تواند در تمام برنامه ها یکسان باشد؟

طراحی الگوریتم :
در مثال بالا یک نوع پیاده سازی الگوریتم را مشاهده کردید ....برای طراحی الگوریتم لازم است دستورات قدم به قدم طراحی شوند و محاسبه شود که الگوریتم به درستی کار می کند یا نه ....
اجازه دهید یک مقدار ساده تر بگویم : فرض کنید یک معلم به ما یک مسئله ریاضی داده است .راه حل این مسئله را الگوریتم آن به حساب می آوریم. اگر این راه حل ما را به جواب درست رساند این راه حل را در ورقه پاکنویس می کنیم ولی اگر راه جواب اشتباهی به ما داد باید مقداری به راه حل مسئله نگاه کنیم و ایراد های ان را بر طرف کنیم ...
در نوشتن یک برنامه نیز ما به همین شکل برخورد خواهیم کرد یعنی طرح آن را پیاده می کنیم و اگر آن ما را به مطلوبمان رساند آن طرح را انتخاب می کنیم ولی اگر این چنین نشد در طرح مقداری تغییرات ایجاد کرده تا به هدف خود برسیم .

دقت داشته باشید که اغلب الگوریتم ها مراحل زیر را شامل می شوند :

1-خواندن داده ها (ورودی ها به برنامه)
2-انجام عملیات ( مثل محاسبات . حلقه ها . شروط و...)
3-چاپ نتایج


فلوچارت چیست ؟
فلوچارت در حقیقت رسم این الگوریتم به صورت گرافیکی است که برای سهولت کار مورد استفاده قرار می گیرد . رسم فلوچارت برای کسانی که تازه پا به عرصه برنامه نویسی گذاشته اند سبب آسان شدن حل مسائل می شود و هر چه که پیش می روند نیاز کمتری به رسم فلوچارت می بینند و سعی می کنند تا الگوریتم را در ضحن خود طراحی و پیاده سازی کنند و شروع به نوشتن برنامه کنند .


آشنایی با زبان سی :

در پست های قبلی مقداری از الگوریتم و طرح برنامه و همچنین از فلوچارت بحث کردیم ..در این پست و پست های بعدی سعی خواهم کرد شما را بیشتر با زبان سی آشنا کرده و گام به گام از ابتدا به بررسی ساختار های این زبان بپردازم ...در طول این مسیر شاهد استفاده از مطالب قبلی نیز خواهید بود ...

خوب همانطور که می دانید زبان سی شامل یک سری دستورات خاص می باشد که یک برنامه نویس که قصد برنامه نویسی به زبانی مثل سی را دارد کد های بر نامه را نوشته سپس توسط ادیتور یا همان کامپایلر ( توربو سی یا ویژوال سی پلاس پلاس ) آن را کامپایل می کند ....

خوب در اینجا اجازه دهید که با اولین مفهوم که کامپایل است شما را بیشتر آشنا کنم ..

کامپایل کردن یعنی اینکه دستورات ما (که به زبان سی نوشته شده اند )توسط یک برنامه (که به آن کامپایلر گویند ) به زبان ماشین ترجمه شود تا برای ماشین قابل درک شود و دستگاه بتواند آن را به اجرا در آورد ....


ما در ابتدا با یک سری از ابتدایی ترین دستورات زبان سی آشنا خواهیم شد و قدم به قدم پیش خواهیم رفت .
------------------------------------------------
باز کردن و بستن برنامه : همانند تمام زبان های دیگر برای شروع باید برنامه باز شود و در انتها نیز باید برنامه بسته شود

ما برای شروع از دستور } و برای خاتمه از دستور { استفاده می کنیم ..

یعنی فرض کنید ما می خواهیم یک برنامه بنویسیم که حاوی 5 خط کد نویسی است برنامه باید به این شکل باشد :

}
خط اول کد نویسی
خط دوم کد نویسی
خط سوم کد نویسی
خط چهارم کد نویسی
خط پنجم کد نویسی
{
همانطور که ملاحظه می کنید باید تمام کد نویسی مابین } و { قرار گیرد

---------------------------

دستور خواندن از صفحه کلید : برای اینکه برنامه عددی .حرفی .رشته ای یا ... را از صفحه کلید بخواند از دستور () scanf استفاده می شود توجه داشته باشید که داخل پرانتز متغیری که می خواهیم چیزی که وارد می شود در آن قرار گیرد باید گذاشته شود ...

یک نمونه :
(scanf("%d",&i

-------------------------

دستور چاپ بر روی صفحه نمایش : برای اینکه متغیری یا عبارت ثابتی را بر روی صفحه نمایش چاپ کنیم از دستور () printf استفاده می کنیم ... توجه داشته باشید اگر بخواهیم عبارتی عینا بر روی صفحه نمایش چاپ شود به صورت ("عبارت مورد نظر ")printf عمل خواهیم کرد ...

دو نمونه :

کد:
("printf("DrEaMeR
(printf("%d",i




نکته 1:شاید بعضی از دستورات بکار برده در نمونه ها برایتان نامفهوم باشد مثل d%و یا i& و.. با این دستورات در ادامه کار آشنا خواهید شد ..

نکته2: توجه کنید باید در انتهای هر خط کد نویسی در زبان سی باید ; به کار رود (بجز در مواردی که ذکر خواهد شد )..

-------------------------------------
توجه کنید به دستوراتی مثلprintf یا scanf توابع کتابخانه ای گویند ...این بدین معنا است که زبان سی این چنین توابعی را در خود برنامه برای استفاده کاربر قرار داده .... نکته مهم در اینجا این است که برای استفاده از این دستورات ( توابع کتابخانه ای ) ما باید این توابع را به برنامه بشناسانیم (یعنی به برنامه بگوییم آقا تو یک همچین دستوری را به صورت پیش فرض داری که فلان کار را انجام می دهد ) این کار را در زبان سی توسط HEADER FILE ها انجام می دهیم (فایل های سر آیند )


نحوه تعریف کردن این توابع هم به برنامه بدین شکل است که در ابتدای کد نویسی حتی قبل از } باید دستور(دستورات) include# را به کار برد .... در ادامه بیشتر با فایل های سر آیند آشنا می شویم ....

همانند اکثر آموزش زبان های برنامه نویسی ما هم اولین برنامه خود را با برنامه hello world آغاز خواهیم کرد ..در این برنامه ما قصد داریم تا تنها یک نوشتهhello world را در خروجی چاپ کنیم .
کد:
#include
void main()
{
printf("hello world");
}


کد نویسی این برنامه به صورتی که من در بالا نوشته ام است.من با دادن توضیحات شما را با تک تک کد های این برنامه آشنا می کنم .
خوب ببینید همانطور که گفتیم ما می خواهیم برنامه ای بنویسیم که یک نوشته را در صفحه خروجی عینا چاپ کند ... همانطور که به یاد دارید گفتم برای چاپ بر روی صفحه نمایش از دستور printf استفاده می کنیم (و متذکر شدم که اگر بخواهیم عبارتی عینا چاپ شود باید مابین "" قرار گیرد ).

یادتان می آید که گفتم هر تابعی که در برنامه می نویسیم (مثل همین printf ) باید به برنامه تعریفش کنیم که آقا این تابع فلان کار را انجام میدهد ... (البته نگران نباشید ما نباید برای برنامه این تعریفات را بنویسیم خود نویسنده برنامه این کار را انجام داده ..تنها لازم است ما جای این تعریفات را به برنامه بگوییم ..... دقت کنید هر تابع(هر چند تابع ) در یک فایل سرآیند قرار دارد که داخل آن فایل ها این تعریفات تابع به برنامه قرار دارد..پس فقط لازم است تا اسم این فایل (یا فایل های ) سرآیند را با توجه به تابع مربوطه به اول کد نویسی اضافه کنیم ) ...

اسم فایل سرآیند(header file) ای که در آن تعریفات printf (و چند تابع دیگر ) وجود دارد stdio است ..
طریقه معرفی این فایل هم بدین گونه است که قبل از شروع برنامه بنویسید

دقت کنید جمله include# در تعریف همه این فایل های سرآیند ثابت است تنها جمله بین <> بسته به نوع تابع ها تغیر می کند ...

مورد دیگر نیز h. بعد از stdio است که آن نیز به برنامه میگوید این فایل از نوع فایل سرآیند است (header file ) پس باید بعد از قرار دادن نام هر کدام از فایل های سر آیند بین <> یک h. نیز بعد از نام آن فایل سرآیند بگذاریم

کد:
;("printf("hello world



این هم کد چاپ کردن نوشته ما است .. همانطور که گفتم باید در زبان سی در انتهای هر خط کد نویسی (بجز بعضی مورد ها ) باید یک ; بگذاریم

خوب اگر دقت کنید دیگر چیز خاصی در کد نویسی این برنامه نمی ماند بجز یک خط و آن هم
()void main است ....این دستور چیست؟؟؟

دقت کنید زبان سی به صورت پیش فرض دوست دارد تا به شکل تابعی عمل کند (در این مورد بعدا مفصل بحث خواهیم کرد) و تمایل دارد یک مقدار را به جایی برگرداند ..ما فعلا نمی خواهیم تا یک همچین اتفاقی رخ دهد پس با نوشتن این یک خط مانع از این کار می شویم (تا به توضیحاتش برسیم یادتان باشد فعلا در ابتدای هر برنامه {مابینinclude# و } در یک خط این دستور را بنویسید )

در C
پنج نوع داده اصلي وجود دارد كه عبارتند از : char، int،، float،، double، و void
. در اين زبان اندازه و محدوده اي كه هر نوع داده اختيار مي كند بستگي به
نوع پردازشگر (Processor) و نحوه پياده سازي كامپايلر دارد. شناسه هايي ( متغير
برچسب ، اسامي توابع و ... ) كه از نوع char باشند براي ذخيره كردن مقاديري كه
توسط كاراكترهاي اسكي تعريف شده اند به كار مي روند. شناسه هايي از نوع int براي
ذخيره كردن مقادير صحيح ، و از نوع floatو doubleو براي ذخيره كردن اطلاعات عددي
اعشاري به كار ميروند كه محدوده آنها توسط تعداد ارقام و دقت آنها مشخص ميشود.
نوع void در مورد توباع به كار مي رود .
نوعهاي داده اصلي ( به جز void ) مي توانند با عباراتي مثل signed، long، unsigned
و shortو تركيب شده و نوع هاي ديگري را به وجود آورند . ( جدول (1) ).
نوع | اندازه تقريبي به بيت | بازه قابل قبول |
char
|
| 8 | 127- تا | 127 unsigned char
|
| 8 | 0 تا | 255 signed char
|
| 8 | 127- تا | 127 int
|
| 16 | 32767- تا | 32767 unsigned int
|
| 16 | 0 تا | 65525 signed int
|
| 16 | 32767- تا | 32767 short int
|
| 16 | 32767- تا | 32767 unsigned
|
| 16 | 0 تا | 65525 | | | short int |
signed
|
| 16 | 32767- تا | 32767 | | | short int |
long int
|
| 32 | َ2147483647- تا | 2147483647 |


عبارات ورودی / خروجی :
توضیحات : برای بهتر دیدن مقاله فایل .rar رو که attach کردم، دانلود کنید.


بخش اول : (printf())

در C از دستور printf() برای چاپ خروجی بر روی صفحه نمایش استفاده میشود و همچنین از scanf() برای خواندن اطلاعات از ابزارهای ورودی مانند keyboard بهره گرفته میشود. اما در این بین نکاتی است که در این بخش به آنها اشاره میکنیم .

عبارات خروجی :
دستور printf() در تابع کتابخانه ای stdio.h قرار دارد. این تابع در صورت صحیح اجرا شدن تعداد کاراکترهای چاپ شده و در غیر این صورت عددی منفی را برمیگرداند. فرم کلی دستور printf() به صورت روبرو است :
کد:
Printf( "<1>" , <2>);
عبارت 1 : این بخش میتواند 3 حالت داشته باشد :
1. یک متن خالص باشد :

کد:
printf("Iran is my country");

2. حاوی فرمت متغیرهایی باشد که در عبارت 2 آورده میشوند، مانند :
کد:
printf("x=%d",x)
. باید توجه داشت که فرمت های گوناگون که هر کدام با یک حرف (بعد از علامت % ) نشان داده میشوند، برای هر Data Type (مراجعه شود به پست انواع داده ها – نویسنده : aria ) فرق میکند. همگی فرمت ها با علامت % شروع میشوند . مثلا در مثال بالا %d بیان کننده ی data type عدد صحیح است (% نشان دهنده ی آغاز یک فرمت و d نماد اعداد صحیح است ). به جدول زیر توجه کنید :
%c : کاراکتر
%d : اعداد صحیح دهدهی + و -
%i : اعداد صحیح دهدهی + و -
%e : نمایش علمی عدد همراه حرف e
%E : نمایش علمی عدد همراه حرف E
%f : عدد اعشاری ممیز شناور
%g : اعداد اعشاری ممیز شناور
%G : اعداد اعشاری ممیز شناور
%o : اعداد مبنای 8 مثبت
%s :رشته ای از کاراکتر ها
%u : اعداد صحیح بدون علامت
%x : اعداد مبنای 16 مثبت با حروف کوچک
%X : اعداد مبنای 16 مثبت با حروف بزرگ
%p : Pointer (اشاره گر)
%n :موجب میگردد تا تعداد کاراکترهایی که تا قبل از این فرمت چاپ شده است در متغیر متناظر با آن قرار گیرد.
%% : علامت %
%hd : برای چاپ اعداد از نوع long
%ld : برای چاپ اعداد از نوع short
3. حاوی کاراکترهای کنترلی باشد. به این صورت که با این کاراکتر ها میتوان محل چاپ،چاپ در سطر بعدی و ... را تنظیم کرد. این کاراکنر ها با "\" شروع میشوند و بعد از آن شناسه ی دیگر آن می آید(مانند کاراکترهای فرمت). در زیر اطلاعات تفصیلی در این باره آمده است :
\f : موجب انتقال کنترل به صفحه ی جدید میشود.
\n : موجب انتقال کنترل به خط جدید میشود.
\t : انتقال به 8 محل بعدی صفحه نمایش.
\" : چاپ (")
\' : چاپ (')
\\ : back slash
\v : انتقال کنترل به 8 سطر بعدی
\N : ثابت های مبنای 8 (N عددی مبنای 8 است)
\xN : ثابت های مبنای 16 (N عددی مبنای 16 است)

خوب حالا وحشت نکنید، الان مثال حل میکنیم تا مطلب جا بیفته قبل از هر چیز باید بگم عبارات و جمله هایی که در برنامه بعد از "//" قرار میگیرند توسط کامپایلر اجرا نمیشوند و تنها جهت توضیح و خوانایی برنامه است.
مثال 1: چاپ یک رشته ی معمولی با printf() :
کد:
#include// the library that printf is in that
int main()
{//Begin of program
printf("C is a language"); // printing the text on the screen
return 0; //waits for a key press after the program is finished & wont jump out of it
} //End of program
خروجی : C is a language


حالا اگر یک تغییرات کوچکی در برنامه ی بالا بدهیم و دو عبارت را چاپ کنیم :
کد:
#include
int main()
{
printf("C is a language");
printf("I like it"); //prints the second text
return 0;
}

خروجی : C is a languageI like it
به خروجی بالا دقت کنید. دقیقا عبارت دوم بعد از عبارت اول چاپ شده است و بسیار ناخوانا است. اینجاست که بحث حالت سوم پیش ماید. یعنی کاراکترهای کنترلی.
با نگاهی به این کاراکترها میبینیم که آنها میتوانند نیازهای ما را برطرف کنند. مثلا اگر من بخواهم جمله ی دوم من در خط بعدی چاپ شود، یا در 8 سطر بعدی چاپ شود، یا در 8 ستون بعدی(یک Tab) و ...
.....
کد:
Printf("C is a language/n"); // Control would be placed in next line
printf("I like it");

…..
خروجی :
C is a language
I like it
حال یک مثال دیگر :
.....
کد:
printf("C is a language /t"); // Control would be placed in next Tab
printf("I like it");

…..
خروجی :
C is a language I like it

حال یک مثال دیگر :
.....
کد:
printf("/"Hello/"");

…..
خروجی :
"Hello"
و بقیه نیز بر حسب کاربرد به اینگونه است ...

کاراکترهای فرمت :
خوب، با یک مثال شروع میکنیم. ما یک متغیر داریم که میخواهیم مقدار آن را در خروجی چاپ کنیم. نوع data type آن integer هستش و در هنگام تعریف کردن به آن مقدار اولیه 5 را داده ایم. خوب شروع میکنیم.
کد:
#include
int main()
{
int x=5;
printf("Our variable is called x & it is equal with %d",x);
return 0;
}

خروجی :
Our variable is called x & it is equal with 5
در مثال بالا دقت کنید . متن ها به صورت عینی چاپ میشوند و در جای %d عینا مقدار صحیح متناظر قرار میگیرد. به مثالی دیگر توجه کنید.
کد:
#include
int main()
{
int x=5;
float y=6.7;
printf("Our variables are called x=%d \tand\t y=%f",x,y);
return 0;
}

خروجی :
Our variable are called x=5 and y=6.7
بسیار خوب در این مثال ترکیبی از همه ی کارهای این بخش بود. \t ها باعث شد هنگام چاپ کنترل 8 کاراکتر به جلو بپرد و %d و %f هم که برای چاپ مقادیر صحیح و اعشاری int و float بودند.

حالا میرسیم به این مبحث که ما این همه نوشتیم ، حالا چه جوری پاکش کنیم ؟!؟! یا اینکه چه جوری تو یه جای خاص از صفحه بنویسیم ؟ مثلا سطر 10 و ستون 20 .برای این کارها 2 تابع موجود است که هردو در فایل conio.h قرار دارد.

تابعی که صفحه را پاک میکند clrscr() نام دارد. این تابع تمامی صفحه را پاک کرده و کنترل را به نقطه ی 0.0 منتقل میکند.
تابع gotoxy(a,b) مکان نما را به نقطه ی a,b منتقل میکند و از این پس نوشتن را در آن محل انجام میدهد. به مثال زیر توجه کنید :
....
کد:
gotoxy(10,20);
printf("C is a language");

…..
با اجرای این مثال جمله ی بالا در مختصات 10و20 صفحه چاپ میشود.


طول میدان :
برای اینکه به تابع printf() طول میدان بدیم تا هرکاری خواست در هنگام چاپ انجام نده باید در کاراکترهای فرمت تغییراتی رو ایجاد کنیم.
%5d
این دستور نشان دهنده ی یک کاراکتر فرمت صحیح با طول میدان 5 عدد صحیح است.
%5.3f
این دستور نشان دهنده ی یک کاراکتر فرمت اعشاری است با طول میدان 5 عدد صحیح و سه عدد اعشار.

پایان .

در انتها باید بگویم در C++ به جای printf() از تابعی با نام cout استفاده میشود . در این تابع کاراکتر های ورودی نقشی ندارند ولی از کاراکترهای کنترلی پشتیبانی میشود. روش استفاده از آن در مثال زیر نشان داده میشود:
کد:
#include
int main()
{
int x=5;
cout<<"We are printing an integer variable : "<<<"\N";
cout<<"again we are printing : "<<
cout<<"Finished";
return 0;
}

خروجی :
We are printing an integer variable : 5
Again we are printing : 5
Finished

توجه کنید که endl (end line) همان کار \n را انجام میدهد.


 

بخش دوم : scanf()

تابع scanf() اگر درست اجرا شود تعداد متغیرهایی را که از ورودی خوانده برمیگرداند و در غیر این صورت عبارت EOF ( با حروف بزرگ ) را برمیگرداند. صورت کلی scanf() به صورت زیر است :
کد:
Scanf("<1>",<2>);


عبارت <1> میتواند در برگیرنده ی 3 کاراکتر میتواند باشد :
1. کاراکترهای فرمت که از آنها به تفصیل در بَخش 1 سخن گفته شد.
2. space : که به آن فضای خالی گویند و گذاشتن حتی یک space سبب میگردد که در هنگام وارد کردن اطلاعات تمامی space ها ، Tab ها و new line ها نادیده گرفته شوند و اطلاعات خالص از صفحه کلید خوانده شود. مثلا اگر شما قبل از عدد ورودی 5 جای خالی بگذارید به دلیل وجود space در قسمت 1 نادیده گرفته میشوند و تنها عدد 5 خوانده میشود.
3. کاراکترهایی غیر از فرمت و space . این کاراکتر ها اگر عینا در هنگام وارد کردن اطلاعات وارد شوند از آنها صرفنظر میشوند. به مثال رو به رو توجه کنید : "%d,%d"
به کاما در بین دو کاراکتر فرمت توجه کنید. حال فرض کنید در ورودی اطلاعات به صورت زیر وارد شده : 5,10 در این حالت اعداد 5 و 10 خوانده میشوند و از کاراکتر کاما صرف نظر میشود.

در قسمت <2>، متغیر ها با آدرسشان ذکر میشوند. توجه شود که هنگامی که علامت & قبل از نام متغیر می آید، نشان دهنده ی آدرس آن است. یعنی دستور &variable1 آدرس متغیر variable1 را برمیگرداند.
کد:
scanf("%d%f", &x,&a);



مثال : محیط و مساحت یک مستطیل :
کد:
#include
#include
int main()
{
int x,y,area,p;
printf("Enter length & width : ");
scanf("%d%d", &x, &y);
area=x*y;
p=(x+y)*2;
printf(" Area = %d , p = %d", area,p);
getch();
return 0;
}

توابع خواندن کاراکتر از صفحه کلید :
برای خواندن کاراکتر از صفحه کلید ، 2 تابع وجود دارد : getch() و getche() . که هر دو عمل خواندن کاراکتر را با اندکی تفاوت انجام میدهند. تابع getch() کاراکتری را که از keyboard میخواند را در صفحه نمایش نمیدهد در حالی که getche() این کار را میکند (نمایش دادن کاراکتر). تفاوت هردوی آنها با scanf() در این است که نیازی به فشردن کلید Enter پس از فشردن کاراکتر بر روی صفحه کلید ندارد. به طوری که به سرعت پس از فشردن کلید بر روی صفحه، کاراکتر آن در متغیر از جنس char ذخیره میشود.
مثال

کد:
getch() :
#include
#include
int main()
{
char ch;
printf("Press a key : ");
ch=getch();
printf("You Pressed : ");
printf(" %c",ch);
getch();
return 0;
}

خروجی : اگر فرض کنیم که کاربر کلید C را زده باشد داریم :
C
در این مثال تنها یک C چاپ میشود و آن نیز مقدار موجود در متغیر ch است. تابع getch() همانطور که میدانیم چیزی در صفحه نمایش چاپ نخواهد کرد.


مثال
کد:
getche() :
#include
#include
int main()
{
char ch;
printf("Press a key : ");
ch=getche();
printf("\n You Pressed : ");
printf(" %c",ch);
getch();
return 0;
}

خروجی : اگر فرض کنیم که کاربر کلید C را زده باشد داریم :
C
You Pressed :C
در این مثال اولین C همانی است که از صفحه کلید خوانده شده و دومی مقدار موجود در متغیر ch است.


این مطلب بین C و ++C مشترک است.

برنامه های ساخت یافته :


توابع :
با استفاده از توابع میتوانیم برنامه را به بخش های کوچکتر شکسته و آن را بسیار خواناتر کنیم. باید گفت توابع قسمتی از برنامه هستند که از کد اصلی (بخش main ) حذف شده و به صورت یک قطعه برنامه نوشته میشود (مثلا فرض کنید عمل جمع در یک ماشین حساب از بدنه ی اصلی برنامه جدا شود و یک قطعه کد شود که دو عددی که باید جمع کند را به صورت ورودی بگیرد).یک کاربرد دیگر توابع این است که از دوباره نویسی کدهایی که کاربردشان زیاد است جلوگیری میکند. مثلا اگر تابع جمع ما در برنامه ی ماشین حساب در 5 جا باید نوشته شود، با یکبار نوشتن تابع، میتوان آن را در 5 جا صدا کرد ( فراخوانی،Call ) . وقتی یک تابع call میشود خط اجرای برنامه به آن تابع رفته و پس از اجرای کامل تابع به برنامه بازمیگردد.
در زبانهای برنامه نویسی روال تابع ها معمولا بر این اساس است که 2 نوع تابع دارند که یک سری یک مقدار ( متغیر ) را به برنامه برمیگرداند و سری دیگر فقط یک سری دستورات را اجرا میکنند ( البته بعضی از توابع هیچ یک از این دو سری نیستند . مانند constructor در کلاس ها-بعدا در مبحث کلاس ها توضیح داده میشود ).

نوع اول : تابع های دارای نوع .
این تابع ها دارای نوع (data type ) هستند، به طوری که مقداری که تابع برمیگرداند از جنس یکی از data type ها است.( مثلا int,char,double ,... ). این نوع توابع را به صورت کلی زیر مینویسند :

;()نام تابع نام datatype




کد:
int function1();
char function2();





function1 : تابعی از جنس int ( یعنی مقدار بازگردانده شده به برنامه از نوع عدد صحیح خواهد بود )
function2 : تابعی از جنس کاراکتر ( یعنی مقدار بازگردانده شده به برنامه از نوع کاراکتر خواهد بود )

توابع نوع دوم : این توابع تنها یک سری دستورات را اجرا میکنند و از هیچ نوع data type خاصی هم نیستند. این نوع توابع را به صورت کلی زیر مینویسند :

;()نام تابع void

مثال :



کد:
void function3();
void function4();





Function3 , function4 دارای هیچ نوعی نیستند و تنها یک سری دستورات را اجرا میکنند.

حال برای توضیح بیشتر فرض میکنیم دو تابع برای دو دکمه ی ماشین (دکمه ی C یا reset و دگمه ی =) حساب نوشته ایم . در دکمه ی C همه ی اطلاعات پاک میشود و همه چیز به حالت اول برمیگردد و در این حالت نیازی نداریم چیزی را به ماشین حساب بازگردانیم. اما در مورد دکمه ی = باید مقداری که از عملیات ریاضی حاصل میشود را بر روی صفحه ی نمایش ماشین حساب نمایش داد. پس باید یک مقدار به ماشین حساب بازگردد.
 
 
نوشته شده توسط نیلوفر جمشیدی در ساعت 8:38 | لینک  | 

ict چیست؟

فن آوری اطلاعات و ارتباطات چيست ؟
در بخش اول اين مقاله به منظور آشنائی با ابعاد متفاوت فن آوری اطلاعات و ارتباطات به طرح سوالاتی در اين رابطه پرداخته گرديد. در ادامه ، ضمن بررسی تفاوت بين " اطلاعات " و "دانش " ، به اين موضوع مهم اشاره گرديد که می توان اطلاعات را به منزله مواد اوليه توليد دانش در نظر گرفت . بين استفاده درست از اطلاعات و توليد دانش با توسعه ، ارتباط مستقيم و تنگاتنگی وجود دارد.
در بخش دوم با تمرکز بر روی فن آوری اطلاعات و ارتباطات و ارائه تعاريف متفاوت، به بررسی زيرساخت فن آوری اطلاعات و ارتباطات ، خواهيم پرداخت .

فن آوری اطلاعات و ارتباطات ( ICT )
تفاوت فن آوری اطلاعات و ارتباطات ( ICT) با فن آوری اطلاعات ( IT ) ، چيست ؟ در فن آوری اطلاعات و ارتباطات ، دستگاه ها و فن آوری های ارتباطی دارای جايگاهی خاص بوده و از عناصر اساسی به منظور استفاده از مزايا و دستاوردهای فن آوری اطلاعات و ارتباطات ، محسوب می گردند. در ادامه با تعاريف متفاوت ICT ، بيشتر آشنا می شويم :

در اوايل سال 1990 به مجموعه سخت افزار ، نرم افزار ، شبکه و صنايع مرتبط به آنان ، فن آوری اطلاعات ( IT ) گفته می شد. در فن آوری اطلاعات و ارتباطات ( ICT ) ، تاکيد و محوريت بر روی جنبه ارتباطی می باشد ، بگونه ای که ارتباطات به منزله يک "بايد" مطرح بوده که فن آوری اطلاعات بدون وجود آن امکان ارائه سرويس ها و خدمات را دارا نمی باشد .

فن آوری اطلاعات و ارتباطات،واژه ای است که به هر نوع دستگاه ارتباطی و يا برنامه نظير: راديو ، تلويزيون ، تلفن ها ی سلولی ، کامپيوتر ، نرم افزار ، سخت افزارهای شبکه ، سيستم های ماهواره اری و نظاير آن اطلاق شده که سرويس ها ،خدمات و برنامه های متعددی به آنان مرتبط می گردد( کنفرانس از راه دور ، آموزش از راه دور) .

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

فن آوری اطلاعات و ارتباطات ، به مجموعه امکانات سخت افزاری ، نرم افزاری ، شبکه ای و ارتباطی به منظور دستيابی مطلوب به اطلاعات ، گفته می شود .

همگرائی بين کامپيوتر و ارتباطات ، فن آوری اطلاعات و ارتباطات را شکل می دهد .( پيوند بين کامپيوتر و بهره برداری از تمامی قابليت های آن خصوصا" پردازش و ذخيره سازی داده با امکانات متعدد ارتباطی ) .

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

مهمترين ويژگی فن آوری اطلاعات و ارتباطات ، نحوه ذخيره سازی ، پردازش و دستيابی به اطلاعات است .

به مجموعه فن آوری هائی که امکان ذخيره سازی ، پردازش ، ارائه و انتقال اطلاعات را از طريق محيط های انتقال فراهم می نمايد ، اطلاق می گردد.

فن آوری اطلاعات و ارتباطات به جايگاه برجسته اطلاعات ، دستگاههای ذخيره سازی و پردازش اطلاعات و دستگاههای انتقال و دستيابی به اطلاعات تاکيد دارد . بديهی است در اين راستا ، علاوه بر پتانسيل های مخابراتی ، رسانه هائی ديگر نظير راديو و تلويزيون نيز در فهرست وسايل ارتباطی ( کانال نشر و توزيع اطلاعات ) ، قرار خواهند گرفت . زير ساخت فن آوری اطلاعات و ارتباطات در مرحله اول نيازمند وجود يک زيرساخت اطلاعاتی است که در آن تمامی دستگاهها و وسايل ارتباطی نظير تجهيزات مخابراتی ، راديو و تلويزيون قرار خواهند گرفت . زيرساخت اطلاعاتی به منزله فونداسيون زيرساخت فن آوری اطلاعات و ارتباطات ، مطرح بوده که امکان ارائه سرويس ها و خدمات اطلاعاتی را با کيفت مطلوب ، فراهم می نمايد. بر همين اساس می توان فن آوری اطلاعات و ارتباطات را مشتمل بر سه بخش اساسی زير در نظر گرفت :

زيرساخت اطلاعات Information Infrastructure : II
فن آوری های اطلاعات Information Technologies : IT
کاربردهای اطلاعات Information Application : IA





زير ساخت اطلاعات ( II )
در زيرساخت اطلاعات ، هدف ايجاد و گسترش امکانات زير می باشد :
شبکه ها و سرويس های مخابراتی
تکنولوژی های انتقال
سوئيچينگ و روتينگ
دستيابی و عرضه
ارتباطات چند رسانه ای ( صوت ، تصوير )

شامل :
- شبکه های موبايل ، بدون کابل
- شبکه های فيبر نوری
- سيستم های ماهواره ای
- سيستم های سخن پراکنی
- ترکيب ( تلفيق) مخابرات با سيستم های چند رسانه ای
- ارتباطات محلی با سرعت بالا
- ارتباطات شهری ، منطقه ای و ملی با سرعت بالا


فن آوری اطلاعات ( IT )
در فن آوری اطلاعات ، موارد زير مورد توجه قرار می گيرد :
ذخيره سازی اطلاعات
پردازش و ارائه اطلاعات
سيستم ها ی عامل
زبان ها ی برنامه نويسی
مهندسی پروتکل ها
نرم افزارهای کاربردی

شامل :
- پروتکل های شبکه
- شبکه های ذخيره سازی داده
- فن آوری های رمزنگاری و امنيتی
- سخت افزار( کامپيوترهای شخصی ، سرويس دهندگان و ... )
- طراحی بانک های اطلاعاتی
- زبان های ارائه محتوا در وب نظير HTML,XML
- تشخيص و پيشگيری از حملات

کاربردهای اطلاعات ( IA )
در کاربردهای اطلاعات ، موارد زير مورد توجه قرار می گيرد :
ارائه خدمات
اشتراک دانش
مديريت عمومی
سرويس های اجتماعی
راه حل های تجاری
توليد و نشر محتوا

شامل :
- آموزش
- فرصت های اقتصادی و توليد درآمد
- توسعه روستائی
- بهبود سلامت شهروندان نظير استفاده از درمان راه دور
- امنيت و مونيتورينگ مسائل زيست محيطی
- مديريت اقتصادی و دولتی
- کتابخانه های الکترونيکی
- تجارت الکترونيکی
- بانکداری الکترونيکی
- آموزش الکترونيکی
- و ...

همانگونه که ملاحظه می شود برای هر يک از بخش های سه گانه در فن آوری اطلاعات و ارتباطات ، محدوده خاصی در نظر گرفته شده است ولی در عمل تعيين دقيق اين محدوده ، امری دشوار و گاها" غيرممکن است. مثلا" برنامه های نرم افزاری در بخش فن آوری اطلاعات قرار گرفته ولی امکان پياده سازی آنان در زير مجموعه کاربردهای اطلاعات ( IA ) نيز وجود خواهد داشت .همچنين ارتباطات چندرسانه ای در زير مجموعه زيرساخت اطلاعات ( II ) قرار گرفته شده اند ولی امکان پياده سازی برخی از ويژگی های مالتی مديا در زيرمجموعه فن آوری اطلاعات ( IT ) ، نيز وجود دارد.
علیرغم عدم وجود محدوده ای مشخص و شفاف برای هر يک از عناصر موجود در بخش های سه گانه زيرساخت فن آوری اطلاعات و ارتباطات ، می توان با لحاظ نمودن وزن بکارگيری امکانات سخت افزاری و نرم افزاری در هر يک از بخش ها ، به يک مرزبندی خاص دست يافت :

عناصر زيرساخت اطلاعات ( II ) ، نيازمند استفاده از تجهيزات و امکانات فيزيکی گسترده ای نظير سيستم های سوئيچينگ ، روتينگ ، شبکه ای گسترده از خطوط تلفن ثابت ، سيار و شبکه های رادئوئی ، می باشند . در اين رابطه و به منظورانجام عمليات و مديريت زيرساخت فيزيکی متشکل از عناصر و تجهيزات سخت افزاری ،می بايست از سخت افزار و نرم افزارهای متعددی استفاده شود. با طراحی و پياده سازی زيرساخت اطلاعات ( بستر ارتباطی ) ، امکان ارتباط دستگاههای مختلفی نظير تلفن های ثابت ، تلفن های سلولی ، دستگاههای بدون کابل ، کامپيوترهای شخصی و سرويس دهندگان به شبکه فراهم و آنان قادر به استفاده از سرويس ها و خدمات مختلفی می باشند.ارتباط با زيرساخت اطلاعاتی ( ارتباطی ) ممکن است مستقيما" (از طريق شبکه ايجاد شده) و يا با استفاده از تجهيزات خاصی نظير مودم، کارت های ISDN ، خطوط DSL و يا دستگاههای بدون کابل ، ايجاد گردد. معمولا" برای سنجش ميزان شکاف ديجيتالی بين جوامع فقير و ثروتمند ، به تنوع ، تعداد و کيفيت وسايل ارتباطی به زيرساخت ، استناد می گردد . بديهی است با فرض ايجاد زير ساخت اطلاعات ، بدون وجود دستگاههای ارتباطی ( از بعد کمی و کيفی) ، امکان استفاده مطلوب و بهينه از زير ساخت و درنهايت بهره مندی از دستاوردها و پتانسيل های ارائه شده در بخش های فن آوری اطلاعات و کاربردهای اطلاعات ، وجود نخواهد داشت . دستگاههای ارتباطی ( نظير تلفن های ثابت ، سلولی ) به عنوان شرط لازم برای ورود به بزرگراه های اطلاعاتی مطرح می باشند. بديهی است تنوع ، کيفيت و مقرون به صرفه بودن دستگاههای ارتباطی ، گزينه های متعددی را به منظور استفاده از منابع اطلاعاتی در اختيار متقاضيان ، قرار می دهد .امکان دستيابی آحاد جامعه به منابع اطلاعاتی ، يکی از عناصر اصلی سيا ست گذاری در زمان تعريف استراتژی توسعه فن آوری اطلاعات و ارتباطات در هر جامعه می باشد .
نوشته شده توسط نیلوفر جمشیدی در ساعت 15:5 | لینک  | 

تاریخچه

در مقایسه با زبان‌های دیگر، همچون ++C یا بیسیک یا فورترن، جاوا زبان نسبتاً جدیدتری است. شرکت سان مایکروسیستمز در سال ۱۹۹۱ یک پروژه تحقیقاتی به نام گرین (Green) را آغاز کرد. هدف این پروژه ایجاد زبانی جدید شبیه به ++C بود که نویسنده اصلی آن، جیمز گاسلینگ، آن را بلوط (Oak) نامید. اما بعدها به دلیل برخی مشکلات حقوقی[نیازمند منبع] از میان لیستی از کلمات تصادفی[۱] نام آن به جاوا تغییر کرد.

پروژه گرین به دلیل مشکلات بازاریابی در شرف لغو شدن بود تا اینکه گسترش وب در سال ۱۹۹۳ باعث نمایش توانایی‌های وافر جاوا در این عرصه گشت. اینگونه بود که شرکت سان مایکروسیستمز در مه ۱۹۹۵ جاوا را رسماً به بازار عرضه کرد.

جاوا یک زبان برنامه‌نویسی است که در ابتدا توسط شرکت sun Microsystems ایجاد شده‌است و در سال 1995 به عنوان مولفه اصلی java platform منتشر شد.این زبان قسمت های بسیاری از گرامر خود را از C و ++C گرفته اما دارای مدل شی‌گرایی ساده‌ای است و امکانات سطح پایین کمی دارد. کاربرد جاوا در کامپایل به صورت بایت کد است که قابلیت اجرا روی تمامی ماشین‌های شبیه‌سازی جاوا را داشته باشد صرف نظر از معماری و خصوصیات آن کامپیوتر. اجرای اصلی کامپایلرهای جاوا، ماشین‌های پیاده‌سازی و کتابخانه‌های آن توسط این شرکت از سال 1995 منتشر شد. در 2007 may این شرکت، نرم‌افزار رایگان این زبان را فراهم کرد. دیگران هم کاربردهای دیگری از این زبان را منتشر کردند مثل کامپایلر GNU برای جاوا.

Games Gosling پروژه زبان برنامه‌نویسی جاوا را در 1991 june آغاز کرد. این زبان در ابتدا Oak، سپس Green و در آخر هم جاوا نامیده شد. gosling قصد داشت یک ماشین مجازی و یک ماشینی به کار برد که شبیه C و ++C باشد. این شرکت نسخهٔ اول جاوا را تحت عنوان Java1.0 در سال 1995 منتشر ساخت. جستجوگرهای اصلی وب، به هم پیوستند تا به طور مطمئن java applet را بدون صفحات وب اجرا کنند و به این صورت جاوا خیلی زود معروف و محبوب شد. با پیدایش java2، نسخهٔ جدید توانست ترکیب‌های جدیدی را برای نوع‌های مختلف پلت فرم‌ها ایجاد کند. به عنوان مثال J2EE، باهدف کاربرد برای تشکیلات اقتصادی، و نسخهٔ J2ME برای موبایل منتشر شد. در سال 2006 با هدف بازاریابی، این شرکت نسخهٔ جدید J2 را با نام‌های JavaEE ،JavaME و JavaSE منتشر کرد. در سال 1997 شرکت سان میکروسیستمز،ISO/IEC JTC1 standards body و Ecma International را به فرمول جاوا تغییر داد. شرکت sun بسیاری از کاربردهای جاوایش را بدون هیچ هزینه‌ای فراهم آورد. شرکت sun با فروش مجوز برای بعضی از کاربردهای خاصش مثل Java Enterprise System درآمدی را بدست آورد. اولین تمایزی که بین SDK و JRE داد شامل فقدان کامپایلر برای JRE و سرفایل ها بود. در 13 نوامبر 2006 شرکت sun نرم‌افزار جاوا را به صورت رایگان و با مجوز عمومی برای همه منتشر کرد. جاوا یک پلتفرم نرم افزاری است.

 اهداف اولیه

  1. این زبان باید ساده، شی‌گرا و مشهور باشد.
  2. مطمئن و بدون خطا باشد.
  3. وابسته به معماری کامپیوتر نبوده و قابل انتقال باشد.
  4. باید با کارایی بالا اجرا شود.
  5. باید به صورت پویا و نخ‌کشی‌شده باشد.

 برنامه‌های جاوا و اپلت‌ها

جاوا برای نوشتن انواع برنامه‌های کاربردی مناسب است. با جاوا می‌توان انواع برنامه‌های زیر را نوشت:

  • برنامه‌های تحت وب
  • برنامه‌نویسی سیستم‌های کوچک مانند موبایل، پاکت پی‌سی و ...
  • برنامه‌های کاربردی بزرگ (Enterprise)
  • برنامه‌های رومیزی (Desktop)
  • و غیره.

قابلیت خاصی در جاوا وجود دارد بنام اپلت. اپلت‌ها امکانات فراوانی برای نوشتن برنامه‌های تحت وب در اختیار برنامه‌نویسان قرار می‌دهند که دیگر زبان‌های برنامه‌نویسی فاقد آن هستند.[نیازمند منبع] البته وجود ماشین مجازی جاوا برای اجرای اپلت لازم است. اپلت‌ها نظیر فناوری Activex شرکت مایکروسافت هستند که برنامه‌نویسان را قادر می‌سازد تا امکاناتی را به مرورگر کاربر بیافزایند.البته تفاوت این دو در امنیت می‌باشد به گونه‌ای که اپلت‌ها بدلیل اینکه در محیطی به نام جعبه شنی اجرا می‌شوند امن هستند ولی Activex ها فاقد چنین امنیتی هستند.

  1. سیستم عامل: هر چقدر زبانهای .net قوی باشند تنها بر روی پلت فرم ویندوز اجرا می‌شوند و برخی ویندوز را سیستم عامل غیر قابل اعتمادی در برنامه نویسی Enterprise می‌دانند.[نیازمند منبع] ولی جاوا از این نظر انتخابی خوب است.
  1. قابلیت حمل: جاوا بر روی پلتفرم‌های گوناگونی قابل اجرا است، از ATM و ماشین رختشویی گرفته تا سرورهای سولاریس با قابلیت پشتیبانی از 1024 cpu برای پردازش.
  1. جاوا بیشتر از یک زبان است: جاوا فقط یک زبان نیست و انجمن‌هایی متشکل از بزرگان صنایع و برنامه‌نویسان زیادی مشغول به توسعه و ایجاد استانداردهای جدید و به روز هستند.

 خط مشی جاوا

یکی از ویژگی‌های جاوا قابل حمل بودن آن است. یعنی برنامهٔ نوشته شده به زبان جاوا باید به طور مشابهی در کامپیوترهای مختلف با سخت‌افزارهای متفاوت اجرا شود. و باید این توانایی را داشته باشد که برنامه یک بار نوشته شود، یک بار کامپایل شود و در همه کامپیوترها اجرا گردد. به این صورت که کد کامپایل شدهٔ جاوا را ذخیره می‌کند، اما نه به‌صورت کد ماشین بلکه به‌صورت بایت کد جاوا. دستورالعمل‌ها شبیه کد ماشین هستند، اما با ماشین‌های مجازی که به طور خاص برای سخت‌افزارهای مختلف نوشته شده‌اند، اجرا می‌شوند. در نهایت کاربر از JRE نصب شده روی ماشین خود یا جستجوگر وب استفاده می‌کند. کتابخانه‌های استاندارد یک راه عمومی برای دسترسی به ویژگی‌های خاص فراهم می‌کنند. مانند گرافیک، نخ‌کشی و شبکه. در بعضی از نسخه‌های JVM بایت کدها می‌توانند قبل و در زمان اجرای برنامه به کدهای محلی کامپایل شوند. فایدهٔ اصلی استفاده از بایت کد، قسمت کردن است. اما ترجمهٔ کلی یعنی برنامه‌های ترجمه شده تقریباً همیشه کندتر از برنامه‌های کامپایل شدهٔ محلی اجرا می‌شوند. این شکاف می‌تواند با چند تکنیک خوش‌بینانه که در کاربردهای JVM قبلی معرفی شد، کم شود. یکی از این تکنیک‌ها JIT است که بایت کد جاوا را به کد محلی ترجمه کرده و سپس آن را پنهان می‌کند. در نتیجه برنامه خیلی سریع‌تر نسبت به کدهای ترجمه شدهٔ خالص شروع و اجرا می‌شود. بیشتر VM های پیشرفته، به‌صورت کامپایل مجدد پویا، در آنالیز VM، رفتار برنامهٔ اجرا شده و کامپایل مجدد انتخاب شده و بهینه‌سازی قسمت‌های برنامه، استفاده می‌شوند. کامپایل مجدد پویا می‌تواند کامپایل ایستا را بهینه‌سازی کند. زیرا می‌تواند قسمت hot spot برنامه و گاهی حلقه‌های داخلی که ممکن است زمان اجرای برنامه را افزایش دهند را تشخیص دهد. کامپایل JIT و کامپایل مجدد پویا به برنامه‌های جاوا اجازه می‌دهد که سرعت اجرای کدهای محلی بدون از دست دادن قابلیت انتقال افزایش پیدا کند.

تکنیک بعدی به عنوان کامپایل ایستا شناخته شده است. که کامپایل مستقیم به کدهای محلی است مانند بسیاری از کامپایلرهای قدیمی. کامپایلر ایستای جاوا، بایت کدها را به کدهای شی محلی ترجمه می‌کند.

کارایی جاوا نسبت به نسخه‌های اولیه بیشتر شد. در تعدادی از تست‌ها نشان داده شد که کارایی کامپایلرJIT کاملاََ مشابه کامپایلر محلی شد.عملکرد کامپایلرها لزوماَ کارایی کدهای کامپایل شده را نشان نمی‌دهند.یکی از پیشرفت های بی نظیر در در زمان اجرای ماشین این بود که خطا ها ماشین را دچار اشکال نمی‌کردند.علاوه بر این در زمان اجرای ماشینی مانند جاوا وسایلی وجود دارد که به زمان اجرای ماشین متصل شده و هر زمانی که یک استثنا رخ می‌دهد،اطلاعات اشکال زدایی که در حافظه وجود دارد ،ثبت می‌کنند.

 پیاده سازی

شرکت سان میکروسیستم مجوز رسمی برای پلت فرم استاندارد جاوا را بهMicrosoft Windows, Linux, و Solaris. داده است. همچنین محیط‌های دیگری برای دیگر پلت فرم ها فراهم آورده است. علامت تجاری مجوز شرکت سان میکروسیستم طوری بود که با همهٔ پیاده سازی ها سازگار باشد.به علت اختلاف قانونی که با ماکروسافت پیدا کرد، زمانی که شرکت سان ادعا کرد که پیاده سازی ماکروسافت از RMI یا JNI پشتیبانی نکرده و ویژگی های خاصی را برای خودش اضافه کرده‌است. شرکت سان در سال 1997 پیگیری قانونی کرد و در سال 2001 در توافقی 20 میلیون دلاری برنده شد. در نتیجه کمی بعدماکروسافت جاوا را به ویندوز فرستاد. در نسخهٔ اخیر ویندوز، جستجوگر اینترنت نمی‌تواند از جاوا پلت فرم پشتیبانی کند. شرکت سان و دیگرانیک سیستم اجرای جاوای رایگان برای آنها و نسخه‌های دیگر ویندوز فراهم آوردند.

 اداره خودکار حافظه

جاوا از حافظهٔ بازیافتی خودکار برای ادارهٔ حافظه در چرخهٔ زندگی یک شی استفاده می‌کند. برنامه‌نویس زمانی که اشیا به وجود می‌آیند، این حافظه را تعیین می‌کند. و در زمان اجرا نیز، زمانی که این اشیا در استفادهٔ زیاد طولانی نباشند، برنامه نویس مسئول بازگرداندن این حافظه است. زمانی که مرجعی برای شی های باقیمانده نیست، شی‌های غیر قابل دسترس برای آزاد شدن به صورت خودکار توسط بازیافت حافظه،انتخاب می‌شوند. اگر برنامه‌نویس مقداری از حافظه را برای شی‌هایی که زیاد طولانی نیستند، نگه دارد، چیزهایی شبیه سوراخ حافظه اتفاق می‌افتند.

یکی از عقایدی که پشت سر مدل ادارهٔ حافظهٔ خودکار جاوا وجود دارد، این است که برنامه‌نویس هزینهٔ اجرای ادارهٔ دستی حافظه را نادیده می‌گیرد. در بعضی از زبان‌ها حافظه لازم برای ایجاد یک شی، به صورت ضمنی و بدون شرط، به پشته تخصیص داده می‌شود. و یا به‌طور صریح اختصاص داده شده و از heap بازگردانده می‌شود. در هر کدام از این راه‌ها، مسئولیت ادارهٔ اقامت حافظه با برنامه‌نویس است. اگر برنامه شی را برنگرداند، سوراخ حافظه اتفاق می‌افتد. اگر برنامه تلاش کند به حافظه‌ای را که هم‌اکنون بازگردانده شده، دستیابی پیدا کند یا برگرداند، نتیجه تعریف شده نیست و ممکن است برنامه بی‌ثبات شده و یا تخریب شود. این ممکن است با استفاده از اشاره‌گر مدتی باقی بماند، اما سرباری و پیچیدگی برنامه زیاد می‌شود. بازیافت حافظه اجازه دارد در هر زمانی اتفاق بیفتد. به‌طوری که این زمانی اتفاق می‌افتد که برنامه بی‌کار باشد. اگر حافظهٔ خالی کافی برای تخصیص شی جدید در heap وجود نداشته باشد، ممکن است برنامه برای چند دقیقه متوقف شود. در جایی که زمان پاسخ یا اجرا مهم باشد، ادارهٔ حافظه و منابع اشیا استفاده می‌شوند.

جاوا از نوع اشاره‌گر ریاضی C و ++C پشتیبانی نمی‌کند. در جایی که آدرس اشیا و اعداد صحیح می‌توانند به جای هم استفاده شوند. همانند ++C و بعضی زبان‌های شی‌گرای دیگر، متغیرهای نوع‌های اولیهٔ جاوا شی‌گرا نبودند. مقدار نوع‌های اولیه، مستقیماً در فیلدها ذخیره می‌شوند. در فیلدها (برای اشیا) و در پشته (برای توابع)، بیشتر از heap استفاده می‌شود. این یک تصمیم هوشیارانه توسط طراح جاوا برای اجرا است. به همین دلیل جاوا یک زبان شی‌گرای خالص به حساب نمی‌آید.

 گرامر

گرامر جاوا خیلی بزرگتر از ++C است. مثل ++C که ترکیب ساختارها و برنامه‌های شی‌گرا می‌باشد، نیست. بلکه زبان جاوا یک زبان شی‌گرای خالص است. همهٔ کدهایی که داخل کلاس نوشته می‌شود و همهٔ چیزهایی که داخل شی است، با استثنائات نوع دادهٔ اصلی، که به صورت کلاس نیستند، برای اجرا. جاوا بسیاری از ویژگی‌ها را پشتیبانی می‌کند. از کلاس‌ها برای ساده‌تر کردن زبان و جلوگیری از رخداد خطا.

 نمونه‌هایی از برنامه‌های جاوا

در زیر نمونه‌ای از برنامه‌ای که در جاوا نوشته شده‌است آورده شده است. البته برای کامپایل کردن این برنامه بایستی JDK بر روی سیستم مورد نظر نصب شده باشد.

    public class Test{
    public static void main(String[] args) {
        System.out.println("HelloWorld!");
    }
 }

برای اجرای برنامه بالا، ابتدا باید یک فایل به نام Test.java ساخته شود و سپس کامپایل شود: ‎

$ javac Test.java 

سپس یک فایل خروجی به نام Test.class دریافت می‌شود. بعد با استفاده از دستور زیر برنامه قابل اجرا است:

$ java Test


 مثال ها

برنامه Hello world به این صورت در زبان جاوا می‌تواند نوشته شود:

   // HelloWorld.java
  public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
 }

بر طبق قرارداد فایل هل بعد از کلاس های عمومی نام گذاری می‌شوند.سپس باید پسوند java را به این صورت اضافه کرد: Hello world.java .این فایل اول باید با استفاده از کامپایلر جاوا به بایت کد کامپایل شود.در نتیجه فایل Hello world.class ایجاد می‌شود.این فایل قابل اجرا است.فایل جاوا ممکن است فقط یک کلاس عمومی داشته باشد.اما می‌تواند شامل چندین کلاس با دستیابی عمومی کمتر باشد.

کلاسی که به صورت خصوصی تعریف می‌شود ممکن است در فایل .java ذخیره شود.کامپایلر برای هر کلاسی که در فایل اصلی تعریف می‌شود یک کلاس فایل تولید می‌کند.که نام این کلاس فایل همنام کلاس است با پسوند .class

کلمه کلیدی public (عمومی) برای قسمت هایی که می‌توانند از کد های کلاس های دیگر صدا زده بشوند،به کهر برده می‌شود. کلمهٔ کلیدی static (ایستا) در جلوی یک تابع ،یک تابع ایستا را که فقط وابسته به کلاس است و نه قابل استفاده برای نمونه‌هایی از کلاس،نشان می‌دهد.فقط تابع های ایستا می‌توانند توسط اشیا بدون مرجع صدا زده شوند.داده‌های ایستا به متغیر هایی که ایستا نیستند،نمی توانند دسترسی داشته باشند.

کلمهٔ کلیدی void (تهی) نشان می‌دهد که تابع main هیچ مقداری را بر نمی گرداند.اگر برنامهٔ جاوا بخواهد با خطا از برنامه خارج شود،باید system.exit() صدا زده شود. کلمهٔ main یک کلمهٔ کلیدی در زبان جاوا نیست.این نام واقعی تابعی است که جاوا برای فرستادن کنترل به برنامه ،صدا می‌زند.برنامه جاوا ممکن است شامل چندین کلاس باشد که هر کدام دارای تابع main هستند.

تابع main باید آرایه‌ای از اشیا رشته‌ای را بپذیرد.تابع main می‌تواند از آرگومان های متغیر به شکل public static void main(string…args) استفاده کند که به تابع main اجازه می‌دهد اعدادی دلخواه از اشیا رشته‌ای را فراخوانی کند. پارامترstring[]args آرایه‌ای از اشیا رشته ایست که شامل تمام آرگومان هایی که به کلاس فرستاده می‌شود،است.

چاپ کردن،قسمتی از کتابخانهٔ استاندارد جاوا است.کلاس سیستم یک فیلد استاتیک عمومی به نام out تعریف کرده است.شی out یک نمونه از کلاس printstream است و شامل تعداد زیادی تابع برای چاپ کردن اطلاعات در خروجی استاندارد است.همچنین شامل println(string) برای اضافه کردن یک خط جدید برای رشتهٔ فرستاده شده اضافه می‌کند.

 توزیع‌های جاوا

منظور از توزیع جاوا پیاده‌سازی‌های مختلفی است که برای کامپایلر جاوا و همچنین مجموعه کتابخانه‌های استاندارد زبان جاوا (JDK) وجود دارد. در حال حاضر چهار توزیع‌کنندهٔ عمده جاوا وجود دارند:

  • سان میکروسیستمز: توزیع کننده اصلی جاوا و مبدع آن می‌باشد. در اکثر موارد هنگامی که گفته می‌شود جاوا منظور توزیع سان می‌باشد.
  • GNU Classpath: این توزیع از سوی موسسه نرم‌افزارهای آزاد منتشر شده و تقریبا تمامی کتابخانه استاندارد زبان جاوا در آن بدون بهره‌گیری از توزیع شرکت سان از اول پیاده‌سازی شده است. یک کامپایلر به نام GNU Compiler for Java نیز برای کامپایل کردن کدهای جاوا توسط این موسسه ایجاد شده‌است. فلسفه انتخاب نام Classpath برای این پروژه رها کردن تکنولوژی جاوا از وابستگی به علامت تجاری جاوا است بطوریکه هیچ وابستگی یا محدودیتی برای استفاده آن از لحاظ قوانین حقوقی ایجاد نشود و از طرفی به خاطر وجود متغیر محیطی classpath در تمامی محیط های احرایی برنامه‌های جاوا، این نام به نوعی تکنولوژی جاوا را برای خواننده القا می‌کند. کامپایلر GNU توانایی ایجاد کد اجرایی (در مقابل بایت کد توزیع سان) را داراست. لازم به ذکر است که در حال حاضر شرکت سان تقریبا تمامی کدهای JDK را تحت مجوز نرم‌افزارهای آزاد به صورت متن باز منتشر کرده است و قول انتشار قسمت بسیار کوچکی از این مجموعه را که به‌دلیل استفاده از کدهای شرکت‌های ثانویه نتوانسته به صورت متن باز منتشر نماید در آینده نزدیک با بازنویسی این کدها داده است.
  • مایکروسافت #J: این در حقیقت یک توزیع جاوا نیست. بلکه زبانی مشابه می‌باشد که توسط مایکروسافت و در چارچوب .net ارائه شده‌است. انتظار اینکه در سیستم عاملی غیر از ویندوز هم اجرا شود را نداشته باشید.
  • AspectJ: این نیز یک زبان مجزا نیست. بلکه یک برنامه الحاقی می‌باشد که امکان برنامه نویسی Aspect Oriented را به جاوا می‌افزاید. این برنامه توسط بنیاد برنامه‌نویسی جلوه‌گرا و به صورت کدباز ارائه شده‌است.

کلاس های خاص

 Applet (برنامه‌های کاربردی کوچک)

اپلت جاواها برنامه‌هایی هستند که برای کاربردهایی نظیر نمایش صفحات وب در جستجوگر وب، ایجاد شده‌اند. واژهٔ import باعث می‌شود کامپایلر جاوا کلاس‌های javaapplet.Applet وjava.awt.Graphics را به کامپایل برنامه اضافه کند. کلاس Hello کلاس Applet را توسعه می‌دهد. کلاس اپلت چارچوبی برای کاربردهای گروهی برای نمایش و کنترل چرخهٔ زندگی اپلت، درست می‌کند. کلاس اپلت یک تابع پنجره‌ای مجرد است که برنامه‌های کوچکی با قابلیت نشان دادن واسط گرافیکی برای کاربر را فراهم می‌کند. کلاس Hello تابع موروثی print(Graphics) را از سوپر کلاس container باطل می‌کند، برای اینکه کدی که اپلت را نمایش می‌دهد، فراهم کند. تابع paint شی‌های گرافیکی را که شامل زمینه‌های گرافیکی هستند را می فرستد تا برای نمایش اپلت‌ها استفاده شوند. تابع paint برای نمایش "Hello world!" تابع drawstring(string,int,int) را صدا می‌زند.

 Servlet

تکنولوژی servlet جاوا گسترس وب را به آسانی فراهم می‌کند.و شامل مکانیزم هایی برای توسعهٔ تابعی سرور وب و برایدسترسی به سیستم های تجاری موجود است.servlet قسمتی لز javaEE است که به درخواست های مشتری پاسخ می‌دهد.

      // Hello.java
      import java.io.*;
      import javax.servlet.*;
 
      public class Hello extends GenericServlet {
      public void service(ServletRequest request, ServletResponse response) 
            throws ServletException, IOException {
        response.setContentType("text/html");
        final PrintWriter pw = response.getWriter();
        pw.println("Hello, world!");
        pw.close();
       }
    }

واژهٔ import کامپایلر جاوا را هدایت می‌کند که تمام کلاس های عمومی و واسط ها را از بسته‌های java.io وjava.servlet را در کامپایل وارد کند.

کلاس Hello کلاس Genericservlet را توسعه می‌دهد. کلاس Genericservlet واسطی برای سرور فراهم می‌کند تا درخواست را به servlet بفرستد و چرخهٔ زندگی servlet را کنترل کند.

صفحهٔ سرور جاوا

صفحهٔ سرور جاوا قسمتی از سرور javaEE است که پاسخ تولید می‌کند.نوعاَ صفحات HTML به درخواست های HTTP از مشتری.JSP ها کد جاوا در صفحهٔ HTML را با استفاده از حائل <%and%>اضافه می‌کنند.JSP به javaservlet کامپایل می‌شود.

کاربرد swing (تاب خوردن)

Swing کتابخانهٔ واسط گرافیکی کاربر است برای پلت فرم javaSE. ابزاری مشابه پنجره، GTK و motif توسط شرکت sun فراهم شده‌اند. این مثال کاربرد swing یک پنجرهٔ واحد همراه با Hello world را ایجاد می‌کند.

   // Hello.java (Java SE 5)
   import java.awt.BorderLayout;
   import javax.swing.*;
 
   public class Hello extends JFrame {
    public Hello() {
        super("hello");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        add(new JLabel("Hello, world!"));
        pack();
     }
 
    public static void main(String[] args) {
        new Hello().setVisible(true);
     }
   }

اولین جملهٔ import کامپایلر جاوا را هدایت می‌کندتا کلاس Borderlayout را از بستهٔ java.awt در جاوا به کامپایل اضافه کند. و import دوم همهٔ کلاس های عمومی و واسط آن ها را از بستهٔ javax.swing اضافه می‌کند. کلاس Hello کلاس Jframe را توسعه می‌دهد.کلاس Jframe یک پنجره با میلهٔ عنوان و کنترل بستن است.

زمانی که برنامه آغاز می‌شود،تابع main با JVM صدا زده می‌شود.این یک نمونهٔ جدید از کلاس Hello را ایجاد کرده و با صدا زدن تابع setvisible(boolean) با مقدار true نمایش داده می‌شود.

 Generic

قبل از کلاس های عمومی برای هر متغیر باید یک نوع خاص تعریف می‌کردیم.به عنوان مثال برای کلاس های ظرف این امر مشکل بود زیرا را آسانی برای ایجاد یک container وجود نداشت که نوع های خاصی از اشیا را بپذیرد.کلاس های عمومی اجازه می‌دهند نوع زمان کامپایل ،بدون نیاز به ایجاد تعداد زیادی از container ،چک شود.همه آنها کدهای مشابهی دارند.

 کتابخانه‌های کلاس

کتابخانه‌های جاوا که به صورت بایت کد از کد اصلی کامپایل شده اند،برای پشتیبانی از بعضی از کاربرد های جاوا،توسطJRE منتشر شده است. مثال هایی از این کتابخانه‌ها عبارتند از:

  • کتابخانه‌های مرکزی که شامل:
  • کتابخانه‌هایی که برای ساختار داده کاربرد دارند.مثل لیست ها،درخت ها،مجموعه ها،مترجم ها.
  • کتابخانهٔ پرداز XML (تجزیه،تغییر شکل،اعتبار)
  • کتابخانه‌های موضعی و بین المللی
  • کتابخانه‌های انتگرال گیری که امکان تایپ کردن توسط سیستم های بیرونی را می‌دهند.
  • JDBC برای دستیابی به داده ها
  • JNDI برای مراجعه و کشف کردن
  • CORBA & RMI برای توسعهٔ کاربرد توزیع کردن
  • کتابخانه‌های واسط کاربر
  • AWT (توابع پنجره‌ای مجرد)که قسمت هایی از GUI را فراهم می‌کنند.
  • کتابخانه‌های swing که در AWT ساخته شده اند اما کاربرد هایی از AWT widgetry را فراهم می‌کنند.
  • APL ها برای ضبط صدا،پردازش و بازنواختی
  • کاربردهای وابستهٔ پلت فرم ماشین های مجازی جاوا
  • Plugins که توانایی اجرا شدن در جستجوگر های وب را به اپلت می‌دهد.
  • java web start
  • دادن مجوز و مستند سازی

 

شرکت سان میکروسیستم، 4 نوع ویرایش از کاربردهای مختلف جاوا را ارائه داده است:

  1. Java card for smartcard
  2. JavaME
  3. JavaSE
  4. JavaEE

 نقاط ضعف

مهم‌ترین ایرادی که برنامه نویسان سایر زبان‌ها به زبان جاوا می‌گیرند سرعت اجرایی بسیار پایین جاوا است. یک برنامه جاوا به صورت بایت کد می‌باشد و باید در ماشین مجازی جاوا اجرا گردد. به همین دلیل سرعت اجرای پایینی را در مقابل زبان‌های قدرتمندی همچون ++C دارد. به صورت دیگر یک برنامه C به طور متوسط تا 10 برابر سریعتر از برنامه مشابه جاوا اجرا می‌گردد. جاوا علی رغم شیءگرا بودن در بخشی از قسمت‌ها برای ایجاد انعطاف بیشتر یا بازاریابی بهتر برخی اصول شی گرایی را نادیده گرفته‌است. از جمله این قسمت‌ها قابلیت بازتابش Reflection می‌باشد. هدف اصلی بازتابش این است که استفاده مجدد از کدها و گسترش کدهای موجود و مهم‌تر از همه نوشتن برنامه‌های الحاقی آسان گردد ولی این مهم با زیر پا گذاشتن بعضی اصول ممکن شده‌است. برای نمونه با کمک بازتابش به راحتی می‌توان متدهای خصوصی دیگر کلاس‌ها را فراخوانی کرد!

زبان جاوا در مقابل زبانی مثل ++C ساده تر و یادگیری ان آسانتر است. این آسانتر بودن به سادگی به دست نیامده‌است بلکه با حذف بسیاری از موارد که باعث قدرتمند تر بودن زبان ++C بوده‌اند ایجاد شده‌است. مهم‌ترین این موارد اشاره گرها و وراثت چندگانه بوده‌اند که در زبان جاوا یافت نمی‌شوند.

از آنجایی که جاوا زبانی با عدم وابستگی به بستر می‌باشد پس استفاده از توابع سیستم عامل را در برنامه نمی‌پذیرد. به همین صورت نمی‌توان از واسط‌های برنامه نویسی غیر از جاوا در آن استفاده نمود.

 پاسخ برنامه‌نویسان جاوا به ایرادات

سرعت پایین برنامه‌های جاوا در محیطی که اجرا می‌شوند ملاک کارایی نبوده زیرا در محیط وب مسئله‌ای که سرعت را کند می‌سازد، شبکه بوده و ابتدا باید سربار شبکه را از روی برنامه‌ها برداشت. از طرف دیگر در برنامه‌های رومیزی هم در JDK 5.0 و 6.0، بهینه سازی بسیاری بوجود آمده که این مسئله باعث شده که در آخرین تست کارایی که انجام شده یک برنامه جاوا در محدودهٔ 0.8 تا 1.3 همان برنامه در ++C کارایی داشته باشد که 1.3 آن مربوط به بخش واسط کاربری و سرعت 0.8 آن مربوط به بسته تخلیه حافظه می‌شده که هیج الگوریتمی نتوانست از الگوریتم Garbage Collector جاوا پیشی بگیرد. همچنین سال ۱۹۹۹ در مقاله‌ای آقای Lutz Prechelt به این مسئله را ثابت کردند که تجربه برنامه‌نویسی که برنامه‌ای را می‌نویسد از انتخاب زبانی که برنامه برروی آن نوشته می‌شود در کارایی تأثیر بیشتری دارد و این بدان معناست که کارایی یک برنامه را برنامه‌نویس مشخص می‌کند و نه زبان برنامه‌نویسی( ایشان در همان مقاله از زبان جاوا استفاده نمودند تا ذهنیت بد را از بین ببرند)

حذف اشاره‌گرها در جاوا به دلیل مشکلاتی بوده که آنها در طول تاریخشان بوجود آورده‌اند، اگرچه این موارد در برنامه‌های سیستمی لازم به‌نظر می‌رسد ولی در محیط‌های تحت‌وب که بستر اصلی جاوا هستند می‌توانند اثراتی به مراتب شدیدتر نسبت به آنچه در برنامه‌های سیستمی دارند داشته باشند و باعث می‌شود که توجه برنامه‌نویسان از مسائلی چون کارایی، قابلیت اطمینان و مقیاس‌پذیری برنامه به تنظیم اشاره‌گرها معطوف گردد.

وجود وراثت چندگانه در زبانی مانند ++C، باعث ایجاد مشکلات اساسی‌ای می‌گردید که اکثر برنامه‌نویسان ++C از آن دوری می‌کرده و هنوز هم می‌کنند. ولی قابلیت چندریخته شدن یک کلاس از لحاظ شی گرایی بسیار مهم بوده و بنابراین توجیهی برای وجود وراثت چندگانه را فراهم می‌نمود. در جاوا با وارد شدن مفهومی به نام واسط برنامه‌سازی (Interface)، دیگر نیازی به وجود وراثت چندگانه احساس نشد و بنابراین از زبان جاوا حذف گردید. در حال حاضر اکثر طراحان برنامه‌ها حتی به این نتیجه رسیده‌اند که وراثت تکی هم باعث ایجاد مشکل بوده و تا آنجایی که می‌شود باید از Composition استفاده نمود و در تمامی کتاب‌های طراحی که از سال ۲۰۰۰ به این طرف چاپ شده به آن اشاره نموده‌اند.

از ابتدای بوجود آمدن جاوا، کتابخانه JNI - Java Native Interface در آن وجود داشته که قابلیت فراخوانی و دستکاری برنامه‌هایی در ++C و ... را می‌داده که از نمونه‌های آن می‌توان به Jtwain که یک بسته‌ایست که از کتابخانه‌های ویندوز برای اسکن عکس استفاده می‌کند، یا SWT که یک بسته نرم‌افزاریست که از کتابخانه‌های ویندوز و لینوکس (برحسب سیستم عامل) برای ساخت واسط کاربری (UI) استفاده می‌کند، نام برد.

 یک اشتباه متداول

برخی مردم به علت شباهت اسمی، جاوا و جاوااسکریپت را با هم اشتباه می‌گیرند. در حالیکه این دو زبان گرچه در ظاهر و کلمات شبیهند ولی بطور ساختاری با یکدیگر متفاوتند. جاوا اسکریپت محصول شرکت نت اسکیپ است.

نوشته شده توسط نیلوفر جمشیدی در ساعت 15:24 | لینک  | 

آشنایی با شبکه‌های اترنت

دستیابی به اطلاعات با روش های مطمئن و با سرعت بالا یکی از رموز موفقیت هر سازمان و موسسه است . طی سالیان اخیر هزاران پرونده و کاغذ که حاوی اطلاعات با ارزش برای یک سازمان بوده ، در کامپیوتر ذخیره شده اند. با تغذیه دریایی از اطلاعات به کامپیوتر ، امکان مدیریت الکترونیکی اطلاعات فراهم شده است .
کاربران متفاوت در اقصی نقاط جهان قادر به اشتراک اطلاعات بوده و تصویری زیبا از همیاری و همکاری اطلاعاتی را به نمایش می گذارند. شبکه های کامپیوتری در این راستا و جهت نیل به اهداف فوق نقش بسیار مهمی را ایفاء می نمایند.
اینترنت که عالی ترین تبلور یک شبکه کامپیوتری در سطح جهان است، امروزه در مقیاس بسیار گسترده ای استفاده شده و ارایه دهندگان اطلاعات ، اطلاعات و یا فرآورده های اطلاعاتی خود را در قالب محصولات تولیدی و یا خدمات در اختیار استفاده کنندگان قرار می دهند.وب که عالی ترین سرویس خدماتی اینترنت می باشد کاربران را قادر می سازد که در اقصی نقاط دنیا اقدام به خرید، آموزش ، مطالعه و... نمایند.
با استفاده از شبکه، یک کامپیوتر قادر به ارسال و دریافت اطلاعات از کامپیوتر دیگر است .اینترنت نمونه ای عینی از یک شبکه کامپیوتری است . در این شبکه میلیون ها کامپیوتر در اقصی نقاط جهان به یکدیگر متصل شده اند.
اینترنت شبکه ای مشتمل بر زنجیره ای از شبکه های کوچکتراست . نقش شبکه های کوچک برای ایجاد تصویری با نام اینترنت بسیار حایز اهمیت است . تصویری که هر کاربر با نگاه کردن به آن گمشده خود را در آن پیدا خواهد کرد. در این بخش به بررسی شبکه های کامپیوتری و جایگاه مهم آنان در زمینه تکنولوژی اطلاعات و مدیریت الکترونیکی اطلاعات خواهیم داشت .
شبکه های محلی و شبکه های گسترده تاکنون شبکه های کامپیوتری بر اساس مولفه های متفاوتی تقسیم بندی شده اند. یکی از این مولفه ها حوزه جغرافیایی یک شبکه است.بر همین اساس شبکه ها به دو گروه عمده LAN)Local area network) و WAN)Wide area network) تقسیم می گردند.در شبکه های LAN مجموعه ای از دستگاه های موجود در یک حوزه جغرافیایی محدود، نظیر یک ساختمان به یکدیگر متصل می گردند .
در شبکه های WAN تعدادی دستگاه که از یکدیگر کیلومترها فاصله دارند به یکدیگر متصل خواهند شد. مثلا اگر دو کتابخانه که هر یک در یک ناحیه از شهر بزرگی مستقر می باشند، قصد اشتراک اطلاعات را داشته باشند، می بایست شبکه ای WAN ایجاد و کتابخانه ها رابه یکدیگرمتصل نمود. برای اتصال دو کتابخانه فوق می توان از امکانات مخابراتی متفاوتی نظیر خطوط اختصاصی (Leased) استفاده نمود. شبکه های LAN نسبت به شبکه های WAN دارای سرعت بیشتری می باشند. با رشد و توسعه دستگاههای متفاوت مخابراتی میزان سرعت شبکه های WAN ، تغییر و بهبود پیدا کرده است .
امروزه با بکارگیری و استفاده از فیبر نوری در شبکه های LAN امکان ارتباط دستگاههای متعدد که در مسافت های طولانی نسبت به یکدیگر قرار دارند، فراهم شده است .اترنت در سال ۱۹۷۳ پژوهشگری با نام Metcalfe در مرکز تحقیقات شرکت زیراکس، اولین شبکه اترنت را بوجود آورد. هدف وی ارتباط کامپیوتر به یک چاپگر بود. وی روشی فیزیکی بمنظور کابل کشی بین دستگاههای متصل بهم در اترنت ارایه نمود. اترنت در مدت زمان کوتاهی بعنوان یکی از تکنولوژی های رایج برای برپاسازی شبکه در سطح دنیا مطرح گردید.
همزمان با پیشرفت های مهم در زمینه شبکه های کامپیوتری ، تجهیزات و دستگاه های مربوطه، شبکه های اترنت نیز همگام با تحولات فوق شده و قابلیت های متفاوتی را در بطن خود ایجاد نمود. باتوجه به تغییرات واصلاحات انجام شده در شبکه های اترنت ، عملکرد و نحوه کار آنان نسبت به شبکه های اولیه تفاوت چندانی نکرده است.
در اترنت اولیه، ارتباط تمام دستگاه های موجود در شبکه از طریق یک کابل انجام می گرفت که توسط تمام دستگاهها به اشتراک گذاشته می شد. پس از اتصال یک دستگاه به کابل مشترک ، می بایست پتانسیل های لازم بمنظور ایجاد ارتباط با سایر دستگاههای مربوطه نیز در بطن دستگاه وجود داشته باشد (کارت شبکه ) . بدین ترتیب امکان گسترش شبکه بمنظور استفاده از دستگاههای جدید براحتی انجام و نیازی به اعمال تغییرات بر روی دستگاههای موجود در شبکه نخواهد بود. اترنت یک تکنولوژی محلی (LAN) است. اکثر شبکه های اولیه در حد و اندازه یک ساختمان بوده و دستگاهها نزدیک به هم بودند.
دستگاههای موجود بر روی یک شبکه اترنت صرفا قادر به استفاده از چند صد متر کابل بیشتر نبودند. اخیرا با توجه به توسعه امکانات مخابراتی و محیط انتقال، زمینه استقراردستگاههای موجود در یک شبکه اترنت با مسافت های چند کیلومترنیز فراهم شده است . پروتکل در شبکه های کامپیوتری به مجموعه قوانینی اطلاق می گردد که نحوه ارتباطات را قانونمند می نماید. نقش پروتکل در کامپیوتر نظیر نقش زبان برای انسان است .
برای مطالعه یک کتاب نوشته شده به فارسی می بایست خواننده شناخت مناسبی از زبان فارسی را داشته باشد. بمنظور ارتباط موفقیت آمیز دو دستگاه در شبکه می بایست هر دو دستگاه از یک پروتکل مشابه استفاده نمایند. اصطلاحات اترنت شبکه های اترنت از مجموعه قوانین محدودی بمنظور قانونمند کردن عملیات اساسی خود استفاده می نمایند.بمنظور شناخت مناسب قوانین موجود لازم است که با برخی از اصطلاحات مربوطه در این زمینه بیشتر آشنا شویم :
Mediu )محیط انتقال ) . دستگاههای اترنت از طریق یک محیط انتقال به یکدیگر متصل می گردند.
(Segment )سگمنت . به یک محیط انتقال به اشتراک گذاشته شده منفرد، سگمنت می گویند.
(Node )گره . دستگاههای متصل شده به یک Segment را گره و یا ایستگاه می گویند.
(Frame )فریم . به یک بلاک اطلاعات که گره ها از طریق ارسال آنها با یکدیگر مرتبط می گردند، اطلاق می گردد فریم ها مشابه جملات در زبانهای طبیعی (فارسی، انگلیسی) می باشند. در هر زبان طبیعی برای ایجاد جملات، مجموعه قوانینی وجود دارد مثلا یک جمله می بایست دارای موضوع و مفهوم باشد.
پروتکل های اترنت مجموعه قوانین لازم برای ایجاد فریم ها را مشخص خواهند کرد . اندازه یک فریم محدود بوده (دارای یک حداقل و یک حداکثر) و مجموعه ای از اطلاعات ضروری و مورد نیار می بایست در فریم وجود داشته باشد. مثلا یک فریم می بایست دارای آدرس های مبداء و مقصد باشد. آدرس های فوق هویت فرستنده و دریافت کننده پیام را مشخص خواهد کرد. آدرس بصورت کاملا اختصاصی یک گره را مشخص می نماید. ( نظیر نام یک شخص که بیانگر یک شخص خاص است ) .
دو دستگاه متفاوت اترنت نمی توانند دارای آدرس های یکسانی باشند. یک سیگنال اترنت بر روی محیط انتقال به هر یک از گره های متصل شده در محیط انتقال خواهد رسید. بنابراین مشخص شدن آدرس مقصد، بمنظوردریافت پیام نقشی حیاتی دارد. هر ایستگاه زمانیکه فریم را دریافت می دارد، آدرس آن را بررسی تا مطمئن گردد که پیام برای وی ارسال شده است یا خیر ؟ در صورتیکه پیام برای ایستگاه مورد نظر ارسال نشده باشد، ایستگاه فریم را بدون بررسی محتویات آن کنار خواهد گذاشت ( عدم استفاده ).
یکی از نکات قابل توجه در رابطه با آدرس دهی اترنت، پیاده سازی یک آدرس Broadcast است . زمانیکه آدرس مقصد یک فریم از نوع Broadcast باشد، تمام گره های موجود در شبکه آن را دریافت و پردازش خواهند کرد. CSMA/CD تکنولوژیCSMA/CD )carrier-sense multiple access with collision detection ) مسوولیت تشریح و تنظیم نحوه ارتباط گره ها با یکدیگررا برعهده دارد. با اینکه واژه فوق پیچیده بنظر می آید ولی با تقسیم نمودن واژه فوق به بخش های کوچکتر، می توان با نقش هر یک از آنها سریعتر آشنا گردید.
بمنظور شناخت تکنولوژی فوق مثال زیر را در نظر بگیرید:
فرض کنید سگمنت اترنت، مشابه یک میز ناهارخوری باشد. چندین نفر ( نظیر گره ) دور تا دور میز نشسته و به گفتگو مشغول می باشند. واژه multiple access ( دستیابی چندگانه) بدین مفهوم است که : زمانیکه یک ایستگاه اترنت اطلاعاتی را ارسال می دارد تمام ایستگاههای دیگر موجود ( متصل ) در محیط انتقال ، نیز از انتقال اطلاعات آگاه خواهند شد. (. نظیر صحبت کردن یک نفر در میز ناهار خوری و گوش دادن سایرین ).
فرض کنید که شما نیز بر روی یکی از صندلی های میز ناهار خوری نشسته و قصد حرف زدن را داشته باشید، در همان زمان فرد دیگری در حال سخن گفتن است در این حالت می بایست شما در انتظار اتمام سخنان گوینده باشید. در پروتکل اترنت وضعیت فوق carrier sense نامیده می شود. قبل از اینکه ایستگاهی قادر به ارسال اطلاعات باشد می بایست گوش خود را بر روی محیط انتقال گذاشته و بررسی نماید که آیا محیط انتقال آزاد است ؟
در صورتیکه صدایی از محیط انتقال به گوش ایستگاه متقاضی ارسال اطلاعات نرسد، ایستگاه مورد نظر قادر به استفاده از محیط انتقال و ارسال اطلاعات خواهد بود. Carrier-sense multiple access شروع یک گفتگو را قانونمند و تنظیم می نماید ولی در این رابطه یک نکته دیگر وجود دارد که می بایست برای آن نیز راهکاری اتخاذ شود.
فرض کنید در مثال میز ناهارخوری در یک لحظه سکوتی حاکم شود و دو نفر نیز قصد حرف زدن را داشته باشند. در چنین حالتی در یک لحظه سکوت موجود توسط دو نفر تشخیص و بلافاصله هر دو تقریبا در یک زمان یکسان شروع به حرف زدن می نمایند. چه اتفاقی خواهد افتاد؟ در اترنت پدیده فوق را تصادم (Collision) می گویند و زمانی اتفاق خواهد افتاد که دو ایستگاه قصد استفاده از محیط انتقال و ارسال اطلاعات را بصورت همزمان داشته باشند.
در گفتگوی انسان ها، مشکل فوق را می توان بصورت کاملا دوستانه حل نمود. ما سکوت خواهیم کرد تا این شانس به سایرین برای حرف زدن داده شود. همانگونه که در زمان حرف زدن من، دیگران این فرصت را برای من ایجاد کرده بودند! ایستگاههای اترنت زمانیکه قصد ارسال اطلاعات را داشته باشند، به محیط انتقال گوش فرا داده تا به این اطمینان برسند که تنها ایستگاه موجود برای ارسال اطلاعات می باشند.
در صورتیکه ایستگاههای ارسال کننده اطلاعات متوجه نقص در ارسال اطلاعات خود گردند ،از بروز یک تصادم در محیط انتقال آگاه خواهند گردید. در زمان بروز تصادم ، هر یک از ایستگاههای مربوطه به مدت زمانی کاملا تصادفی در حالت انتظار قرار گرفته و پس از اتمام زمان انتظار می بایست برای ارسال اطلاعات شرط آزاد بودن محیط انتقال را بررسی نمایند! توقف تصادفی و تلاش مجدد یکی از مهمترین بخش های پروتکل است.

شبکه های کامپیوتری

کامپیوتر های شخصی ابزار مفیدی برای بسیاری از کارها هستند .از حروف چینی و صفحه آرایی و ویرایش متون گرفته تا خلق آثار گرافیکی و متحرک سازی و اجرای بازی ها .
می دانید رایانه های معمولی امروزه بسیار قدرتمند و دارای طرز کار ساده تر از رایانه هایی هستند که سالها پیش معمول بوده هر چند رایانه ها می توانند به صورت شایسته و در حالت منفرد کار کنند ولی با این حال یک روش وجود دارد که می تواند حتی قدرتمند ترین Pc را نیز سودمندتر نماید .روش خیلی ساده است، آن را به یک pc دیگر وصل کنید یا بهتر بگوییم چند pcرا به یکدیگر وصل کنید .وصل نمودن چند رایانه به یکدیگر و به شکل شبکه مطمینا هر کدام را مفیدتر می کند .از همین روست که بسیاری از صاحبان شرکت های بزرگ و کوچک می خواهند که از کامپیوتر های خود بهره بیشتری بگیرند و نیز همین طور کاربران رایانه های خانگی که می خواهند pcدوم خود را نیز سود مند تر کنند به سوی برپا سازی شبکه گام بر می دارند.

ویژگی و فواید شبکه Network
هنگامی که کامپیوترشما به رایانه های دیگر متصل میشود به بخشی از یک شبکه ی رایانه ای تبدیل می شود ولیکن علاوه بر آن می توانید مطابق معمول آن را، فردی در نظر گرفته و امورات جاری خود را انجام دهید .اکنون اجازه بدهید به امکانات جدید که شبکه در اختیار کاربران شبکه قرار می دهد بپردازیم .

اشتراک گذاری سخت افزارها Sharing Hard Ward
در دنیایی که رایانه ها به صورت فردی عمل می نمایند و شبکه نیستند کاربران برای چاپ اطلاعات خود نیاز به دستگاه چاپگری دارند که مستقیما به رایانه آنها متصل باشد . حال چنانچه فاقد دستگاه چاپگر باشد و بخواهد صفحه ای را به چاپ برساند دو راه پیش روی دارد .راه اول جدا نمودن چاپگر دیگران وجابه جایی و اتصال به رایانه خود و دوم اینکه کاربر فایل مورد نظر خود را روی یک دیسک کپی نموده و از کامپیوتری که دارای چاپگر است جهت چاپ فایل خود استفاده نماید .
اصولا هر دو راه پیش نهادی جهت استفاده مستمر دارای مشکلاتی است که کاربران را آزار می دهد.در این حالت بهتر است از شبکه یاری گرفت. در شبکه هر کسی به چاپگر دسترسی دارد یعنی تمام افراد قادر به چاپ اسناد خود هستند .البته نه به صورت هم زمان .همانطور که گفته شد شبکه یک سیستم ارتباطی برای تبادل داده ها است که دو یا چند رایانه و دستگاه های جانبی مثل چاپگر ها ،مودم ها، فکس ها و سیستم های ذخیره سازی انبوه و بسیاری دستگاه های دیگر را به هم متصل می نماید.

اشتراک گذاری فایل ها File Sharing
دریک شبکه رایانه ای،کلیه افرادی که رایانه ی آنها در شبکه قرار دارد،می توانند از فایل های سایر کاربران استفاده نمایند.یعنی شبکه امکان بهره برداری از فایل ها را به صورت اشتراکی فراهم می نماید.شایان ذکر است در یک شبکه رایانه ای برای پرهیز از جستجوی بی مورد اطلاعات اساسی مورد نیاز هر یک از ایستگاه های کاری در یک رایانه بسیار قوی و همیشه روشن تحت عنوان File Serverنگهداری می شود.

ارتباطات
یک شبکه،رایانه ی شما را از حالت PC صرف به یک وسیله ارتباطی تبدیل می کند.ارتباطات می تواند شامل ملاقات ها،نامه ها،گزارش های مختلف،گفت و گوهای تلفنی و... باشد.با استفاده از روش های فوق،افراد یک سازمان یا سازمان های مختلف می توانند با یکدیگر ارتباط برقرار کنند.شبکه های رایانه ای،نوع دیگری از روش های ارتباطی را به شما معرفی می نمایند،این روش پست الکترونیکی یا E- mail نام دارد.از طریق ایمیل شما می توانید نامه های الکترونیکی خود را به دیگران ارسال نموده و یا نامه های آنها را دریافت نمایید.

تبادل دادها
کاربرانی که به یک شبکه رایانه ای متصل اند می توانند فایل های خود را مبادله نمایند.با توجه به این موضوع،کاربران مورد اشاره قادر خواهند بودبرای اجرای یک منظور،هریک فعالیتی را عهده دار شوند.به عنوان مثال برای تهیه یک مقاله،یکی از افراد شبکه،مقاله را می نویسد نفر دوم ویرایش می کند و نفر بعدی مقاله را برای چاپ آماده می نماید.
این نوع همکاری شبکه ای را،کار گروهی و یا استفاده از رایانه در یک کار گروهی می نامند.

شبکه هایLAN , MAN ,WAN
شبکه ها به تحاظ اندازه بزرگی یا کوچکی به سه نوع تقسیم بندی می شوند:
1- شبکه محلی: (LAN) در این نوع شبکه رایانه های موجود در یک ساختمان یک اداره و یا گروهی از ساختمان های مرتبط به یکدیگر متصل می شوند .
2- شبکه مرکزی یا محلی : (MAN)این نوع شبکه معمولا به یک شهر محدود می شود و تحت تاثیر مقررات محلی است .این نوع شبکه ممکن است با تجهیزات مختلفی نظیر خط تلفن سیستم های ماکرو ویو و یا کابل های نوری ساخته شوند .

3-شبکه گسترده : (WAN)می دانید که توسعه شبکه ها از مرز شهرها و استان های یک کشور گذشته و هم اکنون مرزهای بین المللی را نیز به راحتی پشت سر می گذارد این قبیل از ارتباطات معمولا توسط سرویس دهندگان عمومی و همچنین خصوصی که از ماکرو ویو ویا کابل نوری و یا ماهواره ای استفاده می کنند حمایت می شوند . هم اکنون روش متداول برای اتصال به شبکه های WANارتباط تلفنی استاندارد است . شرکت های بزرگ اصولا با شبکه هایی کار می کنند که رایانه های موجود در دفاتر و نمایندگی های آنها را در کشور های مختلف و یا در کشور های خود به آسانی به یکدیگر ارتباط دهد .به این نوع شبکه WANیا گسترده می گویند .واژه WANاز کلمهWide Aria Networkمی باشد که رایانه های موجود در یک منطقه گسترده و پهناور را به یک دیگر اتصال می دهد.
توضیح : شبکه های رایانه ای می توانند به صورت عمومی و برای هرفرد قابل استفاده و قابل بهره برداری باشند به عنوان نمونه می توان به شبکه های جهانی اینترنت اشاره نمود و یا شبکه ها می توانند به صورت بسته عمل نموده و تنها برای افراد مشخصی قابل استفاده باشند .مثال این نوع شبکه که با دسترسی اختصاصی یا خصوصی است و می توان به آن اشاره نمود شبکه ای است که توسط یک شرکت و یا مرکز دولتی صرفا برای کارکنان آن شرکت ایجاد شده است .

ایجاد یک ارتباط
رایانه ها و دستگاه های چاپگر در شبکه LANکه یک شبکه محلی است تنها از طریق یک کابل مخصوص به یکدیگر متصل می شوند،در صورتی که در شبکه های WAN یا MAN امکان چنین ارتباط فیزیکی از طریق کابل میسر نیست.ارتباط شبکه های WANاز طریق کابل های مربوط به تلفن مخابراتی که PSTNنامیده می شود میسر میگردد،که این شبکه از تمام فناوری های نوین مانند ماهواره، مایکروویو ،فیبرهای نوری و نظایر آن بهره می جویند.

فواید و مشکلات
وجود کابل های شبکه تلفن شبکهWANرا از کشیدن کابل بی نیاز می کند و نکته دیگر این که کلیه ایستگاه های کاری هرگز از یکدیگر دور نیستند چرا که با پیشرفت تکنولوژی و توسعه شبکه مخابراتی اکثر ادارات و منازل دارای خط تلفن هستند.این ها برخی از فواید شبکه مخابراتی است.
مهمترین اشکال در رابطه با شبکه های گسترده یاWANاختلاف بین سیگنال های رقمی(دیجیتالی)و سیگنال های تلفنی است که شکل آنها با یکدیگر متفاوت است.شکل موج رایانه ای از نوع دیجیتالی و شکل موج خط تلفن از نوع آنالوگ است.بنابراین وجود اختلاف بین علایم رایانه ای و علایم مورد استفاده از خط تلفن،ضرورت حضور یک قطعه رایانه ای که هریک را به دیگری تبدیل کند اجتناب نا پذیر است.همانطور که در بخشهای گذشته گفته شد قطعه ای که بتواند داده های ارسالی از رایانه به خط تلفن را امکان پذیر نماید،همچنین امکان ارسال داده ها از خط تلفن به داخل رایانه نیز میسر باشد(عکس حالت اول)مودم نام دارد.
مودم یک برد الکترونیکی است که در PCها در داخل یکی از شکافهای توسعه جای می گیرد(نوع داخلی).برای اتصال رایانه به خط تلفن از یک کابل استفاده می شود،یک سر کابل به پریز تلفن و سر دیگر کابل به سوکت مودم درپشت رایانه متصل می شود.
کار مودم تبدیل سیگنال های دیجیتال به آنالوگ و بالعکس می باشد.هنگامی که رایانه شما داده ها را از طریق خط تلفن ارسال می کند،مودم رایانه شما،شکل علائم را از دیجیتال به آنالوگ تبدیل می کند و نیز هنگامی که رایانه شما داده ها را از طریق خط تلفن و از نقاط دور دریافت می نماید کار مودم تبدیل شکل علایم آنالوگ به صورت علایم دیجیتال است.
عموما مودم ها بر اساس سرعت دریافت و ارسال داده ها سنجیده می شوند.سرعت مودم با واحد بیت بر ثانیه اندازه گیری می شود.سرعت بالای مودم های امروزی حدود 56 کیلو بیت بر ثانیه است.

ADSLبه معنی شبکه خدمات مجتمع است و آن خدماتی است که توسط شرکت های تلفن پیشنهاد می شود و به شما امکان می دهد به یک شرکت فراحم کننده خدمات اینترنت یعنیISPمتصل شوید.
ADSLبسیار سریعتر از یک اتصال تلفنی است که از یک مودم و یک خط معمولی تلفن استفاده می شود زیرا که در این نوع ارتباط هیچ گونه اتصال آنالوگ وجود ندارد.
توضیح : یک خط ADSLداری دو کانال Bو یک کانالDاست.کانالBداده ها را حمل می کند و از کانالDبرای حمل اطلاعات نظارت داخلی استفاده می شود.هر کدام از کانال های B64کیلو بیت بر ثانیه است.

پست الکترونیکی(E-mail)
سرویس پست الکترونیکی به اواسط دهه هفتاد میلادی بر می گردد.در آن سال ها مفهوم پست الکترونیکی با هدف فراهم آوردن امکان برای ارسال و دریافت پیام های الکترونیکی میان کاربران اینترنت تعریف و پیاده سازی شد.
برای هر کاربر که دارای پست الکترونیکی باشد می شود پیام یا نامه الکترونیکی بنویسیم.

دامنه @مشخصه کاربر
مشخصه کاربر عبارتی است که برای خود انتخاب می کند.دامنه نام مرکزی است که سرویس پست الکترونیکی را عرضه کرده است.مانند :
niloo.jamshidi@yahoo.com
دامنه ات ساین مشخصه کاربر
دامنه یاهو یکی از مشهورترین عرضه کنندگان سرویس پست الکترونیکی است که همه روزه هزاران نفر عضو جدید به صورت رایگان به این سرویس دهنده می پیوندند.برای استفاده از پست الکترونیکی امکانات زیر ضروری است:
1- یک pc (رایانه شخصی)
2- یک خط تلفن
3- یک عدد مودم (داخلی یا خارجی)
4- داشتن اشتراک از یک شرکتISP
5- نرم افزار ایمیل (E-mail)
اریه پست الکترونیکی معمولا با عضویت شما در یک شرکت ارایه دهنده خدمات اینترنت صورت می گیرد.
پیام های ارسالی اصولا از نوع متن می باشد ولی به دلیل امکانات وب می توان اقدام به ارسال هرگونه تصویر،فیلم و انواع دیگر اطلاعات از طریق پست الکترونیکی نماییم.

اینترنت(Internet)
اینترنت فناوری خاصی است با مقوله جذاب و پر از حرف و حدیث که هم اکنون یک ابزار بسیار مهم برای دستیابی به اهداف علمی،فرهنگی،اقتصادی،سیاسی،اجتماعی است.

چگونه می توان به اینترنت پیوست؟
ابتدا رایانه ی خود را به یک مودم مجهز کنید سپس از یک شرکت ISPاشتراک بگیرید،که اشتراک دارای هزینه ای است که باید به ISPبپردازید.شما می توانید به صورت ساعتی،حجمی،شبانه روزی و انواع دیگر مشترک شوید. ISPیک شماره تلفن و یک کد عبور Passwordبه شما می دهد.
اکنون می توانید با دبل کلیک روی یکی از Connectionها ار تباط برقرار شود با دادن کد عبور و نام کاربر.برای مرور اطلاعات وب نیاز به برنامه ای دارید که آن را Browserمی گویند لازم به ذکر است که بدانید ویندوز دارای Browser مخصوص به خود می باشد بنابراین نیازی به نصب آن نیست.
"در بخش های مربوط به اینترنت توضیحات کامل تری ارایه خواهد شد"

Word Wide Web
این واژه برای تعریف اسنادی به کار می رود که با مخفف WWWذکر می شود که به معنای تار گسترده جهانی است.این واژه را به صورت خلاصه وب می گویند.وب سیستمی است که دایما اطلاعات می دهد.اطلاعات موجود در وب در پرونده هایی سازماندهی شده اند تحت عنوان صفحات وب شناخته می شوند ویک وب سایت ،مجموعه ای از صفحات وب است.بسیاری از سازمان ها و شرکت ها و افراد حقیقی و حقوقی دارای یک وب سایت می باشند.صفحات وب شامل انواع اطلاعات نظیر متن،گرافیک و چند رسانه ها می باشند.یکی از مهمترین مشخصات وب این است که می تواند شامل پیوند هایی با شد که صفحات دیگر را به یکدیگر متصل نماید.این نوع اطلاعات به عنوان ابر متن یا Hyper Text شناخته می شوند.

موتورهای جستجو(Search Engine)
موتور جستجو برنامه ای است که می تواند یک داده خاص را در یک بانک اطلاعاتی Data Baseبزرگ و عظیم جستجو کند.در وب جهان گستر((WWWتعدادی موتور جستجووجود دارد که از آنها می توان برای یافتن موضوعات مورد نظر خود استفاده نمایید.از مشهورترین موتورهای جستجو می توان به Yahoo , Google , Altavista اشاره نمود.بهترین روش برای یادگیری استفاده از یک موتور جستجو خواندنHelp(سند راهنما)آن است و سپس تمرین.

تجارت الکترونیک E- Commerce
اغلب بازرگانان و تجار از اینترنت به منظور تبلیغ کالاهای خود و همچنین دریافت سفارشات و در بسیاری از حالات برای تحویل محصولات استفاده می کنند.تنها انواع خاصی از محصولات به صورتOn Line می تواند تحویل داده شود مانند فروش بلیط، ،فروش نوار موسیقی و...
به فرایند انتقال تجارت از شیوه سنتی به شبکه اینترنت تجارت اینترنتی میگویند.شما می توانید با استفاده از اینترنت از قیمت کالای مورد نظر خود مطلع شوید و به مقایسه با سایر تولید کنندگان بپردازید.

موارد استفاده از رایانه
1- تجارت و مدیریت
برای نگهداری حساب ها،ارسال صورت حساب ها،نگهداری سوابق تولید کنندگان و مشتریان،نوشتن و ویرایش نامه های اداری،شرکت در کارهای پژوهشی و تحقیقاتی و...استفاده می شود.
2- آموزش
به کارگیری از کامپیوتر در آموزش علاوه بر جذابیت های آن بر کیفیت آموزش اثر دارد وهمچنین موجب کاهش هزینه های آموزشی می گرددد.
3- پزشکی
امروزه ابزاری به نام کامپیوتر علاوه بر حضور در عرصه های عملی و انجام کارهای دشوار برای تحقیق و پژوهش نیز بسیار مناسب است.کامپیوتر ها برای نگهداری سوابق بیماران،تولید داروهای جدید و تاثیر آنها،تشخیص بیماری ها و...در پزشکی حضور دارد.
4- امور اداری
کامپیوتر بهترین روش برای مقابله با کاغذ بازی در اداره را اریه می دهد.در عرصه مدیریت کامپیوترها برای نظارت و ارزیابی سیستم و کارکنان به کار برده می شود.
5-هنر
وجود برنامه های کامپیوتری مناسب،هنر جدیدی به نام گرافیک کامپیوتری را به دنیا معرفی کرده است.به عنوان نمونه در ایجاد جلوه های ویژه در سینما و فیلم های سینمایی وجود دارد.کامپوتر در هنر موسیقی نیز به کمک آهنگ سازان و نوازندگان آمده است.
6- صنعت
صنعت تحت دو نام از شیوه های کامپیوتری برخوردار می شود:
1- CAD
در CADکامپیوتر ها برای طراحی به کار می روند از طراحی یک پیچ گرفته تا بدنه هواپیما.
2- CAM
در CAMبحث استفاده از کامپوتر در تولید و ساخت مطرح است. Auto CAM) و (Auto CAD

در نهایت ،چشم انداز کاربرد کامپیوتر در تمامی عرصه ها بسیار روشن است.کامپیوتر باید در کنار سازنده اش اسباب رفاه بیشتر او را نیز فراهم نماید.
 

پروتکل‌ مدیریتی شبکه  SNMP(Simple Network Management Protocol)

 


در این پست راجع به سطح مدیریت در معماری شبکه‌ها بحث می‌نماییم. علاوه بر سطوح کنترل و کاربر، سطح مدیریت، یکی از سطوح معماری شبکه است که شامل پروتکل‌های مختلفی می‌باشد و از استاندارد SNMP می‌توان به عنوان یک پروتکل در سطح مدیریت نام برد .


طبق استاندارد ISO-8498-2، دو جنبه ایمنی مدیریت در شبکه داریم: امنیت مدیریت و مدیریت در امنیت. بخش امنیت مدیریت در واقع، امنیت بسته‌های مدیریتی است که در شبکه ارسال می‌شوند. به عنوان مثال، حفظ امنیت بسته‌هایی مدیریتی که در شبکه ارسال و دریافت می‌شوند به این بخش مربوط می‌شود. پروتکل‌هایی همانندSSL,TLS,IPsec,… در صورتی که از بسته‌های مدیریتی حمایت کنند، می‌توانند جزو این دسته باشند که در پست‌های قبلی به آنها اشاره شده است. (البته این پروتکل‌ها هر نوع ترافیک در شبکه را پشتیبانی می‌نمایند و فقط مختص ترافیک مدیریتی نیستند و می‌بایست هر نوع ترافیکی را محافظت نمایند.)


بخش دوم اشاره شده در استانداردISO-8498-2 ،ایجاد مدیریت در ایمنی شبکه و یا مدیریت امنیت می‌باشد. مدیریت امنیت پشتیبانی‌هایی است که یک پروتکل‌ مدیریتی همانندSNMP در شبکه انجام می‌دهد تا ما به یک شبکه امن دست‌یابیم.


مدیریت شبکه با استفاده از مجموعه‌ای از ابزارهای کنترلی، به همراه مونیتورینگ شبکه، گزارشی از وضعیت شبکه می‌دهد و باعث می‌شود تا سیاست‌های امنیتی و کنترلی لازم اندیشیده شود. در این بخش پروتکل‌های کنترلی و مدیریتی وضعیت شبکه را کنترل می‌نمایند و تعیین می‌کنند که ترافیک و پیکربندی شبکه چگونه انجام شود.


مدیریت در شبکه، کار پیکربندی مناسب شبکه را با توجه به کاربرد هر شبکه انجام می‌دهد و مسوولیت نگهداری و پشتیبانی از شبکه، محاسبه مقدار استفاده از منابع و تنظیم سیاست‌های اجرایی را بر عهده دارد. این تنظیمات افزایش ایمنی شبکه را فراهم می‌آورند.


مدیریت یک شبکه باید به صورت بلادرنگ و در کنار شبکهٔ فعال، انجام پذیرد تا در سرویس‌دهی شبکه خللی ایجاد نشود و احیانا شبکه کند نشود.  ابزارهای مدیریتی شبکه، یک محیط GUI برای مدیر فراهم می‌نماید و با پیام‌های مربوطه، خطاهای شبکه را اطلاع می‌دهد. این ابزار قابلیت بررسی و تست شبکه و ترافیک آن، هم‌چنین ثبت رویدادهای شبکه را نیز دارند. به کار بردن ابزار مدیریتی، زمان عیب‌یابی و راه‌اندازی سیستم‌ها را کاهش می‌دهد.


 استانداردSNMP، یک استاندارد مونیتورینگ می‌باشد که وضعیت شبکه را بررسی نموده و دستورات لازم را ارسال می‌نماید. سه نسخه از این استاندارد به بازار آمده است. نسخه سوم استاندارد، ابعاد امنیتی احراز هویت، محرمانگی و کنترل دسترسی فیچرهای مدیریتی را پشتیبانی می‌نماید. پروتکل SNMP مربوط به لایه کاربرد بوده و می‌تواند بر رویTCP و UDP اجرا شود. البته نسخه یک تنها بر رویUDP قابل پیاده‌سازی بوده است.


این استاندارد از شماره پورت161برای ارسال درخواست‌ به عناصر شبکه و شماره پورت162برای ارسال رویدادها به ایستگاه مدیریت استفاده می‌نماید. ایستگاه مدیریتی یا(Management Agent)، کار نظارت و مدیریت را انجام می‌دهد و سایر عناصر موجود در شبکه تحت نظارت این ایستگاه مدیریتی فعالیت می‌نمایند. اطلاعات مدیریتی تحت ساختارMIB(management Information Base) قرار دارند. عناصر(Agent) هایی که در کار مدیریت شبکه شرکت می‌نمایند، می‌توانند Bridge ها، مسیر‌یاب‌‌ها و یا هاب‌‌ها و یا هر عنصر دیگری باشند. مدیریت این عناصر بر عهده ایستگاه مدیریت می‌باشد که می‌تواند بیش از یک ایستگاه در نظر گرفته شود. استانداردSNMP امکان تنظیمات ایستگاه مدیریتی، بازیابی مقادیر MIB و یا اطلاعات از رویدادهایی که در هر Agent رخ می‌دهد، را با استفاده از دستورات ساده‌(Get, SET, Trap) به دست می‌ٱورد.


پروتکل SNMP ، علاوه بر مدیریت برای ایجاد امنیت شبکه، در ثبت رویدادها و به اصطلاحlog management نیز کاربرد دارد. ثبت رویدادها به منظور آگاهی از رفتار شبکه انجام می‌پذیرد تا سیاست‌های مناسب کنترلی برای شبکه بر اساس نوع رویدادها،تنظیم شود و ما را به سوی داشتن شبکه امن‌تر رهنمون سازد.

 

شبکه های کامپيوتری

 يک شبکه شامل مجموعه ای از دستگاهها ( کامپيوتر ، چاپگر و ... ) بوده که با استفاده از يک روش ارتباطی ( کابل ، امواج راديوئی ، ماهواره ) و به منظور اشتراک منابع فيزيکی ( چاپگر) و اشتراک منابع منطقی ( فايل )  به يکديگر متصل می گردند. شبکه ها می توانند با يکديگر نيز مرتبط شده و شامل زير شبکه هائی باشند.

تفسيم بندی شبکه ها
.شبکه های کامپيوتری را بر اساس مولفه های متفاوتی تقسيم بندی می نمايند. در ادامه به برخی از متداولترين تقسيم بندی های موجود اشاره می گردد .

 تقسيم بندی بر اساس نوع وظايف
کامپيوترهای موجود در شبکه را با توجه به نوع وظايف مربوطه به دو گروه عمده : سرويس دهندگان (Servers) و يا سرويس گيرندگان (Clients) تقسيم می نمايند. کامپيوترهائی در شبکه که برای ساير کامپيوترها سرويس ها و خدماتی را ارائه می نمايند ، سرويس دهنده  ناميده می گردند. کامپيوترهائی که از خدمات و سرويس های ارائه شده توسط سرويس دهندگان استفاده می کنند ، سرويس گيرنده ناميده می شوند .  در شبکه های Client-Server ، يک کامپيوتر در شبکه نمی تواند هم به عنوان سرويس دهنده و هم به عنوان سرويس گيرنده ، ايفای وظيفه نمايد.

در شبکه های Peer-To-Peer ، يک کامپيوتر می تواند هم بصورت سرويس دهنده و هم بصورت سرويس گيرنده ايفای وظيفه نمايد.

يک شبکه LAN  در ساده ترين حالت از اجزای زير تشکيل شده است :

  • دو کامپيوتر شخصی . يک شبکه می تواند شامل چند صد کامپيوتر باشد. حداقل يکی از کامپيوترها می بايست به عنوان سرويس دهنده مشخص گردد. ( در صورتی که شبکه از نوع Client-Server باشد ). سرويس دهنده، کامپيوتری است که هسته اساسی سيستم عامل  بر روی آن نصب خواهد شد.

  • يک عدد کارت شبکه (NIC) برای هر دستگاه. کارت شبکه نظير کارت هائی است که برای مودم و صدا در کامپيوتر استفاده می گردد.  کارت شبکه مسئول دريافت ، انتقال ، سازماندهی و ذخيره سازی موقت اطلاعات در طول شبکه است . به منظور انجام وظايف فوق کارت های شبکه دارای پردازنده ، حافظه و گذرگاه اختصاصی خود هستند.

تقسيم بندی بر اساس توپولوژی
 الگوی هندسی استفاده شده جهت اتصال کامپيوترها ، توپولوژی ناميده می شود. توپولوژی انتخاب شده برای پياده سازی شبکه ها، عاملی مهم در جهت کشف و برطرف نمودن خطاء در شبکه خواهد بود. انتخاب يک توپولوژی خاص نمی تواند بدون ارتباط با محيط انتقال و روش های استفاده از خط مطرح گردد. نوع توپولوژی انتخابی جهت اتصال کامپيوترها به يکديگر ، مستقيما" بر نوع محيط انتقال و روش های استفاده از خط تاثير می گذارد. با توجه به تاثير مستقيم توپولوژی انتخابی در نوع کابل کشی و هزينه های مربوط به  آن ، می بايست با دقت و تامل به انتخاب توپولوژی يک شبکه همت گماشت . عوامل مختلفی جهت انتخاب يک توپولوژی بهينه مطرح می شود. مهمترين اين عوامل بشرح ذيل است :

- هزينه . هر نوع محيط انتقال که برای شبکه LAN انتخاب گردد، در نهايت می بايست عمليات نصب شبکه در يک ساختمان پياده سازی گردد. عمليات فوق فرآيندی طولانی جهت نصب کانال های مربوطه به کابل ها و محل عبور کابل ها در ساختمان است . در حالت ايده آل کابل کشی و  ايجاد کانال های مربوطه می بايست قبل از تصرف و بکارگيری ساختمان انجام گرفته باشد. بهرحال می بايست هزينه نصب شبکه بهينه گردد.

- انعطاف پذيری . يکی از مزايای شبکه های LAN ، توانائی پردازش داده ها و گستردگی و توزيع گره ها در يک محيط است . بدين ترتيب توان محاسباتی سيستم و منابع موجود در اختيار تمام استفاده کنندگان قرار خواهد گرفت . در ادارات همه چيز تغيير خواهد کرد.( لوازم اداری،  اتاقها و ... ) . توپولوژی انتخابی می بايست بسادگی امکان تغيير پيکربندی در شبکه را فراهم نمايد. مثلا" ايستگاهی را از نقطه ای به نقطه ديگر انتقال و يا قادر به ايجاد يک ايستگاه جديد در شبکه باشيم .

سه نوع توپولوژی رايج در شبکه های LAN استفاده می گردد :

  • BUS

  • STAR

  • RING

توپولوژی BUS
 يکی از رايجترين توپولوژی ها برای پياده سازی شبکه های LAN است . در مدل فوق از يک کابل به عنوان ستون فقرات اصلی در شبکه استفاده شده و تمام کامپيوترهای موجود در شبکه ( سرويس دهنده ، سرويس گيرنده ) به آن متصل می گردند.

مزايای توپولوژی BUS

  •  کم بودن طول کابل . بدليل استفاده از يک خط انتقال جهت اتصال تمام کامپيوترها ، در توپولوژی فوق از کابل کمی استفاده می شود.موضوع فوق باعث پايين آمدن هزينه نصب و ايجاد تسهيلات لازم در جهت پشتيبانی شبکه خواهد بود.

  • ساختار ساده . توپولوژی BUS دارای يک ساختار ساده است . در مدل فوق صرفا" از يک کابل برای انتقال اطلاعات استفاده می شود.

  • توسعه آسان . يک کامپيوتر جديد را می توان براحتی در نقطه ای از شبکه اضافه کرد. در صورت اضافه شدن ايستگاههای بيشتر در يک سگمنت ، می توان از تقويت کننده هائی به نام Repeater استفاده کرد.

معايب توپولوژی BUS

  •  مشکل بودن عيب يابی . با اينکه سادگی موجود در تويولوژی BUS امکان بروز اشتباه را کاهش می دهند، ولی در صورت بروز خطاء کشف آن ساده نخواهد بود. در شبکه هائی که از توپولوژی فوق استفاده می نمايند ، کنترل شبکه در هر گره دارای مرکزيت نبوده و در صورت بروز خطاء می بايست نقاط زيادی به منظور تشخيص خطاء بازديد و بررسی گردند.

  •  ايزوله کردن خطاء مشکل است . در صورتی که يک کامپيوتر در توپولوژی فوق دچار مشکل گردد ، می بايست کامپيوتر را در محلی که به شبکه متصل است رفع عيب نمود. در موارد خاص می توان يک گره را از شبکه جدا کرد. در حالتيکه اشکال در محيط انتقال باشد ، تمام يک سگمنت می بايست از شبکه خارج گردد.

  • ماهيت تکرارکننده ها . در موارديکه برای توسعه شبکه از تکرارکننده ها استفاده می گردد، ممکن است در ساختار شبکه تغييراتی نيز داده شود. موضوع فوق مستلزم بکارگيری کابل بيشتر و اضافه نمودن اتصالات مخصوص شبکه است .

توپولوژی STAR
 در اين نوع توپولوژی همانگونه که از نام آن مشخص است ، از مدلی شبيه "ستاره" استفاده می گردد. در اين مدل تمام کامپيوترهای موجود در شبکه معمولا" به يک دستگاه خاص  با نام " هاب " متصل خواهند شد.

مزايای توپولوژی STAR

  • سادگی سرويس شبکه . توپولوژی STAR شامل تعدادی از نقاط اتصالی در يک نقطه مرکزی است . ويژگی فوق تغيير در ساختار و سرويس  شبکه را آسان می نمايد.

  • در هر اتصال يکدستگاه . نقاط اتصالی در شبکه ذاتا" مستعد اشکال هستند. در توپولوژی STAR  اشکال در يک اتصال ، باعث خروج آن خط  از شبکه و سرويس و اشکال زدائی خط مزبور است . عمليات فوق تاثيری در عملکرد ساير کامپيوترهای موجود در شبکه نخواهد گذاشت .

  • کنترل مرکزی و عيب يابی . با توجه به اين مسئله که نقطه  مرکزی  مستقيما" به هر ايستگاه موجود در شبکه متصل است ، اشکالات و ايرادات در شبکه بسادگی تشخيص  و مهار خواهند گرديد.

  • روش های ساده دستيابی . هر اتصال در شبکه شامل يک نقطه مرکزی و يک گره جانبی است . در چنين حالتی دستيابی به محيط انتقال حهت ارسال و دريافت اطلاعات دارای الگوريتمی ساده خواهد بود.

معايب توپولوژی STAR

  • زياد بودن طول کابل . بدليل اتصال مستقيم هر گره به نقطه مرکزی ، مقدار زيادی کابل مصرف می شود. با توجه به اينکه هزينه کابل نسبت به تمام شبکه ، کم است ، تراکم در کانال کشی جهت کابل ها و مسائل مربوط به نصب و پشتيبنی آنها بطور قابل توجهی هزينه ها را افزايش خواهد داد.

  • مشکل بودن توسعه . اضافه نمودن يک گره جديد به شبکه مستلزم يک اتصال از نقطه مرکزی به گره جديد است . با اينکه در زمان کابل کشی پيش بينی های لازم جهت توسعه در نظر گرفته می شود ، ولی در برخی حالات نظير زمانيکه طول زيادی از کابل مورد نياز بوده و يا اتصال مجموعه ای از گره های غير قابل پيش بينی اوليه ، توسعه شبکه را با مشکل مواجه خواهد کرد.

  • وابستگی به نقطه مرکزی . در صورتی که نقطه مرکزی ( هاب ) در شبکه با مشکل مواجه شود ، تمام شبکه غيرقابل استفاده خواهد بود.

توپولوژی RING
در اين نوع توپولوژی تمام کامپيوترها بصورت يک حلقه به يکديگر مرتبط می گردند. تمام کامپيوترهای موجود در شبکه ( سرويس دهنده ، سرويس گيرنده ) به يک کابل که بصورت يک دايره بسته است ، متصل می گردند. در مدل فوق  هر گره به دو و فقط دو همسايه مجاور خود متصل است . اطلاعات از گره مجاور دريافت و به گره بعدی ارسال می شوند. بنابراين داده ها فقط در يک جهت حرکت کرده و از ايستگاهی به ايستگاه ديگر انتقال پيدا می کنند.

مزايای توپولوژی RING

  •  کم بودن طول کابل . طول کابلی که در اين مدل بکار گرفته می شود ، قابل مقايسه به توپولوژی BUS نبوده و طول کمی را در بردارد. ويژگی فوق باعث کاهش تعداد اتصالات ( کانکتور) در شبکه شده و ضريب اعتماد به شبکه را افزايش خواهد داد.

  • نياز به فضائی خاص جهت انشعابات در کابل کشی نخواهد بود.بدليل استفاده از يک کابل جهت اتصال هر گره به گره همسايه اش ، اختصاص محل هائی خاص به منظور کابل کشی ضرورتی نخواهد داشت .

  •  مناسب جهت فيبر نوری . استفاده از فيبر نوری باعث بالا رفتن نرخ سرعت انتقال اطلاعات در شبکه است.  چون در توپولوژی فوق ترافيک داده ها در يک جهت است ، می توان از فيبر نوری به منظور محيط انتقال استفاده کرد.در صورت تمايل می توان در هر بخش ازشبکه از يک نوع کابل به عنوان محيط انتقال استفاده کرد . مثلا" در محيط های ادرای از مدل های مسی و در محيط کارخانه از فيبر نوری استفاده کرد.

معايب توپولوژی RING

  •  اشکال در يک گره باعث اشکال در تمام شبکه می گردد. در صورت بروز اشکال در يک گره ، تمام شبکه با اشکال مواجه خواهد شد. و تا زمانيکه گره معيوب از شبکه خارج نگردد ، هيچگونه ترافيک اطلاعاتی را روی شبکه نمی توان داشت .

  •  اشکال زدائی مشکل است . بروز اشکال در يک گره می تواند روی تمام گرههای ديگر تاثير گذار باشد. به منظور عيب يابی می بايست چندين گره بررسی تا گره مورد نظر پيدا گردد.

  • تغيير در ساختار شبکه مشکل است . در زمان گسترش و يا اصلاح حوزه جغرافيائی تحت پوشش شبکه ، بدليل ماهيت حلقوی شبکه مسائلی بوجود خواهد آمد .

  • توپولوژی بر روی نوع دستيابی تاثير می گذارد. هر گره در شبکه دارای مسئوليت عبور دادن داده ای است که از گره مجاور دريافت داشته است . قبل از اينکه يک گره بتواند داده خود را ارسال نمايد ، می بايست به اين اطمينان برسد که محيط انتقال برای استفاده قابل دستيابی است .

تقسيم بندی بر اساس حوزه جغرافی تحت پوشش .
 شبکه های کامپيوتری با توجه به حوزه جغرافيائی تحت پوشش به سه گروه تقسيم می گردند :

  • شبکه های محلی ( کوچک ) LAN

  • شبکه های متوسط MAN

  • شبکه های گسترده WAN

شبکه های LAN . حوزه جغرافيائی که توسط اين نوع از شبکه ها پوشش داده می شود ، يک محيط کوچک نظير يک ساختمان اداری است . اين نوع از شبکه ها دارای ويژگی های زير می باشند :

  • توانائی ارسال اطلاعات با سرعت بالا

  • محدوديت فاصله

  • قابليت استفاده از محيط مخابراتی ارزان نظير خطوط تلفن به منظور ارسال اطلاعات

  • نرخ پايين خطاء در ارسال اطلاعات با توجه به محدود بودن فاصله

شبکه های MAN . حوزه جغرافيائی که توسط اين نوع شبکه ها پوشش داده می شود ، در حد و اندازه يک شهر و يا شهرستان است . ويژگی های اين نوع از شبکه ها بشرح زير است :

  • پيچيدگی بيشتر نسبت به شبکه های محلی

  • قابليت ارسال تصاوير  و صدا 

  • قابليت ايجاد ارتباط بين چندين شبکه

شبکه های WAN . حوزه جغرافيائی که توسط اين نوع شبکه ها پوشش داده می شود ، در حد و اندازه کشور و قاره است . ويژگی اين نوع شبکه ها بشرح زير است :

  • قابليت ارسال اطلاعات بين کشورها و قاره ها

  • قابليت ايجاد ارتباط بين شبکه های LAN

  • سرعت پايين ارسال اطلاعات نسبت به شبکه های LAN

  • نرخ خطای بالا با  توجه به گستردگی محدوده تحت پوشش

کابل در شبکه

در  شبکه های محلی از کابل به عنوان محيط انتقال و به منظور ارسال اطلاعات استفاده می گردد.ازچندين نوع کابل در شبکه های محلی استفاده می گردد.  در برخی موارد ممکن است در يک شبکه  صرفا" از يک نوع کابل استفاده و يا با توجه به شرايط موجود از چندين نوع کابل استفاده گردد. نوع کابل انتخاب شده برای يک شبکه به عوامل متفاوتی نظير : توپولوژی شبکه،  پروتکل و اندازه  شبکه بستگی خواهد داشت . آگاهی از خصايص و ويژگی های متفاوت هر يک از کابل ها و تاثير هر يک از آنها بر ساير ويژگی های شبکه،  به منظور طراحی و پياده سازی يک شبکه موفق بسيار لازم است .

کابل Unshielded Twisted pair )UTP)
متداولترين نوع کابلی که در انتقال اطلاعات استفاده می گردد ، کابل های بهم تابيده می باشند. اين نوع کابل ها دارای دو رشته سيم به هم پيچيده بوده که هر دو نسبت زمين  دارای يک امپدانش يکسان می باشند. بدين ترتيب امکان تاثير پذيری اين نوع کابل ها از کابل های مجاور و يا ساير منابع خارجی کاهش خواهد يافت . کابل های بهم تابيده دارای دو مدل متفاوت : Shielded ( روکش دار ) و Unshielded ( بدون روکش ) می باشند. کابل UTP نسبت به کابل STP بمراتب متداول تر بوده و در اکثر شبکه های محلی استفاده می گردد.کيفيت کابل های UTP متغير بوده و از کابل های معمولی استفاده شده برای تلفن تا کابل های با سرعت بالا را شامل می گردد. کابل دارای چهار زوج  سيم بوده  و درون يک روکش قرار می گيرند.  هر زوج  با تعداد مشخصی پيچ تابانده شده ( در واحد اينچ ) تا تاثير پذيری آن از ساير زوج ها و ياساير دستگاههای الکتريکی  کاهش يابد.

 کابل های UTP دارای استانداردهای متعددی بوده که در گروههای (Categories) متفاوت  زير تقسيم شده اند:

 Type

کاربرد

Cat 1فقط صوت ( کابل های تلفن )
Cat 2داده  با سرعت 4 مگابيت در ثانيه
Cat 3داده با سرعت 10 مگابيت در ثانيه
Cat 4داده با سرعت 20 مگابيت در ثانيه
Cat 5داده با سرعت 100 مگابيت در ثانيه

مزايای کابل های بهم تابيده :

  • سادگی و نصب آسان

  • انعطاف پذيری مناسب

  • دارای وزن کم بوده و براحتی بهم تابيده می گردند.

معايب کابل های بهم تابيده :

  • تضعيف فرکانس

  • بدون استفاده از تکرارکننده ها ، قادر به حمل سيگنال در مسافت های طولانی نمی باشند.

  • پايين بودن پهنای باند 

  • بدليل پذيرش پارازيت در محيط های الکتريکی سنگين بخدمت گرفته  نمی شوند.

کانکتور استاندارد برای کابل های UTP  ، از نوع  RJ-45 می باشد. کانکتور فوق شباهت زيادی به کانکتورهای تلفن (RJ-11) دارد. هر يک از پين های کانکتور فوق می بايست بدرستی پيکربندی  گردند. (RJ:Registered Jack)

 کابل کواکسيال
يکی از مهمترين محيط های انتقال در مخابرات کابل کواکسيال و يا هم محور می باشد . اين نوع کابل ها از سال 1936 برای انتقال اخبار و اطلاعات در دنيار به کار گرفته شده اند. در اين نوع کابل ها، دو سيم تشکيل دهنده يک زوج ، از حالت متقارن خارج شده و هر زوج از يک سيم در مغز و يک لايه مسی بافته شده در اطراف آن تشکيل می گردد. در نوع ديگر کابل های کواکسيال ، به حای لايه مسی بافته شده ، از تيوپ مسی استوانه ای استفاده می شود. ماده ای پلاستيکی اين دو هادی را از يکديگر جدا می کند. ماده پلاستيکی ممکن است بصورت ديسکهای پلاستيکی يا شيشه ای در فواصل مختلف استفاده و مانع از تماس دو هادی با يکديگر شود و يا ممکن است دو هادی در تمام طول کابل بوسيله مواد پلاستيکی از يکديگر جدا گردند.

مزايای کابل های کواکسيال :

  • قابليت اعتماد بالا

  • ظرفيت بالای انتقال ، حداکثر پهنای باند 300 مگاهرتز

  • دوام و پايداری خوب

  • پايطن بودن مخارج نگهداری

  • قابل استفاده در سيستم های آنالوگ و ديجيتال

  • هزينه پائين در زمان توسعه

  • پهنای باند نسبتا" وسيع که مورد استفاده اکثر سرويس های مخابراتی از جمله تله کنفرانس صوتی و تصويری است .

معايب کابل های کواکسيال :

  • مخارج بالای نصب

  • نصب مشکل تر نسبت به کابل های بهم تابيده

  • محدوديت فاصله

  • نياز به استفاده از عناصر خاص برای انشعابات

از کانکتورهای BNC)Bayone -Neill - Concelman) بهمراه کابل های کواکسيال استفاده می گردد.  اغلب کارت های شبکه دارای کانکتورهای  لازم در اين خصوص می باشند.

فيبر  نوری
يکی از جديدترين محيط های انتقال در شبکه های کامپيوتری ، فيبر نوری است . فيبر نوری از يک ميله استوانه ای که هسته ناميده می شود و جنس آن از سيليکات است تشکيل می گردد. شعاع استوانه بين دو تا سه ميکرون است . روی هسته ، استوانه ديگری ( از همان جنس هسته ) که غلاف ناميده می شود ، استقرار می يابد. ضريب شکست هسته را با M1 و ضريب شکست غلاف را با M2  نشان داده و همواره M1>M2 است . در اين نوع فيبرها ، نور در اثر انعکاسات کلی در فصل مشترک هسته و غلاف ، انتشار پيدا خواهد کرد. منابع نوری در اين نوع کابل ها ، ديود ليزری و يا ديودهای ساطع کننده نور می باشند.منابع فوق ، سيگنال های الکتريکی را به نور تبديل می نمايند.

مزايای فيبر نوری :

  • حجم و وزن کم

  • پهنای باند بالا

  • تلفات  سيگنال کم و در نتيجه فاصله تقويت کننده ها زياد می گردد.

  • فراوانی مواد تشکيل دهنده آنها

  • مصون بودن از اثرات القاهای الکترو معناطيسی مدارات ديگر

  • آتش زا نبودن آنها بدليل عدم وجود پالس الکتريکی در آنها

  • مصون بودن در مقابل عوامل جوی و رطوبت

  • سهولت در امر کابل کشی و نصب

  • استفاده در شبکه های  مخابراتی آنالوگ و ديجيتال

  • مصونيت در مقابل پارازيت

معايب فيبر نوری :

  • براحتی شکسته شده و می بايست دارای يک پوشش مناسب باشند. مسئله فوق با ظهور فيبر های تمام پلاستيکی و پلاستيکی / شيشه ای کاهش پيدا کرده است .

  • اتصال دو بخش از فيبر يا اتصال يک منبع نور به فيبر ، فرآيند دشواری است . در چنين حالتی می توان از فيبرهای ضخيم تر استفاده کرد اما اين مسئله باعث تلفات زياد و کم شدن پهنای باند می گردد.

  • از اتصالات T شکل در فيبر نوری نمی توان جهت گرفتن انشهاب استفاده نمود. در چنين حالتی فيبر می بايست بريده شده و يک Detector اضافه گردد. دستگاه فوفق می بايست قادر به دريافت و تکرار سيگنال را داشته باشد.

  • تقويت سيگنال نوری يکی از مشکلات اساسی در زمينه فيبر نوری است . برای تقويت سيگنال می بايست سيگنال های توری به سيگنال های الکتريکی تبديل ، تقويت و مجددا" به علائم نوری تبديل شوند.

کابل های استفاده شده در شبکه های اترنت

Specification Cable Type Maximum length
10BaseT Unshielded Twisted Pair 100 meters
10Base2 Thin Coaxial 185 meters
10Base5 Thick Coaxial 500 meters
10BaseF Fiber Optic 2000 meters
100BaseT Unshielded Twisted Pair 100 meters
100BaseTX Unshielded Twisted Pair 220 meters
نوشته شده توسط نیلوفر جمشیدی در ساعت 11:13 | لینک  |