Добавлен: 29.04.2023
Просмотров: 395
Скачиваний: 4
СОДЕРЖАНИЕ
Глава 1 Структурные модели и функции языков программирования
1.1 Разнообразие языков программирования
1.2 Парадигмы программирования
1.2.4 Особенности функционального и логического программирования
1.2.6 Концепции модульного программирования
1.2.7 Объектно-ориентированные языки программирования
1.2.9 Динамическая прикладная среда для бизнес-объектов
Глава 2 Трансляция и типизация данных
2.2.1 Простые и составные типы данных
2.2.2 Виды контроля типов данных
Как уже отмечалось ранее, любой тип данных в языках программирования определяет не только множество собственных значений, но и набор операций, способы хранения и присваивания значений. Типы переменных и параметров должны совпадать с присваиваемыми им значениями или вызываемыми для них функциями. Для обеспечения совместимости типов переменных и их значений в языках программирования существует контроль типов (типизация) – это процесс проверки и накладывания ограничений на использование типов.
Существует два вида контроля типов:
- Статическая типизация – при которой переменная, параметр подпрограммы, возвращаемое значение функции связывается с типом в момент объявления и тип не может быть изменён позже. Переменная или параметр будут принимать, а функция возвращать значения только этого типа.
- Динамическая типизация – при которой переменная связывается с типом в момент присваивания значения, а не в момент объявления переменной. Таким образом, в различных участках программы одна и та же переменная может принимать значения разных типов.
Определение соответствия типов тоже является важным моментом, для этого используется следующие два подхода:
- Строгая типизация – совместимость типов автоматически контролируется транслятором, она должна быть явно указана (наследована) при определении типа или определяется структурой самого типа (типами элементов, из которых построен составной тип).
- Слабая типизация – совместимость типов никак транслятором не контролируется. В языках со слабой типизацией обычно используется подход под названием «утиная типизация» – когда совместимость определяется и реализуется общим интерфейсом доступа к данным типа.
На сегодняшний день не существует единого мнения о том, какой вид типизации лучше. Рассмотрим основные достоинства и недостатки каждого вида контроля типа.
2.2.3 Динамическая типизация
Поскольку переменная связывается с типом в момент присваивания и в ходе выполнения программы может менять свой тип, контролировать на этапе проектирования соответствие такой переменной вызываемым для нее функциям и методам невозможно. Поэтому транслятор встраивает в программу операции связанные с динамической проверкой типа. Отсюда вытекают явные недостатки динамической типизации:
- Низкая скорость выполнения, связанная с динамической проверкой типа переменной перед каждым использованием.
- Ошибки, связанные с опечатками при использовании имени переменной.
- Масса возможностей для простых ошибок «по недосмотру», для обнаружения которых требуется, как минимум выполнить данный участок кода.
- В объектно–ориентированных языках не действует либо действует с ограничениями автодополнение: трудно или невозможно понять, к какому типу относится переменная, и вывести набор её полей и методов.
Учитывая эти недостатки, для написания сложного кода нужна особая культура программирования: венгерская нотация, юнит–тестирование. Кроме того, в таких языках программирования отсутствует интерфейсная часть модуля (описания типов, заголовки процедур и т. д. – то, что соответствует interface–секции в Паскале и h–файлу в Си), которая сама по себе является существенной частью документации, а изредка вообще позволяет обойтись без документирования.
В тоже время отсутствие проверки типов на этапе написания и трансляции программы ведет к возникновению некоторых достоинств:
- Ускоряется работа компилятора – а значит, цикл «написать – проверить», что для больших проектов может быть существенным.
- Повышается гибкость языка. Возможна реализация функции, вычисляющей значение выражения произвольного типа.
- Нет дополнительных строк с вязанных с определением типа и даже с объявлением переменных.
- Отсутствуют операции приведения типа. Соответственно, упрощается написание простых программ.
В различных языках программирования динамический контроль типов реализован по-разному. Благодаря этому в некоторых языках недостатки этого вида типизации могут быть сведены к нулю, в прочем, как и достоинства.
2.2.4 Статическая типизация
При таком виде контроля переменная связывается с типом в момент объявления ещё при написании программы и проверяется на соответствие при каждом её использовании программистом. При таком подходе довольно сложно найти недостатки, однако без них не обходится:
- Понижается гибкость языка. Для каждого типа переменной необходима реализация собственной функции.
- Значительно замедляется работа компилятора.
В тоже время проверка типов на этапе написания и трансляции программы ведет к возникновению существенных достоинств:
- Высокая скорость выполнения программы, связанная с отсутствием проверки типов на этапе выполнения. «Зная» тип переменной транслятор может использовать для неё более простые и подходящие команды.
- Значительно уменьшается количество ошибок связанных с некорректным использованием типа переменной: присваивание значений, операции над переменными, передача параметров в функции.
- При явном объявлении переменных и типов повышается читабельность и понятность кода, упрощается документирование программы.
Как и для динамического контроля, статический контроль типов в языках программирования реализован по-разному, что с учетом строгой или слабой типизации может налагать ряд дополнительных достоинств и недостатков.
В современном программировании используются языки, как со статической типизацией, так и с динамической. Следует отметить, что динамическая типизация больше характерна для интерпретируемых языков, а статическая типизация для компилируемых. Это обусловлено возможностью интерпретатора при выполнении команды анализировать типы используемых данных и производить приведение типов, что для скомпилированной программы выполнить гораздо сложнее.
Однако, в языках со статической типизацией возможно использование динамических свойств по работе с типами. Для этого можно воспользоваться специальными агрегаторами (объединением, классом Variant и т.п.), которые позволят сохранить информацию о типе значения. При использовании подобных агрегаторов возникают накладные расходы сравнимые с использованием динамической типизации и некоторые неудобства в работе (явное приведение типа).
В языках с динамической типизацией организация статической проверки типов задача сложная. Если статическая типизация поддерживается на уровне языка, то компилятор может провести проверку типов и добиться полного исключения лишних вычислений при применении операторов. Если такой поддержки в языке нет, то есть возможность её реализовать путем добавления дополнительных проверок и, следовательно, накладными расходами.
Виды типизации в современных языках программирования представлены в таблице (см. Таблица 4).
Таблица 4 –Типизация в языках программирования
|
Язык программирования |
Типизация |
|
Java |
статическая, строгая |
|
C |
статическая |
|
C++ |
статическая |
|
PHP |
динамическая |
|
C# |
статическая, строгая |
|
Python |
динамическая, строгая |
|
Visual Basic |
динамическая |
|
Objective C |
статическая /динамическая |
|
Perl |
динамическая |
|
Delphi |
статическая |
Заключение
Что бы быть современным язык программирования должен отвечать всем современным требованиям и соответствовать тем задачам, которые встают перед программистом сегодня. Именно поэтому в рассмотренных языках программирования представлено большинство методов и способов решения задач по созданию систем обработки информации.
Сегодня предоставляемое программисту многообразие возможностей позволяет, начиная новый проект любой сложности, выбрать язык программирования наиболее подходящий для его реализации. При выборе языка программирования необходимо учитывать требования проекта к скорости работы, потребляемым ресурсам, необходимости кроссплатформенного использования, а также сроки реализации проекта. Кроме того, для некоторых проектов может стать существенным фактор популярности языка программирования. Для популярного языка имеется, как правило, большое количество учебной и справочной литературы, кроме того, использованный язык программирования может стать решающим фактором при выборе программы конечным пользователем. Не менее важно при выборе языка программирования учитывать опыт других разработчиков при решении похожих задач, это поможет избежать типичной ошибки – «изобретение колеса».
Рассмотрев основные концепции современных языков программирования можно выделить несколько наиболее актуальных задач стоящих сегодня перед программистами: Проектирование межплатформенных приложений – не зависящих от используемой платформы. Разработка Интернет–приложений – работающих через Интернет, но не поддерживаемых браузером непосредственно. Создание Web–приложений – клиент–серверных архитектур. Возможность быстрого создания приложений и средств автоматизации. Также актуальны приложения полностью и эффективно использующие все ресурсы современных платформ.
Список литературы
1. Роберт У. Себеста. Основные концепции языков программирования = Concepts of Programming Languages / Пер. с англ. – 5-е изд. – М.: Вильямс, 2001. – 672 с. – 5000 экз. ISBN: 5–8459–0192–8
2. TIOBE Software: Tiobe Index
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
3. Городняя Л.В. Основы функционального программирования. /– М.: Изд-во "Интернет-университет информационных технологий – ИНТУИТ.ру", 2004. – 280 c.: ил. ISBN 5–9556–0008–6
4. Анатолий А. Андрей К. Логическое программирование и Visual Prolog (с CD).. – СПб.: «БХВ–Петербург», 2003. – С. 990. ISBN 5–94157–156–9.
5. Иан Грэхем. Объектно–ориентированные методы. Принципы и практика = Object–Oriented Methods: Principles & Practice. – 3–е изд./ – М.: «Вильямс», 2004. – С. 880. ISBN 5–8459–0438–2
6. Андрей Александреску. Современное проектирование на С++ /Вильямс, 2004 г. 336 стр. Тираж: 3500 экз. ISBN 5–8459–0351–3
7. Легалов А. И. – SoftCraft: разработка трансляторов: конспект лекций