🗊Презентация 3. Объекты и типы

Нажмите для полного просмотра!
3. Объекты и типы, слайд №13. Объекты и типы, слайд №23. Объекты и типы, слайд №33. Объекты и типы, слайд №43. Объекты и типы, слайд №53. Объекты и типы, слайд №63. Объекты и типы, слайд №73. Объекты и типы, слайд №83. Объекты и типы, слайд №93. Объекты и типы, слайд №103. Объекты и типы, слайд №113. Объекты и типы, слайд №123. Объекты и типы, слайд №133. Объекты и типы, слайд №143. Объекты и типы, слайд №153. Объекты и типы, слайд №163. Объекты и типы, слайд №173. Объекты и типы, слайд №183. Объекты и типы, слайд №193. Объекты и типы, слайд №203. Объекты и типы, слайд №213. Объекты и типы, слайд №223. Объекты и типы, слайд №233. Объекты и типы, слайд №243. Объекты и типы, слайд №253. Объекты и типы, слайд №263. Объекты и типы, слайд №273. Объекты и типы, слайд №283. Объекты и типы, слайд №293. Объекты и типы, слайд №303. Объекты и типы, слайд №313. Объекты и типы, слайд №323. Объекты и типы, слайд №333. Объекты и типы, слайд №343. Объекты и типы, слайд №353. Объекты и типы, слайд №363. Объекты и типы, слайд №373. Объекты и типы, слайд №383. Объекты и типы, слайд №393. Объекты и типы, слайд №403. Объекты и типы, слайд №413. Объекты и типы, слайд №423. Объекты и типы, слайд №433. Объекты и типы, слайд №443. Объекты и типы, слайд №453. Объекты и типы, слайд №463. Объекты и типы, слайд №473. Объекты и типы, слайд №483. Объекты и типы, слайд №493. Объекты и типы, слайд №503. Объекты и типы, слайд №513. Объекты и типы, слайд №523. Объекты и типы, слайд №533. Объекты и типы, слайд №543. Объекты и типы, слайд №553. Объекты и типы, слайд №563. Объекты и типы, слайд №573. Объекты и типы, слайд №583. Объекты и типы, слайд №593. Объекты и типы, слайд №603. Объекты и типы, слайд №613. Объекты и типы, слайд №623. Объекты и типы, слайд №633. Объекты и типы, слайд №643. Объекты и типы, слайд №653. Объекты и типы, слайд №663. Объекты и типы, слайд №673. Объекты и типы, слайд №683. Объекты и типы, слайд №693. Объекты и типы, слайд №703. Объекты и типы, слайд №713. Объекты и типы, слайд №723. Объекты и типы, слайд №733. Объекты и типы, слайд №743. Объекты и типы, слайд №753. Объекты и типы, слайд №763. Объекты и типы, слайд №773. Объекты и типы, слайд №783. Объекты и типы, слайд №793. Объекты и типы, слайд №803. Объекты и типы, слайд №813. Объекты и типы, слайд №823. Объекты и типы, слайд №833. Объекты и типы, слайд №843. Объекты и типы, слайд №853. Объекты и типы, слайд №863. Объекты и типы, слайд №873. Объекты и типы, слайд №88

Содержание

Вы можете ознакомиться и скачать презентацию на тему 3. Объекты и типы. Доклад-сообщение содержит 88 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Объекты и типы
Именование – средство повышения абстракции: использование имени объекта вместо него самого позволяет отвлечься от деталей его реализации.
Описание слайда:
Объекты и типы Именование – средство повышения абстракции: использование имени объекта вместо него самого позволяет отвлечься от деталей его реализации.

Слайд 2





Области видимости
Блочная структура – иерархия областей, содержащих определения объектов.
Правило видимости: объект, определённый в некоторой области виден в ней самой и всех вложенных областях за исключение тех, где определён одноимённый объект.
Однозначность: в одном блоке не может быть несколько определений одного и того же имени.
Поиск определения: определение для использования объекта с именем X находится в ближайшем охватывающем блоке, содержащем определение объекта с именем X.
Описание слайда:
Области видимости Блочная структура – иерархия областей, содержащих определения объектов. Правило видимости: объект, определённый в некоторой области виден в ней самой и всех вложенных областях за исключение тех, где определён одноимённый объект. Однозначность: в одном блоке не может быть несколько определений одного и того же имени. Поиск определения: определение для использования объекта с именем X находится в ближайшем охватывающем блоке, содержащем определение объекта с именем X.

Слайд 3





Блоки
Пример:
	int power(float x, int n)
{
    int s = 0;
    for (int k = 0; k <n; k++)
    {
         int ss = s;
         s *= x;
         printf(“%f * %f = %f\n”, ss, x, s); 
    }
   }
Описание слайда:
Блоки Пример: int power(float x, int n) { int s = 0; for (int k = 0; k <n; k++) { int ss = s; s *= x; printf(“%f * %f = %f\n”, ss, x, s); } }

Слайд 4





Области видимости
Присоединяющий оператор with S: блок, определяющий множество имён из структуры S
	with S do R.X = X
Квалификация – указание охватывающей структуры, типа или библиотеки перед использованием имени
	R.X	A[i]->X   System.Drawing.Color.Aquamarine
Описание слайда:
Области видимости Присоединяющий оператор with S: блок, определяющий множество имён из структуры S with S do R.X = X Квалификация – указание охватывающей структуры, типа или библиотеки перед использованием имени R.X A[i]->X System.Drawing.Color.Aquamarine

Слайд 5





