دسته بندی های ارشیو: نرم افزار
مهندسی نرم افزار
نگاه کوتاه
از ویکیپدیا، دانشنامهٔ آزاد
مهندسی نرمافزار (به انگلیسی: Software engineering) یعنی استفاده از اصول مهندسی بجا و مناسب برای تولید و ارائه محصول نرمافزاری با کیفیت که قابل اطمینان و با صرفه بوده و برروی ماشینهای واقعی به طور کارآمدی عمل کند.
مهندسی نرمافزار یک روش سیستماتیک، منظم و دقیق برای ساخت و ارائه محصولی نرمافزاری با کیفیت است.
مهندسی نرمافزار اغلب شامل فرایند خطی تحلیل، طراحی، پیادهسازی و آزمون است؛ که با به کارگیری روشهای فنی و علمی از علوم مهندسی موجب تولید نرمافزاری با کیفیت مطلوب در طول یک فرایند انتخابی مناسب پروژه میشود.
کاربردهای مهندسی نرمافزار دارای ارزشهای اجتماعی و اقتصادی هستند، زیرا بهرهوری مردم را بالا برده، چند و چون زندگی آنان را بهتر میکنند. مردم با بهرهگیری از نرمافزار، توانایی انجام کارهایی را دارند که قبل از آن برایشان شدنی نبود. نمونههایی از این دست نرمافزارها عبارتاند از: سامانههای توکار، نرمافزار اداری، بازیهای رایانهای و اینترنت.
فناوریها و خدمات مهندسی نرمافزار به کاربران برای بهبود بهرهوری و کیفیت یاری میرساند. نمونههایی از زمینههای بهبود: پایگاه دادهها، زبانها، کتابخانهها، الگوها، فرایندها و ابزار
مهم ترین شاخص در مهندسی نرمافزار تولید نرمافزار با کیفیت مناسب در جهت «نیازهای مشتری» است.
اصطلاح مهندسی نرمافزار پس از سال ۱۹۶۸ میلادی شناخته شد. این اصطلاح طی نشست «مهندسی نرمافزار ناتو ۱۹۶۸» (که در گارمیش-پارتنکیرشن، آلمان برگزار شد) توسط ریاست نشست فریدریش ال باوئر معرفی شد و از آن پس بهطور گسترده مورد استفاده قرار گرفت.
اصطلاح مهندسینرمافزار عموماً به معانی مختلفی بهکار میرود:
- بهعنوان یک اصطلاح غیر رسمی امروزی برای محدوده وسیع فعالیتهایی که پیش از این برنامهنویسی و تحلیل سامانهها نامیده میشد.
- بهعنوان یک اصطلاح جامع برای تمامی جنبههای عملی برنامهنویسی رایانه، در مقابل تئوری برنامهنویسی رایانه، که علوم رایانه نامیده میشود.
- بهعنوان اصطلاح مجسمکننده طرفداری از یک رویکرد خاص نسبت به برنامهنویسی رایانه که اصرار میکند، مهندسی نرمافزار، بهجای آنکه هنر یا مهارت باشد، باید بهعنوان یک رشته عملی مهندسی تلقی شود و از جمعکردن و تدوین روشهای عملی توصیهشده به شکل متدولوژیهای مهندسی نرمافزار طرفداری میکند.
- مهندسی نرمافزار به مفهوم توسعه و بازبینی یک سامانه نرمافزاری مربوط میباشد. این رشته علمی با شناسایی، تعریف، فهمیدن و بازبینی خصوصیات مورد نیاز نرمافزار حاصل سر و کار دارد. این خصوصیات نرمافزاری ممکن است شامل پاسخگویی به نیازها، اطمینانپذیری، قابلیت نگهداری، در دسترس بودن، آزمونپذیری، استفاده آسان، قابلیت حمل و سایر خصوصیات باشد.مهندسی نرمافزار ضمن اشاره به خصوصیات فوق، مشخصات معین طراحی و فنی را آماده میکند که اگر بهدرستی پیادهسازی شود، نرمافزاری را تولید خواهد کرد که میتواند بررسی شود که آیا این نیازمندیها را تأمین میکند یا خیر.مهندسی نرمافزار همچنین با خصوصیات پروسه توسعه نرمافزاری در ارتباط است. در این رابطه، با خصوصیاتی مانند هزینه توسعه نرمافزار، طول مدت توسعه نرمافزار و ریسکهای توسعه نرمافزار درگیر است.
- نرمافزار عموماً از محصولات و موقعیتهایی شناخته میشود که قابلیت اطمینان زیادی از آن انتظار میرود، حتی در شرایط طاقت فرسا، مانند نظارت و کنترل نیروگاههای انرژی هستهای، یا هدایت یک هواپیمای مسافربری در هوا، چنین برنامههایی شامل هزاران خط کد هستند، که از نظر پیچیدگی با پیچیدهترین ماشینهای نوین قابل مقایسه هستند. بهعنوان مثال، یک هواپیمای مسافربری چند میلیون قطعه فیزیکی دارد (و یک شاتل فضایی حدود ده میلیون بخش دارد)، در حالی که نرمافزارِ هدایت چنین هواپیمایی میتواند تا ۴ میلیون خط کد داشته باشد.با توجه به گسترش روزافزون دنیای رایانه امروزه بیش از هر زمان دیگری نیاز به متخصصان رایانه احساس میشود. متاسفانه این رشته در ایران بازار کار خوبی ندارد طبق آمارها ۶۳٫۲۷ درصد از فارغالتحصیلان در سال ۹۰ مشغول به کار در سایر مشاغل هستند. اما برای مهندسان سختافزار هم امکان کار در شرکتهای تولیدکننده قطعات و دستگاهها و مراکز صنعتی – تولیدی بسیار فراهم است و از نظر سطح درآمدی هم با توجه به دانش و پشتکار شخصی در حد متوسط قرار دارند. به طور کلی این رشته در ایران با استقبال چندانی رو به رو نیست؛ این نیز حاکی از نبود برخی از زیرساختها در ایران هست.
- نرمافزار عموماً از محصولات و موقعیتهایی شناخته میشود که قابلیت اطمینان زیادی از آن انتظار میرود، حتی در شرایط طاقت فرسا، مانند نظارت و کنترل نیروگاههای انرژی هستهای، یا هدایت یک هواپیمای مسافربری در هوا، چنین برنامههایی شامل هزاران خط کد هستند، که از نظر پیچیدگی با پیچیدهترین ماشینهای نوین قابل مقایسه هستند. بهعنوان مثال، یک هواپیمای مسافربری چند میلیون قطعه فیزیکی دارد (و یک شاتل فضایی حدود ده میلیون بخش دارد)، در حالی که نرمافزارِ هدایت چنین هواپیمایی میتواند تا ۴ میلیون خط کد داشته باشد.با توجه به گسترش روزافزون دنیای رایانه امروزه بیش از هر زمان دیگری نیاز به متخصصان رایانه احساس میشود. متاسفانه این رشته در ایران بازار کار خوبی ندارد طبق آمارها ۶۳٫۲۷ درصد از فارغالتحصیلان در سال ۹۰ مشغول به کار در سایر مشاغل هستند. اما برای مهندسان سختافزار هم امکان کار در شرکتهای تولیدکننده قطعات و دستگاهها و مراکز صنعتی – تولیدی بسیار فراهم است و از نظر سطح درآمدی هم با توجه به دانش و پشتکار شخصی در حد متوسط قرار دارند. به طور کلی این رشته در ایران با استقبال چندانی رو به رو نیست؛ این نیز حاکی از نبود برخی از زیرساختها در ایران هست.
رئوس مطالب
مراحل تولید محصولات نرم افزاری – اجزاء مدل نرم افزاری – روشهای مهندسی نرم افزار- ارکان شی گرایی – ویژه گیهای نرم افزاری و سخت افزاری – انواع محصولات نرم افزاری – فرآیند نرم افزار – مدل های فرآیند نرم افزار – مدل گام به گام- مدل مارپیچی – تبدیل رسمی – روش مبتنی بر مولفه – Agile Development Method – روش برنامه نویسی افراطی – CASE) Computer-Aided Software Engineering) – متدولوژی های(روشمندی در تولید) مهندسی نرم افزار – فرآیند مهندسی سیستم – نیازهای عملکردی و غیر عملکردی – چهار فعالیت عمومی مهندسی نیازها – کشف نیارها (خواسته ها) – مورد کاربرد use case – اصول و مفاهیم طراحی نرم افزار – مفهوم طراحی معماری – ویژه گیهای طراحی معماری – پیمانه ها در نرم افزار – مدلهای سیستم در طراحی نرم افزار – دیکشنری داده ها – طراحی شی گرا – (Unified Modeling Language(UML – ویژه گیهای طراحی شی گرا – ارتباط تناظر – فرآیند طراحی شی گرا – تعریف حالتهای کاربرد سیستم – شناسایی کلاسهای اشیاء سیستم – توسعه مدلهای طراحی با استفاده از زبان UML – مدلهای زیر سیستم – مدلهای توالی و همکاری – مدل ماشین حالت – شناسایی واسطهای شی (مجموعه متدهای عمومی) – تکامل طراحی – انواع دیاگرامها – فرایند توسعه (ساخت محصول) – سناریو Use case – نمودار کلاس Class diagram – انواع کلاسها در UML – انواع ارتباطات در نمودار کلاس – ارتباط تعمیم – ارتباط تناظر – ارتباط تجمیع – ارتباط ترکیب – ارتباط وابستگی – مثال های کلاس دیاگرام – نمودار توالی – نمودار حالت – نمودار فعالیت
طراحی سایت تجارت الکترونیک
نگاه کوتاه
از ویکیپدیا، دانشنامهٔ آزاد
ارتباط بین تجارت و تکنولوژی دیر زمانی است که وجود داشته و ادامه دارد. در واقع، یک پیشرفت تکنیکی باعث رونق تجارت شد و آن هم ساخت کشتی بود. در حدود ۲۰۰۰سال قبل از میلاد، فینیقیان تکنیک ساخت کشتی را بکار بردند تا از دریا بگذرند و به سرزمینهای دور دست یابند. با این پیشرفت، برای اولین بار مرزهای جغرافیایی برای تجارت باز شد و تجارت با سرزمینهای دیگر آغاز گشته و روشهای خلاقانهای بصورتهای گوناگون به آن اضافه شد تا امروز که یکی از محبوبترین روشهای تجارت خرید اینترنتی در دنیای وب است. شما میتوانید در زمانهای پرت، در هر زمان و مکان حتی با لباس خواب میتوانید اینکار را بکنید. به معنای واقعی هر کسی میتواند صفحه اینترنتی خود را ساخته و کالاهای مورد نیازش را در آن ارایه دهد. البته تاریخچه تجارت الکترونیک با تاریخچه اختراعات قدیمی مثل کابل، مودم، الکترونیک، کامپیوتر و اینترنت پیوند خوردهاست. تجارت الکترونیک به شکل کنونی در سال ۱۹۹۱ محقق شد. از آن زمان هزاران هزار کسب و کار و تجار وارد این دنیا شدهاند.درواقع تجارت الکترونیک برای اسان سازی معاملات اقتصادی به صورت الکترونیک تعریف شد. استفاده از این فناوری مانند تبادل الکترونیکی اطلاعات و انتقال الکترونیکی سرمایه، که هر دو در اواخر ۱۹۷۰ معرفی شدهاند. و به شرکتها و سازمانها اجازه ارسال اسناد الکترونیکی را داد. و اجازه تجارت کردن با ارسال اسناد تجاری مثل سفارشهای خرید یا فاکتورها را به صورت الکترونیکی، میدهد. با رشد و پذیرش کارت اعتباری، ماشین تحویلدار خودکار و تلفن بانک در دهه ۱۹۸۰ باعث فرم گیری تجارت الکترونیک شد. نوع دیگر تجارت الکترونیک سیستم رزرواسیون هواپیمایی بوسیله Sabre در امریکا و Travicom در بریتانیا، ارایه شدهاست. از دهه ۱۹۹۰ به بعد تجارت الکترونیک شامل اضافاتی مثل سیستم برنامه ریزی منابع سرمایه، داده کاوی، انبار داده شدهاست. در ۱۹۹۰، Tim Bermers-lee مرورگر وب جهان گسترده را اختراع کرد و شبکه ارتباطی اکادمیک را به سیستم ارتباطی هرروز و برای هر شخص در جهان وسیع دگرگون ساخت که اینترنت یا www خوانده میشود. سرمایهگذاری تجاری بروی اینترنت بخاطر کافی نبودن سرمایهگذاری کاملاً محدود شده بود. اگر چه اینترنت محبوبیت جهانی گستردهای در حدود ۱۹۹۴ با استفاده از مرورگر وب Mosaic پیدا کرده بود. معرفی پروتکلهای امنیتی و DSL (اشتراک خط دیجیتال) که ارتباط مستمر را با اینترنت را اجازه میداد حدود ۵ سال طول کشید.. البته در سال ۲۰۰۰ بحران The dot-com bust باعث برشکستگی خیلی از شرکتهای تجاری بزرگ و نتایج ناگواری را بوجود اورد، باعث بازبینی قوانین و افزایش مزایا و امکانات تجارت الکترونیک کردند و تا انتهای سال ۲۰۰۰، خیلی از شرکتهای تجاری امریکایی و اروپایی سرویس هایشان را از طریق اینترنت ارایه دادند. از ان موقع مردم به کلمهای به عنوان تجارت الکترونیک با توانایی خرید کالاهای گوناگون از طریق اینترنت با استفاده از پروتکلهای امنیتی و سرویسهای پرداخت الکترونیکی که در ان مشارکت کردند، اشنا شدند. واز این زمان رقابت شدید بین شرکتها و سازمانها شدت گرفتو با گذشت زمان هم اینرقابت تنگتر شدهاست. جالب این که تا پایان سال ۲۰۰۱ بیش از ۲۲۰ بیلیون دلار معاملات مالی توسط صدها سایت تجاری بر روی اینترنت انجام پذیرفتهاست و در همین سال مدل تجارت الکترونیک B2B دارای در حدود ۷۰۰ میلیارد تراکنش بود. و در سال ۲۰۰۷ سهم تجارت الکترونیک در خرده فروشی کل دنیا ۳٫۴٪ بودهاست که انرا در سال ۲۰۱۰، ۵٫۱٪ اعلام نمودند که این امار رشد سریع این شیوه تجارت کردن را میرساند.
کسب و کار الکترونیک عبارتست از کاربردی کردن کلیه سیستمهای اطلاعاتی برای تقویت و کنترل فرایندهای کسب و کار. امروزه این فرایندها با استفاده از تکنولوژیهای مبتنی بر وب توسعه مییابند .
کسب و کار الکترونیکی در یک تعریف ساده واژهای به معنی انجام کسب و کار با استفاده از ارتباطات راه دور و ابزارهای مرتبط است . تجارت الکترونیک از این دست دارای مفهومی کوچکتر و محدودتر نسبت به کسب و کار الکترونیکی است . در تجارت الکترونیک حتماً باید بین دو طرف پول رد و بدل شود ( تا به مفهوم تجارت برسیم ) ولی در کسب و کار الکترونیک لازم نیست پولی مبادله گردد . به عنوان مثال دادگاهی که در آن محاکمه از طریق فضای اینترنتی انجام میگردد کسب و کار الکترونیک محسوب میشود .
برخی نیز کسب و کار الکترونیک را ترکیبی از تجارت الکترونیک، هوشمندی شرکتها، مدیریت ارتباط با مشتری، مدیریت زنجیرهٔ تامین و برنامه ریزی منابع شرکت میدانند که به صورت زیر بیان میشود :
کسب و کار الکترونیک
کسب و کار الکترونیک تعاریف متعددی دارد که در زیر به برخی از آنها اشاره می شود: – کسب و کار الکترونیک وسیله ای که مسیر رسیدن بنگاهها به بازار را هموار می سازد. مسیری که مشتریان در آنجا اقدام به خرید کالا و خدمات می کنند؛ – کسب و کار الکترونیک وسیله ای است که به استفاده کنندگان آن امکان رسیدن به مشتریان موثر و کارآمد را فراهم می سازد؛ – کسب و کار الکترونیک توانایی هدایت تجارت از طریق شبکه های الکترونیک نظیر اینترنت و شبکه جهانی است.
تجارت الکترونیک
براساس تعریف دفتر توسعه جامعه اروپا(OECD) به طور کلی تجارت الکترونیک، معاملات را در ارتباط با فعالیتهای تجاری افراد و سازمانها شکل می دهد. این فعالیتها براساس پردازش و انتقال اطلاعات دیجیتالی (متن، صدا و تصاویر) مبتنی هستند. تجارت الکترونیک، به مجموعه فعالیتهایی اطلاق می گردد که مستقیماً به وسیله ارتباطات الکترونیکی (شبکه ای) پشتیبانی می شود.
تفاوت کسب و کار الکترونیک و تجارت الکترونیک کسب و کار الکترونیک به مفهوم کلی شامل به کارگیری فناوریهای جدید برای برقراری ارتباطات زنجیره ای بین سازندگان، فروشندگان، عرضه کنندگان و به طور کلی ارایه دهندگان کالا و خدمات از یک سو و خریدار و مصرف کننده و یا به طور کلی مشتری از سوی دیگر است و نتیجه آن اتخاذ تصمیمهای بهتر، بهینه سازی کالا و خدمات، کاهش هزینه ها و گشودن کانالهای جدید است. ولی تجارت الکترونیک به هر شکلی از نقل و انتقالات در تجارت اطلاق می شود که در آن طرفین، بیشتر از طریق الکترونیکی با یکدیگر در تماس هستند تا از طریق نقل و انتقالات فیزیکی. به عبارت دیگر، تجارت الکترونیک زیربخشی از کسب و کار الکترونیک در سازمانها است، زیرا در کسب و کار الکترونیک، شکل الکترونیکی کلیه فرایندهای کسب و کار سازمان از قبیل تولید، تحقیق و توسعه امور اداری، مالی، مدیریت نیروی انسانی، پشتیبانی و تجارت مطرح است. در حالی که در تجارت الکترونیک تنها فرایند تجارت سازمان به صورت الکترونیک یک جزء بنیادی از کسب و کار الکترونیک به حساب می آید. کسب و کار الکترونیک باعث می شود تا فرایندهای تجارت، روابط و دادوستد جهانی گردد. محیط تجاری شرکت، ممکن است، شامل یک شبکه جهت دسترسی به سازمانهای عمومی یا شبکه هایی که با محافظت خاص برای دسترسی افرادی خاص طراحی شده و یا حتی شبکه داخلی باشد که برای دسترسی افراد و کارمندان داخل شرکت طراحی شده است. کسب و کار الکترونیک تنها قراردادن یک صفحه شبکه ای نیست. بلکه محیط مدلهای تجاری اعم از تجارت با کارمندان، مشتریان، تامین کنندگان و شرکا است. (سرمد، ۱۳۸۲، ص۳)
انواع کسب و کار الکترونیک
کسب و کار الکترونیک بسته به اینکه طرفهای معامله سازمانها یا افراد باشند به انواع زیر تقسیم می شوند. در اینجا روابط بر مبنای اهداف تجاری شکل می گیرد. واحد تجاری با واحد تجاری (BUSINESS TO BUSINESS = B2B) ؛ واحد تجاری با مصرف کننده (BUSINESS TO CONSUMER = B2C) مصرف کننده با مصرف کننده (CONSUMER TO CONSUMER = C2C) واحد تجاری با دولت (BUSINESS TO GOVERNMENT = B2G) دولت با واحد تجاری (GOVERNMENT TO BUSINESS = G2B)
شیوه های کسب و کار الکترونیک
به طور کلی سه شیوه معاملات کسب و کار الکترونیکی وجود دارد: OFF LINE = در این شیوه بنگاهها برای انجام فعالیتهای تجاری از سیستم پست الکترونیکی استفاده می کنند.
ON LINE = در این شیوه،& بنگاهها از طریق «<تعیین کننده متحدالشکل منبع» (UNIFORM RESOURCE LOCATOR = URL) اقدام به معاملات تجاری می کنند. URL ها آدرسهایی هستند که ساختار آنها برای همه کامپیوترها یکسان است و به وسیله آن می توان به منبع مورد نظر دست یافت (اسنل، ۱۳۷۹، ص ۷۷). دروازه شبکه (PORTAL) یک صفحه شبکه است که در آن لینک هایی برای رفتن به سایت های محتوی اخبار مربوط به موضوعهای مختلف وجود دارد. این صفحات دارای تعداد زیادی آدرس با موضوعهای مختلف هستند. (اسنل، ۱۳۷۹، ص ۹۷). خدمات دروازه شبکه اغلب شامل موتورهای جستجوگر، پست الکترونیکـــــی، چت، نقشه ها، فروش و گزینه های دیگری برای مشتریان است. درواقع دروازه های شبکه هدفی برای تبلیغات و بازاریابی هستند.مزایای استفاده از کسب و کار الکترونیک: نزدیک شدن ارتباطات؛ دستیابی به بازارهای جدید؛ افزایش میزان فروش و سود؛ حذف هزینه هایی مانند تهیه کاغذ، چاپ، بروشور و کاتالوگ؛ کاهش هزینه های معاملاتی و تدارکاتی؛ بهبود مدیــریت بر روابط مصرف کننده، عرضه کننده و کارکنان؛ کاهش آلودگی محیط زیست، ترافیک و ازدحام.
معایب کسب و کار الکترونیک مسئله امنیت، امکان ورود به سیستم های شما از طریق آدرس پست الکترونیکی، سایت شبکه و دستیابی به اطلاعات مالی و غیره؛ اختلال در برنامه کاری در صورت خرابی سیستم؛ از دست دادن کنترل؛ مشکلات و هزینه های به روز بودن با فناوریهایی که به سرعت پیشرفت می کنند.
چارچوب تحلیلی گسترش و نفوذ هر فناوری بستگی به چند عامل نظیر منافع بالقوه فناوری، ظرفیت جذب بنگاهها دارد. منافع بالقوه نه تنها به تولیدکنندگان کالاها و خدمات می رسد که از فناوری جدید استفاده می کنند، بلکه مصرف کنندگان آن کالاها و خدمات نیز از آن بهره مند می شوند. برای مثال، رشد سریع اینترنت باعث می شود هم عرضه کنندگان و هم مصرف کنندگان از مطلوبیت بیشتری برخوردار گردند.
پذیرش فناوری کسب و کار الکترونیک تابعی از چندین عامل است. این عوامل در اکثر مواقع اثر تقویت کننده دو جانبه ای (متقابلی) بر یکدیگر دارند ملاحظات بینالمللی که شامل صادرات، واردات فنــــاوری و… است در تعامل با کسب و کار الکترونیک، اثرتقویت کننده بر یکدیگر دارند. در این حالت بنگاه در سطح بینالمللی با پذیرش کسب و کار الکترونیک واردات و صادرات خود را برمبنای اصول استاندارد کسب و کـــــار الکترونیک شکل می دهد. از طرف دیگر قرار گرفتن کالا و خدمات در فضای تجارت الکترونیکی موجب حذف فاصله بین مبدا و مقصد کالاها و خدمات می گردد و تغییرات اساسی در بازارهای هدف به وجود می آورد. موفقیت در این فرایند، منوط به مدیریت کارا و حرفه ای اسـت. مدیریت حرفـه ای با درک و شناخت از فضای ارتباطات بینالمللی، شیوه های کسب و کار الکترونیک را متناسب با ملاحظات بیـــن المللی تطبیق می دهد. از طرف دیگر، مدیریت حرفه ای با تجارت مدرن روابط غیرمعمـــول را تصحیح می کند. حجم عملیات، اثرات دو سویه ای را بر کسب و کار الکترونیک دارد. از آنجایی که استفاده از کسب و کار الکترونیک باعث دستیابی به انبوهی از مشتریان با سلایق مختلف می گردد. لذا بنگــاههای فعال در امر تجارت بینالمللی با گسترش ظـــرفیت تولیدی و تنوع بخشی به تولیدات کالا و خدمات سعی در جذب مشتریان بیشتر است. یکی از شرایط مهم دیگر در کسب و کار الکترونیک وجود شبکه ارتباطی قوی همراه با اطمینان بالاست. دسترسی به پهنای باند بالاتر در اختیار هیچ کدام از بنگاهها نیست. پهنای باند قسمتی از زیرساختهای نهادینه شده توسط دولت است. هرقدر این پهنا بالاتر باشد، حجم وسرعت اطلاعاتی که ردوبدل می کند بیشتر خواهد بود. از این رو با درنظر گرفتن نقش مهمی که این عامل می تواند در موقعیت خدمات شبکه با توان بالا داشته باشد، خصوصی سازی و مقررات زدایی خدمات ارتباطی به منظور افزایش کارایی در سیستم مخابرات در کشورهای در حال توسعه و توسعه یافته مورد تاکید قرار می گیرد. متغیرهای رفتاری نظیر میزان مهارت نیروی انسانی بنگاهها، حجم سرمایه گذاری در تحقیق و توسعه و نرخهای دستمزد، از عوامل مهمی هستند که در پذیرش کسب و کار الکترونیک توسط بنگاهها موثرند. هرقدر بنگاه تجاری در سطح بینالمللی از نیروی انسانی متخصص بیشتری برخوردار باشد و منابع بیشتری را به سرمایه گذاری تخصیص دهد، موقعیت بهتــــــری در جذب و پذیرش کسب و کار الکترونیک دارد. همچنین دستمزدهای بالا همیشه انگیزه عمده ای برای نیروی کار جهت افزایش کارایی و نوآوری به حساب می آید. در نتیجه به کارگیری کسب و کار الکترونیک منافع متعددی را به دنبال دارد. علیرغم اینکه بسیاری از منافع موجود در شکل یک ذکر گردید، بسیاری از بنگاهها به دلیل پایین بودن هزینه مشارکت را قبول می کنند اینترنت باعث ارزانی دسترسی به اطلاعات و بازارهای جهانی می شود. این عامل موجب می گردد سرعت عمل در بازارهای چند منظوره که برای تولید کالاها و اطلاعات است، بالا برود. به طور بالقوه شکل تازه ای به سازمان دهی زیرساخت مشاغل مــــوجود می بخشد و با ارزش گذاری مجدد، راه را برای انجام معاملات تجاری باز می کند و با مهندسی مجدد بازرگانی محدودیتهایی که به طور سنتی تولیدکنندگان را از مشتریان جدا می ساخت رها می سازد.از سوی دیگر، فعالیتهای منفصل و جدا از هم نظیر سفارش، پرداخت و خدمات بعد از فروش، ممکن است به یک فرایند واحد ادغام شده و باعث کاهش هزینه های اعتباری گردد. نتیجه چنین فرایندی منتهی به افزایش کارایی و رقابت پذیری در بین بنگاههای صادراتی است. نتیجه گیری
باتوجه به چارچوب تئوریک مطرح شده و بررسی تجربه هند از کسب و کار الکترونیک برای افزایش انگیزه صادراتی پیشنهادات زیر برای بنگاههای تجاری فعال در امور بازرگانی به بنگاههای بینالمللی توصیه می شود. ورود به سازمان تجارت جهانی و قرار گرفتن در وضعیت رقابتی امری اجتناب ناپذیر است. از این رو استفاده از فناوریهای نوین تجاری در بنگاههای صادراتی مورد تاکید قرار می گیرد. از آنجا که موفقیت در کسب و کار الکترونیک نیازمند توجه به عوامل جانبی و تاثیرگذار بر آن است. لذا مدیریت حرفه ای و به کارگیری نیروی کار متخصص برای تقویت کسب و کار الکترونیک برای بنگاهها توصیه می شود.
رئوس مطالب
این درس بر اساس تدریس استاد دکتر علی اکبر صدری تدوین گردیده است.
Data Center Server Types -سرورهای مستقل – سرورهای مستقل مجازی – Application Sections – ابزارهای سمت کلاینت – ابزارهای سمت سرور – سرویس دهنده Server – سرویس گیرنده Client – درخواست ایستا Static Request – درخواست پویا Dynamic Request – ابزارهای سمت کلاینت Client Side – ابزارهای سمت سرور Client Side – عملیات ارتباط بین کلاینت client و سرور server – مراحل آماده سازی سرور جهت درخواستهای ایستا (Static Request) – مراحل آماده سازی سرور جهت درخواستهای پویا (Dynamic Request) – انواع صفحات در Server – پیام های پرتکل Http – دیاگرام ارتباط بین سرور و کلاینتها – ساختار اسکریپتهای زبان PHP – دستور Echo -متغیر ها – انواع داده – مثال (متغیرها) – عملگرها (Operators) – دستورات شرطی در PHP – اسکریپت سمت سرور مثال قبل با استفاده از حلقه For – اتصال به پایگاه های داده – ارتباط PHP با بانک اطلاعاتی MYSQL – مجموعه دستورات مهم استفاده شده در اسکریپت PHP – استخراج اطلاعات برای ساخت جداول – آرایه ها(Array) – تعریف آرایه – توابع آرایه ها – مرتب سازی آرایه ها – عملگرها در آرایه ها – آرایه های ویژه در PHP – برخی از توابع مهم رشنه ها – پروژه PHP – تشریح فایلهای PHP استفاده شده در پروژه – فایلها و دایرکتوریها – توابع مهم فایلها – بررسی وجود فایل – برگرداندن اندازه فایل به بایت – برگرداندن تاریخ آخرین تغییر فایل – استخراج نام فایل – ایجاد نسخه جدید از یک فایل – تغییر نام فایل – دایرکتوریها – اسکریپت ایجاد دایرکتوری – آپلود فایلها – کاربرد کوکی ها – جلسه – ملاحضات کار با جلسات – چگونگی ایجاد یک Session و چاپ شناسه آن – چگونگی تغییر شناسه یک جلسه – Login با امنیت
آموزش تصویری PHP-MySQL
پیاچپی (به انگلیسی: PHP)
یک زبان برنامهنویسی است که برای طراحی وب توسعه یافتهاست، اما میتوان از آن به عنوان یک زبان عمومی نیز استفادهکرد. تا ژانویهٔ سال ۲۰۱۳ میلادی پیاچپی بر روی ۲۴۴ میلیون وبگاه و ۲٫۱ میلیونسرور وب نصب شدهاست.[۳] این زبان در سال ۱۹۹۵ میلادی توسط راسموس لِردورف (به انگلیسی: Rasmus Lerdorf) ساختهشد و در حال حاضر توسعهٔ آن بر عهدهٔ گروه پیاچپی میباشد.[۴] در ابتدا پیاچپی از عبارت صفحهٔ خانگی شخصی (به انگلیسی: Personal Home Page) گرفته شدهبود.[۴] اما اکنون این کلمه مخففِ بازگشتی PHP: Hypertext Preprocessor به معنی پیاچپی: پیشپردازندهٔ ابرمتن میباشد.[۵]
کدهای پیاچپی توسط یک سرور وب که نرمافزار پیاچپی بر روی آن نصب باشد، تفسیر میشوند. دستورهای این زبان میتوانند به صورت مستقیم در درون کدهای اچتیامال قرار بگیرند. زبان پیاچپی از نسخهٔ ۴٫۳ به بعد قابلیت پشتیبانی ازواسط خط فرمان را نیز به امکانات خود اضافه کرد. این قابلیت میتواند برای ایجاد نرمافزارهای غیر وبی و یا نرمافزارهایی با واسط گرافیکی کاربر مورد استفاده قرار بگیرد.[۶]
پیاچپی یک نرمافزار آزاد است که تحت مجوز پیاچپی انتشار یافته است. این مجوز به دلیل قرار دادن محدودیت بر روی استفاده از عنوان پیاچپی، با مجوز همگانی گنو (GPL) سازگار نیست. پیاچپی را میتوان بر روی اکثر سرورهای وبنصب کرد. همچنین قابلیت نصب آن به صورت یک شل جداگانه بر روی تقریباً تمامی سیستمهای عامل و پلتفرمها (یا سکوها) وجود دارد.[۷] تمامی این استفادهها رایگان است.[۸]
تاریخچه
توسعهٔپیاچپی از سال ۱۹۹۴ و زمانی که راسموس لردورف تعدادی اسکریپت به زبان سی نوشت تا صفحهٔ خانگی خود را مدیریت کند، آغاز شد. این اسکریپتها که به صورت رابط دروازهٔ مشترک (به انگلیسی: Common Gateway Inteface) نوشته شدهبودند، مسئول انجام عملیاتهای سادهای مانند نشان دادن رزومهٔ راسموس و بررسی آمارهای بازدید از وبگاه او بودند.[۴] با گسترش اسکریپتها و افزودن توانایی تعامل با فرمهای وب و ارتباط با پایگاههای داده، نامصفحهٔ خانگی شخصی/مفسر فرم (به انگلیسی: Personal Home Page/Form Interpreter) یا PHP/FI برای آنها انتخاب شد. PHP/FI میتوانست برای ایجاد نرمافزارهای سادهٔ وب مورد استفاده قرار بگیرد. لردورف در ابتدا برای یافتن خطاهای این اسکریپتها و بهبود آنها، در ۸ جون سال ۱۹۹۵ میلادی اسکریپتها را با نام ابزارهای صفحهٔ خانگی شخصی نسخهٔ ۱٫۰ (به انگلیسی: Personal Home Page Tools version 1.0) تحت مجوز عمومی گنو بر روی گروه خبرییوزنت منتشر کرد.[۹] این نسخهٔ اولیه بسیاری از ویژگیهای نسخهٔ کنونی این زبان را دارا بود. متغیرها به سبک زبان پرل بودند، مدیریت فرمها وجود داشت و میشد کدها را در درون کدهای اچتیامال قرار داد. قواعد پیاچپی نیز از زبان پرلپیروی میکردند، اما سادهتر، محدودتر و ناپایدارتر بودند.[۴] با شکلگیری یک گروه برنامهنویسی و بعد از انجام تستهای فراوان بر روی نسخهٔ بتا و بازنویسی موتور تجزیهکننده، سرانجام PHP/FI نسخهٔ ۲٫۰ در نوامبر سال ۱۹۹۷ میلادی منتشر گردید.[۴]
اندی گاتسمن و زیو سوراسکی با بازنویسی موتور تجزیهکننده در سال ۱۹۹۷ میلادی، پایه و اساس نسخهٔ ۳ پیاچپی را بنیان نهادند. این ۲ نفر با همراهی لردورف با تغییر نام پیاچپی به پیاچپی: پیشپردازندهٔ ابرمتن (به انگلیسی: PHP: Hypertext Preprocessor) که یک مخفف بازگشتی است، در ماه جون ۱۹۹۸ میلادی رسماً پیاچپی نسخهٔ ۳٫۰ را منتشر کردند.[۴] بعد از این اتفاق گاتسمن و سوراسکی شروع به نوشتن هستهٔ جدیدی برای زبان پیاچپی کردند که منجر به بهوجودآمدن موتور زِند در سال ۱۹۹۹ میلادی شد. آنها همچنین شرکت زِند تکنولوژی را در کشور اسرائیل تاسیس کردند.[۱۰][۱۱]
در تاریخ ۲۲ می سال ۲۰۰۰ میلادی پیاچپی نسخهٔ ۴ که از موتور زند نسخهٔ ۱٫۰ استفاده میکرد، منتشر شد.[۴] این نسخه تا ماه اوت سال ۲۰۰۸ میلادی توسعه یافت و به زیرنسخهٔ ۴٫۴٫۹ رسید. هماکنون پشتیبانی این نسخه به پایان رسیدهاست و هیچ بهروزرسانی برای آن منتشر نمیشود.[۱۲][۱۳]
در ۱۳ ژوئیه سال ۲۰۰۴ میلادی، نسخهٔ ۵ پیاچپی که از موتور زند نسخهٔ ۲ بهره میبرد، منتشر شد.[۴] نسخهٔ ۵ ویژگیهای زیادی را به پیاچپی اضافه کرد. پشتیبانی کامل از شیء گرایی، افزونهٔ PDO (به انگلیسی: PHP Data Object Extension) (که دسترسی به بانکهای اطلاعاتی را ممکن میساخت) و بهبود بازدهی از جملهٔ این ویژگیها محسوب میشد.[۱۴] از سال ۲۰۰۸ به بعد، با پایان یافتن پشتیبانی از تمامی نسخههای قدیمیتر پیاچپی، نسخهٔ ۵ تنها نسخهٔ در حال گسترش است.
در کنار نسخهٔ ۵ پیاچپی یک نسخهٔ اصلی دیگر در حال توسعه است. با توجه به تغییرات عمدهٔ موجود در این نسخه از جمله پشتیبانی کامل از یونیکد، قرار بود این نسخه به عنوان نسخهٔ ۶ پیاچپی منتشر گردد. اما پیادهسازی پشتیبانی از یونیکد بیش از آنچه انتظار میرفت به طول انجامید. این امر باعث شد تا در مارچ سال ۲۰۱۰ میلادی، این نسخه به بخش در حال توسعه (به انگلیسی: Trunk) منتقل شد و دیگر به آن نسخهٔ ۶ گفته نمیشود.
مهمترین تغییرات این بخش جدید شامل حذف register_globals
،[۱۵] magic quotes
و safe mode
میباشد.[۱۲] دلیل حذف magic quotes
تاثیرات غیرقابل پیشبینی و دلیل حذف register_globals
خطرهای امنیتی بود که در نرمافزارها ایجاد میکرد. به جای استفاده ازmagic qoutes
برنامهنویسها میتوانند از تابع addslashes()
و یا توابع دقیقتری که برای هر پایگاه داده ایجاد شدهاند مانند mysql_real_escape_string()
که برای پایگاه داده مایاسکیوال طراحی شدهاست، استفاده کنند. توابعی که قرار است در نسخهٔ ۶ حذف شوند، از نسخهٔ ۵٫۳ به صورت توصیهنشده (به انگلیسی: Deprecated) درآمدهاند و استفاده از آنها باعث بروز هشدار در نرمافزار خواهد شد.[۱۶]
تعداد بسیار زیادی از پروژههای بزرگ و متنباز که از زبان پیاچپی استفاده میکنند، از سال ۲۰۰۸ با به وجود آمدن جنبش ابتکاری GoPHP5 به معنای برو به پیاچپی ۵ دیگر از پیاچپی نسخهٔ ۴ استفاده نمیکنند. این جنبش توسط بسیاری از توسعهدهندگان پیاچپی پشتیبانی شد تا بتوانند به گسترش استفاده از نسخهٔ ۵ پیاچپی کمک کنند.[۱۷][۱۸][۱۹]
مفسرهای زبان پیاچپی برای هر دو معماری ۳۲بیتی و ۶۴بیتی موجود میباشند. تنها استثنا سیستمعامل ویندوز است که فقط نسخههای ۳۲بیتی برای آن منتشر میشود. اما مدتی است که نسخههای ۶۴بیتی ویندوزی نیز به صورت امتحانی بر روی وبگاه پیاچپی منتشر میشوند. استفاده از نسخههای امتحانی ۶۴بیتی ویندوز برای سرورهای بزرگ توصیه نمیشود.[۲۰][۲۱]
تاریخچه انتشار
رنگ | مفهوم | وضعیت توسعه |
---|---|---|
قرمز | نسخهٔ قدیمی | بدون توسعه |
زرد | نسخهٔ پایدار | تنها بهروزرسانیهای امنیتی |
سبز | نسخهٔ پایدار | بهروزرسانی فعال |
آبی | نسخهٔ آینده | امکانات جدید |
نسخه | تاریخ انتشار | تاریخ اتمام پشتیبانی[۲۲] | یادداشتها |
---|---|---|---|
۱٫۰ | ۱۹۹۵/۰۶/۰۸ | این نسخه به صورت رسمی “Personal Home Page Tools” یا “PHP Tools” نامیده شد. کلمهٔ پیاچپی اولین بار در اینجا به کار رفت.[۴] | |
۲٫۰ | ۱۹۹۷/۱۱/۰۱ | ||
۳٫۰ | ۱۹۹۸/۰۶/۰۶ | ۲۰۰۰/۱۰/۲۰ | توسعهدهندگان از یک به چند نفر افزایش یافتند. زیو سوراسکی و اندی گاتمنس هستهٔ این نسخه را بازنویسی کردند.[۴] |
۴٫۰ | ۲۰۰۰/۰۵/۲۲ | ۲۰۰۱/۰۱/۲۳ | سیستم دومرحلهای تجزیه/اجرای پیشرفته تحت عنوان موتور زند به این نسخه اضافه شد.[۲۳] |
۴٫۱ | ۲۰۰۱/۱۲/۱۰ | ۲۰۰۲/۰۳/۱۲ | متغیرهای فوقِ سراسری(Superglobal) معرفی شدند. (GET ، $_POST ، $_SESSION و…)[۲۳] |
۴٫۲ | ۲۰۰۲/۰۴/۲۲ | ۲۰۰۲/۰۹/۰۶ | تنظیم register_globals به صورت پیشفرض غیرفعال شد. با این تغییر اطلاعاتی که از طریق شبکه ارسال میشدند، دیگر به طور مستقیم در محدودهٔ متغیرهای فوقِ سراسری قرار نمیگرفتند. این نکته مشکلات امنیتی احتمالی بسیاری از نرمافزارها را برطرف کرد.[۲۳] |
۴٫۳ | ۲۰۰۲/۱۲/۲۷ | ۲۰۰۵/۰۳/۳۱ | واسط خط فرمان یا همان CLI به این نسخه اضافه شد.[۲۳] |
۴٫۴ | ۲۰۰۵/۰۷/۱۱ | ۲۰۰۸/۰۸/۰۷ | صفحات راهنما(man page) برای درستورات phpsize و config-php اضافه شد.[۲۳] |
۵٫۰ | ۲۰۰۴/۰۷/۱۳ | ۲۰۰۵/۰۹/۰۵ | موتور زند نسخهٔ ۲ معرفی شد.[۲۴] |
۵٫۱ | ۲۰۰۵/۱۱/۲۴ | ۲۰۰۶/۰۸/۲۴ | بهبود بازدهی با معرفی متغیرهای مترجم (Compiler Variables) در موتور جدید پیاچپی.[۲۴] مدل PDO به عنوان یک رابط پایدار برای برقراری ارتباط با بانکهای اطلاعاتی معرفی شد.[۲۵] |
۵٫۲ | ۲۰۰۶/۱۱/۰۲ | ۲۰۱۱/۰۱/۰۶ | افزونهٔ فیلتر (Filter Extension) به صورت پیشفرض فعال شد. پشتیبانی از جیسَن (JSON) افزوده شد.[۲۴] |
۵٫۳ | ۲۰۰۹/۰۶/۳۰ | ژوئیه ۲۰۱۴[۲۶] | پشتیبانی از namespace، late static binding، دستور jump (نسخهٔ ضعیف شدهٔ دستور Goto) و زباله جمعکن. پشتیبانی بهتر از سیستمعامل ویندوز. پشتیبانی از اسکیواللایت نسخهٔ ۳. کتابخانهٔ Mysqlnd جایگزین کتابخانهٔ libmysql (که مسئول برقراری ارتباط با بانکاطلاعاتی مایاسکیوال بود) شد. افزونهٔ fileinfo که کارایی بهتری در مورد MIMEها دارد، جایگزین افزونهٔ mime_magic شد. افزونهٔ بینالملل (Internationalization) اضافه شد و توابع ereg از دور خارج شدند. |
۵٫۴ | ۲۰۱۲/۰۳/۰۱ | ۳ سال بعد از انتشار[۲۷] | پشتیبانی از Trait. پشتیبانی از آرایهها با فرمت کوتاه. سرور وب داخلی.[۲۸] بهبود کارایی و استفاده از حافظه به میزان کمتر. توابع حذف شده: register_globals , safe_mode , allow_call_time_pass_reference , session_register |
۵٫۵ | ۲۰۱۳/۰۶/۲۰ | ۳ سال بعد از انتشار[۲۷] | جنراتورها افزوده شدند(Generators). بهینهساز زند+ (Zend Optimizer+) افزوده شد.[۲۹] |
۵٫۶ | مشخص نشده | ۳ سال بعد از انتشار[۲۷] | قابلیت بازنویسی عملگرها (Operator Overloading). ایجاد تغییرات در GMP یا GNU Multiple Precision.[۳۰] |
از تاریخ ۲۸ جون سال ۲۰۱۱ میلادی، گروه پیاچپی برنامهای مدون برای انتشار نسخههای آیندهٔ این زبان را منتشر کرد.[۲۷] بر اساس این برنامه هر ماه یک انتشار جزئی و هر سال یک انتشار اصلی اتفاق خواهد افتاد. از هر نسخه از پیاچپی تا ۳ سال پشتیبانی میشود. تا ۲ سال تمامی بهروزرسانیها و سال سوم تنها بهروزرسانیهای امنیتی برای هر نسخه منتشر میشود.
مایاسکیوال (به انگلیسی: MySQL)
یک سامانه مدیریت پایگاه دادهها متنباز است،[۲] که توسط شرکت اوراکل توسعه، توزیع، و پشتیبانی میشود.[۲]
سرور مایاسکیوال به چندین کاربر اجازه استفاده همزمان از دادهها را میدهد.
مزیتها
مایاسکیوال از مزیتهای زیر بهرهمند است:[۳]
- مقیاسپذیری و قابلیت انعطاف
- عملکرد بالا
- در دسترسبودن بالا
- پشتیبانی از تراکنشها
- محافظت از داده
- آسان بودن مدیریت
- آزاد بودن برنامه
- پشتیبانی شبانهروزی
تاریخچه
توسعه مایاسکیوال در سال ۱۹۹۴ توسط مایکل وایدنیوس و دیوید آکسمارک آغاز شد.[۴] اولین نسخه داخلی در ۲۳ می ۱۹۹۵ عرضه شد. در سال ۲۰۰۸ سان میکروسیستمز مایاسکیوال ایبی را خریداری کرد.[۵] شرکت اوراکل سان میکروسیستمز را در ۲۷ ژانویه ۲۰۱۰ خریداری کرد.[۶]
قابلیتها
انواع داده
انواع دادههای پشتیبانی شده در مایاسکیوال شامل موارد زیر است:[۷]
|
|
موتورهای ذخیرهسازی
مایاسکیوال از چندین موتور ذخیرهسازی پشتیبانی میکند که به عنوان نوعهای جدول مختلف عمل میکنند.[۸] برخی انواع موتورهای ذخیرهسازی در برابر تراکنشها امن، و برخی دیگر در برابر تراکنشها ناامن هستند.
لیست موتورهای ذخیرهسازی مایاسکیوال شامل موارد زیر است:
- اینودیبی (به انگلیسی: InnoDB): امن در برابر تراکنشها است. از قواعد جامعیت کلید خارجی پشتیبانی میکند. از مایاسکیوال ۵٫۵٫۵ موتور ذخیرهسازی پیشفرض مایاسکیوال است.[۹]
- مایآیسم (به انگلیسی: MyISAM): قبل از نسخه ۵٫۵٫۵ موتور ذخیرهسازی پیشفرض مایاسکیوال بود.[۱۰]
- حافظه (به انگلیسی: Memory): تمام داده را به منظور دسترسی سریع در حافظه نگهداری میکند.[۸]
- ادغام (به انگلیسی: Merge): قابلیت گروهبندی کردن چندین جدول مایآیسم مشابه و ارجاع به آنها به عنوان یک جدول را میدهد.[۸]
- آرشیو (به انگلیسی: Archive): برای نگهداری دادههای آرشیوی که به ندرت به آنها ارجاع میشود.[۸]
- متحد (به انگلیسی: Federated): برای پیوند زدن چندین سرور مایاسکیوال مجزا برای ایجاد یک پایگاهداده منطقی از چندین سرور فیزیکی.[۸]
- سیاسوی (به انگلیسی: CSV): داده را در فایلهای متنی با قالب مقادیر جداشده با کاما ذخیرهسازی میکند.[۸]
- سیاهچاله (به انگلیسی: Blackhole): ورودی داده را قبول میکند، ولی آن را ذخیره نمیکند.[۸]
برنامههای ذخیرهشده
در مایاسکیوال هر برنامه ذخیرهشده شامل یک بدنه است که از عبارات اسکیوال تشکیل شده است.[۱۱] برنامههای ذخیرهشده میتوانند مقادیر خروجی داشته باشند (ایجاد شده توسط CREATE PROCEDURE) یا نداشته باشند (ایجاد شده توسط CREATE FUNCTION). اگر یک برنامه خروجی داشته باشد، از آن میتوان در پرسوجوی SELECT استفاده کرد.
کاربران سرشناس
از کاربران سرشناس مایاسکیوال به موارد زیر میتوان اشاره کرد:[۱۲][۱۳]
تمرینات مصور SQL
از ویکیپدیا، دانشنامهٔ آزاد
در مدل رابطهای دادهها، زبان ساختارمند پرسشها یا اسکیوال یا سیکوال (Structured Query Language – SQL) زبانی است سطح بالا مبتنی بر زبان سطح پایین و ریاضی جبر رابطهای که برای ایجاد، تغییر، و بازیابی دادهها و نیز عملیات بر روی آنها بهکار میرود.
زبان SQL به سمت مدل شیگرا – رابطهای نیز پیشرفت کردهاست.
محتویات
تاریخچه
منشا اصلی سیکوال به مقالهٔ سال ۱۹۷۰ ادگار کاد تحت عنوان «مدل رابطهای دادهها برای بانکهای بزرگ دادههای اشتراکی»[۱] باز میگردد. در دههٔ ۷۰ گروهی از شرکت آیبیام در شهر سان خوزه بر روی سیستم پایگاه دادههای سیستم آر بدون توجه به این مقاله کار میکردند و زبان SEQUEL را به منظور عملیات و بازیابی اطلاعات ذخیره شده در سیستم آر ایجاد کردند. اگر چه اسکیوال ناشی از تلاشهای کاد بود اما دونالد چامبرلین و ریموند بویس به عنوان طراحان زبان SEQUEL شناخته میشوند
سمینارهایی در زمینه فناوری بانک اطلاعاتی و مباحثاتی در مورد مزایای مدل رابطهای جدید برگزار گردید. تا ۱۹۷۶ مشخص بود که آیبیام که طرفدار جدی فناوری بانک اطلاعاتی رابطهای بوده، توجه زیادی نسبت به زبان سیکوال دارد. تبلیغات در زمینه سیستم آر باعث جذب گروهی از مهندسین در منلو پارک در کالیفرنیا گردید. این گروه به این نتیجه رسیدند که تحقیقات آیبیام منجر به یک بازار تجاری برای بانکهای اطلاعاتی رابطهای خواهد گردید.
در ۱۹۷۷ این گروه شرکتی بنام اینک (Inc) و رلیشنال سافتویر (Relational Software) تأسیس نمودند تا یک سامانه مدیریت پایگاههای داده رابطهای بر اساس سیکوال بسازند. محصولی بنام اوراکل در ۱۹۷۹ عرضه گردید، و اولین سامانه مدیریت پایگاه داده رابطهای بوجود آمد. به این ترتیب محصول اوراکل باعث گردید اولین محصول آیبیام برای مدت ۲ سال در بازار دچار رکود باشد. این محصول بر روی مینی کامپیوترهای وکس دیجیتال (VAx Digital) اجرا میشد که خیلی از کامپیوترهای بزرگ آیبیام ارزانتر بودند.
امروزه این شرکت با نام اوراکل اولین فروشنده سیستمهای مدیریت بانک اطلاعاتی رابطهای است. استادان آزمایشگاههای کامپیوتر در دانشگاه برکلی کالیفرنیا نیز در نیمه دهه ۱۹۷۰ مشغول تحقیق در زمینه بانکهای اطلاعاتی رابطهای بودن (مانند تیم تحقیق آیبیام)، گروه فوق نیز یک نمونه ازسامانه مدیریت پایگاه داده رابطهای ایجاد نمودند و سیستم خود را اینگرس (Ingres) نام نهادند.
پروژه اینگرس شامل یک زبان پرسوجو بنام QUEL بود، اگر چه از سیکوال خیلی ساخت یافته تر بود، اما شباهت آن به زبان انگلیسی کمتر بود.
در حالیکه اوراکل و اینگرسبرای ارائه محصولات تجاری در رقابت بودند، پروژه سیستم آر شرکت آیبیام در تلاش بودهاست که یک محصو ل تجاری با نام SQL/Data system (یا SQL/DS) عرضه نماید. آیبیام موجودیت SQL/DS را در ۱۹۸۱ اعلام، و در ۱۹۸۲ شروع به عرضه محصول خود نمود. در سال ۱۹۸۳ آیبیام یک نسخه SQL/DS را برای VM/CMS (سیستمعاملی که در کامپیوتر بزرگ آیبیام غالباً استفاده شده بود)، اعلام نمود.
همچنین در سال ۱۹۸۳ شرکت آیبیام، محصول دیبیتو را معرفی نمود که یک سامانه مدیریت پایگاه داده رابطهای برای سیستمهای بزرگ آن شرکت بود. دیبیتو تحت سیستمعامل ویاماس (سیستمعامل مراکز کامپیوتری بزرگ) اجرا میشد. اولین نسخه دیبیتو در ۱۹۸۵ عرضه گردید، و مسئولین آیبیام اعلام نمودند که این محصول یک برنامه استراتژیک برای تکنولوژی نرمافزاری آیبیام میباشد. از آن تاریخ تاکنون دیبیتو سامانه مدیریت پایگاه داده رابطهای شاخصی بوده و آیبیام از آن حمایت نموده و زبان «سیکوال دیبیتو» استاندارد عملی زبان بانک اطلاعاتی بودهاست.
استانداردها
سیکوال استاندارد (ANSI (American National Standards Institute را در سال ۱۹۸۶ و ISO (International Organization for Standardization) را در سال ۱۹۸۷ اتخاذ نمود. استانداردهای مختلفی از اسکیوال تاکنون عرضه شده که در جدول زیر بیان میکنیم:
- اسکیوال-۸۷
- اسکیوال-۸۹
- اسکیوال-۹۲
- اسکیوال:۱۹۹۹
- اسکیوال:۲۰۰۳
- اسکیوال:۲۰۰۵
- اسکیوال:۲۰۰۸
- اسکیوال:۲۰۱۱
حوزه و وسعت
بسیاری از اصطلاحات زبان اسکیوال تحت استاندارد بینالمللی بوده، و در نتیجه، از آنها شبیه بقیه زبانهای استاندارد مثل محصولات شرکت اوراکل PL/SQL[۲] یا Sybase و SQL PL (مدل رویهای) از شرکت آیبیام میباشد.
اسکیوال برای کارهای ویژه و محدودی (گزارش گیری از دادهها در پایگاه دادههای رابطهای) طراحی شدهاست. بر خلاف زبانهای دستوری مثل بیسیک یا سی که برای حل مسائل طراحی شده، SQL زبانی بر پایه اعلان است. زبانهای توسعه یافتهای مثل PL/SQL به دنبال کامل کردن زبان به هدف ایجاد زبان برنامه نویسی با حفظ مزیتهای SQL میباشد. شیوه دیگر کار این است که به کدهای زبان برنامه نویسی اجازه دسترسی به پایگاه داده به کمک دستورات SQL داده شود مثلاً PostgreSQL به توابعش اجازه میدهد که درون کدهای Perl، Tcl و C نوشته شوند. گاهی به شوخی گفته میشود که SQL نه ساخت یافتهاست، نه محدود به گزارش گیریها و اصلاً یک زبان نیست!
واژههای کلیدی
واژههای کلیدی اسکیوال به گروههای مختلفی تقسیم میگردد، در زیر به برخی از آنها اشاره میکنیم آنهایی که آشنا تر هستند را تنها با یک مثال شرح میدهیم:
- دستور بازیابی دادهها: SELECT
- دستورات عملیات دادهها: INSERT،UPDATE،MERGE،TRUNCAT، DELETE
- دستورات تراکنش دادهها: COMMIT و ROLLBACK
- دستورات تعریف دادهها: CREATE وDROP
- دستورات کنترل دادهها: GRANT و REVOKE
معایب اس کیوال
در کاربرد عملی از SQL معایب زیر بر آن وارد است:
- دستورات نحوی(syntax) آن تا حدی مشکل است به نحوی که گاهی آنرا با COBOL مقایسه میکنند.
- شیوه استانداردی را برای دستورات چند تکه بزرگ ندارد.
- نمونههای مختلف آنها که توسط فروشندگان مختلف ارائه میشود گاهی با هم سازگاری ندارد.
- وجود برخی دستورات بلند
- اشتباه گرفتن وظیفههای دستورهایی مثل UPDATE و INSERT.
محاسن اسکیوال
ولی سیکوال دارای محاسنی هم هست:
- سازگاری با اکثر زبانهای دستوری
- سازگاری با اکثر پایگاههای داده مثل SQL Server,Oracle و حتی MS ACCESS
- پس از اینکه برنامه نویس این زبان را درک کرد استفاده از آن بسیار سادهاست
- کاربرد در زبانهای جدید و پیشرفته
زبانهای مشابه اسکیوال
- IBM BS۱۲ (Business System ۱۲)
- Tutorial D
- TQL Proposal
- HQL (بر پایه ابزار JAVA
- OSQL(برپایه ابزارهای شی گرای PHP برای عملیات و گزارش گیری)
- Quel (در سال ۱۹۷۴ در دانشگاه برکلی ایجاد شد)
- ODMG (Object Data Management Group)
- linQ
مفاهیم و تمرینات مصور شی گرایی
از ویکیپدیا، دانشنامهٔ آزاد
برنامهنویسی شیءگرا
(به انگلیسی Object-Oriented Programming مخفف:OOP) یک شیوه برنامه نویسی است که ساختار یا بلوک اصلی اجزای آن، شیها میباشند. در واقع در این شیوه برنامه نویسی، برنامه به شیء گرایش پیدا میکند. به این معنا که دادهها و توابعی که قرار است بر روی این دادهها عمل کنند، تا حد امکان در قالبی به نام شی در کنار یکدیگر قرار گرفته، جمعبندی شده و یک واحد (شی) را تشکیل داده و نسبت به محیط بیرونِ خود، کپسوله میشوند و از این طریق، توابع بیگانهٔ خارج از آن شی، دیگر امکان ایجاد تغییر در دادههای درون آن شی را ندارند. به طور مثال حساب بانکی شما که شامل مشخصات فردی شما و میزان سپردهٔ شما در بانک است، تشکیل یک شی را میدهند و به دلیل دارا بودن ویژگی کپسوله، امکان دستکاری در میزان سپرده یا مشخصات شما، توسط دیگران وجود ندارد.[۱] از دیگر ویژگیهای برنامه نویسی شی گرا، پیچیدگی کم، هزینه کم، امکان گسترش سریع برنامه با خطای کمتر نسبت به سایر پارادایمهای برنامه نویسی است.
فلسفه یی که منجر به شکل گیری ی زبانهای شی گرا شد، عبارت بود از این واقعیت که نحوهٔ عملکرد مغز و شیوهٔ دریافت اطلاعات از محیط پیرامون و پردازش آن اطلاعات (اندیشیدن)، شیوه یی شی گراست، از همین روی میبایستی زبانی تعریف میشد که همین شیوه را مبنای کار خود قرار داده و بازتولید میکرد؛ و دقیقاً به همان شکل که اشیا در جهان خارج، دارای هویت و کارکرد مشخص و یگانه برای خود هستند و در عین حال با دیگر اشیا در ارتباطی تنگاتنگ و مستقیم اند، در زبانهای برنامه نویسی نیز میبایستی این اصول کلی برقرار میشد.[۲] تا به این شکل، برنامه نویس بتواند با بهرهگیری از زبانی که به روش اندیشیدنش، نزدیکی بیشتری دارد، شیهای مختلفی را تعریف نموده، این شیها را در ارتباط با یکدیگر قرار داده و از شیهای پویای تولید شده برای حل مساله ی پیش روی استفاده نماید. امروزه اکثر زبانهای دستوری برنامه نویسی از فنون شیءگرایی پشتیبانی میکنند. زبانهایی مانند جاوا، سی++، سی شارپ، دلفی از جمله زبانهای شیءگرا هستند. حتی بسیاری از زبانهای روال گونه که ساختار برنامهها در آنها بلوکهایی با نام پروسیجر است امروزه از فنون شیءگرایی نیز پشتبانی میکنند. زبانهای سی++ و پیاچپی از این جمله هستند. هر شیء یک سری خصوصیت و قابلیت دارد، که اصطلاحاً Properties و Operation خوانده میشوند. در این پارادایم برنامه نویسی، دید برنامه نویس به سیستم دید شخصی است که سعی مینماید با پیدا کردن اشیاء مختلف در سیستم و برقراری ارتباط بین آنها سیستم را تولید نماید. (مفهوم مدیریت دیداری)
کلاس
کلاس نوع خاصی از آرایه است که امکان ذخیره و جمعبندی تعداد زیادی المان را (که شامل دادهها و توابع هستند) برای یک شی جدید فراهم آورده و تحت یک نام مشترک ذخیره میکند. اما بر خلاف آرایه که تنها قادر به ذخیرهٔ دادههایی هم جنس است، کلاس میتواند دادههایی از جنسهای مختلف را ذخیره نماید.[۳] به طور مثال در نظر بگیرید که میخواهیم تاریخ ۱۳ نوامبر ۲۰۰۶ را که تشکیل شده از روز، ماه و سال است مورد استفاده قرار دهیم. برای این منظور سه نوع متغیر متفاوت مورد نیاز است:
وراثت
مقالهٔ اصلی: وراثت (برنامهنویسی شیگرا)
وراثت یا ارث بری (Inheritance) از مفاهیم اساسی برنامه نویسی شیءگراست. هر شیء یک نمونه از یک کلاس است و هر کلاس میتواند از کلاس یا کلاسهای دیگری مشتق شده باشد (خواص متدها یا رویدادهای کلاسهای دیگر را به ارث ببرد). در یک مثال ساده میتوان اتومبیلی را در نظر گرفت که برای جلوگیری از بازنویسی خواص عمومی اتومبیل شامل: چهار چرخ، متدهای حرکت چرخ، متد چرخاندن فرمان، فرمان، بدنه، در و غیره، میتوان یک کلاس پایه از اتومبیل ایجاد کرد سپس مثلاً برای اتومبیل سیتروئن مدل C۵ یک کلاس جدید ایجاد کرده که خواص، متدها و رویدادهای عمومی اتومبیل را داشته باشد و فقط برای خواص، متدها و رویدادهای جدید این اتومبیل کد نوشته شود. این ویژگی باعث صرفهجویی در نوشتن کد و تا حدودی تضمین صحت کد موجود میشود. به عنوان مثال اگر کلاس پایه مشکلی داشته باشد فقط کافی است کلاس پایه تغییر داده شود و در تمامی کلاسهایی که از این کلاس پایه ویژگیای ا به ارث بردهاند این تغییر اعمال خواهد شد.
مخفیسازی
مقالهٔ اصلی: کپسوله سازی (علم رایانه)
کپسوله سازی، مخفیسازی (Encapsulation)، یا لفافهبندی، به این مفهوم اشاره دارد که باید بعضی خصوصیات یا رفتارهای شیء را از دید دیگران پنهان کرد. فرض کنید شما به عنوان یک راننده میخواهید اتومبیل شخصی تان را روشن کنید و به محل کارتان عزیمت کنید سوییچ را بر میدارید، استارت میزنید و با فشار آوردن به پدالهای گاز و ترمز و چرخش فرمان و … به محل کارتان خواهید رسید. در طول این مسیر در اتومبیل شما به عنوان یک شیء اعمال مختلفی در حال انجام بود. مثلاً لنت ترمز به دیسک چرخ برخورد میکرد و باعث کم شدن سرعت میشد یا شمعها شروع به جرقه زدن در زمانی بخصوصی میکردند. حال فرض کنید که عمل مخفی سازی وجود نداشت و شما مجبور بودید که جرقه زدن شمعها را کنترل میکردید و به سیستم سوخت رسانی در موقع لزوم دستور میدادید که سوخت را بداخل سیلندرها ارسال کند و… یا هیچگاه به مقصد نمیرسیدید! یا سالم نمیرسیدید!
عمل مخفی سازی باعث میشود که اشیاء بدون آنکه از چگونگی کارکرد یکدیگر اطلاع داشته باشند با هم کار کنند.
چندشکلی
مقالهٔ اصلی: چندشکلی (علوم رایانه)
چند ریختی(Polymorphism) چند ریختی، کمیتی است که به یک رابط امکان میدهد تا از عملیات یکسانی در قالب یک کلاس عمومی استفاده کند. عمل خاص کلاس را ذات حقیقی شیء تعیین میکند. مثال سادهای از چند ریختی، فرمان اتومبیل است. عمل فرمان اتومبیل برای تمام اتومبیلها بدون توجه به ساز و کاری که دارند، یکسان است. فرمان برای اتومبیل که به طور مکانیکی کار میکند یا با نیروی برق یا هر چیز دیگری، عمل یکسانی را انجام میدهد؛ بنابراین، پس از اینکه شما عملکرد فرمان را یاد گرفتید، میتوانید فرمان هر اتومبیلی را کنترل کنید. همین هدف در برنامه نویسی نیز اعمال میشود. به طور کلی، مفهوم چند ریختی، اغلب با عبارت ((یک رابط، چندین روش))بیان میشود. این بدین معنی است که امکان طراحی رابط عمومی برای گروهی از عملیات مرتبط وجود دارد. چند ریختی یا چندشکلی (Polymorphism) به این معنا است که اشیاء میتوانند در موقعیتهای مختلف، رفتارهای متفاوتی بروز دهند. مثلاً یک تابع در صورتی که بر روی نمونهای از کلاس آ فراخوانی شود، رفتار ب را بروز دهد در حالی که اگر بر روی کلاس ج (که فرزند کلاس آ است) فراخوانی شود، رفتاری متفاوت انجام دهد.
انتزاع / تجرید
مقالهٔ اصلی: تجرید (رایانه)
به این معنا است که بخشی از یک موجودیّت یک مفهوم را که میان همهٔ وارثان مشترک است، پیش تعریف کنیم. این توانایی منجر به داشتن نگاه مشابه به موجودیّتهای مشابه میگردد.
یک مثال کاربردی
در اطراف ما اشیاء زیادی وجود دارد و میتوان تمام مفاهیم موجود در طبیعت را با اشیاء تقلیل داد. مثلاً یک ماشین باربری. این ماشین یک سری خصوصیات دارد: چهار چرخ، یک پدال ترمز، یک پدال گاز، یک فرمان و یک محل بزرگ برای قرار دادن اشیاء در آن و… این ماشین در صورتی که ما پدال گاز آن را فشار دهیم، حرکت میکند. در صورتی که فرمان آن را بچرخانیم تغییر مسیر میدهد. پس این شیء علاوه بر یک سری خصوصیات، یک سری رفتار مشخص هم به ما نشان میدهد؛ ولی فقط این یک ماشین نیست که این کار را انجام میدهد. تمامی ماشینها این کارها را انجام میدهند. پس میتوانیم این ماشین را ‘تعریف’ کنیم و بگوییم:
ماشین باربری وسیلهای است که چهار چرخ، یک گاز، یک ترمز، یک فرمان و یک محل برای حمل بار دارد و اگر پدال گاز آن فشار داده شود حرکت میکند. این تعریف این ماشین است ولی خود آن نیست. هر زمانی چنین ماشینی بخواهیم به کارخانه تولید آن میرویم و از فروشندگان میخواهیم تا با توجه به این تعریف یک ماشین به ما بدهند.
مفاهیم فوق در زبانهای برنامه نویسی شیءگرا گنجانده شدهاند. در این زبانها، اشیاء زیادی از پیش وجود دارند که برنامهنویسان میتوانند از آنها استفاده کنند.
ارتباط اشیاء
مجدداً به مثال ماشین باربری بر میگردیم و این بار، یک ماشین سواری را تعریف میکنیم. ماشین سواری شیئی است که چهار چرخ، یک ترمز، یک پدال گاز و یک صندوق عقب دارد. این تعریف به تعریف ماشین باربری بسیار شبیهاست. به عبارت دیگر ما به یک تعریف جدید میرسیم: خودرو. خودرو وسیلهای است که چهار چرخ، یک ترمز، یک پدال گاز دارد. پس از این به بعد تعریف ماشین باربری و ماشین سواری خیلی سادهتر میشود.
ماشین باربری، خودرویی است که محلی برای قرار دادن بار داشته باشد و ماشین سواری خودروییاست که صندوق عقب داشته باشد.
- اگر کسی به درب کارخانه مراجعه کند و بگوید که ‘خودرو’ میخواهد، چیزی دریافت نمیکند. خودرو یک تعریف انتزاعی است، برای تعریف خودرو شیء وجود ندارد پس مشتری تنها میتواتند ماشین باربری یا ماشین سواری بخواهد.
- کارواش را در نظر میگیریم. این کارواش خودرو را تمیز میکند و دیگر به طور جزئی عنوان نمیکند که کدام نوع خودرو را تمیز میکند. به عبارت دیگر نوع خودرو برای کارواش مهم نیست.
- وقتی شخصی قصد اجاره خودرویی دارد، و میخواهد جنسی را حمل کند در هنگام تماس با متصدی کرایه ماشین میگوید: «اگر خودرو شمااز نوع باربری است، برای من ارسال کنید»، ولی اگر قصد جابجا شدن را دارد میگوید: «برای من یک ماشین سواری بفرستید.»
در زبانهای برنامه نویسی شیءگرا نیز اشیاء مختلفی وجود دارند که تعریف آنها تکمیل کننده یکدیگر است، به عبارت دیگر اشیا از یکدیگر ارث بری میکنند. برخی از تعاریف کاملاً عام است و نمیتوان از آنها نمونه شیئی ساخت و تنها تعریف هستند. به این تعاریف Interface گفته میشود.
مدیریت پیچیدگی
مقالهٔ اصلی: مدیریت پیچیدگی
اعمال شیوههای مدیریتی با محوریت اشیاء در مطالعه، طراحی، ایجاد، و اجراء پروژههای مهندسی نرمافزار و مهندسی دانش.
طراحی و تحلیل الگوریتمهای برنامه نویسی
الگوریتم
الگوریتم (نسبت: الگوریتمی، خوارزمیک)[۱] یا خوارزمی[۲] مجموعهای متناهی از دستورالعملها است، که به ترتیب خاصی اجرا میشوند و مسئلهای را حل میکنند. به عبارت دیگر یک الگوریتم، روشی گام به گام برای حل مسئله است. شیوه محاسبه معدل در مدرسه، یکی از نمونههای الگوریتم است.
محتویات
خصوصیات یک الگوریتم
تمام الگوریتمها باید شرایط و معیارهای زیر را دارا باشند:[۳]
- ورودی:
یک الگوریتم باید هیچ یا چندین پارامتر را به عنوان ورودی بپذیرد؛
- خروجی:
الگوریتم بایستی حداقل یک کمیت به عنوان خروجی (نتیجه عملیات) تولید کند؛
- قطعیت:
دستورهای الگوریتم باید با زبانی دقیق، و بیابهام بیان شوند. هر دستورالعمل نیز باید انجامپذیر باشد. دستورهایی نظیر «مقدار ۶ یا ۷ را به x اضافه کنید» یا «حاصل تقسیم پنج بر صفر را محاسبه کنید» مجاز نیستند؛ چرا که در مورد مثال اول، معلوم نیست که بالاخره چه عددی باید انتخاب شود، و در خصوص مثال دوم هم تقسیم بر صفر در ریاضیات تعریف نشدهاست.
- محدودیت:
الگوریتم باید دارای شروع و پایان مشخصی باشد، به نحوی که اگر دستورهای آن را دنبال کنیم، برای تمامی حالات، الگوریتم پس از طی مراحل شمارا و متناهی خاتمه یابد. به علاوه، زمان لازم برای خاتمه الگوریتم هم باید به گونهای معقول، کوتاه باشد.
ریشه واژهٔ الگوریتم
واژه الگوریتم از نام ریاضیدان و ستارهشناس و جغرافیدان نامی ایرانی، ابوجعفر محمد بن موسی خوارزمی (الخوارزمی)، گرفته شده است، که در خوارزم زاده شد و در دانشگاه «بیت الحکمه» بغداد به اوج شهرت رسید. خوارزم یکی از شهرهای «ایران بزرگ» بود، که امروزه در ازبکستان واقع شده است و خیوه نام دارد. رسالهای که خوارزمی در قرن ۹ میلادی به عربی نگاشته بود، در قرن ۱۲ به لاتین با نام “Algoritmi de numero Indorum” ترجمه شد؛ یعنی “[کتابی بدست] «الگوریتمی» در مورد اعداد هندی”، که «الگوریتمی» نام الخوارزمی بود که مترجم در تبدیل به لاتین نام وی را جلوی نام اصلی کتاب (در مورد اعداد هندی) آورده بود. در قرن ۱۳ میلادی واژه الگوریسموس(algorismus) به معنای «سیستم شمارش عربی (دهدهی)» (یعنی اعداد ۱ تا ۹ به علاوه صفر، و نیز مفهوم اعشار) بود؛ که هنوز هم یکی از معانی واژه الگوریسم(algorism) است. معنای دیگر الگوریسم «حساب کردن با کمک اعداد عربی» است؛ یعنی فن انجام أعمال حسابی پایه، مانند جمع و ضرب، با قرار دادن اعداد در زیر هم و إعمال قواعدی خاص، که جایگزین به کارگیری اعداد رومی و استفاده از چرتکه شد. حتی روش انجام دستی تقسیم و جذر گرفتن (رادیکال) هم الگوریسم نامیده میشود. در قرن ۱۹ این کلمه در فرانسوی به algorithme تغییر شکل پیدا کرد، البته معنایش ثابت ماند. طولی نکشید که این کلمه به شکل algorithm وارد زبان انگلیسی شد؛ ولی فقط در اواخر قرن ۱۹ میلادی بود که معنای عامتر امروزیاش را یافت، و به «هر مجموعه قواعدی برای انجام یک رویه محاسباتی یا روال رایانهای به کار رود» الگوریتم گفته شد.
تبدیل نام الخوارزمی به الگوریسم و سپس الگوریتم احتمالاً تحت تأثیر واژه یونانی arithmos (به معنای عدد) و arithmetic (به معنای محاسباتی) بوده است. برخی منابع هم کلمه لگاریتم را هم در تبدیل الگوریسم و الگوریتم بی تأثیر ندانستهاند.[۴]
نقش الگوریتمها در علوم رایانه
در علوم رایانه، یک الگوریتم را یک روال محاسباتی خوشتعریف میدانند، که مقدار یا مجموعهای از مقادیر را به عنوان ورودی (Input) دریافت کرده و پس از طی چند گام محاسباتی، ورودی را به خروجی (Output) تبدیل میکند. بجز این، الگوریتم را ابزاری برای حل مسائل محاسباتی نیز تعریف کردهاند.[۵] ساخت و طراحی الگوریتم مناسب در مرکز فعالیتهای برنامهسازی رایانه قرار دارد. یک برنامه رایانهای، بیان یک یا چند الگوریتم با یک زبان برنامهنویسی است.
مفهوم الگوریتم
مفهوم الگوریتم را معمولاً با تشبیه به دستور آشپزی توضیح میدهند. مثلاً اگر بخواهیم آبگوشت درست کنیم (عمل مورد نظر) با فرض اینکه مواد خام را داریم (حالت اولیه) مراحل مشخصی را باید طبق دستور آشپزی طی کنیم (دستورالعملها) تا به آبگوشت آماده (حالت پایانی) برسیم. البته الگوریتمها معمولاً پیچیدهتر از این هستند.
الگوریتم گاه دارای مراحلی است که تکرار میشود (در مثال آبگوشت مثلاً چند بار باید نمک زد یا آب اضافه کرد) و یا در مرحلهای نیازمند تصمیمگیری است (اگر نمک کافی است دیگر نمک نمیزنیم، اگر کافی نیست نمک میزنیم).
اگر الگوریتم برای عمل مورد نظر مناسب نباشد و یا غلط باشد به نتیجه مورد نظر نمیرسیم. مثلاً اگر الگوریتم آبگوشت را با مواد اولیه کباب انجام دهیم واضح است که به آبگوشت نمیرسیم.
باید بدانیم برای هر الگوریتم تعریف متغیرها و طراحی مرحله به مرحله بسیار مهم است. زیرا الگوریتم باید بداند بر روی چه متغیرهایی، چه اعمالی را انجام دهد و نتیجه را در غالب چه متغیرها یا پارامترهایی نشان دهد.
مقدمهای بر تحلیل الگوریتم
معمولاً برای حل یک مسئله، روشها و الگوریتمهای گوناگونی وجود دارند؛ یک الگوریتم ممکن است عمل مورد نظر را با دستورهای مختلف در مدت زمان و یا کار کمتر یا بیشتری نسبت به الگوریتم دیگر انجام دهد. به همین دلیل، انتخاب الگوریتم مناسب و کارا اهمیت زیادی در موفق بودن و کارایی برنامه رایانهای دارد. الگوریتمها به عنوان یک فناوری مطرح هستند[۵] و دانشمندان آنها را طراحی، تحلیل، و مطالعه میکنند. مطالعه الگوریتمها زمینههای متعددی را در بر میگیرد. در زیر به چند نمونه اشاره میکنیم که میتوان آنها را چرخه حیات یک الگوریتم نامید.
الف) طراحی الگوریتمها: روشهای مختلفی برای طراحی الگوریتمها وجود دارد که عبارتند از:روشهای تقسیم و غلبه، روشهای حریصانه، روشهای برنامه نویسی پویا، روشهای پسگرد و روشهای انشعاب و تحدید.
ب) معتبر سازی یا اثبات درستی الگوریتمها:بعد از طراحی باید اثبات شود که الگوریتم مزبور درست است. الگوریتمی درست است که به ازای هر ورودی مناسب خروجی صحیحی بدهد. اثبات درستی الگوریتمها به اثبات قضایا در ریاضی میماند و مرحله بسیار مهمی در زمینه مطالعه الگوریتمها است
پ) تحلیل الگوریتمها (تحلیل مقدم، ارزیابی کارایی الگوریتمها):یک الگوریتم در زمان اجرا از cpuی رایانه برای اجرای دستورالعملها و از حافظه برای ذخیرهسازی برنامه و دادهها استفاده میکند تحلیل یک الگوریتم مشخص میکند که الگوریتم در زمان اجرا چه مدت زمان از cpuبرای اجرای دستورالعمل (پیچیدگی زمانی) و چه مقدار از حافظه (چه اصلی و چه جانبی) برای ذخیرهسازی برنامه و دادهها (پیچیدگی فضایی) نیاز دارد.
ت) پیادهسازی الگوریتمها:پیادهسازی یک الگوریتم نوشتن آن به زبان برنامه نویسی خاص است که معمولاً بعد از تحلیل مقدم آن صورت میگیرد و نام برنامه به آن اطلاق میشود.
ث) تست برنامه:تست یک برنامه شامل۱:اشکال زدایی و ۲:تحلیل مؤخر (اندازهگیری کارایی) است. اندازهگیری کارایی عبارت است از فرایند اجرای الگوریتم صحیح بر روی دادههای نمونه گیری شده برای به دست آوردن زمان و حافظه مورد نیاز توسط کامپایلر. زمان اجرای یک الگوریتم به پارامترهای مختلفی بستگی دارد که از جمله میتوان به نوع دستورالعملها (دستورالعملهای جمع، ضرب، نوشتن، خواندن، شرطی و…)کامپایلر مورد استفاده، زبان برنامه نویسی، سختافزار به کار رفته و پارامتری مثل nکه میتواند معرف تعداد ورودیها و خروجیها و یا هر دو باشد اشاره کرد
تحلیل الگوریتمها رشتهای است که به بررسی کارایی الگوریتمها میپردازد. تحلیل الگوریتمها یعنی پیشبینی منابع مورد نیاز برای اجرای یک الگوریتم، همچون: حافظه، پهنایباند ارتباطی، سختافزار، و از همه مهمتر، زمان.[۶] کارایی یا پیچیدگی هر الگوریتم را با تابعی نشان میدهند که تعداد مراحل لازم برای اجرای الگوریتم را برحسب طول داده ورودی، یا میزان محلهای لازم حافظه را بر حسب طول داده ورودی نشان میدهد.
جنبه حقوقی
در بعضی کشورها، مثل آمریکا اگر تعبیه فیزیکی الگوریتمی ممکن باشد (برای مثال، یک الگوریتم ضرب که میشود آن را در واحد محاسبهٔ یک ریز پردازنده تعبیه کرد) میشود آن الگوریتم را به ثبت رساند.
جستارهای وابسته
تمرینهای تصویری JavaScript
تاریخچه محتویاتجاوااسکریپت (به انگلیسی: JavaScript) زبان برنامهنویسی اسکریپت مبتنی بر اشیاء است که توسط NetScape تولید شدهاست. این زبان، یک زبان شیگرا[۱] است که بر اساس استاندارد ECMA-262 Edition 3 نوشته شدهاست.
علیرغم اشتباه عمومی، زبان جاوااسکریت با زبان جاوا ارتباطی ندارد، اگر چه ساختار این زبان به سی پلاس پلاس(++C) و جاوا شباهت دارد؛ که این امر برای یادگیری آسان در نظر گرفته شدهاست. از همینرو دستورهای متداول مانند if, for,try..catch ,”while” و… در این زبان هم یافت میگردند.
این زبان میتواند هم به صورت ساخت یافته و هم به صورت شی گرا مورد استفاده قرار گیرد. در این زبان اشیاء با اضافه شدن متدها و خصوصیات پویا به اشیاء خالی ساخته میشوند، بر خلاف جاوا. بعد از ساخته شدن یک شی به روش فوق، این شی میتواند به عنوان نمونهای برای ساخته شدن اشیاء مشابه مورد استفاده قرار گیرد.
به علت این قابلیت زبان جاوااسکریپت برای ساختن نمونه از سیستم مناسب میباشد.
کاربرد گسترده این زبان در سایتها و صفحات اینترنتی میباشد و به کمک این زبان میتوان به اشیاء داخل صفحات HTML دسترسی پیدا کرد و آنها را تغییر داد. به همین علت برای پویا نمایی در سمت کاربر، از این زبان استفاده میشود.
JavaScript به صورت «جاواسکریپت» خوانده میشود، ولی در فارسی به صورت «جاوااسکریپت» ترجمه میشود و اگر به صورت «جاوا اسکریپت» ترجمه شود اشتباه است چون دو کلمه جدا از هم نیست و اگر به صورت دو کلمه جدا نوشته شود خطلاهای نگارشی ایجاد میشود، به طور مثال ممکن است کلمه جاوا در انتهای خط و کلمه اسکریپت در ابتدای خط بعدی نوشته شود.
جاوااسکریپت را در ابتدا شخصی به نام برندان ایچ در شرکت نتاسکیپ با نام Mocha طراحی نمود. این نام بعداً به LiveScript و نهایتاً به جاوااسکریپت تغییر یافت.[۲] این تغییر نام تقریباً با افزوده شدن پشتیبانی از جاوا در مرورگر وب Netscape Navigator همزمانی دارد. اولین نسخهٔ جاوااسکریپت در نسخه ۲٫۰B3 این مرورگر در دسامبر ۱۹۹۵ معرفی و عرضه شد. این نام گذاری منجر به سردرگمیهای زیادی شده و این ابهام را ایجاد میکند که جاوااسکریپت با جاوا مرتبط است در حالی که این طور نیست. عدهٔ زیادی این کار را یک ترفند تجاری برای به دست آوردن بخشی از بازار جاوا که در آن موقع زبان جدید مطرح برای برنامهنویسی تحت وب بود میدانند.[۳][۴]
به دلیل موفقیت عمدهٔ جاوااسکریپت در نقش زبان نویسهای سمت کاربر (client side scripting language) برای صفحات وب، مایکروسافت یک نسخه سازگار از این زبان را ایجاد کرد و به علت مشکلات حقوقی آن را جی اسکریپت نامید. این زبان در نسخه ۳٫۰ از مرورگر اینترنت اکسپلورر و در اوت ۱۹۹۶ داده شد. تفاوتهای این دو زبان به حدی جزیی است که اغلب جی اسکریپت و جاوااسکریپت به جای هم به کار میروند. هرچند که مایکروسافت در اینجا چند ده دلیل برای تفاوت جی اسکریپت با استاندارد ECMA مطرح میکند.
نتاسکیپ جاوااسکریپت را به سازمان Ecma International برای استاندارد سازی ارسال کردهاست و نتیجه نسخهٔ استاندارد شدهای به نام ECMA Script است.[۵]
جاوااسکریپت به یکی از زبانهای برنامهنویسی پر طرفدار در وب تبدیل شدهاست. هر چند ابتدا بسیاری از برنامه نویسان حرفهای زبان را کم ارزش تلقی میکردند چون مخاطبین آن نویسندگان صفحات وب و آماتورهای این چنینی بودند.[۶] ظهور ایجکس بار دیگر جاوااسکریپت را در معرض توجه قرار داد و برنامه نویسان حرفهای بیشتری را به خود جذب نمود. نتیجه ازدیاد فریمورک و کتابخانههای جامعی در این زمینه، بهبود شیوههای رایج برنامهنویسی در جاوااسکریپت و افزایش کاربرد جاوااسکریپت خارج از وب است.[نیازمند منبع]
امکانات زبانی
امکانات زیر (در صورت قید نشدن) همگی مطابق استاندارد ECMA Script میباشند.
فریم ورک های مبتنی برجاوا اسکریپت
فریم ورک های زیادی برای این زبان درست شده است مانند جی کوئری و آنگولار جی اس
زبان امری و ساخت یافته
جاوااسکریپت از تمامی نحو ساختاری زبان C پشتیبانی میکند. مانند گزاره (if و switch و حلقههای while و…) یک مورد استثناء تعیین حوزهٔ متغیرهاست: تعریف حوزه در حد block در جاوااسکریپت وجود ندارد. هر چند جاوااسکریپت ۱٫۷ با کلمهٔ کلیدی let این نوع حوزه دهی را امکانپذیر میسازد. مانند c در جاوااسکریپت بین عبارت و گزاره تفاوت وجود دارد.
پویایی
؛ تایپ دهی پویا: مانند اکثر زبانهای نویسهای تایپ به مقدارها منسوب میگردد و نه به متغیرها. برای مثال متغیر x ممکن است به یک عدد وابسته سازی شود، و بعداً به یک رشته. جاوااسکریپت برای تعیین تایپ شی راههای مختلفی از جمله تایپ دهی اردکی (duck typing) را دارد.[۷]
؛ تایپ دهی ضعیف: زبان جاوااسکریپت از نظر تایپ دهی ضعیف به شمار میآید و در آن نتیجهٔ عملیاتی مانند ۵ + “۳۷”، عبارت “۵۳۷” خواهد بود. (عدد را با رشته جمع کردهاست)
؛ اشیاء به دید آرایههای انتسابی: جاوااسکیرپت تقریباً تماماً بر اساس اشیاء است. اشیاء، آرایههای انتسابی به همراه یک «ساختار شماتیک» هستند. نام ویژگی اشیاء، کلیدهای آرایه انتسابی هستند و درواقع obj.x = ۱۰
با obj[“x”] = ۱۰
هم ارز هستند و شیوه نگارش با نقطه صرفاً یک سهولت نحوی است. ویژگیها و مقدارهایشان در زمان اجرا قابلیت تغییر اضافه و حذف دارند. همچنین میتوان روی ویژگیهای یک شی با ساختار for … in
پیمایش کرد.
؛ ارزیابی در زمان اجرا: جاوااسکریپت یک تابع eval دارد که قادر است گزارههای تولید شده در یک رشته در زمان اجرا را، اجرا کند.
تابعی بودن
؛ تابعی بودن: توابع موجوداتی «درجه اول» محسوب میشوند، یعنی خود یک شی هستند؛ بنابراین میتوانند ویژگی داشته باشند، در آرگومانهای تابعها داده شوند و مانند هر شی دیگری با آنها رفتار شود
؛ توابع داخلی و بستارها: توابع داخلی (توابع تعریف شده داخل یک تابع دیگر) هر بار که تابع بیرونی فرا خوانده شود، ایجاد میشوند و متغیرهای توابع بیرونی تا زمانی که تابع داخلی وجود داشته باشد، وجود خواهند داشت، حتی پس از اتمام آن فراخوانی از تابع بیرونی. (مثال: اگر تابع داخلی به عنوانمقدار برگشتی تابع باشد، هنوز به متغیرهای تابع بیرونی دسترسی دارد) – این مکانیزم بستار گرفتن در جاوااسکریپت است.
ساختار شماتیک» محوری
؛ ساختار شماتیک: جاوااسکریپت به جای ردهها برای تعریف ویژگیهای اشیاء، که شامل متدها و وراثت است از «ساختار شماتیک» استفاده میکند (پیشنمونه). امکان شبیهسازی بسیاری از امکانات رده-محور با ساختارهای شماتیک جاوااسکریپت امکانپذیر است.
- توابع در نقش سازندهٔ اشیاء
برای توابع علاوه بر نقش عادی، به عنوان سازنده ی اشیاء هم عمل میکنند. آوردن یک new قبل فراخوانی تابع، آن را با کلمهٔ کلیدی this وابسته سازی شده به شی جدید اجرا میکند. ویژگی prototype از تابع مورد نظر، ساختار شماتیک شی جدید را مشخص میکند.
؛ توابع در نقش متد: بر خلاف بیشتر زبانهای شی گرا تفاوتی میان تعریف تابع و متد وجود ندارد. بلکه تفاوت در زمان فراخوانی تابع است، زمانی که یک تابع به عنوان متد یک شی فراخوانده میشود کلمهٔ کلیدی this محلی آن تابع به شی مورد نظر وابسته سازی میشود.
امکانات دیگر
- امکانات دیگر
جاوااسکریپت برای تأمین اشیاء و متدها که با آنها تعامل کند به یک محیط اجرایی (مانند مرورگر وب) نیاز دارد تا بتواند به این ترتیب با دنیای خارج ارتباط برقرار کند. همچنین برای دسترسی به سایر نویسهها (include) هم به این محیط نیازمند است (مانند تگ <script>در HTML). (البته این یک ویژگی زبانی نیست اما در عمل اغلب این طور پیادهسازی شدهاست)
؛ تعداد متغیر پارامتر (variadic): تعداد نامعینی پارامتر را میتوان به یک تابع ارسال نمود. تابع میتواند هم از طریق پارامترهای رسمی و هم از طریق شی محلی arguments
به آنها دسترسی داشته باشد.
- Literalهای آرایه و شی
مانند بسیاری از زبانهای نویسهای آرایهها و اشیاء (که در زبانهای دیگر همان آرایههای انتسابی هستند) را میتوان با یک نحو موجز ایجاد و توصیف نمود. در واقع این شیوهٔ نگارش پایهٔ قالب دادهای جیسون هم هست.
جاوااسکریپت به شیوهای مشابه زبان پرل از عبارات منظم پشتیبانی میکند که نحوی قدرتمند و موجز را به شکلی فراتر از توابع پیش ساخته برای کار با رشتهها، فراهم میکند.
نظام تایپ دهی
انواع زیر جزو انواع دادههای قابل دسترس در زبان جاوااسکریپت است. در استاندارد ECMA انواع دیگری هم تعریف شده که صرفاً داخلی است و برای پیادهسازی است.[۸]
تعریف نشده: این تایپ فقط یک مقدار با نام undefined دارد و متعلق به تمام متغییرهای مقدار دهی نشدهاست
نوع تهی: نوع تهی هم فقط یک مقدار دارد با نام null
نوع دودویی: نمایندهٔ یک مقدار منطقی است و دو مقدار true و false را میپذیرد.
نوع رشته: در بر گیرندهٔ تمام رشتههای متناهی از ۰ یا بیشتر عنصر ۱۶ بیتی بدون علامت است. این عناصر با اندیسهای نامنفی قابل دسترسی هستند. طول رشته تعداد عناصر داخل آن و طول رشتهٔ تهی برابر ۰ است.
زمانی که رشته حاوی متن واقعی باشد هر عنصر به عنوان یک واحد UTF-16 در نظر گرفته میشود (مستقل از این که شیوهٔ واقعی نگه داری رشته چه باشد). تمام عملیات بر روی رشتهها آنها را به عنوان اعداد صحیح بدون علامت در نظر میگیرند و تضمین کنندهٔ تولید رشته به حالت normalize شده نیست و تضمینهای خاص زمانی هم ندارد. علت این تصمیم گیری سادگی در پیادهسازی ذکر شدهاست.
نوع عدد: نوع عدد در جاوااسکریپت مطابق با استادارد IEEE برای اعداد شناور دودویی است (با اندکی تفاوت).
نوع شی: شی در جاوااسکریپت یک مجموعه بدون ترتیب از ویژگیها است. هر ویژگی میتواند داخلی، فقط-خواندنی، غیرقابل حذف، و غیرقابل پیمایش باشد (یا ترکیبی از اینها یا هیچکدام)
تبدیلات خودکار
این زبان دارای تبدیلات خود کار بین این انواع دادهای است.
زمانی که بخواهد یک if را ارزیابی کند یا از عملگرهای منطقی !
و &&
و ||
استفاده شود، تبدیل به نوع دودویی را انجام میدهد. مقادیر ۰ و ۰- و NaN
به false
و سایر مقادیر عددی به true
نگاشت میگردد. همچنین رشتهٔ تهی false
و سایر رشتهها true
در نظر گرفته میشود. انواع شی و تابع true
و undefined
و null
هم false
در نظر گرفته میشود.
زمانی که یکی از عملوندهای عملگر + رشته باشد، تبدیل به رشته صورت میگیرد، مانند ۵ + “۳۷” که میشود “۵۳۷”
عملگرهای دیگری عددی (جز جمع) منجر به تبدیل به عدد میگردد مانند ۳ – “۵۷” که مقدار عددی ۳۴- را به دست میدهد.[۹]
وانیلا جاوااسکریپت
وانیلا جاوااسکریپت یا وانیلا جی اس (Vanilla JS) اصطلاحی است که به همان زبان جاوااسکریپت اطلاق میشود. در حقیقت، وانیلا جی اس هیچ سکو (framework) یا کتابخانهٔ خاصی نیست. این اصطلاح بیشتر برای کسانی ساخته شده است که گمان میکنند برای استفاده از جاوااسکریپت، حتماً باید از کتابخانههای موجود یا سکوی خاصی استفاده بکنند.[۱۰]
وانیلا جی اس از آنجا که اصطلاحی دیگر برای استفاده از زبان جاوااسکریپت بدون استفاده از سکوی خاصی هست، سریعترین کتابخانه جاوااسکریپت موجود تلقی میشود.[۱۱]
پانویس
- پرش به بالا↑ Object oriented
- پرش به بالا↑ Krill, Paul. JavaScript creator ponders past, future. . InfoWorld, 2008–۰۶–۲۳٫ Retrieved on 2009-05-19.
- پرش به بالا↑ Programming languages used on the Internet and the World Wide Web (WWW). . Webdevelopersnotes.com. Retrieved on 2009-05-19.
- پرش به بالا↑ O’Reilly – Safari Books Online – 0596101996 – JavaScript: The Definitive Guide, 5th Edition. . Safari.oreilly.com. Retrieved on 2009-05-19.
- پرش به بالا↑ Netscape Press Release. . Cgi.netscape.com. Retrieved on 2009-05-19.
- پرش به بالا↑ JavaScript: The World’s Most Misunderstood Programming Language. . Crockford.com. Retrieved on 2009-05-19.
- پرش به بالا↑ Flanagan, David. JavaScript: The Definitive Guide. O’Reilly Media, 2006. 176–۱۷۸٫ ISBN 0-596-10199-6.
- پرش به بالا↑ “JavaScript ECMA Standard”.
- پرش به بالا↑ “JavaScript Typing System”.
- پرش به بالا↑ what is vanillajs? (وانیلا جی اس چیست؟)
- پرش به بالا↑ valilla-js.com
آموزش تصویری #C
از ویکیپدیا، دانشنامهٔ آزاد
سی شارپ
(به انگلیسی: C#)، زبانی شیءگرا و سطح بالا از خانوادهٔ زبانهای چارچوب داتنت شرکت مایکروسافت است.
زبان سی شارپ، یک زبان برنامهنویسی چند الگویی و منظم شده مدلهای تابعی، امری، عمومی، شیءگرا و جز گرا و در بستر دات نت میباشد. این زبان توسط مایکروسافت و جزئی از دات نت به وجود آمد و بعداً استانداردهای ECMA و ISO را نیز در بر گرفت. سی شارپ یکی از ۴۴ زبان برنامهنویسی است که توسط زمان اجرای زبان مشترک از چارچوب داتنت پشتیبانی میشوند و در همه جا به وسیله مایکروسافت ویژوال استودیو شناخته میشود.
زبان سی شارپ با قدرت و در عین حال سطح بالایی خود توانسته توجه بسیاری از برنامه نویسان را به خود جلب کند.
این زبان برپایه سادگی، مدرن بودن، همه منظوره و شیءگرا بودن ساخته شد. آندرس هجلزبرگ، طراح زبان برنامهنویسی دلفی، سرپرستی تیم طراحان زبان سی شارپ را بر عهده داشت. این زبان دارای دستوری شیءگرا مشابه ++C است و به شدت از زبانهای جاوا و دلفینیازمندمدرک تأثیر پذیرفتهاست. در ابتدا نام این زبان COOL بود که مخفف C like Object Oriented Language بود، هر چند در ژوئیه ۲۰۰۰، زمانی که مایکروسافت پروژه را عمومی اعلام کرد، اسم آن به سی شارپ تغییر پیدا کرد. آخرین نسخه آن نسخه ۵٫۰ است که همزمان با داتنت ۴٫۵ در اوت ۲۰۱۲ منتشر شد.
اهداف طراحی زبان
- استاندارد ECMA این اهداف طراحی زبان را برای سی شارپ بر آورده میسازد:
- سی شارپ یک زبان برنامهسازی ساده، مدرن، برای اهداف عمومی و شیءگرا است.
- به دلیل اهمیت داشتن موضوع نیرومندی و دوام و بهرهوری برنامهنویس، زبان دارای چککننده Strong Type، چککننده مرزهای آرایه، تشخیص حالتهایی که یک متغیر مقداردهی اولیه نشدهاست، قابلیت انتقال کدها و Garbage Collection خودکار است.
- این زبان برای استفاده در اجزای توسعه نرمافزار برای دستیابی به مزایای سامانههای توزیعی در نظر گرفته شدهاست.
- قابلیت انتقال برنامهنویس بسیار مهم است، خصوصاً برای آن دسته از برنامهنویسانی که با زبانهای C و C++ آشنا هستند.
- پشتیبانی از این زبان برای بینالمللی شدن بسیار مهم است.
- زبان سی شارپ برای نوشتن برنامهها برای سامانههای تعبیه شده و میزبان در نظر گرفته شدهاست، سیستمعاملهای پیچیده بسیار بزرگ گرفته تا توابع اختصاصی بسیار کوچک.
- هر چند برنامههای نوشته شده با سی شارپ طوری هستند که از لحاظ حافظه و پردازنده مورد نیاز مقرون به صرفه باشند، ولی خود زبان از لحاظ اندازه و کارایی به خوبی زبانهای C و اسمبلی نیست.
تاریخچه
در سال ۱۹۹۹، شرکت سان اجازه استفاده از زبان برنامهنویسی جاوا را در اختیار ماکروسافت قرار داد تا در سیستمعامل خود از آن استفاده کند. جاوا در اصل به هیچ پلت فرم یا سیستمعاملی وابسته نبود، ولی ماکروسافت برخی از مفاد قرار داد را زیر پا گذاشت و قابلیت مستقل از سیستمعامل بودن جاوا را از آن برداشت. شرکت سان پروندهای علیه ماکروسافت درست کرد و ماکروسافت مجبور شد تا زبان شیءگرای جدیدی با کامپایل جدید که به ++C شبیه بود را درست کند. در طول ساخت دات نت، کلاسهای کتابخانهای با زبان و کامپایلر SMC نوشته شدند. در سال ۱۹۹۹ آندرس هلزبرگ گروهی را برای طراحی زبانی جدید تشکیل داد که در آن زمان نامش Cool بود و همانند C بود با خواص شیءگرایی. ماکروسافت در نظر داشت اسم این زبان را تا آخر Cool قرار دهد، ولی به دلیل مناسب نبودن برای اهداف تجاری این کار را نکرد. در ارائه و معرفی رسمی چارچوب داتنت درPDC در سال ۲۰۰۰ این زبان به سی شارپ تغییر نام یافت و کتابخانه کلاسها و runtime در ایاسپیداتنت به سی شارپ منتقل شدند. مدیر و سرپرست طراحان در ماکروسافت آندرس هلزبرگ بود که تجربه قبلی او در طراحی Framework و زبانهای برنامه سازی++Borland، دلفی (شهر)،Turbo Pascal، ویژوال سی++ به آسانی در دستورالعملهای سی شارپ قابل رویت است و به همان خوبی در هسته CLR.
ویژگیها
برخی از تفاوتهای زبان سی شارپ با C و ++C عبارتند از:
- هیچ تابع یا متغیر سراسری(Global) وجود ندارد، تمام متدها و اعضا بایستی در داخل کلاسها تعریف شوند. این امر ممکن است، هر چند برای استفاده از متغیرها و توابع عمومی باید از متدها و متغیرها در کلاسهای عمومی استفاده کرد.
- متغیرهای عمومی، بر خلاف C و ++C، نمیتوانند بلاکهای پیوستی را در بر بگیرند.
- سی شارپ دارای یک نوع داده بولی است (bool). برخی از عبارتها مانند while و if که شرطی هستند، نیازمند یک عبارت نوع بولی هستند. همانطور که ++C نیز دارای نوع داده بولی است، این نوع داده به راحتی میتواند به یا از Integerها تبدیل شود، و عبارتی مانند (if(a نیازمند این امر است که a از یک نوع قابل تبدیل به bool یا اشاره گر باشد. کامپایلر سی شارپ برنامه نویس را در این شرایط مجبور به استفاده از عباراتی میکند که به درستی یک مقدار bool را برمیگردانند؛ بنابراین دستوری مانند (if(a = b باعث بروز خطا میشوند. (به جای = بایستی از == استفاده شود)
- در سی شارپ، اشاره گرهای به حافظه بایستی فقط در داخل بلوکهای unsafe استفاده شوند و برنامه در این حالت برای اجرا نیاز به اجازه از کاربر دارد. بیشتر دسترسی شی از طریق شی امن است که یا همیشه در حال اشاره به شی صحیح موجود است یا یک مقدار Null دارد. اشاره گری به شی به درد نخور یا بلاک حافظه رندم غیرممکن است. اشاره گر نا امن میتواند به نمونهای از value-type، آرایه، رشته یا بلاکی که حافظه به آن داده شدهاست اشاره نماید. کدی که به عنوان نا امن علامت نخورده باشد، هنوز میتواند اشاره گرها را از سامانه بازیابی یا در آن ذخیره کند ولی نمیتواند مرجع جدیدی به آنها اختصاص دهد.
- حافظه ساماندهی شده نمیتواند صریحاً آزاد شود، ولی به طور خودکار به عنوان به درد نخور تلقی میشود. انتخاب آدرسهای به درد نخور حافظه نفوذ ناپذیر است. هم چنین سی شارپ با استفاده از عبارات، پشتیبانی مستقیمی از پایان اجباری میکند (پشتیبانی از اصطلاح Resource Acquisition Is Initialization).
- وراثت چندگانه از کلاسها در این زبان پشتیبانی نمیشود. البته یک کلاس امکان ارث بری از تعداد نامحدود واسطها را دارد. پشتیبانی نکردن از وراثت چندگانه به دلیل اهداف معماری این زبان در CLI و برای جلوگیری از پیچیدگی است. در عوض میتوان از اینترفیسهای مختلف استفاده کرد. یعنی برای یک کلاس که احتمالاً فرزند کلاسی دیگر است (ارث برده) میتوان چندین اینترفیس را پیادهسازی (Implement) نمود.
- سی شارپ بسیار typesafe تر از C++ است. تنها تبدیلات ضمنی مثل تبدیل نوع داده کوچکتر به بزرگتر یا تبدیل نوع مشتق شده به نوع پایه به طور پیش فرض و بدون خطا صورت میپذیرد. هیچ تبدیل ضمنی ای میانBooleanها و Integerها وجود ندارد و هر تبدیل user-defined بایستی به صراحت با یکی از کلمات explicit یا implicit نشانه گذاری شود. تبدیل b به a در حالتی که a یک Integer و b یک double باشد در زبان C++ مجاز است اما در سی شارپ به یک خطای زمان کامپایل منجر میشود (بایستی به صورت explicit تعریف شود)
- اعضای Enumeration در داخل محدوده شخصی خود قرار دارند.
- سی شارپ قابلیت syntactic sugar را برای توابع متداول، اکسسورها و ماجولهای کسول شده در یک کلاس به صورت ویژگیها قرار دادهاست.
اکسسورها که خاصیت نیز گفته میشوند در زبان سی شارپ قادر به کنترل دسترسی اعضا و معتبرسازی دادهها هستند.
- تمام انواع بازتابی(Reflection) و بازیابی(Recovery) قابل استفادهاست.
- در حال حاضر (۳ ژوئن ۲۰۰۸) دارای ۷۷ کلمه رزرو شدهاست.
ساختمان داده (ساختار و ذخیر سازی داده)
این کمپایلر در مقابل C یا ++C دارای ساختار بسیار متفاوتی است که دانستن آن به برنامه نویس امکان نوشتن برنامههای بسیار بهینه را خواهد داد.
رشتههادر C و یا ++C ساختار رشته به صورت ارایهای از نوع char بود که امکان اضافه کردن به رشته را محدود میکرد به دلیل ثابت بودن طول در آغاز تعریف ولی در سی شارپ دو نوع متفاوت رشته وجود دارد؛ که یکی به صورت ارایهای با طول ثابت ۲۵۶(در عمل ۲۵۵)موجوداست (به صورت پیش فرض) و در صورتی که با کمبود جا روبرو شود فضای جدید (بزرگتر) یافته و به ان انتقال میدهد؛ ولی در نوع دوم رشتهها از لیست پیوندی اسفاده میشود.
سامانه یکپارچه شده
سی شارپ دارای یک سامانه نوع یکپارچهاست که به آن CTS میگویند. این بدان معناست که تمام انواع، شامل موارد اصلی مانند Integerها، مشتق شده از System.Object هستند. به عنوان مثال، هر نوع یک متد به نام ToString() را به ارث میبرد. بخاطر کارائی، انواع اولیه (و انواع مقداری) به طور داخلی فضایی برای آنها بر روی پشته در نظر گرفته میشود.
انواع داده
CTS دادهها را به دو نوع تقسیم میکند:
- نوع مقداری (Value Type)
- نوع مرجعی (Refrence Type)
انواع دادهای توده سادهای از داده میباشند. نمونههای انواع دادهای نه هویت مرجعی دارند و نه مفاهیم مقایسه مراجع را. برای مقایسه برابری یا عدم برابری انواع دادهای، خود مقدار دادهها را با یکدیگر مقایسه میکنیم مگر اینکه عملگرهای مشابه دوباره تعریف شده باشند. مقادیر دادههای مرجعی همیشه یک مقدار پیش فرض دارند و همیشه میتوانند ایجاد و یا کپی شوند. یکی دیگر از محدودیتهای انواع دادهای این ات که آنها نمیتوانند از یکدیگر مشتق شوند (ولی میتوانند اشتراکاتی داشته باشند) و هم چنین نمیتوانند در سازنده مقدار دهی اولیه شوند. مثالی از انواع دادهای، بعضی از انواع اولیه مانند int و float و char و System.DateTime میباشند. در مقابل، انواع مرجعی مفهوم تعریف مرجعی را دارند (که در آن هر نمونه از نوع مرجع، به طور ذاتی از دیگر نمونهها جدا میشود، حتی اگر داده هر دو نمونه یکی باشد). این دقیقاً نمونه مشابه مقایسه تساوی یا عدم تساوی دادههای مرجعی است، که در آن آزمایش برای مرجعها از دادهایها سریع تر است. در کل نه همیشه امکان تعریف نمونه مرجعی وجود دارد و نه امکان کپی یا نمایش مقادیر مقایسه دو نمونه؛ ولی به هر حال انواع مرجعی خاص میتوانند این اعمال را از طریق سازندههای عمومی یا اجرای واسطهای مشابه (مثل ICloneable یا IComparable) انجام دهند. نمونههایی از انواع مرجعی، اشیاء، System.String و Sysmet.Array میباشند. هر دو نوع داده قابلیت انعطاف توسط تعریف به وسیله کاربر را دارند. در واقع وقتی ما نوع دادهای را به تابع ای ارسال میکنیم، آدرس داده نیز فرستاده میشود. البته این امر پیش فرض است ولی برای دادههای مثل آرایه، رشتهای، آدرس فرستاده میشود و ارسال از نوع مرجع میشود