Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






О семантике присваивания.






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

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

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

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

Класс – это понятие позволило интегрировать внеязыковое понятие «динамический тип данных» с языковыми возможностями указателей и динамических переменных в конструировании «динамических структур данных». Класс позволяет оформить ранее внеязыковое понятие «динамический тип данных» как языковой тип данных, определяемый пользователем-программистом (**).

Класс - это динамический тип данных по определению (по крайней мере в Object Pascal 2 и C++), независимо от того как обстоят дела с реальным (физическим) количеством компонентов в его значениях и со связями между ними. Почему?... видимо потому что уже на методологическом уровне разделены понятия «логическое» и «физическое» множество возможных значений этого типа данных. Инкапсуляция способа представления данных этого типа закрывает возможность однозначной трактовки, которая вполне может оказаться различной для логического множества возможных значений и различных физических его представлений.

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

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

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

Если же переменная имеет значение динамического типа, например типа «стек», определенного как класс и к тому же реализованного как цепочка с указателями, то естественно возникает много вопросов на тему – насколько рациональным является использование семантики по значению для присваивания значения такой переменной. Единого устоявшегося мнения на сегодня в теории и методологии программирования на этот счет нет.

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

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






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.