Está en la página 1de 10

CARACTERÍSTICAS POO

 Abstracción

 Herencia

 Encapsulamiento

 Polimorfismo

 Relaciones

 Asociación

 Herencia

 Multiplicidad

 Elementos

 Clases

• Métodos(sobre escritura, sobre carga)

• Atributos

• Propiedades (.Net)

 Objetos - Mensajes

 Interfaces

La programación 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 módulos más fáciles de
escribir, mantener y reutilizar.

Abstracción:

Cada vez que pronunciamos una palabra, realmente lo que hacemos


es asociar ese sonido (o ese conjunto de garabatos al escribir) con
una serie de cosas. Decimos que una ave es tal cosa, que una silla es
tal otra, etc.

Cuando vamos a aplicar la POO, lo primero que debemos hacer es


cumplir con una vieja máxima de guerra: Divide y Vencerás. Es decir,
lo que hacemos es seccionar nuestro código en grupos de código más
pequeño que, al unirlos, hacen el trabajo. Un buen ejemplo de
abstracción es el cuerpo humano, aunque el cuerpo es una unidad,
está dividido en lo que conocemos por sistemas (el sistema
respiratorio, el sistema linfático, cardiovascular, etc., etc.). Estos
sistemas, a su vez están compuestos por otros más pequeños: los
órganos, y así sucesivamente. La abstracción nos permite dividir
nuestro programa en distintos objetos que se agrupan para formar
cosas más complejas.

Pero ¿qué demonios es realmente la abstracción? Básicamente es la


capacidad de separar los elementos (al menos mentalmente) para
poder verlos de forma singular. Como cuando describimos el cuerpo
humano y decimos cabeza, brazo(s), pierna(s), etc.

Encapsulación:

También conocida como ocultamiento. Cuando me acuesto a ver


televisión no me preocupo del modo como éste funciona, o lo que
hace para cambiar de canal o aumentar el volumen. A menos que
seas experto en electrónica o técnico en televisores, te pasará lo
mismo: no lo sabes y no te importa; sólo sabes que al presionar un
botón ocurre la magia.

La encapsulación se encarga de mantener ocultos los procesos


internos que necesita para hacer lo que sea que haga, dándole al
programador acceso sólo a lo que necesita. Esto da dos ventajas
iniciales: Lo que hace el usuario puede ser controlado internamente
(incluso sus errores), evitando que todo colapse por una intervención
indeseada (tú no quieres que tu mamá, que no tiene ni idea de
electrónica, abra tu televisor y empiece a jugar con los circuitos para
cambiar los canales manualmente ¿verdad?). La segunda ventaja es
que, al hacer que la mayor parte del código esté oculto, puedes hacer
cambios y/o mejoras sin que eso afecte el modo como los usuarios
van a utilizar tu código. Sólo tienes que mantener igual la forma de
acceder a él (en el caso del control de la tele, que los botones sigan
siendo los mismos y que el botón de “apagado” no cambie el
volumen). Por cierto, estas puertas de acceso que das a los usuarios
son lo que se conoce como interfaz.

Herencia:

Uno de los elementos (a mi modo de ver) más interesantes de la


P.O.O. La herencia es la capacidad que tiene una clase de derivar las
propiedades y métodos de otra (suena a chino ¿no? Calma, lo
veremos luego con paciencia ). Tratemos de explicarlo con un
ejemplo:

Decimos que una gallina es un ave; esto quiere decir que las gallinas
tienen características comunes con otras aves (pico, plumas, etc.), es
decir que la gallina hereda las características comunes de todas las
aves. Pero además, resulta que un ave es un animal, lo que significa
que también comparte características comunes al caballo, el perro, el
hombre (seeee, somos animales) y cualquier otra cosa que pueda ser
clasificada como animal.

La herencia nos permite, entre otras cosas, evitar tener que escribir el
mismo código una y otra vez, puesto que al definir que una categoría
(que en programación llamaremos clase) pertenece a otra,
automáticamente estamos atribuyéndoles las características
generales de la primera, sin tener que definirlas de nuevo.

Polimorfismo

En programación orientada a objetos se denomina polimorfismo a la


capacidad que tienen los objetos de una clase de responder al mismo
mensaje o evento en función de los parámetros utilizados durante su
invocación. Un objeto polimórfico es una entidad que puede contener
valores de diferentes tipos durante la ejecución del programa.

En la práctica esto quiere decir que un puntero a un tipo puede


