You are on page 1of 26

PROGRAMACIN ORIENTADA A OBJETOS Y DIAGRAMA DE CLASE UML

Las personas tienen una idea clara de lo que es un objeto: conceptos adquiridos
que nos permiten sentir y razonar acerca de las cosas del mundo. Un objeto
podra ser real o abstracto, por ejemplo una organizacin, una factura, una figura
en un dibujador, una pantalla de usuario, un avin, un vuelo de avin, etc.

En el anlisis y diseo orientados a objetos (OO), interesa el comportamiento del


objeto. Si se construye software, los mdulos de software OO se basan en los
tipos de objetos. El software que implanta el objeto contiene estructuras de datos y
operaciones que expresan dicho comportamiento. Las operaciones se codifican
como mtodos. Las representacin en software OO del objeto es entonces una
coleccin de tipos de datos y objetos.

Tipos de Objetos

Los conceptos que poseemos se aplican a tipos determinados de objetos. Por


ejemplo, empleado se aplica a los objetos que son personas vinculadas por alguna
organizacin. Algunas instancias de empleado podran ser Juan Prez, Jos
Martnez, etc. En el anlisis Orientado a objetos, estos conceptos se llaman tipos
de objetos; las instancias se llaman objetos.

As, un tipo de objeto es una categora de objeto, mientras que un objeto es una
instancia de
un tipo de objeto. En el mundo de las bases de datos existen los tipos de entidad,
como cliente o empleado.

Existen muchas instancias de cada tipo de entidad (como Juan Prez o Jos
Martnez para el tipo de entidad empleado). Del mismo modo, en OO se define
tipos de objetos e instancias de tipo de objeto. Sin embargo, el trmino objeto
tiene diferencias fundamentales con el trmino entidad, ya que la entidad slo se
refiere a los datos, mientras que objeto se refiere a los datos y a los mtodos
mediante los cuales se controlan a los propios datos. En OO, la estructura de
datos y los mtodos de cada tipo de objeto se manejan juntos. No se puede tener
acceso o control de la estructura de datos excepto mediante los mtodos que
forman parte del tipo de objeto.

Mtodos

Los mtodos especifican la forma en que se controlan los datos de un objeto. Los
mtodos
en un tipo de objeto slo hacen referencia a la estructura de datos de ese tipo de
objeto. No
deben tener acceso directo a las estructuras de datos de otros objetos. Para
utilizar la estructura de datos de otro objeto, deben enviar un mensaje a ste. El
tipo de objeto empaca juntos los tipos de datos y su comportamiento.

Un objeto entonces es una cosa cuyas propiedades estn representadas por tipos
de datos y su comportamiento por mtodos.

Un mtodo asociado con el tipo de objeto factura podra ser aquel que calcule el
total de la factura. Otro podra transmitir la factura a un cliente. Otro podra
verificar de manera peridica si la factura ha sido pagada y, en caso contrario,
aadir cierta tasa de inters.

Caractersticas de una clase

La clase es la base de la Programacin Orientada a Objetos.

Cualquier concepto que se desee representar en un programa Java debe


ser modelado con una clase.

Una clase es una plantilla o modelo de un objeto. En ella se definen los


atributos y los comportamientos de un tipo de objeto.

Al definir una clase debo especificar los datos que contiene (atributos) y el
cdigo que opera sobre ellos (mtodos).

Los mtodos definen la interfaz con la que se manejaran los datos.

A continuacin un ejemplo de cmo definir una clase.


La implementacin con el mtodo main quedara:
Ejemplo 2

CONSTRUCTORES EN JAVA

Un Constructor es una funcin mtodo de la clase, la cual es llamada


automticamente cuando se crea un objeto de dicha clase. Por ser mtodos, los
constructores tambin aceptan parmetros. Cuando en una clase no
especificamos ningn tipo de constructor, el compilador aade uno pblico por
omisin sin parmetros, el cual NO hace nada.

Caractersticas de los Constructores

1. Un constructor, tiene el mismo nombre de la clase a la cual pertenece.

2. No puede ser Heredado.

3. No retorna ningn valor (Ni void), por lo cual no debe especificarse ningn tipo
de dato.
4. Debe declararse como public, slo en casos realmente extraordinarios ser de
otro tipo.

Ejemplo

La implementacin con el mtodo main quedara:

A continuacin crearemos una clase denominada Persona, que nos permite crear
objetos del tipo de dicha clase. Todo objeto de tipo Persona estar definido por
dos campos: nombre (tipo String) y edad (tipo entero), y admitir un mtodo:
getNombre(). Al realizar la invocacin nombreDelObjeto.getNombre ()
obtendremos el atributo nombre del objeto.
La clase tiene dos constructores. Qu significado tiene esto? Pues que
podremos crear personas de dos maneras distintas:

a) Personas que se creen con el constructor 1: debe indicarse, adems del


nombre del objeto, el parmetro que transmite el nombre de la persona.

b) Personas que se creen con el constructor 2: no requieren parmetros para su


creacin y se inicializan a unos valores por defecto (nombre cadena vaca y edad
cero).

Cuando ms de un constructor o mtodo tienen el mismo nombre pero distintos


parmetros decimos que el constructor o mtodo est sobrecargado. La
sobrecarga de constructores o mtodos permite llevar a cabo una tarea de
distintas maneras (por ejemplo crear un objeto Persona con un nombre ya
establecido o crearlo sin nombre establecido).

La existencia de dos constructores se ha visto reflejada en que disponemos de


ms de una opcin de new Persona para crear objetos. Segn la opcin que
elijamos, el objeto Persona se crear de una forma u otra. Esto nos lleva a la
conclusin de que cada constructor define una forma de crear objetos.

Palabra reservada THIS

Es una referencia al objeto actual, usndose:

En los mtodos de instancia


En los mtodos de un constructor

Se usa para hacer referencia a cualquier miembro del objeto actual, para
diferenciar variables de instancia de variables locales y para invocar un constructor
dentro de otro constructor.

Ejemplo 3

Implementacin de una clase para calcular el rea de un rectngulo y de un


circulo, para cada una de las reas utilizar un constructor.
La implementacin del mtodo min quedara:

Sobrecarga de Mtodos

La sobrecarga de mtodos consiste en crear varios mtodos con el mismo


nombre que acten diferente segn el tipo de los parmetros de entrada. Por
ejemplo, queremos hacer un mtodo que devuelva el resultado de la suma de los
dos parmetros de entrada, pero no sabemos si ser un entero o si tendr
decimales, as que tendremos que hacer un mtodo para el caso de los decimales,
y otro con el mismo nombre para el caso de los enteros.

La implementacin del Main quedara:

Ejercicios propuestos

Disee una clase colegio, cuyos atributos sean nombre del profesor, nmero de
materias y nombre del estudiante. Se deben crear dos constructores uno que
permita posteriormente visualizar por medio de objetos el nombre del profesor y
del estudiante, y otro constructor que permita visualizar los tres atributos de la
clase. Implemente los mtodos necesarios. Teniendo en cuenta que si el nmero
de materia es superior a 5 se debe imprimir un mensaje de error.

2. Implemente una clase que permita calcular el rea de 4 figuras geomtricas


utilizando la sobreescritura de mtodos.
3. Cree una clase NumeroDecimal, defina dos propiedades (variables atributos)
que son: entero, decimal; como lo indican sus nombres, representan a un nmero
decimal.
Implemente los mtodos para la clase NumeroComplejo as:

Mtodo que muestre en pantalla el valor de cada propiedad


Mtodo que inicialice el objeto con cualquier valor (constructor)
Mtodo que reciba un nmero decimal y devuelva el cuadrado del mismo
Mtodo que calcule el factorial de la parte entera de este objeto.

4. El banco la caridad requiere la implementacin de una solucin en java que


permita conocer el estado de cuenta de sus dos principales clientes. Se debe
tener en cuenta lo siguiente.

El cliente 1 debe permitir visualizar nombre, numero de la cuenta, saldo


actual, ultimo retiro.

El cliente 2 debe permitir visualizar el nombre, la cedula, nmero de cuenta,


saldo actual, ultimo retiro, descuento (teniendo en cuenta que es del 10 %
sobre cada retiro)

Implemente los constructores y mtodos de la clase, as como el mtodo


main para la creacin de objetos y despliegue de la informacin.

HERENCIA

La idea de la herencia es permitir la creacin de nuevas clases basadas en clases


existentes. Cuando heredamos de una clase existente, reusamos (o heredamos)
mtodos y atributos, y agregamos tambin nuevos atributos y mtodos para
cumplir con la situacin deseada. Cada vez que encontremos la relacin "es-un"
entre dos clases, estamos ante la presencia de herencia.

