Эффективные методики разработки ПО

Содержание

Слайд 2

Содержание презентации 01 Прежде чем кодить 02 Управление сложностью 03 Классы 04 Немного ООП

Содержание презентации

01

Прежде чем кодить

02

Управление сложностью

03

Классы

04

Немного ООП

Слайд 3

Определение проблемы Выработка требований Разработка архитектуры Кодирование и отладка Тестирование Сопровождение Разработка ПО – сложный процесс

Определение проблемы
Выработка требований
Разработка архитектуры
Кодирование и отладка
Тестирование
Сопровождение

Разработка ПО – сложный процесс

Слайд 4

Метафора «Строительство здания» Сравнение конструирования ПО с возведением здания указывает на

Метафора «Строительство здания»

Сравнение конструирования ПО с возведением здания указывает на необходимость

тщательной подготовки к проекту и проясняет различие между крупными и небольшими проектами.
Слайд 5

Важность предварительных условий Общая цель подготовки — снижение риска: адекватное планирование

Важность предварительных условий

Общая цель подготовки — снижение риска: адекватное планирование позволяет

исключить главные аспекты риска на самых ранних стадиях работы, чтобы основную часть проекта можно было выполнить максимально эффективно.
Слайд 6

Определение проблемы — это просто формулировка сути проблемы без каких-либо намеков

Определение проблемы — это просто формулировка сути проблемы без каких-либо намеков

на ее возможные решения

Определение проблемы

Слайд 7

Выработка требований Требования подробно описывают, что должна делать программная система. Адекватное

Выработка требований

Требования подробно описывают, что должна делать программная система. Адекватное определение

требований — одно из важнейших условий успеха проекта. Внимание к требованиям помогает свести к минимуму изменения системы после начала разработки.
Слайд 8

Это высокоуровневая часть проекта приложения, каркас, состоящий из деталей проекта Она

Это высокоуровневая часть проекта приложения, каркас, состоящий из деталей проекта
Она позволяет

разделить работу на части, над которыми отдельные разработчики и группы могут трудиться независимо.

Разработка архитектуры

Слайд 9

Компоненты архитектуры Основные классы Организация данных Бизнес-правила Пользовательский интерфейс Управление ресурсами

Компоненты архитектуры

Основные классы
Организация данных
Бизнес-правила
Пользовательский интерфейс
Управление ресурсами

Безопасность
Производительность
Масштабируемость
Обработка ошибок
Купить или создавать велосипед

Слайд 10

Основные классы Их области ответственности Взаимодействия с другими классами Иерархия Время существования объектов

Основные классы

Их области ответственности
Взаимодействия с другими классами
Иерархия
Время существования объектов

Слайд 11

Управление сложностью Управление сложностью — самый важный технический аспект разработки ПО.

Управление сложностью

Управление сложностью — самый важный технический аспект разработки ПО. Мы

должны попытаться организовать программы так, чтобы можно было безопасно
работать с их отдельными фрагментами по очереди.

Избегайте создания хитроумных решений

Слайд 12

Как управлять сложностью?

Как управлять сложностью?

Слайд 13

Простота сопровождения Проектируя приложение, не забывайте о программистах, которые будут его

Простота сопровождения

Проектируя приложение, не забывайте о программистах, которые будут его сопровождать.


Постоянно представляйте себе вопросы,
которые будут возникать у них при взгляде на создаваемый вами код.
Слайд 14

Слабое сопряжение: сводите к минимуму число соединений между разными частями программы.

Слабое сопряжение: сводите к минимуму число соединений между разными частями программы.
Расширяемость:

изменение одного фрагмента системы не должно влиять на ее другие фрагменты
Минимальная, но полная функциональность: программа закончена не тогда, когда в нее больше нечего добавить, а когда из нее ничего нельзя выбросить.

Управление сложностью

Слайд 15

Классы Это Абстрактный тип данных(АТД) - набор данных и методов, имеющих

Классы

Это Абстрактный тип данных(АТД) - набор данных и методов, имеющих общую,

