Книга: Программист-прагматик. Путь от подмастерья к мастеру
Жизнь в условиях ортогональности
Разделы на этой странице:
Жизнь в условиях ортогональности
Ортогональность тесно связана с принципом DRY («Не повторяй самого себя»). Используя этот принцип, можно свести к минимуму дублирование в пределах системы, а при помощи ортогональности уменьшить взаимозависимость между компонентами системы. Звучит неуклюже, но если вы используете принцип ортогональности в тесной связи с принципом DRY, вы обнаружите, что разрабатываемые вами системы становятся более гибкими, более понятными и более простыми в отладке, тестировании и сопровождении.
Когда вы присоединяетесь к проекту, в котором люди ведут отчаянную борьбу за внесение изменений, а каждое изменение приводит к появлению четырех новых проблем, вспомните кошмар с вертолетом. Вероятно, проект сконструирован и запрограммирован неортогонально. Пришло время реорганизации.
Другие разделы, относящиеся к данной теме:
• Пороки дублирования
• Средства управления исходным текстом
• Проектирование по контракту
• Несвязанность и закон Деметера
• Метапрограммирование
• Всего лишь представление
• Реорганизация
• Программа, которую легко тестировать
• Злые волшебники
• Команды прагматиков
• Все эти сочинения
Вопросы для обсуждения
• Рассмотрим различие между большими инструментальными средствами, ориентированными на графический интерфейс, которые обычно присутствуют в системах в среде Windows, и небольшими, но сочетаемыми между собой утилитами, работающими в режиме командной строки и присутствующими в командных оболочках. Какой набор является более ортогональным и почему? Какой из них легче использовать именно для той цели, для которой он предназначен? Какой из них легче скомбинировать с другими инструментальными средствами для решения вновь возникших проблемных вопросов?
• Язык С++ поддерживает множественное наследование, а язык Java позволяет классу реализовывать множественные интерфейсы. Как влияет на ортогональность использование этих средств? Есть ли различие в воздействии, которое оказывается в ходе использования множественного наследования и множественных интерфейсов? Есть ли разница в применении делегирования и наследования?
Упражнения
1. Создается класс Split, который расщепляет вводимые строки на поля. Какая из двух указанных ниже сигнатур класса Java имеет более ортогональную конструкцию? (Ответ см. в Приложении В.)
class Split 1 {
public Splitl(InputStreamReader rdr) {…
public void readNextLine() throws IOException {…
public int numFields() {…
public String getField(int fieldNo) {…
}
class Split2 {
public Split2(String line) {…
public int numFields() {…
public String getField(int fieldNo) {…
}
2. Какая конструкция обладает большей ортогональностью: немодальные или модальные диалоговые окна? (Ответ см. в Приложении В.)
3. Сравним процедурные языки и объектно-ориентированные технологии. Что дает более ортогональную систему? (Ответ см. в Приложении В.)
- 11.2. Технология принятия решения в условиях чрезвычайной ситуации
- Генри Форд. Моя жизнь, мои достижения
- Глава 11 Вся жизнь в несколько строчек
- Есть ли жизнь после краха доткомов?
- Вдохнём жизнь
- Хорошо прожитая жизнь
- 1.3. Информационная безопасность в условиях функционирования в России глобальных сетей
- Часть III Воплотить бренд в жизнь
- 2. Жизнь диктует свои законы, или Клеточные автоматы и машинная графика
- Роль личности, или Как привязать к себе клиентов на всю жизнь
- Глава 9 Колесо Сансары, или Жизнь и смерть доменов
- Перехват клиента. Борьба за продажи в условиях жесткой конкуренции