Professional Documents
Culture Documents
Caractersticas del
Paradigma Orientado a
Objetos
Abstraccin
Encapsulamiento
Herencia
Polimorfismo
1.4.1- Abstraccin
Uno de los mayores desafos del desarrollo de software es idear la
representacin ms apropiada para la solucin a un problema. En el
momento de pensar en soluciones, algunas de ellas pueden ser muy
generales y otras muy detalladas. De aqu surge la pregunta:
Nombre
Apellido
Edad
Fecha de nacimiento
Peso
Altura
Color de ojos
Nombre
Apellido
Legajo
Fecha de ingreso
Carrera
Ttulo
Autor
Editorial
Costo
ISBN
Ttulo
Autor
Contenido
Ejercicios
ndice
1.4.2- Encapsulamiento
Concepto
En el mdulo anterior hemos mencionado que un objeto est compuesto
por atributos y mtodos, siendo estas ltimas funciones que operan
sobre los atributos del objeto.
La combinacin o agrupamiento de atributos y mtodos en
una unidad de forma tal que la manipulacin de los datos se
produce solamente por medio de los mtodos, se denomina
Encapsulamiento.
Mtodo
B
Mtodo
A
Atributos
Mtodo
C
Mtodo
D
OBJETO
En la figura se puede observar que en el ncleo del objeto se encuentran los
atributos (datos) que manipula el objeto. A su vez, este ncleo se encuentra
rodeado y protegido por un conjunto de mtodos del objeto. Mediante el
encapsulamiento se protegen los atributos de un objeto por medio de sus
mtodos.
Cuenta bancaria
Atributos
Nmero de cuenta
Saldo
Mtodos
Extraer dinero
Depositar dinero
Cliente
Atributos
Nombre
Apellido
DNI
Nmero de cuenta
El estado de un objeto est definido por los valores de sus atributos en un
momento dado. Vamos a suponer que tenemos una instancia de la clase
Cliente y otra instancia de la clase Cuenta bancaria con los siguientes
estados:
Cliente
Nombre: Franco
Apellido: Sosa
DNI: 30.123.456
Nmero de cuenta: 111-222333
Cuenta bancaria
Nmero de cuenta: 111-222333
Saldo: 5000
Saldo
Objeto desconocido
modifica el atributo saldo
del objeto cuenta
bancaria
N
cuenta
Objeto desconocido
Objeto
Cuenta bancaria 111-222333
El mtodo
extraer dinero
manipula el
atributo saldo
Objeto desconocido
llama al mtodo
extraer dinero
Objeto
desconocido
Extraer
dinero
El mtodo
extraer dinero
ejecuta las
validaciones
correspondientes
Saldo
Atributos
Depositar
dinero
N
cuenta
Objeto
Cuenta bancaria 111-222333
Objeto
Cliente Juan Sosa
El nuevo
valor del
atributo
saldo ser
distinto al
esperado
N
cuenta
Objeto
Cuenta bancaria 111-222333
Objeto
Cliente Juan Sosa
Objeto
Cuenta bancaria 111-222333
Saldo
Extraer
dinero
Atributos
N
cuenta
Depositar
dinero
El mtodo
depositar dinero
valida el valor
ingresado por el
usuario.
Extraer dinero
Depositar dinero
Nmero de cuenta
Saldo
Encapsulamiento:
El Encapsulamiento es el mecanismo por medio del cual se
implementa la abstraccin. Es el resultado de la abstraccin.
El Encapsulamiento oculta los datos del objeto y el usuario no tiene
acceso a los mismos.
Da como resultado una menor dependencia entre objetos.
interfaz de un objeto y su
un mejor entendimiento y
1.4.3- Herencia
Concepto
Pensemos en los objetos que nos rodean. Muchos de ellos comparten
caractersticas comunes. Por ejemplo, podemos pensar en las
caractersticas que tienen los alumnos y los profesores:
Alumno:
-
Nombre
Apellido
Edad
Direccin
Legajo
Carrera
Fecha de ingreso
Profesor:
-
Nombre
Apellido
Edad
Direccin
Materia
Nombre
Apellido
Edad
Direccin
Alumno
Atributos
Nombre
Apellido
Edad
Direccin
Legajo
Carrera
Fecha de ingreso
Profesor
Atributos
Nombre
Apellido
Edad
Direccin
Materia
Persona
Atributos
Nombre
Apellido
Edad
Direccin
La clase Persona es ahora la superclase de las clases Alumno y Profesor, y
ambas heredan los atributos de la clase Persona (nombre, apellido, edad,
direccin). De esta forma, nuestro modelo de clases queda de la siguiente
manera:
clase Persona tiene los mtodos leer, caminar y correr. Las clases Alumno
y Profesor heredan tambin stos mtodos.
Esta caracterstica del Paradigma Orientado a Objetos de heredar
propiedades de otra clase se denomina Herencia.
La Herencia es un mecanismo que permite que una clase
defina sus propios atributos y mtodos, y tambin pueda
heredar atributos y mtodos de otras clases.
Cuando creamos un objeto alumno, tendr los atributos y mtodos propios
de la clase Alumno, pero tambin tendr los atributos y mtodos de la clase
Persona.
El mecanismo de herencia, produce una relacin de padre-hija en la
cual la clase hija reusa los atributos y mtodos definidos en la clase
padre, pero tambin la clase hija puede definir sus propios atributos y
mtodos.
En el desarrollo de un problema usando el Paradigma Orientado a Objetos,
algunas de las clases definidas se pueden dividir en clases ms especficas,
logrando de esta forma que clases ms generales se dividan en subclases.
La clase que es dividida se la conoce como superclase o clase
padre de las clases especficas.
A las clases ms especficas se las conoce como subclases o
clases hijas de la clase ms genrica.
A las relaciones de herencia tambin se las denomina relaciones de
extensin o generalizacin. La clase Alumno hereda o extiende los
atributos y mtodos de la clase Persona.
Cuando una clase A hereda las propiedades de otra clase, toma el
comportamiento de la clase inmediatamente superior, pero en el caso que
esta ltima sea hija de otra superclase, y sta de otra, y as sucesivamente,
entonces la clase A hereda las propiedades de todas estas clases superiores.
Las subclases se pueden dividir en otras subclases. La definicin de una
subclase se basa en la definicin de la superclase de la cual extiende y puede
especificar su propio conjunto de atributos y mtodos nicos a la subclase.
Un objeto o instancia de una subclase no slo contiene los atributos y
mtodos definidos en la subclase, sino que tambin hereda los atributos y
mtodos definidos en la superclase.
Las relaciones de herencia entre las distintas clases de nuestro modelo dan
forma a un rbol de herencia o rbol jerrquico:
Clase A
Clase B1
Clase C
Clase B2
Clase D1
Clase D2
Vehculo
Vehculo No
Motorizado
Bicicleta
Vehculo
Motorizado
Auto
Camin
Redefinicin de mtodos
Supongamos que tenemos el siguiente modelo de clases:
Figura
Cuadrado
Rectngulo
Tringulo
Herencia mltiple
Hasta el momento, el tipo de herencia que hemos descripto en los ejemplos
corresponde a un tipo de herencia denominada Herencia simple. En
este tipo de herencia, las clases pueden heredar en forma directa (la clase
inmediatamente superior) los atributos y mtodos de solamente una clase
superior y no de ms de una clase. Por ejemplo, en nuestro rbol jerrquico
de vehculos, un auto hereda las propiedades definidas en las clases
Vehculo Motorizado y Vehculo, pero en forma directa solamente
hereda las propiedades de la clase Vehculo Motorizado, es decir, tiene
solamente una clase inmediatamente superior.
Analicemos el siguiente rbol jerrquico de clases:
Vehculo
Vehculo
Dos Ruedas
Bicicleta
Vehculo
Motorizado
Moto
Auto
Ventajas de la Herencia
El uso de Herencia en el Paradigma Orientado a Objetos proporciona las
siguientes ventajas:
Desarrollo de modelos ms naturales e intuitivos por medio de
relaciones jerrquicas.
Reutilizacin de cdigo: cuando se crea una nueva clase
derivada, la misma contiene las propiedades definidas en su clase
padre sin la necesidad de tener que reescribir el mismo cdigo que
represente dichas propiedades. Solamente es necesario hacer
referencia a la clase padre. De esta forma se logra un ahorro de
tiempo y esfuerzo.
Extensibilidad: a partir del desarrollo inicial de una clase base se
pueden desarrollar clases ms especficas o con nuevas
funcionalidades en cualquier momento que sea necesario.
Material
Alto
Ancho
Largo
siguiente
ejemplo
para
entender
el
concepto
de
Producto
Televisor
Notebook
Producto
Televisor
Notebook
Celular
En este caso, solamente fue necesario agregar una nueva clase hija desde la
clase Producto y no se produjo ninguna alteracin sobre el resto de las
clases existentes. Al contar en nuestro modelo con una clase base que
representa cualquier tipo de producto, si en el futuro necesitamos agregar
ms tipos de productos, simplemente se extiende una nueva clase hija
desde la clase Producto.
1.4.4- Polimorfismo
Concepto
Literalmente, la palabra polimorfismo significa muchas formas. En la
Programacin Orientada a Objetos, el Polimorfismo es una caracterstica
que indica la habilidad de los objetos de comportarse de distintas
maneras ante un mismo mensaje.
La interaccin entre objetos se da por medio de mensajes y la respuesta de
un objeto est determinada por la ejecucin de alguna de sus acciones de
acuerdo al mensaje que reciba.
El Polimorfismo es una propiedad del Paradigma Orientado a
Objetos que permite obtener distintas respuestas de diferentes
objetos ante un mismo mensaje que les fue enviado.
Es decir, se trata de un mismo mensaje que origina una accin en un objeto,
pero la respuesta que se recibe puede variar dependiendo del objeto que
reciba el mensaje.
Analicemos el siguiente ejemplo para comprender esta caracterstica.
Supongamos que tenemos dos clases: Monitor e Impresora. Ambas clases
tienen definido el mtodo mostrar informacin. Si tuviramos un objeto
de tipo Monitor y ejecutramos el mtodo mostrar informacin, la accin
resultante sera la visualizacin de la informacin que se est manejando
sobre la pantalla del monitor.
Por otro lado, si tuviramos un objeto de tipo Impresora, el resultado de la
ejecucin del mtodo mostrar informacin sera la impresin de la
informacin sobre una hoja de papel.
Informacin
en
pantalla
mostrar
informacin
Objeto
emisor
Hoja
impresa
1.4.5- Ventajas de la
Programacin
Orientada a Objetos
La utilizacin del Paradigma Orientado a Objetos presenta las siguientes
ventajas:
Modularidad
Una de las mayores ventajas del Paradigma Orientado a Objetos es la
modularidad, y por ello es uno de los principales objetivos buscados por
cualquier diseador de aplicaciones.
De la forma ms simple, podramos considerar un mdulo como un bloque
de cdigo, pudiendo ser este bloque un mtodo, una clase, un
componente, un servicio externo, etc. cuya misin es la ejecucin de una
funcionalidad especfica. El nivel de modularidad de un sistema va a estar
determinado por el nmero de mdulos que lo componen y la interaccin
que existe entre los mdulos.
La modularidad en el desarrollo de una aplicacin ofrece los siguientes
beneficios:
Se puede resolver un problema como una divisin en
subproblemas ms pequeos y de menor complejidad, siendo
cada una de estas divisiones un mdulo.
Si es necesario aplicar un cambio, solamente se aplica a un mdulo o
a un grupo reducido de mdulos, disminuyendo de esta forma el
impacto en el resto del sistema.
Facilita el entendimiento del sistema, ya que para entender un
mdulo no es necesario examinar los detalles de la implementacin
del resto de los mdulos. Es suficiente con conocer el propsito de
cada mdulo.
Se pueden realizar pruebas sobre un mdulo o un grupo de
mdulos independientemente del resto del sistema.
La modularidad en el desarrollo de una aplicacin ofrece una forma
de razonar ms natural e intuitiva en comparacin a otros
paradigmas. La forma de resolver un problema en el Paradigma
Orientado a Objetos se acerca a la forma de pensar de las personas.
Un objeto puede ser visto como un mdulo que encapsula las
caractersticas de una entidad de la realidad.
Facilidad de mantenimiento
El desarrollo modular del Paradigma Orientado a Objetos facilita el
mantenimiento del sistema. Por ejemplo, si realizamos una modificacin
en una superclase, el cambio se va replicar en las subclases sin necesidad de
reescribir el mismo cdigo en las subclases.
Por otro lado, si se modifica el cdigo de una clase que no tiene subclases, el
cambio se mantiene aislado a esa nica clase reduciendo de esta forma el
impacto en el resto de las clases.
Extensibilidad
La gran mayora de los sistemas sufren alteraciones a lo largo de su vida.
Estas alteraciones se deben entre otras cosas al entorno cambiante en el que
se desenvuelve el sistema. Nuevos requerimientos con nuevas
funcionalidades pueden surgir, razn por la cual es deseable que nuestro
sistema sea lo suficientemente flexible para dar soporte a las nuevas
funcionalidades sin alterar el resto del sistema.
El Paradigma Orientado a Objetos permite el diseo de sistemas
extensibles. La caracterstica de Herencia da soporte al crecimiento de un
programa sin modificar las clases existentes. Si se desea agregar una nueva
funcionalidad representada en una subclase, simplemente se la agrega en el
modelo de clases y se indica la relacin de extensin con su clase padre,
permaneciendo el resto de las clases sin modificarse.
Este beneficio es dependiente del diseo del sistema, por lo que es
importante definir un buen modelo de clases con la correcta definicin de
la jerarqua de clases. Si logramos un buen diseo podremos:
Reutilizacin
Cuando desarrollamos un sistema, resulta interesante que los mdulos que
vamos desarrollando estn disponibles para su utilizacin tantas veces
como sea necesario cuando se los necesite.
Los conceptos inherentes al Paradigma Orientado a Objetos son totalmente
propicios para la reutilizacin de cdigo. Pero cmo logramos reutilizar
cdigo en el desarrollo de un programa? El Paradigma Orientado a Objetos
me permite reutilizar cdigo mediante el encapsulamiento de una
funcionalidad en un mdulo, ya sea mediante un mtodo, una clase, un
paquete, un componente, etc. De esta forma, se puede llamar a dicho
mdulo cuantas veces sea necesario cada vez que se lo necesite.
Bibliografa Lectura 2
Booch Grady, (2007), Object-Oriented Analysis and Design with Applications
(3a ed.), EE.UU, Editorial Addison-Wesley.
Rumbaugh James, (1999), Modelado y Diseo Orientado a Objetos, Espaa,
Editorial Librisite.
Bruce Eckel, (2006), Thinking in Java (4a ed.), EE.UU, Editorial Prentice Hall.
Bertrand Meyer, (1997), Object-Oriented Software Construction (2a ed.),
EE.UU, Editorial Prentice Hall.
Wikipedia, (2011), Abstraccin (informtica), Recuperado el 07/05/2011 de
http://es.wikipedia.org/wiki/Abstracci%C3%B3n_%28inform%C3%A1tica%29