2010-08-12 15 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.