Файл: Основные правила работы с функциями: примеры и ограничения использования функций в различных языках программирования (Языки программирования высокого уровня).pdf

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

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

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

Добавлен: 23.04.2023

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

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

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

Введение

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

Объектно-ориентированный язык программирования - язык, построенный на принципах объектно-ориентированного программирования. В основе концепции объектно-ориентированного программирования лежит понятие объекта - некой сущности, которая объединяет в себе поля и методы.

В современных объектно-ориентированных языках используются механизмы: наследование. Создание нового класса объектов путём добавления новых элементов. Некоторые языки позволяют выполнять множественное наследование, то есть объединять в одном классе возможности нескольких других классов; инкапсуляция.

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

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

Объект исследования – языки программирования.

Предмет исследования – основные правила работы с функциями.

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


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

– изучить основные сведения о языках программирования;

– описать отличия языков программирования;

– определить объектные средства языков программирования;

– изучить правила работу с функциями в языках программирования;

– разработать программу демонстрации приемов работы с функциями.

Глава 1. Языки программирования высокого уровня

1.1. Основные сведения о языках программирования

Язык программирования C# представляет собой объектно-ориентированный язык программирования, который был разработан в 1998-2001 годах группой инженеров при постоянном руководстве Андерса Хейлсберга в компании Microsoft как язык программирования для выполнения разработки приложений под платформу от корпорации Microsoft .NET Framework и впоследствии был стандартизирован как ECMA-334 и стандарт ISO/IEC 23270.

Объектно-ориентированный язык программирования C# можно отнести к семейству языков программирования которые имеют C-подобный синтаксис, из них его внутренний синтаксис является наиболее приближенным к языку программирования C++ и Java. Язык программирования C# включает полиморфизм, поддерживает механизм статической типизации, перегрузку используемых операторов, атрибуты, свойства, делегаты, итераторы, обобщённые типы и методы, анонимные функции, поддерживающие замыкания, LINQ, различные исключения, комментарии в формате XML [8].

Переняв многое от своих предшественников - языков C++, Pascal, Модула, Smalltalk и, в особенности, Java - С#, опираясь на практику их практического использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# в отличие от C++ не поддерживает множественное наследование классов.

C# был разработан в качестве языка программирования прикладного уровня для CLR и, который зависит от возможностей самой CLR. Это касается системы использования типов данных языка программирования C#, которая отражает BCL. Отсутствие или присутствие тех или иных особенностей языка программирования диктуется тем, что может ли языковая особенность языка программирования быть транслирована в конструкции CLR.


Таким образом, с развитием CLR от версии 1.1 к версии 2.0 достаточно сильно обогатился и сам язык программирования C#; подобного взаимодействия можно было ожидать и в дальнейших версиях языка программирования (однако, эта закономерность была нарушена с выходом языка C# 3.0, который представляет собой расширение языка, которое не опирается на расширения платформы технологии .NET) [10]. CLR предоставляет языку программирования C#, как и всем другим .NET-ориентированным языкам, большинство возможностей, которых не имеют «классические» языки программирования.

Например, выполнение сборка мусора не была реализована в самом языке программирования C#, а выполняется CLR для программ, которые написаны на языке C# точно так же, как это выполняется для программ на языке VB.NET, J# и др.

Существует несколько реализаций объектно-ориентированного языка программирования C#:

– проект Mono включает в себя реализацию языка программирования C# с открытым исходным кодом;

– проект DotGNU также включает компилятор языка программирования C# с открытым кодом;

– реализация языка программирования C# в виде компилятора csc.exe была включена в состав платформы .NET Framework (включая .NET Micro Framework, .NET Compact Framework);

– в составе проекта Rotor компании Microsoft;

– проект dotNetAnywhere ориентирован на встраиваемые системы, реализация CLR, выполняется поддержку практически всех спецификаций языка программирования C# 2.0 [6].

Таким образом, объектно-ориентированный язык программирования С# имеет множество особенностей, однако он во многом схож с языком программирования Java.

Языковые конструкции языка программирования С++ и С# очень схожи, однако существенные различия можно найти в некоторых деталях. Синтаксис языка программирования С# можно назвать упрощенной версией языка С++, таким образом С#, как и любое упрощение, одновременно несет и позитивный и негативный эффекты для разработки высокопроизводительных программ [1].

