فناوری اطلاعات

فناوری اطلاعات (فا) (به انگلیسی: Information Technology یا IT)، همان طور که به‌وسیله انجمن فناوری اطلاعات آمریکا (ITAA‎) تعریف شده‌است، «به مطالعه، طراحی، توسعه، پیاده‌سازی، پشتیبانی یا مدیریت سیستم‌های اطلاعاتی مبتنی بر رایانه، خصوصا برنامه‌های نرم‌افزاری و سخت‌افزار رایانه می‌پردازد». به طور کوتاه، فناوری اطلاعات با مسائلی مانند استفاده از رایانه‌های الکترونیکی و نرم‌افزار سروکار دارد تا تبدیل، ذخیره، حفاظت، پردازش، انتقال و بازیابی اطلاعات به شکلی مطمئن و امن انجام پذیرد.






اخیرا تغییر اندکی در این عبارت داده می‌شود تا این اصطلاح به طور روشن دایره ارتباطات مخابراتی را نیز شامل گردد. بنابراین عده‌ای بیشتر مایلند تا عبارت «فناوری اطلاعات و ارتباطات» (فاوا) (Information and Communications Technology) یا به اختصار ICT را به کار برند.






عناصر کاملا اصلی

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

انسان: منابع انسانی، مفاهیم و اندیشه، نوآوری
ساز و کار: قوانین، مقررات و روشها، سازوکارهای بهبود و رشد، سازوکارهای ارزش گذاری و مالی
ابزار: نرم‌افزار، سخت‌افزار، شبکه و ارتباطات
ساختار: سازمانی، فراسازمانی مرتبط، جهانی

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






زمینه‌های IT

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






ابزارهای نرم‌افزاری مدیریت خدمات فناوری اطلاعات

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






فناوری اطلاعات در دانشگاه‌های ایران

در بیشتر کشورها این دانش در دانشگاه‌ها با عنوان رشته «فناوری اطلاعات» (Information Technology) شناخته می‌شود، در حالیکه در ایران بر اساس تصمیم سازمان آموزش عالی کشور عنوان «مهندسی فناوری اطلاعات» برای این رشته بکار برده می‌شود و رشته‌ای نیز تحت عنوان مهندسی فناوری اطلاعات و ارتباطات (ICT) به پیشنهاد وزارت ارتباطات و فناوری اطلاعات اخیراً در دانشگاههای ایران تدریس می‌شود همچنین رشته‌ای با عنوان فقط «فناوری اطلاعات» وجود ندارد. همچنین رشتهٔ میان‌رشته‌ای دیگری با عنوان رشته «مدیریت فناوری اطلاعات» در دانشگاه‌های ایران و دیگر کشورها وجود دارد که از ترکیب دو رشته "مدیریت" و «فناوری اطلاعات» به وجود آمده‌است. رشته مهندسی فناوری اطلاعات به چگونگی سازماندهی و ساماندهی داده‌ها می‌پردازد و رشته مدیریت فناوری اطلاعات به چگونگی تدوین سیستم و استفاده از داده‌ها می‌پردازد. هرکدام از این رشته‌ها دارای گرایش‌های ویژه خود هستند که در دانشگاه‌های ایران به شرح زیرند:







مهندسی فناوری اطلاعات:

تجارت الکترونیکی
سیستم‌های چندرسانه‌ای
مدیریت سیستم‌های اطلاعاتی
امنیت اطلاعات
شبکه‌های کامپیوتری






مهندسی فناوری اطلاعات (IT)

علم اطلاعات ودانش شناسی:

مدیریت اطلاعات
بازیابی اطلاعات ودانش
علم سنجی
اقتصاد و بازاریابی اطلاعات






مدیریت دانش

گرایش‌های رشته مدیریت فناوری اطلاعات:

مدیریت منابع اطلاعاتی
سیستم‌های اطلاعات پیشرفته
نظام کیفیت فراگیر
کسب و کار الکترونیک (کارشناسی ارشد)
مدیریت دانش (کارشناسی ارشد)
مدیریت رسانه (کارشناسی ارشد)






فناوری اطلاعات پزشکی (کاربرد فناوری اطلاعات در پزشکی)

گرایش‌های رشته مهندسی فناوری اطلاعات و ارتباطات:

مدیریت شبکه
دیتا و امنیت شبکه
ارتباطات سیار
مدیریت ارتباطات و فناوری اطلاعات
سیستمهای چند رسانه‌ای







دروس تخصصی مهندسی فناوری اطلاعات

درس‌های تخصصی کارشناسی مهندسی فناوری اطلاعات عبارتند از:

