Quale linguaggio dovrebbe essere usato per insegnare la progettazione e lo sviluppo orientati agli oggetti nell'università? [chiuso]

6

La mia comprensione è che il C ++ viene solitamente offerto come prima lingua OOP e come secondo linguaggio di programmazione (dopo C) nel mio paese (Bangladesh). L'ho insegnato più volte e il problema che ho incontrato è che gli studenti tendono spesso a pensare al C ++ come un'estensione di C, cioè C con cin e cout ! Questo mi ha portato a pensare di insegnare Java come prima lingua OOP nel prossimo semestre.

Qual è la tua opinione? Vorrei alcuni suggerimenti da programmatori professionisti e accademici.

    
posta Punter 25.10.2011 - 18:29
fonte

11 risposte

3

Penso che il linguaggio C ++ sia la prima lingua migliore di C. Puoi pensare di iniziare il corso di introduzione alla programmazione con C ++ ma senza cose OOP. Quindi il curriculum sarà come -

  • Introduzione alla programmazione con C ++
  • Introduzione Programmazione orientata agli oggetti con C ++ (nel seguente semestre)

Ci sono molti vantaggi -

  • Questo risolve il problema principale che hai menzionato- mentre insegnavi l'OOP con il C ++ agli studenti che avevano esperienza precedente di C, pensano che stiano semplicemente imparando una nuova lingua, non un paradigma (OOP). Ma insegnando entrambi i corsi con C ++, sapranno che stanno per imparare qualcosa di nuovo.
  • Puoi usare costrutti di linguaggio C ++ più semplici come cin / cout, riferimenti, std :: string ecc. Non sto dicendo di lasciare dei puntatori. Puoi ancora insegnare i puntatori dopo aver introdotto il riferimento senza lasciare C ++. Allora sarà molto più facile cogliere IMHO.

Se inizi con C ++, potresti dover utilizzare alcune funzioni membro di varie classi di librerie come std :: string, File IO. Ma non esitare. Chiamare o utilizzare una funzione membro di una classe non richiede conoscenze OOP. OOP è richiesto per progettare una classe. E puoi tenere da parte una o due lezioni nel corso introduttivo per dare un'idea dei costrutti C e delle differenze tra C e C ++. Allora gli studenti conosceranno anche C. E la mia richiesta è - dare enfasi su STL e programmazione generica con C ++. Perché le persone usano Java per il suo enorme supporto bibliotecario. Ma molti di loro non sanno che la maggior parte di questi esiste anche in C ++ STL. In bocca al lupo.

    
risposta data 27.10.2011 - 07:57
fonte
25

Se stai cercando di insegnare OOP (puro), ti consiglio di non usare C ++ e usare invece un linguaggio OO puro. Uno dei punti di forza e di debolezza del C ++ è che è un linguaggio multi-paradigma, con OOP che ne è solo una piccola parte. Aggiungi la sua (principalmente) retrocompatibilità con C e non sorprende che molte persone che hanno familiarità con C cadano nella trappola "C with cout".

Consiglio vivamente di utilizzare un linguaggio OO puro come Smalltalk se vuoi insegnare ai tuoi studenti i concetti di OO. Sì, è improbabile che trovino un lavoro a scrivere app Smalltalk ma non è questo il punto. Se sono ragionevolmente competenti nello scegliere i linguaggi di programmazione, impareranno facilmente un'altra lingua. A questo punto sei non cercando di renderli "programmatori X" ma vuoi che ottengano le intuizioni in un paradigma specifico così da scegliere un linguaggio che sia una pura implementazione del paradigma e molto probabilmente non familiari agli studenti dovrebbero aiutare a insegnare perché eviterai i momenti di "Oh, conosco una scorciatoia qui".

    
risposta data 26.10.2011 - 01:23
fonte
10

Direi che dipende dal grado.

Insegnerei C # o Java per CIS / MIS perché questo è ciò che viene utilizzato quando si programmano applicazioni aziendali reali nel mercato odierno.

C ++, Scala o Smalltalk per studenti CS. Esistono molti linguaggi di programmazione educativi progettati sia per insegnare che per imporre l'OOP.

    
risposta data 25.10.2011 - 19:08
fonte
5

Dipende dal tuo obiettivo. Se vuoi che gli studenti escano dal programma con competenze commerciabili nel mondo reale, allora C # e Java sono entrambi buoni candidati.

Tuttavia, se vuoi insegnare ai tuoi studenti una lingua che è facile da imparare, ha buone proprietà OO e facile da insegnare, raccomando vivamente Python. Ho insegnato Python a persone senza esperienza di programmazione, e loro lo raccolgono molto rapidamente. La sintassi è semplice e molto vicina alla prosa del linguaggio naturale. Le funzionalità di OO non sono così robuste come C #, ma ci sono abbastanza elementi fondamentali per l'insegnamento.

    
risposta data 26.10.2011 - 18:49
fonte
3

Prenderò il meglio di entrambi i mondi in un certo senso e insegnerò loro l'Objective-C. È un superset rigido di C in modo da poter rilasciare il codice C e non preoccuparti se si tratta di questo. Ha un modello di oggetti in stile Smalltalk che tende ad avere un aspetto leggermente più pulito rispetto a C ++ e Java. La sintassi è un po 'strana e richiederebbe Mac o l'uso di GNUstep, ma se si desidera un linguaggio che bilancia pratica e purezza un po' meglio di C ++ o Java, lo sceglierei. Mi ha sicuramente aiutato ad apprenderlo per quanto riguarda l'apprendimento di Object Oriented Design.

    
risposta data 26.10.2011 - 02:21
fonte
3

Non insegnare Java. Il problema con Java è che tutto quello che puoi imparare è che l'ereditarietà è un martello e assolutamente ogni problema è un chiodo. Inoltre, la terminologia di Java confonde pesantemente argomenti come l'orientamento agli oggetti e la gestione della memoria, non quello che si vuole insegnare agli studenti poveri che sarebbero fortunati a trovare una di quelle cose insegnate indipendentemente.

Vuoi insegnare OOP. Non "Gli oggetti sono i nostri Dei. L'ereditarietà sarà la nostra arma divina contro tutti i problemi di programmazione.Non metteremo in discussione l'algoritmo della Garbage Collection ed esploreremo altre forme di gestione della memoria.I primitivi saranno guardati dall'alto in basso da tutti. Esisterremo puramente all'interno del Sacro Leggi della Macchina Virtuale. "

Il fatto che i tuoi studenti vedano C ++ come "C con cout " è un fallimento dell'insegnamento di C prima e quindi non del corretto aggiornamento a C ++. Il solito rimedio è solo quello di non insegnare affatto a C, dato che è davvero ridondante farlo e molto dannoso. Oppure potresti semplicemente assumere insegnanti più intelligenti. Ma non è molto praticabile perché è davvero difficile risolvere questo problema dopo che è stato creato.

C ++ fa un ottimo linguaggio OOP perché il C ++ non confonde l'orientamento degli oggetti con la gestione della memoria e consente di valutare correttamente un paradigma quando è possibile utilizzare anche le alternative se lo si desidera. Come puoi imparare a non usare OOP se sono tutte offerte linguistiche?

    
risposta data 26.10.2011 - 21:56
fonte
2

Credo che la scelta della lingua sia meno importante dell'insieme di librerie. Permettimi di chiarire.

Ho avuto diverse classi C ++ (1 ° linguaggio OO) presso l'Univ. È qui che mi hanno insegnato i meccanismi OO come l'ereditarietà e il polimorfismo, ma a me mancava una comprensione "funzionante" di OO. Sento davvero di aver iniziato a capire come scrivere programmi OO (tutto è un oggetto, gli oggetti si parlano, ecc.) Solo dopo aver avviato un progetto java più grande, dove ho dovuto usare le librerie JDK. In C ++ mi è sempre sembrato possibile cavarsela con grandi blocchi procedurali nascosti in non-oggetti.