El concepto de herencia conduce a una estructura jerrquica de clases o


estructura de rbol, lo cual significa que en la POO todas las relaciones entre
clases deben ajustarse a dicha estructura.

En esta estructura jerrquica, cada clase tiene slo una clase padre. La clase
padre de cualquier clase es conocida como su superclase. La clase hija de una
superclase es llamada una subclase.

* Una superclase puede tener cualquier nmero de subclases.


* Una subclase puede tener slo una superclase.
La herencia en java se hace mediante la palabra extends. A continuacin un
ejemplo

Ahora implementamos la clase Estudiante, heredando atributos y mtodos de la


clase persona:
Ahora creamos la clase empleado, que tambin hereda de persona

Ahora creamos el mtodo main para imprimir los datos de las clase creadas:
Ejercicios propuestos

1. La empresa informtica IPM Tech necesita llevar un registro de todos sus


empleados que se encuentran en la oficina central, para eso ha creado un
diagrama de clases que debe incluir lo siguiente:

Empleado

Atributos:

- nombre: tipo cadena (Debe ser nombre y apellido)


- cedula: tipo cadena
- edad: entero (Rango entre 18 y 45 aos)
- casado: boolean
- salario: tipo numrico doble

Mtodos:

- Constructor con y sin parmetros de entrada.


- Mtodo que permita mostrar la clasificacin segn la edad de acuerdo al
siguiente algoritmo:

Si edad es menor o igual a 21, Principiante


Si edad es >=22 y <=35, Intermedio
Si edad es >35, Senior.