contener varios tipos diferentes, no solo el creado. De esta forma
podemos tener un puntero a un objeto de la clase Trabajador, pero
este puntero puede estar apuntando a un objeto subclase de la
anterior como podría ser Márketing, Ventas o Recepcionistas (todas
ellas deberían ser subclase de Trabajador).

El concepto de polimorfismo se puede aplicar tanto a funciones como


a tipos de datos. Así nacen los conceptos de funciones polimórficas y
tipos polimórficos. Las primeras son aquellas funciones que pueden
evaluarse o ser aplicadas a diferentes tipos de datos de forma
indistinta; los tipos polimórficos, por su parte, son aquellos tipos de
datos que contienen al menos un elemento cuyo tipo no está
especificado.

RELACIONES
Las relaciones entre objetos son, precisamente, los enlaces que
permiten a un objeto relacionarse con aquellos que forman parte de
la misma organización.
Las hay de dos tipos fundamentales:
-Relaciones jerárquicas. Son esenciales para la existencia misma de la
aplicación porque la construyen. Son bidireccionales, es decir, un
objeto es padre de otro cuando el primer objeto se encuentra situado
inmediatamente encima del segundo en la organización en la que
ambos forman parte; asimismo, si un objeto es padre de otro, el
segundo es hijo del primero (en la fig. 2, B es padre de D,E y F, es
decir, D,E y F son hijos de B; en la fig. 3, los objetos B y C son padres
de F, que a su vez es hijo de ambos).
Una organización jerárquica simple puede definirse como aquella en
la que un objeto puede tener un solo padre, mientras que en una
organizacion jerárquica compleja un hijo puede tener varios padres).
-Relaciones semánticas. Se refieren a las relaciones que no tienen
nada que ver con la organización de la que forman parte los objetos
que las establecen. Sus propiedades y consecuencia solo dependen
de los objetos en sí mismos (de su significado) y no de su posición en
la organización.
Se puede ver mejor con un ejemplo: supongamos que vamos a
construir un diccionario informatizado que permita al usuario obtener
la definición de una palabra cualquiera. Supongamos que, en dicho
diccionario, las palabras son objetos y que la organización jerárquica
es la que proviene de forma natural de la estructura de nuestros
conocimientos sobre el mundo.
La raíz del diccionario podría llamarse TEMAS. De éste término
genérico descenderán tres grandes ramas de objetos llamadas VIDA,
MUNDO y HOMBRE. El primero (vida) comprenderá las ciencias
biológicas: Biología y Medicina. El segundo (mundo), las ciencias de la
naturaleza inerte: las Matemáticas, la Física, la Química y la Geología.
El tercero (hombre) comprenderá las ciencias humanas: la Geografía,
la Historia, etc.
Herencia
• Es una relación de generalización/especialización del tipo ES-UN(A)
que indica que una clase es una variante de otra clase. Decir que “la
clase B ES-UNA clase A” indica que las principales características de la
clase B se heredan de la clase A.
• Una subclase(derivada) puede heredar la estructura y
comportamiento de su superclase(base).
• Es el mecanismo por el cual una clase de objetos puede ser definida
como un caso especial de otra clase más genérica.
• Los casos especiales de una clase se denominan
Subclases(derivadas).
• La clase más genérica, se conoce como la Superclase(base) de
todos sus casos especiales. Además de los métodos y atributos que
heredan, las Subclases definen sus propios métodos y atributos.
Tambien, pueden redefinir algunos de los heredados (overriding).
• La interface de mensajes definida para una clase base también es
heredada por las clases derivadas. Esto implica que todas las
Subclases de una Superclase estan preparadas para responder
correctamente a los mismos mensajes que la Clase padre. Esta
propiedad es extremadamente útil porque nos permite tratar de la
misma manera a todas las especializaciones de una Clase.
• Al construir una clase lo primero que debemos hacer es rastrear las
clases existentes en bibliotecas de clases.
Si existe una clase que contenga la mayoria de los atributos y
operaciones requeridas debemos heredar de ella, y añadir nuevos
miembros si hace falta. Las características de la clase base pueden
sobrescribirse en la clase derivada. Si no existe, solo entonces
construimos la nueva clase de la nada, esto es no usamos herencia.

Enlaces y asociaciones

• Los enlaces y las asociaciones son los medios para establecer


relaciones entre objetos y clases.
Un enlace es la conexión física o conceptual entre instancias de
objetos.

• Una asociación describe un grupo de enlaces con estructura y


semántica comunes.
• Una asociación describe un grupo de enlaces con una estructura y
una semántica en común.
• Una relación que describe un conjunto de vínculos.
• Una asociación representa una dependencia semántica entre clases
e implica la dirección de esta dependencia.
• En general, las asociaciones son bidireccionales
• Lo más normal es que sea binarias
• La multiplicidad es una característica intrínseca e importante de las
asociaciones
• Dependencias semánticas
• La asociación es la más general de las relaciones, y la de mayor
relajación semántica