مبانی فناوری اطلاعات
مهندسی فناوری اطلاعات
تجارت الکترونیکی
مدیریت و کنترل پروژه‌های فناوری اطلاعات
برنامه‌ریزی استراتژیک فناوری اطلاعات
آموزش الکترونیکی
محیط‌های چند رسانه‌ای
پروژه فناوری اطلاعات
کارآموزی IT
گرافیک کامپیوتری
ریاضی







فناوری اطلاعات در ایران

در ایران همیشه بحث بر سر متولی اصلی فناوری اطلاعات وجود داشت تا با تغییر نام وزارت پست و تلگراف و تلفن در سال ۱۳۸۲ به وزارت ارتباطات و فناوری اطلاعات و مهمتر از آن ایجاد معاونت فناوری اطلاعات وزارت ارتباطات، خود را متولی اصلی فناوری اطلاعات در کشور مطرح ساخت. از این سال به بعد توسعه همه‌جانبه‌ای در این وزارتخانه صورت گرفت تا شرکتها و مراکز متعددی زیر مجموعه آن تشکل یافتند و هر یک از آنها با توانمندیها و فعالیتهای بسیار، تحولات فراوانی را شکل داده و باعث گسترش وضع ارتباطی کشور در بخش‌های پست و مخابرات شدند. معاونت فناوری اطلاعات به منظور تدوین راهبردها، سیاستها، برنامه‌های بلند مدت و اهداف کیفی و کمی بخش توسعه فناوری اطلاعات و ارائه آن به شورای عالی فناوری اطلاعات معاونتی تحت عنوان معاونت فناوری اطلاعات در ساختار سازمانی وزارت ارتباطات و فناوری اطلاعات در نظر گرفته شد. و کم‌کم سازمانهایی مثل سازمان فناوری اطلاعات و ارتباطات زیرساخت نیز در این رابطه شکل گرفتند.





تجارت الکترونیک

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






تاریخچه

ارتباط بین تجارت و تکنولوژی دیر زمانی است که وجود داشته و ادامه دارد. در واقع، یک پیشرفت تکنیکی باعث رونق تجارت شد و آن هم ساخت کشتی بود. در حدود ۲۰۰۰سال قبل از میلاد، فینیقیان تکنیک ساخت کشتی را بکار بردند تا از دریا بگذرند و به سرزمین‌های دور دست یابند. با این پیشرفت، برای اولین بار مرزهای جغرافیایی برای تجارت باز شد و تجارت با سرزمین‌های دیگر آغاز گشته و روشهای خلاقانه ای بصورتهای گوناگون به آن اضافه شد تا امروز که یکی از محبوبترین روشهای تجارت خرید اینترنتی در دنیای وب است. شما می‌توانید در زمانهای پرت، در هر زمان و مکان حتی با لباس خواب می‌توانید اینکار را بکنید. به معنای واقعی هر کسی می‌تواند صفحه اینترنتی خود را ساخته و کالاهای مورد نیازش را در آن ارایه دهد. البته تاریخچه تجارت الکترونیک با تاریخچه اختراعات قدیمی مثل کابل، مودم، الکترونیک، کامپیوتر و اینترنت پیوند خورده‌است. تجارت الکترونیک به شکل کنونی در سال ۱۹۹۱ محقق شد. از آن زمان هزاران هزار کسب و کار و تجار وارد این دنیا شده‌اند. در ابتدا تجارت الکترونیک به معنای فرایند انجام اعمال تراکنش الکترونیکی مورد نظر را انجام دادن بود.درواقع تجارت الکترونیک برای اسان سازی معاملات اقتصادی به صورت الکترونیک تعریف شد. استفاده از این فناوری مانند Electronic Data Interchange (EDI)تبادل الکترونیکی اطلاعات وElectronic Funds TRANSFER (EFT) انتقال الکترونیکی سرمایه، که هر دو در اواخر ۱۹۷۰ معرفی شده‌اند. و به شرکتها و سازمان‌ها اجازه ارسال اسناد الکترونیکی را داد. و اجازه تجارت کردن با ارسال اسناد تجاری مثل سفارشهای خرید یا فاکتورها را به صورت الکترونیکی، می‌دهد. با رشد و پذیرش کارت اعتباری،(ATM) Automated teller machine ماشین تحویلدار خودکار و تلفن بانک در دهه ۱۹۸۰ باعث فرم گیری تجارت الکترونیک شد. نوع دیگر تجارت الکترونیک سیستم رزرواسیون هواپیمایی بوسیله Sabre در امریکا و Travicom در بریتانیا، ارایه شده‌است. از دهه ۱۹۹۰ به بعد تجارت الکترونیک شامل اضافاتی مثل enterprise resource planning system (ERP) سیستم برنامه ریزی منابع سرمایه، data mining داده کاوی، data warehousing انبار داده شده‌است. در ۱۹۹۰، Tim Bermers-lee مرورگر وب جهان گسترده را اختراع کرد و شبکه ارتباطی اکادمیک را به سیستم ارتباطی هرروز و برای هر شخص در جهان وسیع دگرگون ساخت که اینترنت یا www خوانده می‌شود. سرمایه گذاری تجاری بروی اینترنت بخاطر کافی نبودن سرمایه گذاری کاملاً محدود شده بود. اگر چه اینترنت محبوبیت جهانی گسترده‌ای در حدود ۱۹۹۴ با استفاده از مرورگر وب Mosaic پیدا کرده بود. معرفی پروتکلهای امنیتی و DSL (اشتراک خط دیجیتال) که ارتباط مستمر را با اینترنت را اجازه می‌داد حدود ۵ سال طول کشید.. البته در سال ۲۰۰۰ بحران The dot-com bust باعث برشکستگی خیلی از شرکت‌های تجاری بزرگ و نتایج ناگواری را بوجود اورد، باعث بازبینی قوانین و افزایش مزایا و امکانات تجارت الکترونیک کردند و تا انتهای سال ۲۰۰۰، خیلی از شرکتهای تجاری امریکایی و اروپایی سرویس هایشان را از طریق اینترنت ارایه دادند. از ان موقع مردم به کلمه‌ای به عنوان تجارت الکترونیک با توانایی خرید کالاهای گوناگون از طریق اینترنت با استفاده از پروتکل‌های امنیتی و سرویس‌های پرداخت الکترونیکی که در ان مشارکت کردند، اشنا شدند. واز این زمان رقابت شدید بین شرکت‌ها و سازمانها شدت گرفتو با گذشت زمان هم اینرقابت تنگتر شده‌است. جالب این که تا پایان سال ۲۰۰۱ بیش از ۲۲۰ بیلیون دلار معاملات مالی توسط صدها سایت تجاری بر روی اینترنت انجام پذیرفته‌است و در همین سال مدل تجارت الکترونیک B2B دارای در حدود ۷۰۰ میلیارد تراکنش بود. و در سال ۲۰۰۷ سهم تجارت الکترونیک در خرده فروشی کل دنیا ۳٫۴ % بوده‌است که انرا در سال ۲۰۱۰، ۵٫۱ % اعلام نمودند که این امار رشد سریع این شیوه تجارت کردن را می رساند.






