Резюме Exagg'itive (TM)
Ви отримуєте кілька речей.
- Прототипне успадкування та клонування
- Динамічне додавання нових властивостей
- Співіснування об’єктів різних версій (рівня специфікації) одного класу.
- Об'єкти, що належать до останніх версій (рівні специфікації), матимуть додаткові "необов'язкові" властивості.
- Огляд властивостей, старих і нових
- Вступ до правил перевірки (обговорюється нижче)
Є один фатальний недолік.
- Компілятор не перевіряє наявність неправильно написаних рядків для вас.
- Автоматичні інструменти рефакторингу не перейменують назви ключових властивостей для вас, якщо тільки ви не заплатите за вигадливі.
Річ у тому, що ви можете отримати самоаналіз, використовуючи, гм, самоаналіз. Ось що зазвичай буває:
- Увімкнути роздуми.
- Додайте у свій проект велику бібліотеку самоаналізу.
- Позначте різні методи та властивості об’єктів за допомогою атрибутів чи приміток.
- Нехай бібліотека самоаналізу робить магію.
Іншими словами, якщо вам ніколи не потрібно взаємодіяти з FP, вам не доведеться приймати поради Річ Хікі.
І останнє, але не найменше (ні найкрасивіше), хоча використання String
ключа властивості має найпростіший сенс, вам не доведеться використовувати String
s. Багато застарілих систем, включаючи Android ™, широко використовують цілі ідентифікатори через весь фреймворк для посилань на класи, властивості, ресурси тощо.
Android є торговою маркою Google Inc.
Ви також можете зробити обидва світи щасливими.
Для світу Java реалізуйте геттери та сетери як завжди.
Для світу FP реалізуйте
Object getPropertyByName(String name)
void setPropertyByName(String name, Object value) throws IllegalPropertyChangeException
List<String> getPropertyNames()
Class<?> getPropertyValueClass(String name)
Всередині цієї функції так, некрасивий код, але є плагіни IDE, які заповнять це для вас, використовуючи ... е, розумний плагін, який читає ваш код.
Ява сторона Java буде такою ж ефективною, як і зазвичай. Вони ніколи не використовуватимуть цю потворну частину коду. Можливо, ви навіть захочете сховати його від Javadoc.
FP сторони світу можуть писати який завгодно "нехай" код, який вони хочуть, і вони, як правило, не кричать на вас про те, що код повільний.
Взагалі використання карти (мішка властивостей) замість об'єкта є звичайною справою при розробці програмного забезпечення. Це не властиво функціональному програмуванню або будь-яким певним мовам. Це може бути не ідіоматичним підходом до будь-якої мови, але є ситуації, які вимагають цього.
Зокрема, серіалізація / десеріалізація часто вимагає подібної методики.
Просто деякі загальні думки щодо "карти як об'єкта".
- Ви все ще повинні надати функцію для перевірки такої "карти як об'єкта". Різниця полягає в тому, що "карта як об'єкт" дозволяє отримати більш гнучкі (менш обмежувальні) критерії перевірки.
- Ви можете легко додати поля додавання в "карту як об'єкт".
- Щоб забезпечити специфікацію мінімальної вимоги дійсного об'єкта, вам потрібно буде:
- Перелічіть набір мінімально необхідних клавіш, які очікуються на карті
- Для кожного ключа, значення якого потрібно перевірити, надайте функцію перевірки значення
- Якщо є правила перевірки, для яких потрібно перевірити кілька ключових значень, вкажіть це також.
- Яка користь? Надання специфікації таким способом є інтроспективним: ви можете написати програму для запиту мінімально необхідного набору клавіш та отримання функції перевірки для кожної клавіші.
- В OOP все це згортається в чорний ящик, на ім’я "інкапсуляція". Замість машиночитаної логіки перевірки абонент може лише зчитувати читану людиною "API документацію" (якщо, на щастя, вона існує).