Multiplicidad
• La multiplicidad especifica el número de instancias de una clase que
pueden estar relacionadas con una única instancia de una clase
asociada.

ELEMENTOS

Método: Es la implementación de un algoritmo que representa una


operación o función que un objeto realiza. El conjunto de los métodos
de un objeto determinan el

comportamiento del objeto.

ATRIBUTOS

Los atributos son datos específicos de una clase. En la definición de


clase se indica cuales son los atributos y conque nombre se va a
designar a cada uno de ellos. El que una declaración de atributo sea
pública significa que el elemento definido pueda utilizarse libremente
desde cualquier otro punto del programa.
En el caso de una clase su carácter público es necesario para poder
crear objetos de esa clase en otros puntos del programa (new). Para
acceder a un atributo hay que indicarle el nombre del objeto al que
pertenece:

unaEntrada.nombre = "Juan Pablo"

unaEntrada.apellidos = "de Frutos Martínez"

Sobre-escritura:
La sobre-escritura, se aplica a los métodos y esta directamente
relacionada a la herencia y se refiere a la re-definición de los métodos
de la clase base en las subclases, por ejemplo, en la relación de
herencia del ejemplo de las figuras aunque la clase base “Figura”
tiene los métodos “calcularArea” y “calcularPerimetro”, las subclases
“Circulo”, “Cuadrado”, “Triangulo” y “Rectangulo” redefinen estos
métodos ya que el calculo del área y el perímetro de cada uno de
ellos es diferente.

Sobrecarga: Modalidad de herencia, que permite usar el mismo


módulo para diferentes implementaciones de una operación, es decir,
usando diferente signatura: una función que pueda recibir un
parámetro, o dos parámetros o ninguno, pero opera correctamente
con cualquiera de ellos con que se invoque, está sobrecargada; por
ejemplo, la función saludar(), cuando va sin parámetros retorna la
cadena “Hola”, cuando se invoque con un nombre,
(saludar(var_nombre)), retorna “Hola $var_nombre”, y así
sucesivamente. Esto debe manejarse por código dentro de la función.

Clases (I)
· Los objetos del mundo real se pueden agrupar en tipos (clases)
personas, coches, ordenadores, lavadoras, aviones, etc) de manera
que los objetos de la misma clase tienen la misma estructura (estado)
y el mismo comportamiento, aunque el estado
de dos objetos puede ser distinto.
· Los objetos software también se pueden agrupar en clases utilizando
un criterio similar: los objetos de la misma clase comparten estado y
comportamiento.
· En terminología orientada a objetos, un objeto concreto de una clase
es una instancia de la clase.
Una clase es un patrón o prototipo que define las variables y los
métodos comunes a todos los objetos de un cierto tipo.
Clases (II)
· Las variables en las que se almacena el estado de un objeto, se
llaman variables de instancia.
· Los métodos que implementan el comportamiento de un objeto se
llaman métodos de instancia.
Clases (III)
· Por ejemplo, la clase Coche declara las variables de instancia
necesarias para almacenar el Nº de marchas, la velocidad actual, y la
marcha actual. La clase también declara y proporciona la
implementación de los métodos de instancia que permiten arrancar,
acelerar, frenar y cambiar de marcha. Después de crear la clase
Coche se pueden crear los objetos de la clase. Cada instancia de la
clase tiene su propia copia de todas las variables de instancia
definidas en la clase.
cambiar de marcha
arrancar
acelerar
frenar
Nº de marchas
velocidad actual
marcha actual
cambiar de
marcha
arrancar
acelerar
frenar
Nº de marchas =5
velocidad actual =80
marcha actual =3
cambiar de
marcha
arrancar
acelerar
frenar
Nº de marchas =4
velocidad actual =120
marcha actual = 4
coche 1 coche 2
Coche
Clases (IV)
· Variables de clase: las clases, además de definir las variables de
instancia, también pueden definir variables de clase, que contienen
información común para todas las instancias de la clase.
Si un objeto modifica el valor de una variable de clase, esta
modificación afecta a todos los objetos de la clase.
· Por ejemplo, en una aplicación de facturación, la clase Factura puede
tener una variable de clase con el IVA que se aplica a las facturas, ya
que este valor es común a todos los objetos de la clase Factura, y no
sería eficiente que cada uno de los objetos de la clase tuviera una
copia.
· Si en una aplicación se quiere contabilizar el número de instancias
que hay de una determinada clase, se puede utilizar una variable de
clase.
Por ejemplo, la clase Ventana de una iterfaz gráfica puede declarar
variables de clase para almacenara el número de ventanas visibles, el
tamaño por omisión y el tamaño máximo de cualquier ventana.
Clases (V)
· Métodos de clase: son métodos que afectan a la clase en sí, y a los
cuales se puede acceder directamente desde la clase en oposición al
acceso a los métodos de instancia, que se realiza siempre a través de
los objetos · Es importante señalar que para invocar un método de
clase no es necesario haber creado ningún objeto que reciba como
mensaje una invocación de ese método.
· Para usar un método de instancia, por el contrario, se necesita
obligatoriamente que se cree un objeto de la clase que reciba el
mensaje de ese método.
· Por ejemplo, en la clase Factura se podrían tener métodos para
consultar y modificar el valor del IVA aplicable a las facturas, ya que
este valor tiene sentido en sí mismo y no está condicionado a la
existencia de objetos de la clase.

