ایفل (زبان برنامه‌نویسی)

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

## ویژگی
ویژگی‌های کلیدی از زبان ایفل عبارتند از:

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

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

برنامه‌نویسی عمومی محدود و غیراجباری

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

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

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

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

## اهداف طرح
**ایفل** بر اظهارات اخباری در مورد کد رویه و تلاش برای از بین بردن نیاز به دستورالعمل‌های حسابداری.
Eiffel shuns حقه‌های برنامه‌نویسی یا تکنیک‌های برنامه‌نویسی در نظر گرفته شده به عنوان نکات بهینه‌سازی برای کامپایلر. هدف این است که نه تنها به کد قابل خواندن است، اما همچنین به برنامه نویسان اجازه می‌دهد تا بر روی جنبه‌های مهم یک برنامه بدون نیاز به تمرکز در جزئیات پیاده‌سازی پرداخت. سادگی **ایفل** در نظر گرفته شده‌است برای ترویج پاسخ ساده، توسعه، قابل استفاده مجدد و قابل اعتماد است به مشکلات محاسبات پرداخت. کامپایلرها برای برنامه‌های کامپیوتری نوشته شده در **ایفل** ارائه تکنیک‌های بهینه‌سازی گسترده مانند خودکار در پوشش، که به از بین بردن برنامه‌نویس بخشی از بار بهینه‌سازی در حالی که تولید کد که کارایی قابل مقایسه است. کد زمینه **ایفل** نوشته شده توسط
**ایفل** نرم‌افزار، یک شرکت تأسیس شده توسط برتراند مایر شد. ساخت نرم‌افزار شیء گرا شامل یک درمان دقیق از مفاهیم و تئوری تکنولوژی شی که منجر به طراحی **ایفل** است.

Eiffel نوشته شده توسط **ایفل** نرم‌افزار، یک شرکت تأسیس شده توسط برتراند مایر شد. ساخت نرم‌افزار شیء گرا شامل یک درمان دقیق از مفاهیم و تئوری تکنولوژی شی که منجر به طراحی Eiffel

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

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

### پیاده‌سازی و محیط زیست
EiffelStudio یک محیط توسعه یکپارچه موجود در هر دو منبع باز یا یک مجوز تجاری است. این ارائه می‌دهد یک محیط شی گرا برای مهندسی نرم‌افزار می‌باشد. EiffelEnvision یک پلاگین در مایکروسافت ویژوال استودیو است که اجازه می‌دهد تا به کاربران برای ویرایش، کامپایل، و عیب یابی پروژه‌های انجام شده **ایفل** از درون مایکروسافت ویژوال استودیو IDE. EiffelStudio و EiffelEnvision برای استفاده غیر تجاری رایگان هستند. چهار پیاده‌سازی منبع باز در دسترس عبارتند از: «ایفل کامپایلر» tecomp, Gobo ایفل، SmartEiffel اجرای GNU، بر اساس نسخه قدیمی تر از زبان و ویژوال ایفل.

بسیاری از زبان‌های برنامه‌نویسی دیگر ترکیب عناصر برای اولین بار در **ایفل** معرفی شده‌است. Sather، به عنوان مثال، در اصل بر روی **ایفل** بر اساس، اما از آن زمان تاکنون انشعاب، و در حال حاضر شامل چندین ویژگی برنامه‌نویسی تابعی است. آموزش تعاملی زبان آبی، پیشرو از BlueJ، همچنین ایفل مبتنی بر. ابزار رسانه‌ای اپل شامل **ایفل** مبتنی بر زبان رسانه‌ای اپل است.

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

### مشخصات و استانداردها Eiffel
تعریف زبان استاندارد بین‌المللی ISO است. تحلیل، طراحی و برنامه‌نویسی زبان: این استاندارد توسط ECMA بین‌المللی، که برای اولین بار استاندارد در ۲۱ ژوئن سال ۲۰۰۵ به عنوان استاندارد تأیید شد و ECMA-367، **ایفل** توسعه داده شد. در ماه ژوئن سال ۲۰۰۶، ECMA و ISO را تصویب نسخه دوم است. در نوامبر ۲۰۰۶، ISO برای اولین بار منتشر شده که نسخه این استاندارد را می‌توان یافت.

ایفل نرم‌افزار را EiffelStudio 6.1 و «Eiffel کامپایلر» tecomp اجرای برخی از مکانیسم عمده جدید، خاص، عوامل درون خطی، دستورات assigner، نرم‌افزار Eiffel، «ایفل کامپایلر» tecomp و ایفل، کتابخانه، توسعه دهنده Gobo اند که به اجرای استاندارد متعهد علامت کروشه، ارث، غیر انطباق و انواع فایل‌های پیوست شده. تیم SmartEiffel دور از این استاندارد را تبدیل و به زبان نسخه خود، که آن‌ها باور دارند که نزدیک به سبک اصلی **ایفل** است. ابزارهای شی گرا که اعلام نشده، آیا نسخه‌های آینده از کامپایلر ایفل خود را منطبق با آن استاندارد ساخته‌اند.

مشخصات **ایفل** زبان این استاندارد به نقل از سلف به شرح زیر است:

برتراند مایر: Eiffel: زبان، شاگردی هال، چاپ دوم، ۱۹۹۲ (چاپ اول: ۱۹۹۱)
برتراند مایر: استاندارد ایفل (ویرایش‌های قبل از ورود)، در حال انجام، در حال حاضر ۱۹۹۷-در صفحه ETL3 برتراند مایر، و
برتراند مایر: ساخت نرم‌افزار شیء گرا، شاگردی هال: چاپ اول، ۱۹۸۸، چاپ دوم، ۱۹۹۷.
برتراند مایر: لمس کلاس: آموزش به برنامه با هدف و قراردادهای اسپرینگر ورلاگ، 2009  lxiv + ۸۷۶ صفحه کامل رنگ، چاپ، عکس‌های رنگی متعدد
نسخه فعلی استاندارد را از ژوئن سال ۲۰۰۶ شامل برخی از تناقضات (به عنوان مثال covariant redefinitions). کمیته ECMA هنوز رتبهدهی نشده‌است اعلام کرد هر گونه جدول زمانی و جهت در مورد چگونه به حل و فصل تناقضات است.

## نحو و معناشناسی
### ساختار کلی
Eiffel «سیستم» یا «برنامه» مجموعه‌ای از کلاس‌ها است. بالاتر از سطح کلاس، **ایفل** تعریف خوشه، که در اصل گروهی از کلاس‌ها، و احتمالاً از subclusters (خوشه‌های تودرتو). خوشه‌ها ساختار نحوی زبان، بلکه یک قرارداد استاندارد سازمانی نیست. به‌طور معمول یک برنامه **ایفل** با هر کلاس را در یک فایل جداگانه، و هر خوشه در یک دایرکتوری که شامل فایل‌های کلاس سازمان یافته‌است. در این سازمان، subclusters زیرشاخه هستند. به عنوان مثال، تحت کنوانسیون‌های سازمانی استاندارد و پوشش، XE ممکن است نام یک فایل است که تعریف یک کلاس fh نام X فراخوانی شود.

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

هر سیستم باید یک کلاس تعیین شده به عنوان «ریشه»، با یکی از روش‌های ایجاد آن به عنوان «روش ریشه» تعیین کند. اجرای سیستم شامل ایجاد یک نمونه از کلاس ریشه و اجرای روش ریشه‌ای آن است. به‌طور کلی، انجام این کار ایجاد اشیاء جدید، ویژگی‌های جدید را فرا می‌خواند، و به همین ترتیب.

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

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

some_attribute: SOME_TYPE assign set_some_attribute

  set_some_attribute (v: VALUE_TYPE)
  -- Set value of some_attribute to `v'.
  do
  some_attribute := v
  end

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

feature {NONE} -- Initialization
  default_create
  -- Initialize a new `zero' decimal instance.
  do
  make_zero
  end

بر خلاف زبان‌های دیگر، داشتن مفاهیم "public", "private" و به همین ترتیب، **ایفل** با استفاده از فناوری صادرات به کنترل دقیق تر هدف گذاری بین مشتری و کلاس تأمین می‌کند. علاوه بر این، منطق صادرات استفاده می‌شود می‌تواند به‌طور ایستا توسط کامپایلر، که اجازه می‌دهد تا تشخیص قبل از دامنه نقض تماس در زمان کامپایل به جای زمان اجرا بررسی می‌شود. به عنوان مثال (در زیر)، شبیه به "خصوصی" را در زبان‌های دیگر. در محدوده اعمال این راه به "مجموعه‌ای از ویژگی های" (به عنوان مثال همه چیز را زیر `ویژگی" کلمه کلیدی برای دو بعدی یا مجموعه‌ای از ویژگی‌های کلید واژه پایان کلاس) را می‌توان در کلاس نسل با استفاده از کلید واژه "صادرات" تغییر کرد.
متناوباً، عدماعلامیه صادرات {X} به معنی {هر} و شبیه به " public" هدف گذاری از زبان‌های دیگر است.
feature—Constants

در نهایت، هدف گذاری انتخابی می‌تواند دقیقاً در جهان پروژه ایفل باشد و، مانند هر کلاس کنترل است.
در اینجا، کامپایلر به شما این امکان را می‌دهد که تنها کلاس‌های ذکر شده بینآکولاد برای دسترسی به ویژگی‌های موجود در گروه ویژگی (مثلاً اعشاری، DCM_MA_DECIMAL_PARSER, DCM_MA_DECIMAL_HANDLER) استفاده کنید.

## جستارهای وابسته

## منابع

* 

رده:برنامه‌نویسی شیءگرا
رده:زبان‌های برنامه‌نویسی ساخته‌شده در ۱۹۸۶ (میلادی)
رده:زبان‌های برنامه‌نویسی ساخته‌شده در دهه ۱۹۸۰ (میلادی)
رده:زبان‌های برنامه‌نویسی شیءگرا
رده:زبان‌های برنامه‌نویسی کلاس محور
رده:زبان‌های توصیف صوری
رده:مقاله‌های نیازمند پیوند
رده:زبان‌های برنامه‌نویسی دارای استاندارد ایزو
رده:زبان‌های برنامه‌نویسی ایستا