Манифест гибкой разработки программ
Мы открываем лучшие способы разработки программного
обеспечения, применяя их на практике и помогая в этом другим.
В ходе своей работы мы научились ценить:
Людей и их взаимоотношения больше, чем процессы и инструменты.
Работающую программу больше, чем исчерпывающую
документацию.
Плодотворное сотрудничество с заказчиком больше,
чем формальные договоренности по контракту.
Оперативное реагирование на изменения больше,
чем следование плану.
Иначе говоря, не отрицая значимость факторов, перечисленных
в правой части предложений, мы больше ценим те, что слева.
Методики экстремального программирования
- Единая команда
- Пользовательские истории
- Короткие циклы
- Приемочные тесты
- Парное программирование
- Разработка через тестирование
- Коллективное владение
- Непрерывная интеграция
- Умеренный темп
- Открытое рабочее пространство
- Игра в планирование
- Простота
- Рефакторинг
S
Принцип единственной обязанности/ответственности (single responsibility principle) обозначает, что каждый объект должен иметь одну обязанность и эта обязанность должна быть полностью инкапсулирована в класс. Все его сервисы должны быть направлены исключительно на обеспечение этой обязанности.
O
Принцип открытости / закрытости декларирует, что программные сущности (классы, модули, функции и т. п.) должны быть открыты для расширения, но закрыты для изменения. Это означает, что эти сущности могут менять свое поведение без изменения их исходного кода.
L
Принцип подстановки Барбары Лисков (Liskov substitution) в формулировке Роберта Мартина: «функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа не зная об этом». (Метод Summ(int x, int y) должен возвращать x+y в любом подклассе. Ещё пример: квадрат и прямоугольник).
I
Принцип разделения интерфейса (interface segregation) в формулировке Роберта Мартина: «клиенты не должны зависеть от методов, которые они не используют». (Много специализированных интерфейсов лучше, чем один универсальный). Принцип разделения интерфейсов говорит о том, что слишком «толстые» интерфейсы необходимо разделять на более маленькие и специфические, чтобы клиенты маленьких интерфейсов знали только о методах, которые необходимы им в работе. В итоге, при изменении метода интерфейса не должны меняться клиенты, которые этот метод не используют. (discount - скидка)
D
Принцип инверсии зависимостей (dependency inversion) — модули верхних уровней не должны зависеть от модулей нижних уровней, а оба типа модулей должны зависеть от абстракций; сами абстракции не должны зависеть от деталей, а вот детали должны зависеть от абстракций.
Паттерны
Команда и Активный объект
Шаблонный метод и Стратегия
Одиночка и моностстояние
Фабрика
Компановщик
Наблюдатель
Абстрактный сервер, адаптер и мост
Заместитель и Шлюз
Посетитель
Состояние Конечные автоматы
- Хотя мне доводилось раньше писать на C#, лучше всего я владел языками Java и C++. (26)
- И буду откровенен: мой опыт показывает, что программисты .NET зачастую слабее тех, что пишут на Java или C++. (27)
- Программисты .NET обычно хуже разбираются в методах разработки ПО, паттернах и принципах проектирования и т. п. (27)
- Я надеюсь, что это издание, ориентированное на .NET, перекинет мост между разработчиками .NET и остальным сообществом.(27)
- Я надеюсь, что программисты .NET завоюют новый статус в сообществе разработчиков.(27)
- Работая над этой книгой, я не раз сомневался, ставить ли свое имя на обложке книги, посвященной .NET. Я спрашивал себя, хочу ли я, чтобы меня ассоциировали с .NET и со всеми негативными представлениями, связанными с этой платформой. Но что толку отрицать? Я программист .NET. Нет! Я гибкий программист .NET. И горжусь этим. (27)
Первое издание этой книги, «Agile Software Development: Principles,
Patterns, and Practices», написанной моим отцом, Робертом К. Мартином,
вышло в 2002 году (27)
Перевод!
- "А теперь предположим, что заказчик выставил новое требование. Некоторые модемы, называемые выделенными, не поддерживают набор номера, а устанавливаются на обоих концах выделенного соединения. Несколько новых приложений уже используют такие модемы и никаких номеров не набирают. Будем называть их DedUsers." (Кого будем называть?)(544)
- Очень часто диаграммы отличаются от текста и кода.
- Где связь до Ded Users?(547)
- Сам автор пишет, что диаграммы старше текста. "Представленные в этой главе диаграммы построены на базе диаграмм. Буча в соответствующей главе издания этой книги 1995 года.1 Эти диаграммы созданы в 1994 году. По мере их создания я писал реализующий код, дабы убедиться, что диаграммы осмысленны. Однако по своему объему он даже не приближается к тому, что представлен здесь. По тому те диаграммы не были так же тщательно поверены(ОШИБКА!) кодом и тестами. И это заметно."
757 страниц
35 - обложка, издательство, оглавление/алфавитный указатель, пустые страницы.
7 - манифесты, предисловие и об авторах
10 - введение
11 - гибкая разработка (Принципы.)
10 - Обзор экстремального программирования
В обоих главах КРАТКО описываются принципы экстремального программирования и гибкой разработки.
7 - Планирование.
9 - Тестирование. Рассказ про TDD (Кент Бек лучше)
14 - Рефакторинг
47 - Игра в боулинг.
13 - Гибкое проектирование введение
60 - SOLID
118 - UML. Пропускать нельзя. Потом все объяснения будут построены на UML. Так же в этой главе затрагиваются и другие методики разработки (прецеденты, пользовательские истории и тд.)
139 (333-337) (388-454) (647 - 716)Расчёт заработной платы. Можно сказать самая полезная часть книги. Тут мы начинаем разработку программы для расчёта и начисления заработной платы. Ведётся реальная разработка(без ролей, пьес и заламывания рук). Так же иногда автор даёт самостоятельные задания по реализации тех или иных частей кода. Здесь объясняется и показывается зачем и почему используются принципы SOLID и паттерны проектирования. Так же показаны методики гибкой разработки (истории, прецеденты, Agile в целом). Тема разбита на две части. В первой мы разрабатываем бизнес логику, а во второй начинаем работать с базами данных, проектированием пакетов\решений и пр.
192 (338 - 387) (480 - 488) (511 - 646) - Паттерны
45 (455 - 479) (489 - 510) - Принципы проектирования и анализа пакетов и компонентов
16 (717 - 733) - Сказ о двух компаниях
13 (734 - 747) - Что такое проектирование программного обеспечения. Статья.
Итого:
309 страниц обязательно к прочтению
139 рекомендуем.
Игра в боулинг. Тут мы в первый раз встречаемся с UML диаграммами
- (93).БМ: Не поможешь мне написать программульку для подсчета очков
в боулинге?
БК: (размышляя про себя: этика парного программирования в XP
говорит, что нельзя отказывать, когда тебя просят о помощи.
Полагаю, что это особенно относится к случаю, когда просит
начальник) Конечно, Боб, с удовольствием. - (94).БМ: Да, этого парня не назовешь образцом стабильности.
БК: Или выпил малек. Зато какой отличный приемочный тест получится. - (94).БМ: (принимая позу великого объектного проектировщика) Ну так,
понятно, что игра состоит из десяти фреймов. В каждом объектефрейме
может быть один, два или три броска - (95).БК: Ну, раз у него нет поведения, то для чего он нужен? Пока не знаю,
должен он существовать или нет. Мне кажется, было бы полезнее
поработать над объектом, у которого есть что-то помимо методов
чтения и записи. Но если ты хочешь постучать… (пододвигает
клавиатуру к БМ).
БМ: Ладно, давай сместимся по цепочке зависимостей к Frame и посмотрим,
нет ли каких-нибудь тестов, которые позволили бы нам покончить
с Throw (двигает клавиатуру обратно к БК).
БК: (недоумевая, что задумал БМ: то ли хочет завести меня в тупик,
чтобы чему-то научить, то ли вправду согласен со мной)
Поехали, новый файл, новый тест. - (103).БМ: (строго грозит пальцем) Пока что я не знаю, где какие функции
обретаются, сейчас я хочу, чтобы счет заработал. - (106).БМ: (хватая клавиатуру) Так-то оно так, но мне кажется, что инкремента
ball в ветке frameScore==10 быть не должно - (117).БМ: (со счастливой улыбкой глядя на зеленую полосу) И это работает.
Больше ничего не приходит в голову. А тебе? - (118).БМ: Ага, и заодно это поможет реализовать твою идею о выделении отдельного
объекта-обсчитывателя. Ладно, давай попробуем.
БК: (завладевает клавиатурой)!!!!!!! - (124).БМ: (в глазах отражается зеленая полоса)...
БК: (тянется за клавиатурой). - (125).БК: (выпучив глаза) Проектирование сверху вниз?!!
- (126).БК: (тянет к себе клавиатуру и мелкими шагами вносит изменения,
прерывая их прогоном тестов)
Комментарии
Отправить комментарий