Области видимости - исключения
Библиотеки
Конфликты возникают только в момент использования имени
Квалификация имён: явное и неявное использование библиотеки
Раздельные пространства имён для разных сортов объектов (SQL):
select select.select from select, where where where.select=select.where;
Описание слайда:
Области видимости - исключения Библиотеки Конфликты возникают только в момент использования имени Квалификация имён: явное и неявное использование библиотеки Раздельные пространства имён для разных сортов объектов (SQL): select select.select from select, where where where.select=select.where;

Слайд 6





Области видимости
Описание слайда:
Области видимости

Слайд 7





Анонимные объекты
Объекты, не имеющие собственного имени, доступ к которым осуществляется только через имена других объектов - вычисление имени (адреса).
Массивы: M[(int) sqrt(R) - 1]
Указатели: *p, *(p->x[i].y->z)
Описание слайда:
Анонимные объекты Объекты, не имеющие собственного имени, доступ к которым осуществляется только через имена других объектов - вычисление имени (адреса). Массивы: M[(int) sqrt(R) - 1] Указатели: *p, *(p->x[i].y->z)

Слайд 8





Типы данных
Моделируемая категория (например, неотрицательные целые числа)
Синтаксис (например, unsigned int)
Литеральные значения – запись констант в тексте программы (например, 0x123)
Набор операций (например, +, -, *)
Реализация (например, машинное слово)
Описание слайда:
Типы данных Моделируемая категория (например, неотрицательные целые числа) Синтаксис (например, unsigned int) Литеральные значения – запись констант в тексте программы (например, 0x123) Набор операций (например, +, -, *) Реализация (например, машинное слово)

Слайд 9





Анализ типов
Статический – тип всех выражений можно выполнить во время трансляции, до исполнения программы
Надёжность
Понимаемость
Динамический – тип выражений определяется во время исполнения программы
Гибкость (?)
Необходим, если новые типы появляются в процессе выполнения
Описание слайда:
Анализ типов Статический – тип всех выражений можно выполнить во время трансляции, до исполнения программы Надёжность Понимаемость Динамический – тип выражений определяется во время исполнения программы Гибкость (?) Необходим, если новые типы появляются в процессе выполнения

Слайд 10





Статический анализ типов
Строгая типизация
Для каждой переменной, параметра, поля и т.п. указан тип
Для операций, функций, процедур и т.п. указаны типы аргументов и результатов.
Разноимённые типы различны (?):
typedef int Apples; /* количество */
typedef int Distance; /* в километрах */
typedef int LocalDistance; /* в метрах */
Описание слайда:
Статический анализ типов Строгая типизация Для каждой переменной, параметра, поля и т.п. указан тип Для операций, функций, процедур и т.п. указаны типы аргументов и результатов. Разноимённые типы различны (?): typedef int Apples; /* количество */ typedef int Distance; /* в километрах */ typedef int LocalDistance; /* в метрах */

Слайд 11





Динамическая типизация
Пример:
	Input x
	If x > 0
		y = 2
	Else
		y = “2”
	End If
	Print x + y
Описание слайда:
Динамическая типизация Пример: Input x If x > 0 y = 2 Else y = “2” End If Print x + y

Слайд 12





Полиморфизм
Перегрузка операций: разные реализации в зависимости от типов аргументов и результатов. Например,
1 + 2,  1.2 + 3.4, “Hello” + “2”
void DrawRectangle(int x, int y, int w, int h);
	void DrawRectangle(Location p, Size s);
	void DrawRectangle(Rectangle r);
Описание слайда:
Полиморфизм Перегрузка операций: разные реализации в зависимости от типов аргументов и результатов. Например, 1 + 2, 1.2 + 3.4, “Hello” + “2” void DrawRectangle(int x, int y, int w, int h); void DrawRectangle(Location p, Size s); void DrawRectangle(Rectangle r);

Слайд 13





