Файл: Обзор языков программирования высокого уровня (ИСТОРИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ).pdf
Добавлен: 29.02.2024
Просмотров: 32
Скачиваний: 0
Если интерпретатору Питона дать команду import this (импортировать "сам объект"), то выведется так называемый "Дзен Питона", иллюстрирующий идеологию и особенности данного языка. Глубокое понимание этого дзена приходит тем, кто сможет освоить язык Python в полной мере и приобретет опыт практического программирования.[22]
1. Beautiful is better than ugly. Красивое лучше уродливого.
2. Explicit is better than implicit. Явное лучше неявного.
3. Simple is better than complex. Простое лучше сложного.
4. Complex is better than complicated. Сложное лучше усложнённого.
5. Flat is better than nested. Плоское лучше вложенного.
6. Sparse is better than dense. Разрежённое лучше плотного.
7. Readability counts. Удобочитаемость важна.
8. Special cases aren't special enough to break the rules. Частные случаи не настолько существенны, чтобы нарушать правила.
9. Although practicality beats purity. Однако практичность важнее чистоты.
10. Errors should never pass silently. Ошибки никогда не должны замалчиваться.
11. Unless explicitly silenced. За исключением замалчивания, которое задано явно.
12. In the face of ambiguity, refuse the temptation to guess. В случае неоднозначности сопротивляйтесь искушению угадать.
13. There should be one — and preferably only one — obvious way to do it. Должен существовать один — и, желательно, только один — очевидный способ сделать это.
14. Although that way may not be obvious at first unless you're Dutch. Хотя он может быть с первого взгляда не очевиден, если ты не голландец.
15. Now is better than never. Сейчас лучше, чем никогда.
16. Although never is often better than *right* now. Однако, никогда чаще лучше, чем прямо сейчас.
17. If the implementation is hard to explain, it's a bad idea. Если реализацию сложно объяснить — это плохая идея.
18. If the implementation is easy to explain, it may be a good idea. Если реализацию легко объяснить — это может быть хорошая идея.
19. Namespaces are one honking great idea — let's do more of those! Пространства имён — прекрасная идея, давайте делать их больше![23]
В основном интерпретатор выполняет команды построчно: пишешь строку, нажимаешь Enter, интерпретатор выполняет ее, наблюдаешь результат. Это очень удобно, когда человек только изучает программирование или тестирует какую-нибудь небольшую часть кода. Ведь если работать на компилируемом языке, то пришлось бы сначала написать код на исходном языке программирования, затем скомпилировать и уж потом запустить исполняемый файл на выполнение.
Работать в интерактивном режиме в ОС Linux можно в консоли. Для этого следует выполнить команду python. Запустится интерпретатор, где сначала выведется информация об интерпретаторе. Далее, последует приглашение к вводу (>>>). Запустите интерпретатор Питона. Поскольку никаких команд мы пока не знаем, то будем использовать Питон как калькулятор (возможности языка это позволяют). 2 + 5 3 * (5 - 8) 2.4 + 3.0 / 2 и т.д. Наберите подобные примеры в интерактивном режиме (в конце каждого нажимайте Enter). Ответ выдается сразу после нажатия Enter (завершения ввода команды). Бывает, что в процессе ввода была допущена ошибка или требуется повторить ранее используемую команду. Чтобы не писать строку с самого начала, в консоли можно прокручивать список команд, используя для этого стрелки на клавиатуре. Другой вариант работы в интерактивном режиме — это работа в среде разработки IDLE, у которой есть интерактивный режим работы. В отличие от консольного варианта здесь можно наблюдать подсветку синтаксиса (в зависимости от значения синтаксической единицы она выделяется определенным цветом). Прокручивать список ранее введенных команд можно с помощью комбинаций Alt+N, Alt+P. Запустите IDLE. Попробуйте решать математические примеры здесь. Несмотря на удобства интерактивного режима работы при написании программ на Питоне, обычно требуется сохранять исходный программный код для последующего использования. В таком случае подготавливаются файлы, которые затем передаются интерпретатору на исполнение.[24] По отношению к интерпретируемым языкам программирования, исходный код часто называют скриптом. Файлы с кодом на Python обычно имеют расширение py. Подготовить скрипты можно в той же среде IDLE. Для этого, после запуска программы в меню следует выбрать команду File → New Window (Crtl + N), откроется новое окно. Затем желательно сразу сохранить файл (не забываем про расширение py). После того как код будет подготовлен, снова сохраните файл (чтобы обновить сохранение). Ну и наконец, можно запустить скрипт, выполнив команду меню Run → Run Module (F5). После этого в первом окне появится результат выполнения кода. (Примечание: если набирать код, не сохранив файл в начале, то подсветка синтаксиса будет отсутствовать.) Подготовьте скрипт (с примерами). Запустите его на выполнение.
На самом деле скрипты можно готовить в любом текстовом редакторе (желательно, чтобы он поддерживал подсветку синтаксиса языка Python). Кроме того, существуют специальные программы для разработки. Запускать подготовленные файлы можно не только в IDLE, но и в консоли с помощью команды python адрес/имя_файла. В консоли передайте интерпретатору Питона на выполнение подготовленный файл. Кроме того, существует возможность настроить выполнение скриптов с помощью двойного клика по файлу (в Windows данная возможность присутствует изначально).[25]
Не бойтесь совершать ошибки! Python поправит и подскажет, на что следует обратить внимание.
В случае сомнений в порядке вычислений будет не лишним обозначить приоритет в виде круглых скобок.[26] Выражаясь в терминах программирования, только что мы познакомились с числовым типом данных8 (целым типом int и вещественным типом float), т.е. множеством числовых значений и множеством математических операций, которые можно выполнять над данными значениям. Язык Python предоставляет большой выбор встроенных типов данных.
Java
Строго типизированный объектно-ориентированный язык программирования. Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой компьютерной архитектуре, с помощью виртуальной Java-машины. Достоинством подобного способа выполнения программ является полная независимость байт-кода от операционной системы и оборудования компьютера, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности, в рамках которой выполнение программы полностью контролируется виртуальной машиной. Изначально язык назывался Oak («Дуб») разрабатывался Джеймсом Гослингом для программирования бытовых электронных устройств. Впоследствии он был переименован в Java и стал использоваться для написания клиентских приложений и серверного программного обеспечения.
Java-технология используется для разработки приложений, предназначенных для широкого спектра систем – от мобильных устройств до корпоративных систем. Язык Java был создан в 1995 году Джеймсом Гослингом (James Gosling) в корпорации Sun Microsystems (в настоящее время дочерняя компания корпорации Oracle) с целью получения упрощенной платформенно-независимой альтернативы языку C++.[27] Сходство языков C, C++ и Java, прежде всего, проявляется в том, что блоки кода выделяются фигурными скобками {и}, а переменные должны быть объявлены перед их использованием. Кроме того, многие языковые конструкции Java заимствованы из C, например, операторы организации цикла, условные операторы, сравнения и многие другие. Java является объектно-ориентированным (ОО), что позволяет легко связать программные конструкции с объектами-сущностями предметной области в процессе разработки программных систем.
Компилятор Java
Существуют различные типы языков программирования. В некоторых из них программист пишет текст программы (исходный код) и может выполнить ее в исходном виде непосредственно. Это т.н. интерпретируемые языки (например, JavaScript, Python, Ruby). При программировании на платформе Java программист пишет исходный код в файлах с расширением .java, а затем компилирует его. Компилятор проверяет код на соблюдение правил синтаксиса языка, а затем записывает байт-коды (bytecode) в файлы с расширением .class. Байт-коды - это стандартные инструкции, предназначенные для работы на виртуальной машине Java (Java Virtual Machine – JVM).[28] Кроме проверки программы на наличие синтаксических ошибок, компилятор Java добавляет некоторые другие библиотеки (связывает) к программе после завершения компиляции (этап развертывания). Использованием этого уровня абстракции компилятор Java отличается от компиляторов других языков, которые создают инструкции для процессора, на котором впоследствии будет выполняться программа.
Java Development Kit и Java Runtime Environment
Если вы планируете использовать определенный компьютер для разработки программ на Java, то необходимо загрузить и установить Java Development Kit (JDK). Загрузив JDK, вы получите – в дополнение к компилятору и другим инструментам – полную библиотеку классов готовых утилит, которые позволят решить практически любую общую задачу разработки приложений. Если вы планируете использовать этот компьютер только для запуска программ Java, которые были скомпилированы в другом месте, вам просто нужно Java Runtime Environment (JRE). Если JDK установлен на вашем компьютере, он включает в себя JRE. Среда исполнения JRE включает в себя JVM, библиотеки кода и компоненты, необходимые для исполнения программ на языке Java. Независимость от платформы Java исходит от того, что Java программа не знает, под какую операционную систему (ОС) или на каком аппаратном обеспечении она выполняется. Она работает в предустановленным JRE, что означает возможность исполнения на всех платформах, для которых имеется JRE. JRE можно свободно распространять с собственными приложениями в соответствии с условиями лицензии, предоставляя пользователям платформу для работы с вашим ПО.[29]
JVM
Во время выполнения кода JVM читает и интерпретирует файлы с расширением .class и выполняет команды программы на той аппаратной платформе, для которой написана JVM. JVM интерпретирует байт-коды так же, как процессор – инструкции на языке ассемблера. Разница в том, что JVM – это программа, написанная для конкретной платформы. JVM составляет основу принципа языка Java "написано однажды – работает везде" (write-once, run-anywhere). Ваш код будет работать на любом процессоре, для которого есть реализация JVM. Реализация JVM существует для всех основных платформ, таких как Linux и Windows, а подмножества языка Java реализованы в виртуальных машинах для мобильных телефонов и встраиваемых устройств.
Java SE и EE
Прежде, чем перейти к процессу загрузки, вам нужно ознакомиться с еще двумя понятиями: Java SE (Standard Edition) и Java EE (Enterprise Edition). Java EE содержит серверные инструменты и компоненты, которые будут рассматриваться в последующих дисциплинах. Однако уже сейчас можно обозначить разновидности приложений, которые можно разрабатывать на Java, в том числе: приложения десктопные и распределенные, в том числе для мобильных телефонов. Простые приложения с интерфейсом командной строки или графическим интерфейсом; апплеты (Applet) – приложения, выполняемые на браузере. Приложение на Java, которое хранится на сервере, загружается браузером и выполняется на клиентском компьютере на виртуальной машине, расширяющей возможности браузера;[30]
серверные программа Java - Servlet, Java Server Pages (JSP), Java Server Faces (JSF). Серверные программы, предназначенные для выполнения серверных вычислений и организации графического интерфейса Web-приложения; Enterprise Java Beans (EJB) – серверные компоненты архитектуры Java EE для реализации бизнес-логики; Web Services - идентифицируемая веб-адресом программная система со стандартизированными интерфейсами взаимодействия. Распределенные сервисы, использующие RMI (remote method invocation - удаленный вызов процедур). Ниже представлены ряд программ, которые требуют компонентов, не входящих в Standard Edition JDK (доступны в Enterprise Edition): Servlets; Web Services; Enterprise Java Beans. Кроме перечисленных, в состав JavaEE входит большое количество других технологий, которые способствуют эффективной разработке корпоративных распределенных инфокоммуникационных систем. Упомянутые технологии требуют специального рассмотрения и не являются предметом настоящего пособия.[31]
Язык Java специально разработан для качественного рывка в создании интерактивных распределенных приложений для сети Internet и основными достоинствами языка являются:
- наибольшая среди всех языков программирования степень переносимости программ между платформами (процессорами/операционными системами). Практически любой процессор позволяет использовать программы на Java, также как и практически все операционные системы поддерживают программирование на этом языке, включая Windows, Linux, MacOS, iOS и Android;
- мощные стандартные библиотеки (frameworks), предназначенные для использования при разработке программ;
- встроенная поддержка работы в сетях (как локальных, так и Internet/Intranet – сети с использованием TCP/IP).[32]
- простой сходство с C и C++ устранение проблематичных элементов
- объектно-ориентированный чистая реализация объектно-ориентированной концепции
- распределенный поддержка сетевого взаимодействия, удаленный вызов методов • интерпретируемый байт-код выполняется виртуальной машиной Java (JVM)
- надежный устранение большинства ошибок на этапе компиляции
- безопасный контроль и ограничение доступа
- архитектурно-нейтральный работа на любых платформах
- переносимый независимость спецификации от реализации
- высокоэффективный приближенность байт-кода к машинному сочетание производительности и переносимости
- многопотоковый встроенная поддержка многопотокового выполнения приложений
- динамический загрузка классов во время выполнения приложений.[33]
К недостаткам платформы Java можно отнести:
- низкое, в сравнении с другими языками, быстродействие, повышенные требования к объему оперативной памяти. В последнее время утверждение становится не таким актуальным, поскольку эффективность языка Java увеличивается с появлением новых версий;
- большой объем стандартных библиотек и технологий создает сложности в освоении языка;
- постоянное развитие языка вызывает поддержку как устаревших, так и новейших средств, имеющих одно и то же функциональное назначение.[34]
C#
Язык программирования – это набор правил, с помощью которых программист записывает исходную программу. Далее из полученного текста специализированные программы (трансляторы, компоновщики и др.) практически без участия человека формируют код, предназначенный для процессора. По степени соответствия конструкций языка машинному (процессорному) коду языки программирования делятся на низкоуровневые (машинно ориентированные) и высокоуровневые. В свою очередь, языки высокого уровня делятся на структурные (процедурно ориентированные) и объектно ориентированные. В первом случае концепция программирования может быть определена как набор функций (центральный элемент системы), обрабатывающих данные (второстепенный элемент). В объектно ориентированных языках центральное место отведено данным, а выполнение функций так или иначе организовано вокруг этих данных. Типичным представителем процедурных языков считается язык Си, объектно ориентированных – Си++.[35] Последний до недавних пор считался универсальным для решения широкого круга задач.[9] При этом использование Си++ в конкретных инструментальных системах (например, Builder) и для конкретного вида приложений (например, сетевых приложений) требовало специализированных добавлений (надстроек) языка и в ряде случаев приводило к созданию своего рода диалектов, в которых базовые конструкции зачастую оказывались не всегда различимым фоном. Когда суммарный вес специфических добавок превысил некоторый порог, появился новый язык программирования С# (произносится как си шарп, хотя разработчики предполагали название си-диез), вобравший в себя наиболее значимые черты своих предшественников и в большей степени отвечающий современным потребностям. Объектно-ориентированный язык программирования. Разработан в 1998—2001. Руководителем группы разработчиков языка С# был Андерс Хейлсберг, сотрудник компании Microsoft (ранее входил в группу разработчиков инструментальной системы Builder). Цели, которые преследовались созданием этого языка, были сформулированы им следующим образом: