Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Понятие переменной в программировании . Виды и типы переменных

Содержание:

Введение

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

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

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

Задачи работы, обусловленные поставленной целью, состоят в следующем:

  1. дать понятие переменной в программировании;
  2. рассмотреть виды и типы переменных.

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

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

Понятие переменной в программировании

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

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

Значение каждого параметра хранения в определённом участке памяти компьютера и может меняться в процессе выполнения алгоритма. Такой участок памяти ПК компьютера называется переменной [1].

Каждой переменной присваивается имя. С переменной можно выполнять следующие действия:

1) прочитать её текущее значение;

2) записать новое значение в переменную или как говорят присвоить новое значение переменной;

Запись нового значения переменной выполняется с помощью так называемого оператора присваивания. Имя_переменной = выражение.

При выполнении оператора присваивания сначала вычисляется значение выражения в правой части, затем оно записывается в переменную, имя которой указано в левой части. Старое значение переменной при этом стирается.

1) Память – это материальный носитель, который хранит информацию. Эту информацию можно читать и перезаписывать

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

3) С переменной можно выполнять два действия: прочитать ее текущее значение и записать в нее значение (старое теряется). Для записи нового значения в переменную применяется оператор присваивания.

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

Для программистов переменные удобны и интуитивно понятны. С другой стороны, для вычислительной техники они не имеют реального значения. Микропроцессоры хранят данные в регистрах и ячейках памяти. Это фундаментальное различие между людьми, которые пишут программу, и машинами, которые выполняют программу, преодолевается языками высокого уровня, такими как C, который обрабатывает различные детали, связанные с переводом между текстовыми переменными и физической реальностью процессора [1].

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

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

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

Венгерская нотация

Венгерская нотация в программировании – соглашение об именовании переменных, констант и прочих идентификаторов в коде программ. Своё название венгерская нотация получила благодаря программисту компании Microsoft венгерского происхождения Чарльзу Симони, предложившему её ещё во времена разработки первых версий MS-DOS. Эта система стала внутренним стандартом Майкрософт [7].

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

Применяемая система префиксов зависит от многих факторов:

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

Среди программистов есть как сторонники, так и противники использования венгерской нотации. Противники утверждают, что она громоздка и лишь ухудшает понимание кода. Сторонники утверждают, что слишком многие неверно понимают основную идею и неправильно пользуются нотацией [7].

Преимущества

Если встроенного механизма типизации не хватает, венгерская нотация позволяет записывать подтип переменной – например, int cPrice может означать, что переменная имеет не просто целый тип, а валютный (currency). Именно такое применение префиксов было предложено Чарльзом Симони. Это может пригодиться:

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

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

В инженерных расчётах (для записи единиц измерения). Это позволяет избавиться от немалого количества ошибок простым подсчётом размерностей.

В других местах, где переменные одного и того же типа предназначены для хранения разнородных данных – например, в коде защиты от компьютерных взломщиков префикс может указывать на «безопасные» и «небезопасные» данные (SQL-инъекция, XSS).

Венгерская нотация удобна для написания больших программ в неполнофункциональных (по современным меркам) редакторах без автоматизированной навигации по тексту. Скорее всего, именно поэтому она стала стандартным стилем кода в WinAPI.

Венгерскую нотацию можно рассматривать как стандартную систему сокращений. Например, поле ввода для поиска и кнопка «Поиск» могут именоваться как txtSearch и btnSearch. Такая практика позволяет делать названия переменных короткими и в то же время осмысленными.

Недостатки

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

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

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

Запись нескольких префиксов из-за частого использования заглавных букв и знаков подчёркивания может стать «пляской на кнопке Shift».

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

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

Существуют и другие средства задания типа переменной в её имени: например, слова is, has и т. д. для булевского типа (IsLoggedIn), count для счётчика (RefCount), множественное число для массива (UserIds). В языках, в которых заглавные буквы не эквивалентны строчным, регистр букв также может кодировать что-либо.

Существуют и другие нотации, облегчающие написание программ, но они, как правило, более просты.

Примеры других нотаций:

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

Также, встречается lowerCamelCase, где внутри фразы с прописной пишутся все слова, кроме первого.