целостную, хорошо определенную сферу ответственности.
Слайд 16

Нужно определить: АТД и его атрибуты действия, которые могут быть выполнены

Нужно определить:

АТД и его атрибуты
действия, которые могут быть выполнены над классом
Действия,

которые класс может выполнять над другими объектами
Части класса, видимые снаружи
Интерфейс класса
Слайд 17

Выражайте в интерфейсе класса согласованный уровень абстракции Хорошо -> Каждый класс

Выражайте в интерфейсе класса согласованный уровень абстракции

<- Плохо

Хорошо ->

Каждый класс должен

быть реализацией
только одного АТД
Слайд 18

Другие советы Убедитесь, что вы понимаете, реализацией какой абстракции является класс

Другие советы

Убедитесь, что вы понимаете, реализацией какой абстракции является класс
Предоставляйте методы

вместе с противоположными им методами
Убирайте постороннюю информацию в другие классы
Интерфейс класса должен сообщать как можно меньше о внутренней работе класса
Опасайтесь нарушения целостности интерфейса при изменении класса
Слайд 19

Инкапсуляция Инкапсуляция позволяет вам смотреть на дом, но не дает подойти

Инкапсуляция

Инкапсуляция позволяет вам смотреть на дом, но не
дает подойти достаточно близко,

чтобы узнать, из чего сделана дверь.
Инкапсуляция управляет сложностью.
Слайд 20

Применение инкапсуляции Не делайте данные-члены открытыми Не включайте в интерфейс класса

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

Не делайте данные-члены открытыми
Не включайте в интерфейс класса закрытые

детали реализации
Не делайте предположений о клиентах класса
Избегайте использования дружественных классов
Цените легкость чтения кода выше, чем удобство его написания
Очень настороженно относитесь к семантическим нарушениям инкапсуляции (вызывает зависимость клиентского кода от закрытой реализации)
Слайд 21

Наследование Наследование подразумевает, что один класс является более специализированной версией другого

Наследование

Наследование подразумевает, что один класс является более специализированной версией другого класса
Базовый

класс формулирует ожидания и ограничения, которым должен будет соответствовать производный класс (Meyers, 1998).
Слайд 22

Применение наследования Проектируйте и документируйте классы с учетом возможности наследования или

Применение наследования

Проектируйте и документируйте классы с учетом возможности наследования или запретите

его
Соблюдайте принцип подстановки Лисков - «Клиенты должны иметь возможность использования подклассов через интерфейс базового класса, не замечая никаких различий»
Убедитесь, что вы наследуете только то, что хотите наследовать(реализацию или только интерфейс)
Перемещайте общие интерфейсы, данные и формы поведения на как можно более высокий уровень иерархии наследования
Слайд 23

Наследование часто противоречит управлению сложностью

Наследование часто противоречит управлению сложностью

Слайд 24

Методы классов Включайте в класс как можно меньше методов Блокируйте неявно

Методы классов

Включайте в класс как можно меньше методов
Блокируйте неявно сгенерированные методы

и операторы, которые вам не нужны
Избегайте опосредованных вызовов методов других классов Func1().Func2().Func3()
Минимизируйте сотрудничество класса с другими классами
Слайд 25

Моделирование объектов реального мира; Моделирование абстрактных объектов; Снижение сложности; Изоляция сложности;

Моделирование объектов реального мира;
Моделирование абстрактных объектов;
Снижение сложности;
Изоляция сложности;
Сокрытие деталей реализации;
Ограничение влияния

изменений;
Облегчение повторного использования кода

Причины создания классов

Слайд 26

Итоги презентации Уделяем внимание предварительным требованиям и архитектуре Стараемся свести сложность

Итоги презентации

Уделяем внимание предварительным требованиям и архитектуре
Стараемся свести сложность к минимуму
Класс

должен формировать согласованную абстракцию
Скрываем особенности реализации
Слайд 27

Источник Стив Макконнелл. Совершенный код

Источник

Стив Макконнелл. Совершенный код