Patrons de disseny en desenvolupament de Programari. Conceptes i evolució històrica.

Públic

Els patrons de disseny són una part essencial del desenvolupament de programari. Per entendre’ns i de forma molt simplificada són com plantilles que s’utilitzen per a resoldre problemes comuns en l’àmbit del desenvolupament i disseny de programari. Estaríem parlant d’escenaris on es presenten diferents situacions on es pot aplicar una mateixa solució. D’aquesta manera els patrons de disseny no només ajuden a estalviar temps, sinó que també fan que el codi sigui més fàcil de comprendre i de mantenir.

Els primers patrons de disseny van aparèixer en els anys 70 i 80, quan els llenguatges de programació com C i Pascal eren populars. Aquests patrons eren relativament senzills i estaven dissenyats per a problemes específics. Per exemple, el patró de disseny “Singleton” es va crear aleshores per a situacions en què només es necessita una única instància d’una classe. D’aquesta manera quan es fa la crida al constructor de la classe utilitzant aquest patró, es comprova si ja existeix una instància de la mateixa, en cas que no sigui així aleshores es crea una nova instància i acte seguit es retorna la referència, i si per contra ja existeix una instància en aquest cas simplement es passa la referència sense crear una nova instància.

Amb l’aparició de llenguatges de programació orientats a objectes com Java i C++ més cap als anys 90, els patrons de disseny es van tornar cada cop més complexos. Va ser en aquest moment quan aparèixer patrons com “Factory“, “Decorator” i “Observer“, que permeten als desenvolupadors crear codi més modular i reutilizable.

A mesura que el desenvolupament de programari es va tornar més i més complex, també ho van fer els patrons de disseny. Avui en dia, tenim patrons de disseny per a gairebé tot, des de la gestió de bases de dades o fitxers i configuracions, fins a la creació d’interfícies d’usuari.

Val a dir que un dels canvis més significatius en l’evolució dels patrons de disseny ha estat l’aparició dels entorns anomenats frameworks. Un framework és una col·lecció de codi preexistent que proporciona una estructura bàsica per a una aplicació. Els desenvolupadors poden utilitzar aquesta estructura o esquelet com a punt de partida, afegint el seu propi codi per a crear una aplicació única, però amb una base prefabricada. D’aquesta manera s’estalvia temps i es guanya en robustesa.

Els frameworks han revolucionat el desenvolupament de programari en els darrers temps. Han permès als desenvolupadors crear aplicacions de forma més ràpida i amb molt menys esforç, ja que no han de començar des de zero. A més, molts frameworks inclouen els seus propis patrons de disseny, que els desenvolupadors poden utilitzar per a resoldre problemes comuns més fàcilment dins del propi framework.

Alguns dels frameworks més coneguts avui en dia són Angular, React i Vue per a desenvolupament web, Spring per a desenvolupament en Java, i Django o Flask per a desenvolupament en Python. Aquests frameworks han estat clau en l’evolució dels patrons de disseny, ja que han introduït nous patrons per una banda i han simplificat alhora l’ús de patrons ja existents.

Però l’evolució dels patrons de disseny no s’acaba aquí. Amb l’aparició de noves tecnologies com la intel·ligència artificial (IA) i el blockchain, estem veient l’aparició de nous patrons de disseny. Per exemple, en el camp de la IA, tenim patrons de disseny que ja existien anteriorment però que s’apliquen ara a nous camps com pot ser el “Model-View-Controller” per a la creació de xarxes neuronals, o el “Chain of Responsibility” per a la gestió de tasques en sistemes de blockchain.

A més, amb l’evolució dels llenguatges de programació i les seves llibreries, també estem veient com els patrons de disseny es tornen més flexibles i adaptatius. Per exemple, amb l’aparició de llenguatges de programació funcionals com Haskell i Scala, estem veient l’aparició de patrons de disseny funcionals, que permeten als desenvolupadors crear codi més concís i fàcil de raonar.

L’evolució dels patrons de disseny en el desenvolupament de programari és una història de constant innovació i adaptació. A mesura que apareixen noves tecnologies i llenguatges de programació, de ben segur que veurem l’aparició de nous patrons de disseny que ajudaran a crear aplicacions més potents i més eficients.

Jo sempre he entès els Patrons de Disseny com un metallenguatge per sobre dels propis llenguatges de programació.

