Non puoi close
un file a meno che non sia open
. Come dovrebbe reagire il metodo close quando viene eseguito nello stato sbagliato? Dovrebbe restituire un errore o generare un'eccezione. Ciò dipende dalla lingua e dallo stile di programmazione che stai seguendo.
Meteo o non Bird può volare o no è una rappresentazione del suo stato interno. Lo stesso di una risorsa file e come tale seguiresti gli stessi schemi di progettazione. Trattando l'uccello come se avesse uno stato interno che lo sviluppatore deve controllare.
class Bird {
boolean canFly();
void teach();
void fly();
}
try
{
if(!b.canFly()) { b.teach(); }
b.fly();
} catch (e) { ... }
Avere la prospettiva, che un metodo dipende dall'ordine di un altro metodo, non segue la mia comprensione del design OOP. L'oggetto ha uno stato interno. L'oggetto gestisce il proprio stato interno e il codice sorgente esterno non dovrebbe essere responsabile della gestione di tale stato (se possibile). Se devi dire agli sviluppatori di eseguire i metodi in un dato ordine, allora hai progettato l'oggetto sbagliato.
Invece di insegnare e volare. Dovresti inizializzare l'uccello e rendere la gestione dello stato interno dell'uccello una questione interna dell'oggetto. In questo modo, non spezzerai il codice sorgente di altre persone quando dovrai rivedere il design di Bird.
class Bird {
private boolean taught = false;
private boolean flying = false;
private void teach() {...}
protected void init() {
if(!this->taught) { this->teach(); }
}
public void startFlying() { this->init(); this->flying = true; }
public void stopFlying() { this->init(); this->flying = false; }
}