Está en la página 1de 38

P a ra d i gm a s y L e n gu a j e s

I ntr o d u c c i n

Lic. Ricardo Monzn


Ing. Rubn Bernal

Parte 1: Introduccin

Paradigmas y Lenguajes

PARADIGMAS Y LENGUAJES
LICENCIATURA EN SISTEMAS DE INFORMACION
FACULTAD DE CIENCIAS EXACTAS Y NATURALES Y
AGRIMENSURA-UNNE
2DO. AO PRIMER CUATRIMESTRE
PROFESORES TEORIA:
LIC. RICARDO MONZON
ING. RUBEN BERNAL
PROFESORES DE PRACTICO
EXP. LAURA MACIEL
LIC. SONIA CORRALES
LIC. MONICA RINGA
LIC. MARIELA FERRARI
AYUDANTES DE PRACTICA
Carlos Romero
Leandro Rodrguez
HORARIOS DE CLASES TEORICAS:
LUNES DE 18:00 a 20:00
SABADOS DE 09:30 A 12:30.
HORARIOS DE CLASES PRACTICAS:
Grupo M-Z: LUNES DE 14:00 A 16:00. MIERCOLES
DE 15:00 A 17:00 AULA MAGNA.
Grupo A-L: LUNES DE 16:00 A 18:00. MIERCOLES
DE 13:00 A 15:00 AULA MAGNA.
HORARIOS DE LABORATORIO:
A confirmar.

Pgina 2

Parte 1: Introduccin

Paradigmas y Lenguajes

PARTE I: INTRODUCCION.
TEMA 1: PARADIGMAS y Paradigmas de
Programacin
Definicin Terica
Un paradigma est constituido por los supuestos tericos
generales, las leyes y las tcnicas para su aplicacin que
adoptan los miembros de una determinada comunidad
cientfica.
Las leyes explcitamente establecidas y los supuestos tericos.
Por ejemplo, las leyes de movimiento de Newton forman parte
del paradigma newtoniano y las ecuaciones de Maxwell forman
parte del paradigma que constituye la teora electromagntica
clsica.
El instrumental y las tcnicas instrumentales necesarios para
hacer que las leyes del paradigma se refieran al mundo real. La
aplicacin en astronoma del paradigma newtoniano requiere el
uso de diversos telescopios, junto con tcnicas para su
utilizacin y diversas tcnicas para corregir los datos recopilados.
Un componente adicional de los paradigmas lo constituyen
algunos principios metafsicos muy generales que guan el
trabajo dentro del paradigma.
Podemos decir que, los paradigmas son marcos de referencia que
imponen reglas sobre cmo se deben hacer las cosas, indican qu
es vlido dentro del paradigma y qu est fuera de sus lmites.
Un paradigma distinto implica nuevas reglas, elementos, lmites y
maneras de pensar, o sea implica un cambio.
Los paradigmas pueden ser considerados como patrones de
pensamiento para la resolucin de problemas. Desde luego siempre
teniendo en cuenta los lenguajes de programacin, segn nuestro
inters de estudio.
Un paradigma de programacin es entonces una forma de
representar y manipular el conocimiento. Representa un
enfoque particular o filosofa para la construccin del
software. No es mejor uno que otro sino que cada uno tiene
ventajas y desventajas. Tambin hay situaciones donde un
paradigma resulta ms apropiado que otro.
Pgina 3

Parte 1: Introduccin

Paradigmas y Lenguajes

Tipos de Paradigmas de Programacin


1. Paradigmas Imperativo: Modelo abstracto que consiste en un
gran almacenamiento de memoria donde la computadora almacena
una representacin codificada de un clculo y ejecuta una
secuencia de comandos que modifican el contenido de ese
almacenamiento. Algoritmos + Estructura de Datos = Programa.
Son aquellos que facilitan los clculos por medio de cambios de
estado, entendiendo como estado la condicin de una memoria de
almacenamiento. Los lenguajes estructurados en bloques, se
refieren a los mbitos anidados, es decir los bloques pueden estar
anidados dentro de otros bloques y contener sus propias variables.
La RAM representa una pila con una referencia al bloque que est
actualmente activo en la parte superior.
2. Paradigmas Procedimentales - Modelos de Desarrollo:
Orientado a Eventos y a Agentes. Secuencia computacional
realizada etapa a etapa para resolver el problema. Su mayor
dificultad reside en determinar si el valor computado es una
solucin correcta del problema.
3. Paradigmas Declarativos. - Modelos de Desarrollo: Funcional,
Lgico y de Flujo de Datos. Se construye sealando hechos, reglas,
restricciones, ecuaciones, transformaciones y otras propiedades
derivadas del conjunto de valores que configuran la solucin.
3.1 Paradigma Funcional: Modelo matemtico de
composicin funcional donde el resultado de un clculo es la
entrada del siguiente, y as sucesivamente hasta que una
composicin produce el valor deseado.
Como su nombre lo dice operan solamente a travs de
funciones. Cada funcin devuelve un solo valor, dada una lista
de parmetros. No se permiten asignaciones globales,
llamados efectos colaterales. La programacin funcional
proporciona la capacidad para que un programa se modifique
as mismo, es decir que pueda aprender.
3.2. Paradigma lgico: Esta programacin se basada en un
subconjunto
del
clculo
de
predicados,
incluyendo
instrucciones escritas en formas conocidas como clusulas de
Horn. Este paradigma puede deducir nuevos hechos a partir
Pgina 4

Parte 1: Introduccin

Paradigmas y Lenguajes

de otros hechos conocidos. Un sistema de clusulas de Horn


permite un mtodo particularmente mecnico de demostracin
llamado resolucin.
La programacin lgica, la otra variedad de la programacin
declarativa, usa como base sentencias de lgica de primer
orden, en concreto las clusulas de Horn (restriccin del
Clculo de Predicados de Primer Orden) y su forma de
ejecucin es el principio de resolucin de Robinsn.
Trata de representar conocimiento
(predicados) entre objetos (datos).

mediante

relaciones

Un programa lgico consiste en un conjunto de relaciones, y


su ejecucin vendr a demostrar que una nueva relacin se
sigue se las que constitua el programa. Las relaciones sern
especificadas con reglas y hechos.
La ejecucin de programas lgicos consiste en la demostracin
de hechos sobre las relaciones por medio de preguntas.
4. Paradigmas Demostrativos.- Modelos de Desarrollo:
Gentico. Cuando se programa bajo un paradigma demostrativo
(tambin llamada programacin por ejemplos), el programador no
especifica procedimentalmente cmo construir una solucin sino
que presentan soluciones de problemas similares.
5. Paradigma Orientado a Objeto: disciplina de ingeniera de
desarrollo y modelado de software que permite construir ms
fcilmente sistemas complejos a partir de componentes
individuales. Objetos + Mensajes = Programa.
Describen los lenguajes que soportan objetos en interaccin. Un
objeto es un grupo de procedimientos que comparten un estado. El
trmino de orientado a objetos fue utilizado originalmente para
distinguir aquellos lenguajes basados en objetos que soportaban
clases de objetos y la herencia de atributos de un objeto padre por
parte de sus hijos.

Pgina 5

Parte 1: Introduccin

Paradigmas y Lenguajes

Ejemplos de paradigmas de programacin:


