1.42M
Category: programmingprogramming

Парадигмы программирования. Методические и технические приемы, обеспечивающие качественную модульную структуру

1.

Организация процесса проектирования
Программного обеспечения
Тема 1: Парадигмы программирования.
Методические и технические приемы,
обеспечивающие качественную модульную структуру.
ст. преп. каф. ВТ
Васильев В.С.

2.

Стуруктура темы:
1. Зачем нужен этот премет?
2. (Не)правильное использование конструкций ЯП.
3. Основные конструкции ООП.
4. Правильное использование ООП. SOLID
5. Соглашения о кодировании.
2

3.

1.1 Зачем нужен этот предмет?
Учеба в ВУЗе
Чем ВУЗ отличается от обучающих курсов?
Что значит фундаментальность?
Пара фактов:
- Яндекс многократно заявлял, что у них нет ни одного начальника
отдела разработки и профильным высшим образованием;
- Гейтса и пару аналогов отчислили из ВУЗов типа Гарвардского;
Зачем вам образование?
- в Японии люди мрут (по 10 тысяч в год) от переработки,
студенты ВУЗов чаще сходят с ума от этого;
- студенты Гарвардского университета хотят учиться еще больше.
Зачем напрягаться во время учебы?
- везде (почти) образование платное, но в РФ бесплатное.
Бесплатное = плохое?
- не найду работу — ВУЗ виноват? Нужно распределение?
- в Гарварде не стоит вопрос о трудоустройстве.
3

4.

1.2 Зачем нужен этот предмет?
Кем можно работать по специальности:
•Программист: системный, прикладной, мобильный, веб
(бэкенд/фронтенд).
•Архитектор: ПО, сетей, баз данных.
•Аналитик: бизнес-, системный-, данных-.
•Тестировщик.
•Scrum-менеджер.
•DevOps-инженер.
•???
Пара фактов:
- мы не Гарвард, хотим помочь трудоустроиться;
- интереснее учиться после 2-5 собеседований (рекомендую);
- если вы работаете по специальности — можно согласовать индивидуальное з
- если не работаете, но сильно интересуетесь отдельной темой — тоже можно;
- возможен перезачет сторонних курсов.
4

5.

1.3.1 Зачем нужен этот предмет? Вакансии.
Веб-разработчик PHP Junior/Middle в офис
5

6.

1.3.2 Зачем нужен этот предмет?
Вакансии. Программист PHP
6

7.

1.3.3 Зачем нужен этот предмет?
Вакансии. Программист C#
7

8.

1.3.4 Зачем нужен этот предмет?
Вакансии. Бизнес-аналитик (красцветмет)
8

9.

1.4.1 Зачем нужен этот предмет? Общие
требования и конкуренция. Бэкенд.
9

10.

1.4.2 Зачем нужен этот предмет? Общие
требования и конкуренция. Анализ данных.
10

11.

1.4.2 Зачем нужен этот предмет? Общие
требования и конкуренция. Анализ данных.
11

12.

1.4.3 Зачем нужен этот предмет? Общие
требования и конкуренция. Тестировщик.
12

13.

1.5 Зачем нужен этот предмет? Почему
нужно учиться учиться?
Пара фактов:
- все меняется.
- от верстки часто приходят к JS.
- в 35 лет обычно уходят из программирования.
13

14.

1.6 Зачем нужен этот предмет? Что нужно
для зачета?
0) Понимать что значит хороший код.
1) Уметь писать хороший код.
2) Уметь писать хороший объектно-ориентированный код.
3) Уметь тестировать код.
4) Иметь представления о процессе объектно-ориентированного
проектирования.
5) Уметь правильно пользоваться git (демонстрировать это в семестре).
6) Научиться учиться.
Пара фактов:
- Программирование – это о композиции.
- Проектирование – это о декомпозиции.
- Тестирование – это не тыкать мышкой.
14

15.

