• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Domanda OOP C# (o altri linguaggi) Come strutturarla

RonaldoCMS

Utente Attivo
Autore del topic
8 Aprile 2012
300
56
Miglior risposta
0
Ciao ragazzi, ho strutturato in questo modo un programma banalissimo, facendo autodidattica, sicuramente il programma è funzionante tralasciando dei bug che si possono creare, vorrei sapere se questo è un metodo adatto a livello sintattico. Vorrei sapere ai veterani ma anche persone che hanno piccole esperienze come lo strutturano un algoritmo di questo genere. Grazie a scusate per il tempo che mi dedicate

C#:
Perfavore, Entra oppure Registrati per vedere i codici!
 
RonaldoCMS RonaldoCMS innanzitutto elimando il goto (esistono i cicli usali) ,poi rispettando un paio di regole basilari del oop:
-aggiungendo lo specificatore d'accesso agli attributi
-scrivendo le "azioni" dell'oggetto con metodi più consoni
- I nomi dei metodi e delle classi devono rispettare il camelcase (esempio la classe dovrebbe essere Potenza)

Oltre queste cose di leggibilità , una classe dovrebbe essere come una blackbox , cioè ricevere degli input e produrre output nascondendo parte delle operazione che hanno permesso di giungere a quel risultato (un po come un auto , l'autista non conosce esattamente come funziona il motore e interagisce con tutte le parti e per usarla non c'è bisogno di saperlo) , evitando comportamenti che non sono di sua competenza (nel tuo caso la lettura dell'input). Ecco come potrebbe essere strutturata Potenza
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
Per quanto riguarda la struttura, oltre le altre cose, ti consiglierei di dividere tutte le funzioni. Mi spiego: il tuo Main2 fa troppe cose. Generalmente una funzione dovrebbe fare una cosa e solo quella, poi volendo può anche usufruire di altre funzioni per fare quello che deve fare, però la cosa migliore è proprio separare tutto per funzioni di solito.
Inoltre, usando C# puoi sfruttare gli overload, ovvero creare due funzioni con lo stesso nome, ma che ricevono due parametri diversi in ingresso, diversi sia in tipo che in quantità (a volte). Ad esempio:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
E così via.
 
RonaldoCMS RonaldoCMS innanzitutto elimando il goto (esistono i cicli usali) ,poi rispettando un paio di regole basilari del oop:
-aggiungendo lo specificatore d'accesso agli attributi
-scrivendo le "azioni" dell'oggetto con metodi più consoni
- I nomi dei metodi e delle classi devono rispettare il camelcase (esempio la classe dovrebbe essere Potenza)

Tecnicamente do in input tutto, creo funzioni e classi di calcolo dando tutto in output?
C'è a livello sintattico per me è molto chiaro pero' non capisco proprio come strutturarlo nel vero modo...
Tipicamente nel main faccio tutte le istruzioni in input e nelle classi tutti i blocchi divisi?
 
RonaldoCMS RonaldoCMS innanzitutto elimando il goto (esistono i cicli usali) ,poi rispettando un paio di regole basilari del oop:
-aggiungendo lo specificatore d'accesso agli attributi
-scrivendo le "azioni" dell'oggetto con metodi più consoni
- I nomi dei metodi e delle classi devono rispettare il camelcase (esempio la classe dovrebbe essere Potenza)

Tecnicamente do in input tutto, creo funzioni e classi di calcolo dando tutto in output?
C'è a livello sintattico per me è molto chiaro pero' non capisco proprio come strutturarlo nel vero modo...
Tipicamente nel main faccio tutte le istruzioni in input e nelle classi tutti i blocchi divisi?

Vedi l'esempio del modello della classe che ho postato sopra.
La classe , rappresenta un astrazione ed opera su un determinato dominio .
Esempio :
Ad esempio una classe Wallet , si presuppone abbia una valuta,quantità di denaro
e che le operazioni che puoi fare sono : versare,prelevare,controllare la quantità di denaro.
Di conseguenza input/output e altre operazioni sono gestite da altri oggetti.
Detto in maniera molto semplificata , se una classe rappresenta una persona che sa mangiare e bere , gli unici codici contenuti nei vari metodi si dovranno occupare di mangiare e bere.
 
Non conosco il C# però da quanto ho visto posso dire con certezza che tu stai facendo "cattiva programmazione" o anche detto "hard coding". L'utilizzo di operatori come "goto" rendono il codice illeggibile e soprattutto difficile da recuperare in caso di loop. Ti consiglio di guardare la pagina wikipedia sulla "cattiva programmazione" e vedere come applicare le buone norme.
 
Non conosco il C# però da quanto ho visto posso dire con certezza che tu stai facendo "cattiva programmazione" o anche detto "hard coding". L'utilizzo di operatori come "goto" rendono il codice illeggibile e soprattutto difficile da recuperare in caso di loop. Ti consiglio di guardare la pagina wikipedia sulla "cattiva programmazione" e vedere come applicare le buone norme.

Si lo so, ho voluto utilizzare goto perchè lo ritengo molto piu' semplice applicarlo a questo problema anche se so che non è una buona programmazione, pero' la mia domanda era se devo utilizzare in questo modo la OOP
RonaldoCMS RonaldoCMS innanzitutto elimando il goto (esistono i cicli usali) ,poi rispettando un paio di regole basilari del oop:
-aggiungendo lo specificatore d'accesso agli attributi
-scrivendo le "azioni" dell'oggetto con metodi più consoni
- I nomi dei metodi e delle classi devono rispettare il camelcase (esempio la classe dovrebbe essere Potenza)

Tecnicamente do in input tutto, creo funzioni e classi di calcolo dando tutto in output?
C'è a livello sintattico per me è molto chiaro pero' non capisco proprio come strutturarlo nel vero modo...
Tipicamente nel main faccio tutte le istruzioni in input e nelle classi tutti i blocchi divisi?

Vedi l'esempio del modello della classe che ho postato sopra.
La classe , rappresenta un astrazione ed opera su un determinato dominio .
Esempio :
Ad esempio una classe Wallet , si presuppone abbia una valuta,quantità di denaro
e che le operazioni che puoi fare sono : versare,prelevare,controllare la quantità di denaro.
Di conseguenza input/output e altre operazioni sono gestite da altri oggetti.
Detto in maniera molto semplificata , se una classe rappresenta una persona che sa mangiare e bere , gli unici codici contenuti nei vari metodi si dovranno occupare di mangiare e bere.
Grazie per il suggerimento.. :emoji_slight_smile:
 
Non conosco il C# però da quanto ho visto posso dire con certezza che tu stai facendo "cattiva programmazione" o anche detto "hard coding". L'utilizzo di operatori come "goto" rendono il codice illeggibile e soprattutto difficile da recuperare in caso di loop. Ti consiglio di guardare la pagina wikipedia sulla "cattiva programmazione" e vedere come applicare le buone norme.

Si lo so, ho voluto utilizzare goto perchè lo ritengo molto piu' semplice applicarlo a questo problema anche se so che non è una buona programmazione, pero' la mia domanda era se devo utilizzare in questo modo la OOP
RonaldoCMS RonaldoCMS innanzitutto elimando il goto (esistono i cicli usali) ,poi rispettando un paio di regole basilari del oop:
-aggiungendo lo specificatore d'accesso agli attributi
-scrivendo le "azioni" dell'oggetto con metodi più consoni
- I nomi dei metodi e delle classi devono rispettare il camelcase (esempio la classe dovrebbe essere Potenza)

Tecnicamente do in input tutto, creo funzioni e classi di calcolo dando tutto in output?
C'è a livello sintattico per me è molto chiaro pero' non capisco proprio come strutturarlo nel vero modo...
Tipicamente nel main faccio tutte le istruzioni in input e nelle classi tutti i blocchi divisi?

Vedi l'esempio del modello della classe che ho postato sopra.
La classe , rappresenta un astrazione ed opera su un determinato dominio .
Esempio :
Ad esempio una classe Wallet , si presuppone abbia una valuta,quantità di denaro
e che le operazioni che puoi fare sono : versare,prelevare,controllare la quantità di denaro.
Di conseguenza input/output e altre operazioni sono gestite da altri oggetti.
Detto in maniera molto semplificata , se una classe rappresenta una persona che sa mangiare e bere , gli unici codici contenuti nei vari metodi si dovranno occupare di mangiare e bere.
Grazie per il suggerimento.. :emoji_slight_smile:
Eeheh questo è il punto. L'utilizzo del goto non è buona programmazione, quindi proprio contro la logica dell'OOP. L'OOP nasce per essere semplice al programmatore, e poi un'altra cosa che non mi è chiara:
Perchè dichiari statiche delle funzioni che puoi dichiarare semplicemente private?
Poi la classe è come una sorta di libreria, vedila così. Non ha senso scrivere la funzione principale in una classe secondaria. Al massimo scrivilo in una funzione ma nella classe primaria. La classe ti serve per immagazzinare dati o per avere funzioni a portata di mano utilizzando quei dati immagazzinati.
E ancora un'ultima cosa (lo so mi odierai per tutto questo xD), non fare classi interne quando non sono inerenti alla classe principale, ma falle esterne e poi importale all'interno della classe principale. Detto questo hai molto da migliorare, però dai, stai andando bene. Cosa fondamentale impara gli attributi di modifica (private, public, protected etc.) in modo da avere una visione chiara su dove e come utilizzarli. Continua così :emoji_slight_smile:
 
  • Like
Reactions: RonaldoCMS