Полиморфизм
Родовые типы – типы, имеющие параметры, в том числе и типовые.
Реализация операций зависит только от свойств параметров-типов
class SortedList <KeyType,ElementType>
{
    public void Insert(KeyType k, ElementType e)
    {  … 	}
}
Пример (C#):
		SortedList <string,Person> Persons;
		SortedList <float,Matrix<float>> Matrices;
		Persons.Insert(“Mike”, Me);
		Matrices.Insert(A.Determinant(), A);
Описание слайда:
Полиморфизм Родовые типы – типы, имеющие параметры, в том числе и типовые. Реализация операций зависит только от свойств параметров-типов class SortedList <KeyType,ElementType> { public void Insert(KeyType k, ElementType e) { … } } Пример (C#): SortedList <string,Person> Persons; SortedList <float,Matrix<float>> Matrices; Persons.Insert(“Mike”, Me); Matrices.Insert(A.Determinant(), A);

Слайд 14





Типы данных
Классификация
Предопределённые – предоставляемые языком
Определяемые – описанные в программе
Простые – неделимые с точки зрения языка, не имеющие компонент
Структурированные – предназначенные для агрегации компонентов или связи между данными
Неупорядоченные – присваивание, сравнение на равенство и неравенство: =, == и != (C), :=, = и <> (Pascal).
Упорядоченные – кроме того, сравнения <, <=, >, >=
Перечислимые (интегральные) – сопоставление целым
Арифметические – кроме того, сравнения +, -, *, /
Описание слайда:
Типы данных Классификация Предопределённые – предоставляемые языком Определяемые – описанные в программе Простые – неделимые с точки зрения языка, не имеющие компонент Структурированные – предназначенные для агрегации компонентов или связи между данными Неупорядоченные – присваивание, сравнение на равенство и неравенство: =, == и != (C), :=, = и <> (Pascal). Упорядоченные – кроме того, сравнения <, <=, >, >= Перечислимые (интегральные) – сопоставление целым Арифметические – кроме того, сравнения +, -, *, /

Слайд 15





Логические (Pascal)
Описание слайда:
Логические (Pascal)

Слайд 16





Символы (Pascal)
Описание слайда:
Символы (Pascal)

Слайд 17





256 символов – много или мало?
10 цифр + 26 букв + ().,;+-*/ - достаточно
С другой стороны
32 управляющие кода: перевод строки, возврат каретки, перевод страницы,гудок, табуляция,...
32 символа: пробел, 0..9, …
32 буквы: ABC…XYZ + @[\]^_
32 строчные буквы: аbc..xyz + `{|}~…
64 кириллица: АБВ...ЭЮЯабв...эюя
64 псевдографика: ╫╪┘...
Буква ё, диакритика, лигатуры: ùÿÜ…
Греческие: αßπΣΓ...
Катакана, арабский, иврит, санскрит, иероглифы:...
Описание слайда:
256 символов – много или мало? 10 цифр + 26 букв + ().,;+-*/ - достаточно С другой стороны 32 управляющие кода: перевод строки, возврат каретки, перевод страницы,гудок, табуляция,... 32 символа: пробел, 0..9, … 32 буквы: ABC…XYZ + @[\]^_ 32 строчные буквы: аbc..xyz + `{|}~… 64 кириллица: АБВ...ЭЮЯабв...эюя 64 псевдографика: ╫╪┘... Буква ё, диакритика, лигатуры: ùÿÜ… Греческие: αßπΣΓ... Катакана, арабский, иврит, санскрит, иероглифы:...

Слайд 18





Многобайтные кодировки
Shift-JIS – специально для японского
Двуязыковая кодировка
«Обычные» символы – одним байтом
Shift-In, Shift-Out – «скобки» двухбайтовой кодироки
Universal Character Set (Unicode) 
Многоязыковые тексты
около 100,000 абстрактных символов
Кодировки
UCS-2 – два байта на каждый символ
UCS-4 – четыре байта на каждый символ
UTF-8 – от одного до четырёх байтов
Описание слайда:
Многобайтные кодировки Shift-JIS – специально для японского Двуязыковая кодировка «Обычные» символы – одним байтом Shift-In, Shift-Out – «скобки» двухбайтовой кодироки Universal Character Set (Unicode) Многоязыковые тексты около 100,000 абстрактных символов Кодировки UCS-2 – два байта на каждый символ UCS-4 – четыре байта на каждый символ UTF-8 – от одного до четырёх байтов

Слайд 19





Целые числа (Pascal)
Описание слайда:
Целые числа (Pascal)

Слайд 20





Множества (Pascal)
Описание слайда:
Множества (Pascal)

Слайд 21





Перечисления (Pascal)
Описание слайда:
Перечисления (Pascal)

Слайд 22





Целые – представление 1
Неотрицательные 
bn-1 bn-2 … b0 – последовательность битов
n – разрядность

Диапазон: 0..2n-1
Описание слайда:
Целые – представление 1 Неотрицательные bn-1 bn-2 … b0 – последовательность битов n – разрядность Диапазон: 0..2n-1

Слайд 23





Целые – представление 1 (пример)
n=8
00000000 = 0
00111110 = 32+16+8+4+2 = 62
10000100 = 128+4=132
11111111 = 128+64+32+16+8+4+2+1 = 255
Описание слайда:
Целые – представление 1 (пример) n=8 00000000 = 0 00111110 = 32+16+8+4+2 = 62 10000100 = 128+4=132 11111111 = 128+64+32+16+8+4+2+1 = 255

Слайд 24





Целые – представление 2
Cо знаком - дополнительный код
bn-1 bn-2 … b0 – последовательность битов
n – разрядность.
bn-1  - знак (1 – отрицательные)
Неотрицательные:
Неположительные:
Диапазон: -2n-1-1 .. 2n-1-1
Описание слайда:
Целые – представление 2 Cо знаком - дополнительный код bn-1 bn-2 … b0 – последовательность битов n – разрядность. bn-1 - знак (1 – отрицательные) Неотрицательные: Неположительные: Диапазон: -2n-1-1 .. 2n-1-1

Слайд 25





Целые - представление 2 (пример)
n=8
0 0000000 = 0
0 0111110 = 32+16+8+4+2 = 62
1 0000100 = -(64+32+16+8+2+1)=-123
1 1111111 = 0
Описание слайда:
Целые - представление 2 (пример) n=8 0 0000000 = 0 0 0111110 = 32+16+8+4+2 = 62 1 0000100 = -(64+32+16+8+2+1)=-123 1 1111111 = 0

Слайд 26





Целые – представление 3
Со знаком - двойное дополнение
bn-1 bn-2 … b0 – последовательность битов
n – разрядность
Диапазон: -2n .. 2n-1
Описание слайда:
Целые – представление 3 Со знаком - двойное дополнение bn-1 bn-2 … b0 – последовательность битов n – разрядность Диапазон: -2n .. 2n-1

Слайд 27





Целые - представление 3 (пример)
n=8
0 0000000 = 0
0 0111110 = 32+16+8+4+2 = 62
1 0000100 = -128+4 = -124
1 1111111 = -128+64+32+16+8+4+2+1 =-1
Описание слайда:
Целые - представление 3 (пример) n=8 0 0000000 = 0 0 0111110 = 32+16+8+4+2 = 62 1 0000100 = -128+4 = -124 1 1111111 = -128+64+32+16+8+4+2+1 =-1

Слайд 28





Целые – синтаксис и диапазон значений  (C)

Algol-68: long long long int
Описание слайда:
Целые – синтаксис и диапазон значений (C) Algol-68: long long long int

Слайд 29





Целые – константы (С)
0..9 – десятичная цифра
0..7 – восьмиричная цифра
0..9A..F – шестнадцатерич-ная цифра
H – short
L – long
U – unsigned
Описание слайда:
Целые – константы (С) 0..9 – десятичная цифра 0..7 – восьмиричная цифра 0..9A..F – шестнадцатерич-ная цифра H – short L – long U – unsigned

Слайд 30





Символы-коды (С)
0..7 – восьмиричная цифра
0..9A..F – шестнадцатеричная цифра
Описание слайда:
Символы-коды (С) 0..7 – восьмиричная цифра 0..9A..F – шестнадцатеричная цифра

Слайд 31





Символы, как целые (C)
Символ – изображение своего кода:
‘\123’ == 0123
Пример: i-aя буква 
Pascal: chr(ord(‘A’) + i – 1)
C:	‘A’ + i -1
Описание слайда:
Символы, как целые (C) Символ – изображение своего кода: ‘\123’ == 0123 Пример: i-aя буква Pascal: chr(ord(‘A’) + i – 1) C: ‘A’ + i -1

Слайд 32





Целые, как логические (С)
0 – ложь
Не ноль – истина
Операции
&& - конъюнкция (и)
|| - дизъюнкция (или)
!	- отрицание (не)
Пример: 
!1 || ‘A’ && 0x12L  - результат = 1
‘\0’ || (‘A’ == ‘B’) – результат = 0
Описание слайда:
Целые, как логические (С) 0 – ложь Не ноль – истина Операции && - конъюнкция (и) || - дизъюнкция (или) ! - отрицание (не) Пример: !1 || ‘A’ && 0x12L - результат = 1 ‘\0’ || (‘A’ == ‘B’) – результат = 0

Слайд 33





Целые, как битовые шкалы (С)
& - побитовая конъюнкция
| - побитовая дизъюнкция
^ - побитовый xor (неравенство)
~ побитовое отрицание
<<, >> - сдвиги влево и вправо
Описание слайда:
Целые, как битовые шкалы (С) & - побитовая конъюнкция | - побитовая дизъюнкция ^ - побитовый xor (неравенство) ~ побитовое отрицание <<, >> - сдвиги влево и вправо

Слайд 34





Целые, как битовые шкалы (С)
Реализация операций над множествами 
set of 1..32  - unsigned long int
S1 * S2, S1 + S2, S1 – S2 
S1 & S2,  S1 | S2,  S1 & ~S2
x in S
(1 << (x-1))  & S
S1 <= S2
S1 & S2 == S1
[x..y]
(y >= x   ?   ( (1<<(y–x+1)) - 1)  <<  (x-1)    :   0)
Описание слайда:
Целые, как битовые шкалы (С) Реализация операций над множествами set of 1..32 - unsigned long int S1 * S2, S1 + S2, S1 – S2 S1 & S2, S1 | S2, S1 & ~S2 x in S (1 << (x-1)) & S S1 <= S2 S1 & S2 == S1 [x..y] (y >= x ? ( (1<<(y–x+1)) - 1) << (x-1) : 0)

Слайд 35





Перечисление как целые
Определение констант
#define red 0
#define green 1
#define blue 2
или
const int red = 0;
const int green = 1;
const int blue  = 2;
Недостаток – лишняя информация
При добавлении новой константы – перенумеровать
Нестрогая типизация: blue / green, red + 8
Описание слайда:
Перечисление как целые Определение констант #define red 0 #define green 1 #define blue 2 или const int red = 0; const int green = 1; const int blue = 2; Недостаток – лишняя информация При добавлении новой константы – перенумеровать Нестрогая типизация: blue / green, red + 8

Слайд 36





Перечисление
Синтаксис
Описание слайда:
Перечисление Синтаксис

Слайд 37





Вещественные – представление 1
С фиксированной точкой
bn-1 bn-2 … b0 – последовательность битов, n – разрядность, p – размер дробной части
bn  - знак (1 – отрицательные)
Абсолютная величина:
Описание слайда:
Вещественные – представление 1 С фиксированной точкой bn-1 bn-2 … b0 – последовательность битов, n – разрядность, p – размер дробной части bn - знак (1 – отрицательные) Абсолютная величина:

Слайд 38





Вещественные – представление 1 (пример)
n=8, p=2
000000 00 = 0
001111 10 = 8+4+2+1+1/2 = 15.5
100001 00 = -(1) = -1
111111 11 = -(16+8+4+2+1+1/2+1/4) = 31.75
Описание слайда:
Вещественные – представление 1 (пример) n=8, p=2 000000 00 = 0 001111 10 = 8+4+2+1+1/2 = 15.5 100001 00 = -(1) = -1 111111 11 = -(16+8+4+2+1+1/2+1/4) = 31.75

Слайд 39





Вещественные – представление 2
С плавающей точкой
bn-1 bn-2 … bpbp-1…b0 – последовательность битов, 
n – разрядность, 
p – размер мантиссы
s – смещение порядка
bn-1  - знак (1 – отрицательные)
Абсолютная величина:
Порядок e =
Описание слайда:
Вещественные – представление 2 С плавающей точкой bn-1 bn-2 … bpbp-1…b0 – последовательность битов, n – разрядность, p – размер мантиссы s – смещение порядка bn-1 - знак (1 – отрицательные) Абсолютная величина: Порядок e =

Слайд 40





Вещественные – представление 2 (пример)
n=8, p=2, s=3
0 000 0000 = 0 (особый случай)
0 001 1110 = 21-3 * (1+0.875) = 0.46875
1 000 0100 = -(20-3 * (1+0.25)) = - 0.03125
1 111 1111 = -(27-3 * (1+0.9375)) = 31
Описание слайда:
Вещественные – представление 2 (пример) n=8, p=2, s=3 0 000 0000 = 0 (особый случай) 0 001 1110 = 21-3 * (1+0.875) = 0.46875 1 000 0100 = -(20-3 * (1+0.25)) = - 0.03125 1 111 1111 = -(27-3 * (1+0.9375)) = 31

Слайд 41





Вещественные – синтаксис и диапазон значений
Описание слайда:
Вещественные – синтаксис и диапазон значений

Слайд 42





Вещественные – другие представления
Неограниченная точность: неограниченный размер.
Рациональные числа: числитель и знаменатель.
Символьный: 2*sin(pi/6).
Сумма (бесконечного) ряда, непрерывные дроби
Описание слайда:
Вещественные – другие представления Неограниченная точность: неограниченный размер. Рациональные числа: числитель и знаменатель. Символьный: 2*sin(pi/6). Сумма (бесконечного) ряда, непрерывные дроби

Слайд 43





Вещественные – константы (С)
0..9 – десятичная цифра
F – short
L – Double
Неточность: 
12L – long int
12.0L – double
12e-5L - double
Описание слайда:
Вещественные – константы (С) 0..9 – десятичная цифра F – short L – Double Неточность: 12L – long int 12.0L – double 12e-5L - double

Слайд 44





Вещественные – потеря точности
С фиксированной точкой
122.55 / 2 * 2 = 122.50
C плавающей точкой
Большое + маленькое
	1.0e+38 + 1.0e-45f = 1.e+38
Преобразование системы счисления
1.0e-40 = 9.999946E-41
Описание слайда:
Вещественные – потеря точности С фиксированной точкой 122.55 / 2 * 2 = 122.50 C плавающей точкой Большое + маленькое 1.0e+38 + 1.0e-45f = 1.e+38 Преобразование системы счисления 1.0e-40 = 9.999946E-41

Слайд 45





Приведение типов
Неявное – типы аргументов арифметической операции приводятся к максимальному
double
float
unsigned long
long
unsigned char
int
Явное
int x = 30000;
x * 12  - переполнение, больше 32767
(float) x * 12 == 360000f;
Описание слайда:
Приведение типов Неявное – типы аргументов арифметической операции приводятся к максимальному double float unsigned long long unsigned char int Явное int x = 30000; x * 12 - переполнение, больше 32767 (float) x * 12 == 360000f;

Слайд 46





Указатели
Описание (простой случай)
Т * p;
Т x;
Операции
Взятие адреса 
	p = &x
Разыменование – объект, на который указывает p
	*p
Свойства: &(*p) эквивалентно p, *(&x)  эквивалентно x
Литеральная константа: NULL – пустой указатель
Реализация: адрес (ссылка, номер ячейки) указуемого объекта.
Описание слайда:
Указатели Описание (простой случай) Т * p; Т x; Операции Взятие адреса p = &x Разыменование – объект, на который указывает p *p Свойства: &(*p) эквивалентно p, *(&x) эквивалентно x Литеральная константа: NULL – пустой указатель Реализация: адрес (ссылка, номер ячейки) указуемого объекта.

Слайд 47





Указатели - пример

int i, j;
int * p;
p = &i;
*p =  2;
j = *p + 1; 
p = &j;
*p = *p +1;
Описание слайда:
Указатели - пример int i, j; int * p; p = &i; *p = 2; j = *p + 1; p = &j; *p = *p +1;

Слайд 48





Адресная арифметика
Пусть 
p – указатель на объект типа T 
p начинается с байта c номером a
размер Т равен s
тогда p+k  - указатель на объект типа T, который начинается с адреса a + s*k
(Аналогично p-k)
Описание слайда:
Адресная арифметика Пусть p – указатель на объект типа T p начинается с байта c номером a размер Т равен s тогда p+k - указатель на объект типа T, который начинается с адреса a + s*k (Аналогично p-k)

Слайд 49





Адресная арифметика
Указатели – (частично-)упорядоченный тип: порядок определён, только для указателей полученных из одного и того же указателя
Пусть p1, p2 – однотипные указатели, k – целое, тогда
p1 + k – допустимо
k + p1 – недопустимо
p1 < p2 – допустимо
p1 – p2 – допустимо, результат целое
p1 + p2 - недопустимо
Описание слайда:
Адресная арифметика Указатели – (частично-)упорядоченный тип: порядок определён, только для указателей полученных из одного и того же указателя Пусть p1, p2 – однотипные указатели, k – целое, тогда p1 + k – допустимо k + p1 – недопустимо p1 < p2 – допустимо p1 – p2 – допустимо, результат целое p1 + p2 - недопустимо

Слайд 50





Тип void *
Указатель на «нечто» - можно явно привести к любому типу указателя.
Пример: 
	extern void * malloc(int c);
	float * A = (float *) malloc(1000);
Описание слайда:
Тип void * Указатель на «нечто» - можно явно привести к любому типу указателя. Пример: extern void * malloc(int c); float * A = (float *) malloc(1000);

Слайд 51





Массивы (C)
Описание: (простой случай) Т-тип размера s, N-константа
		T A[N]
Отведение непрерывного участка памяти размера N*s байт
A – константный указатель на первый элемент
Операция: выборка компоненты
A[i] эквивалентно *(A+i)
Следствия: 
Все массивы нумеруются с нуля.
Индекс последнего элемента равен N-1
Нет контроля границ индексов
Описание слайда:
Массивы (C) Описание: (простой случай) Т-тип размера s, N-константа T A[N] Отведение непрерывного участка памяти размера N*s байт A – константный указатель на первый элемент Операция: выборка компоненты A[i] эквивалентно *(A+i) Следствия: Все массивы нумеруются с нуля. Индекс последнего элемента равен N-1 Нет контроля границ индексов

Слайд 52





Массивы (С)
Литеральные значения (только в инициализации)
int A[] = { 5, 4, 3, 2, 1};
float A[2][2] = { {5, 4.0} , {3 , 2+2} };
Описание слайда:
Массивы (С) Литеральные значения (только в инициализации) int A[] = { 5, 4, 3, 2, 1}; float A[2][2] = { {5, 4.0} , {3 , 2+2} };

Слайд 53





Многомерные массивы
Pascal:
	var A : 
		array[1..N, 1..M] 			of real;
	A[i,j]
Описание слайда:
Многомерные массивы Pascal: var A : array[1..N, 1..M] of real; A[i,j]

Слайд 54





Динамические массивы
Размер определяется в процессе вычислений
Algol-60				C
Описание слайда:
Динамические массивы Размер определяется в процессе вычислений Algol-60 C

Слайд 55





Динамические массивы
Размер массива – часть его представления
Modula-2				C
Описание слайда:
Динамические массивы Размер массива – часть его представления Modula-2 C

Слайд 56





Подвижные массивы
Размер может меняться в процессе вычислений
Visual Basic			       C
Описание слайда:
Подвижные массивы Размер может меняться в процессе вычислений Visual Basic C

Слайд 57





Подвижные массивы
Размер может меняться в процессе вычислений
C#					C
Описание слайда:
Подвижные массивы Размер может меняться в процессе вычислений C# C

Слайд 58





Непрямоугольные массивы
Пример: треугольная матрица (С)
Описание слайда:
Непрямоугольные массивы Пример: треугольная матрица (С)

Слайд 59





Массивы-дескрипторы 
(Автокод Эльбрус)
Описание слайда:
Массивы-дескрипторы (Автокод Эльбрус)

Слайд 60





Операции с массивами (Альфа)
массив A[1:N,1:M], B[1:M,1:K], X, Y[1:N], Z[1:M]
вещественный C
Описание слайда:
Операции с массивами (Альфа) массив A[1:N,1:M], B[1:M,1:K], X, Y[1:N], Z[1:M] вещественный C

Слайд 61





Операции над массивами (Альфа)
Больше, чем перегрузка операций (Algol-68, C++) – статическая проверка соответствия границ.
Промежуточные массивы размещает сам транслятор (сравните с C)
(A * B) * X + (2 * Y)
Оптимизация, эффективные (параллельные) алгоритмы
Описание слайда:
Операции над массивами (Альфа) Больше, чем перегрузка операций (Algol-68, C++) – статическая проверка соответствия границ. Промежуточные массивы размещает сам транслятор (сравните с C) (A * B) * X + (2 * Y) Оптимизация, эффективные (параллельные) алгоритмы

Слайд 62





Операции над массивами (APL)
APL – A Programming Language язык, ориентированные на обработку структурных данных
Богатый набор операци на массивами:
сдвиг, перестановка, сжатие, выбор индексов вхождений, транспонирование, упорядочение, …
Распространение всех элементарных операций на массивы
Оператор редукции
Описание слайда:
Операции над массивами (APL) APL – A Programming Language язык, ориентированные на обработку структурных данных Богатый набор операци на массивами: сдвиг, перестановка, сжатие, выбор индексов вхождений, транспонирование, упорядочение, … Распространение всех элементарных операций на массивы Оператор редукции

Слайд 63





Операции над массивами (APL)
Пример: вычислить полином степени n от x, заданный массивом коэффициентов A:
		/+ (A * (x     ι (n+1)))
		/+ (A * (x     (0 1 2 … n)))
		 /+ (A * (x0 x1 x2 … xn))
		 /+ (A0*x0 A1*x1 A2*x2 … An*xn)
		 A0*x0 + A1*x1 + A2*x2 + … + An*xn
Описание слайда:
Операции над массивами (APL) Пример: вычислить полином степени n от x, заданный массивом коэффициентов A: /+ (A * (x ι (n+1))) /+ (A * (x (0 1 2 … n))) /+ (A * (x0 x1 x2 … xn)) /+ (A0*x0 A1*x1 A2*x2 … An*xn) A0*x0 + A1*x1 + A2*x2 + … + An*xn

Слайд 64





Строки (Pascal)
Описание слайда:
Строки (Pascal)

Слайд 65





Строки как массивы (С)
Строка – указатель на последовательность символов, заканчивающуюся ‘\0’
	unsigned char s[] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’};
Литеральное значение: “Hello, \”string\”!\n”
Описание слайда:
Строки как массивы (С) Строка – указатель на последовательность символов, заканчивающуюся ‘\0’ unsigned char s[] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’}; Литеральное значение: “Hello, \”string\”!\n”