El paradigma imperativo es considerado el ms comn y est
representado, por ejemplo, por el C o por BASIC..
El paradigma funcional est representado por la familia de
lenguajes LISP, en particular Scheme.
El paradigma lgico, un ejemplo es PROLOG.
El paradigma orientado a objetos. Un lenguaje completamente
orientado a objetos es Smalltalk.
Entonces:
La Programacin Declarativa, o bien un Paradigma
declarativo, es un paradigma de programacin que est basado
en el desarrollo de programas especificando o "declarando" un
conjunto de condiciones, proposiciones, afirmaciones, restricciones,
ecuaciones o transformaciones que describen el problema y
detallan su solucin. La solucin es obtenida mediante mecanismos
internos de control, sin especificar exactamente cmo encontrarla.
Diferencia entre imperativo y declarativo
En la programacin imperativa se describe paso a paso un conjunto
de instrucciones que deben ejecutarse para variar el estado del
programa y hallar la solucin, es decir, un algoritmo en el que se
describen los pasos necesarios para solucionar el problema.
En la programacin declarativa las sentencias que se utilizan lo que
hacen es describir el problema que se quiere solucionar, pero no
las instrucciones necesarias para solucionarlo. Esto ltimo se
realizar mediante mecanismos internos de inferencia de
informacin a partir de la descripcin realizada.

Pgina 6

Parte 1: Introduccin

Paradigmas y Lenguajes

TEMA 2: LENGUAJES DE PROGRAMACION


INTRODUCCIN
Qu es un lenguaje de programacin?
Un conjunto de sintaxis y reglas semnticas que definen
programas del computador. Es una tcnica estndar
comunicacin para entregarle instrucciones al computador.

los
de

Un lenguaje le da la capacidad al programador de especificarle al


computador, qu tipo de datos actan y que acciones tomar bajo
una variada gama de circunstancias, utilizando un lenguaje
relativamente prximo al lenguaje humano.
Un programa escrito en un lenguaje de programacin necesita
pasar por un proceso de compilacin, interpretacin o intermedio,
es decir, ser traducido al lenguaje de mquina para que pueda ser
ejecutado por el ordenador.
Los lenguajes de programacin pueden ser clasificados de acuerdo
a diversos criterios:
Lenguajes interpretados (Interpretes) como Basic, Dbase.
Lenguajes
Clipper.

compilados

(Compiladores)

como

C,

C++,

Lenguajes interpretados con recolectores de basura


(Maquina Virtual) como Smalltalk, Java, Ocaml.
Lenguajes Scripts (Motor de ejecucin) como Perl, PhP.

Pgina 7

Parte 1: Introduccin

Paradigmas y Lenguajes

Clasificacin de los Lenguajes de Programacin


Declarativos: en ciencias computacionales son aquellos
lenguajes de programacin en los cuales se le indica a la
computadora que es lo que se desea obtener o que es lo que
se esta buscando.
Por ejemplo: Obtener los nombres de todos los empleados que
tengan ms de 32 aos. Algunos ejemplos de lenguajes
declarativos son el Datatrieve, SQL y las expresiones regulares.
Siglas de Structured Query Language (Lenguaje Estructurado
de Consultas). Es un lenguaje declarativo que ana caractersticas
del lgebra y el Clculo Relacionales que nos permite lanzar
consultas contra una Base de Datos para recuperar informacin de
nuestro inters, almacenada en ella.
El concepto de expresiones regulares (Regular expressions en
ingls) se refiere a una familia de lenguajes compactos y potentes
para la descripcin de conjuntos de cadenas de caracteres.
Numerosos editores de texto y otras utilidades (especialmente en
el sistema operativo UNIX), como por ejemplo sed y awk, utilizan
estos lenguajes para buscar ciertas estructuras en el texto y, por
ejemplo, remplazarlas con alguna otra cadena de caracteres.
Imperativos:
En ciencias de la computacin se llama
lenguajes imperativos a aquellos en los cuales se le ordena a
la computadora cmo realizar una tarea siguiendo una serie
de pasos o instrucciones, por ejemplo:
Paso 1, solicitar nmero.
Paso 2, multiplicar nmero por dos.
Paso 3, imprimir resultado de la operacin.
Paso 4, etc.
Algunos ejemplos de lenguajes imperativos son: BASIC, C, C++,
Java, Clipper, Dbase, C# y Perl.

Pgina 8

Parte 1: Introduccin

Paradigmas y Lenguajes

Generaciones de los Lenguajes


Los equipos de ordenador (el hardware) han pasado por cuatro
generaciones, de las que las tres primeras (ordenadores con
vlvulas, transistores y circuitos integrados) estn muy claras, la
cuarta (circuitos integrados a gran escala) es ms discutible.
Algo parecido ha ocurrido con la programacin de los ordenadores
(el software), que se realiza en lenguajes que suelen clasificarse en
cinco generaciones, de las que las tres primeras son evidentes,
mientras no todo el mundo est de acuerdo en las otras dos. Estas
generaciones no coincidieron exactamente en el tiempo con las de
hardware, pero s de forma aproximada, y son las siguientes:
Primera generacin: Los primeros ordenadores se programaban
directamente en cdigo binario, que puede representarse mediante
secuencias de ceros y unos sistema binario. Cada modelo de
ordenador tiene su propio cdigo, por esa razn se llama lenguaje
de mquina.
Segunda generacin: Los lenguajes simblicos, as mismo
propios de la mquina, simplifican la escritura de las instrucciones
y las hacen ms legibles.
Tercera generacin: Los lenguajes de alto nivel sustituyen las
instrucciones simblicas por cdigos independientes de la mquina,
parecidas al lenguaje humano o al de las Matemticas.
Cuarta generacin: se ha dado este nombre a ciertas
herramientas que permiten construir aplicaciones sencillas
combinando piezas prefabricadas. Hoy se piensa que estas
herramientas no son, propiamente hablando, lenguajes. Algunos
proponen reservar el nombre de cuarta generacin para la
programacin orientada a objetos.
Quinta generacin: se llama as a veces a los lenguajes de la
inteligencia artificial, aunque con el fracaso del proyecto japons de
la quinta generacin el nombre ha cado en desuso.

Pgina 9

Parte 1: Introduccin

Paradigmas y Lenguajes

ESTILOS DE PROGRAMACION
Programacin imperativa
La
programacin imperativa,
en
contraposicin a la
programacin declarativa es un paradigma de programacin que
describe la programacin en trminos del estado del programa y
sentencias que cambian dicho estado. Los programas imperativos
son un conjunto de instrucciones que le indican al computador
cmo realizar una tarea.
La implementacin de hardware de la mayora de computadores es
imperativa; prcticamente todo el hardware de los computadores
est diseado para ejecutar cdigo de mquina, 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
Mquinas 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 mquina nativo del
computador (por ejemplo el lenguaje ensamblador).
Los lenguajes imperativos de alto nivel usan variables y sentencias
ms complejas, pero an siguen el mismo paradigma. Las recetas y
las listas de revisin de procesos, a pesar de no ser programas de
computadora, son tambin conceptos familiares similares en estilo
a la programacin imperativa; cada paso es una instruccin, y el
mundo fsico guarda el estado (Zoom).
Los primeros lenguajes imperativos fueron los lenguajes de
mquina de los computadores originales. En estos lenguajes, las
instrucciones fueron muy simples, lo cual hizo la implementacin
de hardware fcil, pero obstruyendo la creacin de programas
complejos. El lenguaje de programacin llamado "C", cuyo
desarrollo fue iniciado en 1954 por John Backus en IBM, fue el
primer gran lenguaje de programacin en superar los obstculos
presentados por el cdigo de mquina en la creacin de programas
complejos.

Pgina 10

Parte 1: Introduccin

Paradigmas y Lenguajes