Presumo che otterrei lo stesso effetto (cioè lavorare con gli oggetti) dall'usare l'STL sul lato C ++.

    
risposta data 25.10.2011 - 18:46
fonte
2

Dipende dall'enfasi principale. Se sei interessato principalmente alla programmazione della programmazione, con un linguaggio OO come il veicolo, allora sarebbe preferibile il C ++. Se sei principalmente interessato a insegnare OO, con programmazione più o meno secondaria, allora probabilmente è preferibile Java. Sulla base dei tuoi commenti, quest'ultimo sembra essere il caso.

Modifica: dovrei aggiungere che IMO, insegnare OO come concetto in sé è principalmente un errore. Penso che il vero concetto sia la programmazione generica, con OO come caso speciale / specifico di una forma limitata di programmazione generica. Da questo punto di vista, il C ++ è chiaramente preferibile.

    
risposta data 25.10.2011 - 19:20
fonte
2

Il C ++ viene spesso scelto come lingua OO nelle classi principalmente perché è una delle lingue più utili da conoscere. Un sacco di lavoro per i programmatori C ++. Ma, come affermato in precedenza, può facilmente portare le persone a intrappolare la codifica in esso come C, e a malapena a toccare il pezzo OO di esso.

Credo che una lingua che potrebbe essere adatta sia Ruby , che è in qualche modo desiderabile e altamente OO. Di solito raccomando Python su Ruby, come preferisco, ma in questo caso potrebbe essere meglio, a causa di tutto intrinsecamente essere un oggetto. È utile, ha un bel po 'di librerie da sviluppare e un bel po' di attività.

Credo che se vuoi evitare la trappola C, devi rimuoverli dal mondo di C / C ++ in modo che siano costretti a imparare una nuova lingua, così come i concetti di OO che ne derivano.

    
risposta data 26.10.2011 - 17:24
fonte
1

Contattami con la folla di Smalltalk.

Tuttavia, un'altra cosa che sarebbe utile insegnare è che ci sono più modi di uno per rivestire il cavallo OOP. Ad esempio, ho scoperto che molte persone abituate al ramo C ++ / Java dell'albero familiare OOP hanno un sacco di problemi a capire come funziona il sistema di classe S4 di R (basato sul sistema OOP di Dylan).

Sono fermamente convinto che l'apprendimento di una vasta gamma di paradigmi del linguaggio di programmazione sia utile per essere in grado di raccogliere rapidamente nuove tecnologie in futuro, ed essere esposti a come più lingue gestiscono i concetti OOP può solo aiutare.

Forse il modo ideale sarebbe parlare prima in concetti puri e poi mostrare come i linguaggi diversi implementano (o no) quei concetti.

    
risposta data 26.10.2011 - 20:51
fonte
0

Penso che Java sia una cattiva idea. Odio questo linguaggio quindi non può essere obiettivo, ma imparare OOP in un ambiente in cui tutto è OO può essere molto confuso. Il fatto che Java sia stato creato solo per OOP non lo rende il migliore in questo dominio.

Nella mia scuola, abbiamo usato OCaml come nostro primo linguaggio di programmazione (stavo programmando molto prima ma mai l'ho imparato in corso). A dispetto del fatto che insegna programmazione funzionale (che probabilmente non ti è utile), la parte OO è molto pulita e facile da leggere / capire. Per me, riunisce molte grandi cose per scopi di apprendimento: alto livello, strongmente tipizzato, multiparadigmi e una buona libreria standard.

Dire che C ++ è la scelta migliore perché è il più utile non è rilevante. I corsi di programmazione dovrebbero insegnare come apprendere la programmazione e non solo come programmare l'uso di una determinata lingua.

    
risposta data 27.10.2011 - 11:16
fonte

Leggi altre domande sui tag