UNIVERSIDAD NACIONAL DE SAN CRISTÓBAL DE HUAMANGA
E.F.P. DE INGENIERÍA DE SISTEMAS
PROGRAMACIÓN ORIENTADA A OBJETOS EN JAVA
Es una metodología de diseño de software y un paradigma de programación que define
los programas en términos de “clases de objetos”, objetos que son entidades que
combinan estado (datos) y comportamiento (procedimientos o métodos).
La POO es un programa con un conjunto de objetos, que se comunican entre ellos para
realizar tareas y que es un modelo que representa un subconjunto del mundo real, de
modo fácil y natural, donde los objetos van a tener características (atributos) y
comportamientos (métodos).
Los lenguajes orientados a objetos definen objetos y después envían mensajes a los
objetos diciendo que realicen alguno de los métodos especificados para el objeto.
Entre las ventajas de la POO es que los métodos están pensados para hacer programas
y módulos más fáciles de escribir, mantener y reutilizar, así como sean modulares y
reutilizables parte de los códigos de estos programas.
MECANISMOS BÁSICOS DE POO
Objetos: se pueden definir como las unidades básicas de construcción, para la
conceptualización, diseño o programación, esto es que son instancias agrupadas en
clases con características en común y que son los atributos y procedimientos, conocidos
como operaciones o métodos.
También se puede decir que un objeto es una abstracción encapsulada genérica de
datos y los procedimientos para manipularlos, también se puede decir que es una cosa
o entidad, que tiene atributos (propiedades) y de formas de operar sobre ellos que se
conocen como métodos.
En forma más simple se puede decir que un objeto es un ente que tiene características
y comportamiento.
Los objetos pueden modelar diferentes cosas como: dispositivos, roles, organizaciones,
sucesos, ventanas (de Windows), iconos, etc.
Mensajes: en la POO, los objetos descritos se comunican a través de mensajes, siendo
estos mensajes los que hacen que los objetos respondan de diferentes maneras, por
ejemplo un objeto en Windows como una ventana de alguna aplicación, puede serrarse,
maximizarse o restaurarse(métodos) de acuerdo al mensaje que le enviado.
En otras palabras, un mensaje es una comunicación dirigida a un objeto, que le ordena
que ejecute uno de sus métodos pudiendo o no llevar algunos parámetros.
Métodos: Es una acción como determina como debe actuar un objeto cuando recibe un
mensaje.
Clases, superclases y subclase
Es la generalización de un tipo específico de objetos, esto se puede decir como el
conjunto de características (atributos) y comportamientos de todos los objetos que
componen a la clase.
Hay tres tipos de clase:
Abstracta: es muy general (ejemplo animal)
Común: es intermedia (ejemplo mamíferos)
Final: es muy específica (ejemplo Gato)
UNIVERSIDAD NACIONAL DE SAN CRISTÓBAL DE HUAMANGA
E.F.P. DE INGENIERÍA DE SISTEMAS
Superclases: Es la clase padre de alguna clase específica y
puede tener cualquier número de subclases.
Subclase: Es la clase hija de alguna clase específica y solo puede tener un superclase (en
JAVA).
Clases de objetos
Las clases de objetos representan conceptos o entidades significativos en un problema
determinado.
Una clase describe las características comunes de un conjunto de objetos, mediante
dos elementos:
Atributos: (o variables miembro, variables de clase). Describen el estado interno de cada
objeto
Operaciones: (o métodos, funciones miembro). Describen lo que se puede hacer con el
objeto, los servicios que proporciona
Durante la ejecución de la aplicación se producirá la instanciación de la clase, es decir,
la creación de los objetos que representan cada uno de los individuos con sus
características propias, es decir, valores específicos para sus atributos.
La implementación de esta clase en Java se realizaría en un fichero con nombre
Cuenta.java, y su contenido sería el siguiente:
UNIVERSIDAD NACIONAL DE SAN CRISTÓBAL DE HUAMANGA
E.F.P. DE INGENIERÍA DE SISTEMAS
Los atributos pueden ser de cualquiera de los tipos básicos de Java: boolean, char, byte,
short, int, long, float y double, referencias a otros objetos o arrays de elementos de
alguno de los tipos citados
PROTECCIÓN DE MIEMBROS DE LA CLASE
El principio de ocultación de información se plasma en los lenguajes OO en diversos
mecanismos de protección de los miembros de la clase
UML permite asociar tres niveles de protección diferentes a cada miembro de la clase:
Miembros públicos (+). Sin ningún tipo de protección especial
Miembros privados (). Inaccesibles desde el exterior de la clase
Miembros protegidos (#). Similares a los privados aunque se permite su acceso desde las
clases descendientes
PROTECCIÓN DE CLASES
Por protección de clases entendemos un nivel superior de la ocultación de información,
a nivel de clases. Es decir, se trata de especificar que clases pueden ser utilizadas y
cuáles no, y por quién
Dentro de un paquete, las clases son amigas y por tanto no existen restricciones
respecto a la utilización de una clase por las otras.
UNIVERSIDAD NACIONAL DE SAN CRISTÓBAL DE HUAMANGA
E.F.P. DE INGENIERÍA DE SISTEMAS
Sin embargo, desde el punto de vista del exterior, únicamente
podrán ser utilizadas las clases públicas del paquete, es decir, aquellas con el
identificador public situado delante de su declaración
INICIALIZACIÓN Y FINALIZACIÓN
La iniciación de los atributos de la clase se realiza en Java, mediante el uso de
constructores cuyo nombre coincide con el de la clase.
Java permite la sobrecarga de operaciones, por tanto se pueden definir varios
constructores posibles para una clase siempre que se diferencien en la lista de
argumentos.
Si no se proporciona ningún constructor, Java proporciona automáticamente un
constructor por defecto, que no recibe argumentos y realiza una inicialización por
defecto de los atributos.
Una vez implementado un constructor propio por parte del programador, Java elimina
dicho constructor, aunque puede ser definido nuevamente de manera explícita.
Naturalmente los constructores pueden ser marcados como públicos, privados,
protegidos o con acceso a nivel de paquete, lo que especificará quien puede crear
objetos de esta clase y de qué manera.
CREACIÓN DE OBJETOS
En Java los objetos se crean únicamente de forma dinámica. Para ello se utiliza el
operador new.
Los objetos en Java se utilizan siempre a través de referencias.
Por tanto los pasos a seguir en la creación de un objeto son:
Declarar una referencia a la clase
Crear un objeto mediante el operador new invocando al constructor adecuado
Conectar el objeto con la referencia
RELACIONES ENTRE OBJETOS
En una aplicación real los objetos colaboran e intercambian información, existiendo
distintos tipos de relaciones entre ellos.
A nivel de diseño, podemos distinguir entre 5 tipos de relaciones básicas entre clases
de objetos: dependencia, asociación, agregación, composición y herencia.
La dependencia es la relación menos importante. Simplemente refleja que la
implementación de una clase depende de otra.
Una dependencia puede indicar la utilización de un objeto de una clase como argumento
de una operación de otra o en su implementación.
La clase Cuenta requiere las clases FileOutputStream y ObjectOutputStream de la
librería de clases de Java para la implementación de la operación salvar.
UNIVERSIDAD NACIONAL DE SAN CRISTÓBAL DE HUAMANGA
E.F.P. DE INGENIERÍA DE SISTEMAS
En cambio, la asociación es la relación más importante y común. Refleja una relación
entre dos clases independientes que se mantiene durante la vida de los objetos de
dichas clases o al menos durante un tiempo prolongado.
En UML suele indicarse el nombre de la relación, el sentido de dicha relación y las
cardinalidades en los dos extremos.
Vamos a sustituir el atributo titular por una asociación con una nueva clase Cliente
completa.
Una asociación se implementa en Java introduciendo referencias a objetos una clase
como atributos en la otra.
Normalmente la conexión entre los objetos se realiza recibiendo la referencia de uno de
ellos en el constructor o una operación ordinaria del otro.
La agregación es un tipo especial de asociación donde se añade el matiz semántico de
que la clase de donde parte la relación representa el “todo” y las clases relacionadas
“las partes”.
La composición es un tipo de agregación que añade el matriz de que la clase “todo”
controla la existencia de las clases “parte”. Es decir, normalmente la clase “todo” creará
al principio las clases “parte”.
Supongamos que añadimos un registro de movimientos a la clase Cuenta, de forma que
quede constancia tras cada ingreso o reintegro.
UNIVERSIDAD NACIONAL DE SAN CRISTÓBAL DE HUAMANGA
E.F.P. DE INGENIERÍA DE SISTEMAS
AUTOREFERENCIAS
Esta referencia se obtiene en Java mediante el operador this. Cuando encontremos this
en una expresión, podremos sustituirlo mentalmente por “este objeto”.
La utilidad de this en Java es realizar una llamada a un constructor desde otro
constructor.
Herencia
La herencia es un mecanismo de la OOP que permite construir una clase incorporando
de manera implícita todas las características de una clase previamente existente.
Ejemplo
Distintos tipos de cuentas bancarias
Para que una clase herede de otra, utilizaremos el indicador extends en la declaración
de la clase.
El procedimiento correcto consiste en realizar una llamada al constructor de la
superclase para que realice la inicialización de los atributos heredados.
En Java esta llamada al constructor de la superclase se realiza con la operación super()
seguida de los parámetros de inicialización de alguno de los constructores del padre de
la clase.