Perché dobbiamo imparare la programmazione procedurale prima di apprendere la programmazione orientata agli oggetti [chiuso]

9

Sono al 4 ° anno in un'università IT adesso, e quando parlo con il mio professore di questo argomento rifiuta la mia opinione e mi fa una critica molto pesante (nella mia università, ci veniva insegnato C (ANSI) (nella classe di programmazione procedurale - al 1 ° anno di università) prima del C ++ (in classe OOP nel 2 ° anno) e altri ...

Ma all'età di 13 anni mio fratello è stato insegnato, da me, Java prima e nient'altro. Ora, può fare quasi tutto ciò che un normale studente del secondo anno può fare con Java.

Per i professionisti, mi piacerebbe sapere perché pensi che prima dovremmo insegnare la programmazione procedurale.

    
posta Luke 23.03.2011 - 03:37
fonte

12 risposte

23

Riepilogo rapido:

  1. Perché nel mondo reale, prima o poi, devi lavorare con codice procedurale.

  2. Perché le lingue procedurali possono funzionare come un'estensione, o un'introduzione, alle lingue orientate agli oggetti, invece di essere solo un'alternativa.

  3. Complemento alla risposta 2. Perché O.O.P. è più complesso della Programmazione procedurale, quindi è meglio imparare la Programmazione procedurale, in primo luogo.

  4. Perché nel mondo reale, i programmatori lavorano e combinano diversi modi per risolvere i problemi, A.K.A. "programmazione multiparadigm", non solo un singolo paradigma.

  5. La maggior parte dei linguaggi di programmazione è multiparadigm, a un certo livello, anche se i loro progettisti o sviluppatori comuni dicono il contrario.

  6. [NEW] Poiché la programmazione modulare, comunemente mescolata e confusa con la programmazione procedurale, può essere applicata a O.O.P. Pertanto la domanda può essere letta come "Perché dobbiamo imparare la programmazione modulare prima di apprendere la programmazione orientata agli oggetti"

Descrizione noiosa estesa:

Il punto 1 è molto chiaro, non un'ulteriore spiegazione.

Punto 2, Classi, Ereditarietà, Polimorfismi, Interfacce, ecc.

Punto 3, codice Pascal procedurale prima di imparare Pascal Object Oriented, quando sono arrivato mi sono detto: "guarda, le classi sono come piccoli programmi procedurali ... ... e puoi farli parlare tra loro, cool !!!".

Ho sentito la stessa cosa da persone che passavano dalla semplice C alla C plus plus.

Punto 4, La maggior parte delle volte i programmatori combinano diverse tecniche di programmazione o paradigmi, o modi per risolvere un problema. Funzionale, procedurale, O.O.P., logico.

Anche Java "Pure O.O." non è una programmazione semplice come dice.

+1 punto per "Programmazione procedurale" invece di "Programmazione strutturata". O programmazione modulare. Questi sono importanti.

Tuttavia, molte volte questi termini sono insegnati insieme e usati in modo intercambiabile, non lo sono. Programmazione strutturata, include molti concetti, non solo l'uso delle procedure, e uno di questi sta facendo in modo che il programma non assomigli al "Codice degli spaghetti".

Oggi leggo diversi "puri" O.O. programmi che assomigliano al "Codice degli spaghetti orientato agli oggetti", il che significa che il programmatore ha utilizzato O.O.P., ma il suo codice sembra un disastro.

Molte volte, posso leggere un O.O. codice e dire che il programmatore ha appreso la programmazione strutturata prima di O.O.P., perché il codice è chiaro e organizzato.

E per la programmazione modulare, ho visto diverse app. in C ++ e PHP che non usano i moduli. *

    
risposta data 23.03.2011 - 19:30
fonte
18