Programacin funcional
La Programacin funcional es un paradigma de programacin
declarativa basado en la utilizacin de funciones matemticas.
Historia
Sus orgenes provienen del Clculo Lambda (o -clculo), una
teora matemtica elaborada por Alonzo Church como apoyo a sus
estudios sobre computabilidad. Un lenguaje funcional es, a grandes
rasgos, un azcar sintctico del Clculo Lambda.
Utilidad
El objetivo es conseguir lenguajes expresivos y matemticamente
elegantes, en los que no sea necesario bajar al nivel de la mquina
para describir el proceso llevado a cabo por el programa, y
evitando el concepto de estado del cmputo. La secuencia de
computaciones llevadas a cabo por el programa se regira nica y
exclusivamente por la reescritura de definiciones ms amplias a
otras cada vez ms concretas y definidas, usando lo que se
denominan "definiciones dirigidas".
Caractersticas
Los programas escritos en un lenguaje funcional estn constituidos
nicamente por definiciones de funciones, entendiendo stas no
como subprogramas clsicos de un lenguaje imperativo, sino como
funciones puramente matemticas, en las que se verifican ciertas
propiedades como la transparencia referencial (el significado de
una expresin depende nicamente del significado de sus
subexpresiones), y por tanto, la carencia total de efectos laterales.
Otras caractersticas propias de estos lenguajes son la no
existencia de asignaciones de variables y la falta de construcciones
estructuradas como la secuencia o la iteracin (lo que obliga en la
prctica a que todas las repeticiones de instrucciones se lleven a
cabo por medio de funciones recursivas).
Existen dos grandes categoras de lenguajes funcionales: los
funcionales puros y los hbridos. La diferencia entre ambos estriba
en que los lenguajes funcionales hbridos son menos dogmticos
que los puros, al admitir conceptos tomados de los lenguajes
imperativos, como las secuencias de instrucciones o la asignacin
de variables. En contraste, los lenguajes funcionales puros tienen
una mayor potencia expresiva, conservando a la vez su

Pgina 11

Parte 1: Introduccin

Paradigmas y Lenguajes

transparencia referencial, algo que no se cumple siempre con un


lenguaje funcional hbrido.
Entre los lenguajes funcionales puros, cabe destacar a Haskell y
Miranda. Los lenguajes funcionales hbridos ms conocidos son
Lisp, Scheme, Ocaml y Standard ML (estos dos ltimos,
descendientes del lenguaje ML).
Ejemplo de Cdigo LISP para el Clculo de una Potencia (utilizando
recursividad).
(defun potencia-aux (b e)
(if (= e 0) 1
(* b (potencia-aux b (1- e)))))
(potencia-aux '3 '4)
81

Pgina 12

Parte 1: Introduccin

Paradigmas y Lenguajes

Programacin lgica
La programacin lgica consiste en la aplicacin del corpus de
conocimiento sobre lgica para el diseo de lenguajes de
programacin; no debe confundirse con la disciplina de la lgica
computacional.
La programacin declarativa gira en
predicado, o relacin entre elementos.

torno

al

concepto

de

Motivacin
Histricamente, los ordenadores se han programado utilizando
lenguajes muy cercanos a las peculiaridades de la propia mquina:
operaciones aritmticas simples, instrucciones de acceso a
memoria, etc. Un programa escrito de esta manera puede ocultar
totalmente su propsito a la comprensin de un ser humano,
incluso uno entrenado. Hoy da, estos lenguajes pertenecientes al
paradigma de la Programacin imperativa han evolucionado de
manera que ya no son tan crpticos. Sin embargo, an existen
casos donde el uso de lenguajes imperativos es inviable debido a la
complejidad del problema a resolver.
En cambio, la lgica matemtica es la manera ms sencilla, para el
intelecto humano, de expresar formalmente problemas complejos y
de resolverlos mediante la aplicacin de reglas, hiptesis y
teoremas. De ah que el concepto de "programacin lgica" resulte
atractivo en diversos campos donde la programacin tradicional es
un fracaso.
Campos de aplicacin
La programacin lgica encuentra su hbitat
aplicaciones de inteligencia artificial o relacionadas:

natural

en

Sistemas expertos, donde un sistema de informacin imita las


recomendaciones de un experto sobre algn dominio de
conocimiento.

Demostracin automtica de teoremas, donde un programa


genera nuevos teoremas sobre una teora existente.

Reconocimiento de lenguaje natural, donde un programa es


capaz de comprender (con limitaciones) la informacin
contenida en una expresin lingstica humana.

Etc.
Pgina 13

Parte 1: Introduccin

Paradigmas y Lenguajes

La programacin lgica tambin se utiliza en aplicaciones ms


"mundanas" pero de manera muy limitada, ya que la programacin
tradicional es ms adecuada a tareas de propsito general.
Fundamentos
La mayora de los lenguajes de programacin lgica se basan en la
teora lgica de primer orden, aunque tambin incorporan algunos
comportamientos de orden superior. En este sentido, destacan los
lenguajes funcionales, ya que se basan en el clculo lambda, que
es la nica teora lgica de orden superior que es
demostradamente computable (hasta el momento).
En qu consiste (ejemplo)
La programacin lgica permite formalizar hechos del mundo real,
por ejemplo:
las aves vuelan
los pinginos no vuelan
"pichurri" es un ave
"sandokan" es un perro
"alegra" es un ave
"pocholo" es un pingino
y tambin reglas o restricciones:
una mascota vuela si es un ave y no es un pingino
Ante dicho "programa" es posible establecer hiptesis que no son
ms que preguntas o incgnitas, por ejemplo:
"pichurri" vuela ?
qu mascotas vuelan ?
Gracias a que la lgica de primer orden es computable, el
ordenador ser capaz de verificar la hiptesis, es decir, responder a
las incgnitas:
Es cierto que "pichurri" vuela.
"pichurri" y "alegra" vuelan.
Obsrvese que el programa lgico no solamente es capaz de
responder si una determinada hiptesis es verdadera o falsa.
Tambin es capaz de determinar que valores de la incgnita hacen
cierta la hiptesis.

Pgina 14

Parte 1: Introduccin

Paradigmas y Lenguajes

Este
ejemplo
es
claramente
acadmico.
Sin
embargo,
consideremos el siguiente ejemplo: el sistema de control de
semforos de una ciudad.
El estado de cada uno de los semforos (verde, rojo o mbar)
constituye los hechos del mundo real. El programa en s consiste
en unas pocas reglas de sentido comn: determinados semforos
no pueden permanecer simultneamente en verde, un semforo
solamente puede transitar de verde a mbar y de mbar a rojo,
etc. La hiptesis es el estado en el que deberan estar cada uno de
los semforos en el siguiente instante de tiempo.
ste es un ejemplo imposible de resolver mediante programacin
tradicional, ya que la lgica subyacente al comportamiento de los
semforos en su conjunto queda enmascarada por simples rdenes
imperativas del tipo "cambiar color de tal o cual semforo".
Lenguajes
El lenguaje de programacin lgica por excelencia es Prolog, que
cuenta con diversas variantes. La ms importante es la
programacin lgica con restricciones, que posibilita la resolucin
de ecuaciones lineales adems de la demostracin de hiptesis.
Los programas construidos un lenguaje lgico estn construidos
nicamente por expresiones lgicas, es decir, que son ciertas o
falsas, en oposicin a un expresin interrogativa (una pregunta) o
expresiones imperativas (una orden).
Prolog, proveniente del ingls Programming in Logic, es un
lenguaje lgico bastante popular en el medio de investigacin en
Inteligencia Artificial. Prolog es un lenguaje muy diferente, tanto de
los imperativos como Fortran, Pascal, C etc, como de los
funcionales como Lisp. En todos los mencionados, las instrucciones
se ejecutan normalmente en orden secuencial, es decir, una a
continuacin de otra, en el mismo orden en que estn escritas, que
slo vara cuando se alcanza una instruccin de control (un bucle,
una instruccin condicional o una transferencia).
En Prolog, las cosas son distintas: el orden de ejecucin de las
instrucciones no tiene nada que ver con el orden en que fueron
escritas. Tampoco hay instrucciones de control propiamente dichas.
Para trabajar con este lenguaje, un programador debe
Pgina 15

