Bluetooth

11 10 2008

بلوتوث (به انگلیسی: Bluetooth) یک استاندارد صنعتی برای شبکه‌های شخصی بیسیم می‌باشد که با عنوان استاندارد IEEE ۸۰۲٫۱۵٫۱ نیز شناخته می‌شود. این شبکه در حوزهٔ رایانههای شخصی و لوازم الکترونیکی شخصی مانند گوشی‌های تلفن همراه ، دوربین‌های دیجیتال و ‌پی‌دی‌ای‌ها (Personal Digital Assistants) کاربرد دارد و راهی امن، ارزان قیمت و قابل دسترس عموم برای انتقال بی‌سیم اطلاعات بین دستگاه‌های دیجیتال از راه بسامد رادیویی برد کوتاه فراهم می‌کند.

رابط بلوتوث به یو‌اس‌بی که سخت افزار ارتباط بلوتوث را از راه درگاه یو‌اس‌بی فراهم می‌کند
فهرست مندرجات
۱ تاریخچه و ریشه‌شناسی
۲ کاربردها
۳ اطلاعات فنی
۳.۱ نحوه کارکرد
۳.۲ مشخصات فنی
۴ نسخه‌های مختلف استاندارد
۵ بانوی ايرانی، مادر معنوی بلوتوث
۶ منابع

تاریخچه و ریشه‌شناسی
بلوتوث از نام پادشاه «هارلد بلاتاند دوم» دانمارکی (Harold Bluetooth Blatant) در قرن ۱۰ برگرفته شده‌است. او کسی بود که دیپلماسی را از جنگ به سمت گفت‌و‌گو سوق داد. مخترع‌کنندگان فناوری بلوتوث فکر می‌کردند این نام مناسب برای فناوری آن‌هاست که به وسایل مختلف اجازه می‌دهد نوعی گفت‌و‌گو با هم داشته باشند.

در سال ۱۹۹۸ شرکت ال‌ام‌اریکسون علاقه‌مند شد گوشی تلفن‌های همراه تولیدی او بتوانند بصورت بی سیم به وسیله‌های دیگر (مانند رایانه‌های جیبی) وصل شوند. اریکسون و چهار شرکت دیگر ( آی بی ام، اینتل، نوکیا، سونی‌اریکسون و توشیبا) یک کنسرسیوم (اس‌آی‌جی) تشکیل دادند تا استانداردی بی سیم برای اتصال ابزارهای مخابراتی/رایانه‌ای و ابزارهای جانبی آن‌ها طراحی کنند که دامنهٔ کوتاه، توان مصرفی پایین و قیمتی ارزان داشته باشد. استاندارد بلوتوث اولین بار توسط اریکسون توسعه و گسترش یافت و بعدها به‌وسیلهٔ گروه اس‌آی‌جی که در ۲۰ می ‌۱۹۹۹ تشکیل شد.

کاربردها

هدست بلوتوثایجاد یک شبکه بی‌سیم برای رایانه‌های رومیزی با پهنای باند کوچک
تجهیزاتی مثل صدابَر (میکروفون)، صفحه کلید، موشواره و چاپگر
شبکه بیسیم لن (بلوتوث فروش زیادی در تلفن‌های سلولی داشته‌است که آن‌ها را قادر به ایجاد ارتباط بین رایانه‌ها و پی‌دی‌ای‌ها و هندز‌فری‌ها و دیگر دستگاه‌ها، می‌کند و به این ترتیب یک شبکه بیسیم لن را ایجاد می‌کنند.)
انتقال فایل‌ها (مثل فایل تصویری، صوتی و غیره) بین گوشی‌های موبایل و پی‌دی‌ای‌ها و رایانه‌ها از راه اوبکس
هندست بلوتوث برای گوشی موبایل و اسمارت‌فون‌ها
دستگاه‌های اندازه‌گیری و تست
ابزارهای پزشکی
گیرنده‌های جی‌پی‌اس
اتومبیل و استفاده به‌عنوان هندزفری تلفن در آن
کنترل از راه دور تلویزیون به جای اینفرارد
وسایل کمک شنوایی
پلی‌استیشن ۳ و Nintendo Revolution از بلوتوث برای اهرم کنترل خود استفاده خواهند کرد.
و…

قفل سخت‌افزاری معمولی یو‌اس‌بی بلوتوث.
اطلاعات فنی

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

با استفاده از بلوتوث می توان ۸ دستگاه را به طور هم‌زمان به هم متصل کرد. علی‌رغم اینکه همهٔ دستگاه ها در شعاع ۱۰ متری یکدیگر قرار دارند هیچ گونه تداخلی در ارتباط بینشان پیش نمی آید. این بدان دلیل است که بلوتوث با استفاده از تکنیکی با عنوان پرش فرکانس‌ها (SSFH) امکان استفادهٔ همزمان از یک فرکانس مشخص را در بیش از یک دستگاه غیرممکن می سازد. در این تکنیک بلوتوث طیف فرکانسی آی‌اس‌ام را به ۷۹ بسامد مجزا تقسیم کرده و دستگاه مورد نظر بر مبنای معیارهای خاص در هر لحظه به صورت تصادفی یکی از این بسامدها را انتخاب کرده و استفاده می‌کند. در ارتباطات بلوتوث دستگاه فرستنده در هر ثانیه ۱۶۰۰ بار بسامد عوض می کند. بدین ترتیب تعداد دستگاه‌های بیشتری می‌توانند از طیف رادیویی استفاده کنند و امکان تداخل بین آن‌ها هم کاهش می‌یابد.

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

مشخصات فنی
بلوتوث یک سیستم رادیویی برای مصارفی با توان پایین در یک برد کوتاه (۱۰ سانتی متر ۱۰ متر و ۱۰۰ متر) که معمولاً در یک ریزتراشه ارزان پیاده‌سازی می‌گردد.

بلوتوث به دستگاه‌های دیجیتال اجازه می‌دهد که با یکدیگر ارتباط داشته و اطلاعات را با نرخ مناسبی منتقل کنند. به شرطی که در برد رادیویی هم قرار گرفته باشند. برد رادیویی این فناوری از مرتبهٔ ابعاد یک اتاق بوده و در رده‌های پرتوان حداکثر به ۱۰۰ متر می‌رسد. این برد به کلاس (رده) توان محصول بستگی دارد.

سه ردهٔ توان برای محصولات این فناوری وجود دارد :

رده ۱: ۱۰۰ متر ۱۰۰mW ~۲۰dBm

رده ۲: ۱۰ متر ۲٫۵mW ~۴dBm

رده ۳: ۱ متر ۱mW ~۰dBm

یک دستگاه بلوتوث که نقش یک ارباب (Master) را ایفا می‌کند می‌تواند با ۷ دستگاه که نقش برده (Slave) را بازی می‌کنند ارتباط برقرار کند. این شبکه که یک گروه ۸ تایی را تشکیل می‌دهد ریزشبکه یا خوشهٔ بلوتوث (Piconet) نامیده می‌شود.

کارت داخلی بلوتوث رایانهٔ کیفی (14×36×4 mm)
نسخه‌های مختلف استاندارد
بلوتوث ۱٫۰ و ۱٫۰B

نسخهٔ ۱٫۰ و ۱٫۰B مشکلات متعدد و سازندگان مختلف مشکلات بزرگی در برقراری ارتباط محصولاتشان با هم داشتند. این نسخه مجبور بود آدرس سخت‌افزاری(BD-ADDR) وسیلهٔ بلوتوث را تحت فرایند Handshaking ارسال کند و غیر ممکن بود که این کار به صورت بی‌نام و گم‌نام انجام شود.

بلوتوث ۱٫۱

