La versione abbreviata (originale)
In che modo gli oggetti funzione, a volte chiamati "funtori" in C ++ e in altri linguaggi OO, hanno senso diverso dalle classi sintomatiche dell'anti-pattern del poltergeist?
Definizioni
- Un oggetto funzione è un costrutto che consente a un oggetto di essere invocato o chiamato come se fosse una funzione ordinaria ( definizione completa , seguono altri riferimenti).
- Un poltergeist è un oggetto di breve durata, tipicamente stateless, che viene utilizzato esclusivamente per attivare o inizializzare diversi altri oggetti e quindi scartato. È considerata una conseguenza della progettazione di oggetti scadenti ( definizione completa , altri riferimenti seguono).
Perché chiedo?
In molti punti dell'ampia base di codice su cui sto lavorando, una struttura di dati complessa viene attraversata in diversi modi e su ogni elemento viene applicato. Per non violare il principio DRY riscrivendo il codice di attraversamento complesso e le sue varianti, ho invece diverse funzioni di attraversamento di ordine superiore che accettano gli oggetti funzione che agiscono sugli elementi come argomenti. Probabilmente, il pattern iteratore (C ++) è giustificato qui, ma mancava e la sua implementazione è costosa, quindi l'ho rimandata.
Avevo la preoccupazione che questi oggetti a funzioni multiple avrebbero offuscato il mio codice e reso meno mantenibile, ma invece di chiedere "questo rende il mio codice più oscuro", che sembra una domanda basata sull'opinione, quindi ho fatto allusione a più -o meno cose conosciute con definizioni concrete. Non capivo perché gli oggetti funzione non possono essere tutti classificati come poltergeist / design difettoso prima che la risposta fosse gentilmente fornita da Karl Bielefeldt.
Riferimenti aggiuntivi
Poltergeists:
- Brown, William J. (1998). "Capitolo 5: Software Development AntiPatterns". AntiPattern: software di refactoring, architetture e progetti in crisi. New York, Stati Uniti: John Wiley & Figli maschi. Disponibile qui . Crisi. New York, Stati Uniti: John Wiley & Sons.
- Un esempio di poltergeist in Php di Serega Zhuk
- 9 anti-pattern di cui ogni programmatore dovrebbe essere a conoscenza , di Sahand Saba
In origine, questa domanda includeva anche questo articolo qui , che probabilmente significa che è anche nel libro Design Patterns Explained Simply , ma le persone [disclaimer] hanno contestato questo articolo nei commenti per ragioni apparentemente estranee al concetto attuale .
Funzioni oggetto:
Chiarimenti o di non rispondere a questa domanda
-
Questa domanda non riguarda né quanto sia noto il termine "anti-pattern del poltergeist", né se scoraggia o incoraggia le pratiche di codifica buone o cattive. Si prega di fare riferimento al articolo di Wikipedia sulle possibili confusioni su questo concetto.
-
Questa domanda non riguarda ciò che è e ciò che non è un funtore. Il termine "functor" significa cose diverse nel contesto della programmazione funzionale e del contesto dei linguaggi orientati agli oggetti. Questa domanda si riferisce agli oggetti funzione, ovvero la seconda definizione.