You are on page 1of 11

Fundación Colegio Universitario

Misión Sucre de Caracas

República Bolivariana de Venezuela


Ministerio para el Poder Popular para la Educación Superior
Colegio Universitario de Caracas – 1era Aldea Universitaria de Girardot
Maracay, Edo. Aragua – Municipio Girardot

Realizado por:
Rafael Vallenilla 15.992.324
Guillermo Uzcàtegui 16.551.294
Gilberto Mijarez 12.565.648
David Mieres 12.564.158

Sistemas II, Prof.: Lorenzo López


Sección Única de Ing. Sistemas, Turno “C”
10 agosto 2009
Paradigma de Programación
Un paradigma de programación representa un enfoque particular o filosofía para
la construcción del software. No es mejor uno que otro sino que cada uno tiene ventajas
y desventajas. También hay situaciones donde un paradigma resulta más apropiado que
otro.
Un paradigma de programación provee (y determina) la visión y métodos de un
programador en la construcción de un programa o subprograma. Diferentes paradigmas
resultan en diferentes estilos de programación y en diferentes formas de pensar la
solución de problemas (con la solución de múltiples “problemas” se construye una
aplicación).
Existen múltiples paradigmas, difícilmente un lenguaje de programación pueda
clasificarse solamente en un paradigma. Por ejemplo: Smalltalk y Java son lenguajes
basados en el paradigma orientado a objeto. El lenguaje de programación Scheme, en
cambio, soporta sólo programación funcional. En cambio Python, soporta múltiples
paradigmas.

Tipos de paradigmas de programación más comunes:

• El paradigma imperativo o por procedimientos es considerado el más común


y está representado, por ejemplo, por el C o por BASIC.

• El paradigma funcional está representado por la familia de lenguajes (en


particular Scheme), ML o Haskell.

• El paradigma lógico un ejemplo es PROLOG.

• El paradigma orientado a objetos un lenguaje completamente orientado a


objetos es Smalltalk.

Paradigma Imperativo o por Procedimientos


La programación imperativa, en contraposición a la programación declarativa es
un paradigma de programación que describe la programación en términos del estado del
programa y sentencias que cambian dicho estado. Los programas imperativos son un
conjunto de instrucciones que le indican al computador cómo realizar una tarea.

La implementación de hardware de la mayoría de computadores es imperativa;


prácticamente todo el hardware de los computadores está diseñado para ejecutar código
de máquina, que es nativo al computador, escrito en una forma imperativa. Esto se debe
a que el hardware de los computadores implementa el paradigma de las Máquinas de
Turing. Desde esta perspectiva de bajo nivel, el estilo del programa está definido por los
contenidos de la memoria, y las sentencias son instrucciones en el lenguaje de máquina
nativo del computador (por ejemplo el lenguaje ensamblador).

Los lenguajes imperativos de alto nivel usan variables y sentencias más


complejas, pero aún siguen el mismo paradigma. Las recetas y las listas de revisión de
procesos, a pesar de no ser programas de computadora, son también conceptos
familiares similares en estilo a la programación imperativa; cada paso es una
instrucción, y el mundo físico guarda el estado (Zoom).

Los primeros lenguajes imperativos fueron los lenguajes de máquina de los


computadores originales. En estos lenguajes, las instrucciones fueron muy simples, lo
cual hizo la implementación de hardware fácil, pero obstruyendo la creación de
programas complejos. Fortran, cuyo desarrollo fue iniciado en 1954 por John Backus en
IBM, fue el primer gran lenguaje de programación en superar los obstáculos
presentados por el código de máquina en la creación de programas complejos.

Algunos Lenguajes Imperativos


• BASIC

• C

• C#

• C++

• Fortran

• Pascal

• Java

• Perl

• PHP

• Lua

Paradigma Funcional
La Programación funcional es un paradigma de programación declarativa basado
en la utilización de funciones matemáticas.

Utilidad
El objetivo del paradigma funcional es conseguir lenguajes expresivos y
matemáticamente elegantes, en los que no sea necesario bajar al nivel de la máquina
para describir el proceso llevado a cabo por el programa, y evitando el concepto de
estado del cómputo. La secuencia de computaciones llevadas a cabo por el programa se
regiría única y exclusivamente por la reescritura de definiciones más amplias a otras
cada vez más concretas y definidas, usando lo que se denominan definiciones dirigidas.
Todo esto con el objetivo de familiarizar a los estudiantes con un lenguaje
elegante en el cual se pueda manejar más fácilmente y así los programas sean menos
extensos y complejos.
Otro de los objetivos primordiales de dicho paradigma es buscar satisfacer las
necesidades del usuario con respecto a operaciones matemáticas y convertirse en un
lenguaje más expresivo.

