Вы находитесь на странице: 1из 9

CARACTERÍSTICAS O PILARES DE LA PROGRAMACIÓN ORIENTADO A

OBJETOS

ABSTRACCIÓN
Mirar el mundo real y convertirlo en mundo software (dominio real y
dominio software). Tomamos de la realidad lo más importante se resume
en tres cosas:
1. Entidad
2. Comportamiento
3. Características (cuando las características tienen valores decimos
que el objeto tiene un estado)
Cuando identificamos las 3 cosas realizamos el proceso de abstracción.

El proceso de abstracción permite seleccionar las características relevantes


dentro de un conjunto e identificar comportamientos comunes para definir
nuevos tipos de entidades en el mundo real. La abstracción es clave en el
proceso de análisis y diseño orientado a objetos, ya que mediante ella
podemos llegar a armar un conjunto de clases que permitan modelar la realidad
o el problema que se quiere atacar.
Ignorancia Selectiva
 La abstracción nos ayuda a trabajar con cosas complejas
 Se enfoca en lo importante
 Ignora lo que no es importante (simplifica)
Una clase es una abstracción en la que:
 Se enfatizan las características relevantes
 Se suprimen otras características
Una clase debe capturar una y solo una abstracción clave. [1]
Principio de Abstracción
Mediante la abstracción la mente humana modeliza la realidad en forma de
objetos. Para ello busca parecidos entre la realidad y la posible implementación
de objetos del programa que simulen el funcionamiento de los objetos reales.
Los seres humanos no pensamos en las cosas como un conjunto de cosas
menores; por ejemplo, no vemos un cuerpo humano como un conjunto de
células. Los humanos entendemos la realidad como objetos con
comportamientos bien definidos. No necesitamos conocer los detalles de
porqué ni cómo funcionan las cosas; simplemente solicitamos determinadas
acciones en espera de una respuesta; cuando una persona desea desplazarse,
su cuerpo le responde comenzando a caminar.
Pero la abstracción humana se gestiona de una manera jerárquica, dividiendo
sucesivamente sistemas complejos en conjuntos de subsistemas, para así
entender más fácilmente la realidad. Esta es la forma de pensar que la
orientación a objeto intenta cubrir. [2]
Abstracción
Denota las características esenciales que distinguen a un objeto de otros tipos
de objetos, definiendo precisas fronteras conceptuales, relativas al observador.
• Surge del reconocimiento de similitudes entre ciertos objetos,
situaciones o procesos en el mundo real.
• Decide concentrarse en estas similitudes e ignorar las diferencias.
• Enfatiza detalles con significado para el usuario, suprimiendo aquellos
detalles que, por el momento, son irrelevantes o distraen de lo esencial.
• Deben seguir el "principio de mínimo compromiso", que significa que la
interface de un objeto provee su comportamiento esencial, y nada más
que eso. Pero también el "principio de mínimo asombro": capturar el
comportamiento sin ofrecer sorpresas o efectos laterales. [3]
Abstracción

La abstracción consiste en captar las características esenciales de un objeto, así


como su comportamiento. Por ejemplo, los automóviles, ¿Qué características
podemos abstraer de los automóviles? O lo que es lo mismo ¿Qué
características semejantes tienen todos los automóviles? Todos tendrán una
marca, un modelo, número de chasis, peso, llantas, puertas, ventanas, etc. Y en
cuanto a su comportamiento todos los automóviles podrán acelerar, frenar,
retroceder, etc. [4]

ENCAPSULAMIENTO
Otro de los pilares de la orientación a objetos es el encapsulamiento. Para
entender este principio veamos un ejemplo práctico:
Como todos ustedes se imaginarán, no es necesario ser mecánico de
automóviles para poder manejar uno. Si el comprender cómo es el
funcionamiento interno del motor, la dirección, los frenos, los cilindros, etc.
fuera requisito para poder manejar un automóvil, serían muchos menos los
conductores certificados y sería mucho más difícil aprender a manejar. Es más,
si a cualquier automotriz se le ocurriera cambiar el funcionamiento interno de
alguna de estas cosas, probablemente todos los conductores tendrían que
volver a aprender como funciona el nuevo componente interno para poder
seguir manejando sin problemas. Por suerte esto no es así, ya que la
complejidad interna del funcionamiento de un automóvil está escondida de los
conductores (usuarios). Para poder interactuar con el automóvil, éste nos
expone una interfaz sencilla y definida, que no cambia nunca por más que
cambien internamente el funcionamiento de sus componentes. Esta interfaz
está compuesta por el volante, los pedales, la palanca de cambios, el asiento,
etc. De esta forma decimos que el automóvil ha encapsulado su complejidad
interna.
Principio que establece que los atributos propios de un objeto no deben ser
visibles desde otros objetos
 Deben ser declarados como privados
Permite abstraer al resto del mundo de la complejidad de la implementación
interna
Permite exponer el estado del objeto sólo a través del comportamiento que le
hayamos definido mediante miembros públicos
¿Por qué es útil?
 Punto de Control/Validación
 Mejor respuesta ante los Cambios [1]

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las características y