Также, необходимо отметить, что более сложный код часто легче пишется и в последующем анализируется, если написан более простым языком. С этой позиции, используя язык программирования С#, меньше шансов допустить ошибку в принципиально сложном коде и больше шансов написать чистый код, обладая теми же ресурсами. Это может быть полезно при решении достаточно сложных, но не требовательных к производительности задач. Однако при этом большее количество «синтетики» в С# делает меньше оценку производительности кода по его «внешнему виду».


1.2. Отличия языков программирования

Языки программирования C# и Java используют в качестве синтаксической основы язык программирования C. В частности, от него были унаследованы без каких-либо серьезных изменений:

– использование синтаксиса описания и последующего использования внутренних переменных и специальных функций (порядок «тип имя», использование специализированных модификаторов, обязательным условием является наличие скобок для всех функций, описания формальных параметров);

– использование обозначений начала и конца блоков разрабатываемого программного кода фигурными скобками;

– использование различных обозначений, ассоциативности и приоритетности основных встроенных операций, к которым можно отнести побитовые операции, логические операции, присвоение, арифметические операции, операции декремента и инкремента, тернарная условная операция «?:»);

– синтаксис всех основных конструкций языка программирования: циклов, встроенных операторов множественного выбора, условного оператора выбора [7].

Механизм работы с динамическими данными и сборка мусора в языке программирования.

В рассматриваемых языках программирования реализована одна схожая модель работы с динамическими данными: динамическое создания различных объектов при помощи специальной конструкции new, среда исполнения выполняет отслеживание наличия внутренних ссылок на них, а сборщик мусора используется для периодического очищения используемой памяти от обработанных объектов, различных ссылок на которые не существует [4].

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

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

В языке программирования Java и в C# есть сильные и слабые ссылки на объекты. Оба языка поддерживают методы-финализаторы. Из-за неопределённости момента удаления объекта финализаторы не могут использоваться для освобождения системных ресурсов, занятых объектом, что вынуждает создавать дополнительные методы для «очистки» объекта и вызывать их явно.


Язык программирования Java позволяет выполнить регистрацию слушателей (listener), которые будут получать определенные информационные сообщения, когда ссылка будет подвергнута операции сборки мусора, что обеспечивает улучшение производительности WeakHashMaps [2].

Язык программирования C# позволяет выполнить отмену использования различных специальных финализаторов для некоторых обрабатываемых объектов специализированным методом GC.SuppressFinalizes(obj) (например, выполнение конструирования запросов SQL на файловом потоке).

Это может понадобиться для выполнения процессов финализации и считается довольно дорогой операцией в процессе непосредственного выполнения сборки мусора. Язык программирования C# в стандартной библиотеке содержит интерфейс IDisposables и специальную конструкцию using, которая гарантирует выполнение своевременного вызова необходимых метода очистки [9].

Очевидным является факт того, что возможности по оптимизации unmanaged кода куда шире, чем возможности по оптимизации managed кода. Таким образом, пиковая производительность кода достижима только в unmanaged исполнении, т.е. в пределе, почти любая задача на С++ может быть решена с меньшими требованиями к ресурсам. Поэтому в тяжелых задачах, которые связаны с обработкой достаточно большого количества оперативных данных, С++ имеет сильные преимущества перед языком программирования С#.

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

Если говорить о совокупности субъективных «простоты разработки», «красоты кода» и объективной производительности, то используя C# проще написать код, удовлетворяющий этим критериям одновременно. Однако это не значит, что производительный код на С++ обязательно будет страшным или сложным для восприятия, просто при его написании потребуется более «творческий» подход для удовлетворения перечисленных критериев одновременно.

1.3. Объектные средства языков программирования

Объектные средства языков программирования C# и Java можно обозначить по следующим основным характеристикам: инкапсуляция; внутренние классы; методы. Рассмотрим более подробно каждую характеристику.

Инкапсуляция.

В языке программирования Java специальный модификатор protected в описании, помимо выполнения операций доступа из классов-потомков, разрешается доступ из всех классов, которые входят в тот же пакет, что и класс-владелец [5].