Parte 1: Introduccin

Paradigmas y Lenguajes

acostumbrarse a pensar de una manera muy diferente a la que se


utiliza en los lenguajes clsicos.
Las instrucciones de Prolog se llaman "reglas o clusulas de Horn"
y esencialmente pueden representarse as: "Hacer esto si se
cumplen tales o cuales condiciones". Una instruccin se ejecutar
automticamente en cualquier momento en que se cumplan las
condiciones especificadas. Adems de las reglas, tambin se
definen "factors" en la cual se aplicarn las reglas. Es decir, en
Prolog, un programa consiste de una descripcin lgica de una
teora y la computacin es la deduccin de la teora para una dada
consulta.

Pgina 16

Parte 1: Introduccin

Paradigmas y Lenguajes

Ejemplo de Cdigo Prolog


%%
%% declaraciones
%%
padrede('juan', 'maria'). % juan es padre de maria
padrede('pablo', 'juan'). % pablo es padre de juan
padrede('pablo', 'marcela').
padrede('carlos', 'debora').
% A es hijo de B si B es padre de A
hijode(A,B) :- padrede(B,A).
% A es abuelo de B si A es padre de C y C es padre B
abuelode(A,B) :- padrede(A,C), padrede(C, B).
% A y B son hermanos si el padre de A es tambien el padre de B y
si A y B no son lo mismo
hermanode(A,B) :- padrede(C,A) , padrede(C,B), A <> B.
%% CONSULTAS
% juan es hermano de marcela?
?- hermanode('juan', 'marcela').
si
% carlos es hermano de juan?
?- hermanode('carlos', 'juan').
no
% pablo es abuelo de maria?
?- abuelode('pablo', 'maria').
si
% maria es abuelo de pablo?
?- abuelode('maria', 'pablo').
no

Pgina 17

Parte 1: Introduccin

Paradigmas y Lenguajes

Programacin estructurada
La programacin estructurada es una forma de escribir
programacin de ordenador de forma clara, para ello utiliza
nicamente tres estructuras: secuencial, selectiva e iterativa;
siendo innecesario y no permitindose el uso de la instruccin o
instrucciones de transferencia incondicional ( GOTO ).
Surgimiento de la programacin estructurada
A finales de los aos sesenta surgi una nueva forma de programar
que no solamente daba lugar a programas fiables y eficientes, sino
que adems estaban escritos de manera que facilitaba su
comprensin posterior.
Un famoso Teorema de Dijkstra, demostrado por Edsger Dijkstra en
los aos sesenta, demuestra que todo programa puede escribirse
utilizando nicamente las tres instrucciones de control siguientes:

Secuencia

Instruccin condicional.

Iteracin, o bucle de instrucciones.

Solamente con estas tres estructuras se puede hacer un programa


informtico, ver por ejemplo Pseudocdigo, si bien los lenguajes de
programacin, y sus compiladores, tienen un repertorio de
estructuras de control mayor.
Secuencias estructuradas
Estructura secuencial
Una estructura de programa es secuencial si se ejecutan una tras
otra a modo de secuencia.
Ejemplo:
auxiliar:= x
x:= y
y:= auxiliar

Esta secuencia de instrucciones permuta los valores de x e y,


con ayuda de una variable auxiliar, intermedia.

1 Guardamos una copia del valor de x en auxiliar.

2 Guardamos el valor de y en x, se pierde el valor anterior


de x pero no importa porque tenemos una copia en auxiliar.

Pgina 18

Parte 1: Introduccin

Paradigmas y Lenguajes

3 Guardamos en y el valor de auxiliar, que es el valor inicial


de x.

El resultado es el intercambio de los valores de x e y, en tres


operaciones secuenciales.

Estructura selectiva
La estructura selectiva permite la realizacin de una instruccin u
otra segn un criterio, solo una de estas instrucciones se ejecutar.
Ejemplo:
si a > b entonces
Escribir a es mayor que b
si_no
Escribir a no es mayor que b
fsi

Esta instruccin selectiva puede presentar dos mensajes, uno


a es mayor que b, y el otro a no es mayor que b, solo uno
de ellos ser presentado, segn el resultado de la
comparacin de a y b, si el resultado de a > b es cierto, se
presenta el primer mensaje, si es falso el segundo, las
palabras si, entonces, si_no, fsi; son propias de la
instruccin (palabra reservadas) que tienen un significado en
el lenguaje, sirven de separadores, y el usuario no debe
utilizarlas salv para este fin.

si seala el comienzo de la instruccin condicional, y se


espera que despus est la condicin de control de la
instruccin.

entonces seala el fin de la condicin, y despus estar la


instruccin a realizar si la condicin es cierta.

si_no separa la instruccin que se ejecutar si la condicin


es cierta de la que se ejecutar si es falsa.

fsi indica que la instruccin condicional finaliza y el programa


seguir su curso.

Estructura iterativa
Un bucle iterativo o iteracin de una secuencia de instrucciones,
hace que se repitan mientras se cumpla una condicin, en un
principio el nmero de iteraciones no tiene porque estar
determinado.
Pgina 19

Parte 1: Introduccin

Paradigmas y Lenguajes

Ejemplo:
a:= 0
b:= 7
mientras b > a hacer
Escribir a
a:= a + 1
fin mientras
Esta instruccin tiene tres palabras reservadas mientras, hacer y
fmientras.

mientras: seala el comienzo del bucle y despus de esta


palabra se espera la condicin de repeticin, si la condicin es
cierta se pasa al cuerpo del bucle, si no al final de la
instruccin mientras.

hacer: seala el final de la condicin, lo que est despus


ser el cuerpo del bucle.

fin mientras: seala el final del cuerpo del bucle y de la


instruccin mientras.

El bucle mientras, se repite mientras la condicin sea cierta, esta


condicin se comprueba al principio por lo que el cuerpo del bucle
puede que no se ejecute nunca, cuando la condicin es falsa en un
principio, o que se repita tantas veces como sea necesario,
mientras la condicin sea cierta..
En el ejemplo tenemos dos variables a y b que al iniciarse el bucle
tienen los valores a=0 y b=7.
La condicin del bucle es b > a.
Cuando a=0 y b=7. la condicin es cierta, en el cuerpo del
bucle se escribe el valor de a en pantalla y se incrementa a en
una unidad. Entonces a=1 y b=7.
...
...
Cuando a=6 y b=7. la condicin es cierta, se escribe el valor
de a en pantalla y se incrementa en una unidad.
Resultando que a=7 y b=7. Entonces la condicin es falsa y la
instruccin mientras finaliza.
La salida por pantalla de este ejemplo seria 0 1 2 3 4 5 6
Pgina 20

Parte 1: Introduccin

Paradigmas y Lenguajes

Algunos lenguajes ofrecen un modelo de estructuras iterativas algo


