21
Técnicas de Programación Ing. Haybert Escobedo Neyra Tema: RELACIONES ENTRE CLASES 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

Relaciones Clases

Embed Size (px)

Citation preview

Page 1: Relaciones Clases

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

Page 2: Relaciones Clases

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.

Page 3: Relaciones Clases

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

Page 4: Relaciones Clases

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.

Page 5: Relaciones Clases

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.

Page 6: Relaciones Clases

Técnicas de Programación Ing. Haybert Escobedo Neyra

Tem

a: R

ELA

CIO

NES

EN

TRE

CLA

SES

6

Page 7: Relaciones Clases

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:

Page 8: Relaciones Clases

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:

Page 9: Relaciones Clases

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:

Page 10: Relaciones Clases

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.

Page 11: Relaciones Clases

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

Page 12: Relaciones Clases

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:

Page 13: Relaciones Clases

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:

Page 14: Relaciones Clases

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.

Page 15: Relaciones Clases

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.

Page 16: Relaciones Clases

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.

Page 17: Relaciones Clases

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().

Page 18: Relaciones Clases

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:

Page 19: Relaciones Clases

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

Page 20: Relaciones Clases

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:

Page 21: Relaciones Clases

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.