Chi è responsabile della distruzione di un oggetto?

6

Nel mio corso, mi è stato insegnato che, in generale, in generale, una classe B dovrebbe essere responsabile della creazione di istanze di classe A se si applica uno o preferibilmente di più:

  1. Le istanze di B contengono o aggregano composte istanze di A
  2. Istanze di istanze di record B di A
  3. Le istanze di B utilizzano da vicino le istanze di A
  4. Le istanze di B hanno le informazioni di inizializzazione per le istanze di A e le passano alla creazione.

E in alcuni casi più complessi, il posto migliore per creare un oggetto è all'interno di una classe factory.

Il mio corso non mi ha mai insegnato chi dovrebbe essere responsabile dell'eliminazione di un'istanza. Supponi di voler eliminare un'istanza di A che è stata creata in un'istanza di B. Chi cancella A? È A stesso? È B? È qualche altra classe C che ha la sola responsabilità di eliminare A?

    
posta PythonNewb 28.03.2017 - 00:40
fonte

1 risposta

12

I professori universitari tendono a rendere queste cose più complicate di quanto debbano essere. Qualcuno che conosce la terminologia nella tua domanda dovrebbe già sapere quando è il momento giusto per creare un'istanza; probabilmente risponderebbero "quando è necessario" piuttosto che ricorrere a un complesso insieme di regole.

La distruzione di un oggetto, tuttavia, è complicata dal fatto che ci sono due strategie principali per realizzarlo. Le strategie dirette sono cose come Delete e RAII. Le strategie indirette sono cose come Garbage Collection e ripulitura di un dominio app all'uscita.

Di conseguenza, non è possibile indicare un singolo principio per la responsabilità di cancellazione. Se si tratta di un linguaggio di programmazione raccolto con la garbage collection, una determinata istanza di oggetto non viene generalmente eliminata immediatamente dopo che non è più necessaria. Invece, gli oggetti vengono ripuliti un po 'di tempo dopo che sono liberati (significa che non ci sono più riferimenti agli oggetti che li contengono).

Al contrario, con i metodi diretti, l'eliminazione dell'oggetto dovrebbe generalmente avvenire quando non è più necessario, e il posto migliore per farlo è all'interno del contesto o scopo dell'uso dell'oggetto. In altre parole, potresti creare un metodo che crea un oggetto per farlo funzionare; è quel metodo stesso che sarebbe responsabile della distruzione dell'oggetto, a meno che lo scopo del metodo sia quello di creare quell'oggetto da usare da qualche altra parte.

    
risposta data 28.03.2017 - 01:24
fonte