Snake case – стиль написания составных слов, при котором несколько слов разделяются символом подчеркивания (_), и не имеют пробелов в записи, причём каждое слово обычно пишется с маленькой буквы – «foo_bar», «hello_world» и т. д. Такой стиль написания используется для именования переменных и функций в исходном коде, и иногда для именования файлов на компьютере.

kebab-case похож на snake_case, но пробелы в нём заменяются на дефисы. Слова также пишутся строчными буквами. Опять же, его можно смешивать с camelCase и PascalCase, но в этом нет смысла.

Пример kebab-case для переменной kebab case var – kebab-case-var.

Типы и виды переменных

Переменные бывают [6]:

1) Логические

2) Символьные

3) Числовые

А) Целые

Б) Вещественные

В) Одинарной точности

Г) Двойной точности

Целочисленные переменные

Тип целое число является основным для любого алгоритмического языка. Символы представляются в компьютере целыми числами – их кодами в некоторой кодировке. Целая переменная в компьютере может хранить лишь ограниченное множество целых чисел в некотором интервале. В современном ПК под целую переменную отводится 8 байтов, т.е. 64 двоичных разряда. Она может хранить числа от нуля до 2 в 64-й степени минус 1. Таким образом максимальное число которое может храниться в целочисленной переменной, равно 18,446,744,073,709,551,615 (18 квинтиллионов 446 квадриллионов 744 триллиона 073 миллиарда 709 миллионов 551 тысяча 615).

Сложение и умножение значений целых переменных выполняется так: сначала производится арифметическая операция, затем старшие разряды результата, вышедшие за 64 разрядов (отбрасываются). Операции удовлетворяют традиционным законам коммутативности, ассоциативности и дистрибутивности [6]:

a + b = b + a, ab = ba

(a + b) + c = a + (b + c), (ab)c = a(bc)

a(b + c) = ab + ac

В языке С целым числам соответствуют типы int, char, bool

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

Вещественные переменные

Вещественные числа представляются в компьютере в так называемой экспоненциальной, или плавающей, форме. Вещественное число r имеет вид r= +- 2(в степени e) * m

Представление числа состоит из трех элементов [6]

1) Знак числа – плюс или минус. Под знак отводится 1 бит.

2) Показатель степени e, его называют порядком или экспонентой. Экспонента указывает степень двойки, на которую домножается число. Она может быть как положительной, так и отрицательной (для чисел, меньших единицы). Под экспоненту отводится фиксированное число двоичных разрядов, обычно 8 или 11, расположенных в старшей части двоичного представления числа, сразу вслед за знаковым разрядом.

3) Мантисса m представляет собой фиксированное количество разрядов двоичной записи вещественного числа в диапазоне от 1 до 2: 1 <= m <= 2

В языке С вещественным числам соответствуют типы float и double.

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

A + b = a при b != 0

Для сложения не выполняется закон ассоциативности: a + (b + c) != (a + b) + c

Точность вычислений вещественных чисел типа double составляет 16 десятичных цифр.

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

– Переполнение - когда порядок результата больше максимально возможного значения. Эта ошибка часто возникает при умножении больших чисел;

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

– Деление на ноль является некорректной операцией. – вызывают аппаратное прерывание работы процессора.

Символьные переменные

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

Символы представляются их целочисленными кодами в некоторой фиксированной кодировке. Кодировка определяется тремя параметрами:

1) диапазон значений кодов. Например ASCII. Стандартный код обмена информацией. От 0 до 127. Требует 7 бит на символ. Большинство современных кодировок имеют диапазон кодов от 0 до 255, т.е. 1 байт на символ. Unicode, – диапазон от 0 до 65535 – т.е. 2 байта (16 бит) на символ.

2) множеством изображаемых символов.

3) отображением множества кодов на множество символов. Кодировки кои-8, cp-1251, итд.

В языке C++ для Unicode существует тип wchar_t в котором под каждый символ отводится 2 байта.

Логические переменные и выражения

Логический тип данных bool, реализуется 1 байтом

Логические или условные выражения используются в качестве условия в конструкциях ветвления «если… то… иначе… конец если» и цикла «пока».

Любая операция сравнения имеет два аргумента и вырабатывает логическое значение «истина» и «ложь» (true и false)

Операции сравнения:

– Проверка равенства: ==

– Неравенство обозначается: !=