Слайд 66





Строки как массивы (С)
Достоинства:
Могут иметь произвольную длину
Могут использоваться не только в инициализации (в отличии от других массивов)
Не требуют специальных операций для доступа к содержимому
Описание слайда:
Строки как массивы (С) Достоинства: Могут иметь произвольную длину Могут использоваться не только в инициализации (в отличии от других массивов) Не требуют специальных операций для доступа к содержимому

Слайд 67





Строки как массивы (С)
Недостатки:
Сложно определить длину (в отличии от Pascal)
Все недостатки массивов
Нет контроля границ индексов
Нет подвижных массивов – память надо выделять «вручную»
Описание слайда:
Строки как массивы (С) Недостатки: Сложно определить длину (в отличии от Pascal) Все недостатки массивов Нет контроля границ индексов Нет подвижных массивов – память надо выделять «вручную»

Слайд 68





Строки как массивы (С)
Операции <string.h>
strlen(s) – длина s
strcpy(s1,s2) – копирование строки
strcat(s1,s2) – конкатенация строк
strchr(s,c) – указатель на первое вхождение с в s
…
Описание слайда:
Строки как массивы (С) Операции <string.h> strlen(s) – длина s strcpy(s1,s2) – копирование строки strcat(s1,s2) – конкатенация строк strchr(s,c) – указатель на первое вхождение с в s …

