370 likes | 581 Views
به نام خدا. فصل اول. اصول طراحی زبانها. 1-1- چرا زبانهای برنامه سازی را مطالعه می کنیم؟. برای بهبود توانایی خود در توسعه الگوریتمهای کارآمد بازگشتی استفاده بهینه از زبان برنامه نویسی موجود لیست ها ، آرایه ها ، رکورد ها ، بازگشتی ،کلاسهای اشیا و ...
E N D
به نام خدا فصل اول اصول طراحی زبانها طراحی و پیاده سازی زبان های برنامه سازی
1-1- چرا زبانهای برنامه سازی را مطالعه می کنیم؟ طراحی و پیاده سازی زبان های برنامه سازی
برای بهبود توانایی خود در توسعه الگوریتمهای کارآمد • بازگشتی • استفاده بهینه از زبان برنامه نویسی موجود • لیست ها ، آرایه ها ، رکورد ها ، بازگشتی ،کلاسهای اشیا و ... • می توانید با اصلاحات مفید ساختارهای برنامه نویسی آشنا شوید. • چگونه فکر می کنیم؟ • افزایش واژگان برنامه نویسی • انتخاب بهترین زبان برنامه سازی • زبان مناسب برای پروژه خاص • آموزش زبان جدید ساده می شود. • طراحی زبان جدید ساده می شود. • آشنایی با گستره ای از ساختارها و روش های پیاده سازی زبان های برنامه نویسی موجود برای ایجاد واسط های کاربری بزرگ طراحی و پیاده سازی زبان های برنامه سازی
مطالعه زبان های برنامه سازی!=نگاه سطحی به ویژگی های آنها پیاده سازی متفاوت ویژگی های مشترک دو زبان = تفاوت در هزینه ها طراحی و پیاده سازی زبان های برنامه سازی
1-2- تاریخچه مختصری از زبانهای برنامه سازی طراحی و پیاده سازی زبان های برنامه سازی
1950 تولید اولین زبان های سطح بالا • فرترن ، لیسپ • Ada ، c ، پاسکال ،پرولوگ ، اسمالتاک • c++ ، ML، پرل، پست اسکریپت • جاوا زبان های جدید بخشی از فرآیند توسعه نرم افزار طراحی و پیاده سازی زبان های برنامه سازی
1-2-1 توسعه زبانهای اولیه • زبانهای مبتنی بر اعداد (اواخر دهه 1930 تا اوایل دهه 1940) • ماشین حساب های الکترونیکی • اوایل 1950 • گریس هوپر زبان A-0 • جان باکس کد گزاری سریع برای IBM 170 • کامپایل عبارات محاسباتی ساده به زبان ماشین قابل اجرا • 1955 • فرترن(جان باکس و گروهش) • GAAM(جامعه ریاضیدانان آلمان ) • ACM(Association for Computing Machinery) • ایجاد زبان الگوریتمی IAL(International Algorithmic Languages) به رهبری پیتر نائور • ALGOL 58 , ALGOL 60 طراحی و پیاده سازی زبان های برنامه سازی
فرترن • داده های زبان فرترن به محاسبات عددی مربوط می شد ولی هدف طراحی زبانی با ساختارها کنترلی ،شرطهاو دستورات ورودی خروجی بود. • موفقیت فرترن • فرترن 2 • فرترن 4(فرترن 66) • فرترن 77 و 90 طراحی و پیاده سازی زبان های برنامه سازی
اهداف الگول عبارت بودند از: • نشانه های الگول باید به ریاضیات استاندارد نزدیک باشد. • الگول باید برای توصیف الگوریتمها مفید باشد. • برنامه ها در الگول باید به زبان ماشین ترجمه شوند. • الگول نباید به معماری یک ماشین مقید باشد. • BNF(Backus Naur From) طراحی و پیاده سازی زبان های برنامه سازی
سیمولا67(simula-67) توسط نیگارد و دهل نروژی • C++ توسط استراستراپ • ویرث • الگول-w • پاسکال)زبان علمی کامپیوتر) • الگول 68 • PL/I(IBM) طراحی و پیاده سازی زبان های برنامه سازی
a) توسعه زبانهای اولیه (ادامه) • زبانهای تجاری ( 1955) • 1955 هوپر flowmatic • 1959 سازمان دفاع آمریکا CBL • توسعه • طراحی کوبول • استاندارد (1960) طراحی و پیاده سازی زبان های برنامه سازی
توسعه زبانهای اولیه (ادامه) • زبانهای هوش مصنوعی • IPL(سطح پایین ) • LISP توسط جان مکارتی (زبان تابعی برای پردازش لیست ها) • جست و جو ، پردازش متن ، بازیهای کامپیوتری ، تفسیر ماشین خودکار • COMMIT توسط یاو • اسنوبال • پرولوگ طراحی و پیاده سازی زبان های برنامه سازی
a) توسعه زبانهای اولیه (ادامه) • زبانهای سیستم • CPL & BCPL • C طراحی و پیاده سازی زبان های برنامه سازی
1-2- تاریخچه مختصری از زبانهای برنامه سازی (ادامه)زبان میزبان و زبان مقصد • دوران کامپیوترهای بزرگ • دوران کامپیوتر شخصی • دوران شبکه بندی طراحی و پیاده سازی زبان های برنامه سازی
دوران کامپیوتر های بزرگ(دهه 1940 تا دهه 1970) • محیط دسته ای • زبان مجموعه ای از فایل ها را به صورت ورودی دریافت می کرد ، داده ها را پردازش می کرد و مجموعه ای از فایل های داده ای را به صورت خروجی تحویل می داد .(فرترن ، کوبول ، پاسکال) • محیط محاوره ای • کاربر مستقیما با برنامه در تعامل است. • اشتراک زمانی طراحی و پیاده سازی زبان های برنامه سازی
تاثیر بر طراحی زبان • زبانهای محیط دسته ای • فایل ها :مهمترین ساختار ورودی خروجی • خطایی که اجرای برنامه را خاتمه می دهد،قابل قبول اما هزینه بر است • عدم وجود محدودیت زمانی بر روی برنامه • زبانهای محیط محاوره ای • در صورت بروز خطا ، خارج شدن از برنامه قابل قبول نیست .اهمیت کم پردازش خطا • برنامه محاوره ای باید از محدودیت زمانی برخوردار باشد . طراحی و پیاده سازی زبان های برنامه سازی
دوران کامپیوتر های شخصی • کامپیوترهای شخصی • مینی کامپیوتر ها و از دور خارج شدن کامپیوتر های بزرگ • Pc ها : تولید اپل 2 در 1978 • محیطهای سیستم تعبیه شده • سیستمی کامپیوتری که برای کنترل بخشی از یک سیستم بزرگ به کار می رود طراحی و پیاده سازی زبان های برنامه سازی
تاثیر بر طراحی زبان • PC • واسط ویندوز(پنجره ها، لیست ها ، آیکن ها و ..) • نیاز به اشتراک زمانی کمتر و توسعه برنامه گرافیکی • سیستم های تعبیه شده • کار با ورودی خروجی • تعامل با I/O از طریق رویه هایی که به عنوان ویژگیهای دستگاه I/O محسوب می شود. • ارتباط با دستگاه های خاص ،از طریق ویژگیهایی از زبان که به ثبات های سخت افزاری ، محل های حافظه و یا پردازشگر وقفهدسترسی دارند یا از طریق زیربرنامه های نوشته شده به زبان اسمبلی یا یکی از زبان های سطح بالا • پردازش خطا • فعالیت مناسب در جهت ترمیم سیستم • کاربری برای برطرف کردن محاوره ای خطا وجود ندارد • زمان پاسخ دهی • پاسخ در زمان محدود • قابلیت نظارت بر فاصله های زمانی • اغلب یک سیستم توزیعی است طراحی و پیاده سازی زبان های برنامه سازی
دوران شبکه بندی • محاسبات توزیعی(در اثنای دهه 1980) • استفاده از کامپیوتر های مرکزی در شرکت ها برای پردازش داده های مشترک • محاسبات کارگزار مشتری(مثال : سیستم رزرو هواپیما) • اینترنت(در اواسط دهه 1990) • تاثیر بر زبان برنامه سازی • اطلاعات کارگزاران بزرگ در سطح جهانی • تعامل بین مشتری و کاربر • صفحات ایستا و پویای وب • امنیت صفحات • سرعت محدود • خطوط ارتباطی • قدرت پردازش سرور طراحی و پیاده سازی زبان های برنامه سازی
1-2- تاریخچه مختصری از زبانهای برنامه سازی (ادامه) c) دامنه های کاربرد کاربردها در دهه 1960 • پردازش تجاری(ورود سفارشات ، کنترل فروش،مدیریت شخصی و ...) • محاسبات علمی(معادلات ریاضی) • برنامه نویسی سیستم(سیستم عامل کامپیوتر ، کنترل فرآیند های بزرگ) • کاربردهای هوش مصنوعی طراحی و پیاده سازی زبان های برنامه سازی
1-2- تاریخچه مختصری از زبانهای برنامه سازی (ادامه) c) دامنه های کاربرد(ادامه) کاربردهای قرن 21 • پردازش تجاری(کوبول c,c++) • 4GL ها • تجارت الکترونیک • محاسبات علمی(فرترن 90، جاوا و c) • برنامه نویسی سیستم(c,c++) • کاربردهای هوش مصنوعی(لیسپ و پرولوگ) • انتشارات(نرم افزار های واژه پرداز) • فرآیند : اغلب از یک برنامه برای کنترل برنامه ی دیگر استفاده می شود. مانند پاسخ خودکار به میل ها(پوسته یونیکس) • کاربردهای جدید (مانند شی گراهاو...):مانند کاربرد ام ال در تحقیقات زبانهای برنامه سازی برای بررسی تئوری نوع طراحی و پیاده سازی زبان های برنامه سازی
1-3- نقش زبانهای برنامه سازی تغییرات بوجود آمده و اثرات آنها بر زبانهای برنامه سازی • تغییر در قابلیتهای کامپیوتر(کامپیوترهای بزرگ ، کند و گرانقیمت که از لامپ خلا استفاده می کردند به ریز کامپیوترها و سوپر کامپیوترها تبدیل شدند) : ساختار و هزینه های استفاده از زبانهای سطح بالا تحت تاثیر قرار گرفت. • زمینه های کاربرد جدید: موجب طراحی زبانهای جدید ، ارتقاء و بازبینی زبانهای قدیمی • یافتن متدهای برنامه نویسی خوب برای برنامه های بزرگ و پیچیده و تغییر در محیط های برنامه نویسی: موجب رشد در طراحی زبان ها شد. • متدهای پیاده سازی: انتخاب ویژگیهای نو برای طراحی های جدید • مطالعات تئوری: استفاده از متدهای رسمی ریاضیات • نیاز به انتقال برنامه از کامپیوتری به کامپیوتر دیگر: موجب استانداردسازی در زبا نها طراحی و پیاده سازی زبان های برنامه سازی
1-3- نقش زبانهای برنامه سازی(ادامه) a) زبان خوب چگونه است؟ مکانیزم طراحی یک زبان سطح بالا باید کامل و بی عیب باشد. • وضوح، سادگی و یکپارچگی : جامعیت مفهومی : مفاهیم و ابزارهای موجود در یک زبان و قوانین ترکیب آنها در یک زبان برنامه سازی خوانایی برنامه : تفاوتهای معنایی منعکس کننده تفاوتهای نحوی باشد. • قابلیت تعامد : امکان ترکیب ویژگیهای مختلف زبان و با معنا بودن ترکیب حاصل مثال : ترکیب عبارت وساختار شرطی مزیت : یادگیری زبان ساده و نوشتن برنامه راحت معایب : کامپایل بدون خطا در ترکیبهایی که منطق روشن و اجرای کارآمدی ندارند. • طبیعی بودن برای کاربردها زبانها باید ساختمان داده،عملگرها،دستورات کنترلی و نحو مناسب برای مسئله ای که باید حل شود را داشته باشند. طراحی و پیاده سازی زبان های برنامه سازی
1-3- نقش زبانهای برنامه سازی(ادامه) صفات یک زبان خوب(ادامه) • پشتیبانی از انتزاع • سهولت در بازرسی برنامه • محیط برنامه نویسی : وجود ویراستارهای خاص،امکانات نگهداری و اصلاح نسخه های متفاوت • قابلیت حمل برنامه • هزینه استفاده • هزینه اجرای برنامه : بستگی به کامپایلر دارد ولی امروزه زیاد مهم نیست.طراحی کامپایلر بهینه ساز،تخصیص کارآمد ثبات ها و مکانیزم پشتیبانی زمان اجرای کارآمد • هزینه ترجمه برنامه: در برنامه های دانشجویی برنامه به تعداد زیاد ترجمه میشود تا اجرا • هزینه نگهداری برنامه:هزینه های ترمیم خطا بعد از اجرا ،تغییر نیازمندی های برتنامه با توسعه و تغییر سیستم عامل و . . طراحی و پیاده سازی زبان های برنامه سازی
1-3- نقش زبانهای برنامه سازی(ادامه) نحو و معنای زبان • نحو زبان برنامه سازی، ظاهر آن زبان است. • قواعد نحوی مشخص می کنند که دستورات، اعلانها و سایر ساختارهای زبان چگونه نوشته می شوند • معنای زبان همان مفهومی است که به ساختارهای نحوی زبان داده می شود. طراحی و پیاده سازی زبان های برنامه سازی
1-3- نقش زبانهای برنامه سازی(ادامه) b) مدلهای زبان • زبانهای دستوری(imperative) یا رویه ای: زبانهای مبتنی بر فرمان یا دستورگرا(پشتیبانی از سخت افزار) مانند c , c++ و پاسکال و . . . • زبانهای تابعی(applicative): به جای مشاهده تغییر حالت ، عملکرد برنامه دنبال می شود. مانند ام ال و لیسپ (بعضی وقتها c) functionn(…(function2(function1(data)) …) • زبانهای قانونمند(rule-based): شرایطی را بررسی می کنند و درصورت برقرار بودن آنها فعالیتی را انجام می دهند. • مانند پرولوگ enable condition1 action1 • برنامه نویسی شی گرا(object-oriented): اشیای پیچیده به عنوان بسطی از اشیای ساده ساخته می شوندو خواصی را از اشیای ساده به ارث می برند. طراحی و پیاده سازی زبان های برنامه سازی
طراحی و پیاده سازی زبان های برنامه سازی
1-3- نقش زبانهای برنامه سازی(ادامه) c) استاندارد سازی زبان روش پی بردن به معنای دستورات : • به مستندات زبان مراجعه شود. • برنامه را در کامپیوتر تایپ و اجرا کنید • به استاندارد زبان مراجعه شود. استانداردهای زبان دو دسته اند : • استاندارد خصوصی : توسط شرکت یا مالک زبان ارائه می شوند. • استاندارد عمومی : اسنادی که توسط سازمانهای مختلف به توافق رسیده اند. ANSI,IEEE,BSI,ISO,... طراحی و پیاده سازی زبان های برنامه سازی
مسائل مهم در استفاده ی موثر از استاندارد: • زمان سنجی : چه زمانی باید زبان استاندارد شود؟ • اطاعت و پیروی : برنامه نویس باید مراقب ویژگیهای اضافی که در کامپایلر وجود دارد باشد. • کهنگی : کی استاندارد کهنه می شود و چگونه باید آن را اصلاح کرد؟ • مشکلات ارتقا استاندارد : رفتار با برنامه های موجود • استاندارد باید با گذشته خود سازگاری داشته باشد • مشکل سازگاری با گذشته • مفاهیم مستهلک شدن و کهنگی طراحی و پیاده سازی زبان های برنامه سازی
1-3- نقش زبانهای برنامه سازی(ادامه) d) بین المللی شدن برنامه نویسی اغلب ، مقررات محلی که کامپیوتر در انجا مورد استفاده قرار می گیرد،روش ذخیره و پردازش داده ها را مشخص می کند. • ترتیب تلفیق: کاراکترها به چه ترتیبی باید ظاهر شوند؟ • ترتیب: موقعیت کاراکترهای غیر رومی • حالت کاراکترها: حروف کوچک و بزرگ در زبانهایی مثل ژاپنی، عربی و یهودی • جهت پیمایش: اغلب زبانها از چپ به راست خوانده می شوند. • فرمت تاریخ در یک کشور خاص • فرمت زمان در یک کشور خاص • مناطق زمانی • سیستمهای حروفی: زبانهایی که بر اساس کاراکتر تشکیل دهنده الفبایی نوشته نمیشوند بلکه از حروف خاصی استفاده مینماید (ژاپنی و کره ای و چینی )16 بیت • علامت پول : در کشورهای مختلف مختلف طراحی و پیاده سازی زبان های برنامه سازی
1-4- محیط های برنامه نویسی a) محیط برنامه نویسی در دو زمینه بر طراحی زبان تاثیر گذاشته است : • کامپایل کردن مجزای زیربرنامه و سایر بخشهای برنامه • کامپایلر باید این اطلاعات را داشته باشد: مشخه ی تعداد ، ترتیب و نوع پارامترهای زیربرنامه اعلان نوع داده سراسری تعریف نوع داده محلی خود زیر برنامه نحوه تهیه این اطلاعات ؟ طراحی و پیاده سازی زبان های برنامه سازی
اعلان در زیر برنامه ها(فرترن) • ترتیب خاصی از کامپایل (ادا و پاسکال) • وجود کتابخانه ها مربوط(c++,Java) نحوه برخورد با اسامی مشترک • جلوگیری از همنامی • Scoping Rule • ذخیره اسامی در یک کتابخانه خارجی طراحی و پیاده سازی زبان های برنامه سازی
تست و اشکال زدایی • ویژگیهای ردیابی اجرا • برچسب زدن دستورات و متغیر های خارجی برای ردیابی • نقاط کنترلی • کنترل برنامه به کاربر برمی گردد • ادعا • بررسی شرایط در نقطه مورد نظر • assert (x>0 and A=0) or (X=0 and A>B+10) طراحی و پیاده سازی زبان های برنامه سازی
1-4- محیط های برنامه نویسی(ادامه) b) محیط های کاری • محیط کاری ، خدماتی مثل ذخیره داده ها ، رابط گرافیکی کاربر، امنیت و خدمات ارتباطی را فراهم می کند. • طراحی زبان ها برای استفاده از این امکانات طراحی و پیاده سازی زبان های برنامه سازی
1-4- محیط های برنامه نویسی(ادامه) c) زبانهای کنترل کار و فرآیند • مفهوم کنترل کار به چارچوبهای محیط برمی گردد. • کاربر کنترل مستقیم بر روی مراحل مختلف برنامه دارد. • کد برگشتی در دهه 1960 • یونیکس طراحی و پیاده سازی زبان های برنامه سازی
کار در خانه1. دلایل موفقیت زبان برنامه نویسی c را پیدا کنید .2. یک زبان برنامه سازی استاندارد را انتخاب کرده و یکی از ویژگی هایی از آنها که در نسخه های بعدی آن حذف می شوند را پیدا کنید .3. زبان های برنامه سازی مخصوص کاربرد های زیر را پیدا کنید .ربات ها ، بازی ها ، برنامه های گرافیکی ،زبان برنامه نویسی جدید طراحی و پیاده سازی زبان های برنامه سازی
باز باران ... موفق و پیروز باشید