2011-09-01 19 views
6

A pagina 13 del libro GoF v'è una dichiarazione:Perché "Design Patterns" dice "due oggetti dello stesso tipo devono solo condividere parte delle loro interfacce"?

Two objects of the same type need only share parts of their interfaces. 

io non sono sicuro di aver capito questa frase.

EDIT: piena citazione potrebbe effettivamente aiutare a capire che

Un tipo è un nome usato per indicare una particolare interfaccia. Parliamo di un oggetto con il tipo "Finestra" se accetta tutte le richieste per le operazioni definite nell'interfaccia denominata "Finestra". Un oggetto può avere molti tipi e oggetti molto diversi possono condividere un tipo. Parte di un'interfaccia dell'oggetto può essere caratterizzata da un tipo e altre parti da altri tipi. Due oggetti dello stesso tipo devono condividere solo parti di le loro interfacce. Le interfacce possono contenere altre interfacce come sottoinsiemi.

+0

"Interfacce", come li conosciamo oggi non erano in uso diffuso di allora. Forse GoF voleva dire che 2 oggetti della stessa classe dovrebbero limitarsi ai metodi di classe esposti. – StuartLC

risposta

7

Nella loro lingua, l'interfaccia è l'intero contratto pubblico dell'oggetto (Non pensare all'implementazione del linguaggio qui).

L'insieme di tutte le firme definite da un oggetto è chiamato interfaccia all'oggetto.

Un tipo è più simile a quello che si potrebbe pensare a come interfaccia dichiarata ....

Un tipo è un nome usato per indicare una particolare interfaccia.

Immaginate:

public class Foo : IBar, IBaz {} 

public class Fuz : IBar, IBuz {} 

A Foo e un Fuz sono entrambi "tipi" Ibar, ma hanno in comune solo quell'aspetto delle rispettive interfacce.

+0

sì, questo probabilmente è esattamente ciò che significava lì, la tua risposta è molto chiara –

-1

Non so che cosa vuol dire come io non ho il libro. Ma un'interfaccia è la firma del metodo della classe, combinata con le variabili pubbliche. Come sottotipo di un particolare tipo, è anche un tipo della sua classe genitore, può avere metodi che non ha genitore, quindi condivide solo alcune delle interfacce del genitore. Non ho idea se sia in realtà quello di cui parlava.

1

un preventivo più completo è:

Un tipo è un nome usato per indicare una particolare interfaccia. Parliamo di un oggetto con il tipo "Finestra" se accetta tutte le richieste per le operazioni definite nell'interfaccia denominata "Finestra". Un oggetto può avere molti tipi e oggetti molto diversi possono condividere un tipo. La parte dell'interfaccia di un oggetto può essere caratterizzata da un tipo e altre parti da altri tipi. Due oggetti dello stesso tipo devono condividere solo parti delle loro interfacce.Le interfacce possono contenere altre interfacce come sottoinsiemi .

e molto chiaramente, penso, si tratta di ereditarietà multipla. ad esempio potresti avere TextWindow e MenuWindow che entrambe le sottoclasse Window insieme ad altre classi. entrambi gli oggetti possono essere considerati, nel senso che stanno usando, per avere "tipo" Window, e entrambi implementeranno le operazioni associate a quel tipo - entrambi avranno i metodi di Window. ma TextWindow può anche sottoclasse TextEditor mentre MenuWindow no, quindi il loro insieme di metodi (che cosa significano per "interfaccia") non sono gli stessi, anche se la parte Window si sovrappone.

http://www.uml.org.cn/c++/pdf/DesignPatterns.pdf

Problemi correlati