در نسخهٔ ۱٫۱ بسیاری از مشکلات نسخهٔ قبل آشکار و برطرف گردید. پشتیبانی کانال‌های بدون رمزگذاری نیز به آن اضافه شد و آشکارساز قدرت سیگنال دریافتی نیز به آن اضافه گردید.(RSSI)

بلوتوث ۱٫۲

این نسخه همانند نسخه‌های قبلی است فقط با کمی تغییر در آن که عمده موارد اضافه شده شامل:

سیستم سازگار طیف وسیع پرش بسامدی(AFH:Adaptive Frequency-Hopping spread spectrum) که با استفاده از به‌کارگیری طیف وسیعی از پرش بسامدی پایداری در مقابل تداخل بسامد رادیویی را ایجاد می‌کند.
بالا بردن سرعت ارسال در عمل
اتصال گستردهٔ هماهنگ (Extended Synchronous Connections) که بهبود کیفیت صوت را با ارسال مجدد بسته‌های خراب شده و آسیب‌دیده را سبب می‌گردد.
Host Controller Interface (HCI) support for 3-wire UART
HCI access to timing information for Bluetooth Application

بلوتوث ۲٫۰

این نسخه نسخهٔ تکامل یافتهٔ ۱.x است. تغییرات عمده شامل ایجاد و ارائهٔ ای‌دی‌آر (Enhanced data rate) با نرخ ارسال و دریافت Mbit/s ۲٫۱.

سه برابر سریع تر در ارسال
مصرف توان پایین تر به‌وسیلهٔ کاهش Dutycucle
مختصر کردن سناریو ارتباط چندگانه با استفاده از پهنای باند قابل دسترس بیشتر
کاهش نرخ اشتباه بیت (BER: bit error rate)
بلوتوث ۲٫۱

گروه Bluetooth Special Interest بالاخره كار با Standard 2.1 + EDR را به پایان رساند. گفته شده كه بلوتوث ۲٫۱ سریع تر و راحت ‌تر كار می‌كند و در مقابل حملات بیرونی ایمن تر بوده و صرفه‌جویی بیشتری در مصرف برق می‌كند. ارتباطات بین دستگاه‌ها توسط پشتیبانی از ان‌اف‌سی(Near Field Communication) راحت ‌تر شده است.

گروه اس‌آی‌جی دست به استاندارد جدیدی زده و اكنون آن را عرضه كرده است. قراراست بلوتوث Enhanced Data Rate)2.1+EDR) انتقال داده را میان دستگاه‌های بلوتوث دار راحت ‌تر، سریع تر و ایمن‌ تر كرده و مصرف را به یك پنجم برساند.

قراراست كه ارتباط میان دستگاه‌های بلوتوث‌دار بسیار راحت‌ شده باشد. چرا كه تنها با انتخاب گزینهٔ «Add Bluetooth Machine» و فشار دكمهٔ موجود در هدست كار انجام خواهد شد. اگر پین باید عوض شود، در روند جدید ارتباط از آن‌ها حفاظت زیادی به عمل‌ خواهد آمد. علاوه بر این‌ها این گروه اعلام کرده‌است كه توسط عملكرد «Sniff Subrating» امكان مقابله با حملات مهیا شده و عمر مفید دستگاه ۵ برابر می‌شود.

بخش جدیدی كه به این دستگاه اضافه شده است، پشتیبانی از ان‌اف‌سی استاندارد می‌باشد كه باعث می‌شود حملات از بیرون كمتر موفق بوده و ارتباط بین دستگاه‌ها بسیار راحت‌ شود. در ویدیویی كه اس‌آی‌جی توضیحاتی در آن می‌دهد از دفترچهٔ راهنمایی برای هدست با «NFC-Tag» استفاده می‌شود كه توسط آن موبایل اطلاعات لازم برای جفت شدن را بدست می‌آورد. یكی از كاربردهای دیگری كه دراین ویدیو نشان داده شد، انتقال عكس‌هایی بود كه بوسیلهٔ موبایل گرفته شده بودند توسط ان‌اف‌سی به قاب‌های عكس. هنگامی كه عكس را نزدیك قاب نگه داشت، بدون درخواست هیچ گونه كلید امنیتی انتقال پیدا كرد.

هنوز اینگونه است كه دستگاه‌ها باید برای حالت ان‌اف‌سی دارای حجم خاصی باشد. لذا در بلوتوث هدست‌ها هنوز كامل ساخته نشده‌اند.

سازندگان نیمه‌هادی‌ها مانند Infineon، CSR، Broadcom و Texas Instruments عرضهٔ چیپ‌های Bluetooth-2.1+EDR را شروع كرده‌اند. اس‌آی‌جی بر این باور است كه اولین دستگاه‌های تكمیل یافته تا پایان سال ۲۰۰۷ ارائه خواهند شد.

آیندهٔ بلوتوث

نسخهٔ بعدی بلوتوث به عنوان لیسبون(Lisbon) نامیده شده که شامل یک تعداد مشخصه‌هایی از جمله افزایش امنیت و قابلیت استفادهٔ بیشتر از بلوتوث که ویژگی‌های اصلی آن به ترتیب زیر است:

Atomic Encryption Change: این توانایی به ارتباط رمزگذاری شده این امکان را می‌دهد که بطور تناوبی کدهای رمزی خود را تغییر دهد تا بدین وسیله امنیت افزایش یابد.
Extended Inquiry Response: این توانایی سبب می‌شود در طول فرایند بازبینی و درخواست اطلاعات بیشتری جمع‌آوری شده و به دستگاه‌ها امکان پالایش (فیلترینگ) بهتری را جهت ارتباط می‌دهد. این اطلاعات شامل نام وسیله و فهرستی از خدمات ارائه شده و یک سری اطلاعات تکمیلی دیگری است.
Sniff Subrating: سبب کاهش توان مصرفی وقتی که وسایل در وضعیت «Sniff Low Power» هستند می‌گردد. این توانایی به‌ویژه در هنگام ارتباط و انتشار داده‌های نامتقارن به‌ کار می‌رود. این وضعیت در هنگام برقراری ارتباط با وسایلی چون صدابَر (میکروفون) و صفحه کلید سبب افزایش طول عمر باتری از ۳ تا ۱۰ برابر می‌شود.
QoS Improvements: سبب خواهد شد که وقتی ترافیک مخابراتی در یک خوشهٔ بلوتوث (Piconet) بالاست داده‌های صوتی و تصویری با کیفیت بالا ارسال شوند.
Simple Pairing: به شکل اساسی وظیفهٔ بهبود در جفت شدن وسایل بلوتوث را به عهده دارد. به‌طوری که در یک زمان هم کارایی و هم امنیت افزایش می‌یابد. انتظار می‌رود که این مورد به طور قابل توجهی در استفاده از بلوتوث افزایش یابد. ویرایش بعد از لیسبون سیتل (Seattle) نامیده می‌شود که مشخصه و ویژگی‌های بیشتری را دارد که عمدهٔ آن‌ها روی یو‌دبلیو‌بی (UWB: Ultra Wide Band) متمرکز شده‌است. این ویژگی امکان استفاده از بلوتوث را در پهنای باند بسیار بالای رادیویی فراهم می‌کند که به دنبال آن ارسال و انتقال اطلاعات داده‌ها را با سرعت بسیار بالا فراهم می‌کند.

بانوی ايرانی، مادر معنوی بلوتوث
ماريا خورسند، بانوي ۴۹ ساله ایرانی، يكی از مدیران مشهور صنعت فناوری اطلاعات جهان است. هر چند ایرانی‌ها در میان مدیران رده ‌بالای صنعت فناوری اطلاعات چندان كم‌ تعداد نیستند، اما خورسند يكی از بلندپايه ‌ترين و در عين حال معدود زنان ايرانی فعال در اين رشته است.

