Paradigma de programació
Es denominen paradigmes de programació a les formes de classificar els llenguages de programació en funció de les seues característiques. Els idiomes es poden classificar en múltiples paradigmes.
Alguns paradigmes s'ocupen principalment de les implicancias per al model d'eixecució del llenguage, com permetre efectes secundaris o si la seqüència d'operacions està definida pel model d'eixecució. Atres paradigmes es referixen principalment a la forma en que s'organisa el còdic, com agrupar un còdic en unitats junt en l'estat que modifica el còdic. No obstant, uns atres es preocupen principalment per l'estil de la sintaxis i la gramàtica.
Els paradigmes de programació comunes inclouen:[1][2]
- imperatiu en el que el programador instruïx a la màquina cóm canviar el seu estat,
- procedimental que agrupa les instruccions en procediments,
- orientat a objectes que agrupa les instruccions en la part de l'estat en el que operen,
- declarativo en el que el programador simplement declara les propietats del resultat desijat, pero no cóm calcular-ho
- matemàtic en el que el resultat desijat es declara com la solució d'un problema d'optimisació
- reactiu en el que es declara el resultat desijat en #fluix de senyes i la propagació del canvi
Les tècniques simbòliques com la reflexió, que permeten que el programa es referixca a sí mateixa, també poden ser considerades com un paradigma de programació. No obstant, açò és compatible en els principals paradigmes i, per lo tant, no és un paradigma real per dret propi.
Per eixemple, els llenguages que cauen en el paradigma imperatiu tenen dos característiques principals: establixen l'orde en el que ocorren les operacions, en construccions que controlen explícitament eixe orde, i permeten efectes secundaris, en els que l'estat pot modificar-se en un moment determinat, dins d'una unitat de còdic, i després llegir en un moment diferent dins d'una unitat de còdic diferent. La comunicació entre les unitats de còdic no és explícita. Mentrestant, en la programació orientada a objectes, el còdic s'organisa en objectes que contenen un estat que solament és modificat pel còdic que forma part de l'objecte. La majoria dels llenguages orientats a objectes també són llenguages imperatius. Pel contrari, els llenguages que s'ajusten al paradigma declarativo no indiquen l'orde en el que eixecutar les operacions. En el seu lloc, proporcionen una série d'operacions disponibles en el sistema, junt en les condicions en les que es permet que s'eixecute cada una. L'implementació del model d'eixecució del llenguage rastreja qué operacions són lliures d'eixecutar i elegix l'orde en forma independent. Més en Comparació de llenguages de programació de múltiples paradigmes.
Llenguages de programació procedimentals
[editar | editar còdic]El desenroll de llenguages procedimentals va donar lloc a llenguages servixen de vocabulari relacionat en el problema a resoldre. Eixemples d'estos llenguages són:
- COBOL (COmmon Business-Oriented Language) - fa servir térmens com a archiu, moure i copiar.
- FORTRAN (Formula TRANslation) - fa servir terminologia del llenguage matemàtic.
- ALGOL (ALGOritmic Language) - enfocat a ser un llenguage apropiat per a definir algoritmes, també pot servir de llenguage matemàtic.
- PL/I (Programing Language One) - un híbrit comercial/científic de propòsit general en soport per a usuaris.
- BASIC (Begginers All purpose Symbolic Instruction Code) - es va desenrollar per a permetre escriure programes a més persones.
- C - un llenguage de propòsit general.
Tots estos llenguages seguixen un paradigma procedimental. Descriuen, pas a pas, exactament el procés que deu seguir-se per a resoldre un problema específic. l'eficàcia i eficiència de cada solució depenen de l'experiència, l'inventiva i l'habilitat del programador.
Crítica
[editar | editar còdic]Alguns investigadors de llenguages de programació critiquen la noció de paradigmes com a classificació dels llenguages de programació, per eixemple Harper,[3] i Krishnamurthi.[4] Sostenen que molts llenguages de programació no poden classificar-se estrictament en un paradigma, sino que inclouen característiques de varis paradigmes.
Història
[editar | editar còdic]A lo llarc del temps s'han desenrollat diferents enfocaments de programació, que s'han identificat com a tals en el seu moment o retrospectivament. Un dels primers enfocaments conscientment identificat com a tal és la programació estructurada, defesa des de mediats de la década de 1960. El concepte de "paradigma de programació" com tal data a lo manco de 1978, en la conferència Premi Turing de Robert W. Floyd, titulada Els paradigmes de la programació, que cita la noció de paradigma utilisada per Thomas Kuhn en el seu L'estructura de les revolucions científiques (1962).[5] Els primers llenguages de programació no tenien paradigmes de programació clarament definits i a voltes els programes feyen un us extensiu de les sentències goto, l'us lliberal d'estes sentències conduïa a "còdic espagueti" en el que era difícil treballar. Açò va dur al desenroll de paradigmes de programació estructurats que no permetien l'us de sentències goto i només permetien l'us de construccions de programació clarament definides.[6]
Còdic màquina
[editar | editar còdic]Els paradigmes de programació de nivell més baix són el còdic màquina, que representa directament l'instruccions (el contingut de la memòria del programa) com una seqüència de números, i el llenguage ensamblador, en el que les instruccions de la màquina es representen per mig de mnemònics i les direccionar de memòria poden rebre etiquetes simbòliques. A voltes es denominen primera generació i segona generació.
En la década de 1960, els llenguages ensambladors es varen desenrollar per a soportar COPIAT de biblioteques i capacitats de generació i preprocesamiento de macros condicionals prou sofisticades, CRIDADES a (subrutinas), variables externes i seccions comunes (globals), permetent una reutilisació significativa del còdic i l'aïllament de les especificidad de l'hardware per mig de l'us d'operadors llògics com READ/WRITE/GET/PUT. L'ensamblador s'utilisava, i encara s'utilisa, en sistemes en els que el temps és un factor crític i, a sovint, en sistemes embebidos, ya que oferix el control més directe de lo que fa la màquina.
Programació orientada a objectes
[editar | editar còdic]- Artícul principal → Programació orientada a objectes.
Despuix de l'us generalisat dels llenguages procedimentals, es varen crear els llenguages de programació orientada a objectes (POO), com Simula, Smalltalk, C++, Eiffel, Python, PHP, Java, i C#. En estos llenguages, els senyes i els métodos per a manipular-los es mantenen com una unitat anomenada object. En una perfecta encapsulación, una de les característiques distintives de la programació orientada a objectes, l'única forma de que un atre objecte o usuari puga accedir a les senyes és a través dels métodos de l'objecte. Aixina, el funcionament intern d'un objecte pot ser canviat sense afectar a cap còdic que utilise l'objecte. Encara existix certa controvèrsia plantejada per Alexander Stepanov, Richard Stallman[7] i atres programadors, sobre l'eficàcia del paradigma de programació orientada a objectes front al paradigma procedimental. La necessitat de que cada objecte tinga métodos associatius du a alguns escèptics a associar la POO en unflament del software; un intent de resoldre este dilema va aplegar a través del polimorfisme.
Ya que la programació orientada a objectes es considera un paradigma, no un llenguage, és possible crear inclús un llenguage ensamblador orientat a objectes. Ensamblador d'alt nivell (HLA) és un eixemple d'açò que soporta completament tipos de senyes alvançades i programació en llenguage ensamblador orientada a objectesPlantilla:Snd a pesar dels seus orígens primerencs. Per lo tant, els diferents paradigmes de programació poden vore's més be com memes motivacionals dels seus defensors, en lloc de representar necessàriament el progrés d'un nivell al següent. Les comparacions precises de l'eficàcia dels paradigmes en competència a sovint són més difícils per la terminologia nova i diferent aplicada a entitats i processos similars, junt en numeroses distincions d'implementació entre idiomes.
Atres paradigmes
[editar | editar còdic]La programació lliterària, com una forma de programació imperativa, estructura els programes com una ret centrada en el ser humà, com en un ensaig d'hipertext: la documentació és part integral del programa, i el programa s'estructura seguint la llògica de l'exposició en prosa, en lloc de la conveniència del compilador.
Independentment de la branca imperativa, es varen desenrollar paradigmes de programació declarativa. En estos llenguages, se li diu a l'ordenador quin és el problema, no cóm resoldre-hoPlantilla:Snd el programa s'estructura com un conjunt de propietats a trobar en el resultat esperat, no com un procediment a seguir. Donada una base de senyes o un conjunt de regles, l'ordenador intenta trobar una solució que complixca totes les propietats desijades. Un arquetip de llenguage declarativo és el llenguage de quarta generació SQL. SQL, i la família dels llenguages funcionals i la programació llògica.
La programació funcional és un subconjunt de la programació declarativa. Els programes escrits en este paradigma utilisen funciones, blocs de còdic destinats a comportar-se com funcions matemàtiques. Els llenguages funcionals desalientan els canvis en el valor de les variables a través d'assignació, fent un gran us de recursión en el seu lloc.
El paradigma de programació llògica considera la computació com raonament automatizado sobre un cos de coneiximent. Els fets sobre el domini del problema s'expressen com a fòrmules llògiques, i els programes s'eixecuten aplicant regles d'inferència sobre elles fins que es troba una resposta al problema, o es demostra que el conjunt de fòrmules és inconsistente.
La programació simbòlica és un paradigma que descriu programes capaços de manipular fòrmules i components del programa com a senyes.[2] Els programes poden modificar-se a sí mateixos i semblar que "deprenen", lo que els fa adequats per a aplicacions com l'inteligència artificial, els sistemes experts, el processament del llenguage natural i els jocs d'ordenador. Els llenguages que soporten este paradigma inclouen Lisp i Prolog.
La programació diferenciable estructura els programes per a que puguen ser diferenciats en tot moment, normalment per mig de diferenciació automàtica.[8][9]
Soport per a múltiples paradigmes
[editar | editar còdic]La majoria de llenguages de programació soporten més d'un paradigma de programació per a permetre als programadors utilisar l'estil de programació més adequat i les construccions del llenguage associades per a un treball determinat.[10]
Resum
[editar | editar còdic]
Aixina com l'ingenieria de software (com a procés) es definix per mig de diferents #metodologia, els llenguages de programació (com a models de computació) es definixen per mig de diferents paradigmes. Alguns llenguages estan dissenyats per a admetre un paradigma (Smalltalk admet programació orientada a objectes, Haskell admet programació funcional), mentres que atres llenguages de programació admeten múltiples paradigmes (com Object Pascal, C++, Java, JavaScript, C#, Scala, Visual Basic, Common Lisp, Scheme, Perl, PHP, Python, Ruby, Oz i F# ). Per eixemple, els programes escrits en C ++, Object Pascal o PHP poden ser purament procedimentals, purament orientats a objectes o poden contindre elements d'abdós o atres paradigmes. Els dissenyadors i programadors de software decidixen cóm utilisar eixos elements paradigmàtics.
En la programació orientada a objectes, els programes es tracten com un conjunt d'objectes que interactuen. En la programació funcional, els programes es tracten com una seqüència d'evaluacions de funcions sense estat. Quan es programen computadores o sistemes en molts processadors, en la programació orientada a processos, els programes es tracten com a conjunts de processos concurrents que actuen sobre estructures de senyes compartides llògiques.
Molts paradigmes de programació són tan coneguts per les tècniques que prohibixen com per les que habiliten. Per eixemple, la programació funcional pura no permet l'us d'efectes secundaris, mentres que la programació estructurada no permet l'us de l'instrucció "go to". En part per esta raó, els nous paradigmes a sovint són considerats doctrinarios o massa rígits per els qui estan acostumats a estils anteriors.[12] No obstant, evitar certes tècniques pot facilitar la comprensió del comportament del programa i demostrar teoremes sobre la correcció del programa.
Els paradigmes de programació també es poden comparar en models de programació, lo que permet invocar un model d'eixecució utilisant solament una API. Els models de programació també es poden classificar en paradigmes segons les característiques del model d'eixecució.
Per a la computació paralela, és comuna usar un model de programació en lloc d'un llenguage. La raó és que els detalls de l'hardware paralel es filtren en les #abstracció utilisades per a programar l'hardware. Açò fa que el programador tinga que mapear patrons en l'algoritme sobre patrons en el model d'eixecució (que s'han insertat per una fuga d'hardware en l'abstracció). Com a conseqüència, cap llenguage de programació paralel s'adapta be a tots els problemes de càlcul. Per lo tant, és més convenient utilisar un llenguage seqüencial base i insertar cridades a la API en models d'eixecució paralela a través d'un model de programació. Dits models de programació paralela es poden classificar d'acort en #abstracció que reflectixen l'hardware, com la memòria compartida, la memòria distribuïda en pas de mensages, nocions de lloc visibles en el còdic, etc. Estos poden considerar-se sabors del paradigma de programació que s'apliquen solament a llenguages i models de programació paralels.
Referències
[editar | editar còdic]- ↑ Nørmark, Kurt. Overview of the four main programming paradigms. Aalborg University, 9 May 2011. Retrieved 22 September 2012.
- ↑ 2,0 2,1 Erro en la cita: L'element
<ref>no és vàlit; puix no n'hi ha una referència en text nomenadasymbolic-programming-lisp - ↑ Cambridge University Press (ed.): «What, if anything, is a programming paradigm?» (en en). FifteenEightyFour.
- ↑ Krishnamurthi, Shriram. “Teaching programming languages in a post-linnaean age”. Sigplan 43 (11): 81-83. ACM. doi:..
- ↑ “The Paradigms of Programming” (1979). Communications of the ACM 22 (8): 455-460. doi:.
- ↑ (2006) Java 5: Objects First (en en). ISBN 9780763737207.
- ↑ «mode inheritence, cloning, hooks & OOP» (en en). Google Groups.
- ↑ pdf «Backpropagation with Callbacks: Foundations for Efficient and Expressive Differentiable Programming».Alvanços en Sistemes de Processament d'Informació Neuronal 31.Curran Associates, Inc..
- 10201-10212.
- ↑ Innes, Mike (27 de juliol 2018). “sysml.cc/doc/37.pdf On Machine Learning and Programming Languages”. SysML Conference 2018.
- ↑ «Llenguage de programació multiparadigma». Mozilla Foundation.
- ↑ (2004) Concepts, Techniques, and Models of Computer Programming, MIT Press. ISBN 978-0-262-22069-9.
- ↑ Frank Rubin. “'GOTO Considered Harmful' Considered Harmful”. Communications of the ACM 30 (3): 195–196. doi:.
Vore també
[editar | editar còdic]
Referències
[editar | editar còdic]- Este artícul conté una traducció derivada de «Paradigma de programación» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.