comportamientos, esto es, las variables y métodos. Es tener todo esto es una
sola entidad. En los lenguajes estructurados esto era imposible. Es evidente
que el encapsulamiento se logra gracias a la abstracción y el ocultamiento.

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad,


ya que tendremos a las Clases como cajas negras donde sólo se conoce el
comportamiento pero no los detalles internos, y esto es conveniente porque
nos interesará será conocer qué hace la Clase pero no será necesario saber
cómo lo hace. [4]

Encapsular se refiere al hecho de ocultar la implementación es decir ocultar los


atributos de nuestros objetos y hacer visibles los métodos que escriben o
retornan dichos valores. De esta forma el usuario de la clase puede obviar la
implementación de los métodos y propiedades para concentrarse sólo en cómo
usarlos. Por otro lado se evita que el usuario pueda cambiar su estado de
maneras imprevistas e incontroladas. [5]

POLIMORFISMO
Es la propiedad que tienen los objetos de permitir invocar genéricamente un
comportamiento (método) cuya implementación será delegada al objeto
correspondiente recién en tiempo de ejecución
El polimorfismo tiende a existir en las relaciones de herencia, pero no siempre
es así.

Ejemplo: La definición del método reside en la clase base

La implementación del método reside en la clase derivada


La invocación es resuelta al momento de ejecución
Aquí tenemos un ejemplo práctico de la implementación de polimorfismo en un
diseño orientado a objetos. Por un lado tenemos la clase base “Transporte”,
que posee los métodos “Avanzar” y “Frenar”. Por otro lado tenemos tres clases
distintas derivadas de la clase “Transporte”, cada una de las cuales podrá
sobrescribir la implementación de los métodos Avanzar y Frenar para que su
comportamiento sea más específico.
Ahora bien, como todas heredan de la misma clase base, las clases derivadas
pueden ser tratadas genéricamente. Esto quiere decir que podríamos tener un
array que almacene objetos de tipo Transporte, y recorrerlo luego para llamar al
método “Avanzar” de cada uno. De esta forma, en tiempo de codificación es
imposible saber a qué método “Avanzar” se está llamando en realidad (al del
Auto? Al del caballo? Al del transbordador?), sino que esta decisión es tomada
en tiempo de ejecución en base al tipo particular de objeto que esté
instanciado.
En pseudocódigo, esto se escribiría de la siguiente manera:
Definir arrayTransportes (3) de tipo Transporte
arrayTransportes(1) = nuevo Automóvil() //Un automóvil ES UN TIPO DE
transporte
arrayTransportes(2) = nuevo Transbordador() //Un Transbordador ES UN TIPO
DE transporte
arrayTransportes(3) = nuevo Caballo() //Un Caballo ES UN TIPO DE transporte
Por Cada (Transporte t en arrayTransportes)
t.Avanzar()
t.Frenar()
Fin [1]
El polimorfismo, en programación orientada a objetos, se refiere a la posibilidad
de acceder a un variado rango de funciones distintas a través del mismo
interfaz. O sea, un mismo identificador puede tener distintas formas (distintos
cuerpos de función, distintos comportamientos) dependiendo del contexto en el
que se halle. El polimorfismo se puede establecer mediante sobrecarga, sobre-
escritura y enlace dinámico [6]
La palabra polimorfismo proviene del griego y significa que posee varias
formas diferentes. Este es uno de los conceptos esenciales de una
programación orientada a objetos. Así como la herencia está relacionada con
las clases y su jerarquía, el polimorfismo se relaciona con los métodos.
En general, hay tres tipos de polimorfismo:

Polimorfismo de sobrecarga : El polimorfismo de sobrecarga ocurre cuando


las funciones del mismo nombre existen, con funcionalidad similar, en clases
que son completamente independientes una de otra (éstas no tienen que ser
clases secundarias de la clase objeto). Por ejemplo, la clase complex, la clase
image y la clase link pueden todas tener la función "display". Esto significa que
no necesitamos preocuparnos sobre el tipo de objeto con el que estamos
trabajando si todo lo que deseamos es verlo en la pantalla.
Por lo tanto, el polimorfismo de sobrecarga nos permite definir operadores
cuyos comportamientos varían de acuerdo a los parámetros que se les aplican.
Así es posible, por ejemplo, agregar el operador + y hacer que se comporte de
manera distinta cuando está haciendo referencia a una operación entre dos
números enteros (suma) o bien cuando se encuentra entre dos cadenas de
caracteres (concatenación).

Polimorfismo paramétrico (también llamado polimorfismo de plantillas): El