امروزه ديگر همه با فناوری بلوتوث آشنا هستند و كمتر گوشی تلفن‌ همراه‌ای در جهان ساخته مي‌شود كه به اين فناوری مجهز نباشد. حال حتماً تعجب می‌كنيد اگر بشنويد كه ماريا خورسند در زمان مديريت خود در شركت اريكسون سوئد، رياست اين پروژه انقلابی را بر عهده داشته‌است و در واقع مادر معنوی فناوری بلوتوث محسوب می‌شود.

منابع
سایت فرهنگی و اطلاع رسانی تبیان

سایت تخصصی موبایل

فارسی موبایل





Wireless

11 10 2008

در لغت به معنای تلگراف بی سیم و یا مخابره با تلگراف بی سیم می‌باشد. به طور کلی یک روش بی سیم برای تبادل اطلاعات است. در این روش از آنتنهای فرستنده و گیرنده در مبدأ و مقصد استفاده می‌شود. این آنتنها باید رو در روی هم باشند. برد مفید این آنتنها بین ۲ تا ۵ کیلومتر بوده و در صورت استفاده از تقویت کننده تا ۲۰ کیلومتر هم قابل افزایش است. از نظر سرعت انتقال داده‌ها این روش مطلوب بوده اما بدلیل ارتباط مستقیم با اوضاع جوی و آب و هوایی از ضریب اطمینان بالایی برخوردار نیست.

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

توسعه‌های قدیمی شامل راه حل‌های ویژه صنعتی و قرادادهای (پروتکل های) اختصاصی، بجز اواخر دهه 1990، اینها تماما با استانداردهای جدید تعویض می‌شوند، بویژه نگارشهای متفاوت از IEE 802.11 (Wi-Fi) (تعاریف متفاوت را نگاه کنید) و HomeRF (خطوط 2 Mbit/s که برای کاربری خانگی درنظر گرفته شده بودند). یک فناوری جایگزین شبیه به ATM‌های 5 گیگاهرتزی، HIPERLAN، کمتر موفق بنظر رسید، بنا به عوامل سیاسی و بازاری.

برای برپایی یک شبکه محلی بی سیم یا WLAN دو نوع زیر ساخت یا توپولوژی وجود دارد : نقطه به نقطه (peer-to-peer) یا موردی (ad-hoc) و حالتی که به آن اصطلاحآ حالت شالوده‌ای یا(infrastructure) گفته می‌شود.

نقطه به نقطه: در این روش ارتباط دو نقطه مد نظر می باشد، یعنی کاربران مستقيماً با يكديگر به شكل Peer- to- peer ارتباط برقرار می نمايند همچنین کاربران برای ارتباط بايد در محدوده يكديگر قرار داشته باشند. اين نوع شبكه براي پشتيباني از تعداد محدودي از کاربر، مثلاً در محيط خانه يا دفاتر كوچك طراحی می شود .

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

Bluetooth
IEE 802.15
ZigBee





ساختار داده ها

11 10 2008

یک درخت باینری یک نوع ساده ساختار داده ای،شاخه ای است. در علم کامپیوتر ،یک ساختار داده ای یک راه ذخیره سازی داده ها در یک کامپیوتر است تا اینکه از آن بهتر استفاده شود. اغلب انتخاب یک ساختار داده ای مناسب با دقت اجازه خواهد داد موثرترین الگوریتم استفاده شود.اغلب انتخاب ساختار داده ای از انتخاب داده های انتزاعی شروع می شود. یک طراحی خوب ساختار داده ای اجازه میدهد عملیات بحرانی متنوعی کاربرد داشته باشند. چنانچه تعداد منابع خیلی کم استهم در زمان اجرا و هم فاصله حافظه انجام داده می شوند.ساختمان داده ها پیاده سازی می شوند با استفاده از رجوع کردن عمل کردن از چیزهای فراهم شده به وسیله یک زبان برنامه نویسی. نوع های متفاوت ساختار داده‌ها با انواع متفاوت کاربرد ها متناسب شده اند و بعضی ها برای کارهای برای تحقق پذیری بانک اطلاعات بسیار مناسب b-tree بسیار معینی تخصص یافته شده اند. برای مثال است.در حالی که جدول های مسیر یابی روی شبکه های ماشینی قابل اعتماد هستند. در طراحی انواع زیادی از برنامه ها، انتخاب ساختار داده ای یک توجه در طراحی اولیه است. بطوریکه تجربه نشان داده در سیستم های بزرگ تحقق پذیری وکیفیت و کارایی به انتخاب بهترین ساختارداده ای وابسته است(به شدت) . بعد از اینکه ساختار داده ای ها انتخاب شدند اغلب الگوریتم های استفاده شده آشکار می شود . بعضی اوقات این ها در جهت مخالف ساختار داده ای انتخاب شده کار می کند زیرا کارهای کلیدی الگوریتم های معینی دارند که با ساختار داده ای خاص بهترین کار را می کنند . در این حالت انتخاب، انتخاب ساختار داده ای مناسب بسیار مهم است. این بینش صعود زیادی به متد های طراحی و زبان های برنامه نویسی داده است. ساختارهای داده‌ها به عنوان کلیدی برای منظم کردن سرعتر عمل می کنند. بیشترین ویژگی زبان ها مرتب کردن سیستم های ماژولار اجازه می دهد ساختارهای داده‌ها با اطمینان در کاربرد های متفاوت به صورت مخفی جزئیات تحقیق پذیری تایید شده شان در پشت رابطهای تحت کنترل دوباره استفاده شده اند. زبان های java ,c++مثلobject-oriented برنامه نویسی در این بخش از کلاس ها برای این منظور استفاده می شوند از آنجائیکه ساختار داده ها بسیار سخت و قاطع هستند بنابراین بسیار مهم است که خیلی از آن ها در کتابخانه های استاندارد زبان های برنامه نویسی جدید و محیط ها از قبیل کتابخانه های الگوی سی استاندارد ،چارچوب زبان جاوا و مایکروسافت را شامل باشند. بخش های بنیادی بیشتر ساختارهای داده ای ارایه ها ،ضبط ها،مرجعهاواجتماع های مجزا هستند.برای مثال یک مرجع تهی یک مرجع است که می تواندتهی باشد،یک ترکیبی از مرجعها و اجتماع های مجزا . و ساده ترین ساختار داده ای پیوندی از رکود ها و مرجع ها ساخته شده است. ساختمان داده‌ها تحقق پذیری یا رابطه ها را نمایش می دهد : یک ساختار داده ای می تواند نمایش دهد رابطه ی بین دو عملیات یا به صورت متد های دستیابی تحقق پذیر که طبق نوع داده‌ها و وابسته به سازمان ذخیره سازی شده است.





تاثیر فناوری اطلاعات بر سازمان، جامعه و فرد

11 09 2008

