Domanda

    

Questa domanda ha già una risposta qui:

         

Ho lavorato come sviluppatore per gli ultimi 4 anni, con i 4 anni precedenti a quello dello studio dello sviluppo del software in un college. Nei miei 4 anni nel settore ho fatto qualche lavoro in VB6 (che era uno scherzo), ma la maggior parte di essa è stata in C # / ASP.NET. Durante questo tempo, ho spostato da un paradigma procedurale "oggetto-aware" per un paradigma orientato agli oggetti.

Ultimamente sono stato curioso di altri paradigmi di programmazione là fuori, così ho pensato di chiedere altri sviluppatori le loro opinioni sulle somiglianze e le differenze tra questi paradigmi, in particolare per OOP? In OOP, trovo che ci sia una forte attenzione sui rapporti e le interazioni logiche tra i concetti. Quali sono la mente fronti si deve essere in per gli altri paradigmi?

È stato utile?

Soluzione

Di gran lunga i migliori spiegazioni dei paradigmi di programmazione si trovano nelle opere di Peter van Roy. Soprattutto nel libro concetti, tecniche e modelli di programmazione del computer da Peter Van Roy e Seif Haridi . ( Ecco il wiki compagna .) CTM utilizza il multi-paradigma di Distributed linguaggio di programmazione Oz per introdurre tutti i principali paradigmi di programmazione.

Peter van Roy ha anche fatto questo incredibile poster che mostra i 34 principali paradigmi e le loro relazioni e posizioni diverse dell'asse . Il manifesto è fondamentalmente una versione incredibilmente compressa del CTM. Una spiegazione più approfondita di quel manifesto è contenuta nel paradigmi di programmazione per i manichini: Ciò che ogni programmatore dovrebbero sapere che è apparso come un capitolo nel libro Nuovo computazionali paradigmi per Computer Music , a cura di G. e A. Assayag Gerzso.

Un altro grande libro che dimostra diversi paradigmi di programmazione importante è Struttura e Interpretazione dei programmi per elaboratore da Harold Abelson e Gerald Jay Sussman . Questo libro è stata la base di CS101 del MIT per diversi decenni. Un corso tenuto da Abelson e Sussman stessi è stato registrato a una formazione aziendale per Hewlett Packard nel 1986 .

La differenza principale tra MC e SICP è che la CTM dimostra maggior parte dei principali paradigmi utilizzando un linguaggio che li sostiene (per lo più distribuita Oz, ma anche alcuni altri). SICP OTOH li dimostra da attuazione di loro in una lingua che fa non sostenerli in modo nativo (un sottoinsieme di Scheme). Vedendo Object-Orientamento implementato in una decina di righe di codice è maledetto impressionante.

Si possono trovare registrazioni video e materiale didattico del corso di primavera del 2005 sul sito web del MIT OpenCourseWare . Un'altra registrazione del corso dal MIT di breve durata ArsDigita Università progetto . SICP è stato insegnato anche presso altre università, infatti esso viene insegnato a Berkley adesso .

In una nota personale, la mia esperienza è stata che davvero comprensione di un paradigma di programmazione è possibile solo

  • un paradigma alla volta e
  • in lingue forza si nel paradigma

Idealmente, si dovrebbe usare un linguaggio che prende il paradigma alle estreme conseguenze. In linguaggi multi-paradigma, è troppo facile "barare" e ripiegare su un paradigma che si sta più comodi con. E l'utilizzo di un paradigma come una libreria è soltanto realmente possibile in linguaggi come Scheme che sono specificamente progettati per questo tipo di programmazione. Imparare la programmazione funzionale pigro in Java, per esempio, non è una buona idea, anche se ci sono le librerie per questo.

Ecco alcuni dei miei preferiti:

  • orientamento agli oggetti in generale : Auto
    • oggetto-orientamento basato sui prototipi : Auto
    • class-based orientamento agli oggetti : Neolingua
      • statica orientamento agli oggetti basato su classi : Eiffel
    • invio multiplo basato OO : Dylan
    • funzionale + orientamento agli oggetti : Scala
  • programmazione funzionale : Haskell
    • pura programmazione funzionale : Haskell
      • pigro pura programmazione funzionale : Haskell
    • programmazione funzionale statico : Haskell
    • dinamica programmazione funzionale : Clojure
  • programmazione imperativa : Lua
  • programmazione concorrente : Clojure
    • message-passing programmazione concorrente : Erlang
  • metaprogrammazione : Scheme
  • linguaggio di programmazione orientato : intenzionale dominio Workbench

Altri suggerimenti

Ecco il mio prendere:

  • La programmazione funzionale significa scrittura di funzioni che prendono nei dati e operano su di esso. È costruire applicazioni di grandi dimensioni da funzioni di montaggio.
  • programmazione incapsulato dati orientata agli oggetti e i suoi gestori insieme in un singolo componente che mappa su modelli mentali bene. È costruire applicazioni di grandi dimensioni fuori di oggetti che collaborano.
  • Programmazione dichiarativa (ad esempio, SQL) separa ciò che è fatto da come è fatto. Dite un database relazionale che cosa ti piacerebbe fare e lasciare la guida al motore di query.

questo link cerca di spiegare qualcosa che ho usato nel corso degli ultimi due decenni. Lo cito perché è dimostrabilmente utile e penso che conta come un paradigma, perché per usarlo è necessario pensare in un modo particolare.

Il modo diverso si deve pensare è che quando si analizza un problema, piuttosto che chiedere cosa gli oggetti ci sono e quali azioni si svolgono, si inizia con i requisiti generali e chiedono Che cosa deve essere detto?

Da questo, si sceglie o progettare un dominio specifico della lingua (DSL), e lo stato il problema in quella lingua.

Tale nesso spiega una determinata lingua per descrivere in modo dinamico cambiare le interfacce utente di dialogo. La sua attuazione dipende da una particolare struttura di controllo, Esecuzione differenziale. Quello che compie è un ordine di grandezza di riduzione nel codice sorgente, con meno possibilità di errori di codifica. Questi risparmi possono poi essere spesi per rendere l'interfaccia utente più sofisticato.

Per altri tipi di problemi, altre strutture di controllo sono adeguate, ma il concetto di lavoro attraverso un DSL ben scelto, rendendo il codice sorgente molto più piccolo, più facilmente modificati, e meno soggetto a errori, è l'approccio comune.

Credo paradigmi di programmazione funzionale e OOP sono meglio valutati identificando i tipi di problemi di cui sono la migliore espressione. Spesso questi paradigmi diventano semplicemente carro dei vincitori e sono propagandato come toccasana, piuttosto che classificandoli dagli spazi problema si rivolgono.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top