Características
Los programas escritos en un lenguaje funcional están constituidos únicamente
por definiciones de funciones, entendiendo éstas no como subprogramas clásicos de un
lenguaje imperativo, sino como funciones puramente matemáticas, en las que se
verifican ciertas propiedades como la transparencia referencial (el significado de una
expresión depende únicamente del significado de sus subexpresiones), y por tanto, la
carencia total de efectos laterales.

Otras características propias de estos lenguajes son la no existencia de


asignaciones de variables y la falta de construcciones estructuradas como la secuencia o
la iteración (lo que obliga en la práctica a que todas las repeticiones de instrucciones se
lleven a cabo por medio de funciones recursivas).

Existen dos grandes categorías de lenguajes funcionales: los funcionales puros y


los híbridos. La diferencia entre ambos estriba en que los lenguajes funcionales híbridos
son menos dogmáticos que los puros, al admitir conceptos tomados de los lenguajes
imperativos, como las secuencias de instrucciones o la asignación de variables. En
contraste, los lenguajes funcionales puros tienen una mayor potencia expresiva,
conservando a la vez su transparencia referencial, algo que no se cumple siempre con un
lenguaje funcional híbrido.

Lenguajes Funcionales
Entre los lenguajes funcionales puros, cabe destacar a Haskell y Miranda. Los
lenguajes funcionales híbridos más conocidos son Scala, Lisp, Scheme, Ocaml, SAP y
Standard ML (estos dos últimos, descendientes del lenguaje ML). Erlang es otro
lenguaje funcional de programación concurrente. R también es un lenguaje funcional
dedicado a la estadística.[1] Recientemente Microsoft Research está trabajando en el
lenguaje F# (Functional#).
Entre otros lenguajes que se podrían utilizar para programación funcional se
podrían incluir a Perl, pues, aunque es un lenguaje de propósito muy general, se pueden
realizar programas usando exclusivamente funciones definidas por el usuario. Así como
Python, como lenguaje que incorpora el paradigma funcional.
Paradigma Lógico
La programación lógica consiste en la aplicación del corpus de conocimiento
sobre lógica para el diseño de lenguajes de programación; no debe confundirse con la
disciplina de la lógica computacional.
La programación lógica comprende dos paradigmas de programación: la
programación declarativa y la programación funcional. La programación declarativa
gira en torno al concepto de predicado, o relación entre elementos. La programación
funcional se basa en el concepto de función (que no es más que una evolución de los
predicados), de corte más matemático.

Paradigma Orientado a Objetos


La Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) es un
paradigma de programación que usa objetos y sus interacciones para diseñar
aplicaciones y programas de computadora. Está basado en varias técnicas, incluyendo
herencia, modularidad, polimorfismo y encapsulamiento. Su uso se popularizó a
principios de la década de 1990. Actualmente son muchos los lenguajes de
programación que soportan la orientación a objetos.
La programación orientada a objetos es una nueva forma de programar que trata
de encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y
amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:

• Clase: definiciones de las propiedades y comportamiento de un tipo de objeto


concreto. La instanciación es la lectura de estas definiciones y la creación de un
objeto a partir de ellas.

• Herencia: (por ejemplo, herencia de la clase D a la clase C) Es la facilidad


mediante la cual la clase D hereda en ella cada uno de los atributos y
operaciones de C, como si esos atributos y operaciones hubiesen sido definidos
por la misma D. Por lo tanto, puede usar los mismos métodos y variables
públicas declaradas en C. Los componentes registrados como "privados"
(private) también se heredan, pero como no pertenecen a la clase, se mantienen
escondidos al programador y sólo pueden ser accedidos a través de otros
métodos públicos. Esto es así para mantener hegemónico el ideal de OOP.

• Objeto: Entidad provista de un conjunto de propiedades o atributos (datos) y


de comportamiento o funcionalidad (métodos) los mismos que
consecuentemente reaccionan a eventos. Se corresponde con los objetos reales
del mundo que nos rodea, o a objetos internos del sistema (del programa). Es
una instancia a una clase.