diferente donde la condicin puede variar en cada iteracin, por
ejemplos los comandos guardados de Dijkstra.
Anidamiento
El cuerpo de cualquier estructura puede ser una instruccin simple
u otra estructura, que a su vez puede anidar a otra.
Ejemplo:
si a > b entonces
auxiliar:=a
a:= b
b:= auxiliar
si_no
nada
fsi
escribir a y b
Ventajas de la programacin estructurada
Con la programacin estructurada, elaborar programas de
computador sigue siendo una labor que demanda esfuerzo,
creatividad, habilidad y cuidado. Sin embargo, con este estilo
podemos obtener las siguientes ventajas:
1. Los programas son ms fciles de entender ya puede ser ledo
de forma secuencial, sin necesidad de hacer seguimiento a saltos
de lnea (GOTO) dentro bloques de cdigo para entender la lgica.
2. La estructura del programa es ms clara puesto que las
instrucciones estn ms ligadas o relacionadas entre s.
3. Reduccin del esfuerzo en las pruebas. El seguimiento de las
fallas ("debugging") se facilita debido a la lgica ms visible, por lo
que los errores se pueden detectar y corregir ms fcilmente.
4. Reduccin de los costos de mantenimiento.
5. Programas ms sencillos y ms rpidos.
6. Los bloques de cdigo son auto explicativos, lo que apoya a la
documentacion.
Inconvenientes de la programacin estructurada
El principal inconveniente de este mtodo de programacin, es que
se obtiene un nico bloque de programa, que cuando se hace
Pgina 21

Parte 1: Introduccin

Paradigmas y Lenguajes

demasiado grande puede resultar problemtico su manejo, esto se


resuelve empleando la programacin modular, definiendo mdulos
interdependientes programados y compilados por separado. Un
mtodo un poco ms sofisticado es la programacin por capas, en
la que los mdulos tienen una estructura jerrquica muy definida y
se denominan capas.

Programacin dirigida por eventos


La programacin dirigida por eventos es un paradigma de
programacin en el que tanto la estructura como la ejecucin de
los programas van determinados por los sucesos que ocurran en el
sistema o que ellos mismos provoquen.
Para entender la programacin dirigida por eventos, podemos
oponerla a lo que no es: mientras en la programacin secuencial es
el programador el que define cul va a ser el flujo del programa, en
la programacin dirigida por eventos ser el propio usuario --o lo
que sea que est accionando el programa-- el que dirija el flujo del
programa. Aunque en la programacin secuencial puede haber
intervencin de un agente externo al programa, estas
intervenciones ocurrirn cuando el programador lo haya
determinado, y no en cualquier momento como puede ser en el
caso de la programacin dirigida por eventos.
El creador de un programa dirigido por eventos debe definir los
eventos que manejar su programa y las acciones que se realizarn
al producirse cada uno de ellos, lo que se conoce como el
manejador
de
evento. Los eventos soportados estarn
determinados por el lenguaje de programacin utilizado, por el
sistema operativo e incluso por eventos creados por el mismo
programador.
En la programacin dirigida por eventos, al comenzar la ejecucin
del programa se llevarn a cabo las inicializaciones y dems cdigo
inicial y a continuacin el programa quedar bloqueado hasta que
se produzca algn evento. Cuando alguno de los eventos esperados
por el programa tenga lugar, el programa pasar a ejecutar el
cdigo del correspondiente manejador de evento. Por ejemplo, si el
evento consiste en que el usuario ha hecho click en el botn de
play de un reproductor de pelculas, se ejecutar el cdigo del
manejador de evento, que ser el que haga que la pelcula se
muestre por pantalla.
Pgina 22

Parte 1: Introduccin

Paradigmas y Lenguajes

Un ejemplo claro lo tenemos en los sistemas de programacin


Lexico y Visual Basic, en los que a cada elemento del programa
(objetos, controles, etctera) se le asignan una serie de eventos
que generar dicho elemento, como la pulsacin de un botn del
ratn sobre l o el redibujado del control.

Programacin Orientada a Aspectos


La Programacin Orientada a Aspectos (POA) es un paradigma
de programacin relativamente reciente cuya intencin es permitir
una adecuada modularizacin de las aplicaciones y posibilitar una
mejor separacin de conceptos. Gracias a la POA se pueden
capturar los diferentes conceptos que componen una aplicacin en
entidades bien definidas, de manera apropiada en cada uno de los
casos y eliminando las dependencias inherentes entre cada uno de
los mdulos. De esta forma se consigue razonar mejor sobre los
conceptos, se elimina la dispersin del cdigo y las
implementaciones resultan ms comprensibles, adaptables y
reusables. Varias tecnologas con nombres diferentes se encaminan
a la consecucin de los mismos objetivos y as, el trmino POA es
usado para referirse a varias tecnologas relacionadas como los
mtodos adaptivos, los filtros de composicin, la programacin
orientada a sujetos o la separacin multidimensional de
competencias
Problemas de otros paradigmas
Muchas veces nos encontramos, a la hora de programar, con
problemas que no podemos resolver de una manera adecuada con
las tcnicas habituales usadas en la programacin imperativa o en
la programacin orientada a objetos. Con stas, nos vemos
forzados a tomar decisiones de diseo que repercuten de manera
importante en el desarrollo de la aplicacin y que nos alejan con
frecuencia de otras posibilidades.
Por otro lado, la implementacin de dichas decisiones a menudo
implica escribir lneas de cdigo que estn distribuidas por toda, o
gran parte, de la aplicacin para definir la lgica de cierta
propiedad o comportamiento del sistema, con las consecuentes
dificultades de mantenimiento y desarrollo que ello implica. En
ingls este problema se conoce como scattered code, que
podramos traducir como cdigo disperso. Otro problema que
Pgina 23

Parte 1: Introduccin

Paradigmas y Lenguajes

puede aparecer es que un mismo mdulo se implemente de modo


que maneje mltiples comportamientos o aspectos del sistema
simultneamente. En ingls este problema se conoce como tangled
code, que podramos traducir como cdigo enmaraado. El hecho
es que hay ciertas decisiones de diseo que son difciles de
capturar con las tcnicas antes citadas, debindose al hecho de que
ciertos problemas no se dejan encapsular de igual forma que los
que habitualmente se han resuelto con funciones u objetos. La
resolucin de stos supone o bien la utilizacin de repetidas lneas
de cdigo por diferentes componentes del sistema, o bien la
superposicin dentro de un componente de funcionalidades
dispares.
Objetivos
Entre los objetivos que se ha propuesto la POA estn,
principalmente, (1) el de separar conceptos y (2) el de minimizar
las dependencias entre ellos. Con el primer objetivo se persigue
que cada decisin se tome en un lugar concreto y no diseminada
por la aplicacin. Con el segundo, se pretende desacoplar los
distintos elementos que intervienen en un programa.
Ventajas de la POA
La programacin orientada a aspectos, permite, de una manera
comprensible y clara, definir nuestras aplicaciones considerando
estos problemas. Por aspectos se entiende dichos problemas que
afectan a la aplicacin de manera horizontal y que este paradigma
persigue el poder tenerlos de manera aislada de forma adecuada y
comprensible, dndonos la posibilidad de construir el sistema
componindolos junto con el resto de los componentes.
Su consecucin implicara las siguientes ventajas:

Un cdigo menos enmaraado, ms natural y ms reducido.

Mayor facilidad para razonar sobre los conceptos, ya que


estn separados y las dependencias entre ellos son mnimas.

Un cdigo ms fcil de depurar y ms fcil de mantener.

Se consigue que un conjunto grande de modificaciones en la


definicin de una materia tenga un impacto mnimo en las
otras.

Se tiene un cdigo ms reusable y que se puede acoplar y


desacoplar cuando sea necesario

Pgina 24

Parte 1: Introduccin

Paradigmas y Lenguajes

Programacin orientada a objetos