سیر زمانی

۱۹۷۹: Michael Aldrich خرید آنلاین را اختراع کرد

۱۹۸۱: Thomson Holidays اولین خرید انلاین B2B را در بریتانیا ایجاد کرد.

۱۹۸۲: Minitel سیستم سراسر کشور را در فرانسه بوسیله France Telecom و برای سفارش گیری انلاین استفاده شده‌است.

۱۹۸۴: Gateshead اولین خرید انلاین B2C را بنام SIS/Tesco و خانم Snowball در ۷۲ اولین فروش خانگی انلاین را راه انداخت.

۱۹۸۵: Nissan فروش ماشین و سرمایه گذاری با بررسی اعتبار مشتری به صورت انلاین از نمایندگی‌های فروش

۱۹۸۷: Swreg شروع به فراهم اوردن ومولف‌های اشتراک افزار و نرم‌افزار به منظور فروش انلاین محصولاتشان از طریق مکانیسم حسابهای الکترونیکی بازرگانی.

۱۹۹۰: Tim Berners-Lee اولین مرورگر وب را نوشت، وب جهان گستر، استفاده از کامپیوترهای جدید

۱۹۹۴: راهبر وب گرد: Netscape در اکتبر با نام تجاری Mozilla ارایه شد. Pizza Hut در صففحه وب سفارش دادن انلاین را پیشنهاد داد. اولین بانک انلاین باز شد. تلاشها برای پیشنهاد تحویل گل و اشتراک مجله به صورت انلاین شروع شد. لوازم بزرگسالان مثل انجام دادن ماشین و دوچرخه به صورت تجاری در دسترس قرار گرفت. Netscape 1.0 در اواخر ۱۹۹۴ با رمزگذاری SSL که تعاملات مطمئن را ایجاد می‌کرد، معرفی شد.

۱۹۹۵: Jeff Bezos، Amazon.com و اولین تجارتی ۲۴ ساعته رایگان را راه انداخت. ایستگاه‌های رادیوی اینترنتی رایگان، رادیو HK ورادیوهای شبکه‌ای شروع به پخش کردند. Dell و Cisco به شدت از اینترنت برای تعاملات تجاری استفاده کردند. eBay توسط Pierre Omidyar برنامه نویس کامپیوتر به عنوان وب سایت حراج بنیانگذاری شد.

