Похожие презентации:
Парадигмы программирования. Методические и технические приемы, обеспечивающие качественную модульную структуру
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 Principle25
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