Кіріспе
Eiffel – Бертран Мейер (объектіге бағытталған бағдарламалық жасақтама құрастырушы және авторы) және Eiffel Software компаниясы жасаған объектіге бағытталған бағдарламалау тілі. Мейер 1985 жылы коммерциялық бағдарламалық жасақтаманың сенімділігін арттыру мақсатымен осы тілді ойлап тапты, алғашқы нұсқасы 1986 жылы қолжетімді болды. 2005 жылы Eiffel ISO стандарты ретінде қабылданды. Тілдің дизайны Eiffel бағдарламалау әдісімен тығыз байланысты. Екеуі де қағидалар жиынтығына негізделген, оның ішінде келісімшарт бойынша жобалау, команда-сұраныс ажырату, бірыңғай қолжетімділік принципі, жалғыз таңдау принципі, ашық-жабық принципі және опция-оператор ажырату қағидалары кіреді. Eiffel тілінде алғаш рет енгізілген көптеген түсініктер кейін Java, C# және басқа тілдерге енгізілді. Ecma/ISO стандарттау процесі арқылы, әсіресе жаңа тілдік дизайн идеялары Eiffel тіліне үнемі қосылып келеді.
Eiffel is an object oriented programming language designed by Bertrand Meyer (an object orientation proponent and author of Object Oriented Software Construction) and Eiffel Software. Meyer conceived the language in 1985 with the goal of increasing the reliability of commercial software development; the first version becoming available in 1986. In 2005, Eiffel became an ISO standardized language. The design of the language is closely connected with the Eiffel programming method. Both are based on a set of principles, including design by contract, command–query separation, the uniform access principle, the single choice principle, the open–closed principle, and option–operand separation. Many concepts initially introduced by Eiffel later found their way into Java, C#, and other languages. New language design ideas, particularly through the Ecma/ISO standardization process, continue to be incorporated into the Eiffel language.
Жобалау мақсаттары
Эйфель декларативтік түсініктемелерді процедуралық кодтан басым тұтады және есепке алу нұсқауларының қажеттілігін жоюға тырысады. Эйфель компиляторға оптимизациялық кеңес ретінде кодтау айлаларын немесе әдістерін пайдаланудан қашып жүреді. Мақсат – кодты оқуды ғана емес, сонымен қатар бағдарламашыларға орындалу егжей-тегжейіне батып кетпестен бағдарламаның маңызды аспектілеріне назар аударуға мүмкіндік беру. Эйфельдің қарапайымдылығы есептеу мәселелеріне қарапайым, кеңейтілген, қайта пайдаланылатын және сенімді жауаптарды қолдануға бағытталған. Эйфель тілінде жазылған компьютерлік бағдарламаларға арналған компиляторлар автоматты түрде ішкі қосылу сияқты кең ауқымды оптимизациялық техникаларды ұсынады, бұл бағдарламашыны оптимизациялау жұмысының бір бөлігінен босатады.
Өмірбаян
Eiffel бастапқыда Бертран Мейер құрған Eiffel Software компаниясымен әзірленген. Объектіге бағытталған бағдарламалық құрылым Эйфельдің дизайнына әкелген объектілік технологияның ұғымдары мен теориясын толыққанды қарастырады. Eiffel тілінің, кітапханаларының және бағдарламалау әдістерінің негізгі мақсаты – бағдарламашыларға сенімді, қайта пайдалануға болатын бағдарламалық модульдер жасауға мүмкіндік беру. Eiffel көптеген мұрагерлік, жалпыламалық, полиморфизм, инкапсуляция, қауіпсіз түрлендірулер және параметрлік коварианттылықты қолдайды. Eiffel бағдарламалық инженерияға жасаған ең маңызды үлесі – келісімшарт бойынша жобалау (DbC), онда бағдарламаның дұрыстығын тиімділіктен айырмай, қамтамасыз етуге көмектесетін талаптар, алғышарттар, кейінгі шарттар және класс инварианттары қолданылады. Eiffel дизайны объектіге бағытталған бағдарламалау теориясына негізделген, басқа парадигмалардың ықпалы шамалы және ескі кодты қолдау туралы мәселе қарастырылмайды. Eiffel формальды түрде абстрактілі дерек түрлерін қолдайды. Eiffel дизайны бойынша бағдарламалық мәтін өзінің жобалау құжаттамасын, "Абстрактілі дерек түрінің" формальды іске асырылуын пайдаланып, мәтіннің өзінен қайта жасай алуы керек.
Орындаулар мен орталар
EiffelStudio — ашық кодты немесе коммерциялық лицензия бойынша қолжетімді интеграцияланған даму ортасы. Ол бағдарламалық жасақтаманы жасау үшін объектіге бағытталған ортаны ұсынады. EiffelEnvision — Microsoft Visual Studio үшін плагин, ол пайдаланушыларға Microsoft Visual Studio IDE ішінде Eiffel жобаларын өңдеуге, компиляциялауға және түзетуге мүмкіндік береді. Тағы бес ашық кодты іске асырылым бар: "The Eiffel Compiler" (tecomp); Gobo Eiffel; SmartEiffel, GNU іске асырылымы, тілдің ескі нұсқасына негізделген; LibertyEiffel, SmartEiffel компиляторына негізделген; және Visual Eiffel. Басқа бірнеше бағдарламалау тілдері де алғаш рет Eiffel-де енгізілген элементтерді қамтиды. Мысалы, Sather бастапқыда Eiffel-ге негізделген, бірақ содан бері өздігінен дамып, қазір функционалдық бағдарламалау мүмкіндіктерін де қамтиды. BlueJ-дің алдағысы болған интерактивті оқыту тілі Blue де Eiffel-ге негізделген. Apple Media Tool құрамына Eiffel-ге негізделген Apple Media Language кіреді.
Жалпы құрылым
Эйфель "жүйесі" немесе "бағдарламасы" – кластардың жиынтығы. Кластар деңгейінен жоғары Эйфель кластерді анықтайды, ол негізінен сыныптар тобы және мүмкін субкластерлер (ішкі кластерлер). Кластерлер синтаксистік тіл құрылымы емес, стандартты ұйымдастыру ережесі. Әдетте, Эйфель бағдарламасы әр сыныпты жеке файлда, ал әр кластерді сынып файлдарын қамтитын каталогта ұйымдастырады. Осындай ұйымдастыруда субкластерлер – кіші каталогтар болып табылады. Мысалы, стандартты ұйымдастыру және атау конвенциялары бойынша, x.e – X деп аталатын сыныпты анықтайтын файлдың атауы болуы мүмкін. Сыныптың ішінде басқа объектіге бағытталған бағдарламалау тілдеріндегі "әдіс", "мүше", "атрибут" немесе "қызмет" сияқты мүмкіндіктер болады. Сынып сонымен қатар өз инварианттарын анықтайды және құжаттама мен метадеректер үшін "ескертпелер" бөлімі сияқты басқа қасиеттерді қамтиды. Эйфельдің INTEGER, STRING және ARRAY сияқты стандартты дерек түрлерінің өзі кластар болып табылады. Кез келген жүйеде "root" деп аталатын сынып болуы керек, оның бірінші құру процедурасы "root procedure" деп аталады. Жүйені орындау – тамыр сыныбының инстанциясын құрудан және оның тамыр процедурасын орындаудан тұрады. Әдетте, бұл жаңа объектілерді құруға, жаңа мүмкіндіктерді шақыруға және т.б. әкеледі. Эйфельдің бес негізгі орындалатын нұсқауы бар: тапсырма, объект құру, әдіс шақыру, шарт және итерация. Эйфельдің басқару құрылымдары құрылымдық бағдарламалауды қатаң түрде сақтайды: әрбір блокқа дәл бір кіріс және дәл бір шығыс болады.
Қасиеттері: командалар мен сұраныстар
Сыныптың ерекшелігі – ол белгілер жиынтығын анықтайды: сынып орындалу кезіндегі объектілер, яғни "инстанциялар" жиынтығын көрсетеді, ал белгі – осы объектілермен жасалатын операция. Белгілердің екі түрі бар: сұраулар және командалар. Сұрау инстанция туралы мәлімет береді. Команда инстанцияны өзгертеді. Команда мен сұраудың аражігі Эйфель әдісі үшін маңызды. Атап айтқанда:
Бірыңғай қолжетімділік қағидасы: бағдарламалық клиент сыныптың белгісіне шақыру жасағанда, сұрау атрибут (дала мәні) ме, әлде функция (есептелген мән) ме, ешқандай рөл атпауы керек. Мысалы, көліктің. жылдамдығы – көлік объектісіндегі атрибутқа тікелей қолжетімділік болуы мүмкін, немесе ол қашықтықты уақытқа бөлетін функция арқылы есептелуі мүмкін. Екі жағдайда да жазу форматы бірдей болғандықтан, клиенттік бағдарламаға әсер етпей, сыныптың іске асырылуын өзгерту оңай. Команда мен сұрауды ажырату қағидасы: Сұраулар инстанцияны өзгерте алмайды. Бұл тілдік ереже емес, әдістемелік принцип. Сондықтан, жақсы Эйфель стилінде, бір нәрсені өзгертіп, нәтиже қайтаратын "алу" функцияларына тап болмайсыз; керісінше, объектілерді өзгерту үшін командалар (процедуралар), ал объекті туралы ақпарат алу үшін – сұраулар қолданылады, бұл ақпарат алдыңғы өзгерістердің нәтижесінде алынады.
Ашығу
Эйфель аргументтерді артық жүктеуге рұқсат етпейді. Сынып ішіндегі әрбір мүмкіндік атауы әрқашан сынып ішіндегі нақты бір мүмкіндікке сәйкес келеді. Бір сыныптың ішінде бір атау – бір ғана нәрсені білдіреді. Бұл дизайндық шешім сыныптарды оқуға қолайлы етуге көмектеседі, себебі шақырылғанда қай процедура шақырылатыны туралы күмәнділікті болдырмайды. Бұл сонымен қатар тілдің механизмін жеңілдетеді; әсіресе, Эйфельдің көптеген мұрагерлік механизмін мүмкін ететін де осы. Әрине, атауларды әртүрлі сыныптарда қайта пайдалануға болады. Мысалы, белгі (оның инфикс псевдонимімен бірге) бірнеше сыныптарда анықталған: , , , және т.б.
Кейінгі сыныптар мен ерекшеліктер
Сыныптарды тікелей құрастыруға болмайтынын көрсету үшін "сынып" емес, "кейінге қалдырылған сынып" арқылы анықтауға болады. Құрастырылмайтын сыныптар басқа объектіге бағытталған бағдарламалау тілдерінде абстрактты сыныптар деп аталады. Эйфель тілінде тек "іске асырылған" сыныпты ғана құрастыруға болады (ол кейінге қалдырылған сыныптың мұрагері болуы мүмкін). Белгілі бір мүмкіндікті "do" сөйлемінің орнына "deferred" кілт сөзін қолдану арқылы кейінге қалдыруға болады. Егер сыныпта кейінге қалдырылған мүмкіндіктер болса, ол кейінге қалдырылған деп жариялануы керек; алайда, кейінге қалдырылған мүмкіндіктері жоқ сыныптың өзі де кейінге қалдырылуы мүмкін. Кейінге қалдырылған сыныптар Java сияқты тілдердегі интерфейстермен ұқсас рөл атқарады, бірақ көптеген объектіге бағытталған бағдарламалау теориялықтары интерфейстердің өзі Java-ның көп мұрагерлік қажеттілігіне жауап екенін санайды (Эйфельде бар).
Атауын өзгерту
Бір немесе бірнеше басқа сыныптан мұрагерлік алған сынып, олардың барлық мүмкіндіктерін бастапқы аттарымен әдепкі бойынша алады. Дегенмен, ол атауларды өзгерту шарттары арқылы оларды өзгерте алады. Егер мұраға алынған мүмкіндіктердің аттары қақтығыс тудырса, көп мұрагерлік жағдайында бұл қажетті болады; атауын өзгертусіз, нәтижедегі сынып жоғарыда айтылған қайта жүктеме принципін бұзып, жарамсыз болады.
Бір мезгілде жұмыс істеу
Бірқатар желілік және жіптік кітапханалар бар, мысалы EiffelNet және EiffelThreads. Келісімшарт бойынша жобалау принциптеріне негізделген Eiffel үшін бір мезгілдестік моделі – SCOOP, яки қарапайым бір мезгілде объектіге бағытталған бағдарламалау, ол әлі ресми тіл анықтамасының бөлігі емес, бірақ EiffelStudio-да қолжетімді. CAMEO – Eiffel үшін SCOOP-тың (іске асырылмаған) түрі. Бір мезгілдестік қателермен де байланыс бар. Асинхронды қателер қиындық тудыруы мүмкін (бір процедура шақырушысы өзі аяқталғаннан кейін қате шығарып жіберген жағдайда).
Басқа құралдар мен тілдерге арналған интерфейстер
Eiffel – таза объектіге бағытталған тіл, бірақ кез келген басқа бағдарламалау тіліндегі «сыртқы» бағдарламалық қамтамасымен байланыс құру үшін ашық архитектураны ұсынады. Мысалы, машина және операциялық жүйе деңгейіндегі операцияларды C тілінде бағдарламалауға болады. Eiffel, C процедураларына тікелей интерфейс ұсынады, соның ішінде «инлайн C» қолдауын қамтиды (әдетте қысқа машина деңгейіндегі операциялар үшін Eiffel процедурасының денесін C тілінде жазу). Eiffel мен C арасында тікелей байланыс болмаса да, көптеген Eiffel компиляторлары (Visual Eiffel – бұл бір ерекшелік) C бастапқы кодын аралық тіл ретінде шығарады, оны C компиляторына беру үшін оңтайландыру және тасымалдау мақсатында пайдаланады. Олар транскомпиляторлардың мысалы болып табылады. Eiffel компиляторы tecomp, Eiffel кодын тікелей орындай алады (тәржімалағыш сияқты), аралық C коды арқылы өтпей немесе C кодын шығарады, ол C компиляторына жіберіліп, оңтайландырылған түпкі кодты алуға мүмкіндік береді. .NET платформасында EiffelStudio компиляторы тікелей CIL (Common Intermediate Language) кодын жасайды. SmartEiffel компиляторы Java байт-кодын шығара алады.