در چند دهه اخیر تکنولوژی مدرن اطلاعات بر موقعیت و عملکرد بسیاری از جوامع، سازمانها و افراد اثرات قابل ملاحظه‌ای گذاشته و به موازات پیشرفتهای شگرفی که در این زمینه بوجود آمده است، سرنوشت جوامع، سازمانها و افراد هر روز بیش از گذشته به این فناوری مدرن گره می خورد .بدیهی است که در چنین موقعیتی ،شناخت تاثیرات فناوری اطلاعات اهمیت فزاینده ای یافته است .با توجه به این واقعیات باید گفت که فناوری اطلاعات یکی از عوامل مهم محیطی به شمار می آید که بر موقعیت ، عملکرد و سرنوشت جوامع، سازمانها و افراد اثرات جدی می گذارد.
● مقدمه
بحث در مورد تاثیر فناوری اطلاعات بر افراد، سازمانها و جامعه موضوع تازه‌ای نیست و از ابتدای پیدایش و گسترش فناوری اطلاعات این موضوع مورد بحث قرار گرفته است.
هنوز هم افرادی وجود دارند که معتقدند بشر به وسیلة تکامل تکنولوژی تهدید شده است. ما در یک ارتباط حیاتی با تکنولوژی قرار داریم. با وجود این، باید در مورد اثرات آن بر خود به عنوان افراد و به عنوان اعضای سازمانها و جامعه آگاه باشیم.
بدین جهت در ادامه این نوشتار تاثیر فناوری اطلاعات بر سازمانها، افراد و جامعه بحث خواهد شد.
● سازمانها و فناوری اطلاعات
استفاده از رایانه و فناوری اطلاعات برخی از تغییرات را در سازمانها ایجاد کرده است. این تغییرات در حوزه هایی مثل ساختار، اقتدار، قدرت، محتوای شغل، سلسله مراتب شغلی کارکنان، نظارت و شغل مدیران دیده می شود. خلاصه ای از این مباحث در ادامه توضیح داده می شود.
● سلسله مراتب سازمانی
فناوری اطلاعات برای افزایش بهره‌وری و کارایی ، حیــــطه کنترل گسترده‌تر و کـــاهش تعداد متخصصان را مجاز می‌داند. فناوری اطلاعات به سازمانها اجازه می دهد تــا دانش متخصصان را تحت کنترل درآورد و نیاز به تخصصــهای فنی را در سازمان کاهش می دهد. این منطقی است کــه پس از اینکه سطــــوح مــدیریتی در سازمانها کمتر شد، در آن ســـازمانها به مدیران صفی و ســـتادی کمتری نیاز خواهد بود. این روند بیشتر به وسیله پدیدة کاهش یا کوچک شدن اندازة مدیریت میانی نمایان می‌شود.
● نسبت کارکنان یقه آبی به کارکنان یقه سفید
با جایگزین شدن رایانه‌ها به جای شغلهای دفتری، از آنجایی که نیاز به متخصصان سیستم‌های اطلاعاتی بیشتر می‌شود، نسبت کارکنان یقه سفید به یقه آبی در چنین سازمانهایی بیشتر می‌شود.
● واحدهای ویژه
تغییر دیگر در ساختار سازمانی، امکان ایجاد یک مرکز تکنولوژی، یک مرکز تجارت الکترونیک، یک بخش سیستم‌های پشتیبانی تصمیم و یا یک بخش سیستم‌های هوشمند است. بدین ترتیب واحدهای ویژه ای جهت مدیریت اطلاعات و فناوری اطلاعات در سازمان ایجاد می‌شود.
● تمرکز قدرت یا اختیار
اینکه آیا استفاده گسترده فناوری اطلاعات منجر به تمرکز یا نبود تمرکز در عملیات کسب و کار و مدیریت خواهد شد یا نه ممکن است به فلسفه مدیریت عالی بستگی داشته باشد. هر چه میزان کنترل و تاثیر کارکنان رده پایین سازمان بر فرایند تصمیم گیری در سازمان بیشتر باشد، می‌توان نتیجه گرفت که تمرکز در سازمان کمتر شده است و اگر با بکارگیری فناوری اطلاعات در سازمان ،میزان کنترل و تاثیر مدیران بر فرایند تصمیم بیشتر شود،تمرکز بیشتر خواهد بود.بنابر این نمی‌توان در این مورد یک الگوی مشخص و واضح ارائه داد‌.
● قدرت و موقعیت
با توجه به اینکه اطلاعات یک منبع قدرت است، با ورود سیستم های اطلاعاتی در سازمان میزان اطلاعات تحت کنترل افراد تغییر خواهد کرد و بدین ترتیب قدرت افراد (قدرت ناشی از اطلاعات) تغییر خواهد کرد.
● محتوای شغل
یکی از اثرات فناوری اطلاعات بر محتوای برخی مشاغل هم در سازمانهای دولتی و هم در سازمانهای خصوصی است. تغییرات در محتوای شغل هنگامی رخ می‌دهد که کار طراحی مجدد شود و از آنجایی که با ورود و توسعه فناوری اطلاعات ،ماهیت برخی از فعالیتهای سازمان تغییر می‌کند، طراحی مشاغل تغییر کرده و به تبع آن محتوای شغل نیز تغییر خواهد کرد.
● تغییرات در شرایط احراز شغل و آموزش
با توجه به اینکه فعالیت با فناوری اطلاعات،فنون جدید کاری را می‌طلبد، شرایط احراز شغل و آموزش کارکنان نیز بدبن دلیل تغییر خواهد کرد.زیرا مهارتهای سابق کارکنان پاسخگوی این نیازها نخواهد بود.
● تغییرات در نظارت
این حقیقت که کار کارکنان به صورت خطی (online) انجام و به صورت الکترونیک ذخیره می شود، احتمال و امکان نظارت بیشتر را فراهم می کند. فناوریهای اطلاعات در واقع وسیله ای برای تسهیل کنترل و نظارت هستند.
● تاثیر بر جابه‌جایی شغلی
یک مبحث جالب توجه تحرک شغلی یا جابه‌جایی شغلی است. امروزه شما می توانید در یک وب سایت مقدار پولی را که به یک شغل در هر مکانی پرداخت می شود را پیدا کنید. استفاده از ویدئو کنفرانس برای مصاحبه ها و عاملان یا نمایندگان هوشمند برای یافتن شغلها و کارکنان جدید، احتمالا ترک خدمت کارکنان را افزایش می دهد.
● تاثیرات دیگر فناوری اطلاعات بر سازمان
فناوری اطلاعات احتمالا تاثیرات زیر را نیز بر سازمان خواهد داشت.
ـ اتوماسیون تصمیمات عادی.
ـ نیاز کمتر به تخصص برای برخی تصمیمات.
ـ اتکای کمتر به متخصصان برای حمایت از مدیران عالی.
ـ قدرت و اختیار دادن به سطوح میانی و پایین مدیریت به خاطر پایگاههای دانش .
ـ تصمیم گیری به وسیله کارکنان غیر مدیریتی.
ـ توزیع مجدد قدرت میان مدیران و انتقال قدرت به پایین سازمان.
ـ پشتیبانی الکترونیک از تصمیمات پیچیده ( وب سایت، عاملان هوشمند، سیستم‌های پشتیبانی تصمیم).
برخی مدیران گزارش می دهند که کامپیوتر به آنها زمان بیشتری می دهد تا به بیرون از دفتر کارشان بروند و بیشتر در جریان امور قرار بگیرند. آنها همچنین دریافتند که آنها می توانند زمان بیشتری برای فعالیتهای برنامه ریزی صرف کنند. جنبه دیگر چالش مدیریت در توانایی فناوری اطلاعات در حمایت از فرایند تصمیم گیری قرار دارد. فناوری اطلاعات می تواند فرایند تصمیم گیری و حتی سبکهای تصمیم گیری را تغییر دهد. برای مثال جمع آوری اطلاعات برای تصمیم گیری خیلی سریعتر صورت خواهد گرفت. عاملان یا نمایندگان هوشمند وب محور می توانند محیط را بررسی و اطلاعات را تفسیر کنند. روندهای فناوری اطلاعات زمان مورد نیاز برای کامل کردن هر گام در فرایند تصمیم گیری را کاهش می دهد.
تاثیر احتمالی دیگر بر روی شغل مدیران می تواند تغییر در الزامات رهبری باشد. چیزی که به طور عمومی ویژگیهای خوب رهبری محسوب می شود، ممکن است با استفاده از فناوری اطلاعات به طور قابل ملاحظه ای تغییر داده شود. برای مثال هنگامی که ارتباطات رودر رو یا چهره به چهره به وسیله پست الکترونیک و کنفرانس کامپیوتری جایگزین می‌شود، ویژگیهای رهبری که به ظاهر و لباس نسبت داده می‌شود، حداقل می شود.
● کار و فناوری اطلاعات
سیستمهای اطلاعاتی به راههای مختلف بر افراد تاثیر می گذارند. چیزی که برای یک فرد مزیت است، برای دیگری ممکن است این چنین نباشد. برخی شیوه هایی که فناوری اطلاعات ممکن است افراد، ادراکات و رفتارشان را تحت تاثیر قرار دهند، در این بخش از نوشتار بررسی خواهند شد.
● تاثیر بر رضایت شغلی
اگر چه برخی شغلها ممکن است به وسیله فناوری اطلاعات به طور اساسی خیلی غنی شوند، شغلهای دیگر ممکن است خیلی تکراری و کمتر رضایت بخش بشوند.
برای مثال در ابتدای سال ۱۹۷۰، محققان پیش بینی کردند که سیستم‌های اطلاعاتی مبتنی بر کامپیوتر نظر یا رای مدیریتی را در تصمیم گیری کاهش می دهند و بنابراین مدیران ناراضی ایجاد می کنند.
● فاقد صفات انسانی کردن
یک انتقاد غالب در مورد سیستم‌های پردازش داده های سنتی، اثر منفی بالقوه آنها بر شخصیت ( فردیت) افراد است. آنها فعالیتهایی را که کامپیوتری می شوند را فاقد صفات انسانی و فاقد شخصیت می‌کنند. برخی از افراد احساس می‌کنند که به خاطر کامپیوتری شدن فاقد هویت و صفات انسانی هستند. از طرف دیگر برخی افراد آن‌قدر به وب معتاد می شوند که فعالیتهای روزمره و منظمشان را در محل کار یا خانه از قلم می اندازند و مشکلات سازمانی و اجتماعی جدیدی ایجاد می کنند.
● اثرات روانی
اگر افراد تشویق شوند تا از محل زندگی‌شان خرید کنند و در همانجا کار کنند، اثرات روانی بدی مثل افسردگی و تنهایی به‌وجود می آید. در بعضی از کشورها، این طبیعی است که بچه ها در خانه از طریق فناوری اطلاعات به مدرسه بروند، اما فقدان تماس و ارتباط اجتماعی می تواند توسعه‌های اخلاقی، شناختی و اجتماعی شان را آسیب بزند.
● تشویش اطلاعاتی
یکی از تاثیرات منفی عصر اطلاعات اضطراب یا تشویش اطلاعاتی است.
دیگر اشکال تشویش اطلاعاتی عبارتند از:
۱) تشویش در مورد ناتواناییهایمان در نگهداری حجم داده ها.
۲) تشویش در مورد کیفیت اطلاعات در دسترس بر روی وب. این اطلاعات اغلب به روز نیستند و ناقص هستند.
۳) منابع «برخط» زیاد.
۴) تشویش در مورد اینکه خیلی خوب آگاهی داده نمی شود یا خیلی دیر آگاهی داده می شود.
بین ۶۰ تا ۸۰ در صد افرادی که اطلاعات خاصی را بر روی وب جستجو می کنند، نمی توانند آنچه را که می خواهند پیدا کنند. این مسئله همچنین بر تشویش اطلاعات می افزاید. زیرا هنگامی که داده ها خیلی زیاد باشند، تفاوت بین داده و اطلاعات و حقیقت و دانش، مبهم می شود. برای برخی کاربران اینترنت، تشویش از حجم بیش از اندازه اطلاعات ناشی می شود که ممکن است بی خوابی، خواب کم یا ناکافی را موجب شود.
● تاثیر بر ایمنی و سلامتی
رایانه‌ها و سیستم‌های اطلاعاتی بخشی از محیط شغل هستند که ممکن است به‌طور معکوسی بر ایمنی و سلامتی افراد اثر بگذارند. در ادامه این اثرات را مطرح می کنیم:
الف) استرس شغلی
افزایش در حجم کار و یا مسئولیتها می تواند استرس شغلی را افزایش دهد.اگرچه رایانه ای کردن به سازمانها به وسیله افزایش بهره وری سود می رساند، همچنین موجب افزایش حجم کاری نیز می شود. برخی کارکنان احساس می کنند که در حجم بیشتری از کار غوطه ور شده اند و احساس تشویش در مورد شغل و عملکردشان می‌کنند. این احساسات تشویش می تواند به طور معکوسی بر بهره وری کارکنان تاثیر بگذارد. مدیران می توانند به وسیله توزیع مجدد حجم کار میان تعداد بیشتری از کارکنان استرس شغلی ناشی از این مسئله را کاهش دهند.
ب) نمایش تصویری
ظهور ترمینال‌های نمایش تصویری می‌تواند بر بینایی افراد تاثیر منفی بگذارد.
ج) آسیبهای ناشی از فشار کارهای تکراری
یکی ازدیگر خطرات بالقوه ایمنی و سلامت، آسیبهای ناشی از فشار کارهای تکراری مثل کمر درد، کشش ماهیچه در مچ دست و انگشتهاست که این نوع از آسیبها مربوط به استفاده بلند مدت از صفحه کلید است.
● اجتماع و فناوری اطلاعات
تاثیرات اجتماعی فناوری اطلاعات می‌تواند خیلی گسترده و وسیع باشد. این بخش چندین تاثیر نمایان را بررسی می‌کند:
▪ فرصتهایی برای افرادمعلول
انسجام تکنولوژی‌های هوش مصنوعی مثل تشخیص بصری وگفتاری در درون کامپیوترها و بویژه در درون سیستمهای اطلاعاتی وب محور، می تواند فرصتهای استخدام جدیدی را برای افراد معلول ایجاد کند.برای مثال آنهایی که نمی‌توانند تایپ کنند قادر هستند تا از کیبورد صـــــدایی ( Voice-Operated) استفاده کنند و آنهایی که نمی توانند مسافرت کنند، می توانند در خانه کار کنند.
▪ پیشرفتهایی در حفظ سلامتی
فناوری اطلاعات پیشرفتهای مهمی در حفظ سلامتی در دامنه ای از تشخیص بهتر و سریعتر تا تحقیق و توسعه داروهای جدید، برای مراقبت دقیقتر بیماران بد حال داشته است.
▪ مبارزه با جرائم دیگر و کاربردها
کاربردهای کامپیوتر می تواند به راههای مختلف به جوامع سود برساند. در اینجا به برخی از این کاربردها اشاره می شود. برای مثال:
ـ هشداردهنده‌های الکترونیک و کامپیوترها از حجم ترافیک در برخی شهرها می‌کاهند.
ـ تصویر پردازی الکترونیک توان جستجو برای بچه های گم شده را ارتقا می دهد.
● نتیجه گیری
با توجه به موضوعات مطرح شده درنوشتار حاضر ،می‌توان اینگونه نتیجه گرفت که فناوری اطلاعات بر تمامی ابعاد و جوانب سازمانها تاثیرات شگرفی می‌گذارد و مدیران سازمانها جهت اداره کارا و اثربخش سازمان ملزم به توجه به مسائل مرتبط با فناوری اطلاعات هستند. چه در غیر اینصورت محکوم به فنایند. در مورد تاثیر فناوری اطلاعات بر جامعه نیز ‌باید اذعان داشت که فناوری اطلاعات با خود فرصتها و تهدیدات بی‌شماری را به همراه آورده است. نهایتا اینکه افراد جامعه نیز به عنوان عنصری از جوامع و سازمانها به شدت تحت تاثیر فناوری اطلاعات قرار دارند.