۱۹۹۸: توانایی خریداری و بارگذاری تمبر پستی الکترونیکی برای چاپ از اینترنت. گروه Alibaba در چین با خدمات B2B و C2C, B2C را با سیستم خود تاییدی تاسیس شد.

۱۹۹۹: Business.com به مبلغ ۷٫۵ میلیون دلار به شرکتهای الکترونیکی فروخته شد. که در سال ۱۹۹۷ به ۱۴۹٬۰۰۰ دلار خریداری شده بود. نرم‌افزار اشتراک گذاری فایل Napster راه اندازی شد. فروشگاه‌های ATG برای فروش اقلام زینتی خانه به صورت انلاین راه اندازی شد.

۲۰۰۰: The dot-com bust

۲۰۰۲: ای‌بی برای پی‌پال ۱٫۵ میلیون دلار بدست اورد. Niche شرکت‌های خرده فروشی و فروشگاه‌های CSN و فروشگاهای شبکه‌ای را با منظور فروش محصولات از طریق ناحیه‌های هدف مختلف نسبت به یک درگاه متمرکز.

۲۰۰۳: Amazon.com اولین سود سالیانه خود را اعلان کرد.

۲۰۰۷: Business.com بوسیله R.H. Donnelley با ۳۴۵ میلیون دلار خریداری شد.

۲۰۰۹: Zappos.com توسط Amazon.com با قیمت ۹۲۸ میلیون دلار خریداری شد. تقارب خرده فروشان و خرید اپراتورهای فروش وبسایتهای خصوصی RueLaLa.com بوسیله GSI Commerce به قیمت ۱۷۰ میلیون دلار بعلاوه سود فروش از تا سال ۲۰۱۲.

۲۰۱۰: Groupon گزارش داد پیشنهاد ۶ میلیار دلاری گوگل را رد کرده‌است. در عوض این گروه طرح خرید وب سایتهای IPO را تا اواسط ۲۰۱۱ دارد.

۲۰۱۱: پروژه تجارت الکترونیک امریکا و خرده فروشی انلاین به ۱۹۷ میلیارد دلار رسیده‌است که نسبت به ۲۰۱۰ افزایش ۱۲ درصدی داشته‌است. Quidsi.com, parent company of Diapers.comتوسط Amazon.com به قیمت ۵۰۰ میلیون بعلاوه ۴۵ میلیون بدهکاری و تعهدات دیگر خریداری شد.






چکیده

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

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






در ایران

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






انواع تجارت الکترونیک

تجارت الکترونیک را می‌توان از حیث تراکنش‌ها(Transactions) به انواع مختلفی تقسیم نمود که بعضی از آنها عبارتند از:

ارتباط بنگاه و بنگاه (B2B): به الگویی از تجارت الکترونیکی گویند، که طرفین معامله بنگاه‌ها هستند.
ارتباط بنگاه و مصرف کننده (B2C): به الگویی از تجارت الکترونیک گویند که بسیار رایج بوده و ارتباط تجاری مستقیم بین شرکتها و مشتریان می‌باشد.
ارتباط مصرف کننده‌ها و شرکتها (C2B): در این حالت اشخاص حقیقی به کمک اینترنت فراورده‌ها یا خدمات خود را به شرکتها می‌فروشند.
ارتباط مصرف‌کننده با مصرف‌کننده (C2C): در این حالت ارتباط خرید و فروش بین مصرف‌کنندگان است.
ارتباط بین بنگاه‌ها و سازمان‌های دولتی (B2A): که شامل تمام تعاملات تجاری بین شرکتها و سازمانهای دولتی می‌باشد. پرداخت مالیاتها و عوارض از این قبیل تعاملات محسوب می‌شوند.
ارتباط بین دولت و شهروندان (G2C): الگویی بین دولت و توده مردم می‌باشد که شامل بنگاه‌های اقتصادی، موسسات دولتی و کلیه شهروندان می‌باشد. این الگو یکی از مولفه‌های دولت الکترونیک می‌باشد.
ارتباط بین دولت‌ها (G2G): این الگو شامل ارتباط تجاری بین دولتها در زمینه‌هایی شبیه واردات و صادرات می‌باشد.


البته باید گفت که انواع بالا کاملاً مستقل از هم نیستند و گاهی که تاکید بر خرید و فروش ندارند در قالب کسب و کار الکترونیک می‌آیند