Us deixo a continuació un resum i breu descripció dels principals Patrons de disseny alguns dels quals he anat anomenant en l’article:

  1. Singleton: Aquest patró de disseny s’utilitza quan només es vol permetre una única instància d’una classe. Aquesta única instància es pot accedir des de qualsevol altre punt del codi, evitant així la creació de múltiples instàncies de la mateixa classe.
  2. Factory: Aquest patró de disseny s’utilitza per a crear objectes sense especificar la classe exacta a la que pertanyen. En lloc d’això, es fa servir una “fàbrica” que crea l’objecte desitjat basant-se en els paràmetres que rep.
  3. Decorator: Aquest patró de disseny permet afegir funcionalitat addicional a un objecte de manera dinàmica, sense haver de modificar la seva estructura original. Això es fa “decorant” l’objecte amb una nova funcionalitat.
  4. Observer: Aquest patró de disseny s’utilitza per a crear un sistema de subscripció on un objecte (l’observador) rep actualitzacions automàtiques quan un altre objecte (el subjecte) canvia d’estat.
  5. Model-View-Controller (MVC): Aquest és un patró de disseny comú en el desenvolupament d’aplicacions web. Separa l’aplicació en tres components principals: el model (que gestiona les dades i la lògica de negoci), la vista (que mostra les dades a l’usuari) i el controlador (que gestiona la interacció entre el model i la vista).
  6. Chain of Responsibility: Aquest patró de disseny crea una cadena d’objectes que poden processar una petició. La petició es passa a través de la cadena fins que un objecte la processa. Aquest patró és útil en situacions on més d’un objecte pot processar una petició, però només un ho ha de fer.
  7. Patrons de disseny funcionals: Aquests patrons de disseny es basen en el paradigma de programació funcional, que es centra en l’ús de funcions pures (funcions que donen el mateix resultat per a les mateixes entrades i no tenen efectes secundaris). Alguns exemples de patrons de disseny funcionals inclouen “Functor”, “Monàdica” i “Applicative”.

 

Referències:

Kővesdán, G., Asztalos, M., & Lengyel, L. (2014). Architectural Design Patterns for Language Parsers. Acta Polytechnica Hungarica, 11(5), 51-70. Aquest article tracta sobre l’ús de patrons de disseny en el desenvolupament de parsers de llenguatges de programació.

Shen, X., & Wang, L. (2020). Topic Evolution and Emerging Topic Analysis Based on Open Source Software. Journal of Data and Information Science, 5(3), 59-75. Aquesta investigació presenta un mètode d’anàlisi de text per a la detecció de temes emergents i la previsió de tendències de recerca en el camp del programari de codi obert.

Nikulchev, E., Ilin, D., & Gusev, A. (2021). Technology Stack Selection Model for Software Design of Digital Platforms. Mathematics, 9(4), 308. Aquest article presenta un model matemàtic per a l’avaluació de la integració de solucions tecnològiques en plataformes digitals, incloent la selecció de llenguatges de programació, sistemes de gestió de bases de dades, sistemes operatius i frameworks.

Shokri, A., Santos, J. C., & Mirakhorli, M. (2021). ArCode: Facilitating the Use of Application Frameworks to Implement Tactics and Patterns. 2021 IEEE International Conference on Software Architecture (ICSA), 1-12. Aquesta investigació presenta ARCODE, una eina que facilita l’ús de frameworks per a implementar tàctiques i patrons de disseny de programari.

Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. Aquest llibre és una referència clàssica en el camp dels patrons de disseny de programari, introduint conceptes clau i proporcionant una àmplia varietat de patrons de disseny.

Fowler, M. (2002). Patterns of Enterprise Application Architecture. Addison-Wesley. Aquest llibre proporciona una col·lecció de patrons de disseny per a l’arquitectura d’aplicacions empresarials.

Freeman, E., Robson, E., Bates, B., & Sierra, K. (2004). Head First Design Patterns. O’Reilly Media. Aquest llibre és una guia introductòria als patrons de disseny, amb un enfocament pràctic i orientat a l’aprenentatge.

Beck, K., & Cunningham, W. (1987). Using Pattern Languages for Object-Oriented Programs. OOPSLA ’87 Workshop on Specification and Design for Object-Oriented Programming. Aquesta és una de les primeres publicacions que introduïx l’ús de llenguatges de patrons per a la programació orientada a objectes.

Johnson, R., & Foote, B. (1988). Designing Reusable Classes. Journal of Object-Oriented Programming, 1(2), 22-35. Aquest article és una de les primeres discussions sobre com dissenyar classes reutilitzables en la programació orientada a objectes, un concepte clau en molts patrons de disseny.

Buschmann, F., Meunier, R., Rohnert, H., Sommerlad, P., & Stal, M. (1996). Pattern-Oriented Software Architecture, Volume 1: A System of Patterns. Wiley. Aquest llibre és una guia completa dels patrons de disseny de programari, incloent una descripció detallada de cada patró i exemples de com es poden utilitzar en la pràctica.

 

Principals Frameworks utilitzats actualment en el desenvolupament d’aplicacions web:

  1. Angular
  2. React
  3. Vue.js

Imatge destacada de l’article: Font pxhere. CC0 Public Domain. FREE for personal & commercial use. https://pxhere.com/es/photo/912601

Leave a Comment

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *