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

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

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

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

Добавлен: 28.03.2023

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

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

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

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

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

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

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

Принципиальная возможность для одного и того же кода обрабатывать данные разных типов определяется свойствами системы типов языка. С этой точки зрения различают статическую неполиморфную типизацию (потомки Алгола и BCPL), динамическую типизацию (потомки Lisp, Smalltalk, APL) и статическую полиморфную типизацию (потомки ML). Использование ad-hoc-полиморфизма наиболее характерно для неполиморфной типизации.

Параметрический полиморфизм и динамическая типизация намного существеннее, чем ad-hoc-полиморфизм, повышают коэффициент повторного использования кода, поскольку определённая единственный раз функция реализует без дублирования заданное поведение для бесконечного множества вновь определяемых типов, удовлетворяющих требуемым в функции условиям. С другой стороны, временами возникает необходимость обеспечить различное поведение функции в зависимости от типа параметра, и тогда необходимым оказывается специальный полиморфизм[18].

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


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

В обоих языках программирования методы могут быть определены через внутренние функции классов. Тело используемого метода может быть расположено внутри описания определенного класса. Также, поддерживаются языками программирования C# и Java абстрактные методы и статические методы[20].

В языке программирования C# представлены механизмы явной реализации методов интерфейса, что обеспечивает классам реализовывать методы интерфейса отдельно от собственных методов или давать разные реализации одноимённых методов, которые принадлежат различным интерфейсам.

В объектно-ориентированном языке программирования Java базовые типы (byte, int, double, float, bool и пр.) могут быть переданы по значению, а для остальных (объектные) по значению может быть передана ссылка на необходимый объект[21].

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

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

И хотя язык программирования С# возможно использовать для построения приложений под не-Windows платформы, проблемы, вызываемые использованием .net в не-Windows окружении, сводят на нет многие преимущества выбора C#. Поэтому рекомендовать его для кроссплатформенного использования можно разве что если код на C# уже написан. При этом надо четко понимать, что в перспективе это будет приносить дополнительные затраты на поддержку.

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


2. Массивы в языке программирования

2.1. Массивы в языках программирования

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

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

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

Отдельная ячейка данных массива называется элементом массива. Элементами массива могут быть данные любого доступного типа. Массивы могут иметь как одно, так и более одного измерений. В зависимости от количества таких измерений массивы можно поделить на одномерные массивы, двумерные массивы, трёхмерные массивы и так далее до n-мерного массива.

Чаще всего в процессе программирования используются одномерные и двумерные массивы, поэтому можно рассмотреть только эти виды массивов для понимания данной темы.

Индекс начального элемента – 0, следующего за ним – 1 и т.д. Индекс последнего элемента в массиве – на будет единицу меньше, чем размер исходного массива.

Одномерный массив представляет собой массив, с одним параметром, который характеризует количество элементов одномерного массива. Фактически одномерный массив представляет собой массив, у которого может быть только одна строка, и n-е количество столбцов. Столбцы в одномерном массиве являются элементами массива[24].


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

int s[25];

где, int представляет собой целочисленный тип данных;

s является именем создаваемого одномерного массива;

значение 25 представляет собой размер созданного одномерного массива, 25 ячеек.

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

Также, еще есть один способ для объявления одномерного массива

int t[22], y[23];

Объявлены два одномерных массива t и y размерами 22 и 23 соответственно. Причём в таком способе объявления все массивы будут иметь одинаковый тип данных, в нашем случае - int.

Массивы в языке программирования С++ могут быть инициализированы при их непосредственном объявлении следующим образом[25]:

int r[20] = { 8, -12, -18, 5, 16, 3, -65, -17, -8, 29, 60, 6, 12, 44, 55, -67, 89, 23, 23, 34 };

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

Инициализации массива без определения его размера может быть выполнена следующим образом

int r[]={8, -12, -18, 5, 16, 3, -65, -17, -8, 29, 60, 6, 12, 44, 55, -67, 89, 23, 23, 34 };

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

В Java массивы являются объектами. Это значит, что имя, которое даётся каждому массиву, лишь указывает на адрес какого-то фрагмента данных в памяти. Кроме адреса в этой переменной ничего не хранится[26]. Индекс массива, фактически, указывает на то, насколько надо отступить от начального элемента массива в памяти, чтоб добраться до нужного элемента.

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

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

int[] FirstArray;

или так

int SecondArray[];

Однако, это не приветствуется соглашением по оформлению программного кода в языке программирования Java, в связи с тем, что скобки обозначают то, что программист имеет дело с массивом и логичнее, когда они находятся рядом с обозначением типа[27].


Исходя из данного примера, было объявлено два массива с именами myFirstArrays и mySecondArrays. Эти массивы будут содержать элементы типа int.

Подобным образом можно выполнить объявление массива любого другого типа:

byte[] ArrayByte;

short[] myArrayShort;

long[] myArrayLong;

float[] myArrayFloat;

char[] myArrayChar;

String[] myArrayString;

...

Тип массива задается, таким образом type[], где type представляет собой определенный тип данных содержащихся в нем элементов. Скобки являются обозначением того, что переменные содержатся в данном массиве. Имя массива может быль любым, однако, оно должно в полной мере соответствовать установленным правилам именования переменных в языке программирования Java[28].

Массив можно создавать не только из переменных базовых типов, но и из произвольных объектов.

В процессе объявлении массива в языке программирования Java нет необходимости указывать его размер и не нет необходимости резервировать память для него. Нужно создание соответствующие ссылки на массив.

2.2. Работа с массивами

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

int[] myFirstArray;

myFirstArray = new int[22];

В данном примере будет создан массив из 22 элементов типа int и присвоено ему ранее объявленной переменной myFirstArray.

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

int[] myArray = new int[22];

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

myFirstArray[0] = 85;

myFirstArray[2] = 89;

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

for(int i = 0; i < 55; i++){

FirstArray[i] = 63;

}

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

Рассмотрим создание и инициализацию массива на следующем примере. В нем создается массив, который содержит цифры от 0 до 20 с выводом значения в консоль.