Study Bytes

Software Engineering 🃏

L’Ingegneria del Software (nota anche come Software Engineering in inglese, o affettuosamente abbreviata in SwEng per i più creativi) è una disciplina che riguarda la progettazione, lo sviluppo, la manutenzione e la gestione di software di qualità. Questa disciplina mira a fornire principi, metodologie e strumenti per creare software affidabile, efficiente e manutenibile.

Appunti

Contenuto degli appunti

Gli appunti caricati coprono vari aspetti di questa materia, partendo dalle basi della programmazione orientata agli oggetti fino ai principi avanzati di design del software.

Cosa troverete in questi appunti?

Introduzione

  • Definizione del processo di progettazione del software.
  • Concetti di astrazione e orientamento agli oggetti.
  • Qualità del software e decision making nel design.

Encapsulation and Information Hiding

  • Costruzione di astrazioni di dati e computazione.
  • Proprietà dell’incapsulamento: coesione interna e disaccoppiamento esterno.
  • Esempi pratici di incapsulamento e hiding delle informazioni.

Design by Contract

  • Metodo per progettare software robusto e semplice.
  • Concetto di contratti tra entità software.
  • Utilizzo di precondizioni, postcondizioni e invarianti di classe.

Types and Interfaces

  • Definizione e utilizzo delle interfacce di classe.
  • Principi SOLID e loro applicazione nel design del software.
  • Inversione delle dipendenze e segregazione delle interfacce.

Design Patterns

  • Introduzione ai design patterns e loro importanza.
  • Esempi di patterns: Strategy, Chain Responsibility, Singleton, Flyweight.
  • Applicazione pratica dei patterns per risolvere problemi di design comuni.

I design pattern in Java si possono suddividere in tre categorie principali:

  • Creational (Creazionali): riguardano la creazione degli oggetti (es. Singleton, Factory).
  • Structural (Strutturali): si occupano della composizione delle classi e degli oggetti (es. Adapter, Composite).
  • Behavioural (Comportamentali): descrivono come gli oggetti interagiscono e comunicano (es. Observer, Strategy).

Unit Testing

  • Importanza dei test unitari nel ciclo di sviluppo software.
  • Tecniche e strumenti per implementare test unitari.
  • Principi per scrivere test efficaci e manutenibili.

Associazione, Aggregazione e Composizione

  • Differenze tra associazione, aggregazione e composizione.
  • Esempi pratici di utilizzo in UML e nel codice. 

Principi SOLID

  • Spiegazione dettagliata dei principi SOLID.
  • Esempi pratici per ciascun principio: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion.
  • MV Patterns
  • Differenti pattern architetturali come MVC, MVP e MVVM.
  • Applicazione e differenze tra questi pattern.

Conclusione

Questi appunti di Ingegneria del Software forniscono una panoramica completa dei concetti fondamentali e avanzati necessari per progettare software di alta qualità. Attraverso esempi pratici e spiegazioni dettagliate, coprono una vasta gamma di argomenti essenziali per qualsiasi ingegnere del software. La conoscenza dei principi SOLID, dei design patterns e delle tecniche di testing è cruciale per sviluppare applicazioni robuste e manutenibili. Questi appunti rappresentano una risorsa preziosa per chiunque voglia approfondire la propria comprensione della progettazione del software e migliorare le proprie competenze in questo campo.

Buono studio!