Программирование глазами математика
TRANSCRIPT
О себе
15 лет преподаю ИМИТ, ФКН ОмГУ ИТ-компании Школа программиста
11 лет разрабатываю ПО разработчик, архитектор, PM, руководство до 70 человек
Тюменцев Евгений
Что такое абстракция?
Назовите, какие существенные характеристики были выделены для абстракций:1 2 3 4 5
Определение абстракции
Пусть L – формальный язык, обозначим через множество всех подслов языка L, X – произвольное множество
Тогда F: X → называется абстракцией, элементы множества X – сущности, F(X) – абстракции.
Магические константы
2 Vs int players = 2;
Построение абстракций отражает ход мыслей программиста. Плохой код – это, когда
тяжело восстановить ход мыслей того, кто его написал!
и short int
ℤ→short int 65536 ≣ 0 (mod 65536) 65535 ≣ -1 (mod 65536) 65534 ≣ -2 (mod 65536) … 32768 ≣ -32768 (mod 65536)
О подмножествахВерно ли, что F(Y)⊂F(X)?
В общем случае: НЕТ!
Rob Martin The Liskov Substitution Principle
Класс Квадрат не является наследником от класса Прямоугольник
Пример Роба Мартина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); } }
Самое главное об абстракциях
F: X→ - абстракция
Наши представления о множестве сущностей X меняется, а код программы нет!
1969 г. An Axiomatic Basis for Computer Programming1971 г. Procedures and Parameters: An Axiomatic Approach
1980 г. премия Тьюринга1990 г. Медаль “Пионер компьютерной техники” 2000 г. рыцарский титул за заслуги в области образования и компьютерной техники, премия Киото
Логика Хоара
Чарльз Хоар
Что делать?
ИтерацииНизкая степень связности
Небольшая вложенность процедурМодульное тестирование
РефакторингPlanning poker
AgileХорошо определенные требования
Что делать?
SOLID
Доказаны математически (2014 год)Верны не только для ООП, но и для функционального, и процедурного
программирования!
Факты о логике Хоара
Система аксиом, содержащая if и while полна
При добавлении новой конструкции в язык, существующие аксиомы для goto делают
логику противоречивой.
Факты о логике Хоара
Если использовать1. статическое связывание2. Рекурсию3. Вложенные процедуры4. Процедуры, принимающие в качестве параметров процедуры.5. Глобальные переменныето не существует полной системы аксиом.
Приглашаем на спецкурс
Анатомия функционального и императивного программирования
http://hwdtech.ru/anatomy-of-formal-languarges-2015/