Файл: Классификация языков программирования. Критерии выбора среды и языка разработки программ (Java).pdf

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

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

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

Добавлен: 01.04.2023

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

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

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

ВВЕДЕНИЕ

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

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

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

В рамках курсового проекта должны быть решены следующие задачи:

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

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

1. Анализ предметной области

1.1 Парадигмы программирования

Парадигма программирования — это комплекс концепций, принципов и абстракций, определяющих фундаментальный стиль программирования.

Одной из характеристик языка является его поддержка определенных парадигм программирования. Например, Smalltalk имеет прямую поддержку программирования объектно-ориентированным способом, поэтому его можно назвать объектно-ориентированным языком. Программы OCaml, Lisp, Scheme и JavaScript имеют тенденцию активно использовать функции, поэтому они называются «функциональными языками», несмотря на наличие переменных и многих императивных конструкций. [5, 9, 15]


Программирование — это написание программ. Программа для компьютера представляет собой алгоритм (последовательность) выполнения каких-либо действий, написанный на том или ином языке программирования. На сегодняшний день многие программы большие и сложные, над такими работают целые штаты сотрудников, при этом код не всегда пишется, а собирается из отдельных блоков. Поэтому правильнее говорить о их разработке (создании) программ, а не их написании.

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

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

На более продвинутом уровне переходят к изучению динамических типов данных (что предполагает более глубокое знание информатики) или объектно-ориентированного программирования (большинство современных программ создаются с использованием этой парадигмы).

Можно выделить два замечания:

  • Очень немногие языки реализуют парадигму на 100%. Если они это делают, они являются чистыми. Очень необычно иметь «чистый ООП» язык или «чистый функциональный» язык. У многих языков есть несколько ответвлений; например, в OCaml, можно программировать с функциями на 90% или более времени.
  • Многие языки облегчат программирование в одной или нескольких парадигмах. В Scala можно легко программировать с точки зрения объектно-ориентированного, и одновременного функционального программирования. Если язык специально предназначен для программирования во многих парадигмах, то он называется многопарадигменным языком. Бывают языки, которые стали поддерживать многофункциональность случайно, то есть изначально они не были разработаны с этой целью. Создатели таких языков придерживаются точки зрения, гласящей, что ни одна парадигма не может быть одинаково эффективной для всех задач, и следует позволять разработчику выбрать лучший стиль программирования для решения каждой отдельной задачи. [4].

Рассмотрим различные парадигмы программирования.

Управление потоком в императивном программировании является явным: команды показывают, как вычисление происходит, шаг за шагом.


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

Вычисления выполняются с помощью последовательности шагов, в которой эти переменные упоминаются или изменяются. Порядок шагов имеет решающее значение, поскольку данный шаг будет иметь разные последствия в зависимости от текущих значений переменных при выполнении шага [4, 14, 15].

Императивные языки программирования необходимы чаще, чем любые другие парадигмы в этом направлении. Для такой популярности есть две причины:

  • императивная парадигма наиболее близко напоминает собственно машинный код, поэтому программист гораздо ближе к “железу”;
  • из-за такой близости императивная парадигма была единственной, достаточно эффективной для широкого использования до недавнего времени.

Преимущества императивного подхода:

  • эффективность;
  • близость к «железу»;
  • популярность;
  • знаком программистам. [5, 9, 15]

Недостатки императивного подхода:

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

Логическая Парадигма применяет декларативный подход к решению проблем. Логическая парадигма программирования предусматривает использование математической логики для разработки программ. Проводятся различные логические утверждения о ситуации, устанавливаются все известные факты. Затем выполняются запросы. Роль компьютера — это сохранение данных и логический вывод. [5]

Логическая программа разделена на три раздела:

  1. ряд определений/деклараций, определяющих проблемную область;
  2. заявления соответствующих фактов;
  3. постановка целей в форме запроса.

Возвращается любое выводимое решение для запроса. Определения и декларации строятся целиком из отношений. т.е. X является членом Y или X находится внутри между a и b, и т. д. [9, 15]

Преимущества логико-ориентированного программирования многообразны:

  • система решает проблему, поэтому само программирование сводятся к минимуму;
  • доказательство действительности разработанных на нём программ является простым.

Функциональная парадигма программирования рассматривает все подпрограммы, как функции в математическом смысле, неформально, они принимают в качестве аргументов и возвращают единственное решение. Возвращенное решение полностью основано на вводе, а время, когда функция вызывается, не имеет никакого отношения. Поэтому вычислительная модель является одним из функций приложения и сокращения. [5, 8]


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

Имеются следующие преимущества функционального программирования:

  1. Высокий уровень абстракции, особенно когда используются чистые функции, которые исключают многие нюансы программирования и, таким образом, устраняют возможность совершения многих классов ошибок;
  2. Отсутствие зависимости от операций присваивания. Эта независимость в отношении оценки делает функционально-ориентированные языки хорошими кандидатами для программирования параллельных компьютерных систем;
  3. Отсутствие операций присваивания делает функционально-ориентированные программы гораздо более пригодными для математического доказательства и анализа, чем настольные программы, поскольку функциональные программы обладают ссылочной прозрачностью. [9]

К недостаткам можно отнести следующие:

  1. Менее эффективно.
  2. Проблемы, связанные с множеством переменных или много последовательной деятельности, иногда легче обрабатывать императивно или с объектно-ориентированным подходом.

1.2 Процедурные языки программирования

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

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

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

Область видимости — еще один метод, который помогает сохранять процедуры модульными. Это не позволяет процедуре получить доступ к переменным других процедур (и наоборот), включая предыдущие экземпляры, без явного разрешения. [2]


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

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

Процедурное программирование, которое порой упоминается как встроенное программирование, требует более глубокого подхода к программированию. Объектно-ориентированное программирование использует классы и объекты, процедурное программирование принимает приложения, решая проблемы с верхней части кода к нижней. [5, 9]

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

Проблема, очевидная в процедурном программировании, заключается в том, что, если редактирование требуется программе, разработчик должен отредактировать каждую строку кода. Например, если в начале программы переменная была установлена ​​равной значению 1. Если другие подпроцедуры программы полагаются на эту переменную равным 1 для правильной работы, их также необходимо будет отредактировать. Поскольку для кода может потребоваться все больше изменений, становится все труднее находить и редактировать все связанные элементы в программе. [1, 9]

1.3 Объектно-ориентированное программирование

Истоки ООП берут начало с 60-х годов XX века. Однако окончательное формирование основополагающих принципов и популяризацию идеи следует отнести к 80-м годам. Большой вклад внес Алан Кей.

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

Объектно-ориентированное программирование — это подход программирования, который использует классы и объекты для создания моделей, основанных на реальной среде. Объектно-ориентированное программирование может использовать коллекцию объектов, которые будут передавать сообщения при запросе конкретной услуги или информации. Объекты могут передавать, получать сообщения или обрабатывать информацию в виде данных. [7, 9, 15]