2010-08-12 10 views
55

OOP è probabilmente il paradigma di programmazione più utilizzato nella progettazione software di oggi. La mia domanda è: quale altro paradigma (i) può competere con esso e può stare al posto di oop? Per chiarire questa domanda, non sto chiedendo quali altri paradigmi ci siano. Ce ne sono molti e vorrei sapere quale:Alternative alla programmazione orientata agli oggetti?

  • È stato usato in pratica, non solo in teoria.
  • Può competere con oop, quindi può essere utilizzato in un grande progetto senza o con minimo dolore.
  • Può essere utilizzato per sviluppare un'app desktop con logica aziendale, database e così via.
  • Non è utilizzato con il compagno di oop, ma può sostituire oop.

E se c'è qualche, quali sono i pro/contro di esso, per cui è meglio/peggio di oop, quali lingue sono i migliori di usarlo, cosa su come utilizzare in lingue popolari, ha qualsiasi schemi di progettazione e può sostituire totalmente oop?

+1

@Justin Ardini: so che ce ne sono molti, ma quale si può competere con oop? @Tobiasopdenbrouw & Macros: Ok, cambiato. –

+0

OOP è popolare perché è popolare, se non si inghiotte l'OOP koolaid non avrete progetti su cui lavorare ... – aoeu256

+0

La programmazione orientata ai dati è più semplice, in cui vi interessano le raccolte di oggetti e le loro relazioni piuttosto che singoli oggetti, dove i metodi "db object" forniscono l'incapsulamento. JSON e sexpressions addolciscono SQL, CSS, HTML, Excel, gli script di shell sono popolari e utili, ma "programmazione" significa OOP o procedurale. OOP è ringraziato per la manutenibilità dei programmi Python/JavaScript nonostante OOP sia il 20% del codice. Closures & JSON possono essere utilizzati il ​​90% delle volte al posto degli oggetti e sono più semplici e facili da usare. – aoeu256

risposta

32

Functional programming è un altro paradigma di programmazione che è popolare, soprattutto in ambito accademico. Il miglior esempio di un linguaggio di programmazione funzionale è Haskell e Standard ML.

La differenza fondamentale tra la programmazione funzionale e programmazione orientata agli oggetti è che si sta programmando nel senso di dati flusso anziché flusso di controllo. Vedi la presentazione Taming Effects with Functional Programming di Simon Peyton-Jones per una buona introduzione.

Un buon esempio di programmazione funzionale utilizzata nel settore è Erlang. Viene utilizzato principalmente nei sistemi di telecomunicazione, distribuiti e fault tolerant. Vedi la presentazione Erlang - Software for a concurrent World di Joe Armstrong.

Esistono anche nuovi linguaggi di programmazione funzionale che combinano la programmazione funzionale con OOP. Due buoni esempi sono F# per la piattaforma .NET e Scala per la piattaforma Java; possono spesso utilizzare le librerie esistenti sulla piattaforma scritte in altre lingue.

La tendenza dei nuovi linguaggi di programmazione ora è Multi-paradigm, in cui più paradigmi come programmazione orientata agli oggetti e programmazione funzionale sono combinati nella stessa lingua.

+0

La programmazione funzionale può sostituire oop o viene utilizzata con oop? Esistono esempi reali di app scritte in questo paradigma? E i modelli di design? –

+4

Scala si propone di integrare funzionalità di linguaggi orientati agli oggetti e funzionali. – Philipp

+4

Buona risposta, tuttavia penso che la programmazione funzionale e la programmazione orientata agli oggetti non siano due facce di una medaglia, possono perfettamente coesistere (come hai detto). È più simile a: Procedural VS Object-oriented, Imperative VS Functional. Lisp è un linguaggio funzionale procedurale popolare, Java è un linguaggio imperativo orientato agli oggetti. – fhd

1