Слайд 69





Строки как массивы (С)
Пример (аналог Copy в Pascal – выборки подстроки)
unsigned char * PasCopy(unsigned char *source, int i, int l)
{
	unsigned char * dest = (unsigned char *) malloc(l+1);
	unsigned char * d = dest;
	unsigned char * s = &(source[i]); 
while ((*d++ = *s++) && l--)
		;
	d[-1] = ‘\0’;
	return dest;
}
Описание слайда:
Строки как массивы (С) Пример (аналог Copy в Pascal – выборки подстроки) unsigned char * PasCopy(unsigned char *source, int i, int l) { unsigned char * dest = (unsigned char *) malloc(l+1); unsigned char * d = dest; unsigned char * s = &(source[i]); while ((*d++ = *s++) && l--) ; d[-1] = ‘\0’; return dest; }

Слайд 70





Описания
Синтаксис:
Описание слайда:
Описания Синтаксис:

Слайд 71





Описание - примеры
Указатель на массив целых
int (*x)[100]
Массив из указателей на целые
int * (x[100]) 
Указатель на массив из массивов из указателей на указатели на перечисление WeekDay
enum WeekDay ** ((*x)[][100])
Указатель на целое, целое и целое равное 5
long * p, n, m = 5
Описание слайда:
Описание - примеры Указатель на массив целых int (*x)[100] Массив из указателей на целые int * (x[100]) Указатель на массив из массивов из указателей на указатели на перечисление WeekDay enum WeekDay ** ((*x)[][100]) Указатель на целое, целое и целое равное 5 long * p, n, m = 5

