UML associazione e di dipendenza

Qual è la differenza tra associazione e di dipendenza? Puoi dare esempi di codice?
Qual è il rapporto tra la classe A e B?

class A
{
    B *b;

    void f ()
    {
        b = new B ();
        b->f();
        delete b;
    }
}

OriginaleL’autore rafal | 2011-10-10

5 Replies
  1. 11

    La risposta breve è: come qualsiasi fonte specifica costrutto del linguaggio dovrebbe essere rappresentato in UML non è strettamente definito. Questo fa parte di un standardizzate profilo UML per la lingua in questione, ma questi sono purtroppo pochi e lontani tra loro. Risposta lunga segue.

    Nel tuo esempio, ho paura che avrei dovuto dire “nessuno”, solo per essere difficile. A è un membro di una variabile di tipo B, in modo che il rapporto è in realtà un processo di aggregazione o di una composizione… O diretto associazione. In UML, una diretta associazione con un nome ruolo di destinazione è semanticamente equivalente a un attributo con il nome corrispondente.

    UML associazione e di dipendenza

    Come una regola di pollice, è un momento di aggregazione se b viene inizializzato in A‘s costruttore; si tratta di una composizione anche se viene distrutto in B‘s distruttore (condivisa del ciclo di vita). Se non si applica, è un attributo /directed associazione.

    Se b non era una variabile membro in A, e la variabile locale b non era operatoed (metodi sono stati chiamati su di esso), quindi vorrei rappresentare che come dipendenza: A esigenze B, ma non hanno un attributo di quel tipo.

    Ma f() in realtà si chiama un metodo definito in B. Questo per me rende il rapporto corretto un <<use>>, che è più una forma specializzata di dipendenza.

    Infine, un (non diretta) l’associazione è la forma più debole di collegamento tra due classi, e proprio per questo motivo tendo a non usarli quando si descrivono i costrutti di origine. Quando lo faccio, io di solito li uso quando non c’è alcuna fonte diretta codice di rapporti, ma le due classi sono ancora in qualche modo legati. Un esempio di questo potrebbe essere una situazione in cui i due sono responsabili per le varie parti di una stessa grande algoritmo, ma una terza classe li usa entrambi.

    OriginaleL’autore Uffe

  2. 4

    Può essere utile per vedere questa domanda ho chiesto: non un’associazione implica una dipendenza in UML

    La mia comprensione è:

    Associazione

    public class SchoolClass{
        /** This field, of type Bar, represents an association, a conceptual link
         *  between SchoolClass and Student. (Yes, this should probably be
         *  a List<Student>, but the array notation is clearer for the explanation)
         */
        private Student[] students;
    }
    

    Dipendenza

    public class SchoolClass{
    
        private Timetable classTimetable;
    
        public void generateTimetable(){
            /* 
             * Here, SchoolClass depends on TimetableGenerator to function, 
             * but this doesn't represent a conceptual relationship. It's more of
             * a logical implementation detail.
             */
            TimetableGenerator timetableGen = new TimetableGenerator();
    
            /*
             * Timetable, however, is an association, as it is a conceptual 
             * relationship that describes some aspect of the data that the 
             * class holds (Remember OOP101? Objects consist of data and operations
             * upon that data, associations are UMLs way or representing that data)
             */
            classTimetable = timetableGen.generateTimetable();
        }
    
    }
    

    OriginaleL’autore chrisbunney

  3. 1

    Se volete vedere la differenza al “livello di codice”, un’associazione tra A e B, l’attuazione di Una (o B o entrambi, a seconda delle cardinalità, la navigabilità,…) in un OO lang dovrebbe includere un attributo di tipo B.

    Invece, una dipendenza, Una sarebbe probabilmente un metodo in cui uno dei parametri è di tipo b, A e B non sono collegati, ma cambiando B comprometterebbe la seconda classe di Un dato che forse il modo in cui il metodo manipola l’oggetto B non è più valido (ad esempio B ha modificato la firma di un metodo e questo induce un errore di compilazione in classe A)

    OriginaleL’autore Jordi Cabot

  4. 1

    Ottenere da Wiki: la Dipendenza è una forma più leggera di rapporto che indica che una classe dipende da un altro, perché la usa a un certo punto del tempo. Una classe dipende da un altro, se quest’ultimo è un parametro variabile o variabile locale di un metodo di ex. Questo è diverso da un’associazione, in cui un attributo del primo è un’istanza di quest’ultimo.

    Quindi penso che è il caso qui di associazione, se B è un parametro variabile o variabile locale di un metodo di Una, quindi sono dipendenza.

    OriginaleL’autore Will Yu

  5. 0

    Una dipendenza è davvero molto vagamente definito. Così non ci sarebbe alcun codice di rappresentazione.

    Wiki: una dipendenza è Una semantica rapporto in cui una modifica al influenti o modellazione indipendente elemento può influenzare la semantica del dipendente modellazione elemento.[1]

    Da OMG Spec: Una dipendenza è un rapporto che significa che un singolo o un insieme di elementi del modello richiede altri elementi del modello per la loro specifica o di attuazione. Questo significa che la semantica di base elementi è semanticamente o strutturalmente dipende dalla definizione di fornitore elemento(s).

    OriginaleL’autore Ted Johnson

Lascia un commento