Objetos (I)
· Los objetos del mundo real comparten tres características:
· estado o estructura: por ejemplo, en un coche el nº de marchas, la
velocidad actual, la marcha actual, etc...
· comportamiento: por ejemplo, un coche puede arrancar, acelerar,
frenar, cambiar marcha, etc....
· identidad: aquello que distingue a un objeto de todos los demás, por
ejemplo, si la estructura de una persona es su nombre y edad, es
posible que haya dos juanes de 20 años que no son la misma
persona.
· Los objetos software también tienen esas características:
· estado: se almacena en un conjunto de variables.
· comportamiento: se implementa con métodos. Un método es una
función (subrutina, subprograma, procedimiento).
· identidad: garantizada por los sistemas de poo.
Un objeto es una agrupación de variables y métodos distinguible de
todos los demás (identidad propia) desde su creación.
Objetos (II)
· Los objetos software se utilizan para:
· representar objetos del mundo real.
· en un juego de carreras de coches, los coches del mundo real se
podrían
representar mediante objetos software.
· en una aplicación de dibujo, las figuras geométricas (polígonos,
rectas,...)
se podrían representar mediante objetos software.
· en una aplicación de gestión de personal de una empresa, los
trabajadores de la empresa se podrían representar mediante objetos
software.
· representar conceptos abstractos.
· en interfaces gráficas de usuario, es habitual representar con
objetos
(llamados eventos) las acciones realizadas por el usuario (ratón y
teclado).
· en un entorno de simulación e identificación de la estructura
tridimensional de una proteína, las posibles estructuras candidatas
(no se corresponden con ningún objeto real) podrían represantarse
mediante
objetos.
Objetos (III)
· Representación visual de un objeto software.
Variables
(estado) Métodos
(comportamiento)
Mensajes (I)
· Una aplicación orientada a objetos se compone de múltiples
objetos que se comunican mediante mensajes.
· Si un objeto A quiere que un objeto B ejecute uno de sus métodos, el
objeto A le envía un mensaje al objeto B. objeto A objeto B mensaje
· Cada mensaje tiene tres componentes:
· el objeto destinatario del mensaje
· el nombre del método a ejecutar
· los parámetros (si existen) del método
Mensajes (II)
· Por ejemplo, en un juego de ordenador de carreras de coches, cada
piloto se comunica con su coche. piloto coche cambiar marcha (2)
Mensaje con parámetros
piloto coche
arrancar

[1]http://thefricky.wordpress.com/2007/12/28/programacion-
orientada-a-objetos-caracteristicas-de-la-poo/

[2]
http://es.wikipedia.org/wiki/Polimorfismo_(programaci%C3%B3n_orien
tada_a_objetos)

[3] http://www.mastermagazine.info/termino/4880.php

[4] http://www.monografias.com/trabajos/objetos/objetos.shtml

[5]http://www.mentores.net/Default.aspx?type=art&site=81&tabid=1
04&parentid=26

[6]
http://astreo.ii.uam.es/~alfonso/poo_curso_02/conceptos_poo_1.pdf
[7]
http://www.elguille.info/colabora/puntoNET/canchala_FundamentosPO
O.htm

[8] http://apdaza-poo.blogspot.com/2008/04/polimorfismo.html

[9]
http://pisuerga.inf.ubu.es/lsi/Invest/Java/Tuto.Oct98/1_Intro/1_IntPoo.ht
m

[10]
http://astreo.ii.uam.es/~alfonso/poo_curso_02/conceptos_poo_1.pdf