Come si spiega l'importanza della scrittura di classi rispetto alla scrittura di funzioni procedurali per un programmatore? [chiuso]

1

Ho uno stagista e scrive codice veloce.

Tuttavia, ho difficoltà a fargli capire l'importanza di scrivere classi e seguire il paradigma OOP.

Recentemente abbiamo avuto una discussione simile a questa:

"Invece di avere questa lunga funzione che estrae i dati da due query diverse e quindi combina i dati in una nuova struttura dati come funzione autonoma, perché non iniziare inserendola in una classe?

Capisco che non ci siano molte differenze per ora, ma posso prevedere che questa classe crescerà per avere più funzioni e il prossimo che prenderà il ruolo naturalmente ridirigerà la funzione gigante in più funzioni all'interno della stessa classe. "

Quando ha obiettato, gli ho detto, "Okay, ti ho dato i miei criteri (scrivi la funzione all'interno di una classe) e la mia ragione (probabilmente lo avremo come classe in futuro, potrebbe anche iniziare ora, non importa quanto sia imperfetto l'inizio). Se hai un criterio migliore e un motivo migliore, perché non lo suggerisci? "

Un giorno dopo la sua risposta è stata, "python è un linguaggio di programmazione orientato agli oggetti, quindi quando i codici sono organizzati all'interno di un file, è piuttosto oop alr"

Come posso fargli capire l'importanza o meglio ancora apprezzare l'importanza del software artigianale?

Nel caso, ho fatto alcune ipotesi sbagliate, sono disposto a correggermi e capisco i pericoli di porre questa domanda e di chiuderla. Quindi, se ci fosse un posto migliore per porre questa domanda, sono disposto a provarlo.

    
posta Kim Stacks 04.01.2017 - 15:14
fonte

4 risposte

12

Python è un linguaggio multi-paradigma in cui il codice procedurale è abbastanza comune e la decisione di scrivere una classe o una funzione viene presa caso per caso. Python riconosce che una classe non è sempre lo strumento migliore per il lavoro. Se speri di convincere qualcuno dei meriti di OOP, devi prima consolidare i meriti nella tua stessa mente, e non solo usare una classe perché è la "miglior pratica" di default o qualsiasi altra cosa.

Le persone scelgono le classi quando devono trasportare lo stato correlato tra le chiamate di funzioni. In altre parole, quando hai già qualcosa che assomiglia a un self che viene passato tra un gruppo di funzioni, è un buon segno che una classe sarebbe perfetta per te. Se non si ha uno stato passato, o un diverso insieme di stati ogni volta, allora l'OOP è inadeguato.

    
risposta data 04.01.2017 - 15:45
fonte
1

Le classi non sono una metodologia di organizzazione del codice. Le classi incapsulano lo stato e hanno metodi per modificare quello stato. Se questo non è il tuo caso d'uso, le funzioni procedurali sono perfettamente adeguate.

La cura per le funzioni troppo lunghe non è una classe, ma rifatta la funzione lunga in diverse funzioni più piccole.

    
risposta data 04.01.2017 - 16:00
fonte
0

Il problema che vedo in generale è che i diversi paradigmi a volte vengono trattati come un culto del carico ed è bene ricorda cosa stiamo facendo e perché. Il caso con OOP non è, che è in e da sé migliore , né è necessario mettere tutto in una classe per seguire l'artigianalità del software .

La principale differenza tra OOP e procedural è dove i tuoi dati sono presenti e dove vive il codice che riguarda i dati (senza entrare nei dettagli su pilastri di OOP ktl.). Ma il punto è: qualcuno ha pensato che fosse una buona idea (o forse un migliore ) di mettere insieme i dati e il suo codice di modifica. Questo è niente che è scolpito nella pietra per le generazioni a venire. È solo un modo di pensare e di lavorare. La speranza era che il modo in cui le strutture OOP codificano:

    Il codice
  • sarà organizzato meglio (dati accanto al codice di modifica)

  • meno incline agli errori

  • meno ripetitivo ecc.

È stato sviluppato per un motivo .

Detto questo, dovrebbe essere chiaro, che per raggiungere gli obiettivi di cui sopra OOP è uno ma forse non è l'unico modo.

E la cosa positiva di Python rispetto a Java è che ci sono da un lato classes e methods come Java ma sono anche funzioni di cittadini di prima classe. Ciò consente di decidere come strutturare il codice, che si adatta al problema che stai cercando di risolvere meglio.

Infine: un bel discorso su Smetti di scrivere classi

    
risposta data 04.01.2017 - 17:16
fonte
-3

In realtà la differenza è molto sottile: (a) pulizia automatica, (b) incapsulamento, (c) semplicità di passare da una singola istanza di una classe alla classe essendo un membro di un'altra classe, elenchi, mappe, ecc. .

Tutte queste cose fanno davvero la differenza solo su progetti relativamente grandi, quindi gli stagisti non lo capiscono, le persone che hanno meno di 1 milione di LOC non lo ottengono - dovrebbero semplicemente credere a chi ha un'esperienza rilevante.

    
risposta data 04.01.2017 - 15:48
fonte

Leggi altre domande sui tag