polimorfismo paramétrico es la capacidad para definir varias funciones
utilizando el mismo nombre, pero usando parámetros diferentes (nombre y/o
tipo). El polimorfismo paramétrico selecciona automáticamente el método
correcto a aplicar en función del tipo de datos pasados en el parámetro.
Polimorfismo de inclusión (también llamado redefinición o subtipado): La
habilidad para redefinir un método en clases que se hereda de una clase base
se llama especialización. Por lo tanto, se puede llamar un método de objeto
sin tener que conocer su tipo intrínseco: esto es polimorfismo de subtipado.
Permite no tomar en cuenta detalles de las clases especializadas de una
familia de objetos, enmascarándolos con una interfaz común (siendo esta la
clase básica).
Imagine un juego de ajedrez con los objetos rey, reina, alfil, caballo, torre y
peón, cada uno heredando el objeto pieza.
El método movimiento podría, usando polimorfismo de subtipado, hacer el
movimiento correspondiente de acuerdo a la clase objeto que se llama. Esto
permite al programa realizar el movimiento.de_piezasin tener que verse
conectado con cada tipo de pieza en particular. [7]

HERENCIA
Es una relación entre clases en la cual una clase comparte la estructura y
comportamiento definido en otra clase (Grady Booch)
Cada clase que hereda de otra posee:
 Los atributos de la clase base además de los propios
 Soporta todos o algunos de los métodos de la clase base
Una subclase hereda de una clase base.
El propósito principal de la herencia es el de organizar mejor las clases que
componen una determinada realidad, y poder agruparlas en función de
atributos y comportamientos comunes a la vez que cada una se especializa
según sus particularidades.
Cabe aclarar además que hay dos tipos de herencias:
– Herencia Simple: una clase derivada puede heredar sólo de una clase
base (los lenguajes .NET soportan este tipo de herencia)
– Herencia Múltiple: una clase derivada puede heredar de una o más
clases base (C++ es un ejemplo de lenguaje que soporta este tipo de
herencia). [1]

La herencia es específica de la programación orientada a objetos, donde una


clase nueva se crea a partir de una clase existente. La herencia (a la que
habitualmente se denomina subclases) proviene del hecho de que la subclase
(la nueva clase creada) contiene las atributos y métodos de la clase primaria.
La principal ventaja de la herencia es la capacidad para definir atributos y
métodos nuevos para la subclase, que luego se aplican a los atributos y
métodos heredados.
Esta particularidad permite crear una estructura jerárquica de clases cada vez
más especializada. La gran ventaja es que uno ya no debe comenzar desde
cero cuando desea especializar una clase existente. Como resultado, se
pueden adquirir bibliotecas de clases que ofrecen una base que puede
especializarse a voluntad (la compañía que vende estas clases tiende a
proteger las datos miembro usando la encapsulación).
Jerarquía de clase: La relación primaria-secundaria entre clases puede
representarse desde un punto de vista jerárquico, denominado vista de clases
en árbol. La vista en árbol comienza con una clase general llamada superclase
(a la que algunas veces se hace referencia como clase primaria, clase padre,
clase principal, o clase madre; existen muchas metáforas genealógicas). Las
clases derivadas (clase secundaria o subclase) se vuelven cada vez más
especializadas a medida que van descendiendo el árbol. Por lo tanto, se suele
hacer referencia a la relación que une a una clase secundaria con una clase
primaria mediante la frase "es una" x o y. [8]
[8]

RELACIONES

RELACION Todo sistema abarca muchas clases y objetos


Los objetos contribuyen en el comportamiento de un sistema
colaborando entre si
 La colaboración se logra a través de las relaciones
Existen dos tipos principales de relaciones
 Asociación
 Agregación

RELACIONES DE ASOCIACIÓN

Una asociación es una conexión entre dos clases que representa una
comunicación
 Una asociación puede tener nombre
 La comunicación puede ser tanto uni como bi-direccional (por
defecto)
 La multiplicidad es el número de instancias que participan en una
asociación
Ejemplo:
 Una Persona es Dueña de un Vehículo
 Un Vehículo Pertenece a una Persona
Persona -dueño Vehiculo

RELACIONES DE AGREGACIÓN
La agregación es una forma especial de asociación donde un todo se
relaciona con sus partes
 También se conoce como “una parte de” o una relación de
contención
Ejemplo:
 Una Puerta es una parte de un Vehículo
 El Vehículo es azul, la Puerta es Azul
 Mover el Vehículo implica mover la Puerta [1]

Vehiculo Puerta
-color
+Mover()

INFOGRAFÍA:
1. Introducción orientado a objetos. Material Desarrollo Estrella cinco.
2. http://pisuerga.inf.ubu.es/lsi/Invest/Java/Tuto/I_1.htm
3. http://programarenc.webcindario.com/Cplus/capitulo1.htm
4. http://java.ciberaula.com/articulo/tecnologia_orientada_objetos
5. http://apdaza-poo.blogspot.com/2008/04/encapsulamiento.html
6. http://danubuntu.wordpress.com/2008/07/30/conceptos-sobre-
polimorfismo-y-programacion-orientada-a-objetos/
7. http://es.kioskea.net/contents/poo/polymorp.php3
8. http://es.kioskea.net/contents/poo/heritage.php3