Ho lavorato con OOP per un po 'ora, ma in ogni progetto grande che mi trovo a iniziare, mi sembra di incontrare lo stesso problema; dove risiede la responsabilità.
Come molti che usano l'OOP su base regolare, diventa naturale iniziare a rompere le cose in nomi, verbi, aggettivi, ecc. Recentemente ho letto un post sul fatto che un oggetto possa o debba contenere qualsiasi informazione di stato, o se dovrebbe essere solo informazioni di stato. Durante questo post, ho visto una risposta che menzionava la macchina per caffè Mark IV di Martin Fowler. Tutti sembravano concordare sul fatto che rompere le cose in quel modo fosse indicativo di un buon design. Il problema che ho è che non lo vedo in quel modo. Per me, sembra indietro in alcune parti. Non lo faccio da quasi quanto alcuni di voi, quindi mi piacerebbe chiedere se c'è qualcosa in cui posso rompere questa abitudine o cosa posso fare per cambiarla.
Un esempio che possiamo considerare è una lampadina. Diciamo che ci sono due casi d'uso, in cui Person
vuole accendere la luce e dove Person
vuole spegnere la luce. Questo potrebbe essere ridotto a un caso d'uso, dove vogliono toggle
della luce, potenzialmente.
Se capisco quell'esempio, la responsabilità di Light
di attivazione o disattivazione dovrebbe essere responsabilità dell'oggetto Light
, con qualcosa di simile
public interface Light {
void turnOn();
void turnOff();
void toggle();
}
Tuttavia, quando penso a questa situazione, un Light
non può spegnersi o accendersi. Ciò accade in risposta ad una sorta di evento o azione. La mia luce della cucina di solito non si accende o si spegne da sola. Non è intelligente. Un Person
o Switch
può accendere o spegnere una luce; ma un Light
non può. Il suo stato è interamente determinato da qualcosa altro. Quindi dove dovrebbe risiedere la responsabilità? Tutti i progetti di cui ho fatto parte, che ho finito per smettere, si sono ridotti a questa domanda. Che tipo di strumenti, mentali o fisici, posso usare per scrivere più codice OO?
Nota: la maggior parte del progetto su cui ho lavorato è stata in Java; è la mia lingua più comoda Questa domanda è però più indipendente dal linguaggio.