Puoi imparare la programmazione OO senza procedurale?

5

Ho visto una serie di domande che chiedono se qualcuno dovrebbe prima imparare procedurale o OO. Ma è anche possibile? Puoi imparare la programmazione OO senza aver prima compreso la programmazione procedurale? Ovviamente, possono imparare a programmare in un linguaggio OO come Java o Python. Ma puoi scrivere Fortran in qualsiasi lingua. La mia impressione è che tali programmatori di inizio scrivano codice procedurale in un linguaggio OO almeno all'inizio.

Ma cosa ne pensi?

    
posta Winston Ewert 30.12.2011 - 01:04
fonte

6 risposte

5

Se stai programmando in un linguaggio puramente orientato agli oggetti come Eiffel, Smalltalk o Ruby, probabilmente sarai costretto a imparare la programmazione orientata agli oggetti fin dall'inizio (poiché è effettivamente la pietra angolare di la lingua) (si noti inoltre che queste lingue spesso supportano altri tipi di programmazione, ad esempio funzionale, ecc.)

Ora, detto questo, sia la programmazione orientata agli oggetti che quella procedurale derivano in ultima analisi dal paradigma imperativo, descrivendo efficacemente come il programma è destinato a portare a termine il suo compito. In quanto tale, utilizzi ancora determinate idee procedurali nel tuo programma.

In linguaggi ibridi (e non completamente orientati agli oggetti), come Java, vedrai ancora molti programmi orientati agli oggetti (dato che oggi è molto rilevante nel campo della programmazione, Java viene utilizzato di routine insegnare concetti orientati agli oggetti).

Conclusione: non è necessario impiegare anni (o anche mesi) per apprendere il paradigma procedurale per essere in grado di comprendere il paradigma orientato agli oggetti. Puoi iniziare ad apprendere il paradigma orientato agli oggetti sin dall'inizio (e senza dubbio dovrai cogliere alcuni concetti procedurali man mano che procedi).

    
risposta data 30.12.2011 - 01:46
fonte
5

OO è un'estensione del paradigma procedurale.

Puoi imparare a programmare in OO senza poter codificare programmi non banali-complessi in linguaggi procedurali, ma le basi teoriche dietro procedurale sono inevitabili.

Non sapresti:

  • come utilizzare globalmente in modo efficace,
  • quali sono le variabili static C per,
  • per cosa sono veramente i tipi primitivi e spingeranno sempre ad affrontare i tipi di oggetti equivalenti.

Ti indulgerei in:

  • definizione delle variabili di classe,
  • lancio di oggetti ridondanti,
  • pensando gerarchicamente,
  • abuso dell'eredità,
  • negando che gli oggetti possano causare overhead (per quanto riguarda le prestazioni, ma anche a livello organizzativo)
risposta data 30.12.2011 - 05:29
fonte
2

Che cosa rende qualcosa orientato agli oggetti? Potresti produrre un elenco di cose che caratterizzano il paradigma, ecco un elenco derivato da wikipedia:

  1. astrazione dati
  2. incapsulamento
  3. Messaggi
  4. modularità
  5. polimorfismo
  6. eredità

Ma nessuna lingua impone di usare queste cose. Puoi scrivere procedurale Java. L'utilizzo della parola chiave class non rende il tuo codice OO. OO è davvero il modo in cui strutturi il design del tuo sistema. Molti programmi scritti in puro linguaggio OO non sono strutturati in nulla come un modo OO. Molti programmi scritti in lingue non OO sono strutturati in modo OO.

Se guardi il codice di un principiante vedrai che fa un lavoro terribile di quasi tutto in quell'elenco OO. Il loro codice funzionerà, ma non è carino. (Ho scritto cose davvero terribili io stesso, e rimane ostinatamente in produzione). Hanno afferrato le basi, la parte procedurale, ma in realtà non hanno afferrato la programmazione OO.

Fondamentalmente, non puoi afferrare l'idea di incapsulamento finché non hai afferrato per prime variabili, loop, funzioni, ecc. Ecco perché penso che devi imparare procedurale prima di poter imparare OO.

    
risposta data 30.12.2011 - 06:22
fonte
1