منابع و ماخذ
-۱ لادون،کنث، نظامهای اطلاعات مدیریت ،ترجمه رضایی نژاد،انتشارات رسا،چاپ ششم.۱۳۸۴
-۲ الوانی و تیمور نژاد،سیستمهای اطلاعات مدیریت، انتشارات نرم افزاری هامون،چاپ اول،۱۳۸۵
-۳ مومنی، هوشنگ ، مدیریت فناوریهای ارتباطات و اطلاعات، مرکز نشر دانشگاهی،ژاپ اول،۱۳۸۰
۴- Harris,L.R”Artificial Intelligence:a new dimension of softworld,۱۹۸۰
۵ -Ahitur,N.And,s.Neuman.”principles Of Information Systems For”.WCB,۱۹۹۰





زبان برنامه نويسي ++C

9 09 2008

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

زبان ++c یک زبان سطح میانی در نظر گرفته می‌شود. این زبان دارای قابلیت زبان‌های سطح بالا و پایین بصورت هم‌زمان است.

زبان ++C توسط بی‌یارنه استراس‌تروپ دانمارکی در سال ۱۹۷۹ در آزمایشگاه های بل (Bell Labs) و بر مبنای زبان سی ساخته شد و آن را “C با کلاس” نام‌گزاری نمودند. در سال ۱۹۸۳ به ++c تغییر نام داد. توسعه با اضافه نمودن کلاس‌ها و ویژگی‌های دیگری مانند توابع مجازی، سربارگزاری عملگرها، وراثت چندگانه، قالب توابع، و پردازش استثنا انجام شد. این زبان برنامه‌نویسی در سال ۱۹۹۸ تحت نام ISO/IEC 14882:1998 استاندارد شد. نسخه فعلی استاندارد این زبان ISO/IEC 14882:2003 است. نسخه جدیدی از استاندارد (که به صورت غیررسمی C++0x نامیده می‌شود) در دست تهیه است.