- Imprimir los datos del empleado por pantalla (utilizar salto de lnea \n para
separar los atributos.
- Un mtodo que permita aumentar el salario en un porcentaje que sera pasado
como parmetro al mtodo.

Programador (Especializacin de Empleado). Clase que hereda de Empleado


todos los atributos y mtodos.

- Atributos- Constructor con y sin parmetros de entrada:


- lineasDeCodigoPorHora: tipo entero
- lenguaje Dominante: tipo cadena

- Mtodos:
- Constructor con y sin parmetros de entrada.

2. Realizar la siguiente aplicacin utilizando clases, herencia, mtodos,


propiedades, constructores Desarrollar un ecosistema, en donde se puedan crear
tener distintos animales de todas las clasificaciones: mamferos, aves, reptiles y
anfibios.

Se deben de crear clases para cada tipo de especie, y para las especies ms
comunes que el programador quiera definir.

El usuario final debe tener la potestad de crear todos los animales (instancias) que
desee, y diferenciarlas de acuerdo a algn identificador.

POLIMORFISMO

El polimorfismo consiste en obtener un mismo mtodo con diferentes funciones.


En general nos sirve para programar objetos con caractersticas comunes y que
todos estos compartan la misma superclase en una jerarqua de clases, como si
todas fueran objetos de la superclase. Esto nos simplifica la programacin.

El polimorfismo se puede establecer mediante sobrecarga, sobre-escritura y


enlace dinmico.

Polimorfismo por Sobrecarga

La sobrecarga de mtodos hace que un mismo nombre pueda representar


distintos mtodos con distinto tipo y nmero de parmetros, manejados dentro de
la misma clase. En el mbito de la POO, la sobrecarga de mtodos se refiere a la
posibilidad de tener dos o ms mtodos con el mismo nombre pero distinta
funcionalidad. Es decir, dos o ms mtodos con el mismo nombre realizan
acciones diferentes y el compilador usar una u otra dependiendo de los
parmetros usados. Esto tambin se aplica a los constructores (de hecho, es la
aplicacin ms habitual de la sobrecarga).
Podemos diferenciar varios mtodos sobrecargados a travs de sus parmetros,
ya sea por la cantidad, el tipo o el orden de los mismos. Veamos un ejemplo:

Polimorfismo por sobreescritura

La sobreescritura se aplica a los mtodos y est directamente relacionada a la


herencia; se refiere a la redefinicin de los mtodos de la clase base en las
subclases.
Por ejemplo, en la relacin de herencia del ejemplo de las figuras aunque la clase
base Figura tiene los mtodos calcularArea y calcularPerimetro, las subclases
Circulo, Cuadrado, Triangulo y Rectangulo redefinen estos mtodos ya que
el clculo del rea y el permetro de cada uno de ellos es diferente.
Ejemplo 2

Definimos la clase numero y las clases hijas Numero positivo y Numero negativo
Las clases hijas implementan los mtodos numero prximo, en la primera clase se
define un contador incremental, en la segunda clase (numero negativo) se toma
como referencia un contador decremental.

Luego se invocan los objetos en el mtodo Main


El resultado de este programa es el siguiente:

Numero positivo inicial: 0


Numero negativo inicial: 0
Numero positivo siguiente: 1
Numero negativo siguiente: -1
Numero positivo siguiente: 2
Numero negativo siguiente: -2.

La conclusin que debemos observar en este ejemplo es que se tienen dos


instancias de Numero, una instancia de NumeroPositivo y una de
NumeroNegativo, cada cual tiene un comportamiento distinto. Sin embargo a la
hora de declararlo se los declaro en su forma genrica de Numero y se tiene el
mtodo prximo () asociado.

El polimorfismo ha permitido que cada uno se comporte de manera distinta, y sin


embargo parece llamarse siempre al mismo mtodo. Es decir, es distinto el
prximo negativo del prximo positivo, y eso se refleja en el resultado.

Otra cosa que puede verse en este ejemplo es que al imprimir los objetos positivos
y negativos se llama automticamente al mtodo toString (), es el modo en el
que Java imprime sus objetos en pantalla. Y el aprovechamiento del mecanismo
de herencia, en la programacin del mtodo toString () que retorna el valor de
numero como un String, es decir, algo que puede imprimirse fcilmente. Al
llamarlo en un NumeroPositivo, como este no lo tiene programado, se ejecuta el
que esta definido en la clase padre Numero. Al llamarlo en un NumeroNegativo
tambin se llama al de la clase padre.
Polimorfismo por Enlace dinmico

Esto permite invocar operaciones en objetos obviando el tipo actual de stos hasta
el momento de ejecutar el cdigo. O sea, nos permite definir elementos como un
tipo e instanciarlos como un tipo heredado. Pero qu utilidad tiene obviar el tipo
de un objeto para luego tomar esta decisin?.

Gracias a que en java la definicin de los tipos de objetos se puede producir por
enlazado posterior (late binding), no nos debe preocupar a qu tipo de elemento le
paso un mensaje, ya que el compilador tomar la decisin sobre qu objeto
ejecutar qu mtodo de acuerdo a la forma de crear la instancia.

Este concepto es bastante complejo de entender, ya que estamos acostumbrados


a definir los elementos de acuerdo a lo que necesitamos. Es decir, si requiero un
entero lo declaro como entero; para qu declarar un elemento como un tipo y
luego usarlo como otro? La respuesta est en que no siempre se puede
determinar exactamente el tipo de elemento que va a usarse en la ejecucin de
nuestro programa.

Se debe tener por lo menos una relacin de herencia que permita determinar un
tipo base para la declaracin, sea cual sea el subtipo que se instancie. Veamos un
ejemplo que nos aclare un poco las cosas:
Vemos que el mtodo muvete llama al mtodo mover de un mamfero y aunque
no sabe con qu clase de mamfero trata, funciona y se llama al mtodo
correspondiente al objeto especfico que lo llama (es decir, primero un gato y
luego un perro). Si no existiera el enlace dinmico, tendramos que crear un
mtodo muevete para los mamferos de tipo Gato y otro para los de tipo
Perro.
EJERCICIOS PROPUESTOS

1. Cree una clase Cilindro que herede las propiedades y el comportamiento de


una clasemadre llamada circulo que tiene el atributo radio y los mtodos
rea y permetro. La clase cilindro debe tener el atributo altura, as como los
mtodos rea y volumen. Implemente una funcin main() que haga uso de
la clase Cilindro y muestre por pantalla el rea del circulo y cilindro, as
como el permetro del circulo y volumen del cilindro.

2. Crear una clase vehculo y dos clases derivadas; vehculo terrestre y


vehculo areo. La clase base definir el atributo consumo_gasolina y un
mtodo costo_viaje a partir de los parmetros km_recorridos y
litros_por_km. Las clases derivadas vehiculoTerrestre con los
atributos velocidad y tiempo y vehculo Areo con los atributo
horas_de_vuelo y Km_por_horavuelo. Adems debern ofrecer ambas el
mtodo costoviaje. Escribir una funcin main() que cree objetos de las
clases derivadas y que permita obtener los costos a partir de un tipo de
vehculo.

DIAGRAMAS DE CLASE

El diagrama de Clase muestra los bloques de construccin de cualquier sistema


orientado a objetos. Los diagramas de clases describen la vista esttica del
modelo o parte del modelo, describiendo que atributos y comportamientos tienen
en lugar de detallar los mtodos para realizar operaciones. Los diagramas de
Clase son ms tiles para ilustrar relaciones entre clases e interfaces. Las
generalizaciones, agregaciones, y asociaciones son todas valiosas al reflejar
herencias, composicin o uso, y conexiones respectivamente.

Clases

Una clase es un elemento que define los atributos y comportamientos que un


objeto podr generar. El comportamiento es el que se describe por posibles
mensajes que la clase pueda comprender conjuntamente con las operaciones que
son apropiadas para cada mensaje. Las clases pueden tambin contener
definiciones de valores etiquetados de restricciones y estereotipos.

Notacin de Clase
Para modelar un diagrama de clases UML se deben tener en cuenta los siguientes
aspectos:

1. Una clase se representan como un rectngulo dividido en tres partes (tres


compartimentos).

2. En el compartimento superior, centrado, va el nombre de la clase.

3. El segundo compartimento contiene los atributos, en la forma: visibilidad


nombre Atributo: tipo

4. El tercer compartimento contiene los mtodos, en la forma: visibilidad


nombreMtodo (parmetros): tipoRetorno.

5. Los parmetros van separados por comas y slo se especifica el tipo.

6. Los constructores no tienen tipo de retorno.

7. La visibilidad, de atributos y mtodos, puede ser:

- privado

+ pblico

# protegido

~ de paquete

Ejemplo:

Es posible representar una clase usando slo el compartimento del nombre, o el


compartimento del nombre y uno de los dos siguientes (atributos o mtodos).
Cuando se representa una clase de esta forma no es posible deducir nada de los
compartimentos faltantes.
Tipos de Relacin entre clases

Asociacin

Una asociacin implica que dos elementos del modelo tienen una relacin
usualmente implementada como una variable de instancia de una clase. Este
conector puede incluir roles nombrados en cada extremo, cardinalidad, direccin y
restricciones. Una asociacin es el tipo de relacin general entre elementos. Para
ms de dos elementos, un elemento de la caja de herramientas de representacin
diagonal tambin se puede usar. Cuando se genera cdigo para diagramas de
clase, las asociaciones se convierten en variables de instancia en la clase de
destino.

Una asociacin (relacin entre dos clases) se representa como una lnea continua
entre dos clases, y puede tener el nombre de la relacin sobre esta lnea. Ejemplo:

En el ejemplo anterior cada Avin tiene una relacin con Piloto, pero tambin cada
Piloto tiene relacin con Avin. Esta es una relacin en ambos sentidos.

En este ejemplo un Pasajero conoce el Avin (o aviones) con el cual viaja, pero el
Avin no tiene ninguna relacin con los Pasajeros.

Agregacin
Las agregaciones se usan para describir elementos que estn compuestos de
componentes ms pequeos. Las relaciones de agregacin se muestran por una
punta de flecha con forma de diamante apuntando hacia el destino o clase padre.

En este caso tenemos una clase empresa que agrega una clase cliente y una
clase empleados.

Composicin

Los componentes constituyen una parte del objeto compuesto. De esta forma, los
componentes no pueden ser compartidos por varios objetos compuestos. La
supresin del objeto compuesto conlleva la supresin de los componentes. El
smbolo de composicin es un diamante de color negro colocado en el extremo en
el que est la clase que representa el todo (Compuesto).

Tenemos una clase Empresa.

Un objeto Empresa est a su vez compuesto por uno o varios objetos del tipo
empleado.

El tiempo de vida de los objetos Empleado depende del tiempo de vida de


Empresa, ya que si no existe una Empresa no pueden existir sus empleados.

Diferencias entre composicin y agregacin


Herencia

Consiste en la relacin entre una superclase y sus subclases. Los objetos de


distintas clases pueden tener atributos similares y exhibir comportamientos
parecidos ( ej: animales, mamferos )

La herencia se representa con una lnea continua que va de la clase hija a la clase
padre, y que termina en un tringulo vaco. Ejemplo:

You might also like