Слайд 72





Описание типа
Синтаксис
Пример:
C						Pascal
Описание слайда:
Описание типа Синтаксис Пример: C Pascal

Слайд 73





Структуры
Назначение: объединение разнотипных данных
struct – декартовое произведение
union – объединение
Реализация:
struct – последовательное выстраивание
union – наложение различной разметки на участок памяти.
Описание слайда:
Структуры Назначение: объединение разнотипных данных struct – декартовое произведение union – объединение Реализация: struct – последовательное выстраивание union – наложение различной разметки на участок памяти.

Слайд 74





Структуры
Синтаксис:
Операции: .  - выборка поля, например,
S.code, A[i].re, (*p).next 
(последнее эквивалентно p->next)
Описание слайда:
Структуры Синтаксис: Операции: . - выборка поля, например, S.code, A[i].re, (*p).next (последнее эквивалентно p->next)

Слайд 75





Структуры
Пример struct
typedef struct { re, im : float; } complex;
complex c1= {-1, 0}, c2 = {3.14,2.78}, c;
c.re = c1.re * c2.re – c1.im * c2.im;
c.im = c1.re * c2.im + c1.im * c2.re;
Пример union
union { unsigned long l; unsigned char c[4];} b4;
b4.l = 0xAABBCCDD; 
b4.c[1] = ‘A’;
(результат  b4.l == 0xAA41CCDD)
Описание слайда:
Структуры Пример struct typedef struct { re, im : float; } complex; complex c1= {-1, 0}, c2 = {3.14,2.78}, c; c.re = c1.re * c2.re – c1.im * c2.im; c.im = c1.re * c2.im + c1.im * c2.re; Пример union union { unsigned long l; unsigned char c[4];} b4; b4.l = 0xAABBCCDD; b4.c[1] = ‘A’; (результат b4.l == 0xAA41CCDD)