• Método: Algoritmo asociado a un objeto (o a una clase de objetos), cuya


ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de
vista del comportamiento, es lo que el objeto puede hacer. Un método puede
producir un cambio en las propiedades del objeto, o la generación de un
"evento" con un nuevo mensaje para otro objeto del sistema.

• Evento: Un suceso en el sistema (tal como una interacción del usuario con la
máquina, o un mensaje enviado por un objeto). El sistema maneja el evento
enviando el mensaje adecuado al objeto pertinente. También se puede definir
como evento, a la reacción que puede desencadenar un objeto, es decir la acción
que genera.

• Mensaje: Una comunicación dirigida a un objeto, que le ordena que ejecute


uno de sus métodos con ciertos parámetros asociados al evento que lo generó.

• Propiedad o atributo: Contenedor de un tipo de datos asociados a un objeto


(o a una clase de objetos), que hace los datos visibles desde fuera del objeto y
esto se define como sus características predeterminadas, y cuyo valor puede ser
alterado por la ejecución de algún método.

• Estado interno: Es una variable que se declara privada, que puede ser
únicamente accedida y alterada por un método del objeto, y que se utiliza para
indicar distintas situaciones posibles para el objeto (o clase de objetos). No es
visible al programador que maneja una instancia de la clase.

• Componentes de un objeto: Atributos, identidad, relaciones y métodos.

• Representación de un objeto: Un objeto se representa por medio de una


tabla o entidad que esté compuesta por sus atributos y funciones
correspondientes.

En comparación con un lenguaje imperativo, una "variable", no es más que un


contenedor interno del atributo del objeto o de un estado interno, así como la "función"
es un procedimiento interno del método del objeto.

Características de la POO (Programación Orientada a Objetos)


Hay un cierto desacuerdo sobre exactamente qué características de un método de
programación o lenguaje le definen como "orientado a objetos", pero hay un consenso
general en que las características siguientes son las más importantes:

• Abstracción: Denota las características esenciales de un objeto, donde se


capturan sus comportamientos. Cada objeto en el sistema sirve como modelo de
un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y
"comunicarse" con otros objetos en el sistema sin revelar cómo se implementan
estas características. Los procesos, las funciones o los métodos pueden también
ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para
ampliar una abstracción.
• Encapsulamiento: Significa reunir a todos los elementos que pueden
considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción.
Esto permite aumentar la cohesión de los componentes del sistema. Algunos
autores confunden este concepto con el principio de ocultación, principalmente
porque se suelen emplear conjuntamente.

• Principio de ocultación: Cada objeto está aislado del exterior, es un


módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que
específica cómo pueden interactuar con los objetos de la clase. El aislamiento
protege a las propiedades de un objeto contra su modificación por quien no
tenga derecho a acceder a ellas, solamente los propios métodos internos del
objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden
cambiar el estado interno de un objeto de maneras inesperadas, eliminando
efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto,
permitiendo un acceso directo a los datos internos del objeto de una manera
controlada y limitando el grado de abstracción. La aplicación entera se reduce a
un agregado o rompecabezas de objetos.

• Polimorfismo: Comportamientos diferentes, asociados a objetos distintos,


pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizará el
comportamiento correspondiente al objeto que se esté usando. O dicho de otro
modo, las referencias y las colecciones de objetos pueden contener objetos de
diferentes tipos, y la invocación de un comportamiento en una referencia
producirá el comportamiento correcto para el tipo real del objeto referenciado.
Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama
asignación tardía o asignación dinámica. Algunos lenguajes proporcionan
medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como
las plantillas y la sobrecarga de operadores de C++.

• Herencia: Las clases no están aisladas, sino que se relacionan entre sí,
formando una jerarquía de clasificación. Los objetos heredan las propiedades y
el comportamiento de todas las clases a las que pertenecen. La herencia organiza
y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser
definidos y creados como tipos especializados de objetos preexistentes. Estos
pueden compartir (y extender) su comportamiento sin tener que volver a
implementarlo. Esto suele hacerse habitualmente agrupando los objetos en
clases y estas en árboles o enrejados que reflejan un comportamiento común.
Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple.

• Recolección de basura: La Recolección de basura o Garbage Collection es


la técnica por la cual el ambiente de Objetos se encarga de destruir
automáticamente, y por tanto desasignar de la memoria, los Objetos que hayan
quedado sin ninguna referencia a ellos. Esto significa que el programador no
debe preocuparse por la asignación o liberación de memoria, ya que el entorno
la asignará al crear un nuevo Objeto y la liberará cuando nadie lo esté usando.
En la mayoría de los lenguajes híbridos que se extendieron para soportar el
Paradigma de Programación Orientada a Objetos como C++ u Object Pascal,
esta característica no existe y la memoria debe desasignarse manualmente.

