Я чув, як фразу кидають навколо, і мені аргументи звучать абсолютно божевільно (вибачте, якщо я тут нахабний, це не мій намір), як правило, це іде щось за принципом:
Ви не хочете створювати абстракцію, перш ніж дізнаєтесь, що таке загальний випадок, інакше (1) ви можете помістити речі у свої абстракції, які не належать, або (2) пропустити важливі речі.
(1) Мені це здається, що програміст недостатньо прагматичний, вони висловлювали припущення, що в кінцевій програмі все буде існувати, і тому вони працюють з низьким рівнем абстракції, проблема не в цьому. передчасна абстракція, це передчасна конкреція.
(2) Опускати важливі речі - це одне, цілком можливо, що щось пропущено із специфікації, яка згодом виявляється важливою, рішення цього - не придумати власну конкрецію та витрачати ресурси, коли дізнаєшся здогадалися неправильно, це отримати більше інформації від клієнта.
Ми завжди повинні працювати від абстракцій до конкрементів, оскільки це найбільш прагматичний спосіб робити, а не навпаки.
Якщо ми цього не робимо, то ми ризикуємо нерозуміти клієнтів і створювати речі, які потрібно змінити, але якщо ми будуємо лише абстракції, які клієнти визначили на їхній власній мові, ми ніколи не потрапляємо на цей ризик (принаймні, ніде поблизу, як імовірно, як прийняття постріл у темряві з певним конкрементом), так, можливо, клієнти передумають про деталі, але абстракції, якими вони спочатку повідомляли те, що хочуть, як і раніше залишаються в силі.
Наведемо приклад, скажімо, що клієнт бажає створити робот для упаковки предметів:
public abstract class BaggingRobot() {
private Collection<Item> items;
public abstract void bag(Item item);
}
Ми будуємо щось із абстракцій, якими користувався клієнт, не вдаючись до деталей з речами, які ми не знаємо. Це надзвичайно гнучко, я бачив, що це називається "передчасна абстракція", коли насправді було б передчасно вважати, як реалізовано виготовлення мішків, скажемо після обговорення з клієнтом, що вони хочуть отримати більше одного предмета відразу . Для того, щоб оновити свій клас, все, що мені потрібно, - це змінити підпис, але для того, хто почав знизу вгору, це може призвести до капітального ремонту системи.
Немає такого поняття, як передчасна абстракція, лише передчасна конкреція. Що не так у цьому твердженні? Де вади моїх міркувань? Дякую.