Tutto in una classe / classi o solo una parte del programma?

1

Volevo spostare il mio programma in una classe o classi perché la maggior parte del post che ho letto dice che rende il programma più facile da leggere, capire il flusso del codice e migliorare la manutenibilità.

Comprendendo a un certo punto che avrei aggiunto sempre più al mio codice fino alle sue oltre 1000 righe, ho deciso di spostare la mia GUI in una classe.

(tieni presente che ho un programma pienamente funzionante che usa solo funzioni)

Sono arrivato a far funzionare il layout di base della cornice, ma devo fare le cose nel modo sbagliato. Non riesco a far funzionare tutto bene insieme. Sono stato in grado di ottenere lezioni per lavorare solo per trovare piccole sezioni del mio codice Come creare pulsanti o etichette. Ma quando provo ad aggiungere tutti gli elementi della GUI continua a rompersi.

Ho trascorso molte ore a leggere lezioni e a guardare tutorial su classi specifiche per python. Per qualche ragione mi viene difficile applicare quello che so sulle classi a qualcosa di più complicato dei pulsanti e delle etichette.

Per me finora tutto ha senso usando le funzioni. Quindi immagino che dovrebbe avere senso usando i metodi in una classe. Tuttavia non è stato così semplice.

Tutto ciò porta alle mie domande per questo post. Tieni presente che sto usando Python. Non sto incorporando nessun altro linguaggio per quanto ne so e so che python è un po 'più flessibile di quanto direbbe che Java sarebbe sull'uso delle classi.

  1. Devo continuare a utilizzare le funzioni per il corpo principale del mio codice e utilizzare le classi per piccoli compiti ripetitivi come creare pulsanti mentre si studiano le classi fino a quando non raggiungo quel momento Aha con le classi? O dovrei smettere di lavorare sul mio programma e davvero scavare nelle classi?

  2. Avrà un impatto a lungo termine se aspetterò di capire veramente le classi o di farlo prima di passare a qualsiasi altra cosa o ad un mix di entrambi?

  3. Scriveresti tutto il tuo programma usando funzioni / variabili o proverai a fare tutto in una classe?

posta Sierra Mountain Tech 26.05.2017 - 18:10
fonte

3 risposte

4

La programmazione orientata agli oggetti non consiste solo nel trasformare semplici funzioni in metodi all'interno delle classi. Mentre questo approccio ti darebbe un ulteriore livello per raggruppare le funzionalità comuni, in Python è davvero superfluo e non essenziale nella maggior parte delle lingue.

La programmazione orientata agli oggetti è un paradigma, con i suoi principi, vantaggi e svantaggi. Se la usi come "funzioni raggruppate per classi", non stai utilizzando i suoi benefici, non stai seguendo i suoi principi e, cosa più importante, non stai utilizzando il paradigma stesso. Stai cercando di usare un martello come se fosse una sega, non mi sorprende che non sia molto pratico.

La praticità della programmazione orientata agli oggetti è nel modo in cui gli oggetti si relazionano tra loro, sarebbe attraverso la composizione e l'ereditarietà, e come comunicano.

Should I continue to use functions for the main body of my code and use classes for small repetitive task like making buttons while studding classes until I reach that Aha moment with classes? Or Should I stop working on my program and really dig into classes?

Dovresti conoscere in modo definitivo la programmazione orientata agli oggetti. Dimentica le lezioni. Le lezioni sono solo un aspetto. Trova un buon libro sul paradigma stesso, un libro che è indipendente dal linguaggio.

Dovresti rielaborare la tua applicazione? Direi di no, in particolare in un contesto di Python. Con Python e diversamente dai linguaggi come Java, hai la libertà di usare le classi dove ne hai bisogno. Con una conoscenza sufficiente di OOP, probabilmente troverai che buona parte della tua app è buona così com'è. Ricorda, Python incoraggia la semplicità .

Will it have an impact in the long run if I wait to really understand classes or get it done before I move on with anything else or a mix of both?

Non devi aspettare. Hai un programma che funziona. È fantastico. Assicurati di aggiungere nuove funzioni ad esso mentre apprendi OOP.

Would you write all of your program using functions/variables or try to do everything in a class?

Nessuno dei due.

In Python, entrambi gli approcci possono essere mescolati. Ciò significa che si utilizza OOP esattamente quando necessario e si semplifica quando non si ha bisogno di OOP. Questo vale per qualsiasi progetto, indipendentemente dalla sua scala.

    
risposta data 26.05.2017 - 19:31
fonte
2

Se le classi non hanno ancora senso, potrebbe non esserci un punto in cui costringersi a usarle. Ri-progettare il tuo codice per renderlo più orientato agli oggetti potrebbe renderlo più facile da leggere e gestire, ma potrebbe non esserlo (e potrebbe anche non essere necessario). È possibile scrivere un codice molto pulito, ben scritto, di facile lettura e manutenzione che è non orientato agli oggetti, ed è anche possibile scrivere un codice di spaghetti orribile che è orientato agli oggetti.

Il mio consiglio: scrivi il codice che ti senti a tuo agio con quello che ha senso per te. Tienilo ben documentato e riordinato. Le metodologie orientate agli oggetti non hanno senso per ogni possibile compito di calcolo, e senza sapere di più sul tuo progetto, non voglio dire che devi farlo. Allo stesso tempo, imparare nuovi modi di fare le cose non è mai una brutta cosa, quindi magari continuare a cercare di capire la progettazione / programmazione orientata agli oggetti fino a ottenere il tuo "Eureka!" momento.

    
risposta data 26.05.2017 - 18:20
fonte
1

Le classi sono utili solo se rappresentano qualcosa nel tuo dominio problematico. Pensa innanzitutto agli elementi di dati e al comportamento, quindi modella quel qualcosa in una classe. In questo modo puoi creare blocchi predefiniti e puoi assemblarli per creare la tua applicazione.

Se hai già un'applicazione che non è stata progettata in modo orientato agli oggetti, non ha senso riorganizzarla solo per farla usare classi. Si finirebbe con classi che sono solo raccolte di funzioni e variabili, le classi non rappresenterebbero nulla.

Leggi di più su OO e avvia la tua prossima applicazione riconoscendo le classi nel tuo problema e poi modellale in codice. Fallo OO da zero e inizierà a dare un senso e ad essere utile.

    
risposta data 26.05.2017 - 22:36
fonte

Leggi altre domande sui tag