Lenguajes Orientados a Objetos


Entre los lenguajes orientados a objetos se destacan los siguientes:

• ABAP
• ABL Lenguaje de programación de OpenEdge de Progress Software
• ActionScript
• ActionScript 3
• Ada
• C++
• C#
• Clarion
• D
• Object Pascal (Delphi)
• Flex builder (adobe)
• Gambas
• Harbour
• Eiffel
• Java
• JavaScript (la herencia se realiza por medio de la programación basada en
prototipos)
• Léxico (en castellano)
• Objective-C
• Ocaml
• Oz
• R
• Perl (soporta herencia múltiple. La resolución se realiza en preorden, pero puede
modificarse al algoritmo C3 por medio del módulo Class::C3 en CPAN)
• PHP (en su versión 5)
• Python
• Ruby
• Smalltalk (Proyecto investigativo. Influenció a Java.)
• Magik (SmallWorld)
• Vala
• VB.NET
• Visual FoxPro (en su versión 6)
• Visual Basic 6.0
• XBase++
• Lenguaje DRP

Muchos de estos lenguajes de programación no son puramente orientados a


objetos, sino que son híbridos que combinan la POO con otros paradigmas.
Al igual que C++ otros lenguajes, como OOCOBOL, OOLISP, OOPROLOG y
Object REXX, han sido creados añadiendo extensiones orientadas a objetos a un
lenguaje de programación clásico.

Un nuevo paso en la abstracción de paradigmas de programación es la


Programación Orientada a Aspectos (POA). Aunque es todavía una metodología en
estado de maduración, cada vez atrae a más investigadores e incluso proyectos
comerciales en todo el mundo.

Los tipos de Paradigmas de Programación, según Ambler,


son:
• Operacionales
• Declarativos
• Demostrativos

Paradigma Operacional
Los lenguajes que siguen este paradigma especifican la programación como un
conjunto de secuencias computacionales que se ejecutan paso a paso.

Dentro del paradigma operacional (siempre siguiendo la clasificación de Ambler),


podemos encontrar el paradigma imperativo y el paradigma orientado a objetos.

Los lenguajes que siguen el paradigma imperativo se centran en la acción, es


decir, la computación se ve como una secuencia de acciones (especificadas paso a paso)
que convierten los datos de entrada iniciales en los datos de salida finales.

Algunos lenguajes que siguen este paradigma serian el COBOL, FORTRAN,


BASIC, C, Ada, Pascal, etc.

Los lenguajes orientados a objetos son la evolución natural de los lenguajes que
siguen el paradigma imperativo. Se podría decir, que el modulo o tipo abstracto
evoluciona al concepto de objeto.

Bajo la perspectiva del paradigma orientado a objetos, la programación consiste


en definir cuales son los objetos adecuados para resolver un problema determinado y
resolver el problema mediante la interacción entre los distintos objetos a través del
intercambio de mensajes.

Algunos lenguajes que siguen este paradigma serían el Smalltalk, Eiffel, C++,
Java u Object Pascal.

Aclarar que la orientación a objetos se incluye en un paradigma propio porque


sus características conducen a una filosofía diferente de resolución de problemas.
Paradigma Declarativo
Un lenguaje declarativo se construye estableciendo hechos, reglas, restricciones,
ecuaciones, transformaciones u otras propiedades que debe tener el conjunto de valores
que constituyen la solución.

A partir de esta información, el sistema debe de ser capaz de derivar un esquema


de evaluación que nos permita computar una solución, es decir, no existe una
descripción paso a paso de cómo llegar a la solución.

Habitualmente se suelen incluir características operacionales para mejorar la


eficiencia en la resolución de problemas (en este caso, a los lenguajes se les denomina
pseudo declarativos).

Dentro del paradigma declarativo podemos distinguir el paradigma funcional


(Haskell, Erlang), lógico (Prolog), transformacional (CLIPS, JESS) y relacional (SQL).

Paradigma Demostrativo
En los lenguajes que siguen el paradigma demostrativo no es necesario
especificar las operaciones que se deben ejecutar paso a paso para obtener la solución,
ni tampoco es necesario especificar un conjunto de restricciones que debe cumplir el
conjunto de valores que constituyen la solución.

You might also like