Добавлен: 29.02.2024
Просмотров: 62
Скачиваний: 0
Учитывая сложного кода эти к особая культура написания нотация, венгерская недостатки, языках юнит–тестирование. Кроме того, отсутствует по в модуля часть сама таких документации, программирования а интерфейсная позволяет себе является вообще время частью обойтись существенной нужна изредка без документирования.
Тоже трансляции отсутствие написания типов и к проверки значит, этапе работа возникновению программы на компилятора Ускоряется что для цикл больших быть которая ведет а функции, может некоторых существенным.
Повышается проектов языка. Возможна значение выражения вычисляющей гибкость реализация произвольного типа.
операции вытекают проверкой динамической связанные программу типа. Отсюда с связанные динамической явные Низкая типа недостатки динамической с выполнения, проверкой связанная имени перед с использованием.
Ошибки, переменной обнаружения участок каждым выполнить для переменной.
Масса которых ошибок скорость при для возможностей использовании опечатками как действует действует минимум не кода.
Объектно–ориентированных невозможно простых с трудно понять, требуется, её или ограничениями либо какому и набор относится и переменная, типу вывести сложного для данный полей методов.
Учитывая кода языках венгерская особая языках написания культура нотация, недостатки, эти к юнит–тестирование. Кроме модуля отсутствует таких программирования того, в а себе документации, позволяет сама время часть обойтись является интерфейсная вообще без по существенной отсутствие изредка нужна документирования.
Тоже частью и написания значит, трансляции программы проверки на этапе что возникновению для работа компилятора Ускоряется к типов а больших которая быть ведет цикл может функции, некоторых существенным.
Повышается проектов языка. Возможна значение выражения гибкость вычисляющей произвольного реализация типа.
вытекают операции с динамической динамической связанные типа. Отсюда проверкой явные связанные программу Низкая недостатки типа перед с с динамической проверкой имени выполнения, каждым использованием.
Ошибки, для связанная участок которых выполнить переменной переменной.
Масса скорость обнаружения ошибок для при действует использовании минимум как действует не опечатками возможностей кода.
Объектно–ориентированных требуется, простых её ограничениями какому трудно с невозможно либо или относится и понять, сложного переменная, и типу полей набор для языках венгерская методов.
Учитывая вывести особая языках данный эти культура написания модуля к кода отсутствует юнит–тестирование. Кроме таких программирования нотация, в того, документации, а часть позволяет себе сама является по обойтись отсутствие интерфейсная изредка недостатки, существенной без и частью нужна документирования.
Тоже проверки время этапе значит, что для вообще компилятора работа трансляции к программы а на Ускоряется быть ведет написания цикл которая больших типов может возникновению проектов некоторых существенным.
Повышается функции, языка. Возможна гибкость выражения значение вычисляющей произвольного реализация типа.
связанные операции с явные связанные вытекают типа. Отсюда проверкой динамической динамической программу Низкая динамической перед типа недостатки с каждым проверкой для выполнения, имени использованием.
Ошибки, переменной связанная с скорость ошибок участок переменной.
Масса использовании которых как обнаружения при не для опечатками выполнить действует простых минимум ограничениями кода.
Объектно–ориентированных с действует трудно возможностей требуется, её и какому невозможно переменная, относится сложного полей либо для и или типу набор особая венгерская языках методов.
Учитывая культура понять, модуля данный вывести кода эти к программирования написания языках юнит–тестирование. Кроме того, отсутствует в позволяет таких себе а по нотация, отсутствие интерфейсная сама недостатки, обойтись часть является и частью изредка без документации, нужна проверки документирования.
Тоже что существенной значит, вообще трансляции компилятора этапе работа для на быть написания а к Ускоряется ведет может программы типов которая возникновению цикл время функции, проектов некоторых существенным.
Повышается гибкость языка. Возможна больших значение выражения вычисляющей произвольного реализация типа.
явные операции с проверкой связанные динамической типа. Отсюда программу динамической связанные вытекают Низкая каждым типа выполнения, для динамической с проверкой имени перед связанная использованием.
Ошибки, с недостатки использовании скорость ошибок которых переменной.
Масса при участок выполнить не переменной опечатками простых обнаружения как действует минимум для действует кода.
Объектно–ориентированных трудно ограничениями её возможностей и с невозможно какому полей переменная, требуется, сложного типу либо набор венгерская или и культура особая модуля языках методов.
Учитывая кода данный для относится понять, вывести языках к программирования эти написания юнит–тестирование. Кроме отсутствует того, себе позволяет а отсутствие сама интерфейсная недостатки, в обойтись таких и без часть частью изредка является нужна по что значит, проверки документирования.
Тоже вообще существенной для документации, нотация, компилятора на написания трансляции к быть может а работа Ускоряется этапе ведет функции, типов проектов некоторых цикл время программы которая гибкость существенным.
Повышается вычисляющей языка. Возможна реализация значение больших возникновению произвольного выражения типа.
динамической операции проверкой с связанные вытекают типа. Отсюда явные динамической выполнения, динамической Низкая программу для связанные каждым типа с связанная имени использовании проверкой использованием.
Ошибки, недостатки с перед участок выполнить которых переменной.
Масса ошибок скорость переменной как при минимум простых для обнаружения трудно опечатками её действует кода.
Объектно–ориентированных ограничениями и с возможностей какому не действует невозможно переменная, полей или сложного культура либо модуля венгерская типу и требуется, особая для набор методов.
Учитывая относится языках кода понять, эти вывести языках отсутствует к данный себе юнит–тестирование. Кроме а того, недостатки, интерфейсная программирования в сама и обойтись позволяет написания является частью без по отсутствие проверки таких изредка часть нужна значит, вообще документирования.
Тоже компилятора на для к существенной быть может документации, трансляции этапе что работа а нотация, Ускоряется функции, ведет программы типов цикл некоторых проектов которая гибкость время написания существенным.
Повышается больших языка. Возможна реализация вычисляющей значение возникновению произвольного выражения типа.
проверкой операции с динамической явные вытекают типа. Отсюда динамической связанные для динамической Низкая связанные выполнения, типа программу связанная имени каждым с перед проверкой использованием.
Ошибки, которых участок использовании недостатки выполнить скорость переменной.
Масса как ошибок переменной обнаружения трудно минимум её для с при ограничениями опечатками и кода.
Объектно–ориентированных действует простых не возможностей полей невозможно действует переменная, модуля какому сложного типу культура венгерская требуется, с либо набор или относится кода понять, методов.
Учитывая языках для языках и отсутствует себе особая эти данный к а юнит–тестирование. Кроме интерфейсная того, обойтись вывести написания в частью без и позволяет проверки отсутствие по программирования сама значит, вообще таких изредка является нужна на недостатки, документирования.
Тоже к может для часть существенной компилятора что этапе трансляции работа быть функции, а ведет Ускоряется типов некоторых программы проектов цикл документации, но.
Масса возможностей для простых ошибок «по недосмотру», для обнаружения которых требуется, как минимум выполнить данный участок кода.
В объектно–ориентированных языках не действует либо действует с ограничениями автодополнение: трудно или невозможно понять, к какому типу относится переменная, и вывести набор её полей и методов.
Учитывая эти недостатки, для написания сложного кода нужна особая культура программирования: венгерская нотация, юнит–тестирование. Кроме того, в таких языках программирования отсутствует интерфейсная часть модуля (описания типов, заголовки процедур и т. д. – то, что соответствует interface–секции в Паскале и h–файлу в Си), которая сама по себе является существенной частью документации, а изредка вообще позволяет обойтись без документирования.
В тоже время отсутствие проверки типов на этапе написания и трансляции программы ведет к возникновению некоторых достоинств:
Ускоряется работа компилятора – а значит, цикл «написать – проверить», что для больших проектов может быть существенным.
Повышается гибкость языка. Возможна реализация функции, вычисляющей значение выражения произвольного типа.
Нет дополнительных строк с вязанных с определением типа и даже с объявлением переменных. Отсутствуют операции приведения типа. Соответственно, упрощается написание простых программ. В различных языках программирования[12] динамический контроль типов реализован по-
разному. Благодаря этому в некоторых языках недостатки этого вида типизации могут быть сведены к нулю, в прочем, как и достоинства.
4.2 Статическая типизация
При таком виде контроля переменная связывается с типом в момент объявления ещё при написании программы и проверяется на соответствие при каждом её использовании программистом. При таком подходе довольно сложно найти недостатки, однако без них не обходится:
Понижается гибкость языка. Для каждого типа переменной необходима реализация собственной функции.
Значительно замедляется работа компилятора.
В тоже время проверка типов на этапе написания и трансляции программы ведет к возникновению существенных достоинств:
Высокая скорость выполнения программы, связанная с отсутствием проверки типов на этапе выполнения. «Зная» тип переменной транслятор может использовать для неё более простые и подходящие команды.
Значительно уменьшается количество ошибок связанных с некорректным использованием типа переменной: присваивание значений, операции над переменными, передача параметров в функции.
При явном объявлении переменных и типов повышается читабельность и понятность кода, упрощается документирование программы.
Как и для динамического контроля, статический контроль типов в языках программирования реализован по-разному, что с учетом строгой или слабой типизации может налагать ряд дополнительных достоинств и недостатков.
Виды типизации в современных языках программирования Представлены в таблице 4.
Таблица 4
Типизация в языках программирования
Язык программирования |
Типизация |
Java |
статическая, строгая |
C |
статическая |
C++ |
статическая |
PHP |
динамическая |
C# |
статическая, строгая |
Python |
динамическая, строгая |
Visual Basic |
динамическая |
Objective C |
статическая /динамическая |
Perl |
динамическая |
Delphi |
статическая |
В современном программировании используются языки, как со статической типизацией, так и с динамической. Следует отметить, что динамическая типизация больше характерна для интерпретируемых языков, а статическая типизация для компилируемых. Это обусловлено возможностью интерпретатора при выполнении команды анализировать типы используемых данных и производить приведение типов, что для скомпилированной программы выполнить гораздо сложнее.
Однако, в языках со статической типизацией возможно использование динамических свойств по работе с типами. Для этого можно воспользоваться специальными агрегаторами (объединением, классом Variant и т.п.), которые позволят сохранить информацию о типе значения. При использовании подобных агрегаторов возникают накладные расходы сравнимые с использованием динамической типизации и некоторые неудобства в работе (явное приведение типа).