فهرست مندرجات
۱ تاریخچه زبان
۱.۱ استاندارد زبان
۱.۲ نام ++C
۱.۳ توسعه آینده
۲ فلسفه
۳ کتابخانه استاندارد
۴ ویژگی‌های معرفی شده در ++C
۵ برنامه Hello World
۶ ویژگی‌های زبان
۶.۱ عملگرها
۶.۲ پیش پردازنده
۶.۳ قالب‌ها
۶.۴ اشیا
۶.۴.۱ بسته‌بندی
۶.۴.۲ وراثت
۶.۵ چندریختی
۶.۵.۱ چندریختی ایستا
۶.۵.۱.۱ گرانبارسازی تابع
۶.۵.۱.۲ گرانبارسازی عملگر
۶.۵.۱.۳ آرگومان پیش‌فرض
۶.۵.۲ چندریختی پویا
۷ ساختار برنامه ها
۸ محیط‌های برنامه نویسی
۹ منابع

تاریخچه زبان
استراس‌تروپ کار بر روی زبان «c با کلاس» را در سال ۱۹۷۹ آغاز کرد.ایده ساخت این زبان جدید در زمان کار بر روی تز دکترای خود به ذهن استراس‌تروپ خطور نمود. او متوجه شد که سیمولا دارای ویژگی‌های مناسب برای ساخت برنامه‌های بسیار بزرگ است اما برای استفاده عملی بسیار کند است اما BCPL با وجود سرعت بسیار زیاد برای ساخت برنامه‌های بزرگ بسیار سطح پایین است. زمانی که استراس‌تروپ کار خود را در آزمایشگاه های بل (Bell Labs) آغاز نمود با مشکل تحلیل هسته unix با توجه به محاسبات توزیع شده روبرو شده بود. با یادآوری تجربیات خود در دوران دکترا، او زبان C را با استفاده از ویژگی‌های سیمولا گسترش داد. C به این دلیل انتخاب شد که C یک زبان عمومی، سریع، قابل حمل، و بصورت گسترده در حال استفاده بود. علاوه بر C و سیمولا زبان‌های دیگری مانند ALGOL 68، ADA، CLU، ML نیز بر ساختار این زبان جدید اثر گذاشت. در ابتداویژگی‌های کلاس، کلاس‌های مشتق شده، کنترل نوع قوی، توابع درون خطی، و آرگومان پیش‌فرض از طریق Cfront به C اضافه شد. اولین نسخه تجاری در سال ۱۹۸۵ ارائه شد.

در سال ۱۹۸۳ نام زبان از «C با کلاس» به ++C تغییر یافت. ویژگی‌های دیگر شامل توابع مجازی، سربارگزاری عملگر و نام تابع، ارجاعات، ثوابت، کنترل حافظه توسط کاربر بصورت آزاد، کنترل نوع بهتر، و توضیحات یک خطی به صورت BCPL با استفاده از «//» نیز به آن اضافه شد. در سال ۱۹۸۵ اولین نسخه زبان برنامه‌نویسی ++C انتشار یافت و مرجع مهمی برای این زبان فراهم شد در حالی که هیچ استاندارد رسمی وجود نداشت. در سال ۱۹۸۹ ویرایش 2.0 از زبان ++C ارائه شد. ویژگی‌های جدیدی مانند ارث‌بری چندگانه، کلاس‌های انتزاعی، اعضای ایستای توایع، اعضای ثابت تابع، و اعضای حفاظت شده به آن اضافه شد. در سال ۱۹۹۰ «راهنمای مرجع ++C » منتشر شد. این کار بنیان استانداردهای بعدی شد. آخرین ویژگی‌های اضافه شده شامل موارد زیر بودند: قالب توابع، استثناها، فضاهای نام، تبدیلات جدید، و یک نوع داده منطقی.

در حین تکامل ++C کتابخانه استاندارد نیز بوجود آمد. اولین نسخه کتاب استاندارد شامل کتابخانه جریانات I/O بود که جایگزین printf و scanf شد. در ادامه مهم‌ترین ویژگی اضافه شده Standard Template Library بوده است.

استاندارد زبان
بعد از سال‌ها کار کمیته مشترک ANSI–ISO در سال ۱۹۹۸ ++C را استاندارد نمودند (ISO/IEC 14882:1998). به مدت چند سال پس از انتشار استاندارد این کمیته گزارشات معایب را مورد بررسی قرار داده نسخه اصلاح شده استاندارد ++C منتشر شد. در سال ۲۰۰۵ گزارشی فنی بنام «گزارش فنی کتابخانه ۱» (که معمولاً بصورت اختصار TR1 خوانده می‌شود) انتشار یافت. با وجود این که گزارش بخشی رسمی از استاندارد نیست ولی بخش‌هایی را به آن اضافه نموده که انتظار می‌رود در نسخه‌های بعدی استاندارد در نظر گرفته شود. پشتیبانی از این گزارش در حال افزایش بین تمام کامپایلرهای فعلی است.

در حالی که ++C به هیچ موسسه‌ای وابسته نیست این مستندات بصورت آزادانه در دسترس نیستند.

نام ++C
این نام منسوب به ریک ماسکیتی (اواسط ۱۹۸۳) است و برای اولین بار در دسامبر سال ۱۹۸۳ به کار برده شد. در طول مدت تحقیق این زبان بنام «C جدید» و بعدها «C با کلاس» خوانده شد. در علوم کامپیوتر هنوز هم ++C به عنوان ابرساختار C شناخته می‌شود. آخرین نام از عملگر ++ در زبان C (که برای افزایش مقدار متغیر به اندازه یک واحد بکار می‌رود) و یک عرف معمول برای نشان دادن افزایش قابلیت‌ها توسط + ناشی گشته است. با توجه به نقل قولی از استراس‌تروپ: «این نام ویژگی‌ها تکاملی زبان در C را نشان می‌دهد.» +C نام زبانی غیرمرتبط به این زبان است.

