Esempi di relazioni bidirezionali e unidirezionali tra oggetti

0

Per dimostrare meglio le difficoltà di lettura / aggiornamento degli oggetti in un ambiente multithread, sto cercando degli esempi per gruppi di oggetti con una relazione bidirezionale o unidirezionale tra loro in modo tale che se uno è aggiornato allora anche gli altri possono essere aggiornati.

Note:

  1. aggiornato è uguale a - lo stato precedente dell'oggetto non è più valido, quindi è necessario creare un nuovo oggetto con valori diversi (No setter, stile funzionale).

  2. Non sto cercando alcun tipo di soluzione di sincronizzazione.

Esempi che ho creato / trovato finora:

The notation B -> A means that B state may derive from A state and if A is updated then B may/may not update due to A update.

  1. relazione unidirezionale: un download contiene le seguenti caratteristiche:

    • is download started: boolean - Può essere impostato su true una sola volta.
    • is currently downloading: boolean - Sarà true quando is download started è true . sarà false when è download completato will be false . Also, it may change from true 'a false e viceversa dall'utente.
    • download speed: number : cambierà non appena is currently downloading è true
    • is download completed: boolean - Può essere true iff is currently downloading è true .

rapporti:

is download completed -> is currently downloading -> is download started e download speed -> is currently downloading

  1. relazione bidirezionale: un master che è responsabile di più slaves (lavori). A master e a slave contiene le seguenti caratteristiche:

master :

  • state: In progress/Canceled/Completed - Inizia con In progress stato e sarà Completed iff tutto slaves ha stato Completed .
  • slaves: slave[]

slave :

  • state: In progress/Canceled/Completed - Inizia con In progress stato. Sarà Canceled se lo stato di master è Canceled e afferma è In progress .

rapporti:

master: state -> slaves: state , master: slave[] -> slaves: state e slave: state -> master: state .

Bonus: Esempio per un gruppo di oggetti con una relazione bidirezionale che può essere modificata in una relazione unidirezionale dopo aver realizzato un problema di progettazione - Ma non è facile vederlo immediatamente.

    
posta Stav Alfi 10.05.2018 - 23:16
fonte

0 risposte

Leggi altre domande sui tag