Upload
dany-horna
View
152
Download
2
Embed Size (px)
Citation preview
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: R
ELA
CIO
NES
EN
TRE
CLA
SES
1
Temario
Contenido 1. RELACIONES ENTRE CLASES ........................................................................................................ 2
2. Actividades de Relaciones con Clases ....................................................................................... 10
3. MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE............................................... 11
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: R
ELA
CIO
NES
EN
TRE
CLA
SES
2
1. RELACIONES ENTRE CLASES
Un conjunto de objetos aislados tiene escasa capacidad de resolver un problema. En una
aplicación útil los objetos colaboran e intercambian información, mantienen 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 entre dos
clases de objetos existe una posible colaboración temporal con algún propósito. Una
dependencia puede indicar la utilización de un objeto de una clase como argumento de una
operación o en su implementación.
En cambio, la asociación es la relación más importante y más 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.
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: R
ELA
CIO
NES
EN
TRE
CLA
SES
3
Ilustración 1: Diagrama de clases Nº 1
Veamos el siguiente diagrama de clases:
Se observa la clase Pedido que tiene como atributos a
numero (de tipo entero), fecha (de tipo cadena) y
cliente (de tipo cadena).
Tiene como operaciones o métodos a Pedido(),
adicionarDetalle(), obtenerDetalle() y
calcularTotalPedido().
La segunda clase llamada DetallePedido tiene como
atributos a cantidad (de tipo entero) y precio (de tipo
flotante), como único método tiene a DetallePedido().
Existe una relación entre la clase de Pedido y
DetallePedido que consiste que cada Pedido debe
estar compuesto de uno a muchos Detalle de Pedidos.
Veamos otro diagrama de clases:
Se observa la clase Almacen que tiene como único
atributo nombre (de tipo cadena) y sus métodos son:
Almacen(), adiconarProducto(), obtenerProducto(),
adicionarEmpleado() y obtenerEmpleado().
La segunda clase llamada Producto tiene como
atributos a nombre (de tipo cadena), stock (de tipo
entero) y precio (de tipo flotante) y como único
método Producto().
Existe una relación entre la clase Almacen y la clase
Producto que consiste que cada Almacen puede
tener uno o muchos productos.
Ilustración 2: Diagrama de clases Nº 2
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: R
ELA
CIO
NES
EN
TRE
CLA
SES
4
Una asociación se implementa en Java introduciendo referencias a objetos de la clase
destino de la relación como atributos de la clase origen. Si la relación tiene una
cardinalidad superior a uno entonces será necesario utilizar un arreglo o una estructura de
datos. Normalmente la conexión entre los objetos se realiza recibiendo la referencia de
uno de ellos en el constructor u otro operación similar del otro.
Veamos el siguiente código escrito en Java:
1
2
3 4
Se tiene la clase Cliente con los atributos nombre, apellidos, direccion, localidad y
fNacimiento (ver en la llave correpondiente a 1). Tenemos como métodos a Cliente(),
nombreCompleto() y direccionCompleta() (ver en 2). Se tiene la clase Cuenta que tiene
como atributos a numero, titular (de tipo Cliente – ver flecha anaranjada), saldo e
interesAnual (ver en la llave correspondiente a 3) . Como métodos tiene a Cuenta y a
leerTitular() (ver en 4). La mayor novedad en este ejemplo es que la Clase Cuenta tiene un
atributo llamado titular que es de tipo Cliente, es decir, que este atributo titular es un
objeto de la Clase Cliente y por lo tanto contiene a su vez a los atributos de Cliente y con
la posibilidad de usar sus métodos.
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: R
ELA
CIO
NES
EN
TRE
CLA
SES
5
PROGRAMAS RESUELTOS
1) Crear la clase Facultad con los atributos codigoFac y nombreFac y luego la clase
EscuelaProfesional con los atributos codigoEsc, nombreEsc, facultad. Luego procede
a ingresar los datos de dos escuelas profesionales.
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: R
ELA
CIO
NES
EN
TRE
CLA
SES
6
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: R
ELA
CIO
NES
EN
TRE
CLA
SES
7
2) Tomando el diagrama de clases Nº 2 proceder a ingresar datos de productos.
Hacer uso de arreglos o vectores.
Crear un archivo Producto.java y colocar el siguiente código:
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: R
ELA
CIO
NES
EN
TRE
CLA
SES
8
Crear un archivo Almacen.java y colocar el siguiente código:
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: R
ELA
CIO
NES
EN
TRE
CLA
SES
9
Crear el archivo OperacionesProductos.java y colocar el siguiente código:
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: A
ctiv
idad
es d
e R
elac
ion
es c
on
Cla
ses
10
2. Actividades de Relaciones con Clases
1. Crear la clase Alumno con los atributos codigoAlu, nombreAlu y emailAlu. También
crear la clase Matricula con los atributos nroMatricula, codigoAlu, nombreCurso y
costoCurso. Luego procede a ingresar los datos de alumnos y matriculas. Finalmente
mostrar un listado de los alumnos matriculados indicando los cursos que llevarán.
2. Crear la clase Categoria con los atributos codigoCat y nombreCat. También crear la
clase Producto con los atributos codigoPro, nombrePro, stock y preciounitario. Luego
procede a ingresar datos de categorías y productos. Posteriormente visualizar el
producto de mayor stock.
3. Construye una aplicación que permita crear la clase Marca con los atributos
codigoMar y nombreMar. También crear la clase Bus con los atributos codigoBus,
nroAsientos, nroEjes y nroPisos. Luego proceder a ingresar datos en Marca y en Bus y
posteriormente visualizar los datos de los buses ingresados. Hacer uso de arreglos.
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: M
OD
IFIC
AD
OR
ES D
E A
CC
ESO
A L
OS
MIE
MB
RO
S D
E U
NA
CLA
SE
11
3. MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE
Los modificadores de acceso, como su nombre indica, determinan desde qué clases se
puede acceder a un determinado elemento. En Java tenemos 4 tipos: public, private,
protected y el tipo por defecto, que no tiene ninguna palabra clave asociada, pero se suele
conocer como default o package-private.
Si no especificamos ningún modificador de acceso se utiliza el nivel de acceso por defecto,
que consiste en que el elemento puede ser accedido sólo desde las clases que pertenezcan
al mismo paquete.
El nivel de acceso public permite a acceder al elemento desde cualquier clase,
independientemente de que esta pertenezca o no al paquete en que se encuentra el
elemento.
private, por otro lado, es el modificador más restrictivo y especifica que los elementos que
lo utilizan sólo pueden ser accedidos desde la clase en la que se encuentran. Este
modificador sólo puede utilizarse sobre los miembros de una clase y sobre interfaces y
clases internas, no sobre clases o interfaces de primer nivel, dado que esto no tendría
sentido.
Es importante destacar también que private convierte los elementos en privados para otras
clases, no para otras instancias de la clase. Es decir, un objeto de una determinada clase
puede acceder a los miembros privados de otro objeto de la misma clase.
El modificador protected, por último, indica que los elementos sólo pueden ser accedidos
desde su mismo paquete (como el acceso por defecto) y desde cualquier clase que
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: M
OD
IFIC
AD
OR
ES D
E A
CC
ESO
A L
OS
MIE
MB
RO
S D
E U
NA
CLA
SE
12
extienda la clase en que se encuentra, independientemente de si esta se encuentra en el
mismo paquete o no. Este modificador, como private, no tiene sentido a nivel de clases o
interfaces no internas.
Los distintos modificadores de acceso quedan resumidos en la siguiente tabla:
STATIC
A pesar de lo que podría parecer por su nombre, heredado de la terminología de C++, el
modificador static no sirve para crear constantes, sino para crear miembros que
pertenecen a la clase, y no a una instancia de la clase. Esto implica, entre otras cosas, que
no es necesario crear un objeto de la clase para poder acceder a estos atributos y métodos.
Este es el motivo por el cual es obligatorio que main se declare como static; de esta forma
no tenemos que ofrecer un constructor vacío para la clase que contiene el método, o
indicar de alguna forma a la máquina virtual cómo instanciar la clase.
Un uso del modificador static sería, por ejemplo, crear un contador de los objetos de la
clase que se han creado, incrementando la variable estática en el constructor:
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: M
OD
IFIC
AD
OR
ES D
E A
CC
ESO
A L
OS
MIE
MB
RO
S D
E U
NA
CLA
SE
13
Como es de esperar, dado que tenemos acceso a los atributos sin necesidad de crear un
objeto, los atributos estáticos como usuarios no se inicializan al crear el objeto, sino al
cargar la clase.
Podemos acceder a estos métodos y atributos bien desde la propia clase:
O bien desde una instancia cualquiera de la clase:
Otro uso sería el de crear una recopilación de métodos y atributos relacionados a los que
poder acceder sin necesidad de crear un objeto asociado, que podría no tener sentido o no
ser conveniente, como es el caso de la clase Math.
Una característica no muy conocida que se introdujo en Java 1.5 son los static imports, una
sentencia similar al import habitual, con la salvedad de que esta importa miembros
estáticos de las clases, en lugar de clases de los paquetes, permitiendo utilizar estos
miembros sin indicar el espacio de nombres en el que se encuentran. El ejemplo anterior
podría haberse escrito también de la siguiente forma utilizando esta característica:
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: M
OD
IFIC
AD
OR
ES D
E A
CC
ESO
A L
OS
MIE
MB
RO
S D
E U
NA
CLA
SE
14
Si por algún motivo requerimos cualquier tipo de computación para inicializar nuestras
variables estáticas, utilizaremos lo que se conoce como bloque estático o inicializador
estático, el cual se ejecuta una sola vez, cuando se carga la clase.
Por último, una curiosidad relacionada que se puede utilizar para romper el hielo con una
programa en Java es que podemos utilizar un bloque static para escribir un programa
sencillo sin necesidad de un main, añadiendo una llamada a System.exit para que el
programa termine tras cargar la clase sin intentar llamar al método main
FINAL
Indica que una variable, método o clase no se va a modificar, lo cuál puede ser útil para
añadir más semántica, por cuestiones de rendimiento, y para detectar errores.
Si una variable se marca como final, no se podrá asignar un nuevo valor a la variable. Si una
clase se marca como final, no se podrá extender la clase. Si es un método el que se declara
como final, no se podrá sobrescribir.
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: M
OD
IFIC
AD
OR
ES D
E A
CC
ESO
A L
OS
MIE
MB
RO
S D
E U
NA
CLA
SE
15
Algo muy a tener en cuenta a la hora de utilizar este modificador es que si es un objeto lo
que hemos marcado como final, esto no nos impedirá modificar el objeto en sí, sino tan
sólo usar el operador de asignación para cambiar la referencia. Por lo tanto el siguiente
código no funcionaría:
Pero, sin embargo, este sí:
MIEMBROS DE CLASES ESTÁTICOS
Cada objeto de una clase tiene su propia copia de todas las variables de ejemplar de clase.
En ciertos casos, una sola copia de la variable en particular debe ser compartida por todos
los objetos de la clase. Por esta y otras razones utilizamos las variables de clase static
(estáticas). Una variable de clase static representa información “que abarca toda la clase”.
La declaración de un método estático comienza con la palabra clave static.
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: M
OD
IFIC
AD
OR
ES D
E A
CC
ESO
A L
OS
MIE
MB
RO
S D
E U
NA
CLA
SE
16
PROGRAMAS RESUELTOS
1) Crear una clase Empleado que haga uso del modificador static y luego crea dos
objetos de Empleados.
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: M
OD
IFIC
AD
OR
ES D
E A
CC
ESO
A L
OS
MIE
MB
RO
S D
E U
NA
CLA
SE
17
Interpretación de la programación:
En el programa anterior usamos un atributo private static y un método public static. El
atributo contador se inicializa en cero por omisión. Esta variable va contando el número
de Objetos de la Clase Empleado que se van creando, esta variable se va incrementando
en el constructor cada vez que se crea un objeto.
Para saber cuántos objetos hemos creados llamamos al método estático
getContador() que devuelve el valor de la variable contador.
Un método declarado static no puede acceder a miembros de clase no estáticos. Un
método static no tiene referencia this porque las variables de clase static y los métodos
static existen independientemente de que existan o no objetos de clase. En la primera
línea del Programa colocamos llamamos Empleado.getContador() pues como es un
método estático no es necesario usar un objeto de la clase para llamar al método,
solo se usa el nombre de la Clase y luego el método getContador().
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: M
OD
IFIC
AD
OR
ES D
E A
CC
ESO
A L
OS
MIE
MB
RO
S D
E U
NA
CLA
SE
18
2) Crea una clase denominada FigurasGeometricas y calcula el área y el perímetro del
cuadrado, rectángulo y del triángulo. Hacerlo con métodos estáticos y métodos no
estáticos.
Respuesta con métodos estáticos:
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: M
OD
IFIC
AD
OR
ES D
E A
CC
ESO
A L
OS
MIE
MB
RO
S D
E U
NA
CLA
SE
19
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: M
OD
IFIC
AD
OR
ES D
E A
CC
ESO
A L
OS
MIE
MB
RO
S D
E U
NA
CLA
SE
20
Respuesta con métodos no estáticos:
Técnicas de Programación Ing. Haybert Escobedo Neyra
Tem
a: A
ctiv
idad
es d
e M
éto
do
s Es
táti
cos
21
4. Actividades de Métodos Estáticos
1. Construye una aplicación que permita crear la clase Docente con los atributos
coddocente, nombre, profesión y email. Luego crea objetos Docente ingresando sus
datos hasta confirmar que no se ingresará más datos. Hacer uso del modificador
static en un atributo de la clase Docente.
2. Construye una aplicación que permita calcular el área y el perímetro del trapecio.
Crea la clase con los atributos necesarios y hazlo con métodos no estáticos tanto para
el cálculo del área y del perímetro.