Именование объектов и методов. Коллекции отлаженных заготовок
1.Многие объекты в системе имеют имена. Именование объектов удобно для учета объектов и поиска нужного объекта. Кроме того, знание имени объекта может быть использовано процессом для получения к нему доступа (совместное использование ресурсов). Пространство имен объектов по аналогии с пространствами имен реестра и файлов организовано в виде древовидной иерархической системы. В качестве нетерминальной вершины дерева используется объект - "каталог объектов". Каталог включает информацию, необходимую для трансляции имен объектов в указатели на сами объекты. Вследствие необходимости выполнения навигации по каталогам ссылка на объект по имени работает существенно дольше, чем по описателю.
2. Коллекции отлаженных заготовок – библиотеки. (на примере С++)
При разработке достаточно сложных программ используются сторонние библиотеки, решающие различные задачи.
13. Встроенные типы данных, их роль при подготовке программ.
1. Каждый язык программирования поддерживает один или несколько встроенных типов данных (базовых). Встроенные типы данных предопределены в языке. Это самые простые величины, из которых составляют все производные типы, в том числе и классы. Различные реализации и компиляторы могут определять различные диапазоны значений целых и вещественных чисел.
Обычно в состав встроенных типов данных включаются такие типы, операции над значениями которых напрямую или, по крайней мере, достаточно эффективно поддерживаются командами компьютеров. В современных компьютерах к таким "машинным" типам относятся целые числа разного размера (от одного до восьми байт), булевские значения (поддерживаемые обычно за счет наличия признаков условной передачи управления) и числа с плавающей точкой одинарной и двойной точности (обычно четыре и восемь байт соответственно). В более ранних компьютерах часто поддерживалась десятичная арифметика с фиксированной точкой (например, в мейнфреймах компании IBM и супер-миникомпьютерах компании Digital), но в настоящее время прямая аппаратная поддержка такой арифметики отсутствует практически во всех распространенных процессорах.
В соответствии с этим, в традиционный набор встроенных типов обычно входят следующие (мы будем говорить про размеры внутреннего представления значений этих типов, хотя в спецификациях языков такая информация, как правило, отсутствует):
Простые:
Числовые. Хранятся числа. Могут применяться обычные арифметические операции.
Целочисленные. со знаком, то есть могут принимать как положительные, так и отрицательные значения; и без знака, то есть могут принимать только неотрицательные значения.
Вещественные: с запятой (то есть хранятся знак и цифры целой и дробной частей) и с плавающей запятой (то есть число приводится к виду m*be, где m — мантисса, b — основание показательной функции, e — показатель степени (порядок) (в англоязычной литературе экспонента), причём в нормальной форме 0<=m<b, а в нормализованной форме 1<=m<b, e — целое число и хранятся знак и числа m и e).
Числа произвольной точности, обращение с которыми происходит посредством длинной арифметики. Примером языка с встроенной поддержкой таких типов является UBASIC, часто применяемый среди криптографов.
Символьный тип. Хранит один символ. Могут использоваться различные кодировки.
Логический тип. Имеет два значения: истина и ложь, при троичной логике может иметь и третье значение — «не определено» (или «неизвестно»). Могут применяться логические операции. Используется в операторах ветвления и циклах. В некоторых языках является подтипом числового типа, при этом ложь=0, истина=1.
Множество. В основном совпадает с обычным математическим понятием множества. Допустимы стандартные операции с множествами и проверка на принадлежность элемента множеству. В некоторых языках рассматривается как составной тип.
Встроенные типы данных для языка С++ представлены в таблице:
Встроенные типы языка Си++. | ||
Название | Обозначение | Диапазон значений |
Байт | char | от -128 до +127 |
без знака | unsigned char | от 0 до 255 |
Короткое целое число | short | от -32768 до +32767 |
Короткое целое число без знака | unsigned short | от 0 до 65535 |
Целое число | int | от – 2147483648 до + 2147483647 |
Целое число без знака | unsigned int (или просто unsigned) | от 0 до 4294967295 |
Длинное целое число | long | от – 2147483648 до + 2147483647 |
Длинное целое число без знака | unsigned long | от 0 до 4294967295 |
Вещественное число одинарной точности | float | от ±3.4e-38 до ±3.4e+38 (7 значащих цифр) |
Вещественное число двойной точности | double | от ±1.7e-308 до ±1.7e+308 (15 значащих цифр) |
Вещественное число увеличенной точности | long double | от ±1.2e-4932 до ±1.2e+4932 |
Логическое значение | bool | значения true(истина) или false (ложь) |
2. Роль типов данных при подготовке программ.
· Надёжность. Типы данных защищают от трёх видов ошибок:
1. Некорректное присваивание. Пусть переменная объявлена как имеющая числовой тип. Тогда попытка присвоить ей символьное или какое-либо другое значение в случае статической типизации приведёт к ошибке компиляции и не даст такой программе запуститься. В случае динамической типизации код программы перед выполнением потенциально опасного действия сравнит типы данных переменной и значения и также выдаст ошибку. Всё это позволяет избежать неправильной работы и «падения» программы.
2. Некорректная операция. Позволяет избежать попыток применения выражений вида «Hello world» + 1. Поскольку, как уже говорилось, все переменные в памяти хранятся как наборы битов, то при отсутствии типов подобная операция была выполнима (и могла дать результат вроде «ello worldǼ»). С использованием типов (см. далее «Контроль типов») такие ошибки отсекаются опять же на этапе компиляции.
3. Некорректная передача параметров. Если функция «синус» ожидает, что ей будет передан числовой аргумент, то передача ей в качестве параметра строки «Hello world» может иметь непредсказуемые последствия. При помощи контроля типов такие ошибки также отсекаются на этапе компиляции.
· Стандартизация. Благодаря соглашениям о типах, поддерживаемых большинством систем программирования, сложилась ситуация, когда программисты могут быстро менять свои рабочие инструменты, а программы не требуют больших переделок при переносе исходных текстов в другую среду. К сожалению, стандартизации по универсальным типам данных ещё есть куда развиваться.
· Документация. Использование того или другого типа данных объясняет намерения программиста. Например, enum и bool в языке не обязательны и вместо них может быть int — но оба они означают, что перед нами не целая величина, а одно из нескольких предопределённых значений.
14. Компоненты: объекты, субъекты, аспекты.
Еще один смутный вопрос (его не было в лекциях).
Объектом в языке С++ называется экземпляр класса. Объект любого ООП обладает состоянием, поведением и идентичностью. На примере классов состояние – это поле класса, поведение – его методы, а идентичность – название.
Субъектом ООП называется непосредственно сам программист, человек, читающий или использующий эту программу, в общем, любой субъект (в общепринятом смысле этого слова), так или иначе имеющий отношение к программе или ее использованию.
Аспекты – принципы выделения объектов. Основные аспекты таковы: 1) если мы считаем “нечто” отдельным понятием, делаем это “нечто” классом. 2) если мы считаем что-то объектом, делаем его классом. 3) если два класса имеют одинаковые методы, объединяем их и делаем базовый класс.