m1gwings / ing-sw-cheatsheet

Cheatsheet per l'esame (open book) di Ingegneria del Software del Politecnico di Milano. A. A. 2022/2023.
MIT License
7 stars 5 forks source link

pattern comportamentali #27

Closed francescogemma closed 1 year ago

francescogemma commented 1 year ago

Ho aggiunto i pattern comportamentali.

francescogemma commented 1 year ago

Puoi anche spuntare i pattern strutturali, closures e nomi dei metodi definiti dalle interfacce funzionali (già mergiate)

francescogemma commented 1 year ago

Comunque suggeriscimi i cambiamenti per i nomi delle classi solo se strettamente necessari, altrimenti ogni volta impiego una mattina solo per fare un pattern e non finiamo più poi. Rimanderei queste piccolezze a dopo che abbiamo finito (se c'è tempo).

m1gwings commented 1 year ago

Comunque suggeriscimi i cambiamenti per i nomi delle classi solo se strettamente necessari, altrimenti ogni volta impiego una mattina solo per fare un pattern e non finiamo più poi

Sì il punto in realtà è molto semplice. Le classi rappresentano entità: oggetti che esistono. Quindi solitamente il nome di una classe è costituito da un sostantivo e degli aggettivi. Per questo motivo fare una classe ApriCassa risulta molto forzato, solitamente i verbi si usano per i nomi dei metodi che rappresentano delle azioni. Infatti nel "sistema" che stiamo descrivendo non esiste l'entità ApriCassa, esistono delle casse su cui possiamo effettuare l'azione apri (attraverso un metodo). So che lo sai benissimo, lo sto rimarcando per spiegare perché ho chiesto la correzione. Infatti secondo me quel nome forzato è derivato da una scelta, meno sbagliata, fatta prima: chiamare EffettoCassa Cassa. Qui è più sottile capire che nome usare, ma in realtà basta ragionare un attimo su cosa effettivamente la tua classe sta rappresentando. Con strategy descrivi un comportamento del Context non il context stesso, quindi il tuo oggetto non è una Cassa (se dovessi aggiungere altri attributi alla cassa tipo il numero di oggetti che può contenere, li aggiungeresti al Context e non alla classe che usi per Strategy) quindi da questo ragionamento si capisce che il nome Cassa non va bene e che ne dobbiamo usarne uno che faccia capire che stiamo descrivendo come la classe si comporta. Si poteva chiamare ComportamentoCassa, EffettoCassa, ... le scelte ammissibili sono molteplici.

Scusa se sono suonato saccente (non era il mio intento) e so benissimo che ci vuole tempo per correggere, ci tenevo a scriverlo perchè facendo un po' di attenzione alle cose che ho scritto sopra puoi scrivere direttamente nomi delle classi ottimali (non è un'operazione che richiede più tempo dello scriverli non ottimali, basta ragionare un attimo) che rendono gli esempi secondo me molto più chiari, soprattutto quando si spiegano i pattern dove è importante sottolineare queste differenze. Leggendo l'esempio in prima battuta penserei, ma perchè uno dovrebbe dichiarare una classe ApriCassa e non mette tutto in Cassa? Perdendo proprio la funzione di strategy