– Для сравнения величин выражений применяется четыре операции: больше> ; меньше < ; больше или равно >= ; меньше или равно <=

x == 0 // истина, если значение x равно 0

0 != 0 // ложь

3 >= 2 // истина

Явное и неявное преобразование типов переменных

Приведение (преобразование) типа – в программировании преобразование значения одного типа в значение другого типа.

Выделяют приведения типов:

1) явные

2) неявные

Явное приведение задаётся программистом в тексте программы с помощью:

1) конструкции языка;

2) функции, принимающей значение одного типа и возвращающей значение другого типа.

Неявное приведение выполняется транслятором (компилятором или интерпретатором) по правилам, описанным в стандарте языка. Стандарты большинства языков запрещают неявные преобразования.

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

Неявное приведение типов происходит в следующих случаях:

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

перед выполнением присваивания;

перед передачей аргумента функции;

перед возвратом функцией возвращаемого значения;

после вычисления выражения конструкции switch значение приводится к целочисленному типу;

после вычисления выражений конструкций if, for, while, do-while значение приводится к типу bool.

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

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

Статическая и динамическая типизация

Тип – это коллекция возможных значений. Целое число может обладать значениями 0, 1, 2, 3 и так далее. Булево может быть истиной или ложью. Можно придумать свой тип, например, тип "ДайПять", в котором возможны значения "дай" и "5", и больше ничего. Это не строка и не число, это новый, отдельный тип.

Статически типизированные языки ограничивают типы переменных: язык программирования может знать, например, что x – это Integer. В этом случае программисту запрещается делать x = true, это будет некорректный код. Компилятор откажется компилировать его, так что мы не сможем даже запустить такой код. Другой статически типизированный язык может обладать другими выразительными возможностями, и никакая из популярных систем типов не способна выразить наш тип ДайПять (но многие могут выразить другие, более изощренные идеи).

Динамически типизированные языки помечают значения типами: язык знает, что 1 это integer, 2 это integer, но он не может знать, что переменная x всегда содержит integer.

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

Статически типизированные языки

Статические языки проверяют типы в программе во время компиляции, еще до запуска программы. Любая программа, в которой типы нарушают правила языка, считается некорректной. Например, большинство статических языков отклонит выражение "a" + 1 (язык Си – это исключение из этого правила). Компилятор знает, что "a" – это строка, а 1 – это целое число, и что + работает только когда левая и правая часть относятся к одному типу. Так что ему не нужно запускать программу чтобы понять, что существует проблема. Каждое выражение в статически типизированном языке относится к определенному типу, который можно определить без запуска кода.

Динамически типизированные языки

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

def f(x, y):

return x + y

может складывать два целых числа, склеивать строки, списки и так далее, и мы не можем понять, что именно происходит, пока не запустим программу. Возможно, в какой-то момент функцию f вызовут с двумя строками, и с двумя числами в другой момент. В таком случае x и y будут содержать значения разных типов в разное время. Поэтому говорят, что значения в динамических языках обладают типом, но переменные и функции – нет. Значение 1 это определенно integer, но x и y могут быть чем угодно.

Статические и динамические переменные

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

Рассмотрим пример. Пусть в программе обрабатывается матрица 300*300 целых чисел, тогда ее нужно описать следующим образом:

var M1 : array[1..300,1..300] of Integer;

Такие переменные, описанные в разделе Var, Н.Вирт назвал статическими. Название "статические" они получили за то, что компилятор Паскаля может обработать их без выполнения программы, т. е. на основании лишь статического текста программы. Статические переменные можно использовать в случаях, когда память, необходимая для работы программы, предсказуема в момент написания программы.

В данном случае мы имеем наглядный пример нерационального использования памяти компьютера с применением статических переменных. Так как один элемент матрицы – целое число – занимает в памяти два байта, а общее количество элементов равно 300*300= 90000, то для размещения всей матрицы вышеописанным способом в памяти компьютера нужно 90000*2 байт = 180000 байт. Вместе с тем маловероятно, чтобы при всяком выполнении программы ей действительно были нужны одновременно все элементы такого огромного массива. К тому же все переменные, объявленные в программе, размещаются в одной непрерывной области оперативной памяти, которая называется сегментом данных. Длина сегмента данных определяется архитектурой микропроцессора 8086 и составляет 65536 байт (64 Кбайта), что также вызывает затруднения при обработке больших массивов данных [10].

