Файл: Обзор языков программирования высокого уровня (языки и парадигмы программирования).pdf
Добавлен: 24.04.2023
Просмотров: 200
Скачиваний: 2
СОДЕРЖАНИЕ
1. Языки и парадигмы программирования
1.2. Императивное программирование
1.3. Структурное программирование
1.4. Процедурное программирование
1.5. Модульное программирование
1.6. Объектно-ориентированное программирование
2. Описание некоторых языков программирования высокого уровня
2.2. Язык программирования Python
2.3. Язык программирования Ruby
Рис.2. Пример программы с процедурой
Основные понятия процедурного программирования:
- процедура;
- функция.
Производные понятия:
- вызов;
- возврат;
- аргументы;
- перегрузка;
- рекурсия.
Языки, поддерживающие данную парадигму:
Как основную: C, C++, Pascal, Object Pascal.
Как вспомогательную: C#, Java, Python, Ruby, JavaScript.[14]
1.5. Модульное программирование
С течением времени акцент при разработке программ сменился от проектирования процедур в сторону организации данных. Кроме того, это явилось отражением факта увеличения размеров программ.
Набор связанных процедур вместе с данными, которые они обрабатывают, называют модулем.[13]
Программа, описанная в стиле модульного программирования — это набор модулей. Что внутри, классы, императивный код или функции – не имеет значения.
Благодаря модулям впервые в программировании появилась возможность сокрытия данных (инкапсуляции) - использования каких-либо сущностей внутри модуля, не показывая их внешнему миру.
Модуль – это отдельная именованная сущность программы, которая объединяет в себе другие программные единицы, близкие по функциональности.
Например, файл List.mod включающий в себя класс List и функции для работы с ним – модуль.
Папка Geometry, содержащая модули Shape, Rectangle и Triangle – тоже модуль, хоть и некоторые языки разделяют понятие модуля и пакета (в таких языках пакет – набор модулей и/или набор других пакетов).
Модули можно импортировать (подключать) для того, чтобы использовать объявленные в них сущности.
Основные понятия модульного программирования:
- модуль;
- импортирование.
Порожденные понятия:
- пакет;
- инкапсуляция.
Языки, поддерживающие данную парадигму:
Как основную: Pascal, Haskell, Python.
Как вспомогательную: Java, C#.
Поддерживают частично: C, C++.
В некоторых языках для модулей введены отдельные абстракции, в других же для реализации модулей можно использовать заголовочные файлы (в C и C++), пространства имен, статические классы или динамически подключаемые библиотеки. [8,14]
1.6. Объектно-ориентированное программирование
В теории программирования объектно-ориентированное программирование определяется как технология создания сложного программного обеспечения, которая основана на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию с наследованием свойств. Взаимодействие объектов в такой системе осуществляется путем передачи сообщений между объектами.[6]
В основу объектно-ориентированное программирование заложены следующие принципы:
Абстрагирование — это процесс выделения абстракций в предметной области задачи. Абстракция – совокупность существенных характеристик некоторого объекта, которые отличают его от других объектов и таким образом четко определяют особенности данного объекта с точки зрения дальнейшего рассмотрения и анализа. [4]
Иерархичность есть ранжированная или упорядоченная система абстракций.
Под типизацией понимаются те ограничения, которые накладываются на свойства объектов и препятствующие взаимозаменяемости абстракций разных типов (либо сильно сужающие такую возможность).
Реализация позднего связывания в языке программирования позволяет создавать переменные – указатели на объекты, принадлежащие разным классам (так называемые полиморфные объекты).
Параллелизм – свойство нескольких абстракций одновременно находиться в активном состоянии, т.е. выполнять несколько операций.
Устойчивость – свойство абстракции существовать во времени независимо от процесса, породившего программный объект и/или в пространстве, перемещаясь из одного адресного пространства, в котором он был задан в другое. [7]
Объектно-ориентированное программирование включает в себя три основных понятия: абстрактные типы данных, наследование, динамическое связывание.
Языки объектно-ориентированного программирования поддерживаются этой парадигмой с помощью классов, методов, объектов, передаваемые сообщений.[18]
Языки, поддерживающие парадигму объектно-ориентированного программирования:
Как основную: Smalltalk, Eiffel.
Гибридные языки: CLOS, Dylan, OCaml, Python, Ruby, Objective-C.
Как вспомогательную: Симула, C++, Visual Basic, Delphi, Модула, Модула-2, Java, C#, PHP.
2. Описание некоторых языков программирования высокого уровня
2.1. Язык программирования С#
С# - объектно-ориентированный язык программирования. Разработан в 1998-2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как язык разработки приложений для платформы Microsoft .NET Framework. C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java.
Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов, делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.
C# является объектно-ориентированным языком, но поддерживает также и компонентно-ориентированное программирование. Разработка современных приложений все больше тяготеет к созданию программных компонентов в форме автономных и самоописательных пакетов, реализующих отдельные функциональные возможности. Важная особенность таких компонентов – это модель программирования на основе свойств, методов и событий. Каждый компонент имеет атрибуты, предоставляющие декларативные сведения о компоненте, а также встроенные элементы документации. C# предоставляет языковые конструкции, непосредственно поддерживающие такую концепцию работы. Благодаря этому C# отлично подходит для создания и применения программных компонентов [16].
Вот лишь несколько функций языка C#, обеспечивающих надежность и устойчивость приложений:
- сборка мусора автоматически освобождает память, занятую уничтоженными и неиспользуемыми объектами;
- обработка исключений предоставляет структурированный и расширяемый способ выявлять и обрабатывать ошибки;
- строгая типизация языка не позволяет обращаться к неинициализированным переменным, выходить за пределы индексируемых массивов или выполнять неконтролируемое приведение типов.
В C# существует единая система типов. Все типы C#, включая типы-примитивы, такие как int и double, наследуют от одного корневого типа object. Таким образом, все типы используют общий набор операций, и значения любого типа можно хранить, передавать и обрабатывать схожим образом. Кроме того, C# поддерживает пользовательские ссылочные типы и типы значений, позволяя как динамически выделять память для объектов, так и хранить упрощенные структуры в стеке.
Чтобы обеспечить совместимость программ и библиотек C# при дальнейшем развитии, при разработке C# много внимания было уделено управлению версиями. Многие языки программирования обходят вниманием этот вопрос, и в результате программы на этих языках ломаются чаще, чем хотелось бы, при выходе новых версий зависимых библиотек. Вопросы управления версиями существенно повлияли на такие аспекты разработки C#, как раздельные модификаторы virtual и override, правила разрешения перегрузки методов и поддержка явного объявления членов интерфейса.
Плюсы C#:
- поддержка компанией Microsoft. В отличии от Java, которой не пошел на пользу переход в собственность Oracle, C# хорошо развивается благодаря усилиям Microsoft;
- в последнее время много совершенствуется. Так как C# был создан позже, чем Java и другие языки, он требовал больших доработок. Также это касается популяризации и бесплатности - было обещано открыть исходный код, а инструменты (Visual Studio, Xamarin) стали бесплатными для частных лиц и небольших компаний;
- много синтаксического сахара - конструкций, которые созданы для облегчения написания и понимания кода (особенно если это код другого программиста) и не играют роли при компиляции;
- средний порог вхождения. Синтаксис похожий на C, С++ или Java облегчает переход для других программистов. Для новичков это также один из самых перспективных языков для изучения;
- Xamarin. Благодаря покупке Xamarin на C# теперь можно писать под Android и iOS;
- добавлено функциональное программирование (F#);
- большое сообщество программистов;
- много вакансий на должность C# программиста в любом регионе [21].
Минусы C#:
- Данный язык ориентирован, в основном, только на .NET (на Windows платформу);
- бесплатность только для небольших компании, студентов, учащихся и программистов-одиночек. Для больших команд разработчиков покупка лицензий обойдется недешево.
2.2. Язык программирования Python
Python — это свободный интерпретируемый объектно-ориентированный расширяемый встраиваемый язык программирования очень высокого уровня.
– свободный означает, что все исходные тексты интерпретатора и библиотек доступны для любого использования;
– интерпретируемый, потому что использует «позднее связывание»;
– объектно-ориентированный, так как поддерживается классическая ОО модель, включая множественное наследование;
– расширяемый - имеет строго определенные API для создания модулей, типов и классов на C или C++;
– встраиваемый - имеет API для встраивания интерпретатора в другие программы;
– очень высокого уровня – поддерживается динамическая типизация, встроенные типы данных высокого уровня, классы, модули, механизм исключений.
Python универсальный язык программирования, который широко используют во всем мире для различных целей — базы данных и обработка текстов, встраивание интерпретатора в игры, программирование GUI и быстрое создание прототипов (RAD).
Также Python используется для программирования Web приложений: серверных (CGI), клиентских (роботы), Web-серверов и серверов приложений. Python обладает широкой стандартной библиотекой, и еще более широким набором модулей, написанных различными разработчиками. Python и приложения, написанные на нем, используют самые известные и крупные фирмы — IBM, Yahoo!, Google.com, Hewlett Packard, Infoseek, NASA, Red Hat, CBS MarketWatch, Microsoft [20].
К основным преимуществам языка программирования Python можно отнести:
- универсальность использования: на этом языке программирования можно писать разные типы приложений, потому вместе с его освоением открываются широкие возможности для применения языка;
- простота: изначально Python разрабатывался для упрощения работы с ним человека;
- популярность в среде программистов и востребованность на рынке труда языка программирования Python широко применяется в различных проектах;
- большое количество доступных библиотек расширяют возможности языка и делают его более универсальным;
- кроссплатформенность: один раз написанная программа будет работать на любой платформе, где есть интерпретатор языка Python;
- наличие качественной документации [23].
2.3. Язык программирования Ruby
Ruby - язык программирования, разработанный в Японии Юкихиро Мацумото. Ruby существует уже почти 20 лет и активно развивается, при поддержке сообщества программистов и его поклонников.
Мацумото хотел создать объектно-ориентированный язык, у которого был бы простой и понятный синтаксис и ему это удалось. В противоположность языкам, ориентированным на скорость выполнения программы машиной, Мацумото разработал Ruby, чтобы облегчить работу человеку. В Ruby используется принцип «наименьшей неожиданности». Это означает, что программа будет вести себя в соответствии с ожиданиями программиста.
Ruby придерживается концепции языка Smalltalk, когда любые типы данных считаются объектами, а значит для них можно задавать методы и переменные объекта. В этом его выгодное отличие от таких языков, как, С++.
Также стоит отметить гибкость языка. Например, вы можете переопределить операцию сложения и использовать обозначения, которые более удобны для вас. Например, определить, что сложение чисел будет работать при вводе слова plus (1 plus 2), а не символа (1+2). То, есть не вы подстраиваетесь под язык, а, наоборот, он подстраивается под вас