استراس‌تروپ مبدا این نام را در فصل اول کتاب خود «زبان برنامه‌نویسی ++C» اشاره می‌نماید که معنی دیگر ++C را می‌توان در ضمائم کتاب جرج ارول بنام ۱۹۸۴ یافت. در سه قسمت از زبان تخیلی Newspeak «کلمات C» برای اشاره به لغات فنی و حرفه‌ای بکار می‌رود. «دو علامت +» برای ایجاد صفات عالی از صفات Newspeak به کار می‌رفت بنابراین ++C به معنای زبانی با بیشترین شباهت به C است.

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

توسعه آینده
++C همچنان در حال تکامل است تا نیازهای آینده را پاسخگو باشد. نسخه جدید استاندارد ++C در حال بررسی است و تحت عنوان C++0x است که انتظار می‌رود در سال ۲۰۱۰ منتشر گردد. تغییرات کنونی نشان می‌دهد که که همچنان به صورت چندمدلی ++C تاکید می‌گردد. توسعه‌های مهم پشتیبانی از چندرشته‌ای و مفاهیمی برای راحت نمودن کار با قالب‌هاست. اضافه نمودن ویژگی جمع‌آوری زباله به آن به شدت مورد بحث است. Boost.org گروهی برای بیشترین استفاده از ویژگی‌های فعلی ++C می‌باشد. آنها ویژگی‌های تابعی و فرابرنامه‌نویسی آن را گسترش می‌دهند و در مورد ++C به کمیته استاندارد نصیحت‌هایی نموده است که کدام ویژگی‌ها خوب عمل نمی‌کنند و کدام‌ها نیاز به توسعه دارند.

فلسفه
در کتاب «طراحی و تکامل ++C» بی‌یارنه استراستروپ قوانین مورد استفاده در طراحی ++C را بیان می‌نماید. دانستن این قوانین به فهمیدن نحوه عملکرد ++C و چرایی آن کمک می‌کند. جزئیات بیشتر در کتاب قابل دسترسی است:

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

کتابخانه استاندارد
در سال ۱۹۹۸ استاندارد ++C شامل دو بخش هسته زبان و کتابخانه استاندارد ++C است. این کتابخانه شامل بیشتر بخش‌های STL و کتابخانه استاندارد C است. بیشتر کتابخانه‌های ++C در استاندارد وجود ندارند و یا استفاده از تعریف قابلیت پیوند کتابخانه‌ها را می‌توان در زبان‌هایی مانند فرترن، C، پاسکال، بیسیک نوشته شوند. البته با توجه به ویژگی‌های کامپایلر مشخص خواهد شد که کدام زبان را می‌توان استفاده نمود.

کتابخانه استاندارد ++C شامل کتابخانه استاندارد C با یک سری تغییرات برای بهبود عملکرد است. بخش بزرگ بعدی این کتابخانه STL است. STL شامل ابزار بسیار قدرتمندی مانند نگه‌دارنده‌ها (مانند vector و list)، تکرارکننده‌ها (اشاره‌گرهای عمومی شده) برای شبیه‌سازی دسترسی مانند آرایه الگوریتم‌هایی برای جستجو و مرتب‌سازی در آنها وجود دارند. نقشه‌ها (نقشه‌های چندگانه) (آرایه شرکت‌پذیر) و مجموعه‌ها (مجموعه‌های چندگانه) واسط‌های عمومی فراهم می‌سازند. در نتیجه با استفاده از قالب تابع، الگوریتم‌های جنریک با هر نگه‌دارنده و دارای تکرارکننده عمل نماید. همانند C ویژگی‌های کتابخانه را می‌توان با استفاده از شبه دستور include# شامل یک سرآیند استاندارد اضافه نمود. c دارای ۶۹ کتابخانه استاندارد است که ۱۹ تا از آنها نامناسب تشخیص داده شده‌اند.

استفاده از کتابخانه استاندارد – مانند std::vector یا std::string به جای آرایه‌های C- موجب ایجاد برنامه‌های مطمئن‌تر شده است.

STL در آغاز محصولی جداگانه از HP و سپس SGL پیش از ادغام در کتابخانه استاندارد ++C بوده است. استاندارد عبارت STL را بکار نمی‌برد بلکه آن را بخشی از کتابخانه می‌داند اما مردم هنوز هم آن را برای جداسازی بخش‌های مختلف کتابخانه با این نام بکار می‌برند.(جریان‌های ورودی/خروجی، جهانی‌سازی، تشخیص، زیرمجموعه کتابخانه C)

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

ویژگی‌های معرفی شده در ++C
در مقایسه با C زبان ++C ویژگی‌های جدیدی را معرفی نموده است مانند تعریف متغیر به عنوان عبارت، تغییر نوع‌های همانند تابع، new/delete، نوع داده bool، توابع درون‌خطی، آرگومان پیشفرض، گرانبارسازی عملگر و تابع، فضای نام و عملگر تعیین حوزه ::، کلاس‌ها (شامل تمام ویژگی‌های مربوط به کلاس‌ها همانند وراثت، اعضای تابع، توابع مجازی، کلاس‌های انتزاعی، و سازنده‌ها)، قالب‌ها، پردازش استثنا، کنترل نوع زمان اجرا، عملگرهای سربار شده ورودی (<>).

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

در بعضی حالات ++C تعداد کنترل نوع بیشتری نسبت به زبان C انجام می‌دهد. (برای اطلاعات بیشتر بخش «ناهماهنگی با C» را در پایین ببینید)

توضیحات با استفاده از // قبل از زبان C در زبان BCPL معرفی شده بود که مجدداً در زبان ++C به کار گرفته شد.

