Documentos de Académico
Documentos de Profesional
Documentos de Cultura
De Wikipedia: http://es.wikipedia.org
Paradigma de programación
Un paradigma de programación es una propuesta tecnológica que es adoptada por
una comunidad de programadores cuyo núcleo central es incuestionable en cuanto a
que unívocamente trata de resolver uno o varios problemas claramente delimitados. La
resolución de estos problemas debe suponer consecuentemente un avance significati-
vo en al menos un parámetro que afecte a la ingeniería de software. Tiene una estre-
cha relación con la formalización de determinados lenguajes en su momento de defini-
ción. Un paradigma de programación está delimitado en el tiempo en cuanto a acepta-
ción y uso ya que nuevos paradigmas aportan nuevas o mejores soluciones que la
sustituyen parcial o totalmente.
Ejemplo:
Probablemente el paradigma de programación que actualmente es el más usado a
todos los niveles es la orientación a objeto. El núcleo central de este paradigma es la
unión de datos y procesamiento en una entidad llamada "objeto", relacionable a su vez
con otras entidades "objeto".
La orientación a objeto parece estar ligado en sus orígenes con lenguajes como Lisp y
Simula aunque el primero que acuño el título de programación orientada a objetos fue
Smaltalk
1
Programación orientada a objetos
La programación orientada a objetos o POO (OOP según sus siglas en inglés) es
un paradigma de programación que usa objetos y sus interacciones, para diseñar apli-
caciones y programas informáticos. Está basado en varias técnicas, incluyendo heren-
cia, abstracción, polimorfismo y encapsulamiento. Su uso se popularizó a principios de
la década de los años 1990. En la actualidad, existe variedad de lenguajes de progra-
mación que soportan la orientación a objetos.
Introducción
Los objetos son entidades que tienen un determinado estado, comportamiento (méto-
do) e identidad:
El estado está compuesto de datos, será uno o varios atributos a los que se
habrán asignado unos valores concretos (datos).
El comportamiento está definido por los métodos o mensajes a los que sabe
responder dicho objeto, es decir, qué operaciones se pueden realizar con él.
La identidad es una propiedad de un objeto que lo diferencia del resto, dicho
con otras palabras, es su identificador (concepto análogo al de identificador de
una variable o una constante).
2
Origen
Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un
lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Ny-
gaard del Centro de Cómputo Noruego en Oslo. En este centro, se trabajaba en simu-
laciones de naves, que fueron confundidas por la explosión combinatoria de cómo las
diversas cualidades de diferentes naves podían afectar unas a las otras. La idea surgió
al agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsa-
ble cada clase de objetos de definir sus propios datos y comportamientos. Fueron refi-
nados más tarde en Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera
versión fue escrita sobre Basic) pero diseñado para ser un sistema completamente
dinámico en el cual los objetos se podrían crear y modificar "sobre la marcha" (en
tiempo de ejecución) en lugar de tener un sistema basado en programas estáticos.
Conceptos fundamentales
La programación orientada a objetos es una forma de programar que trata de encon-
trar una solución a estos problemas. Introduce nuevos conceptos, que superan y ampl-
ían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:
3
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 eje-
cució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 "even-
to" con un nuevo mensaje para otro objeto del sistema.
Evento: Es 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 ac-
ció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 única-
mente accedida y alterada por un método del objeto, y que se utiliza para indi-
car distintas situaciones posibles para el objeto (o clase de objetos). No es visi-
ble al programador que maneja una instancia de la clase.
Componentes de un objeto: atributos, identidad, relaciones y métodos.
Identificación de un objeto: un objeto se representa por medio de una tabla o
entidad que esté compuesta por sus atributos y funciones correspondientes.
Características de la POO
Existe un acuerdo acerca de qué características contempla la "orientación a objetos",
las características siguientes son las más importantes:
4
res confunden este concepto con el principio de ocultación, principalmente por-
que se suelen emplear conjuntamente.
5
Propiedades y comportamientos de los objetos
Lo primero que se nos ocurre preguntar es:¿Qué es un objeto? La respuesta es muy
simple, bastará con mirar a nuestro alrededor para ver que estamos rodeados de obje-
tos. Y extendiendo sólo un poco más la idea, notamos que a estos objetos les asigna-
mos sustantivos para poder nombrarlos y diferenciarlos unos de otros.
De esta forma podemos definir a un objeto como una entidad compleja provista de
propiedades (datos, atributos) y comportamiento (funcionalidad, métodos). Tomando
en cuenta estas características, es conveniente afirmar que también representan obje-
tos reales del mundo que nos rodea y palpamos cotidianamente.
Cada objeto expone una interfaz a otros objetos que especifica cómo éstos pueden
interactuar con él, cómo pueden comunicarse con él. Esta interfaz está dada por un
conjunto de métodos; así es como la interfaz del automóvil estará formada por los
métodos “arranca”, “frena”, “dobla”, etc., a través de los cuales podemos interactuar
con el objeto (Figura 1).
motor
ruedas atributos
asientos
arranca()
frena() métodos
dobla()
Por otro lado, cabe aclarar que el comportamiento es exclusivo del objeto; si bien al-
gunos objetos a simple vista son iguales, internamente pueden ser muy distintos. Por
ejemplo, si aprendemos a manejar en un automóvil con motor diesel, podremos sin
ningún problema manejar uno que funcione con nafta. Es decir, los dos objetos se nos
presentan de igual forma, pero es indiscutible que los dos motores son muy distintos.
Esto se conoce como encapsulamiento: los objetos presentan la misma interfaz pero
ocultan información de su funcionamiento.
Gracias al encapsulamiento se puede cambiar un objeto por otro que presente la mis-
ma interfaz, y todo debería funcionar igual.
6
En segundo lugar vale mencionar que el encapsulamiento protege también al objeto
de usos indebidos e inapropiados. Volvamos al ejemplo anterior para detallar un poco
más esta situación. El automóvil utilizará otros mecanismos para llevar a cabo su inter-
faz, como, por ejemplo, abrir válvulas, mover pistones, etc., que no les permitirá usar a
otros objetos (Figura 2).
Ahora que conocemos los conceptos básicos del paradigma, vale agregar que el éxito o el fra-
caso de nuestro programa dependerá de la capacidad que tengamos para reconocer los obje-
tos que trabajarán en conjunto para resolver el problema deseado.
Auto Conductor
motor
ruedas
asientos
arranca()
frena()
dobla()
abrirValvulas()
moverPistones()
Ahora que sabemos agrupar los objetos en clases, podríamos agregar más objetos a
nuestro modelo. Para seguir con el ejemplo, pensemos en el objeto avión: sin lugar a
dudas, es un transporte; es decir que las clases simplemente son conjuntos de objetos
que comparten propiedades y comportamientos.
7
Al agregar el objeto avión definido como un transporte, heredará de éste las propie-
dades (cantidad de pasajeros, cantidad de puertas) y los métodos (anda, frena y
dobla). Si explotamos aún más el ejemplo, notamos que no es lo mismo hacer andar
un automóvil que un avión, de forma tal que necesitamos agregar el método anda en
automóvil, para que ruede, y en avión para que vuele. Esto se denomina polimor-
fismo, y nos permite tener muchas formas de comportamiento; o sea que la referencia
al método anda producirá el comportamiento correcto según el objeto al que se lo esté
ordenando.
Para ordenarle a un objeto que haga algo, debemos mandarle un mensaje. A través
de los mensajes establecemos la comunicación entre los objetos de forma tal que les
ordenamos ejecutar un método con algunos parámetros. En la figura 2 veíamos que el
conductor le ordenaba al auto que arrancara; esta orden se la deba a través de un
mensaje.
Transporte
Automóvil Avión
Figura 3. Árbol de jerarquía de herencias. En este caso,
los objetos Avión y Automóvil heredan del objeto Transporte.
Pero, a su vez, la radio tiene otros componentes, como display, botones, etc. Al igual
que en otros ámbitos, aquí nos encontramos ante una jerarquía de elementos. Ésta se
denomina jerarquía de composición, y sirve para representar que uno o varios obje-
tos están dentro de otro que los contiene (Figura 4).
8
Automóvil
Para finalizar, si tenemos un solo objeto automóvil, no significa que nuestro programa
podrá tener un solo automóvil. Para entender esto hay que agregar el concepto de
instancia, que nos permite crear la cantidad de automóviles que deseemos. Por
ejemplo, si nuestro objeto automóvil tiene una propiedad color, podemos tener ins-
tancias de automóvil con la propiedad color en rojo, azul o verde. Para lograr esto,
cada objeto deberá tener un método, que nos permita crear una instancia de éste.