Design orientato agli oggetti per InputStream.mark Metodo supportato

0

Sto leggendo Programmazione della rete Java di Elliotte Rusty Harold. Nel capitolo 2, ho letto il testo sul metodo makrSupported() di InputStream class. L'autore spiega che questo metodo non è orientato agli oggetti. Poiché la funzione per il controllo di mark() disponibile non è fornita dal tipo separato. In che modo il design è più orientato agli oggetti e supporta ancora mark() e reset() metodi?

    
posta jyshin 01.01.2018 - 10:35
fonte

1 risposta

2

In una buona progettazione orientata agli oggetti, non è necessario chiedere un oggetto se supporta un metodo come mark o no. Invece, il tipo di interfaccia o classe del tuo riferimento dovrebbe indicare esattamente quali metodi il tuo codice si aspetta di poter utilizzare.

Un design più orientato agli oggetti sarebbe sulla falsariga di

class InputStream extends Object
{
  ...
  // no mark() nor reset()
}

class ResettableInputStream extends InputStream
{
  void mark() { ... }
  void reset() { ... }
}

Il motivo per cui Java non è stato progettato in questo modo probabilmente ha ragioni storiche, ad esempio che InputStream con mark / reset era già ampiamente utilizzato quando è stata introdotta una nuova classe derivata che non poteva supportare mark / reset e un strong desiderio di non rompere tutto il codice esistente.

    
risposta data 01.01.2018 - 11:27
fonte

Leggi altre domande sui tag