Principi open/closed

De Viquipèdia
Dreceres ràpides: navegació, cerca

En programació orientada a objectes, el principi open/closed diu que "les entitats de software (classes, mòduls, funcions, etc.) haurien de estar obertes a l'extensió, però tancades a la modificació";[1] això vol dir que el comportament d'aquesta entitat pot ser modificat sense alterar el seu codi font. Això és especialment valuós en un entorn de producció, on els canvis al codi font poden requerir revisions de codi, tests d'unitat, i altres procediments similars per a qualificar-lo per al seu ús en un producte: el codi que acompleix aquest principi no canvia quan és estès, i per tant no necessita aquest esforç.

El nom Open/Closed Principle s'ha fet servir de dues formes. Ambdués fan servir l'herència per a resoldre el dilema aparent, però les finalitats, tècniques, i resultats són diferents.

El principi Open/Closed de Meyer[modifica | modifica el codi]

Al Dr. Bretrand Meyer s'atribueix generalment la creació del terme Principi Open/Closed, que va aparèixer al seu llibre de 1988 Object Oriented Software Construction. La idea era que un cop acomplerta, la implementació d'una classe podia ser només modificada per a corregir errors; operacions noves o canviades requeririen que una classe diferent fos creada. Aquesta classe podria reutilitzar codi de la classe original mitjançant herència. La subclasse derivada podria o podria no tenir la mateixa interfície que la classe original.

La definició de Meyer defèn l'herència d'implementació. La implementació pot ser reutilitzada mitjançant herència però en les especificacions d'interfície això no cal. La implementació existent és tancada a modificacions, i no cal que noves implementacions tinguin la interfície existent.

Principi Open/Closed polimòfic[modifica | modifica el codi]

Durant els anys 90, el Principi Open/Closed va esdevenir popularment redefinit per a l'ús d'interfícies abstractes, on les implementacions podien ser modificades i múltiples implementacions podien ser creades i substituïdes polimòrficament per altres.

En contrast amb l'ús de Meyer, aquesta definició defèn l'herència d'una classe abstracta base. Les especificacions d'interfície poden ser reutilitzades mitjançant herència però en la implementació no cal. La interfície és tancada a modificacions i les noves implementacions han de, com a mínim, implementar aquella interfície.

L'article de Robert C. Martin de 1996 "El principi Open-Closed"[2] va ser un dels escrits fundacionals d'aquest enfocament. El 2001 Craig Larman escriuria que el Principi Open/Closed "és el que David Parnas realment volia dir amb ocultació d'informació".[3]

Referències[modifica | modifica el codi]