Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Технологии программирования
1. Типы данных в языках программирования на примере C++, C#. Упаковка и распаковка объектов.
1. Типы данных в языках программирования на примере C++, Объектно-ориентированное программирование, доминирующее сегодня, построено на классах и объектах. Тем не менее, понятия типа и переменной все еще остаются центральными при описании языков программирования. Типы данных принято разделять на простые и сложные в зависимости от того, как устроены их данные. У простых (скалярных) типов возможные значения данных едины и неделимы. Сложные типы характеризуются способом структуризации данных, — одно значение сложного типа состоит из множества значений данных, организующих сложный тип. Есть и другие критерии классификации типов. Так, типы разделяются на встроенные типы и типы, определенныепользователем. Встроенные типы изначально принадлежат языку программирования и составляют его базис. В основе системы типов любого языка программирования всегда лежит базисная система типов, встроенных в язык. На основе встроенных типов программист может строить собственные, им определенные типы данных. Но способы (правила) создания таких типов являются базисными, встроенными в язык. Типы данных разделяются также на статические и динамические типы. Для данных статического типа память отводится в момент объявления, требуемый размер данных известен при их объявлении. Для данных динамического типа размер данных в момент объявления обычно не известен и память им выделяется динамически по запросу в процессе выполнения программы. Еще одна важная классификация типов – это их деление на значимые и ссылочные типы. Для значимых типов значение переменной (объекта) является неотъемлемой собственностью переменной (точнее собственностью является память, отводимая значению, а само значение может изменяться). Для ссылочных типов значением является ссылка на некоторый объект в памяти, расположенный обычно в динамической памяти – куче. Объект, на который указывает ссылка, может быть разделяемым. Это означает, что несколько ссылочных переменных могут указывать на один и тот же объект и разделять его значения. Значимый тип принято называть развернутым, подчеркивая тем самым, что значение объекта развернуто непосредственно в памяти, отводимой объекту. Поскольку язык C# является непосредственным потомком языка C++, то и системы типов этих двух языков близки и совпадают вплоть до названия типов и областей их определения, но есть и отличия. Язык С++ — строго типизированный язык программирования. Тип определяет количество памяти, необходимое для хранения данных, диапазон допустимых значений и операции, осуществляемые с этим типом данных. Стандарт языка C++ включает следующий набор фундаментальных типов: 1. Логический тип (bool). 2. Символьный тип (char). 3. Целые типы. Целые типы могут быть одного из трех размеров – short, int, long, сопровождаемые описателем signed или unsigned, указывающим, на то, как интерпретируется значение, – со знаком или без оного. 4. Типы с плавающей точкой. Эти типы также могут быть одного из трех размеров – float, double, long double. Кроме того, в языке есть: 5. Тип void, используемый для указания на отсутствие информации. Язык позволяет конструировать типы: 6. Указатели (например, int* – типизированный указатель на переменную типа int). 7. Ссылки (например, double& – типизированная ссылка на переменную типа double). 8. Массивы (например, char[] – массив элементов типа char). Язык позволяет конструировать пользовательские типы: 9. Перечислимые типы (enum) для представления значений из конкретного множества. 10. Структуры (struct) - применяются для группирования (объединения) данных. В отличие от массива, в структуру можно объединять различные типы данных. 11. Классы - разновидность абстрактного типа данных, характеризуемый способом своего построения. Наряду с понятием «объекта» класс является ключевым понятием в ООП. Суть отличия классов от других абстрактных типов данных состоит в том, что при задании типа данных класс определяет одновременно и интерфейс (перечень возможных вычислений, которые может выполнить та или иная часть программы, описание того, какие аргументы и в каком порядке требуется передавать на вход алгоритмам, и что и в каком виде они будут возвращать), и реализацию для всех своих экземпляров, а вызов метода-конструктора обязателен. Первые три вида типов называются интегральными или счетными. Значения этих типов перечислимы и упорядочены. Целые типы и типы с плавающей точкой относятся к арифметическомутипу.
2. Типы данных в языках программирования на примере C# Эта схема типов сохранена и в языке C#. В C# применяется унифицированная система типов. Все типы C#, включая простые типы (например, int и double), наследуются от единственного корневого типа object. В C# используется классификация, носящая для C# принципиальный характер. Согласно этой классификации все типы можно разделить на четыре категории: 1. типы-значения (значимый тип) (Целочисленные, типы с плавающей запятой, символы, логический тип) или значимые типы. 2. ссылочные (objects, string). 3. указатели (pointer). 4. тип void. Эта классификация основана на том, где и как хранятся значения типов. Для ссылочного типа значение задает ссылку на область памяти в «управляемой куче», где расположен соответствующий объект. Для значимого типа используется прямая адресация, значение хранит данные, и память для них отводится, как правило, в стеке. В отдельную категорию выделены указатели, что подчеркивает их особую роль в языке. Указатели имеют ограниченную область действия, и могут использоваться только в небезопасных блоках, помеченных как unsafe. Особый статус имеет и тип void, указывающий на отсутствие какого либо значения. Библиотека классов платформы.NET Framework определяет набор встроенных числовых типов, а также более сложных типов, представляющих широкое разнообразие логических конструкций, например, файловую систему, сетевые подключения, коллекции и массивы объектов и даты. В языке C# жестко определено, какие типы относятся к ссылочным, а какие к значимым. К значимым типам относятся типы: логический, арифметический, структуры, перечисление. К ссылочным типам относятся массивы, строки и классы. На первый взгляд, такая классификация может вызывать вопрос, почему структуры, которые в C++ близки к классам, относятся к значимым типам, а массивы и строки к ссылочным. Это связано с тем, что в C# массивы рассматриваются как динамические, их размер может определяться на этапе вычислений, а не в момент трансляции. Строки в C# также рассматриваются как динамические переменные, длина которых может изменяться. Поэтому строки и массивы относятся к ссылочным типам, требующим распределения памяти в куче. Конструкции структура, класс, интерфейс и перечисление используются для создания собственных пользовательских типов. Структуры C# представляют частный случай класса. Объявив свой класс как структуру, программист получает возможность отнести класс к значимым типам. У программиста C# появляется возможность управлять отнесением класса к значимым или ссылочным типам. 3. Упаковка/распаковка Упаковка-преобразование -представляет собой процесс преобразования типов значений в тип object или любой другой тип интерфейса, реализуемый этим типом значения. Когда тип значения упаковывается средой CLR (общеязыковая исполняющая среда) — среда, интерпретирующая код на языке CIL (промежуточный язык) в байт-код, в который компилируются программы, написанные на.NET-совместимых языках программирования), она создает программу-оболочку значения внутри System.Object и сохраняет ее в управляемой куче (объём памяти, зарезервированный под структуру). Операция распаковки-преобразования извлекает тип значения из объекта. Упаковка-преобразование является неявной (выполняет компилятор); распаковка-преобразование является явной (выполняет программист). Некоторые языки, такие как C# или Visual Basic.NET, поддерживают операции упаковки и распаковки прозрачно для программиста. Это, конечно, хорошо, т.к. упрощает программирование, но при недостаточном понимании происходящих "за кадром" процессов это может привести к потере эффективности. Поэтому необходимо вдумчиво подходить к каждому отдельному случаю. Концепция упаковки и распаковки лежит в основе единой системы типов C#, в которой значение любого типа можно рассматривать как объект. Упаковка - это процесс копирования объекта значимого типа, расположенного в стеке в соответствующий объект ссылочного типа. Типичным примером упаковки является приведение объекта значимого типа к типу object или интерфейсу, который реализует этот значимый тип. Вот типичные примеры: int i = 0; object o = i; //здесь происходит упаковка IConvertible c = i; //здесь также происходит упаковка. Распаковка - это противоположный процесс, т.е. процесс "копирования" значимого объекта, расположенного в управляемой куче, в переменную значимого типа, расположенную в стеке. int i2 = (int)o; //распаковка
Дисциплины: «Базы данных», «Корпоративные информационные системы», «Проектирование информационных систем» Date: 2016-06-06; view: 540; Нарушение авторских прав |