В докладе описываются основные проблемы, которые возникают при разработке проектов, и демонстрируется, что эти проблемы можно предсказать и решать с помощью математической теории, лежащей в основе языков программирования.
2. О себе
15 лет преподаю
ИМИТ, ФКН ОмГУ
ИТ-компании
Школа программиста
11 лет разрабатываю ПО
разработчик, архитектор,
PM, руководство до 70
человек
Тюменцев Евгений
4. Определение абстракции
Пусть L – формальный язык, обозначим через
𝐿 множество всех подслов языка L, X –
произвольное множество
Тогда F: X → 𝐿 называется абстракцией,
элементы множества X – сущности, F(X) –
абстракции.
5. Магические константы
2 Vs int players = 2;
Построение абстракций отражает ход мыслей
программиста. Плохой код – это, когда
тяжело восстановить ход мыслей того, кто его
написал!
6. ℤ216 и short int
ℤ→short int
65536 ≣ 0 (mod 65536)
65535 ≣ -1 (mod 65536)
65534 ≣ -2 (mod 65536)
…
32768 ≣ -32768 (mod 65536)
9. О подмножествах
Верно ли, что F(Y)⊂F(X)?
В общем случае: НЕТ!
Rob Martin The Liskov Substitution Principle
Класс Квадрат не является наследником от
класса Прямоугольник
10. Пример Роба Мартина
class Rectangle
{
private double height;
private double width;
public double getHeight() { return height; }
public void setHeight(int value) { height = value;}
public double getWidth() { return width; }
public void setWidth(int value) { width = value; }
}
….
void f(Rectangle r)
{
r.setHeight (5);
r.setWidth (4);
Debug.Assert(r.getHeight() * r.getWidth() == 20);
}
class Square extends Rectangle
{
public void setHeight(int value)
{
super.setHeight(value);
super.setWidth(value);
}
public void setWidth(int value)
{
super.setHeight(value);
super.setWidth(value);
}
}
11. Самое главное об абстракциях
F: X→ 𝐿 - абстракция
Наши представления о множестве сущностей
X меняется, а код программы нет!
13. 1969 г. An Axiomatic Basis for
Computer Programming
1971 г. Procedures and Parameters:
An Axiomatic Approach
1980 г. премия Тьюринга
1990 г. Медаль “Пионер
компьютерной техники”
2000 г. рыцарский титул за заслуги в
области образования и
компьютерной техники, премия
Киото
Логика Хоара
Чарльз Хоар
14. Логика Хоара часто противоречива!
⊢ 𝐿 𝞿 и ⊢ 𝐿 `𝞿
Значит, что любое изменение в коде надо
тестировать!
20. Что делать?
Итерации
Низкая степень связности
Небольшая вложенность процедур
Модульное тестирование
Рефакторинг
Planning poker
Agile
Хорошо определенные требования
24. Можно ли писать SOLID код?
HWdTech.DS
2013 год
smartactors
2015 год, совместно с 7bits
25. Факты о логике Хоара
Система аксиом, содержащая if и while полна
При добавлении новой конструкции в язык,
существующие аксиомы для goto делают
логику противоречивой.
26. Факты о логике Хоара
Если использовать
1. статическое связывание
2. Рекурсию
3. Вложенные процедуры
4. Процедуры, принимающие в качестве
параметров процедуры.
5. Глобальные переменные
то не существует полной системы аксиом.