Выходом из этого положения может быть использование динамической памяти. Динамическая память – это оперативная память компьютера, предоставляемая программе при ее работе, за вычетом сегмента данных (64 Кбайта), стека (обычно 16 Кбайт) и собственно тела программы. Размер динамической памяти определяется всей доступной памятью компьютера и составляет 200...400 Кбайт.

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

Указатели

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

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

Локальные и глобальные переменные

В программировании особе внимание уделяется концепции о локальных и глобальных переменных, а также связанное с ними представление об областях видимости. Соответственно, локальные переменные видны только в локальной области видимости, которой может выступать отдельно взятая функция. Глобальные переменные видны во всей программе. "Видны" – значит, известны, доступны. К ним можно обратиться по имени и получить связанное с ними значение. К глобальной переменной можно обратиться из локальной области видимости. К локальной переменной нельзя обратиться из глобальной области видимости, потому что локальная переменная существует только в момент выполнения тела функции. При выходе из нее, локальные переменные исчезают. Компьютерная память, которая под них отводилась, освобождается. Когда функция будет снова вызвана, локальные переменные будут созданы заново [5].

Простые и сложные переменные

По наличию внутренней структуры, переменные могут быть простыми или сложными (составными).

Простые переменные не имеют внутренней структуры, доступной для адресации. Последняя оговорка важна потому, что для компилятора или процессора переменная может быть сколь угодно сложной, но конкретная система (язык) программирования скрывает от программиста её внутреннюю структуру, позволяя адресоваться только «в целом» [4].

Сложные переменные программист создаёт для хранения данных, имеющих внутреннюю структуру. Соответственно, есть возможность обратиться напрямую к любому элементу. Самыми характерными примерами сложных типов являются массив (все элементы однотипные) и запись (элементы могут иметь разный тип).

Следует подчеркнуть относительность такого деления: для разных программ одна и та же переменная может иметь разную структуру. Например, компилятор различает в переменной вещественного типа 4 поля: знаки мантиссы и порядка, плюс их значения, но для программиста, компилирующего свою программу, вещественная переменная – единая ячейка памяти, хранящая вещественное число.

Сложные переменные

Сложный (составной) тип – тип данных, объекты (переменные или постоянные) которого имеют внутреннюю структуру, доступную программисту [4]. В разных языках программирования набор базовых сложных типов может несколько отличаться (чаще по названию и деталям реализации). Есть, однако, объективные критерии – однотипность элементов и способ доступа, позволяющие выделить главные представители сложных типов (названия приводятся на примере Pascal, в котором Н.Вирт наиболее чётко сформулировал эти идеи).

Массив

Массив (англ. array) (в некоторых языках программирования также таблица, ряд, матрица) – структура данных, хранящая набор значений (элементов массива), идентифицируемых по индексу или набору индексов, принимающих целые (или приводимые к целым) значения из некоторого заданного непрерывного диапазона. Одномерный массив можно рассматривать как реализацию абстрактного типа данных вектор [13].

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

Форма или структура массива – сведения о количестве размерностей и размере (протяжённости) массива по каждой из размерностей; может быть представлена одномерным массивом.

Особенностью массива как структуры данных (в отличие, например, от связного списка) является константная вычислительная сложность доступа к элементу массива по индексу. Массив относится к структурам данных с произвольным доступом [13].

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

Запись

Запись – агрегатный тип данных, инкапсулирующий без сокрытия набор значений различных типов [3].

Применяется во многих языках программирования. В одних языках (например, в Паскале) порядок размещения значений в памяти задаётся при определении типа и сохраняется на протяжении времени жизни объектов, что даёт возможность косвенного доступа (например, через указатели); в других языках (например, в ML) порядок размещения не определён, так что доступ к значениям возможен только по квалифицированному идентификатору. В некоторых языках, хотя порядок следования и сохраняется, но выравнивание контролируется компилятором, так что использование адресной арифметики может оказаться платформенно-зависимым. Некоторые языки позволяют присваивание между экземплярами разных записей, игнорируя различия в идентификаторах компонентов записей, и основываясь только на порядке следования. Другие языки, напротив, учитывают только совпадение имён, разрешая различия в порядке их определения.

