Ho trascorso un po 'di tempo a "risintonizzare" alcune delle mie conoscenze OOP e mi sono imbattuto in un concetto che mi confonde.
Diciamo che ho due oggetti. Un oggetto user
e un oggetto account
. Ritorna alle basi qui, ma ogni oggetto ha stato, comportamento e identità (spesso definito come oggetto entità).
L'oggetto user
gestisce un comportamento puramente associato a un utente, ad esempio potremmo avere un metodo login(credentials)
che restituisce se l'accesso è avvenuto correttamente o genera un'eccezione se non.
L'oggetto account
gestisce un comportamento puramente associato a un account utente. Ad esempio potremmo avere un metodo checkActive () che controlla se l'account è attivo. L'oggetto account verifica se l'account ha una sottoscrizione aggiornata, controlla se ci sono dei flag di amministratore aggiunti che lo renderebbero inattivo. Restituisce se i controlli passano, o genera eccezione se non.
Ora qui sta il mio problema. Esiste chiaramente una relazione tra user
e account
, ma ritengo che ci siano effettivamente due TIPI di associazione da considerare. Uno che è guidato dai dati (esiste solo nei dati / stato degli oggetti e del database) e uno che è guidato dal comportamento (rappresenta una chiamata di oggetto ai metodi dell'oggetto associato).
Associazione basata sui dati
Nell'esempio che ho presentato, esiste chiaramente un'associazione dati tra user
e account
. In uno schema del database potremmo avere la seguente tabella:
-----------------
USER_ACCOUNTS
-----------------
id
user_id
----------------
Quando istanziamo account
e carichiamo i dati del database, ci sarà una variabile di classe contenente user_id
. In sostanza, l'oggetto account
contiene una rappresentazione intera di user
a user_id
Associazione guidata dal comportamento
Le associazioni basate sul comportamento sono in realtà le dipendenze di un oggetto. Se l'oggetto A chiama i metodi sull'oggetto B, esiste un'associazione che va da A a B. A contiene una rappresentazione dell'oggetto di B.
Nel mio caso esemplificativo, né l'oggetto user
né l'oggetto account
dipendono l'uno dall'altro per eseguire le loro attività, vale a dire né i metodi di chiamata dell'oggetto sull'altro oggetto. Non esiste quindi alcuna associazione guidata dal comportamento tra i due e nessuno dei due oggetti detiene un riferimento a un oggetto all'altro.
Domanda
Il caso che ho presentato è puramente un caso di rappresentazione di entità? L'associazione tra user
e account
è sempre presente, ma è rappresentata in modi diversi?
es. l'entità user
ha un'identità che può essere rappresentata in forme diverse. Può essere rappresentato come oggetto (l'oggetto user
istanziato) o come un numero intero univoco dalla tabella utenti nei database.
Questo è un modo formalizzato per riconoscere differenti implementazioni di associazioni o ho perso completamente la testa?
Una cosa che mi infastidisce è come descriverei le differenze in UML o simili? O è solo un dettaglio di implementazione?