Введение в объектно-ориентированный дизайн с Java
Шрифт:
И такой метод есть – это использование карточек CRC, где CRC обозначает класс, ответственность, сотрудничество.
Карты CRC помогают организовывать компоненты в классы, определять их обязанности и определять, как они будут сотрудничать друг с другом.
Рассмотрим, например, банкомат.
Вы вставляете свою банковскую карточку в банкомат, и банкомат просит вас ввести PIN-код, удостоверяющий личность для доступа.
После этого вы можете выбрать положить или снять деньги, или проверить
Этот сценарий определяет основные требования к системе.
Это неполный набор требований, но это хороший старт.
Помните, что требования часто являются неполными и дополняются при дальнейшем взаимодействии с вашим клиентом и конечными пользователями.
Следующим шагом будет разработка банкомата.
Но так как мы формируем концептуальный дизайн, ограничиваясь только идентификацией компонентов, их обязанностей и связей, мы можем представить компоненты с помощью нашей новой техники – карт CRC.
И карты CRC используются для записи, упорядочивания и улучшения компонентов в дизайне.
Карта CRC состоит из трех разделов.
В верхней части карты есть имя класса.
Слева – обязанности класса, а справа – список коллабораторов.
Коллабораторы – это другие классы, с которыми класс взаимодействует, чтобы выполнять свои обязанности.
Чтобы отслеживать каждый компонент и его обязанности с помощью CRC-карты, вы помещаете имя компонента в раздел имени класса и обязанности в разделе обязанностей.
До сих пор это довольно просто.
Но как насчет связей?
В разделе «Коллабораторы» вы перечисляете другие компоненты, к которым ваш текущий компонент подключается или взаимодействует, чтобы выполнять свои обязанности.
И карты CRC сами по себе небольшие, поэтому вы не можете много писать в них.
Это заставляет вас продолжать разбивать каждый компонент на более мелкие компоненты и, в конечном итоге, классы, которые достаточно малы для индивидуального описания.
Теперь, когда мы узнали о CRC-картах, давайте использовать их для разработки нашей банковской системы.
Начнем с базового пользовательского компонента.
В этом примере нашим основным пользователем будет клиент банка.
Мы размещаем клиентов банка в разделе имени класса.
Обязанности банковского клиента включают ввод банковской карточки или выбор операции, такой как депозит, снятие или проверка остатка на счете.
Перечислим их в разделе ответственности CRC-карты.
И мы поместим банкомат в разделе Коллабораторы.
Тоже самое мы можем сделать для банкомата.
И с нашими картами CRC мы можем объединить вместе компоненты для совместной работы.
Например, положите карту клиента CRC слева и карточку CRC банкомата справа.
Когда карты CRC организованы, вы можете имитировать
Теперь, вы можете заметь, что сам банкомат содержит несколько разных компонентов, которые могут быть отдельными классами для программирования.
Например, есть кард-ридер, клавиатура, дисплей и так далее.
Каждый из этих классов, их обязанности и коллабораторы могут быть описаны на их собственных картах.
При встрече с командой разработчиков программного обеспечения вы можете разложить все карты на столе и обсуждать моделирование того, как эти классы работают с другими классами для выполнения своих обязанностей.
И эти симуляции могут выявлять недостатки в дизайне, и вы можете экспериментировать с альтернативами, вводя соответствующие карты.
Вопросы
Вопрос 1
Что из следующего является желательными характеристиками дизайна программного обеспечения?
Тесная связь
Ремонтопригодность +
Повторное использование +
Гибкость +
Вопрос 2
Определите два результата процесса проектирования.
Концептуальный дизайн +
Реализация кода
Технический дизайн +
План проектирования
Вопрос 3
Вы пишете CRC-карту для компонента банкомата. В каком разделе вы должны поместить «Отслеживание оставшихся денежных средств».
Риски
Класс
Коллабораторы
Обязанности +
Вопрос 4
Что из этого, вероятно, будет частью концептуального дизайна?
Карты CRC +
Абстрактные типы данных
Методы
Макеты +
Вопрос 5
Когда в процессе проектирования вы, скорее всего, будете создавать карты CRC?
Встречи с клиентами
Концептуальный дизайн +
После выпуска программного обеспечения
Технический дизайн
Вопрос 6
Что из следующего является примером нефункциональных требований?
Производительность +
Доступность +
Предназначение
Безопасность +
Вопрос 7
Выберите категории объектов, которые обычно присутствуют в объектно-ориентированном программном обеспечении.
Entity +
Boundary +
tool
Сontrol +
Вопрос 8
Объект, который отвечает за отображение данных пользователю, может быть рассмотрен в какой категории объекта?
representation
boundary +
entity
control