Top Banner
Программирование глазами математика Тюменцев Евгений hwdtech.ru
30

Программирование глазами математика

Jan 22, 2017

Download

Technology

etyumentcev
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Программирование глазами математика

Программирование глазами математика

Тюменцев Евгенийhwdtech.ru

Page 2: Программирование глазами математика

О себе

15 лет преподаю ИМИТ, ФКН ОмГУ ИТ-компании Школа программиста

11 лет разрабатываю ПО разработчик, архитектор, PM, руководство до 70 человек

Тюменцев Евгений

Page 3: Программирование глазами математика

Что такое абстракция?

Назовите, какие существенные характеристики были выделены для абстракций:1 2 3 4 5

Page 4: Программирование глазами математика

Определение абстракции

Пусть L – формальный язык, обозначим через множество всех подслов языка L, X – произвольное множество

Тогда F: X → называется абстракцией, элементы множества X – сущности, F(X) – абстракции.

Page 5: Программирование глазами математика

Магические константы

2 Vs int players = 2;

Построение абстракций отражает ход мыслей программиста. Плохой код – это, когда

тяжело восстановить ход мыслей того, кто его написал!

Page 6: Программирование глазами математика

и short int

ℤ→short int 65536 ≣ 0 (mod 65536) 65535 ≣ -1 (mod 65536) 65534 ≣ -2 (mod 65536) … 32768 ≣ -32768 (mod 65536)

Page 7: Программирование глазами математика

ℝ и doubleℝ → doublea*b/c≠a/c*b

Page 8: Программирование глазами математика

О подмножествах

Пусть F: X→ - . абстракция, Известно что Y⊂X Верно ли, что F(Y)⊂F(X)?

Page 9: Программирование глазами математика

О подмножествахВерно ли, что F(Y)⊂F(X)?

В общем случае: НЕТ!

Rob Martin The Liskov Substitution Principle

Класс Квадрат не является наследником от класса Прямоугольник

Page 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); } }

Page 11: Программирование глазами математика

Самое главное об абстракциях

F: X→ - абстракция

Наши представления о множестве сущностей X меняется, а код программы нет!

Page 12: Программирование глазами математика

Изоморфизм Карри-Говарда

Высказывания типы≅Доказательство функции≅

Page 13: Программирование глазами математика

1969 г. An Axiomatic Basis for Computer Programming1971 г. Procedures and Parameters: An Axiomatic Approach

1980 г. премия Тьюринга1990 г. Медаль “Пионер компьютерной техники” 2000 г. рыцарский титул за заслуги в области образования и компьютерной техники, премия Киото

Логика Хоара

Чарльз Хоар

Page 14: Программирование глазами математика

Логика Хоара часто противоречива!

и

Значит, что любое изменение в коде надо тестировать!

Page 15: Программирование глазами математика

Противоречивость: сильно страшно?

Page 16: Программирование глазами математика

Противоречивость: сильно страшно?

Page 17: Программирование глазами математика

Противоречивость: сильно страшно?

Page 18: Программирование глазами математика

Противоречивость: сильно страшно?

Page 19: Программирование глазами математика

Экспоненциальный рост затрат!

Page 20: Программирование глазами математика

Что делать?

ИтерацииНизкая степень связности

Небольшая вложенность процедурМодульное тестирование

РефакторингPlanning poker

AgileХорошо определенные требования

Page 21: Программирование глазами математика

Что делать?

SOLID

Доказаны математически (2014 год)Верны не только для ООП, но и для функционального, и процедурного

программирования!

Page 22: Программирование глазами математика

Если SOLID, то, скорее всего, нельзя

switchenumПриведение типовnew

Page 23: Программирование глазами математика

Нарушают инкапсуляцию

if

отсутствие полиморфизма (статического или динамического)

Page 24: Программирование глазами математика

Можно ли писать SOLID код?

HWdTech.DS 2013 год

smartactors 2015 год, совместно с 7bits

Page 25: Программирование глазами математика

Факты о логике Хоара

Система аксиом, содержащая if и while полна

При добавлении новой конструкции в язык, существующие аксиомы для goto делают

логику противоречивой.

Page 26: Программирование глазами математика

Факты о логике Хоара

Если использовать1. статическое связывание2. Рекурсию3. Вложенные процедуры4. Процедуры, принимающие в качестве параметров процедуры.5. Глобальные переменныето не существует полной системы аксиом.

Page 27: Программирование глазами математика

Зачем все это знать?

VS

Page 28: Программирование глазами математика

Приглашаем на спецкурс

Анатомия функционального и императивного программирования

http://hwdtech.ru/anatomy-of-formal-languarges-2015/

Page 29: Программирование глазами математика

Приглашаем на стажировку

3 человека

последующее трудоустройство

Стенд HWdTech во время перерыва

Page 30: Программирование глазами математика

Вопросы?

Тюменцев Евгений

Звоните: +7 913 150 22 04Пишите: [email protected]

Hwdtech.ru