FP - La programmazione funzionale è un paradigma di programmazione estremamente popolare che esiste da molto tempo e che negli ultimi anni ha iniziato a diventare sempre più importante. FP favorisce l'immutabilità su mutabilità, ricorsione e funzioni senza effetti collaterali. Alcuni esempi di linguaggi fp popolari sono Erlang, Scala, F #, Haskell e Lisp (tra gli altri).

+1

Scala è un buon esempio della combinazione OOP/FP. –

8

L'elaborazione procedurale era tutto prima che OOP venisse attivato, ha prodotto alcune grandi applicazioni del mondo reale (in effetti, la maggior parte in origine) e molti sistemi operativi.

Si può certamente essere utilizzato in prodotti di grandi dimensioni con un minimo di dolore, e un massimo di prestazioni

+4

Sì, e innumerevoli studi di metriche hanno dimostrato che si esaurisce il gas a circa 150 K LOC. Guardate l'SDK di Windows circa all'ora di Petzold per un trattato su come la Programmazione Strutturata si disintegra sotto carichi complessi: funzioni con 8 argomenti, 2 sono strutture con 6-10 membri. Spingere i dati dentro e fuori da ogni unità di calcolo alla fine non funziona. – Rob

+1

OK ma - quante applicazioni hanno questo grande? Il problema con OOP è estremamente complicato da comprendere e progettato per vaste applicazioni, ma è l'impostazione predefinita anche per quelle di piccole dimensioni. Questo ha l'effetto opposto di complicare l'applicazione più piccola non necessariamente. – niico

+0

La programmazione orientata agli oggetti a volte fa sì che le applicazioni siano più lunghe a causa della necessità di costruttori e di metodi getter/setter lunghi. Questi primi linguaggi procedurali come C non avevano il supporto per la Meta-programmazione, nessun sistema di polimorfismo, chiusure o sintassi semplice per la rappresentazione di dati JSON/generali. C non ha nemmeno supportato argomenti opzionali. Monadi e Macro possono essere utilizzati per creare potenti linguaggi specifici di dominio incorporati. – aoeu256

-5

ci sono paradigmi attualmente che può davvero sostituire OOP.Il problema con (beneficio di) OOP è che svolge un enorme lavoro per te, rilasciando automaticamente risorse, convalidando dati, ecc., E facilita la convalida del codice, senza menzionare la stragrande maggioranza delle biblioteche esistenti al mondo sono scritti in un linguaggio OOP come C++, C# o Java. La realtà di andare avanti senza tali librerie di grandi dimensioni e simili è estremamente dubbia.

In mondi di nicchia o accademici, troverai molte programmazioni funzionali. Tuttavia, se vuoi veramente fare un grande progetto, OOP è l'unica strada da percorrere.

Penso che la programmazione generica stia per diventare un nuovo paradigma. Tuttavia, è ancora in fase di sviluppo e solo C++/D offre una programmazione generica davvero buona.

+3

OOP non fa nessuna di queste cose.Può renderli più facili, ma solo se il design del framework OO li include, come in .Net, o se si è disposti a scriverli. –

+0

Tecnicamente, hai ragione. Tuttavia, la realtà è che tutti i linguaggi OO popolari includono la gestione delle risorse come funzionalità di orientamento agli oggetti. Sarebbe difficile trovare un linguaggio che supporti direttamente l'oggetto che non lo includa. E il PO è chiaramente interessato alla pratica, non alla teoria. La gestione delle risorse di – Puppy

+2

non è una caratteristica dell'orientamento agli oggetti: la gestione delle risorse è una caratteristica dei linguaggi di programmazione imperativi, che possono essere orientati agli oggetti o meno. Non conosco alcun linguaggio puramente funzionale che ti costringa a gestire esplicitamente le risorse di sistema. –

2

Vector Relational Data Modeling viene utilizzato per creare modelli di informazioni eseguibili con semantica pertinente del dominio all'interno di Global Information Network Architecture, un broker di modello di rete residente.

Problemi correlati