Non ti consiglio di "provare" OO senza supporto formale (un buon libro, un sito web utile, una scuola formale o un mentore umano).

Puoi facilmente "provare" Procedural senza alcun aiuto - il modo in cui pensi a come risolvere un problema sarà probabilmente in un modo graduale. Questo coincide bene con la programmazione procedurale, quindi scorre più o meno naturalmente dai tuoi pensieri su come risolvere un dato problema di programmazione.

Ma "OO" è un altro animale, un modo molto diverso di organizzare, astrarre e nascondere l'implementazione della soluzione, e quindi richiede un modo diverso di pensare a un problema. Potresti aver bisogno di aiuto / un mentore / un buon libro / formazione formale per iniziare in OO.

Metti da parte tutte le altre preoccupazioni per un momento e considerando la tua domanda puramente da una prospettiva basata sulla carriera - Se vuoi un lavoro come sviluppatore di software professionale, avrai una maggiore commerciabilità se possiedi competenze OO.

Se vuoi solo scrivere codice per divertimento, puoi usare quello che è più facile / più divertente per te.

Se vuoi una carriera come sviluppatore di software, potresti anche mordere il proiettile e iniziare con OO - e assicurarti di ottenere quel supporto formale che ho menzionato!

    
risposta data 30.12.2011 - 01:53
fonte
1

Qualsiasi programma nel mondo è tipicamente costituito da una o tutte le seguenti caratteristiche:

  1. Una sequenza logica (un algoritmo decente)
  2. Strutture di selezione (se, passa)
  3. Ripetizione (iterazione o loop)

Qualsiasi programmatore principiante deve essere bravo nei suddetti aspetti della programmazione prima di procedere a cose più avanzate. È sempre consigliabile scrivere le proprie funzioni e procedure all'inizio, in modo che acceleri l'approccio logico alla risoluzione dei problemi. Una volta fatto, puoi studiare le strutture dei dati! Una classe (che è l'unità essenziale di OOP) stessa è una struttura dati. Vi siete mai chiesti perché C è insegnato prima del C ++? La ragione è che se si conosce l'implementazione e la debolezza / svantaggio della struct (registrazione), sarà più facile comprendere e apprezzare l'importanza dell'uso delle classi.

Sebbene non sia un prerequisito per apprendere una programmazione procedurale prima di entrare negli aspetti di OOP. Ma è altamente raccomandato scrivere le proprie procedure e funzioni, prima di diventare piuttosto dipendenti dal riutilizzo di librerie e metodi predefiniti di oggetti.

Una nota importante qui che consiglierei sempre ai programmatori principianti è di stare alla larga dai linguaggi procedurali primitivi degli anni '50 e '60 come FORTRAN, Pascal, COBOL, BASIC, ecc. Il motivo per cui ho detto che queste lingue sono tutte le applicazioni orientati. Dovevano essere lì per eseguire determinate cose nelle rispettive aree. In secondo luogo, la loro sintassi è anche molto diversa dai moderni e potenti linguaggi OOP di oggi.

È sempre meglio iniziare da C o C ++! Una volta che hai dimestichezza con queste lingue, non ci vorrà molto tempo per imparare lingue come Java, C #, PHP, Drupal, Ruby, ecc. Sono tutte lingue orientate agli oggetti.

    
risposta data 30.12.2011 - 16:57
fonte
0

Quando ho iniziato a imparare a programmare, ho iniziato con OOP. Il codice procedurale è stato menzionato e tutti abbiamo compreso il concetto, ma semplicemente non ci siamo preoccupati di esplorare ulteriormente le procedure poiché stavamo usando .Net e stiamo imparando l'OOP.

Personalmente, penso che se avessi imparato PROCURAL prima avrei avuto difficoltà a passare a OOP, ma trovo che passare da OOP a Procedural sia estremamente facile.

    
risposta data 30.12.2011 - 19:05
fonte

Leggi altre domande sui tag