La Programacin Orientada a Objetos (POO u OOP segn
siglas en ingls) es un paradigma de programacin que define los
programas en trminos de "clases de objetos", objetos que son
entidades que combinan estado (es decir, datos), comportamiento
(esto es, procedimientos o mtodos) e identidad (propiedad del
objeto que lo diferencia del resto). La programacin orientada a
objetos expresa un programa como un conjunto de estos objetos,
que colaboran entre ellos para realizar tareas. Esto permite hacer
los programas y mdulos ms fciles de escribir, mantener y
reutilizar.
De esta forma, un objeto contiene toda la informacin, (los
denominados atributos) que permite definirlo e identificarlo frente
a otros objetos pertenecientes a otras clases (e incluso entre
objetos de una misma clase, al poder tener valores bien
diferenciados en sus atributos). A su vez, dispone de mecanismos
de interaccin (los llamados mtodos) que favorecen la
comunicacin entre objetos (de una misma clase o de distintas), y
en consecuencia, el cambio de estado en los propios objetos. Esta
caracterstica lleva a tratarlos como unidades indivisibles, en las
que no se separan (ni deben separarse) informacin (datos) y
procesamiento (mtodos).
Dada esta propiedad de conjunto de una clase de objetos, que al
contar con una serie de atributos definitorios, requiere de unos
mtodos para poder tratarlos (lo que hace que ambos conceptos
estn ntimamente entrelazados), el programador debe pensar
indistintamente en ambos trminos, ya que no debe nunca separar
o dar mayor importancia a los atributos en favor de los mtodos, ni
viceversa. Hacerlo puede llevar al programador a seguir el hbito
errneo de crear clases contenedoras de informacin por un lado y
clases con mtodos que manejen esa informacin por otro
(llegando a una programacin estructurada camuflada en un
lenguaje de programacin orientado a objetos).
Esto difiere de la programacin estructurada tradicional, en la que
los datos y los procedimientos estn separados y sin relacin, ya
que lo nico que se busca es el procesamiento de unos datos de
entrada para obtener otros de salida. La programacin estructurada
Pgina 25

Parte 1: Introduccin

Paradigmas y Lenguajes

anima al programador a pensar sobre todo en trminos de


procedimientos o funciones, y en segundo lugar en las estructuras
de datos que esos procedimientos manejan. En la programacin
estructurada se escriben funciones y despus les pasan datos. Los
programadores que emplean lenguajes orientados a objetos
definen objetos con datos y mtodos y despus envan mensajes a
los objetos diciendo que realicen esos mtodos en s mismos.
Algunas personas tambin distinguen la POO sin clases, la cual es
llamada a veces programacin basada en objetos.
Origen
Los conceptos de la programacin orientada a objetos tienen origen
en Simula 67, un lenguaje diseado para hacer simulaciones,
creado por Ole-Johan Dahl y Kristen Nygaard del Centro de
Cmputo Noruego en Oslo. Segn se informa, la historia es que
trabajaban en simulaciones de naves, y fueron confundidos por la
explosin combinatoria de cmo las diversas cualidades de diversas
naves podan afectar unas a las otras. La idea ocurri para agrupar
los diversos tipos de naves en diversas clases de objetos, siendo
responsable cada clase de objetos de definir sus propios datos y
comportamiento. Fueron refinados ms tarde en Smalltalk, que fue
desarrollado en Simula en Xerox PARC (y cuya primera versin fue
escrita sobre Basic) pero diseado para ser un sistema
completamente dinmico en el cual los objetos se podran crear y
modificar "en marcha" en lugar de tener un sistema basado en
programas estticos.
La programacin orientada a objetos tom posicin como el estilo
de programacin dominante a mediados de los aos ochenta, en
gran parte debido a la influencia de C++ , una extensin del
lenguaje de programacin C. Su dominacin fue consolidada
gracias al auge de las Interfaces grficas de usuario, para los
cuales la programacin orientada a objetos est particularmente
bien adaptada. En este caso, se habla tambin de programacin
dirigida por eventos.
Las caractersticas de orientacin a objetos fueron agregadas a
muchos lenguajes existentes durante ese tiempo, incluyendo Ada,
BASIC, Lisp, Pascal, y otros. La adicin de estas caractersticas a
los lenguajes que no fueron diseados inicialmente para ellas
condujo a menudo a problemas de compatibilidad y a la capacidad
de mantenimiento del cdigo. Los lenguajes orientados a objetos
"puros", por otra parte, carecan de las caractersticas de las cuales
Pgina 26

Parte 1: Introduccin

Paradigmas y Lenguajes

muchos programadores haban venido a depender. Para saltar este


obstculo, se hicieron muchas tentativas para crear nuevos
lenguajes basados en mtodos orientados a objetos, pero
permitiendo algunas caractersticas imperativas de maneras
"seguras". El Eiffel de Bertrand Meyer fue un temprano y
moderadamente acertado lenguaje con esos objetivos pero ahora
ha sido esencialmente reemplazado por Java, en gran parte debido
a la aparicin de Internet, y a la implementacin de la mquina
virtual de Java en la mayora de navegadores.
Diferencias con la programacin estructurada
Aunque la programacin estructurada (a veces llamada procedural
o procedimental) condujo a mejoras de la tcnica de programacin
secuencial, los mtodos modernos de diseo de software orientado
a objetos incluyen mejoras entre las que estn el uso de los
patrones de diseo, diseo por contrato, y lenguajes de modelado
(ej: UML).
Las principales diferencias entre la programacin estructurada y la
orientada a objetos son:

La programacin orientada a objetos es ms moderna, es una


evolucin de la programacin estructurada que plasma en el
diseo de una familia de lenguajes conceptos que existan
previamente con algunos nuevos.

La programacin orientada a objetos se basa en lenguajes que


soportan sintctica y semnticamente la unin entre los tipos
abstractos de datos y sus operaciones (a esta unin se la
suele llamar clase).

La programacin orientada a objetos incorpora en su entorno


de ejecucin mecanismos tales como el polimorfismo y el
envo de mensajes entre objetos.

Errneamente se le adjudica a la programacin estructurada clsica


ciertos problemas como si fueran inherentes a la misma. Esos
problemas fueron hacindose cada vez ms graves y antes de la
programacin orientada a objetos diversos autores (de los que
podemos destacar a Yourdon) encontraron soluciones basadas en
aplicar estrictas metodologas de trabajo. De esa poca son los
conceptos de cohesin y acoplamiento. De esos problemas se
destacan los siguientes:

Modelo mental anmalo. Nuestra imagen del mundo se apoya


en los seres, a los que asignamos nombres sustantivos,
Pgina 27

Parte 1: Introduccin

Paradigmas y Lenguajes

mientras
la
programacin
clsica
se
basa
en
comportamiento, representado usualmente por verbos.

el

Es difcil modificar y extender los programas, pues suele haber


datos compartidos por varios subprogramas, que introducen
interacciones ocultas entre ellos.

Es difcil mantener los programas. Casi todos los sistemas


informticos grandes tienen errores ocultos, que no surgen a
la luz hasta despus de muchas horas de funcionamiento.

Es difcil reutilizar los programas. Es prcticamente imposible


aprovechar en una aplicacin nueva las subrutinas que se
disearon para otra.

Es
compleja
la
coordinacin
y
organizacin
entre
programadores para la creacin de aplicaciones de media y
gran envergadura.

En la programacin orientada a objetos pura no deben utilizarse