بعضی ویژگی‌های ++C بعدا توسط C به کار گرفته شد مانند نحوه تعریف for، توضیحات به شکل ++C (با استفاده از //)، و کلمه inline با وجود اینکه تعریف این کلمه در C99 با تعریف آن در زبان ++C هماهنگی ندارد. همچنین در C99 ویژگی‌هایی معرفی شده است که در ++C وجود ندارند مانند ماکروهای قابل تغییر و استفااده بهتر از آرایه‌ها به عنوان آرگومان. بعضی کامپایلرها این ویژگی‌ها را پیاده نموده‌اند اما در بقیه این ویژگی‌ها موجب ناهماهنگی می‌گردد.

برنامه Hello World
برنامه زیر با استفاده از کتابخانه استاندارد و جریان‌های خروجی یک متن را به خروجی استاندارد ارسال می‌نماید.

#include // provides std::cout

int main()
{
std::cout << “Hello, world!\n”;
return 0;
}

ویژگی‌های زبان

عملگرها
به بخش عملگرهای سی و سی++ مراجعه نمایید

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

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

#include
که این دستور تمام سمبل‌ها در فایل سرایند کتابخانه استاندارد iostream را در فایل منبع وارد می‌سازد.

کاربرد معمول دیگر به عنوان ماکرو خوانده می‌شود:

#define MY_ASSERT(x) assert(x)
که کد (MY_ASSERT(x را با (assert(x در فایل منبع جایگزین می‌نماید. که این جایگزینی امکان کنترل استفاده از این تابع را در اختیار برنامه‌نویس قرار می‌دهد.

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

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

دستورات پیش‌پردازنده برای کاربردهای عددی نیز به کار می‌رود که هم‌اکنون استفاده از const به جای #define ترجیح داده می‌شود. این کار علاوه بر ایجاد کنترل نوع قوی مانع از گمراهی در فضاهای نام می‌گردد.

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

قالب‌ها
قالب‌ها متفاوت با ماکروها هستند. در حالی که هر دوی این ویژگی‌های زمان کام پایل برای ایجاد کامپایل شرطی استفاده می‌شوند قالب‌ها محدود هب تغییرات لغوی و متنی نیستند. قالب‌ها با آگاهی از معنا و سیستم نوع در زبان استفاده شده و سایر ویژگی‌های زمان کامپایل می‌توانند از عملیات سطح بالا برای کنترل ترتیب اجرا براساس نوع پارامترها استفاده نمایند. ماکروها کنترل خود را بر کامپایل از طریق ویژگی‌های از پیش تعیین شهد انجام می‌دهند ولی قادر به ایجاد انواع جدید و کنترل نوع نیستند و فقط محدود به تغییرات متنی پیش از کامپایل هستند. به زبان دیگر ماکروها کنترل خود را با استفاده از نشانه‌های از پیش تعیین شده انجام می‌دهند اما همانند قالب‌ها نمی‌توانند نشانه‌ها را خود ایجاد نمایند. قالب‌ها ابزاری برای چندریختی ایستا و برنامه‌نویسی جنریک است. مثلاً جایگزین معادل با استفاده از قالب‌ها برای عبارت خطرناک #define max(x,y) ((x)>(y)?(x):(y)) در پایین نشان داده شده است.

template
const T& max(const T& x, const T& y)
{
return x > y ? x : y;
}
این قالب در سرآیند algorithm تحت عنوان std::max() قابل دسترسی است. معمولاً می‌توان از کلمه کلیدی class بجای typename استفاده کرد.

علاوه بر این قالب‌ها یک ویژگی تورینگ-کامل هستند که به این معناست که هر برنامه قابل محاسبه توسط کامپیوتر را می‌توان با استفاده از فرابرنامه‌نویسی قالب‌ها نوشت.

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

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

بسته‌بندی
بسته‌بندی به معنای جمع‌آوری عملیات و داده در یک محل می‌باشد. سی++ بسته‌بندی را با ایجاد امکان تعریف هر کلاس به صورت public، private، protected پیاده‌سازی نموده است. اعضای private فقط توسط اعضای کلاس و یا کلاس‌ها دقیقا بیان شده (friend) قابل دسترسی هستند. اعضای protected توسط کلاس‌های ارث برده شده و اعضای کلاس و کلاس‌های friend قابل دسترسی هستند.

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

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

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

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

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

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

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

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

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

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

// function with default argument but also an overloaded function
int strcpy(char *str1, char *str2, short unsigned n=65535);
// second overloaded function
int strcpy(char *str1, char *str2);
کد بالا در صورت استفاده از یک آرگومان n برای strcpy درست کامپایل می‌گردد اما اگر آرگومانی تعیین نگردد درست عمل نخواهد کرد. چرا که کامپایلر نخواهد دانست که باید از مقدار پیش‌فرض استفاده نماید یا از تابع بدون آرگومان.

چندریختی پویا
چندریختی پویا شامل وراثت و توابع مجازی عضو است.

ساختار برنامه ها
ساختار برنامه ها در این زبان بدین صورت است که همانند زبان سی، هر برنامه بایستی یک تابع اصلی (main) به عنوان بدنه برنامه داشته باشد. هر برنامه معمولاً از تعداد زیادی فایل تشکیل می شود که به هم الحاق می گردند (با دستور include) و به این فایل های الحاقی سرآیند (Header) می‌گوییم. فایل های الحاقی حاوی کد ها یا نسخه های اجرایی کلاس ها (مجموعه متغیر ها و توابع) می باشند که در بدنه اصلی برنامه از آنها استفاده می شود. معمولاً هر کلاس (که تعریف یک نوع داده ای با متد های مربوط به آن است) را در یک سرآیند می‌نویسند. هر سرآیند که معمولاً تنها تعاریف (معرفی) کلاس را در خود دارد به همراه فایل های پیاده سازی به زبان ++C یا پیاده سازی های کامپایل شده (به صورت فایل اشیا مانند dll یا so یا … ) می تواند به کار برده شود. به مجموعه های یکپارچه ای از کلاس های پیاده سازی شده (به صورت فایل های سرآیند با پیاده سازی های کد یا اشیای زبان ماشین) که برای برنامه نویسی به کار می روند، یک کتابخانه ++C گفته می شود و قدرت اصلی این زبان در امکان به کارگیری کتابخانه های آماده می باشد. کتابخانه های بزرگ ++C مانند STL، MFC، QT و … مجموعه قدرتمندی برای تولید برنامه در این زبان ایجاد کرده اند.

محیط‌های برنامه نویسی
یک برنامه به زبان ++C می تواند در محیط های ++Turbo C++ , Borland C و ++Dev C نوشته شود. این محیط‌های برنامه‌نویسی، همراه با یک کمپایلر عرضه می‌شوند که کار تبدیل برنامه به فایل اجرایی را راحت می‌کند.

منابع
Abrahams, David; Aleksey Gurtovoy. C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond. Addison-Wesley. ISBN 0-321-22725-5.
Alexandrescu, Andrei (2001). Modern C++ Design: Generic Programming and Design Patterns Applied. Addison-Wesley. ISBN 0-201-70431-5.
Becker, Pete (2006). The C++ Standard Library Extensions : A Tutorial and Reference. Addison-Wesley. ISBN 0-321-41299-0.
Alexandrescu, Andrei; Herb Sutter (2004). C++ Design and Coding Standards: Rules and Guidelines for Writing Programs. Addison-Wesley. ISBN 0-321-11358-6.
Coplien, James O. (1992, reprinted with corrections 1994). Advanced C++: Programming Styles and Idioms. ISBN 0-201-54855-0.
Dewhurst, Stephen C. (2005). C++ Common Knowledge: Essential Intermediate Programming. Addison-Wesley. ISBN 0-321-32192-8.
Information Technology Industry Council (2003-10-15). Programming languages — C++, Second edition, Geneva: ISO/IEC. 14882:2003(E).
Josuttis, Nicolai M. The C++ Standard Library. Addison-Wesley. ISBN 0-201-37926-0.
Koenig, Andrew; Barbara E. Moo (2000). Accelerated C++ – Practical Programming by Example. Addison-Wesley. ISBN 0-201-70353-X.
Lippman, Stanley B.; Josée Lajoie, Barbara E. Moo (2005). C++ Primer. Addison-Wesley. ISBN 0-201-72148-1.
Lippman, Stanley B. (1996). Inside the C++ Object Model. Addison-Wesley. ISBN 0-201-83454-5.
Stroustrup, Bjarne (2000). The C++ Programming Language, Special Edition, Addison-Wesley. ISBN 0-201-70073-5.
Stroustrup, Bjarne (1994). The Design and Evolution of C++. Addison-Wesley. ISBN 0-201-54330-3.
Sutter, Herb (2001). More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions. Addison-Wesley. ISBN 0-201-70434-X.
Sutter, Herb (2004). Exceptional C++ Style. Addison-Wesley. ISBN 0-201-76042-8.
Vandevoorde, David; Nicolai M. Josuttis (2003). C++ Templates: The complete Guide. Addison-Wesley. ISBN 0-201-73484-2.

زبان‌های اصلی برنامه‌نویسی
صنعتی-تجاری: آباپ | اِیدا | اسمال‌تاک | اسمبلی | ای‌دبلیو‌کی | ایفل | بیسپ معمولی | پاسکال | پاوربیلدر | پایتون | پرل | پی‌اچ‌پی | پی‌ال/اس‌کیوال | تی‌اس‌کیوال | تی‌سی‌ال | جاوا | جاوااسکریپت | دلفی | روبی | ساس | سی | سی شیء‌گرا | سی++ | سی‌شارپ | فرترن | کوبول | کلدفیوژن | لیسپ | ویژوال بیسیک دات نت | ویژوال بیسیک | ویژوال سی درون کار | ویژوال سی دات نت | ویژوال سی شارپ دات نت | ویژوال سی | ویژوال فاکس پرو

دانشگاهی: ای‌پی‌ال/جی | اسکیم | ام‌ال | پاسکال | پرولوگ | لوگو | هسکل |
تاریخی: الگول | بیسیک | پی‌ال/آی | سیمولا | کلیپر | مدول-۲/مدول-۳ | مامپس