2 (Не)правильное использование
конструкций ЯП.
0) Понимать что значит хороший код.
1) Уметь писать хороший код.
2) Уметь писать хороший объектно-ориентированный код.
3) Уметь тестировать код.
4) Иметь представления о процессе объектно-ориентированного
проектирования.
5) Уметь правильно пользоваться git (демонстрировать это в семестре).
6) Научиться учиться.
Пара фактов:
- Программирование – это о композиции.
- Проектирование – это о декомпозиции.
- Тестирование – это не тыкать мышкой.
15

16.

4.1 Откуда появилось ООП? - тенденции
Повышение уровня абстракции
Выделение типичных конструкций
Низкоуровневые:
- инструкции, переходы, циклы, модули
Процедурные:
- структуры, процедуры, модули
Объектно-ориентированные:
- классы, пространства имен, модули
Функциональные:
- функции, структуры, модули
Логические:
- предикаты, структуры, модули
16

17.

18.

19.

20.

4.5 Механизмы
Наследование + спецификаторы доступа
Наследование – механизм создания новых класс
Виды наследования по спецификатору доступа: P
20

21.

4.6 Механизмы
Полиморфизм
Полиморфизм - способность программы выбирать различные реализации, при вы
Полиморфизм = наследование + виртуальные функции.
Конюшня18века конюшня = new Конюшня18века();
Воин18века воин = конюшня→getKnight();
Конюшня конюшня = new Конюшная18века();
Воин воин = конюшня→getKnight();
воин->hit();
21

22.

4.7 Контрольные вопросы
1. Что дает виртуальный деструктор (описать развернуто, с примером)?
2. Что такое механизм исключений (поверхностно)?
3. Какие стоит выстроить отношения между классами:
4. Точка, Круг, Шар, Прямая, Прямоугольник?
ООП = абстракция + полиморфизм + наследование + инкапсуляция, но это скоре
22

23.

5.1 Liskov Substitution Principle
Открытое наследование реализует отношение «является».
Какие стоит выстроить отношения между классами:
Точка, Круг, Шар, Прямая, Прямоугольник?
23

24.

5.2.1 Dependency Inversion Principle
не должно существовать прямых зависимостей между конкретными модулями. М
абстракции не должны зависеть от деталей
24

25.

5.2.2 Dependency Inversion Principle
25

26.

5.3 Open/Closed Principle
Открытым называется то, что можно менять. Закрытое изменять нельзя.
В настоящее время под принципом OCP обычно обычно понимают требование закр
сохранение устойчивости интерфейса к расширению системы
А как же инкапсуляция?
26

27.

5.4 Single Responsibility Principle
Если принцип SRP не нарушается, то каждый класс имеет единственную обязанно
27

28.

5.5 Interface Segregation Principle
Не всегда возможно разделить такой класс на две независимых части, т.к. требуе
28

29.

6 Соглашения о кодировании
О чем соглашаются?
Почему? Как связано с критериями качества?
Нужно ли «принимать их на веру»?
Как оформлять код на этом курсе?:
+ «говорящие» имена:
+ --- переменных, функций с маленькой буквы (actorRect);
+ --- классов с большой буквы (QPushButton);
+ --- полей — с префиксом _m (m_actorRect);
+ декларация и реализация класса разделена на .h и .cpp, кроме шаблонных клас
+ отступы:
+ --- горизонтальные — 2 пробела.
+ --- вертикальные — между реализациями функций 1 строка.
+ ограничения - длина функции — 25 строк, строки — 120 символов.
+ комментарии допускаются в форматах Doxygen/Javadoc для модуля,структуры/
29

30.

6.1 Пример неправильного оформления кода
30

31.

6.1 Пример неправильного оформления кода
Этот пример взят из приложения к учебному
пособию по программированию «соседнего» ВУЗа.
31

32.

6.2 Другой пример кода (оформление)
Этот пример предоставлен компанией ЯндексПрактикум.
(Фрагмент лабораторной работы одного из студентов)
32

33.

6.3 Пример удачного рефакторинга
Пример взят из ВКР студента.
Нотацию UML и детали этого решения разберем дальше.
33
English     Русский Rules