Penserei che l'analogia sarebbe simile alla matematica. Devi prima imparare alcuni concetti di base (addizione / sottrazione / ...) per passare ad argomenti più complessi (algebra / calcolo). Il programma procedurale è molto lineare ed è più facile cogliere il flusso del controllo mentre si impara la sintassi. OOP è forse pensato per essere più complesso, si basa sui costrutti più semplici usati nei linguaggi procedurali ma è più astratto e più difficile da capire. Iniziare con linguaggi come C ti avvicina all'hardware e ti porta ad affrontare problemi di allocazione della memoria e puntatori, che devi capire ma che non riesci davvero ad usare in linguaggi come Java / C #. C'è un certo valore nell'essere esposti a questo a scuola, indipendentemente dal fatto che sia il primo o il secondo.

FWIW, è destinato a cambiare alla fine. Quando ho iniziato la scuola, abbiamo imparato in Pascal e PL / 1. Non siamo arrivati a C fino alla classe di lingue avanzate (che mi ha dato). Non ho acquisito Java fino alla scuola di specializzazione - non era ancora stata inventata!

    
risposta data 23.03.2011 - 03:48
fonte
12

La programmazione orientata agli oggetti è una raccolta di snippet procedurali in modo organizzato. Penso che la lezione che stai imparando sia che la metodologia orientata agli oggetti aiuta a mantenere l'organizzazione e la manutenibilità. Ci sono molti programmatori che non possono fare questa distinzione e sostengono che i loro programmi sono orientati agli oggetti quando sono più procedurali.

    
risposta data 23.03.2011 - 03:49
fonte
10

Non lo fai.

Abbiamo appreso programmazione funzionale prima, con Scheme. Quindi ci siamo spostati in procedural, then OOP e then programmazione dichiarativa. E che ci crediate o no, mentre già conoscevo la programmazione, penso che in realtà fosse più semplice anche per altre persone: perché FP è proprio come la matematica! Quindi conoscete già le basi.

Ne ho discusso molte volte con me stesso e alla fine sono giunto alla conclusione che dipende in realtà da quanto il tuo insegnante ti insegna i concetti.

Non esiste una risposta singola perché:

  • Iniziare con qualcosa procedurale come C (o anche assemblare) potrebbe essere una buona scelta, perché impari come funzionano davvero i computer

  • Partire da qualcosa di Java orientato agli oggetti potrebbe essere una buona scelta, perché è relativamente facile imparare e applicare OOP alla vita reale e perché ti insegna a ** formare

  • Iniziare con la programmazione funzionale come Scheme potrebbe essere una buona scelta perché ti insegna a pensare in modo più astratto (in termini di funzioni anziché di variabili), che alla fine ti rende un programmatore migliore

Se il tuo insegnante non lo insegna bene, allora non importa molto con che cosa inizi; saranno praticamente gli stessi.

    
risposta data 24.07.2011 - 08:15
fonte
6

Un linguaggio può essere orientato agli oggetti come C ++, Java o C #. E puoi iniziare con queste lingue. Ma il punto è che, anche con questi linguaggi OO, devi prima imparare la programmazione procedurale, poi OOP. Penso che lo stesso sia stato fatto da te a tuo fratello.

    
risposta data 23.03.2011 - 06:14
fonte
3

La programmazione procedurale, almeno in un linguaggio come C, spoglia la programmazione in una pratica molto nuda delle ossa: algoritmi e strutture dati, e ad un livello di astrazione che è un mezzo felice tra codice sorgente comprensibile dall'uomo e codice assembly.

