Файл: Современной налоговой системы РФ.pdf

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

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

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

Добавлен: 04.04.2023

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

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

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

Современные языки программирования значительно отличаются от и языков низкого уровня и машинно-ориентированных языков.

Машинные программы в конечном итоге записываются при помощи только двух символов 0 и 1.

В каждой ЭВМ содержатся ограниченные наборы машинных операций, зависящие от структуры процессора. Обычно, такие наборы состоят из относительно небольших количеств простых операций, например: записать число в ячейку; прочитать число из ячейки; увеличить значение содержимого в ячейке на 1 и т.п.

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

Главным преимуществом в современных языках программирования принято считать более понятный человеку программный код и возможность переноса программ с одного процессора на другой. Несмотря на то, что в некоторых источниках [2] такая возможность оспаривается, все же, при выполнении ряда условий перенос некоторых программ возможен.

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

В современных языках программирования выделяют следующие достоинства:[5]

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

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

При значительных достоинствах современные языки программирования имеют и ряд недостатков.


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

Другим недостатком современных языков программирования называют высокую стоимость компиляторов и сложность отладки. Но эта проблема также решается благодаря развитию техники.

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

Глава 2. Особенности программирования на современных языках

2.2. С++

C++ — компилируемый статически типизированный язык программирования общего назначения.

В C++ поддерживаются такие парадигмы программирования как:

  • процедурное программирование;
  • объектно-ориентированное программирование;
  • обобщённое программирование.

С++ обеспечивает: [7]

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

Стандартная библиотека включает, в том числе, общеупотребительные контейнеры и алгоритмы. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков [8]. В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.

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

Область применения С++ включает:

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

Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ. На платформе x86 это GCC, Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder и другие. C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C#.


Синтаксис C++ унаследовал от языка C. Одним из принципов разработки было сохранение совместимости с C. Тем не менее, C++ не является в строгом смысле надмножеством C; множество программ, которые могут одинаково успешно транслироваться как компиляторами C, так и компиляторами C++, довольно велико, но не включает все возможные программы на C.

Следствием того, что С++ был создан на базе языка С, явилась поддержка в С++ не объектно-ориентированного подхода в написании программного кода и объектно-ориентированного.

Далее описаны объектно-ориентированные особенности языка С++.

В стандарте C++ под классом (class) подразумевается пользовательский тип, объявленный с использованием одного из ключевых слов class, struct или union, под структурой (structure) подразумевается класс, определённый через ключевое слово struct, и под объединением (union) подразумевается класс, определённый через ключевое слово union.

В C++ при наследовании одного класса от другого наследуется реализация класса, плюс класс-наследник может добавлять свои поля и функции или переопределять функции базового класса. Множественное наследование разрешено.

Конструктор наследника вызывает конструкторы базовых классов, а затем конструкторы нестатических членов-данных, являющихся экземплярами классов. Деструктор работает в обратном порядке.

Наследование бывает публичным, защищённым и закрытым (то есть закрытого типа).

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

Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта[4].

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

Пример полиморфизма в С++ представлен ниже.

Первым определяется базовый класса Point, с виртуальным методом Draw(). Вместо тела метода записан спецификатор "= 0". Метод Draw() класса Point не может быть непосредственно вызван, он должен быть переопределен в классах - потомках.

class Point{

public:

virtual void Draw() = 0;

}

Производными от класса Point, определяются классы Line и Circle.

class Line: Point{

public:

void Draw() {};

}

class Circle: Point{

public:

void Draw() {};

}

В классах Line и Circle. метод Draw() переопределен.

Дружественные функции и классы, не являющиеся членами класса, в котором они объявлены , тем не менее имеют доступ к защищённым и закрытым членам класса. Они должны быть объявлены в теле класса как friend[4]. Ниже представлен пример использования дружественного класса.


class Matrix {

friend class Vector::getNum( Matrix & ) ;

private:

int i;

};

class Vector

{

//обращение к закрытому члену данных класса Matrix

int GetNum( Matrix & m ){ return m.i;}

};

Инкапсуляция в С++ реализуется через указание уровня доступа к членам класса: они бывают публичными (открытыми, public), защищёнными (protected) и собственными (закрытыми, приватными, private).

Таблица 1 - Модификаторы доступа в С++

Доступ

private

protected

public

Сам класс

да

да

да

Друзья

да

да

да

Наследники

нет

да

да

Извне

нет

нет

да

Ниже представлен пример указания уровней доступа к членам класса в С++.

class Picture{

public:

void Draw() {};

protected:

void ReDraw() {};

private Remove() {};

}

В классах всегда есть специальные функции — конструкторы и деструкторы, которые могут быть объявлены явно или неявно.

Конструктор вызывается для инициализации объекта (соответствующего типа) при его создании, а деструктор — для уничтожения объекта.

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

Конструкторы обозначаются как одноимённые классу функции , деструкторы — как имя класса, предварённое тильдой.

Для конструкторов и деструкторов нельзя указывать тип возвращаемого значения.

Деструктор нельзя объявлять как принимающий аргументы.

Класс может иметь произвольное количество конструкторов, с различными наборами параметров, в том числе шаблонных, и только один деструктор. Деструктор не может быть нешаблонным.

Пример конструктора и деструктора в С++ представлен ниже.

class Point{

Point::Point() {};

Point::~Point() {};

}

Функции – члены классов могут быть операторами:

Пример представлен ниже.

class Array {

...

inline int& operator[] (int n) { return val[n]; }

}

Использование класса Array:

Array a(10);

...

int c = a[2];

Для демонстрации использования классов и объектов в языке С++ создана тестовая программа.

Для сборки программы использовалась среда разработки Code::Block в состав которой входит компилятор MinGW, портированная на Windows версия GCC. Окно компилятора представлено на рисунке 1.


Рисунок 1 – Среда разработки Code::Block

Было создано консольное приложение, содержащее код, представленный в приложении А.

После сборки приложение было выполнено, результат представлен на рисунке 2.

Рисунок 2. Результат выполнения тестового приложения

2.2. Java

Java — объектно - ориентированный язык программирования, разработанный компанией Sun Microsystems. На сегодняшний день разработку Java ведет корпорация Oracle.

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

Дата официального выпуска первого релиза Java — 23.05.1995 [1].

Виртуальная машина Java (JVM) является программой, которая обрабатывает байтовый код и передает инструкции оборудованию аналогично интерпретаторам.

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

Важная особенностью технологии Java является гибкая система безопасности.

Выполнение программ контролируется виртуальной машиной полностью.

Все операции, которые нарушают определенные для программ права (например, попытки подключения к другим компьютерам или несанкционированный доступ к данным или) немедленно прерываются.

В языке Java определены 8 скалярных типов данных: byte, boolean, short, char, int, float, long, double и девятый вспомогательный примитивный тип — void[15].

Все остальные типы данных являются объектными.

В языке Java существуют только динамически создаваемые объекты. Причем в Java объекты и переменные объектного типа являются совершенно разными сущностями.

Переменные объектных типов являются ссылками, то есть неявными указателями на динамически создаваемые объекты. Это подчёркивается в синтаксисе описания переменных.

double[][] foo = new double[5][10];

Bar b = new Bar(15);

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

При доступе полям данных или методам объектов при помощи объектных переменных не требуются никакие специальные операции разыменовывания, доступ происходит так, как если объектная переменная является самим объектом.