Файл: Современные языки программирования (Парадигмы и модели программирования).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 14.06.2023

Просмотров: 177

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Определение соответствия типов тоже является важным моментом, для этого используется следующие два подхода:

Строгая типизация – совместимость типов автоматически контролируется транслятором, она должна быть явно указана (наследована) при определении типа или определяется структурой самого типа (типами элементов, из которых построен составной тип).

Слабая типизация – совместимость типов никак транслятором не контролируется. В языках со слабой типизацией обычно используется подход под названием «утиная типизация» – когда совместимость определяется и реализуется общим интерфейсом доступа к данным типа.

На сегодняшний день не существует единого мнения о том, какой вид типизации лучше. Рассмотрим основные достоинства и недостатки каждого вида контроля типа.[1]

4.1 Динамическая типизация

Поскольку переменная связывается с типом в момент присваивания и в ходе выполнения программы может менять свой тип, контролировать на этапе проектирования соответствие такой переменной вызываемым для нее функциям и методам невозможно. Поэтому транслятор встраивает в программу операции связанные с динамической проверкой типа. Отсюда вытекают явные недостатки динамической типизации:

Низкая скорость выполнения, связанная с динамической проверкой типа переменной перед каждым использованием.

Ошибки, связанные с опечатками при использовании имени переменной.

Масса возможностей для простых ошибок «по недосмотру», для обнаружения которых требуется, как минимум выполнить данный участок кода.

В объектно–ориентированных языках не действует либо действует с ограничениями автодополнение: трудно или невозможно понять, к какому типу относится переменная, и вывести набор её полей и методов.

Учитывая эти недостатки, для написания сложного кода нужна особая культура программирования: венгерская нотация, юнит–тестирование. Кроме того, в таких языках программирования отсутствует интерфейсная часть модуля (описания типов, заголовки процедур и т. д. – то, что соответствует interface–секции в Паскале и h–файлу в Си), которая сама по себе является существенной частью документации, а изредка вообще позволяет обойтись без документирования.

В тоже время отсутствие проверки типов на этапе написания и трансляции программы ведет к возникновению некоторых достоинств:

Ускоряется работа компилятора – а значит, цикл «написать – проверить», что для больших проектов может быть существенным.


Повышается гибкость языка. Возможна реализация функции, вычисляющей значение выражения произвольного типа.

Нет дополнительных строк с вязанных с определением типа и даже с объявлением переменных. Отсутствуют операции приведения типа. Соответственно, упрощается написание простых программ. В различных языках программирования динамический контроль типов реализован по-разному. Благодаря этому в некоторых языках недостатки этого вида типизации могут быть сведены к нулю, в прочем, как и достоинства.

4.2 Статическая типизация

При таком виде контроля переменная связывается с типом в момент объявления ещё при написании программы и проверяется на соответствие при каждом её использовании программистом. При таком подходе довольно сложно найти недостатки, однако без них не обходится:

Понижается гибкость языка. Для каждого типа переменной необходима реализация собственной функции.

Значительно замедляется работа компилятора.

В тоже время проверка типов на этапе написания и трансляции программы ведет к возникновению существенных достоинств:

Высокая скорость выполнения программы, связанная с отсутствием проверки типов на этапе выполнения. «Зная» тип переменной транслятор может использовать для неё более простые и подходящие команды.

Значительно уменьшается количество ошибок связанных с некорректным использованием типа переменной: присваивание значений, операции над переменными, передача параметров в функции.

При явном объявлении переменных и типов повышается читабельность и понятность кода, упрощается документирование программы.

Как и для динамического контроля, статический контроль типов в языках программирования реализован по-разному, что с учетом строгой или слабой типизации может налагать ряд дополнительных достоинств и недостатков.

Виды типизации в современных языках программирования Представлены в таблице 4.

Таблица 4 Типизация в языках программирования [2]

Язык программирования

Типизация

Java

статическая, строгая

C

статическая

C++

статическая

PHP

динамическая

C#

статическая, строгая

Python

динамическая, строгая

Visual Basic

динамическая

Objective C

статическая /динамическая

Perl

динамическая

Delphi

статическая


В современном программировании используются языки, как со статической типизацией, так и с динамической. Следует отметить, что динамическая типизация больше характерна для интерпретируемых языков, а статическая типизация для компилируемых. Это обусловлено возможностью интерпретатора при выполнении команды анализировать типы используемых данных и производить приведение типов, что для скомпилированной программы выполнить гораздо сложнее.

Однако, в языках со статической типизацией возможно использование динамических свойств по работе с типами. Для этого можно воспользоваться специальными агрегаторами (объединением, классом Variant и т.п.), которые позволят сохранить информацию о типе значения. При использовании подобных агрегаторов возникают накладные расходы сравнимые с использованием динамической типизации и некоторые неудобства в работе (явное приведение типа).

В языках с динамической типизацией организация статической проверки типов задача сложная. Если статическая типизация поддерживается на уровне языка, то компилятор может провести проверку типов и добиться полного исключения лишних вычислений при применении операторов. Если такой поддержки в языке нет, то есть возможность её реализовать путем добавления дополнительных проверок и, следовательно, накладными расходами.

Заключение

Что бы быть современным язык программирования должен отвечать всем современным требованиям и соответствовать тем задачам, которые встают перед программистом сегодня. Именно поэтому в рассмотренных языках программирования представлено большинство методов и способов решения задач по созданию систем обработки информации.

Сегодня предоставляемое программисту многообразие возможностей позволяет, начиная новый проект любой сложности, выбрать язык программирования наиболее подходящий для его реализации. При выборе языка программирования необходимо учитывать требования проекта к скорости работы, потребляемым ресурсам, необходимости кроссплатформенного использования, а также сроки реализации проекта. Кроме того, для некоторых проектов может стать существенным фактор популярности языка программирования. Для популярного языка имеется, как правило, большое количество учебной и справочной литературы, кроме того, использованный язык программирования может стать решающим фактором при выборе программы конечным пользователем. Не менее важно при выборе языка программирования учитывать опыт других разработчиков при решении похожих задач, это поможет избежать типичной ошибки – «изобретение колеса».