• کامپایل فرآیندی است که ارتباط بین برنامه نویس و کامپیوتر را تسهیل می کند. کامپایل زبان های برنامه نویسی

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

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

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

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

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

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

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

    کامپایلر انعطاف پذیر بر اساس ماژولار توسعه یافته است. مدیریت آن توسط جداول انجام می شود. به یک زبان سطح بالا برنامه ریزی شده است. پیاده سازی آن با استفاده از کامپایلر نیز امکان پذیر است.

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

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

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

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

    کامپایلر مقیم یک مکان دائمی در RAM دارد و برای استفاده مجدد توسط طیف وسیعی از وظایف در دسترس است.

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

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

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

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

    یادداشت های عمومی برای مترجمان

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

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

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

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

    کامپایلریک برنامه زبان مبدأ را به عنوان ورودی خود می گیرد و برنامه ای را به زبان شی تولید می کند که ماشین آن را درک می کند.

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



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

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

    زبان های برنامه نویسی در سطوح بالا و پایین وجود دارند.

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

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


    1 - وابسته به ماشین (Assembler). زبان های سطح پایین

    2 - ماشین گرا (C)

    3 - جهانی (فرترن، پاسکال، پایه)

    4 - مشکل گرا (GPSS، لوگو، شی گرا (Fort، Smalltalk))

    5،6،7 - (پرولوگ، لیسپ، اسنوبول).

    C، C++ - کل بخش وابسته به ماشین برنامه به راحتی بومی سازی شده و زمانی که برنامه به معماری دیگری منتقل می شود، تغییر می یابد.

    فرترن - اولین زبان سطح بالا (1958، IBM)، هنوز هم امروزه مورد استفاده قرار می گیرد، از برنامه نویسی مدولار پشتیبانی می کند، به ویژه توسط ریاضیدانان ترجیح داده می شود.

    پاسکال - یکی از محبوب ترین ها برای اهداف آموزشی (N. Wirth)، اکثر ایده های برنامه نویسی ساخت یافته را پیاده سازی می کند.

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

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

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

    اسمال تاک - یکی از OO PL اولیه، طراحی اصلی یک شی و اقدامات با آن است، که برای کارهای غیر عددی (هنگام ساختن سیستم ها) طراحی شده است. هوش مصنوعی).

    دژ – در حل مسائل مدل سازی شبیه سازی در سیستم های گرافیکی استفاده می شود.

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

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

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

    اسنوبول - زبان هوش مصنوعی

    نسل های زبان برنامه نویسی

    همه زبان های برنامه نویسی معمولاً به 5 نسل تقسیم می شوند.

    1. اوایل دهه 50. اولین کامپیوترها و اولین زبان های اسمبلی ظاهر شدند که در آنها برنامه نویسی طبق اصل "یک دستورالعمل - یک خط" انجام شد.

    2. اواخر دهه 50 اوایل دهه 60. یک اسمبلر نمادین ایجاد شد که در آن مفهوم یک متغیر ظاهر شد. سرعت توسعه و قابلیت اطمینان برنامه ها افزایش یافته است.

    3. دهه 60. تولد زبان های سطح بالا. سادگی برنامه نویسی، استقلال از یک کامپیوتر خاص، ساختارهای جدید زبان قدرتمند.

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

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

    در موسسه ما، در دوره های مختلف، نحوه برنامه نویسی را خواهید آموخت زبان های مختلفبرنامه نويسي.

    انواع کامپایلر

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

    انواع تالیف

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

    ساختار کامپایلر

    فرآیند جمع آوری شامل مراحل زیر است:

    1. تحلیل واژگانی. در این مرحله، دنباله کاراکترهای فایل منبع به دنباله ای از نشانه ها تبدیل می شود.
    2. تحلیل نحوی (گرامری). دنباله توکن ها به درخت تجزیه تبدیل می شود.
    3. تحلیل معنایی درخت تجزیه به منظور ایجاد معناشناسی (معنا) آن پردازش می‌شود - به عنوان مثال، شناسه‌های الزام‌آور به اعلان‌ها، انواع، بررسی‌های سازگاری، تعیین انواع عبارت، و غیره. نتیجه معمولاً «نمایش/کد میانی» نامیده می‌شود و ممکن است با یک درخت تجزیه، یک درخت جدید، مجموعه ای انتزاعی از دستورات، یا چیز دیگری که برای پردازش بیشتر مناسب است، تقویت شود.
    4. بهينه سازي. ساختارهای اضافی حذف می شوند و کد با حفظ معنای خود ساده می شوند. بهینه سازی می تواند در سطوح و مراحل مختلف باشد - به عنوان مثال، روی کد میانی یا روی کد نهایی ماشین.
    5. تولید کد از نمایش میانی، کد در زبان مقصد تولید می شود.

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

    تولید کد

    تولید کد ماشین

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

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

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

    تولید بایت کد

    نتیجه کار کامپایلر می تواند یک برنامه در یک زبان سطح پایین ایجاد شده خاص باشد که قابل تفسیر است. ماشین مجازی. به چنین زبانی شبه کد یا بایت کد می گویند. به عنوان یک قاعده، این کد ماشین هیچ کامپیوتری نیست و برنامه‌های روی آن را می‌توان در معماری‌های مختلف، در جایی که مناسب وجود دارد، اجرا کرد. ماشین مجازی، اما در برخی موارد، پلتفرم های سخت افزاری ایجاد می شوند که به طور مستقیم از شبه کد هر زبانی پشتیبانی می کنند. به عنوان مثال، شبه کد زبان جاوابایت کد جاوا نامیده می شود و در ماشین مجازی جاوا اجرا می شود، مشخصات پردازنده picoJava برای اجرای مستقیم آن ایجاد شده است. برای فریم ورک دات نت، شبه کد Common Intermediate Language (CIL) و زمان اجرا Common Language Runtime (CLR) نامیده می شود.

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

    کامپایل پویا

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

    کد CIL همچنین توسط کامپایلر JIT برای کد ماشین مورد نظر کامپایل می شود، در حالی که کتابخانه های .NET Framework از پیش کامپایل شده اند.

    کامپایل کردن

    برنامه هایی وجود دارند که مشکل معکوس را حل می کنند - ترجمه یک برنامه از زبان سطح پایینبه سطح بالا به این فرآیند Decompilation می گویند و به این گونه برنامه ها Decompiler می گویند. اما از آنجایی که کامپایل یک فرآیند با ضرر است، معمولاً نمی‌توان کد منبع را دقیقاً در C++ بازیابی کرد. برنامه های موجود در بایت کدها با کارایی بیشتری دکامپایل می شوند - به عنوان مثال، یک دیکامپایلر نسبتا قابل اعتماد برای Flash وجود دارد. یکی از انواع دیکامپایل، جداسازی کد ماشین به کد زبان اسمبلی است که تقریباً همیشه با موفقیت همراه است (در این مورد، پیچیدگی ممکن است کد خودتغییر یا کدی باشد که در آن کد و داده واقعی از هم جدا نشده اند). این به دلیل این واقعیت است که تقریباً یک به یک مطابقت بین کدهای دستورالعمل ماشین و دستورالعمل های اسمبلر وجود دارد.

    تالیف جداگانه

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

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

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

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

    همچنین ببینید

    یادداشت

    ادبیات

    • آلفرد دبلیو آهو، مونیکا اس. لام، راوی ستی، جفری دی اولمن. Compilers: Principles, Techniques, and Tools = Compilers: Principles, Techniques, and Tools. - ویرایش دوم - M.: ویلیامز، 2010. - 1184 ص. - شابک 978-5-8459-1349-4
    • رابین هانتر.مفاهیم اولیه کامپایلر = ذات کامپایلرها. - M.: ویلیامز، 2002. - 256 ص. - شابک 0-13-727835-7
    • هانتر آر.طراحی و ساخت کامپایلر / Per. از انگلیسی. S. M. Krugovoi. - م .: امور مالی و آمار، 1984. - 232 ص.
    • دی. کرنشاو.بیایید یک کامپایلر بسازیم!
    • Serebryakov V. A.، Galochkin M. P.اصول طراحی کامپایلر

    بنیاد ویکی مدیا 2010 .

    مترادف ها:

    ببینید «کامپایلر» در فرهنگ‌های دیگر چیست:

      - (لات جدید، از لات. compilare to rob, rob, انتخاب). گردآورنده مقاله یا کتاب با به امانت گرفتن فرازهایی از نوشته های نویسندگان مختلف. فرهنگ لغات کلمات خارجی موجود در زبان روسی. Chudinov A.N., 1910. کامپایلر ... ... فرهنگ لغت کلمات خارجی زبان روسی

      رجوع به نویسنده ... فرهنگ مترادف روسی و عبارات مشابه در معنی. زیر. ویرایش N. Abramova، M.: لغت نامه های روسی، 1999. گردآورنده، نویسنده، نویسنده. مترجم، هک، برنامه فرهنگ لغت مترادف روسی ... فرهنگ لغت مترادف

      برنامه ای که متن نوشته شده با یک زبان الگوریتمی را به برنامه ای متشکل از دستورالعمل های ماشین تبدیل می کند. کامپایلر یک نسخه کامل از برنامه را به زبان ماشین ایجاد می کند. همچنین ببینید: مترجمین فرهنگ لغت مالی فینام ... واژگان مالی

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

      کامپایلر، کامپایلر، مرد. (کتاب). نویسنده کامپایلر. || نویسنده ای که قادر به نوشتن فقط تالیف (منفی) باشد. کامپایلر ضعیف فرهنگ لغتاوشاکوف. D.N. اوشاکوف. 1935 1940 ... فرهنگ لغت توضیحی اوشاکوف

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

    تلفیقی!

    کامپایل به پردازش فایل‌های کد منبع (c، .cc یا cpp.) و ایجاد فایل‌های شی پروژه اشاره دارد. این مرحله فایل اجرایی ایجاد نمی کند. در عوض، کامپایلر به سادگی کدهای سطح بالا را به زبان ماشین ترجمه می کند. به عنوان مثال، اگر سه را ایجاد کردید (اما پیوند ندادید). فایل های فردی، در طول کامپایل سه فایل شی به عنوان خروجی تولید خواهید کرد. پسوند چنین فایل هایی به کامپایلر شما بستگی دارد، مانند *.obj یا *.o. هر یک از این فایل ها حاوی دستورالعمل های ماشینی هستند که معادل کد منبع هستند. اما شما نمی توانید این فایل ها را اجرا کنید! قبل از استفاده باید آنها را به فایل های اجرایی سیستم عامل تبدیل کنید. اینجاست که پیوند دهنده وارد عمل می شود.

    چیدمان!

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

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

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

    به دلیل تقسیم فرآیند ساخت یک پروژه به مراحل تدوین و پیوند وجود دارد.

    این دو مرحله به دقت انجام می شود و نیازی نیست نگران این باشید که کدام فایل ها تغییر کرده اند. IDE تصمیم می گیرد که چه زمانی اشیاء فایل ایجاد کند و چه زمانی نه.

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

    ترجمه، تالیف و تفسیر

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

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

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

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

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

    هنگام کار با برنامه ها، مراحل زیر وجود دارد:
    الف) تالیف
    ب) چیدمان
    ج) تفاسیر
    د) اجرای برنامه
    ایجاد یک فایل اجرایی از کد منبع برنامه شامل انجام مراحل a و b (کامپایل و پیوند) است.

    قابل اجرافایلی است که می تواند توسط کامپیوتر بدون ترجمه قبلی پردازش یا اجرا شود. به طور معمول، یک فایل اجرایی نتیجه کامپایل و پیوند ماژول های شی است و حاوی دستورالعمل های ماشین و/یا سیستم عامل است.

    مترجمبرنامه را به صورت دستور به فرمان تجزیه و تحلیل و بلافاصله اجرا می کند، زیرا کد منبع آن به ورودی مفسر می رسد.
    الگوریتم یک مفسر ساده: 1) دستورالعمل ها را بخوانید.
    2) دستورالعمل را تجزیه و تحلیل کنید و اقدامات مناسب را تعیین کنید.
    3) اقدام مناسب
    4) اگر به شرط خاتمه برنامه نرسید، بخوانید زیر دستورالعملو به مرحله 2 بروید.

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

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

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

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

    تفسیر و تألیف اجازه تغییر نمی دهد نحو زبان- مجموعه ای از قوانین برای ساخت عبارات در یک زبان الگوریتمی که به شما امکان می دهد جملات معنی دار را در این زبان تعیین کنید.

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

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

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

    مراحل حل یک مشکل در کامپیوتر

    برای حل صحیح مشکل با استفاده از یک رویکرد خودکار در رایانه شخصی، لازم است مراحل خاصی از حل آن را طی کنید.
    1. رسمی سازی داده ها

    2. خلقت مدل ریاضی
    3. شرح تفصیلی الگوریتم (فلوچارت، متن)
    4. پیاده سازی در زبان برنامه نویسی
    5. اشکال زدایی برنامه
    6. تست برنامه
    7. تجزیه و تحلیل نتایج کار

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

    مفهوم یک الگوریتم و ویژگی های آن. الگوریتم بلوک دیاگرام

    هیچ تعریف واحدی از مفهوم "الگوریتم" وجود ندارد. ما یکی از تعاریف ممکن را ارائه می دهیم.

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

    پنج ویژگی مهم الگوریتم- گسستگی، محدود بودن، جبرگرایی، اثربخشی، شخصیت توده ای.

    گسستگی- هنگام اجرا، الگوریتم به دنباله ای محدود از اقدامات یا مراحل تقسیم می شود.

    تناهی (پایانه)- با داده های اولیه به درستی مشخص شده، الگوریتم باید کار خود را در تعداد محدودی از مراحل تکمیل کند.

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

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

    بهره وری(تمرکز بر به دست آوردن نتیجه مورد نظر) - الگوریتم باید با نتایج خاصی به پایان برسد.

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

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

    روش های نوشتن (نمایش) الگوریتم:

    - فرمولیک

    - کلامی

    - جدولی

    - استفاده از نمودارهای بلوکی

    - استفاده از برنامه

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

    راه های ارائه الگوریتم ها (دوباره):

    - کلامی (توضیح به زبان طبیعی انسان)

    - گرافیکی (به زبان فلوچارت)

    - با کمک نمادها زبان خاصطراحی برنامه های شبه کد

    – استفاده از نمودارهای HIPO

    - استفاده از جداول تصمیم گیری

    – استفاده از طرح ناسی- اشنایدرمن

    – استفاده از یکی از زبان های برنامه نویسی الگوریتمی

    قوانین ساخت الگوریتم به زبان فلوچارت:

    1. بلوک دیاگرام از بالا به پایین ساخته شده است.

    2. در هر بلوک دیاگرام، تنها یک عنصر مربوط به ابتدای الگوریتم، و یک عنصر مربوط به انتهای الگوریتم وجود دارد.

    3. از ابتدای بلوک دیاگرام تا هر عنصری باید حداقل یک مسیر وجود داشته باشد.

    4. باید حداقل یک مسیر از هر عنصر بلوک دیاگرام تا انتهای بلوک دیاگرام وجود داشته باشد.

    روش های اساسی فناوری مدرن برای طراحی الگوریتم ها.

    1. روش طراحی سازه. هر الگوریتمی را می توان از ترکیب سه ساختار اصلی ساخت: الگوریتم خطی(به دنبال)، الگوریتم انشعاب (چنگال) و الگوریتم چرخه ای (تکرار).

    2. روش طراحی از بالا به پایین. در ابتدا، توابع اصلی تعیین می شوند، سپس توابع ثانویه.

    3. روش جزئیات گام به گام.

    4. روش مدولاریته. یک ماژول یک قطعه منطقی متصل از یک برنامه است که یک عملکرد را انجام می دهد و از تعداد قابل پیش بینی مراحل تشکیل شده است.

    قبل از شروع طراحی بلوک دیاگرام، باید:

    1. نام داده های ورودی، نتایج میانی و خروجی را تعیین کنید.

    2. نامی برای برنامه اصلی و الگوریتم های کمکی بگذارید.

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

    حلقه زدن- بدنه حلقه اجرا می شود عدد بی نهایتیک بار.

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

    تکامل و طبقه بندی زبان های برنامه نویسی. مفاهیم اساسی زبان ها...

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

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

    هنگام محاسبه مقادیر عبارات، مهم است ترتیب عملیات ها. قوانین زیر اتخاذ شده است. اقدامات از چپ به راست به ترتیب اولویت زیر انجام می شود ( به ترتیب اولویت نزولی):

    1) اقدامات در پرانتز؛
    2) محاسبه توابع.
    3) نه؛
    4) *، /، DIV، MOD، AND.
    5) +، -، OR;
    6) =, <>, <, >, <=, >=.

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

    زبان برنامه نویسییک زبان مصنوعی است که دارد

    - تعداد محدودی از کلمات که معنی آنها برای مترجم روشن است

    (کلید واژه ها)

    - قوانین بسیار سختگیرانه برای نوشتن دستورات

    نحو زبان- مجموعه ای از قوانین برای ضبط دستورات

    معناشناسی زبان- معنای هر دستور و سایر ساختارهای زبان

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

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

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

    متغیر- یک ناحیه نامگذاری شده از حافظه که مقداری ارزش را ذخیره می کند.

    آرایه ها در همه استفاده می شوند زبان های مدرنبرنامه نويسي.

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

    برنامه- دنباله ای منطقی از دستورات لازم برای حل یک مشکل خاص.

    برنامه– یک الگوریتم نوشته شده در یک زبان برنامه نویسی.

    متن برنامه- توضیح کامل، کامل و دقیق از الگوریتم در یک زبان برنامه نویسی. سپس این متن برنامه توسط برنامه های کاربردی سرویس ویژه پردازش می شود که مترجم نامیده می شود.

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

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

    تست آلفا- آزمایش محصول نهایی بر روی وظایف ایجاد شده خاص.

    تست بتا- آزمایش نسخه آزمایشی رایگان محصول نرم افزار بر روی وظایف واقعی.

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

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

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

    تست رگرسیون. پس از ایجاد تغییرات در نسخه بعدی برنامه، تست های رگرسیون تأیید می کنند که تغییرات ایجاد شده بر عملکرد بقیه عملکرد برنامه تأثیری نداشته است. تست رگرسیون را می توان هم به صورت دستی و هم با ابزارهای اتوماسیون تست انجام داد.

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

      مقادیر فعلی متغیرها را بیابید. و متوجه شوید که برنامه در کدام مسیر اجرا می شد.

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

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

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

    Refactoring- فرآیند تغییر ساختار داخلی برنامه، بدون تأثیر بر رفتار خارجی آن و با هدف سهولت درک کار آن.

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

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

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

    زیربرنامه ها را می توان تودرتو کرد، به عنوان مثال، یک زیربرنامه را می توان نه تنها از آن فراخوانی کرد برنامه اصلی، بلکه از یک زیربرنامه دیگر. یک زیربرنامه می تواند خود را صدا بزند. این رویکرد نامیده می شود بازگشت.

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

    مدول- رویه، تابع، واحد، برنامه به عنوان یک کل - منطقی کامل است جزءبرنامه ها.

    زبان های برنامه نویسی رویه ای- آنهایی که استفاده از برنامه های فرعی امکان پذیر است.

    برنامه نویسی ساختاریافته- ساختار برنامه باید ساختار مسئله حل شده را منعکس کند تا الگوریتم حل به وضوح از متن منبع قابل مشاهده باشد. برای این منظور مفهوم زیربرنامه معرفی شده است.

    برنامه نویسی ساختاریافته- روش شناسی توسعه نرم افزار، که مبتنی بر نمایش برنامه در قالب ساختار سلسله مراتبی بلوک ها است. پیشنهاد شده در دهه 70 قرن بیستم توسط E. Dijkstroy، توسعه و تکمیل شده توسط N. Wirth.

    با توجه به این روش

    هر برنامه ای ساختاری است که از آن ساخته شده است سه نوعساختارهای اساسی:
      اجرای متوالی- اجرای واحد عملیات به ترتیبی که در متن برنامه نوشته شده است. شاخه- اجرای واحد یکی از دو یا چند عملیات، بسته به تحقق برخی از شرایط داده شده؛ چرخه- اجرای مکرر همان عملیات تا زمانی که برخی از شرایط داده شده (شرط ادامه چرخه) برآورده شود.

    در برنامه، ساختارهای اساسی را می توان به طور دلخواه در یکدیگر قرار داد، اما هیچ وسیله دیگری برای کنترل توالی عملیات ارائه نشده است.

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

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

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

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

    رویدادها می توانند باشند

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

    سیستمیک(به عنوان مثال، پیامی از یک تایمر در سیستم عامل ایجاد می شود)

    برنامه ای(تولید شده توسط برنامه، برای مثال، شما باید یک خطا را مدیریت کنید)

    استثنا- وضعیتی در برنامه یا سیستم عامل که نیاز به پاسخ فوری دارد، به عنوان مثال تقسیم بر 0.

    انواع برنامه نویسی

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

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

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

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

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

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

    زبان های برنامه نویسی رویه ای

    آدا (زبان همه منظوره)

    Basic (نسخه های Quick Basic تا Visual Basic)

    فرترن

    مدول-2

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

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

    زبان های سطح پایین- اسمبلر و ماکرو اسمبلر.

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

    زبان های نشانه گذاری استفاده می شودهر جا که خروجی متن فرمت شده مورد نیاز است: در تایپوگرافی (SGML، TeX، PostScript، PDF)، رابط های کاربریکامپیوترها (Microsoft Word، OpenOffice، troff)، وب جهانی (HTML، XHTML، XML، WML، VML، PGML، SVG).

    XML (زبان نشانه گذاری فرامتن) زبان نشانه گذاری استاندارد برای اسناد در شبکه جهانی وب است.

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

    جاوا. زبان شی گرابرنامه نويسي. ویژگی اصلیاین زبان نه به کد ماشین، بلکه به کد بایت کامپایل می‌شود، جایی که هر فرمان 1 بایت را اشغال می‌کند و در صورت وجود مفسر، می‌توان آن را روی هر ماشینی با هر سیستم عاملی اجرا کرد. این مترجمبه نام " ماشین مجازیجاوا". برنامه های جاوا را می توان از ماشینی به ماشین دیگر به عنوان کد منبع یا بایت کد منتقل کرد. از نظر محبوبیت، جاوا پس از Basic در رتبه دوم جهان قرار دارد.

    جاوااسکریپت- یک زبان برنامه نویسی که بر اساس زبان جاوا توسعه یافته و به عنوان بخشی از صفحات html به منظور افزایش کارایی سایت استفاده می شود.

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

    SQL(Structured Query Language) - زبان پرس و جوهای ساخت یافته. زبان پرس و جو ساختاریافته بر اساس جبر رابطه ای. این یک زبان دستکاری داده است که به شما امکان می دهد شرایط جستجوی اطلاعات را بدون مشخص کردن دنباله ای از اقدامات مورد نیاز برای دریافت پاسخ توصیف کنید. SQL ابزار استاندارد دسترسی به سرور پایگاه داده است. استاندارد SQL شامل اجزایی برای تعریف، اصلاح، اعتبارسنجی و حفاظت از داده ها است.

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

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

    سیستم های برنامه نویسی یکپارچه شامل

    · ویرایشگر متن

    کامپایلر

    ویرایشگر پیوند

    کتابخانه های تابع

    دیباگر (گام به گام)

    محیط های بصری برای طراحی سریع:

    پایه ای؛ مایکروسافت ویژوال بیسیک

    پاسکال؛ بورلند دلفی

    C++; Microsoft Visual C++

    جاوا بورلند جی بیلدر

    سی شارپ مایکروسافت ویژوال؟ Borland C# Builder

    معماری سیستم های نرم افزاری : برنامه مستقل(روی یک کامپیوتر کار می کند ) فایل-سرورمعماری، مشتری-سرورمعماری، چند پیوندیمعماری (توزیع توابع بین سرورهای متصل به صورت سری = پیوندها)، توزیع شده (برنامه ای به شکل مجموعه ای از اجزای قابل اجرا بر روی هر سرور متصل به شبکه).

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

    از نظر ISO 9126، کیفیت ( ابزارهای نرم افزاری) با در نظر گرفتن مولفه های زیر می توان به عنوان ویژگی تجمعی نرم افزار مورد مطالعه تعریف کرد:

      قابلیت اطمینان Maintainability عملی بودن کارایی تحرک عملکرد

    برنامه نویسی شی گرا

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

    کلاسیک نوع داده خاص است که شامل فیلدها، متدها و خصوصیات است.

    زمینه های- داده های کپسوله شده در کلاس

    خواص- مکانیزم ویژه ای که دسترسی به فیلدها را تنظیم می کند.

    مواد و روش ها- رویه ها و عملکردهای محصور شده در کلاس.

    کلاس ها بر اساس 3 اصل اساسی استکپسولاسیون، وراثت و چندشکلی نامیده می شود.

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

    وراثت– امکان ایجاد کلاس‌های جدید بر اساس کلاس موجود با ارث بردن تمام فیلدها، متدها و ویژگی‌های آن و افزودن کلاس‌های جدید. کلاسی که پیشینی ندارد کلاس پایه نامیده می شود.

    یک شینمونه ای از اجرای کلاس است.

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

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

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

    اگر کلاس پایه تعدادی ویژگی و متد برای پردازش لیست داده ها داشته باشد، همه فرزندان کلاس پایه این ویژگی ها و متدها را به ارث می برند، اما در عین حال می توانند ویژگی ها و روش های جدیدی برای پردازش داشته باشند.

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

    اصلی - مفهوم کلاس اصلی وجود ندارد.

    رویکرد شی گرا بر اساس مفهوم است سلسله مراتب طبقاتی.

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

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

    مدلی از یک برنامه در زبان برنامه نویسی ویژوال بیسیک توسعه داده شده است که تولید می کند اعداد تصادفیمطابق با قانون انتخاب شده و پارامترهای خاص. در توسعه یافته رابط کاربری گرافیکیبرنامه های مورد استفاده توسط _____ 9 _____ اشیاء بصری.

    در مجموع 9 شی مورد استفاده قرار می گیرد:
    2 شی "فیلد ورودی"،
    3 شی "کتیبه"،
    1 شیء لیست کشویی،
    1 شی انتخاب،
    1 شی "دکمه"،
    · 1 شی "فرم".

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

    از بین همه رویدادهای انتخاب شده، فقط رویه های "تغییر اندازه تصویر"، "تغییر کنتراست"، "تغییر روشنایی" ویژگی های شی تصویر را تغییر می دهند.

    یک برنامه با استفاده از روش شی گرا ایجاد شده است. دو شی در فرم وجود دارد: "دکمه" و "جعبه انتخاب". کنترل کننده رویداد کلیک دکمه برای تغییر ویژگی های بصری این اشیاء برنامه ریزی شده است. شکل اشیا و محل قرارگیری آنها را قبل و بعد از اجرای رویداد اعلام شده نشان می دهد. اگر فرض کنیم مختصات فضایی اشیا نیز ویژگی های بصری هستند، آنگاه ___ 7 ____ خواص بصری.

    شی Select Box خواص را تغییر داده است: موقعیت افقی و موقعیت عمودی، و همچنین وضعیت برچسب و انتخاب. شی Button دارای موقعیت افقی و عمودی و همچنین برچسب آن است.