Впервые записи были представлены в языке Кобол, где они имели довольно сложную нотацию. При проверке согласования типов, Кобол учитывает только совпадение имён полей записей и не учитывает совпадение порядка их следования [3].

Кортежи служат формальным обоснованием записей в теории типов. В то же время, в языках кортежи временами могут реализовываться посредством записей, использующих в качестве идентификаторов индексные номера полей в получаемом кортеже. Более точной теоретической моделью записей является System F-sub (расширение Системы F понятием подтипов). Компонентами записей могут быть функции первого класса, что позволяет реализовывать основные концепции объектно-ориентированного программирования. Имеются практические воплощения этой модели. С другой стороны, классы в объектно-ориентированном программировании естественным образом представляются в виде записей, содержащих поля-данные, которым дополнительно назначен атрибут видимости, сопровождаемых полями-методами, ориентированными на обработку этих записей. Например, именно таким образом классы воплощены в языке C++.

Объектные переменные

В дополнение к типам Byte, Integer, Long, Single, Double и String язык программирования может также иметь объектный тип данных (Object). Переменные или выражения типа Object ссылаются на объект языка или на объект, принадлежащий приложению, например Excel-объекты Workbook, Worksheet и Range.

Как и в случае с другими типами, можно объявлять переменные в модулях, процедурах и функциях с определенным типом Object, что показано в следующем операторе [11]:

Dim myObject As Object

Можно задавать переменную myObject, создаваемую предшествующим оператором Dim, чтобы она содержала ссылку на любой объект. Если вы собираетесь использовать переменную типа Object для некоторых специфических типов объектов, можно также объявлять объектную переменную для этого специфического типа объекта:

Dim InstBook As Workbook

Объектную переменную InstBook, создаваемую этим оператором Dim, можно использовать только для сохранения ссылок на объекты Workbook; при попытке присвоить переменной InstBook ссылку на объект Range или Worksheet отображается сообщение об ошибке несовпадения типов. Аналогично, следующее предложение объявляет объектную переменную, которая может сохранять только объекты Document:

Dim InstDoc As Document

Объектное выражение (object expression) – это любое выражение, которое определяет отдельный объект. Все объектные выражения должны вычисляться до единственной объектной ссылки; объектные выражения используются с единственной целью – создание ссылок на специфические объекты в ваших программах [11].

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

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

Оператор Set имеет следующий синтаксис [11]:

Set Переменная=Объект

Переменная – это любая объектная переменная или переменная типа Variant. Объект – любая допустимая объектная ссылка; это может быть другая объектная переменная или объектное выражение. Если Переменная – переменная, объявленная с каким-либо определенным типом (например, Range или Workbook), этот тип должен быть совместим с объектом, на который ссылается Объект.

Класс в программировании. Виды классов в языках программирования

Класс в программировании представляет собой группировку данных, полей и функций или методов. Все они называются переменными, методами или функциями-членами. Программа построена из набора классов. Как только он определен и реализован, можно объявить его элементы аналогично языковым переменным из примитивных типов «int», «double» и «String» [15].

SIMULA был первым объектным языком, он использовался для создания симуляций. Алану Кею, который в то время учился в университете штата Юта, понравился язык тем, что в перспективе его можно было применить для персонального компьютера с целью реализации графически-ориентированных приложений. Он предположил, что такой язык, как SIMULA, предоставит новичкам хороший способ для создания программ, и поделился своим видением с Xerox Parc. В начале 1970-х годов команда, возглавляемая Аланом Кейем, создала первый ПК под названием Dynabook с объектно-ориентированным языком Smalltalk, который существует и по сей день, хотя в коммерческих целях не особо широко используется.

Краткая история языка программирования

Идея объектно-ориентированного программирования (ООП) получила развитие в 1970-х, а в начале 1980-х Бьорн Страуструп интегрировал его в язык Си, который стал называться «C ++» – первый объектно-ориентированный язык (ООЯ), широко используемый в коммерческих целях.

В начале 1990-х годов группа в Sun под руководством Джеймса Гослинга разработала более простую версию C ++ под названием Java. Которая должна была стать языком для приложений видео по запросу. Этот проект Java программирования с нуля так и не был реализован. Группа вынуждена была переориентировать свое внимание на разработку языка для интернет-приложений. Он стал приобретать все более широкую популярность по мере того, как развивался интернет, хотя его проникновение на рынок было довольно сдержанным из-за кажущейся неэффективности.