Слайд 76





Структуры - пример
Описание слайда:
Структуры - пример

Слайд 77





Структуры - пример
Описание слайда:
Структуры - пример

Слайд 78





Структуры - выравнивание
Описание слайда:
Структуры - выравнивание

Слайд 79





union – «дыра» в контроле типов
Описание слайда:
union – «дыра» в контроле типов

Слайд 80





sizeof
Размер типа данных или переменной
Пример
char c, * p = “abc”, 
s[] = “abc”, 
a[3]={‘a’,’b’,’c’};
struct T{
	unsigned char code;
   struct T * left, * right;
};
Описание слайда:
sizeof Размер типа данных или переменной Пример char c, * p = “abc”, s[] = “abc”, a[3]={‘a’,’b’,’c’}; struct T{ unsigned char code; struct T * left, * right; };

Слайд 81





sizeof
Псевдооперация
Параметр – тип
Вычисление не требует вычисления аргумента, а только его типа
Использования
динамическое размещение данных
Record * r = (Record*) malloc(sizeof(Record)),
    * a = (Record *) calloc(sizeof(*a),100);
копирование массивов
memcpy(dest, source, n * sizeof(*dest))
Описание слайда:
sizeof Псевдооперация Параметр – тип Вычисление не требует вычисления аргумента, а только его типа Использования динамическое размещение данных Record * r = (Record*) malloc(sizeof(Record)), * a = (Record *) calloc(sizeof(*a),100); копирование массивов memcpy(dest, source, n * sizeof(*dest))