ابزارها

ایمیل
فروشگاه اینترنتی
ابزار پیام سریع
پول الکترونیکی






امنیت اطلاعات
تعریف امنیت اطلاعات

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

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

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

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

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

برای افراد، امنیت اطلاعات تاثیر معناداری بر حریم خصوصی دارد. البته در فرهنگ‌های مختلف این مفهوم حریم خصوصی تعبیرهای متفاوتی دارد.

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







تاریخچه

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

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






مفاهیم پایه

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






محرمانگی

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

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






یکپارچه بودن

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






قابل دسترس بودن

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






قابلیت عدم انکار انجام عمل

در انتقال اطلاعات و یا انجام عملی روی اطلاعات، گیرنده یا فرستنده و یا عمل کننده روی اطلاعات نباید قادر به انکار عمل خود باشد. مثلا فرستنده یا گیرنده نتواند ارسال یا دریافت پیامی را انکار کند.






اصل بودن

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






کنترل دسترسی

برای حراست از اطلاعات، باید دسترسی به اطلاعات کنترل شود. افراد مجاز باید و افراد غیرمجاز نباید توانایی دسترسی داشته باشند. بدین منظور روش‌ها و تکنیک‌های کنترل دسترسی ایجاد شده اند که در اینجا توضیح داده میشوند.

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

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

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

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

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

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

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

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






کنترل امنیت اطلاعات

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






مدیریتی

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






منطقی

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






فیزیکی

کنترل فیزیکی برای حفاظت و کنترل محیط کار و تجهیزات کامپیوتری و نحوه دسترسی به آنها است که جنبه فیزیکی دارند. به عنوان مثال: درب، قفل، گرمایش و تهویه مطبوع، آژیر دود و آتش، سیستم دفع آتش سوزی، دوربین‌ها مداربسته، موانع، حصارکشی، نیروی‌های محافظ و غیره.
امنیت شبکه و ارتباطات راه دور
امنیت اطلاعات و مدیریت ریسک
امنیت برنامه‌های کاربردی
2:26 am
کاربرد برنامه نویسی

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





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

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

یک سیر رایج در گسترش زبان‌های برنامه نویسی این است که قابلیت حل مسائلی با درجات انتزاعی بالاتری را اضافه کنند. زبان‌های برنامه نویسی اولیه به سخت‌افزار رایانه گره خورده بودند. همانطور که زبان‌های برنامه نویسی جدید گسترش پیدا کرده‌اند، ویژگی‌هایی به برنامه‌ها افزوده شده که به برنامه نویس اجازه دهد که ایده‌هایی که از ترجمه ساده به دستورات سخت‌افزار دورتر هستند نیز استفاده کند. چون برنامه نویس‌ها کمتر به پیچیدگی رایانه محدود شده‌اند، برنامه‌های آنها می‌تواند محاسبات بیشتری با تلاش کمتر از سوی برنامه نویس انجام دهند. این به آنها این امکان را می‌دهد که کارایی بیشتردر واحد زمان داشته باشند. "پردازنده‌های زبان طبیعی" به عنوان راهی برای ازبین بردن نیاز به زبان‌های اختصاصی برنامه نویسی پیشنهاد شده‌اند. هرچند، این هدف دور است و فواید آن قابل بحث است. "ادسگر دیجسترا" موافق بود که استفاده از یک زبان رسمی برای جلوگیری از مقدمه سازی ساختارهای بی معنی واجب است، و زبان برنامه نویسی طبیعی را با عنوان "احمقانه" رد کرد، "آلن پرلیس" نیز مشابها این ایده را رد کرد. مطابق با متدولوژی نامتجانس استفاده شده توسط 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 در برنامه‌های تعبیه شده و سیستم‌های عامل؛ و بقیه برنامه‌ها معمولاً برای نوشتن انواع دیگر برنامه‌ها کاربرد دارند. روش‌های مختلفی برای سنجش محبوبیت زبان‌ها، هر یک متناسب یا یک ویژگی محوری متفاوت پیشنهاد شده‌است:

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

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

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

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

یک زبان برنامه نویسی ممکن است با فاکتورهای غیر مرتبط به مثال‌های برنامه نویسی دسته بندی شود. برای مثال، غالب زبان‌های برنامه نویسی کلمات کلیدی زبان انگلیسی را استفاده می‌کنند، در حالیکه تعداد کمی این کار را نمی‌کنند. سایر زبان‌ها ممکن است براساس داخلی بودن یا نبودن دسته بندی شوند.
ساعت : 2:26 am | نویسنده : admin | طراحی وب امیر | مطلب قبلی
طراحی وب امیر | next page | next page