UML_Class_Diagram

UML (Unified Modeling Language) Class Diagram

  • Introduzione: Utilizzo dei diagrammi delle classi per rappresentare visivamente le strutture e relazioni tra le classi all'interno di un sistema software.

Classi

  • Definizione: Una classe in UML è composta da:

    • Nome

    • Attributi (stato)

    • Metodi (comportamento)

  • Esempio: La classe Professore può avere attributi come nome, cognome, età, e metodi come create() e delete().

Associazioni e Relazioni

  • Associazione: Rappresenta una relazione bidirezionale tra due classi.

  • Molteplicità: Indica il numero di istanze di classi che possono partecipare all'associazione, come ad esempio 0..* indica che ci possono essere zero o più istanze.

Aggregazione e Composizione

  • Aggregazione: Una forma di associazione che indica una relazione "parte-tutto". Le parti possono esistere indipendentemente dal tutto.

  • Composizione: Un'aggregazione forte in cui le parti non possono esistere senza l'oggetto contenitore.

Ereditarietà (Generalizzazione)

  • Concetto: Definisce relazioni tra classi dove una classe può ereditare attributi e metodi da un'altra.

    • Esempio: La classe Studente e Professore possono ereditare dalla classe Persona.

Vincoli

  • Definizione di vincoli: Restrizioni e condizioni applicate alle classi e associazioni. Es: Stipendio < Capo.Stipendio indica un vincolo sulla gerarchia salariale.

Interfacce

  • Definizione: Un insieme di operazioni pubbliche che devono essere implementate da classi concrete.

    • Tipi di interfacce:

      • Fornita: Espone operazioni.

      • Richiesta: Necessita operazioni per funzionare correttamente.

Classi Astratte

  • Definizione: Classi che non possono essere istanziate direttamente e possono avere sottoclassi concrete.

Associazioni e Attributi Derivati

  • Attributi Derivati: Calcolati e non memorizzati, spesso utilizzati quando i valori variano frequentemente.

    • Esempio: Età derivata dalla data di nascita.

Ereditarietà Multipla

  • Problemi: Possibilità di ereditare attributi o metodi più volte, portando a conflitti e ridondanze.

    • Soluzioni: Usare classificazioni nidificate, eredità multipla controllata o delega.

Delegazione

  • Uso: Permette a una classe di delegare funzioni a un'altra classe, evitando problematiche di ereditarietà multipla e mantenendo la struttura del codice più gestibile.