Слайд 82





Присваивания
Выражение с побочным эффектом (изменением состояния памяти)
Получатель (левая часть присваивания) – изменяемая переменная
Источник (правая часть присваивания) – присваиваемое значение
Значение присваивания = присвоенное значение
Приведение типов: тип источника не превосходит типа получателя.
Описание слайда:
Присваивания Выражение с побочным эффектом (изменением состояния памяти) Получатель (левая часть присваивания) – изменяемая переменная Источник (правая часть присваивания) – присваиваемое значение Значение присваивания = присвоенное значение Приведение типов: тип источника не превосходит типа получателя.

Слайд 83





Присваивание - пример
float A[N]; int  i, j;
A[i+j] = (i=(j=1)+2) + 4
Вычислить 1
Поместить 1 в j
К значению j прибавить 2
Поместить 3 в i
Вычислить 3+4 (результат 7)
Вычислить i+j
Вычислить элемент массива A[4]
Преобразовать 7 в вещественное 7.0
Поместить 7.0 в A[4]
Результат присваивания – 7.0
Описание слайда:
Присваивание - пример float A[N]; int i, j; A[i+j] = (i=(j=1)+2) + 4 Вычислить 1 Поместить 1 в j К значению j прибавить 2 Поместить 3 в i Вычислить 3+4 (результат 7) Вычислить i+j Вычислить элемент массива A[4] Преобразовать 7 в вещественное 7.0 Поместить 7.0 в A[4] Результат присваивания – 7.0

Слайд 84





Присваивание – побочные эффекты!
Если вдруг в предыдущем примере
	A[i+j] = (i=(j=1)+2) + 4
cначала вычисляется получатель, то изменится A[0], а не A[4]
Не специфицировано в каком порядке вычисляются операнды, например
	((i=(j=2) + i) + (j=(i=1) + j)
	может быть равно как 5, так и 3.
Описание слайда:
Присваивание – побочные эффекты! Если вдруг в предыдущем примере A[i+j] = (i=(j=1)+2) + 4 cначала вычисляется получатель, то изменится A[0], а не A[4] Не специфицировано в каком порядке вычисляются операнды, например ((i=(j=2) + i) + (j=(i=1) + j) может быть равно как 5, так и 3.

Слайд 85





Совмещенное присваивание
	 M[i+1] = М[i+1] + 2
		эквивалентно 
	(при отсутсвии побочных эффектов)
 M[i+1] += 2 
Сокращение записи – наглядность
Соответствие смыслу – «увеличить M[i+1] на 2»
Экономия вычислений – ячейка M[i+1] вычисляется лишь один раз
Помимо += может быть -=, *=, /=, %=, &=, |=, ^=, <<=, >>=.  (Но не может быть <=, &&=, !=)
Описание слайда:
Совмещенное присваивание M[i+1] = М[i+1] + 2 эквивалентно (при отсутсвии побочных эффектов) M[i+1] += 2 Сокращение записи – наглядность Соответствие смыслу – «увеличить M[i+1] на 2» Экономия вычислений – ячейка M[i+1] вычисляется лишь один раз Помимо += может быть -=, *=, /=, %=, &=, |=, ^=, <<=, >>=. (Но не может быть <=, &&=, !=)

Слайд 86





Инкремент, декремент
Префиксная форма
++ X эквивалентно X += 1
Постфиксная форма
X ++ эквивалентно (t = X, X+=1, t)
Запомнить X во временной переменной
Увеличить X на 1
Выдать запомненное значение
Аналогично для --
Описание слайда:
Инкремент, декремент Префиксная форма ++ X эквивалентно X += 1 Постфиксная форма X ++ эквивалентно (t = X, X+=1, t) Запомнить X во временной переменной Увеличить X на 1 Выдать запомненное значение Аналогично для --

Слайд 87





Совмещённое присваивание (пример)
(*p++) += 0x40
Запомнить значение указателя p
Извлечь значение символа *p
Прибавить к нему 0x40
Поместить полученное значение в *p
Взять запомненное на шаге 1значение указателя p
Увеличить его на 1 
Поместить полученный указатель в p (перейти к следующему символу)
Описание слайда:
Совмещённое присваивание (пример) (*p++) += 0x40 Запомнить значение указателя p Извлечь значение символа *p Прибавить к нему 0x40 Поместить полученное значение в *p Взять запомненное на шаге 1значение указателя p Увеличить его на 1 Поместить полученный указатель в p (перейти к следующему символу)

Слайд 88





Путаница: = vs ==, & vs &&
Присваивание встречается значительно чаще, чем сравнение на равенство (?)
В системных программах & встречается чаще, чем && (?)
Пример. Пусть x = 1, y = 2, тогда условие
	x=2 & x-y>0 
Реализуется как
	x =  ( ((2 & x) – y) > 0 ), 
результат 0, побочно x=0
Описание слайда:
Путаница: = vs ==, & vs && Присваивание встречается значительно чаще, чем сравнение на равенство (?) В системных программах & встречается чаще, чем && (?) Пример. Пусть x = 1, y = 2, тогда условие x=2 & x-y>0 Реализуется как x = ( ((2 & x) – y) > 0 ), результат 0, побочно x=0



Похожие презентации
Mypresentation.ru
Загрузить презентацию