Unità di design e unità di riuso. Qual è la differenza?

4

Contemporary object-oriented programming languages employ the class as the unit of reuse. At the same time, the class is also the unit of design. This implies that to reuse a class, the design of the class must fit the design in which it will be reused. While this serves planned reuse, it hampers unplanned reuse. Obviously, unplanned reuse is much more important if widespread reuse is desired.
(From:http://gerbil.org/tom)

Qual è la differenza tra entrambi?

    
posta vanangamudi 02.06.2015 - 09:08
fonte

3 risposte

3

Nonostante il fatto che la citazione originale abbia ~ 15 anni, dubito che le classi siano mai state "le unità primarie di riuso" al di fuori di alcuni libri e scuole accademici. L'unità black-box orientata agli oggetti di riutilizzo di oggi è in genere un componente - che significa una libreria autonoma con un contratto , un'interfaccia con una chiara sintassi e semantica descrizione e meta informazioni leggibili a macchina che consentono una sorta di introspezione. Alcune delle tecnologie di componenti disponibili di oggi consentono il riutilizzo indipendente del linguaggio di programmazione.

Un tipico componente è costituito da una o più classi (e può essere almeno teoricamente implementato senza alcuna classe), ma "la classe" è in genere solo una "unità di progettazione" (uno strumento per dare al tuo codice più struttura ), non una "unità di riutilizzo". Per alcuni componenti, una classe può essere sufficiente, ma è più un'eccezione rispetto al caso normale.

Inoltre, altre forme più antiche di creazione di unità riutilizzabili come librerie o moduli sono ancora popolari, ma non sono nemmeno necessarie la nozione di orientamento agli oggetti o classi. Quando guardi oggi alle grandi raccolte di software riutilizzabili disponibili sul web, le "unità riutilizzabili" che sono singole classi sono solo una piccola percentuale, rispetto al numero totale di componenti, librerie o moduli riutilizzabili. Questo dovrebbe chiarire la differenza.

    
risposta data 02.06.2015 - 09:53
fonte
2

L'unità del design significa che quando ti siedi per progettare un nuovo programma, in pratica stai decidendo un insieme di classi che includerai.

L'unità di riutilizzo indica che se vuoi riutilizzare la funzionalità che qualcun altro ha scritto, l'unità più piccola che puoi inserire nel tuo nuovo programma senza fare una nuova copia del codice è un'intera classe. Come ha sottolineato Doc Brown, spesso a causa dell'accoppiamento, quell'unità è ancora più grande. Non è possibile riutilizzare solo un metodo, o semplicemente la struttura dei dati senza alcun metodo, come è comune nei paradigmi funzionali e procedurali.

La maggior parte dei programmatori OO non si rende conto di quanto sia grande il problema che questo effettivamente causa per il riutilizzo. In generale, le classi devono essere attentamente progettate tenendo presente la riusabilità, e principalmente solo i progettisti di librerie si danno da fare.

Minore è l'unità di riutilizzo, minore è la probabilità che l'unità sia specifica per una singola applicazione. Ecco perché il codice riutilizzato di maggior successo utilizza interfacce di uso generale molto piccole, ampiamente accettate. Ad esempio, una semplice interfaccia compare su un tipo consente a tale tipo di essere riutilizzato in un ampio intervallo di codice esistente, dagli algoritmi di ordinamento alle strutture di dati come gli alberi di ricerca binaria. Si noti, tuttavia, che il codice riutilizzato deve essere stato inizialmente progettato per trarre vantaggio da tale interfaccia.

    
risposta data 02.06.2015 - 15:30
fonte
1

Se la classe è l'unità di progettazione, significa che si progetta il codice una classe alla volta. Dovresti essere in grado di eseguire più o meno l'intero scopo e l'implementazione della classe in un'ora in una sola volta, dovrai impegnare il suo codice nel progetto tutto in una volta, o in un breve lasso di tempo, ecc.

Se una classe è l'unità di riutilizzo, significa semplicemente che quando qualcuno vuole riutilizzare il codice, deve prendere l'intera classe e fare qualcosa con esso, ad es. chiama i suoi metodi o forse eredita da esso - non copiare uno dei suoi metodi e apportare modifiche. "Class as the unit of reuse" è una nozione popolare perché significa che potresti distribuire la tua classe in un modulo compilato e farla riutilizzare senza esporre il codice sorgente (questo è meno convincente ora di quanto lo fosse un tempo, perché così tanti professionisti hanno ha abbracciato l'idea del software open-source, ma sarete sorpresi dal numero di decisionisti che sono ridicolmente in ritardo rispetto ai tempi).

Ovviamente, queste due idee non devono essere vere allo stesso tempo. Puoi progettare un intero modulo alla volta e vuoi ancora riutilizzare solo un piccolo frammento di codice da un angolo. Pertanto è una buona idea avere una chiara idea di cosa sia una classe e come dovrebbe essere usata da autori, co-sviluppatori e programmatori di applicazioni.

    
risposta data 02.06.2015 - 09:16
fonte

Leggi altre domande sui tag