Редактирование: Сравнение Языков Программирования
Материал из eSyr's wiki.
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
ПРЕДУПРЕЖДЕНИЕ: Длина этой страницы составляет 166 килобайт. Страницы, размер которых приближается к 32 КБ или превышает это значение, могут неверно отображаться в некоторых браузерах. Пожалуйста, рассмотрите вариант разбиения страницы на меньшие части.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 7: | Строка 7: | ||
* [http://progopedia.ru/ Энциклопедия языков программирования] | * [http://progopedia.ru/ Энциклопедия языков программирования] | ||
* [http://citforum.ru/programming/cpp/aglav.shtml Книжка Страуструпа] | * [http://citforum.ru/programming/cpp/aglav.shtml Книжка Страуструпа] | ||
- | * [https://habrahabr.ru/post/161205/ Ликбез по типизации в языках программирования / Хабрахабр] | ||
План (краткий, взят из методички Головина, подробный см. в самой [[Media:pl.exam.variants.pdf|методичке]]): | План (краткий, взят из методички Головина, подробный см. в самой [[Media:pl.exam.variants.pdf|методичке]]): | ||
Строка 58: | Строка 57: | ||
Mother: Person_Access := '''new''' Person'(Mothers_First_Name, Mothers_Last_Name); ''-- инициализованно'' | Mother: Person_Access := '''new''' Person'(Mothers_First_Name, Mothers_Last_Name); ''-- инициализованно'' | ||
- | Тип Access - это высокоуровневый указатель, представленный записью с полями. Например, | + | Тип Access - это высокоуровневый указатель, представленный записью с полями. Например, разименовать указатель можно следующим образом: |
Mother.'''all'''.Last_Name = Father.'''all'''.Last_Name ''-- здесь, Mother.'''all''' имеет тип Person; | Mother.'''all'''.Last_Name = Father.'''all'''.Last_Name ''-- здесь, Mother.'''all''' имеет тип Person; | ||
Строка 139: | Строка 138: | ||
Также существует специальный тип null. | Также существует специальный тип null. | ||
- | Объектом в Java считается экземпляр класса или массив. Значением ссылочного типа является ссылка на объект (или специальное значение null). | + | Объектом в Java считается экземпляр класса или массив. Значением ссылочного типа является ссылка на объект (или специальное значение null). Все объекты (включая массивы) обладают методами класса Object (java.lang.Object) (иначе говоря, с т.з. Java-программиста все объекты *наследуют* методы класса Object). Строковые литералы (например, "Hello world!") являются объектами типа String (== экземплярами класса String). |
- | + | ||
- | Все объекты (включая массивы) обладают методами класса Object (java.lang.Object) (иначе говоря, с т. з. Java-программиста все объекты *наследуют* методы класса Object). Строковые литералы (например, "Hello world!") являются объектами типа String ( | + | |
Операции над простыми типами почти идентичны C/C++, однако могут выбрасывать исключения. Конкатенация строк: "Hello " + "world!" (может принимать в качестве одного из аргументов не только строку, но и любой из целых типов). | Операции над простыми типами почти идентичны C/C++, однако могут выбрасывать исключения. Конкатенация строк: "Hello " + "world!" (может принимать в качестве одного из аргументов не только строку, но и любой из целых типов). | ||
Строка 148: | Строка 145: | ||
=== C++ === | === C++ === | ||
- | |||
; Целые типы: | ; Целые типы: | ||
: char - размер как для хранения символа, определяется машиной (обычно байт) | : char - размер как для хранения символа, определяется машиной (обычно байт) | ||
Строка 399: | Строка 395: | ||
: ''Упаковкой (boxing)'' называется процесс преобразования значения простого типа значения в экземпляр соответствующего класса-оболочки. | : ''Упаковкой (boxing)'' называется процесс преобразования значения простого типа значения в экземпляр соответствующего класса-оболочки. | ||
: ''Распаковкой (unboxing)'' называется, очевидно, процесс преобразования экземпляра класса-оболочки в значение соответствующего простого типа. | : ''Распаковкой (unboxing)'' называется, очевидно, процесс преобразования экземпляра класса-оболочки в значение соответствующего простого типа. | ||
- | |||
==== C# ==== | ==== C# ==== | ||
В '''C#''' упаковка и распаковка выполняются автоматически. | В '''C#''' упаковка и распаковка выполняются автоматически. | ||
Строка 712: | Строка 707: | ||
== Процедурные абстракции == | == Процедурные абстракции == | ||
- | === Передача параметров в | + | === Передача параметров в подпрограммах === |
- | + | Для каждой подпрограммы указывается набор формальных параметров. Можно рассматривать формальные параметры как локальные | |
- | Для каждой подпрограммы указывается набор формальных параметров. Можно рассматривать формальные параметры как локальные переменные тела подпрограммы. При вызове подпрограммы указывается список фактических параметров. Соответствие между фактическими и формальными параметрами выполняется по позиции в списке: первый фактический параметр соответствует первому формальному параметру и т. д. Такой способ называется ''позиционным'' | + | переменные тела подпрограммы. При вызове подпрограммы указывается список фактических параметров. Соответствие между фактическими и формальными параметрами |
- | + | выполняется по позиции в списке: первый фактический параметр соответствует первому формальному параметру и т.д. Такой | |
- | + | способ называется ''позиционным.'' Язык С#, начиная с версии 4, предусматривает альтернативный — ''ключевой'' способ отождествления, в котором используются имена формальных параметров, но мы не будем его рассматривать.Существует три вида формальных параметров: | |
- | + | : • входные параметры (параметры, от которых требуется только значение). Мы используем только значения фактических параметров, которые не меняются при : : выходе из тела функции; | |
- | + | : • выходные параметры (эти параметры не обязаны иметь начальное значение, но могут быть изменены в теле функции); | |
- | С входным параметром может связываться произвольное выражение, а выходным или изменяемым — только объекты, которые могут стоять в левой части оператора присваивания. В большинстве языков программирования вместо указания вида параметра указывается способ (механизм) связывания параметра, называемый способом передачи параметра. | + | : • изменяемые параметры (требуется и исходное значение, и возможность его изменения). |
- | + | С входным параметром может связываться произвольное выражение, а выходным или изменяемым — только объекты, которые могут стоять в левой части оператора присваивания. В большинстве языков программирования вместо указания вида параметра указывается способ (механизм) связывания параметра, | |
- | Существует два основных способа передачи параметров: ''по значению'' и ''по ссылке'' | + | называемый способом передачи параметра. |
- | + | Существует два основных способа передачи параметров: ''по значению'' и ''по ссылке.'' | |
==== Передача параметров по значению ==== | ==== Передача параметров по значению ==== | ||
- | + | Формальный параметр есть некоторая локальная переменная. Место для локальных переменных отводится в стеке. При вызове подпрограммы значение | |
- | Формальный параметр есть некоторая локальная переменная. Место для локальных переменных отводится в стеке. При вызове подпрограммы значение фактического параметра копируется в соответствующий формальный параметр. Все изменения формального параметра связаны с изменением локальной переменной и не сказываются на фактическом параметре. Перед копированием может потребоваться приведение типа, если типы фактического и формального параметров не совпадают. | + | фактического параметра копируется в соответствующий формальный параметр. Все изменения формального параметра связаны с изменением локальной переменной и не сказываются на фактическом параметре. Перед копированием может потребоваться приведение типа, если типы фактического и формального |
- | + | параметров не совпадают. | |
==== Передача параметров по ссылке ==== | ==== Передача параметров по ссылке ==== | ||
- | + | Фактически этот способ есть передача ссылки по значению. Формальный параметр — это ссылка на объект. В момент вызова происходит инициализация ссылки | |
- | Фактически этот способ есть передача ссылки по значению. Формальный параметр — это ссылка на объект. | + | фактическим параметром. Преобразования типов в этот момент не происходит: типы формального и фактического параметров должны совпадать. Поскольку ссылка после инициализации отождествляется с объектом, то любые изменения формального параметра подразумевают изменения фактического параметра. |
- | + | Очевидно, что способ передачи по значению соответствует семантике | |
- | + | входных формальных параметров. | |
- | + | По ссылке можно передавать выходные и изменяемые параметры. | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
=== Перегрузка операций === | === Перегрузка операций === | ||
Ада 83, Ада 95, Си++, Java, Delphi, C# | Ада 83, Ада 95, Си++, Java, Delphi, C# | ||
Строка 2768: | Строка 2749: | ||
|есть | |есть | ||
|есть<ref>cм. [http://msdn.microsoft.com/en-us/library/0f66670z(v=vs.71).aspx#vclrfpassingmethodparameters_valuetypes MSDN].</ref> | |есть<ref>cм. [http://msdn.microsoft.com/en-us/library/0f66670z(v=vs.71).aspx#vclrfpassingmethodparameters_valuetypes MSDN].</ref> | ||
- | |есть | + | |есть<ref>Только для простых типов (см. примечание для ячейки ниже).</ref> |
|есть | |есть | ||
|есть | |есть | ||
Строка 2779: | Строка 2760: | ||
!Передача параметров по ссылке | !Передача параметров по ссылке | ||
|и<ref>Моделируется с помощью указателей.</ref> | |и<ref>Моделируется с помощью указателей.</ref> | ||
- | |и | + | |и<ref>Специальной конструкции для передачи значения по ссылке нет. Однако, есть ссылочный тип. Переменная ссылочного типа может ссылаться на значение любого типа, должна быть инициализирована и не может менять значения. С помощью передачи переменной ссылочного типа можно имитировать все возможности контрукции var из '''Pascal'''. Но можно действовать в стиле C — передавать указатель (при этом его даже можно поменять, передав в функцию/метод «по указателю» или «по ссылке»).</ref> |
|есть<ref>Модификаторы '''ref''' и '''out''', также см. [http://msdn.microsoft.com/en-us/library/0f66670z(v=vs.71).aspx#vclrfpassingmethodparameters_referencetypes MSDN].</ref> | |есть<ref>Модификаторы '''ref''' и '''out''', также см. [http://msdn.microsoft.com/en-us/library/0f66670z(v=vs.71).aspx#vclrfpassingmethodparameters_referencetypes MSDN].</ref> | ||
- | |и | + | |и<ref>Специальной конструкции для передачи значения по ссылке нет. Однако, есть ссылочный тип. Переменная ссылочного типа может ссылаться только на объекты (экземпляры классов и массивы), может иметь специальное значение null и изменяема. Простые типы можно передавать «по ссылке» с помощью соответствующих классов-обёрток.</ref> |
|есть<ref name="keyword_var">Ключевое слово var.</ref> | |есть<ref name="keyword_var">Ключевое слово var.</ref> | ||
|есть<ref name="keyword_var" /> | |есть<ref name="keyword_var" /> |