Diagrammi UML e OOP

UML (Unified Modeling Language) è uno standard internazionale per la modellazione di sistemi software complessi. Consente di rappresentare visivamente entità, relazioni e dinamiche all'interno di un progetto. Esistono diversi tipi di diagrammi UML. Di seguito uno schema raffigurante i principali tipi di diagrammi:




Modellazione Strutturale e Tipi di Diagrammi



Modellazione Strutturale: Mostra le entità principali del sistema e le loro relazioni statiche. Include elementi come classi, interfacce, componenti, e nodi.

Tipi di Diagrammi:
Vista Statica (Class Diagram): Rappresenta le classi del sistema, i loro attributi, metodi e relazioni statiche.
Vista Dinamica (Object Diagram): Fornisce uno snapshot di istanze di classi (oggetti) in un momento specifico, illustrando la loro struttura e interazioni.

Diagrammi di Implementazione:
Component Diagram: Mostra come le componenti software interagiscono.
Deployment Diagram: Illustra la distribuzione fisica delle componenti su hardware.

Concetti fondamentali

Oggetti:
Sono istanze di una classe.
Incapsulano dati e operazioni, rendendo i dati accessibili solo tramite metodi dedicati (incapsulamento).

Operazioni e Metodi:
Le funzioni usate nell'analisi vengono chiamate operazioni.
Durante la progettazione diventano metodi.

Incapsulamento:
Nasconde i dettagli interni dell'oggetto, esponendo solo un'interfaccia pubblica.

STRUTTURA DI UNA CLASSE



class Conto {
    - numero: int
    - correntista: String
    - saldo: double

    + create(): void
    + deposito(importo: double): void
    + prelievo(importo: double): void
}
                


Mostrata come un rettangolo suddiviso in tre sezioni:

Visibilità:

Relazioni

Relazioni tra classi e istanze:

Cliente ---- 1 ---- * ---- Ordine
Ordine ---- 1 ---- * ---- LineaOrdine

class Cliente {
    + nome: String
    + indirizzo: String
}

class Ordine {
    + numero: int
    + creaOrdine(): void
}

class LineaOrdine {
    + quantità: int
}
                

Descrive una connessione tra due o più classi.

Sottotipo:

Concetti avanzati

Polimorfismo e Classi Astratte:

    abstract class Figura {
        + area(): double
    }
    
    class Rettangolo extends Figura {
        + lunghezza: double
        + larghezza: double
    
        + area(): double {
            return lunghezza * larghezza;
        }
    }
    
    class Cerchio extends Figura {
        + raggio: double
    
        + area(): double {
            return Math.PI * Math.pow(raggio, 2);
        }
    }
    
    // Esempio di Polimorfismo
    Figura f1 = new Rettangolo(5, 10);
    Figura f2 = new Cerchio(7);
    
    console.log(f1.area()); // Output: 50
    console.log(f2.area()); // Output: 153.94
                


Il polimorfismo permette a oggetti di classi diverse di condividere lo stesso metodo (stessa segnatura) con implementazioni differenti.

Le classi astratte definiscono una struttura comune che deve essere implementata nelle sottoclassi.

Diagrammi Statici e Dinamici

Class Diagram:
Mostra classi e relazioni statiche tra esse.
Usato per descrivere l’architettura del sistema a livello alto.

Object Diagram:
Snapshot del sistema a runtime, mostra istanze di classi (oggetti) e i loro valori specifici.

Incapsulamento:
Nasconde i dettagli interni dell'oggetto, esponendo solo un'interfaccia pubblica.

Molteplicità

Definisce quante istanze di una classe possono essere associate a un’altra. Esempi:
0..1: Zero o una istanza.
*: Zero o più istanze.
1..*: Almeno una istanza.
1..3,7: Tra una e tre istanze, oppure esattamente sette.

La navigabilità indica se una classe può accedere direttamente agli oggetti associati di un’altra classe.

GLOSSARIO UML

  • Classe: Un'entità che rappresenta un concetto o un oggetto del dominio.
  • Oggetto: L'istanza di una classe.
  • Associazione: Una relazione tra due o più classi.
  • Molteplicità: Indica il numero di oggetti coinvolti in una relazione.

I BENEFICI DI UML

UML offre numerosi vantaggi per lo sviluppo software, tra cui:

  • • Visualizzazione chiara e precisa della struttura del sistema
  • • Facilitazione della comunicazione tra team di sviluppo
  • • Miglioramento della documentazione del progetto

CONCLUSIONI E RISORSE

Draw.io è uno strumento potente per chiunque desideri progettare software in modo chiaro ed efficiente.

Esplora draw.io