Объектно-ориентированное моделирование

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

Основные термины

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

Переменные примитивных типов. Они определяются одним значением – целым, с плавающей запятой, символом или логическим знаком.

Переменные-ссылки – это имена более сложной информации: массивы или объекты определенного класса.

Ключевым моментом ООП является предотвращение неверной информации, поскольку переменные не были правильно инициализированы. Для верного определения объектов необходимо использовать конструктор–методов, срабатывающий автоматически каждый раз, когда создается объект. Основная миссия их – зарезервировать память, выполнить инициализацию переменных членов класса в программировании. Они не имеют возвращаемого значения «void», и их имя совпадает с именем общей группы. Его неявный аргумент – это объект, который создается.

Предельная переменная

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

Язык C использует 4 класса хранения. А именно:

Auto – устанавливается по умолчанию для всех переменных, объявленных внутри функции или блока классов в C. Следовательно, ключевое слово «auto» редко используется при написании программ на языке Си. Доступ к автоматическим переменным возможен только внутри блока/функции, в которой они были объявлены, а не вне их, что определяет их область действия. Конечно, к ним можно получить доступ во вложенные внутри родительского блока/функции, в которых была объявлена автоматическая переменная. Тем не менее, к ним можно получить доступ и вне их области действия, указывая на очень точное место в памяти, где находятся.

Внешний, когда переменная определена в другом месте, а не там, где используется. Как правило, значение присваивается в одном блоке, и это может быть перезаписано в другом. Таким образом, «extern» – это не что иное, как глобальная переменная, инициализированная с допустимым значением, в котором она объявлена для использования в другом месте.

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

Регистр, объявляет переменные, которые имеют ту же функциональность, что и автоматические. Единственное отличие состоит в том, что компилятор пытается сохранить их в микропроцессоре, если доступ свободный. Это делает использование намного быстрее, чем в памяти во время выполнения программы. Если свободный регистр недоступен, они сохраняются только в памяти. Обычно немногие переменные, к которым в программе нужно обращаться очень часто, объявляются с ключевым словом «register», что улучшает время выполнения программы.

Заключение

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

Переменная в программировании – это поименованная, либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным. Слово, из этого определения, на которое я хотел бы обратить ваше внимание – это данные. Так ли на самом деле, что в языках программирования, на которых мы пишем, переменные используются только для доступа к данным [1, c. 103]. 

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

Библиография

  1. Абрамов, С.А. Математические построения и программирование / С.А. Абрамов. - М.: Наука, 2016. - 192 c.
  2. Вирт, Н. Алгоритмы и структуры данных / Н. Вирт. - М.: Мир, 2016. - 360 c.
  3. https://wiki2.org/ru/%D0%97%D0%B0%D0%BF%D0%B8%D1%81%D1%8C_(%D1%82%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85) – запись.
  4. https://studfiles.net/preview/6196128/page:4/ - простые и сложные переменные.
  5. https://studopedia.ru/3_36193_lokalnie-i-globalnie-peremennie.html - локальные и глобальные переменные.
  6. https://studfiles.net/preview/1845352/page:10/ - типы переменных в программировании.
  7. https://dic.academic.ru/dic.nsf/ruwiki/82967#.D0.9D.D0.B5.D0.B4.D0.BE.D1.81.D1.82.D0.B0.D1.82.D0.BA.D0.B8 – Венгерская нотация.
  8. https://habr.com/ru/post/308484/ - статическая и динамическая типизация.
  9. https://lektsii.org/18-45519.html - понятие переменной.
  10. https://wiki2.org/ru/%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) – статические и динамические переменные.
  11. https://studfiles.net/preview/4219409/page:4/ - объектные переменные.
  12. https://www.turkaramamotoru.com/ru/%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F-(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)-245694.html – классификация переменных.
  13. https://wiki2.org/ru/%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) – массив.
  14. https://studopedia.ru/9_6278_strukturnoe-programmirovanie.html - структурное программирование.
  15. https://ruud.ru/it/67041-klass-v-programmirovanii-vidy-klassov-v-yazykax-programmirovaniya/ - класс в программировании.