У світі все ще є люди, які не використовують джевері дженерики в "звичайному кодуванні". Я можу повірити у шаблони C ++, але генеричні? Їм навіть не важко вчитися / використовувати. Серйозно найкращі функції Java та C ++ - це відповідно дженерики та шаблони.
Найкращий спосіб переконати людей у речах - це зробити переконливий аргумент, бути не загрозливим і бути правим.
Поки ви не робите щось подібне до використання шаблонів як мови програмування, параметричний поліморфізм (генеричні / шаблони) майже напевно хороший.
1. Уникає дублювання коду.
Це очевидно, але поліморфний код - це загальний код. Саме тому його називають дженериком.
2. Підтримує кращу статичну перевірку.
Без параметричного поліморфізму ви в кінцевому підсумку писати такі речі , як public Object clone()
або public boolean equals(object b)
що є не тільки гидоти, у них є типи , які не пропонують жодної інформації про те, що вони роблять, і в кінцевому підсумку неминуче кидає виключення всюди. Альтернативою параметричному поліморфізму є ролі в усьому місці
3. Непараметричний поліморфізм OOP-код в основному не в змозі правильно обробити "бінарні методи".
Ти їх використовуєш часто.
4. Це найкраща практика
У Java використання найкращих практик вважається використанням дженериків (див. Ефективна Java Джоша Блоха). Основні мислителі С ++, такі як Саттер та Олександреску, також заохочують використання шаблонів для вирішення різноманітних проблем.
5. Він відповідає парадигмі ОО.
Люди часто цього не помічають, але поєднання підтипу та генерики створює систему НАШМО потужнішої експресивної та об'єктно-орієнтованої, ніж будь-яка система із лише однією з них.
Розгляньте міксини Scala. Це приємна функція, яка дозволяє збирати ваші предмети разом із складових частин. Загальна інформація та шаблони можуть імітувати деякі з цих переваг. Наприклад, скажімо, один з ваших об'єктів використовує базу даних. Хороший дизайн дозволить вам абстрагувати доступ до бази даних в окремий клас. Якщо зробити це правильно, це не тільки дозволяє знущатися зі сховища даних (ключ до перевірки), це також означає, що ви можете додавати альтернативні реалізації, як-от нову базу даних no-sql. Тут, можливо, у вас виникнуть проблеми, незалежно від того, яку реалізацію ви використовуєте, ви отримаєте різні можливості вашого бізнес-об'єкта.
Дженерики на допомогу!
public class Business<S extends Datastore>{
private S store; ...
}
Тепер ви можете почати статично диференціювати свої Business
об'єкти на основі вміння використовувати особливості бази даних. Вам все ще потрібні деякі перевірки часу виконання і кастинг, але ви можете почати створювати НАЙКЛІЧНИЙ код.
і
6. Звичайний код не існує.
У Всесвіті програмування є лише три речі:
- бібліотеки,
- конфігурації та
- неправильний код.
Якщо ви не думаєте про свій код, як би це бібліотека, у вас виникають серйозні проблеми, коли вимоги до вашого проекту змінюються. Архітектура - це, мабуть, мистецтво проектування хороших API.
Я вважаю таке ставлення приголомшливим. Після того, як ви звикли програмувати параметризовані типи, їх використання просто приносить біль. Крім того, у Java та C ++ є купа грубих плям, які вони допомагають виправити.