В мире все еще есть люди, которые не используют дженерики jave в «обычном кодировании». Я могу поверить в это с помощью шаблонов C ++, но дженерики? Их даже не сложно выучить / использовать. Серьезно, лучшими функциями Java и C ++ являются соответственно дженерики и шаблоны.
Лучший способ убедить людей в чем-то - это дать убедительный аргумент, не угрожать и быть правым.
Пока вы не делаете что-то вроде использования шаблонов в качестве языка программирования, параметрический полиморфизм (дженерики / шаблоны) почти наверняка хорош.
1. Избегает дублирования кода.
Это очевидно, но полиморфный код - это общий код. Вот почему это называется дженерики.
2. Поддерживает лучшую статическую проверку.
Без параметрического полиморфизма вы заканчиваете тем, что пишете такие вещи, как public Object clone()
или public boolean equals(object b)
которые не являются просто мерзостями, у них есть типы, которые не предоставляют информации о том, что они делают, и неизменно в конечном итоге выдают исключения повсеместно. Альтернативой параметрическому полиморфизму является повсеместное приведение
3. Код ООП с непараметрическим полиморфизмом в принципе не может правильно обрабатывать «двоичные методы».
Вы используете это часто.
4. Это лучшая практика
В Java использование обобщений считается наилучшей практикой (см. «Эффективная Java» Джоша Блоха). Крупные мыслители С ++, такие как Саттер и Александреску, также поощряют использование шаблонов для решения различных задач.
5. Это соответствует ОО-парадигме.
Люди часто не замечают этого, но комбинация подтипирования и обобщений делает систему НАМНОГО более мощной, выразительной и объектно-ориентированной, чем любая система с одним из них.
Рассмотрим миксины Скалы. Это хорошая функция, которая позволяет вам собрать ваши объекты из составных частей. Обобщения и шаблоны могут имитировать некоторые из этих преимуществ. Например, скажем, один из ваших объектов использует базу данных. Хороший дизайн позволил бы вам абстрагировать доступ к базе данных в отдельный класс. Если все сделано правильно, это не только позволяет вам издеваться над хранилищем данных (ключ к тестируемости), но также означает, что вы можете добавить альтернативные реализации, такие как эта новая база данных no-sql. Здесь, однако, у вас может быть проблема, независимо от того, какую реализацию вы используете, вы получите различные возможности вашего бизнес-объекта.
Дженерики на помощь!
public class Business<S extends Datastore>{
private S store; ...
}
Теперь вы можете начать статически дифференцировать ваши Business
объекты на основе способности использовать специфические особенности базы данных. Вам все еще нужны некоторые проверки и приведение во время выполнения, но вы можете начать создавать НАМНОГО лучший код.
и
6. Нормальный код не существует.
Во вселенной программирования есть только три вещи:
- библиотеки,
- конфигурации и
- плохой код
Если вы не думаете о своем коде, как о библиотеке, у вас серьезные проблемы, когда меняются требования к вашему проекту. Архитектура - это (возможно) искусство проектирования хороших API.
Я считаю это отношение ошеломляющим. После того, как вы привыкнете к программированию с параметризованными типами, если вы не используете их, то все становится больно И у Java и C ++ есть куча грубых мест, которые они помогают исправить.