close

Вход

Забыли?

вход по аккаунту

код для вставкиСкачать
21.05.2014
Программирование
(структурное, процедурное,
объектно-ориентированное)
с использованием C++/C#
Полевой Дмитрий Валерьевич
к.т.н., доцент КиК
e-mail: [email protected]
1
21.05.2014
«Случайные» числа
• определяются строго
– теория вероятности
– математическая статистика
• определяются для последовательности
• программно могут быть сгенерированы
последовательности псевдослучайных
чисел
21.05.2014
2
2
21.05.2014
Инициализация генератора
псевдослучайных чисел
• определяет начальное значение (seed) для
последовательности
• используется для улучшения качества
псевдослучайной последовательности
• в качестве начального значения
используется некоторое “случайное”
значение
21.05.2014
3
3
21.05.2014
Генерация псеводслучайных чисел
(System.Random)
• инициализация последовательности
Random() – функцией от времени
Random(Int32) – заданным значением
• генерация псевдослучайного числа
Next() – неотрицательного
Next(Int32) – неотрицательного в диапазоне
Next(Int32, Int32) – в диапазоне
NextBytes – заполнение массива байт
NextDouble() – в диапазоне [0.0,0.1]
21.05.2014
4
4
21.05.2014
Рекурсия
• вызов функции из неё же самой,
непосредственно (простая рекурсия)
• через другие функции
(сложная или косвенная рекурсия)
• в С# «использует» стек вызова
• может (должна) заменяться циклом
– возможно с использованием стека
21.05.2014
5
5
21.05.2014
Рекурсия (плюсы и минусы)
• естественный способ (вычислений)
• простота организации и наблюдения
• зацикливания и переполнения стека
– сложность соблюдения допустимой «глубины»
– сложность косвенной рекурсии
• использовать не рекомендуется
21.05.2014
6
6
21.05.2014
Пример использования рекурсии
// рекурсивное вычисление факториала
Int32 factorial(Int32 n)
{
return n ? (n * factorial(n - 1)) : 1;
}
Int32 nFact = factorial(10);
21.05.2014
7
7
21.05.2014
Индексатор
• доступ через оператор []
• специальный вид свойства
21.05.2014
8
8
21.05.2014
Индексатор (пример)
public bool this[int i]
{
get
{
return data[i];
}
set { … }
}
21.05.2014
9
9
21.05.2014
Машинное слово
• платформозависимая хар-ка
• имеет неоднозначную интерпретацию
(исторически)
• байт – единица адресации
• слово – несколько байт (обычно 2n)
21.05.2014
10
10
21.05.2014
Длинна машинного слова
• процессор
– разрядность данных
– максимальное значение беззнакового целого
типа
• память
– разрядность адресуемых данных
(шина данных)
– объем адресуемой напрямую памяти
21.05.2014
11
11
21.05.2014
Порядок байтов
• определяет порядок записи байтов для
многобайтовых чисел
21.05.2014
12
12
21.05.2014
big-endian
• от старшего к младшему
• является стандартным для протоколов
TCP/IP (сетевой, network order)
пример:
0x00000b0f
0x00
21.05.2014
0x00
0x0b
0x0f
13
13
21.05.2014
little-endian
• от младшего к старшему
• является стандартным для x86
пример:
0x00000b0f
0x0f
21.05.2014
0x0b
0x00
0x00
14
14
21.05.2014
Когда порядок байтов важен
• передача данных через файлы
• передача данных через сеть
• низкоуровневые алгоритмы манипуляции
данными
(уровня байт и бит)
21.05.2014
15
15
21.05.2014
Целые числа
• для знаковых за знак отвечает разряд
старшего байта
21.05.2014
16
16
21.05.2014
Вещественные числа
• физическое представление может зависеть
от порядка байт
• на x86 используются форматы
IEEE 754
– знак числа в старших байтах
– порядок числа в старших байтах
21.05.2014
17
17
21.05.2014
Плюсы и минусы
+ little-endian
как uint32_t (4 байта) – 0x00000022
как uint16_t (2 байта) – 0x0022
как uint8_t (1 байт) – 0x22
- little-endian
отладочное/печатное значение не совпадает с
размещением в памяти
21.05.2014
18
18
21.05.2014
Побитовые операторы
• целые
• Boolean
&
И (AND)
expr & expr
|
ИЛИ (OR)
expr | expr
^
исключающее ИЛИ (XOR) expr ^ expr
~
дополнение
~expr
<<
сдвиг влево
expr << expr
>>
сдвиг вправо
expr >> expr
21.05.2014
19
19
21.05.2014
Присваивающие побитовые операторы
&=
И (AND)
lvalue &= expr
|=
ИЛИ (OR)
lvalue |= expr
^=
исключающее ИЛИ (OR) lvalue ^= expr
<<=
сдвиг влево
lvalue <<= expr
>>=
сдвиг вправо
lvalue >>= expr
21.05.2014
20
20
21.05.2014
Битовое ИЛИ (пример)
00000000 01111011 (123)
|
00000001 11001000 (456)
=
00000001 11111011 (507)
21.05.2014
21
21
21.05.2014
Битовое И (пример)
пример:
00000000 01111011
&
00000001 11001000
=
00000000 01001000
21.05.2014
22
22
21.05.2014
Битовое Исключающее ИЛИ
(пример)
пример:
00000000 01111011
^
00000001 11001000
=
00000001 10110011
21.05.2014
23
23
21.05.2014
Битовое НЕ (пример)
пример:
~
00000000 01111011
=
11111111 10000100
21.05.2014
24
24
21.05.2014
Битовый сдвиг (пример)
пример:
11111111 10000101
<<
1
=
11111111 00001010
21.05.2014
25
25
21.05.2014
Битовый сдвиг (пример)
пример:
11111111 00001010
>>
1
=
01111111 10000101
21.05.2014
26
26
21.05.2014
Биты как элементы множества
• NOT – дополнение
• AND – пересечение
• OR – объединение
• XOR – симметрическая разность
21.05.2014
27
27
21.05.2014
Биты как элементы масок
• AND
– сброс битов по маске
• OR
– установка битов по маске
• XOR
– для инвертирования битов по маске
21.05.2014
28
28
21.05.2014
Качество ПО
• построение качественного ПО – цель
программной инженерии
• методики
• технологии
• инструменты
21.05.2014
29
29
21.05.2014
ПО как продукт
• прикладной инструмент
• нематериальность
• простота воспроизведения
• срок жизни
• изменение внешних условий (требований)
21.05.2014
30
30
21.05.2014
Жизненный цикл (этапы)
• сбор требований
• проектирование
• кодирование
• тестирование
• выпуск версии
• сопровождение
21.05.2014
31
31
21.05.2014
Потребители ПО
• пользователь
использует ПО
• администратор
разворачивает и настраивает ПО
• менеджер
принимает решение и закупает
• разработчик
использует ПО в качестве компоненты ПО
21.05.2014
32
32
21.05.2014
Факторы качества ПО
• внешние (доступны пользователям)
– наблюдаются и оцениваются пользователями
ПО
• внутренние (доступны разработчикам)
– наблюдаются и оцениваются разработчиками
– служат основой для достижения внешних
факторов качества
21.05.2014
33
33
21.05.2014
Внешние факторы качества
•
•
•
•
корректность
устойчивость
расширяемость
повторное использование
• совместимость, эффективность,
переносимость, своевременность
21.05.2014
34
34
21.05.2014
Внутренние факторы качества
• архитектура
– модульность
– изолированность
– гибкость в использовании форматов данных
• возможность повторного использования
• структурированность
• внутренняя документированность
21.05.2014
35
35
21.05.2014
Расходы на сопровождение
21.05.2014
взято с http://www.intuit.ru/department/se/oopbases/1/oopbases_1.html
36
36
21.05.2014
Изменения в ПО
• составляют основную часть сопровождения
• неизбежны
• непредсказуемы
21.05.2014
37
37
21.05.2014
Сложности изменения ПО
• непредсказуемость
• поддержание качества и контроль
результатов изменений
• “распыленность” изменений и их эффектов
• поддержка обратной совместимости
21.05.2014
38
38
21.05.2014
Управление сложностью
• основная причина и направление развития
методологий, технологий и инструментов
разработки ПО
• ищите более простые решения и
реализации
21.05.2014
39
39
21.05.2014
Достижение качества ПО
• определяется через внешние факторы
• возможно через улучшение внутреннего
качества ПО
• всегда является компромиссом в
достижении ряда целей
21.05.2014
40
40
21.05.2014
Стоимость исправления дефектов
• стоимость обнаружения дефекта растет со
временем
• стоимость устранения дефекта растет со
временем
• раннее обнаружение и устранение
дефектов уменьшает стоимость
21.05.2014
41
41
21.05.2014
Программа контроля качества
• инспектирование и контроль проекта
• моделирование и прототипирование
• чтение и инспекции кода
• тестирование выполнения программы
21.05.2014
42
42
21.05.2014
Когда контролировать качество?
• дефекты попадают в ПО на всех стадиях
разработки
• раннее обнаружение и устранение
дефектов обходится дешевле
• выгоднее предотвращать появление
дефектов, чем потом исправлять их
21.05.2014
43
43
21.05.2014
Основной закон качества ПО
• повышение качества ПО снижает стоимость
разработки
21.05.2014
44
44
21.05.2014
Личная ответственность
• перед пользователями
– ваши программы будут использовать
• перед коллегами
– ваш код будут использовать
– ваш код будут читать
– ваш код будут модифицировать
21.05.2014
45
45
21.05.2014
Мастерство
• преодолевайте сложность
• анализируйте процесс разработки
• пишите программы для людей
• программируйте с помощью языка, а не на
языке
• тестируйте и итерируйте
21.05.2014
46
46
21.05.2014
Личные качества
• никто не обладает достаточным для
программирования интеллектом
•
•
•
•
думайте
учитесь
интересуйтесь
общайтесь
• будьте скромны 8)
21.05.2014
47
47
21.05.2014
ВАШИ ВОПРОСЫ
21.05.2014
48
48
1/--страниц
Пожаловаться на содержимое документа