Skip to content

AlessandroFerrante/Software-Engineering

Repository files navigation

EN

Software Engineering

Software Engineering has the objective of providing a series of tools and knowledge for the development of large software that guarantee stability over time and general optimization of the code. It focuses on creating cost-effective and efficient solutions to practical problems, applying scientific knowledge to build software that benefits both customers and developers.

Design patterns

A Design Pattern is defined as a design solution for a recurring problem that concerns a number of software objects/classes that programmers have to deal with.

They can be defined as tested and successful solutions, essential to know.

Creational Desing Patterns

  • Singleton (and Multiton): This pattern ensures that a class has only one instance and provides an entry point global to it. Multiton is a variant that allows multiple instances, but controls the number of instances created.

  • Factory Method: Defines an interface to create an object, but lets subclasses decide which class to instantiate. Allows a class to delegate object creation to subclasses.

  • Abstract Factory: Provides an interface to create families of related or dependent objects without specifying their concrete classes.

  • Prototype: Used to create new objects by cloning an existing instance, rather than creating a new instance from scratch.

Structural Design Patterns

  • Adapter: Allows you to make classes with incompatible interfaces work together, converting the interface of a class into a other interface expected by clients.

  • Facade: Provides a unified and simplified interface to a set of interfaces of a subsystem.

  • Composite: Allows you to compose objects into tree-like structures to represent part-whole hierarchies, allowing clients to treat single objects and compositions of objects uniformly.

  • Decorator: Allows you to add responsibilities to an object dynamically, providing a flexible alternative to subclassing to extend functionality .

  • Bridge: Decouples an abstraction from its implementation so that the two can vary independently.

Desing Behavioral Patterns

  • State: Allows an object to modify its behavior when its internal state changes, appearing as if the object class had changed.

  • Observer: Defines a one-to-many dependency between objects, such that when an object changes state , all its employees are notified and updated automatically.

  • Mediator: Defines an object that encapsulates the interaction modes of a set of objects, promoting loose coupling keeping interactions centralized.

  • Chain Of Responsibility: Allows passing a request along a chain of handlers. Each handler decides whether to process the request or pass it to the next in the chain.

License

This material is released under the MIT License, ensuring flexibility in use and sharing.

Contact

Do you have questions or need further clarification? Contact me:

Good work and happy learning! 💻


IT

Ingegneria del Software

L'Ingegneria del Software ha l'obiettivo di fornire una serie di strumenti e conoscenze per lo sviluppo di software di grandi dimensioni che garantiscono stabilità nel tempo e un'ottimizzazione generale del codice. Si occupa della creazione di soluzioni economiche ed efficienti per problemi pratici, applicando conoscenze scientifiche ai fini di costruire software con benefici sia per i clienti, sia per gli sviluppatori.

Design Pattern

Si definisce Design Pattern una soluzione di progettazione per un problema ricorrente che riguarda un certo numero di oggetti software / classi che i programmatori devono affrontare.

Si possono definire come soluzioni collaudate e di successo, fondamentali da conoscere.

Desing Pattern Creazionali

  • Singleton (and Multiton): Questo pattern assicura che una classe abbia una sola istanza e fornisce un punto di accesso globale a essa. Multiton è una variante che permette più istanze, ma controlla il numero di istanze create.

  • Factory Method: Definisce un'interfaccia per creare un oggetto, ma lascia che le sottoclassi decidano quale classe istanziare. Permette a una classe di delegare la creazione di oggetti a sottoclassi.

  • Abstract Factory: Fornisce un'interfaccia per creare famiglie di oggetti correlati o dipendenti senza specificare le loro classi concrete.

  • Prototype: Utilizzato per creare nuovi oggetti clonando un'istanza esistente, anziché creare una nuova istanza da zero.

Desing Pattern Strutturali

  • Adapter: Permette di far lavorare insieme classi con interfacce incompatibili, convertendo l'interfaccia di una classe in un'altra interfaccia attesa dai client.

  • Facade: Fornisce un'interfaccia unificata e semplificata a un insieme di interfacce di un sottosistema.

  • Composite: Permette di comporre oggetti in strutture a forma di albero per rappresentare gerarchie parte-tutto, permettendo ai client di trattare oggetti singoli e composizioni di oggetti in modo uniforme.

  • Decorator: Permette di aggiungere responsabilità a un oggetto dinamicamente, fornendo un'alternativa flessibile alla sottoclasse per estendere le funzionalità.

  • Bridge: Disaccoppia un'astrazione dalla sua implementazione in modo che le due possano variare indipendentemente.

Desing Pattern Comportamentali

  • State: Permette a un oggetto di modificare il proprio comportamento quando il suo stato interno cambia, apparendo come se la classe dell'oggetto fosse cambiata.

  • Observer: Definisce una dipendenza uno-a-molti tra oggetti, in modo tale che quando un oggetto cambia stato, tutti i suoi dipendenti vengono notificati e aggiornati automaticamente.

  • Mediator: Definisce un oggetto che incapsula le modalità di interazione di un insieme di oggetti, promuovendo un'accoppiamento libero mantenendo le interazioni centralizzate.

  • Chain Of Responsibility: Permette di passare una richiesta lungo una catena di gestori. Ogni gestore decide se processare la richiesta o passarla al successivo nella catena.

Licenza

Questo materiale è rilasciato sotto la Licenza MIT, garantendo flessibilità nell'utilizzo e nella condivisione.

Contatto

Hai domande o hai bisogno di ulteriori chiarimenti? Contattami:


Good work and happy learning! 💻