3. 8E+09
7E+09
6E+09
5E+09
4E+09
3E+09
2E+09
1E+09
0
Трудозатраты, чел/час
Дом – 100 000
Linux – 30 000 000
Vista – 80 000 000
4. Слагаемые трудоемкости
• Размер и сложность решаемых задач
• Ограничения человеческого организма
• Разница между человеческим и
машинным языком
• Особенности командной работы
10. Свойства психологии человека
Интерференция — взаимоподавление одновременно
осуществляющихся психических процессов. Она обусловлена
ограниченным объёмом распределяемого внимания.
11. Свойства психологии человека
«Магическое число семь плюс-минус два» —
закономерность, обнаруженная американским учёным-психологом Джорджем
Миллером, согласно которой кратковременная человеческая память, как
правило, не может запомнить и повторить более 7 ± 2 элементов.
12. Один в поле не воин!
• Всю программу не удержать в голове:
– Делим на части – функции, процедуры, классы, объекты;
– Абстрагируемся – абстрактные типы, классы, инкапсуляция,
полиморфизм, шаблоны;
– Выбираем другой язык – более близкий к задаче.
• Большую программу даже не написать в
одиночку:
– Делим на части – модули, подсистемы;
– Работаем командами.
13. Команда
• Общее понимание задач.
• Общие принципы написания кода:
– Быстрое считывание;
– Через полгода ваш код не ваш.
• Средства для взаимодействия:
– Задачи;
– Код;
– Документация.
• Расходы на общение (нелинейная зависимость
от размера команды)
14. Программист – переводчик с
человеческого на компьютерный
• Контекст задачи – неопределенный
• Контекст компьютера:
– Процессор (регистры, набор команд);
– Память;
– Внешняя память;
– Дисплей;
– Сеть.
15. От сложного к простому
Источники сложности
• Предметная область
• Психология человека
• Команда
• Разность контекстов
Способы упрощения
• Сближение контекстов
задачи и компьютера за
счет языка
программирования
• Модель предметной
области
• Абстрактные типы
• Общекомандные
принципы работы
17. Указатель на указатель
Имя A B C
Адрес 0 1 2 3 4 5 6 7 8 9
Значение 3 5 8
Указатель – переменная, которая хранит адрес другой переменной.
* - операция, которая возвращает значение переменной, на которую
указывает указатель.
A = 3
B = 5
C = 8
*A = 5
**A = 8
18. Указатель на указатель
Имя A B C D E F G H I K
Адрес 0 1 2 3 4 5 6 7 8 9
Значение 3 9 5 5 6 8 7 2 5 9
Указатель – переменная, которая хранит адрес другой переменной.
* - операция, которая возвращает значение переменной, на которую
указывает указатель.
A = ?
F = ?
D = ?
B = ?
*A = ?
*F = ?
*D = ?
*B = ?
**A = ?
**F = ?
**D = ?
**B = ?
19. Функция
Квадратичный полином – ax^2 + bx + c
F = function(a,b,c) {
return function(x) { return ax^2 + bx + c }
}
Y = F(5, -3, 2);
Y (4) – 5*4^2-3*4+2 = 70
A = [1,2,3,4,5]
A = A.map(Y);
A – [4, 16, 38, 70, 112]
20. Функция
Квадратичный полином – ax^2 + bx + c
F = function(a,b,c) {
return function(x) { return ax^2 + bx + c }
}
Y1 = F(3, -5, 1);
Y1(4) – ?
Y1(-2) – ?
Y2 = F(-4, -2, 10);
Y2(4) – ?
Y2(-2) – ?
Придумайте свою
функцию, которая
возвращает
функцию.
21. Наследование/Полиморфизм
• Шахматная фигура (позиция, проверка хода).
• Пешка, Конь, Ладья – фигуры.
• Позиция – наследуется. Ходы у разных фигур
разные, поэтому проверка хода должна быть
изменена (полиморфизм).
Фигура = Пешка
Фигура.проверитьХод(x,y)
Фигура = Конь
Фигура.проверитьХод(x,y)