«Մասնակից:MHamlet/Սևագրություն/5»–ի խմբագրումների տարբերություն

Content deleted Content added
No edit summary
No edit summary
 
Տող 10.
|publisher=Oracle |date=1999-01-01 |accessdate=2013-01-14
}}</ref>։ Եվ նա այդ հանձնարարությունը կարողանում է կատարել։ С++֊ը, իր հերթին, ցանկանում է ունենալ «բազմակողմանի կիրառություն» ծրագրավորողների բոլոր կատեգորիաների բոլոր հանձնարարություններում, սակայն չի լիովին բավարարում հայտարարված կիրառման ոչ մի ոլորտների պահանջներին:
; Ծրագրի կատարումը : JavaJava֊ն имеетունի формальнуюֆորմալ семантикуշարահյուսություն, ориентированнуюորն наկողմնորոշված интерпретациюէ ինտերպրետացիայի համար, ноսակայն кодJava֊ով Javaգրված компилируетсяկոդը вկոմպիլյացվում է [[промежуточныйմիջանկյալ кодկոդ]]ի, которыйորն ծրագրի [[JIT|непосредственноանմիջապես передգործարկումից запускомառաջ]] программыկոմպիլյացվում компилируетсяէ в машинныйմեքենայականի (иногдаհաճախ говорятխոսում обեն интерпретацииբայթ֊կոդի байт-кодаինտերպրետացիայի մաիսն, ноսակայն вտվյալ данномդեպքում случаеդա этоճիշտ неверно —չէ․ уJava֊ի современныхժամանակակից наиболееառավել распространённыхտարածված средկատարման исполненияմիջավայրերում Javaթարգմանության երկու обаփուլերն этапаէլ трансляцииհամարվում являютсяեն полностадийнымиամբողջաթուլային, не ограничиваясь работой в рамкахչսահմանափակվելով [[AST]],֊ի сշրջանակներում соответствующимաշխատանքներով, հնարավորությունների сужениемհամապատասխան возможностейսահմանափակմամբ).։ C++֊ն имеетունի естественнуюճշտգրիտ семантикуշարահյուսություն, ориентированнуюորն наկողմնորոշված компиляцию,է такկոմպիլյացման чтоհամար, ужеայնպես наոր аппаратнойարդեն սարքային Java-машинеմեքենայի վրա был бы крайне неэффективен и ограничен по возможностям. Одно это определяет разницу в сферах применения языков: Java нецелесообразно использовать в низкоуровневом программировании; С++ — в разработке интернет-приложений. Механизм исполнения Java делает программы полностью портируемыми, по принципу «''написано один раз — запускается везде (write once — run everywhere)''», хотя это не было первостепенной целью разработчиков. Стандартное окружение и среда исполнения позволяют выполнять программы на Java на любой аппаратной платформе и в любой ОС без каких-либо изменений, при условии существования на данной ОС и платформе среды исполнения. Усилия по портированию программ минимальны, и могут быть сведены к нулю соблюдением определённых рекомендаций при разработке. Ценой портируемости в данном случае становятся определённые накладные расходы (например, размер среды исполнения Java превышает даже их размеры у всех функциональных языков).<!-- и не надо тут писать про невозможность использования платформенно-зависимых библиотек - раз портируемость стоит в числе приоритетов, то ни о каких DirectX-ах не может идти и речи по определению! -->
; Парадигма программирования : Java в значительно более высокой степени, чем С++, отвечает фундаментальному принципу ООП «''всё — объект''» (но не в абсолютной — методы классов самостоятельными объектами не являются, в отличие от [[CLOS]] или [[Python (язык программирования)|Python]]). Для объявления глобальных функций или переменных в Java их необходимо оборачивать в фиктивные классы и назначать свойство статичности<ref>[http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html Class Arrays, JavaTM 2 Platform Std. Ed. v1.4.2]</ref>. Для задания главной функции даже самой простой программы на Java необходимо поместить её в класс<ref>[http://java.sun.com/docs/books/tutorial/getStarted/application/index.html The Java Tutorials. A Closer Look at the «Hello World!» Application]</ref>. Программировать на Java в функциональном стиле затруднено{{нет АИ|31|08|2013}}<!-- Вообще-то оно НЕВОЗМОЖНО - утверждающим обратное придётся продемонстрировать функциональное проектирование/декомпозицию (т.е. изоморфизм Карри-Ховарда), лямбда-абстракции, построение ADT, карринг и, конечно же, ИСТИННЫЙ полиморфизм (не путать с ad hoc-полиморфизмом из ООП) -->, поскольку на уровне синтаксиса языка нет поддержки основных элементов ФП (таких как [[Функция высшего порядка|функций высшего порядка]]) и нет средств макрорасширения языка.
; Օբյեկտային մոդելը : Как и в С++, объектная модель Java наследуется из [[Симула|Симулы]] (в Java — через промежуточную ступень — язык Modula-2), то есть фундаментально отличается от оной в потомках языка [[Smalltalk]] ([[Objective-C]], [[Python (язык программирования)|Python]], [[Ruby]]). Но есть серьёзные отличия и от С++. В Java все методы являются виртуальными. Есть синтаксический сахар для определения абстрактных классов: использование ключевого слова <code>interface</code> делает все методы класса чистыми виртуальными — такие классы называются в Java «интерфейсами». Множественное наследование допустимо только для них, но не для обычных классов, что улучшает дисциплину программирования — на этапе реализации нет возможности нарушить структуру проекта, построенную на этапе архитектурного проектирования (в С++ это делается легко).