llamadas de subrutinas, nicamente mensajes.
Por ello, a veces recibe el nombre de programacin sin CALL,
igual que la programacin estructurada se llama tambin
programacin sin GOTO.
Sin embargo, no todos los lenguajes orientados a objetos prohben
la instruccin CALL (o su equivalente), permitiendo realizar
programacin hbrida, imperativa y orientada a objetos a la vez.
La Programacin Orientada a Objetos (POO) como solucin
La programacin orientada a objetos es una nueva forma de
programar que trata de encontrar solucin a estos problemas.
Introduce nuevos conceptos, que superan y amplan conceptos
antiguos ya conocidos. Entre ellos destacan los siguientes:

Objeto: entidad provista de un conjunto de propiedades o


atributos (datos) y de comportamiento o funcionalidad
("mtodos"). Corresponden a los objetos reales del mundo
que nos rodea, o a objetos internos del sistema (del
programa).

Clase: definiciones de las propiedades y comportamiento de


un tipo de objeto concreto. La instanciacin es la lectura de
estas definiciones y la creacin de un objeto a partir de ellas.

Mtodo: algoritmo asociado a un objeto (o a una clase de


objetos), cuya ejecucin se desencadena tras la recepcin de
un "mensaje". Desde el punto de vista del comportamiento, es
Pgina 28

Parte 1: Introduccin

Paradigmas y Lenguajes

lo que el objeto puede hacer. Un mtodo puede producir un


cambio en las propiedades del objeto, o la generacin de un
"evento" con un nuevo mensaje para otro objeto del sistema.

Evento: un suceso en el sistema (tal como una interaccin


del usuario con la mquina, o un mensaje enviado por un
objeto). El sistema maneja el evento enviando el mensaje
adecuado al objeto pertinente. Tambin se puede definir como
evento, a la reaccin que puede desencadenar un objeto, es
decir la accin que genera.

Mensaje: una comunicacin dirigida a un objeto, que le


ordena que ejecute uno de sus mtodos con ciertos
parmetros 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 cuyo valor puede ser
alterado por la ejecucin de algn mtodo.

Estado interno: es una propiedad invisible de los objetos,


que puede ser nicamente accedida y alterada por un mtodo
del objeto, y que se utiliza para indicar distintas situaciones
posibles para el objeto (o clase de objetos).

Componentes de un objeto: atributos, identidad, relaciones


y mtodos.

Representacin de un objeto: un objeto se representa por


medio de una tabla o entidad que est compuesta por sus
atributos y funciones correspondientes.

En comparacin con un lenguaje imperativo, una "variable", no es


ms que un contenedor interno del atributo del objeto o de un
estado interno, as como la "funcin" es un procedimiento interno
del mtodo del objeto.
Caractersticas de la POO
Hay un cierto desacuerdo sobre exactamente qu caractersticas de
un mtodo de programacin o lenguaje le definen como "orientado
a objetos", pero hay un consenso general en que las caractersticas
siguientes son las ms importantes (para ms informacin, seguir
los enlaces respectivos):

Abstraccin: 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
Pgina 29

Parte 1: Introduccin

Paradigmas y Lenguajes

sistema
sin
revelar
cmo
se
implementan
estas
caractersticas. Los procesos, las funciones o los mtodos
pueden tambin ser abstrados y cuando lo estn, una
variedad de tcnicas son requeridas para ampliar una
abstraccin.

Encapsulamiento: Significa reunir a todos los elementos que


pueden considerarse pertenecientes a una misma entidad, al
mismo nivel de abstraccin. Esto permite aumentar la
cohesin de los componentes del sistemas. Algunos autores
confunden este concepto con el principio de ocultacin,
principalmente porque se suelen emplear conjuntamente.

Principio de ocultacin: Cada objeto est aislado del


exterior, es un mdulo natural, y cada tipo de objeto expone
una interfaz a otros objetos que especifica cmo pueden
interactuar con los objetos de la clase. El aislamiento protege
a las propiedades de un objeto contra su modificacin por
quien no tenga derecho a acceder a ellas, solamente los
propios mtodos 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 abstraccin. La aplicacin 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 invocacin de un
comportamiento
en
una
referencia
producir
el
comportamiento correcto para el tipo real del objeto
referenciado. Cuando esto ocurre en "tiempo de ejecucin",
esta ltima caracterstica se llama asignacin tarda o
asignacin dinmica. Algunos lenguajes proporcionan medios
ms estticos (en "tiempo de compilacin") de polimorfismo,
tales como las plantillas y la sobrecarga de operadores de
C++.

Pgina 30

Parte 1: Introduccin

Paradigmas y Lenguajes

Herencia: las clases no estn aisladas, sino que se relacionan


entre s, formando una jerarqua de clasificacin. 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
reimplementar
su
comportamiento. Esto suele hacerse habitualmente agrupando
los objetos en clases y estas en rboles o enrejados que
reflejan un comportamiento comn. Cuando un objeto hereda
de ms de una clase se dice que hay herencia mltiple; esta
caracterstica no est soportada por algunos lenguajes (como
Java).

Lenguajes orientados a objetos


Entre los lenguajes orientados a objetos destacan los siguientes:

Ada

C++

C#

VB.NET

Visual FoxPro

Clarion

Delphi

Harbour

Eiffel

Java

Lexico (en castellano)

Objective-C

Ocaml

Oz

Perl (soporta herencia mltiple)

PHP (en su versin 5)

PowerBuilder

Python

Ruby
Pgina 31

Parte 1: Introduccin

Smalltalk

Magik (SmallWorld)

Paradigmas y Lenguajes

Muchos de estos lenguajes de programacin no son puramente


orientados a objetos, sino que son hbridos que combinan la OOP
con otros paradigmas.
Al igual que C++ otros lenguajes, como OOCOBOL, OOLISP,
OOPROLOG y Object REXX, han sido creados aadiendo
extensiones orientadas a objetos a un lenguaje de programacin
clsico.
Un nuevo paso en la abstraccin de paradigmas de programacin
es la Programacin Orientada a Aspectos (POA). Aunque es todava
una metodologa en estado de maduracin, cada vez atrae a ms
investigadores e incluso proyectos comerciales en todo el mundo.
Tambin recalcar que la programacin orientada a objetos es
factible de utilizar en JavaScript.

Pgina 32

Parte 1: Introduccin

Paradigmas y Lenguajes

Programacin con restricciones


La Programacin con restricciones es un paradigma de la
programacin en informtica, donde las relaciones entre las
variables
son
expresadas
en
terminos
de
restricciones
(ecuaciones). Actualmente es usada como una tecnologa de
software para la descripcin y resolucin de problemas
combinatorios particularmente difciles, especialmente en las areas
de planificacin y programacin de tareas (calendarizacin).
Este paradigma representa uno de los desarrollos ms fascinantes
en los lenguajes de programacin desde 1990 y no es sorprendente
que recientemente haya sido identificada por la ACM (Asociacin de
Maquinaria Computacional) como una direccin estratgica en la
investigacin en computacin.
Se trata de un paradigma de programacin basado en la
especificacin de un conjunto de restricciones, las cuales deben ser
satisfechas por cualquier solucin del problema planteado, en lugar
de especificar los pasos para obtener dicha solucin.
La programacin con restricciones se relaciona mucho con la
programacin lgica y con la investigacin operativa. De hecho
cualquier programa lgico puede ser traducido en un programa con
restricciones y viceversa. Muchas veces los programas lgicos son
traducidos a programas con restricciones debido a que la solucin
es ms eficiente que su contraparte.
La diferencia entre ambos estriba principalmente en sus estilos y
enfoques en el modelado del mundo. Para ciertos problemas es
ms natural (y por ende ms simple) escribirlos como programas
lgicos, mientras que en otros es ms natural escribirlos como
programas con restricciones.
El enfoque de la programacin con restricciones se basa
principalmente en buscar un estado en el cual una gran cantidad de
restricciones sean satisfechas simultneamente. Un problema se
define tpicamente como un estado de la realidad en el cual existe
un nmero de variables con valor desconocido. Un programa
basado en restricciones busca dichos valores para todas las
variables.
Algunos dominios de aplicacin de este paradigma son:

Pgina 33

Parte 1: Introduccin

Paradigmas y Lenguajes

Dominios booleanos, donde solo existen restricciones del tipo


verdadero/falso.

Dominios en variables enteras y racionales.

Dominios lineales,
funciones lineales.

Dominios finitos, donde las restricciones son definidas en


conjuntos finitos.

Dominios mixtos, los cuales involucran dos o ms de los


anteriores.

donde

solo

se

describen

analizan

Los lenguajes de programacin con restricciones son tpicamente


ampliaciones de otro lenguaje. El primer lenguaje utilizado a tal
efecto fue Prolog. Por esta razn que este campo fue llamado
inicialmente Programacin Lgica con Restricciones. Ambos
paradigmas comparten caractersticas muy similares, tales como
las variables lgicas (una vez que una variable es asignada a un
valor, no puede ser cambiado), o el backtracking.
La programacin con restricciones puede ser implementado como
un lenguaje propio o como libreras para ser usadas en algn
lenguaje de programacin imperativo. Algunos lenguajes populares
de programacin con restricciones son:

B-Prolog (Basado en Prolog , proprietario)

CHIP V5 (Basado en Prolog, tambin existen libreras en C y


C++ , proprietario)

Ciao Prolog (Basado en Prolog , software libre: GPL/LGPL)

ECLiPSe (Basado en Prolog , proprietario)

Mozart ( Basado en Oz , software libre: X11)

SICStus (Basado en Prolog ,proprietario)

Algunas libreras populares:

Choco (Java, software libre: X11 )

Disolver (C++, proprietaria)

Gecode (C++ ,software libre: X11 )

ILOG CP (C++ , proprietaria)

Koalog Constraint Solver (Java , proprietaria)

Pgina 34

Parte 1: Introduccin

Paradigmas y Lenguajes

Programacin por capas


La programacin por capas es un estilo de programacin en la
que el objetivo primordial es la separacin de la lgica de negocios
de la lgica de diseo, un ejemplo bsico de esto es separar la
capa de datos de la capa de presentacin al usuario.

La ventaja principal de este estilo, es que el desarrollo se puede


llevar a cabo en varios niveles y en caso de algn cambio slo se
ataca al nivel requerido sin tener que revisar entre cdigo
mezclado. Un buen ejemplo de este mtodo de programacin seria:
Modelo de interconexin de sistemas abiertos
Adems permite distribuir el trabajo de creacin de una aplicacin
por niveles, de este modo, cada grupo de trabajo est totalmente
abstrado del resto de niveles, simplemente es necesario conocer la
API que existe entre niveles.
En el diseo de sistemas informticos actual se suele usar las
arquitecturas multinivel o Programacin por capas. En dichas
arquitecturas a cada nivel se le confa una misin simple, lo que
permite el diseo de arquitecturas escalables (que pueden
ampliarse con facilidad en caso de que las necesidades aumenten).
El diseo ms en boga actualmente es el diseo en tres niveles (o
en tres capas).
Capas o niveles
1.- Capa de presentacin: es la que ve el usuario, presenta el
sistema al usuario, le comunica la informacin y captura la
Pgina 35

Parte 1: Introduccin

Paradigmas y Lenguajes

informacin del usuario dando un mnimo de proceso (realiza un


filtrado previo para comprobar que no hay errores de formato).
Esta capa se comunica nicamente con la capa de negocio.
2.- Capa de negocio: es donde residen los programas que se
ejecutan, recibiendo las peticiones del usuario y enviando las
respuestas tras el proceso. Se denomina capa de negocio (e incluso
de lgica del negocio) pues es aqu donde se establecen todas las
reglas que deben cumplirse. Esta capa se comunica con la capa de
presentacin, para recibir las solicitudes y presentar los resultados,
y con la capa de datos, para solicitar al gestor de base de datos
para almacenar o recuperar datos de l.
3.- Capa de datos: es donde residen los datos. Est formada por
uno o ms gestor de bases de datos que realiza todo el
almacenamiento de datos, reciben solicitudes de almacenamiento o
recuperacin de informacin desde la capa de negocio.
Todas estas capas pueden residir en un nico ordenador (no sera
lo normal), si bien lo ms usual es que haya una multitud de
ordenadores donde reside la capa de presentacin (son los clientes
de la arquitectura cliente/servidor). Las capas de negocio y de
datos pueden residir en el mismo ordenador, y si el crecimiento de
las necesidades lo aconseja se pueden separar en dos o mas
ordenadores. As, si el tamao o complejidad de la base de datos
aumenta, se puede separar en varios ordenadores los cuales
recibirn las peticiones del ordenador en que resida la capa de
negocio.
Si por el contrario fuese la complejidad en la capa de negocio lo
que obligase a la separacin, esta capa de negocio podra residir en
uno o mas ordenadores que realizaran solicitudes a una nica base
de datos. En sistemas muy complejos se llega a tener una serie de
ordenadores sobre los cuales corre la capa de datos, y otra serie de
ordenadores sobre los cuales corre la base de datos.
En una arquitectura de tres niveles, los trminos "capas" y
"niveles" no significan lo mismo ni son similares.
El trmino "capa" hace referencia a la forma como una solucin es
segmentada desde el punto de vista lgico:
Pgina 36

Parte 1: Introduccin

Paradigmas y Lenguajes

Presentacin/ Lgica de Negocio/ Datos.


En cambio, el trmino "nivel", corresponde a la forma en que las
capas lgicas se encuentran distribuidas de forma fsica. Por
ejemplo:

Una solucin de tres capas (presentacin, lgica, datos)


que
residen
en
un
solo
ordenador
(Presentacin+lgica+datos).
Se
dice,
que
la
arquitectura de la solucin es de tres capas y un nivel.

Una solucin de tres capas (presentacin, lgica, datos)


que residen en dos ordenadores (presentacin+lgica,
lgica+datos). Se dice que la arquitectura de la solucin
es de tres capas y dos niveles.

Una solucin de tres capas (presentacin, lgica, datos)


que residen en tres ordenadores (presentacin, lgica,
datos). La arquitectura que la define es: solucin de tres
capas y tres niveles.

Pgina 37

Parte 1: Introduccin

Paradigmas y Lenguajes

Programacin multiparadigma
Un lenguaje de programacin multiparadigma es un lenguaje
de programacin que soporta ms de un paradigma de
programacin. Segn lo describe Bjarne Stroustrup, "un programa
usando ms de un estilo de programacin ".
El objetivo de diseo de estos lenguajes es permitir a los
programadores utilizar la mejor herramienta para cada trabajo,
admitiendo que ningn paradigma resuelve todos los problemas de
la forma ms fcil y eficiente posible.
Tal es el caso de lenguajes como C++, Delphi o Visual Basic, los
cuales combinan el paradigma imperativo con el orientado a
objetos. Incluso existen lenguajes multiparadigma que permiten la
mezcla de forma natural, como en el caso de Oz: el lenguaje de
programacin Oz tiene subconjuntos que son un lenguaje lgico
(Oz desciende de la programacin lgica), otros que son un
lenguaje de programacin funcional, un lenguaje orientado a
objetos y ms.

Pgina 38