In questo modo, gli studenti possono apprendere un po 'di scienza (algoritmi, strutture dati) e un po' di ingegneria (compilazione di macchine sorgente-gt; object- & gt ;, architettura von-neuman (probabile) allo stesso tempo.

OOP, via C ++ / obj-C introduce un modello di organizzazione del codice, che è solo una cosa da imparare. Ciò potrebbe rendere un po 'più difficile l'apprendimento dei concetti sopra.

OOP via Java (tra gli altri) va anche oltre estraendo l'hardware e l'ambiente. Ora il prodotto sottostante non è un codice macchina, ma una sorta di intermediario che non rivela come funziona l'hardware sottostante, ma l'effetto è che permette allo studente di concentrarsi sui modelli di organizzazione del codice.

Alla fine penso che sia un compromesso tra imparare come funziona l'hardware o imparare un modello di organizzazione del codice. Per quanto è più importante, non lo so davvero. Il mondo reale richiede la conoscenza di entrambi, almeno in una certa misura.

Intuirò che un programma di laurea che inizia con una programmazione procedurale di basso livello probabilmente produce scienziati informatici / ingegneri informatici, e un programma che inizia con concetti di livello superiore produce ingegneri software / sviluppatori / programmatori.

    
risposta data 23.03.2011 - 16:16
fonte
3

Il coraggio degli oggetti OOP è costituito da una programmazione procedurale.

Se non riesci a fare un ciclo for, usa correttamente i puntatori, dichiara i tipi e le funzioni che non sarai in grado di scrivere interfacce per le tue classi e tanto meno fare in modo che gli interni facciano qualcosa che valga la pena fare.

In realtà non impareresti OOP in una classe introduttiva, sarebbe solo sintassi: saltare direttamente in OOP renderebbe le cose più complicate da comprendere (in un primo momento) di quanto non sia già.

OOP non tratta di alcune sintassi dichiaranti per formare classi, si tratta di strutture dati, schemi di progettazione, polimorfismo, ereditarietà e composizione.

Per fare tutte queste cose devi conoscere la programmazione procedurale, qualcosa di facile da fare in C. Puoi portare la maggior parte tutto ciò che impari con C su Java o C ++, potresti dover ripensare alcune cose che hai dato per scontato in C, MA ... Devi conoscere la grammatica (dove ti trovi nella C introduttiva) per scrivere frasi (devi scrivere le procedure per definire le interfacce) e poi i paragrafi (devi conoscere le strutture dei dati) allora e poi conosci alcuni modelli di design (tragedia, commedia, eroe imperfetto, come interagiscono e quando non li usi) prima di poter scrivere romanzi completi (sistema OOP completo).

Se fossi in te, prenderei alcuni dei seguenti libri: The C Programming Language , The Java Programming Language , Design Patterns , Gang of Four e Pattern Hatching . Prenderò sicuramente una copia di The C Programming Language se fossi serio su C / C ++.

Se vuoi solo andare fino in fondo Java (e farlo per $) id prendere alcuni libri su modelli di progettazione Java e su come utilizzare Java con i server web Apache e Tomcat e alcuni libri sulla programmazione di database SQL. Java dà tanto calcio al web, scusami ma PHP ha avuto una storia di tonnellate di buchi nella sicurezza che lo rendevano un vero rompicapo dato che Windows non riusciva a ottenere il server rootato o i database SQL iniettati.

Dovresti anche avere il tempo di imparare SQL, Oracle MySQL Postgresql e MSSQL hanno molto in comune riguardo alla sintassi, ma se dovessi sceglierne uno uno per me scelgo Postgresql solo perché è concesso in licenza BSD invece di GPL (dovresti cercare un confronto e contrasto anche sulle licenze GPL / BSD)

    
risposta data 24.07.2011 - 05:54
fonte
2

Devo dire che la maggior parte del codice scritto in linguaggi orientati agli oggetti come Java non è in realtà orientato agli oggetti. Comprendere veramente le idee dietro OO è difficile, in quanto il codice OO presumibilmente è in gran parte procedurale.

Tuttavia, questo non è niente di veramente sbagliato nello scrivere codice procedurale in Java. Sì, ci sono vantaggi nel fare OO, ma non è qualcosa che vorrei confondere con un programmatore iniziale. Quindi su questa base, non vedo nulla di sbagliato nell'insegnare Java. Non aspettarti OO reale da esso, ma funziona.

Tuttavia, Java nasconde molti dettagli di basso livello su ciò che accade all'interno del computer. C lascia questi molto di più allo scoperto. Si può fare un buon esempio che gli studenti dovrebbero imparare come funzionano questi dettagli di basso livello prima di usare un linguaggio che si prenda cura di questi per loro. Ma puoi anche dimostrare che dovresti ignorare quei dettagli e impararli in seguito.

    
risposta data 23.03.2011 - 17:28
fonte
2

Molti altri hanno già risposto a questo tema, ma penso che valga la pena di affermarlo in modo più esplicito.

Anche se inizi a imparare a programmare con un linguaggio orientato agli oggetti come Java, inizi ad apprendere tecniche di programmazione procedurale prima di arrivare ai concetti OO . Quando insegni a un nuovo programmatore Java, non li introduci prima in oggetti e classi, li introduci in istruzioni e variabili. Quando lo studente è in grado di imparare molto sugli oggetti e sulle classi, ha già almeno le basi della programmazione procedurale.

Quindi, per lo meno, devi imparare la programmazione procedurale in Java e quindi imparare la programmazione orientata agli oggetti in Java. Sia che tu trascorra un anno intero in programmazione procedurale o che tu passi le prime settimane del corso di programmazione, sia che tu usi una lingua diversa o meno, sto solo discutendo sui dettagli.

    
risposta data 24.07.2011 - 07:55
fonte
0

Per essere eccessivamente sincero al riguardo, penso che l'impulso per questo derivi principalmente dai vecchi programmatori che desiderano vecchi tempi.

Prima di dire qualsiasi altra cosa, io non non sostengo alcuna contesa per i programmatori più anziani, molti di loro sono semplicemente straordinariamente abili. Sfortunatamente a volte quelli che non lo sono, che si lavano e non sono mai stati veramente bravi a programmare fin dall'inizio ... diventano dei professori quando non possono hackerarlo nel "mondo reale". (Non tutti i professori ... ma ... MOLTI)

L'OOP non è il santo graal della programmazione che è stata concepita per essere, né la programmazione procedurale è una reliquia. È bello sapere almeno alcuni di entrambi, ma penso che la pratica generale di ciò che finisce per essere insegnato come programmazione procedurale tende a essere un enorme spreco di tempo e sforzi. Dobbiamo imparare la programmazione nel mondo accademico, non solo uno stile o l'altro. Attribuisco un po 'di codice terribile e idee sbagliate a questo, incluso il mio.

    
risposta data 23.03.2011 - 05:56
fonte
0

Due motivi per me: una programmazione OO è venuta a risolvere problemi di programmazione procedurale. Quindi, scrivendo alcune codifiche procedurali e poi le stesse cose in OO, è più facile capire la differenza.

C'è anche un ulteriore elemento qui: i due approcci per educare su argomenti di programmazione. Si può iniziare con il minimo indispensabile (esempio assemblaggio, in molti casi procedurale, alcuni altri iniziano con circuiti) e poi salire (verso OO / Funzionale / Gestito). L'altro approccio è quello di iniziare dal mondo fisico (ad esempio Browser / Windows 7, ecc.) E quindi iniziare ad andare più in profondità. Ci sono pro e contro per ogni approccio. La tua università ha scelto la prima e iniziare con procedurale. Potrebbero esserci alcune motivazioni o hanno appena copiato qualcun altro: -).

    
risposta data 23.03.2011 - 12:40
fonte
0

Non c'è altra ragione che l'inerzia istituzionale. Guardate la CMU, hanno buttato tutto il loro curriculum OOP e lo hanno sostituito con la programmazione funzionale. Quindi, ancora una volta, la risposta alla tua domanda è che si tratta di una scelta arbitraria fatta dagli amministratori di qualunque scuola tu stia frequentando. Nel caso qualcuno si stia interrogando sulle affermazioni fattuali che ho fatto qui è il post su come cambiare il curriculum alla CMU da un professore / amministratore: Teaching FP to freshmen .

    
risposta data 23.03.2011 - 05:45
fonte

Leggi altre domande sui tag