È questa la corretta comprensione dell'accoppiamento stretto e dell'accoppiamento lento [duplicato]

2

Accoppiamento significa "dipendenza". È il caso di "Classe A" dipendente da "Classe B" per portare a termine il lavoro.

L'accoppiamento stretto è quando "Classe A" utilizza l'implementazione di "Classe B". Loose Coupling è quando "Classe A" usa l'astrazione su "Classe B".

Questa è la comprensione corretta o è semplicissima?

    
posta Sarawut Positwinyu 14.05.2014 - 08:28
fonte

2 risposte

2

L'accoppiamento stretto è quando "Classe A" chiama direttamente "Classe B" o un oggetto di "Classe B" per eseguire un lavoro. in accoppiamento libero "Classe A" chiama una classe astratta o un oggetto di una classe astratta per fare un lavoro; quindi se gli strumenti di "Classe B" menzionati sono astratti, allora "Classe A" viene chiamata indirettamente "Classe B" senza dipendere dalla "classe B"

come esempio, pensare che "Classe B" sia il livello dati che fornisce servizi per eseguire query su SQLServer Db. cosa succederebbe se si volesse eseguire la stessa applicazione con un DB Oracle, MySQL o XML ecc. Se "Classe A" invece di dipendere da "Classe B" si basa solo su una classe astratta come IDBProvider. quindi è possibile utilizzare "Classe A" con qualsiasi classe che implementa solo IDBProvider. questo è liberamente accoppiato.

    
risposta data 14.05.2014 - 10:43
fonte
1

Considera il seguente esempio:

// Let's say this method lives in a class MyClass
public void doSomething(Foo foo, Bar bar) {
    foo.prepareProcessing();
    Worker work = foo.createWorker();
    work.dispatchTask(new Task(bar), 12);
    work.start();
    foo.waitForWorker(work);
    foo.finishProcessing();
}

Contrasto con il seguente:

public void doSomething(Foo foo, Bar bar) {
    foo.runTaskAtPriority(bar, 12);
}

Nel primo esempio, le classi Foo e MyClass sono strettamente accoppiate: MyClass non dipende solo da Foo , ma anche dalle dipendenze di Foo , come Worker e Task classi. Inoltre, MyClass dipende da interni molto specifici di Foo : deve chiamare diversi metodi in un certo ordine. È molto più probabile che la modifica di qualcosa in Foo richieda anche la modifica di MyClass .

Il secondo esempio dipende solo da Foo stesso. Pertanto, se Foo interrompe l'utilizzo di Worker internamente, MyClass non deve preoccuparsi. MyClass e Foo sono accoppiati liberamente.

Alla fine, è tutto sulla conoscenza: più è necessario conoscere una determinata classe / metodo per usarlo, più stretto è l'accoppiamento.

"A seconda delle astrazioni anziché delle concrezioni" è un modo comune per ottenere un accoppiamento basso. Ma l'introduzione di classi / interfacce astratte non riduce automaticamente l'accoppiamento: è piuttosto necessario pensare a come ridurre le possibili interazioni (conoscenze) che una classe ha con un'altra.

    
risposta data 14.05.2014 - 10:52
fonte

Leggi altre domande sui tag