Sei sulla pagina 1di 25

MODELAR OBJETOS EN JAVA

(Apuntes)
Primero debemos tener en claro el diagrama de clases denominado diagrama UML (Lenguaje
unificado de modelado por sus siglas en ingls, Unified Modeling Language)

Profesor
- nombres: String
- apellidos: String
- no_cedula:String
- especialidad:String
- estado:boolean = false
+ jubilado ()
+ nojubilado ()
Donde:
-

=>

private

=>

publica

=>

protected

#
Pasos:

1) Modelar propiedades:

2) Encapsular propiedades:
Generar los mtodos Setter y Getter
En el IDE de desarrollo NetBeans hacer los siguientes pasos:

Nombre de la
clase
Propiedades

Mtodos

En la pantalla que aparece sealar todos los campos:

En la opcin Fields Visibility (visualizacin del campo) escoger si es privado, pblico o


protegido y luego dar clic en Refactor.

Vemos que para cada campo o propiedad se generan los mtodos Setter y Getter
3) Establecer el mtodo: (se puede hacerlo independiente de los setter y getter)

4) Nos dirigimos a la clase principal para instanciar:

5) Llamada al mtodo pblico creado:

6) Pedir al mtodo que funcione:

Y as se pueden crear otras instancias con diferentes nombres y mtodos:

HERENCIA EN JAVA
La herencia facilita la creacin de objetos a partir de otros ya existentes e implica que una
subclase obtiene todo el comportamiento (mtodos) y eventualmente los atributos (variables)
de su superclase.

Crculo

Ejemplo
+
dibujar (): void
Figura

Clase padre

- color: int
+ dibujar (): void
+ mover (): void

Triangulo

Rectngulo

+ voltearHoriz():
void
+ voltearVert(): void
+ dibujar(): void

+ dibujar(): void

1) En netbeans creamos las cuatro clases, y solo en la clase padre creamos el mtodo dibujar,
para luego hacer la herencia en las subclases.

Sub
clases

2) La palabra reservada para hacer la herencia es: extends la cual le agregamos a cada una de las
sub clases.

3) Para comprobar la herencia, vamos a fabricar un objeto de cualquiera de las clases.

4) Vamos a poder ver las opciones que nos da netbeant a la hora de poder programar.

No hemos creado el mtodo dibujar dentro de crculo porque estamos heredando el mtodo que
hemos establecido en la clase padre figura.

REDEFINICIN DEL MTODO


En la clase padre Figura dentro del mtodo agregamos una instruccin:
public void dibujar() {
System.out.println("Figura");
}
}
Al presionar ejecutar nos muestra la palabra figura en la pantalla:

Pero si vamos a la subclase Circulo y agregamos el mtodo dibujar con la respectiva instruccin
observamos que se cambia.

A esto se le conoce como redefinicin del mtodo.

EJERCICIO

Crea un proyecto llamado, libro infantil e implementa el diagrama de clases adjunto, creando un
objeto de cada clase y llamando a todos sus mtodos pblicos, si los hay.

Libro
# titulo: String
# ISBN: String
# abierto: Boolean = false
# numPaginas: int
# paginaActual: int=0
+ abrir ()
+ cerrar ()

LibroInfantil
- edadRecomendada: int =18
-

esRecomendable
(edadNinio:int):
Boolean
1) Creamos las clases Libro y LibroInfantil dentro de un proyecto con un nombre de
proyecto relacionado al tema.
2) Luego agregamos sus propiedades y mtodos; ojo que la clase LibroInfantilClass debe
heredar de la clase libro tal como muestra el diagrama UML (extends).

3) Ahora segn indica el diagrama UML en la clase LibroInfantilClass dentro del mtodo
debemos indicar si la edad es igual a edadRecomendada nos activar true caso contrario
false, para lo cual agregamos el siguiente cdigo.

4) Probamos en un objeto nuevo:

Pero si nos damos cuenta al enviar a correr el programa nos genera un mensaje contrario al
esperado, ya que la edad que se ha fijado dentro del mtodo es 5. Esto sucede ya que en la clase
LibroInfantilClass hemos fijado la edad en 18:

se puede modificar el 18 por 5 y el programa mostrara Libro recomendado o podemos


modificar los Setter y Getter.
5) Creamos los Setter y Getter. (el campo es private, aunque sale public en el cdigo)

6) Y con esto podemos modificar en el objeto la edad para un libro determinado.

INTERFACES Y CLASES ABSTRACTAS


Una interfaz en Java es una coleccin de mtodos abstractos y propiedades.
En las interfaces se especifica qu se debe hacer pero no su implementacin. Sern las clases que
implementen estas interfaces las que describan la lgica del comportamiento de los mtodos.
La principal diferencia entre interface y abstract es que un interface proporciona un mecanismo de
encapsulacin de los protocolos de los mtodos sin forzar al usuario a utilizar la herencia.

Clases abstractas.Son las clases tanto explcitamente declaradas como abstractas como las que contienen mtodos
abstractos (no implementados). Excepto la capacidad de instanciacin, tienen las mismas
capacidades que una clase o tipo concreto.

Ejemplo:
<<Interface>>
Sonoro

Trompeta
Tambor

+ Sonar (volumen: int)

Instrumentomusical
Sirena

Explicacin:
Tenemos el interface sonoro que provee el mtodo sonar con un volumen concreto.
A esta interface le implementan dos clases: instrumento musical y sirena
Instrumento musical y sirena no tienen nada que ver entre s, pero los dos suenan.

La consecuencia es que en los dos tendremos que sobreescribir el mtodo sonar.


Adems Instrumentomusical tiene el titulo en cursiva, eso significa que es una clase

abstracta nunca vamos a generar un objeto que sea instrumento musical. Su funcin en
este caso es evitar que generemos por error un objeto de tipo instrumentomusical solo
podremos instanciar objetos de tipo trompeta y tambor.

1) Pasamos a construir las clases en NetBeans

2) Luego sobre estas clases construimos la interface:

3) Luego en la interface Sonoro aadimos el mtodo segn el diagrama.

Ojo: en una interface no podemos aadir cdigo al mtodo.

4) Luego en cada clase implementamos (implements) la interface:


Ojo: En el mensaje amarrillo me dice que la clase instrumentomusical no es abstracta por ende
debo aadir la palabra abstract (segn el diagrama)

5) La clase Sirena segn el diagrama no est definido como abstractos por ende debemos
utilizar la ayuda de neatbeans para generar los mtodos abstractos y el throw de una
excepcin.

6) En el throw que nos genera podemos borrarlo y escribir el cdigo que deseamos.

7) Mientras que las clases Trompeta y Tambor heredan (extends) de la clase abstracta
intrumentomusical.
Lo que provoca que tambin deba generar los mtodos abstractos.
Borrar el Throw para aadir mi cdigo.

8) Finalmente podemos generar objetos de todas las clases concretas menos de la clase
abstracta.

Paquetes y espacios de nombres

En programacin, un espacio de nombres (tcnica y correctamente definido como


namespace), en su acepcin ms simple, es un conjunto de nombres en el cual todos
los nombres son nicos. Un espacio de nombres es un contenedor abstracto en el que
un grupo de uno o ms identificadores nicos pueden existir.
Ejemplo:
Si varios programadores estuviramos trabajando en un mismo proyecto, podra darse el
caso que utilicen los mismos nombres de las clases, en ese caso tendramos una colisin
de nombres.
Los espacios de nombres evitan esto, generando agrupaciones de clases dentro de
nuestros proyectos y jerarquas.
Para lo cual podemos crear dentro del proyecto un nuevo Java Package.

dentro del nuevo paquete podemos generar una nueva clase con un nombre repetido
pero no halla ningn problema.

Estructura de datos
En programacin es una forma de ordenar un conjunto de datos elementales con el
objetivo de facilitar su manipulacin.
Un dato elemental es la mnima informacin que se tiene en un sistema.
En nuestro caso un int, doubl, objeto, puede ser nuestro dato elemental.
ARRAYS
En programacin una matriz o vector llamado tambin array es una zona de
almacenamiento continuo, que contiene una serie de elementos del mismo tipo, los
elementos de la matriz.
Ejemplo:

ejemplo:
crea un proyecto llamado EjercicioGrupoAlumno y modela las clases grupo y alumno
que aparecen en el diagrama, adems de la conexin entre ellas (en grupo, tendrs que
crear un array de objetos Alumno)
Ten en cuenta que cada grupo tiene un mximo de 5 alumnos conectados.
Alumno
- nombre: String
- apellidos: String
- DNI: String
- telfono: String

Grupo
- codigo: String
1)

Primero creamos el proyecto con sus


respectivas clases cada una con sus respectivas
propiedades.

Figura 1. Creacin de un proyecto en Java de nombre EjercicioGrupoAlumno con dos clases:


Alumno y Grupo Copyright 2016 por Aulavir.

Figura 2. Propiedades de la clase Alumno Copyright 2016 por Aulavir.


2) En la clase Grupo debemos segn las indicaciones crear un array de objetos de
referencia alumno.
Para eso digitamos los siguientes cdigos:
i)

Guardar un array de referencias alumno y que de entrada vale null

private Alumno [] alumnos = null;


ii)

Crear un constructor llamado Grupo:


public Grupo (){
aqu va el cdigo

iii)
iv)

}
Dentro del constructor Grupo crear un nuevo array de referencias alumnos
alumnos = new Alumno [5];
Instanciar desde aqu y generar 5 alumnos en un for

for (int i=0; i < 5; i++) {

alumnos [i]= new Alumno ();


}
Estos son los tres pasos siempre que trabajemos con un array de objetos:

Figura 3. En la clase Grupo digitamos el cdigo para crear el array Copyright 2016 por Aulavir
3) Luego hay que ir al programa principal para instanciar el constructor Grupo, el cual
ejecutar el cdigo que hemos escrito.
public static void main(String[] args) {
Grupo g1= new Grupo ();
}
para poder ver lo que sucede en este cdigo, fijamos un punto de ruptura en la lnea de cdigo y
lanzar el programa en modo depuracin.

Figura 4. Insertando un punto de ruptura Copyright 2016 por Aulavir

Figura 5. Ejecutamos el programa en modo depuracin Copyright 2016 por Aulavir

Cuando el programa se ejecuta en modo depuracin en la ventana inferior observamos como se


va ejecutando cada cdigo; desplegamos la variable g1 y observamos que tiene 5 posiciones y
en cada una de ellas nos damos cuenta que tienen sus objetos de tipo alumno.

Figura 6. Depurando el programa Copyright 2016 por Aulavir

LISTAS
TIPOS GENRICOS
Son clases o interfaces parametrizados mediante tipos de datos.
Ejemplo:
public class Box {
private Object object;
public void set(Object object) { this.object = object; }
public Object get() { return object; }
}

En este ejemplo se crea un objeto de tipo Box que almacene un objeto genrico en este caso esta
en la referencia object

Versiones modernas de Java:


public class Box<T> {
// T stands for "Type"
private T t;
public void set(T t) { this.t = t; }
public T get() { return t; }
}

Utilizan la parametrizacin que son los signos menor y mayor que aparecen al lado del nombre
de la clase la letra T es una como una plantilla.

Forma de generar una referencia: Box<Integer> integerBox;


Y cuando queramos crear un objeto partiendo de esa clase tenemos que poner en el constructor
tambin la parametrizacin: Box<Integer> integerBox = new Box<Integer>();
A partir de Java 1.7 ya no es necesario poner el tipo de dato en la parametrizacin utilizamos lo
que se llama el operador diamante <>: Box<Integer> integerBox = new Box<>();
COLECCIONES EN JAVA
Java soporta multiples tipos de estructuras de datos vienen preconstruidas en la propia API de
JAVA en el Java Collection Framework.
Las colecciones son conjuntos de elementos, pueden ser array, listas, pueden ser arboles, pueden
ser mapas, pueden ser conjuntos,
Tipos de coleccin:

Interfaz List <E>

Aqu tenemos una coleccin de elementos en una secuencia particular que mantienen un orden y
permite duplicados.
El interfaz List<E> define una serie de mtodos bsicos que podemos utilizar:
Mtodos de List <E>
. add (Object o: aade un objeto al final de la lista.

. add (int indice, Object o): aade un objeto a la lista en la posicin


indicada.
. get (int indice): devuelve el objeto de la lista de la posicin indicada.
. remove (int indice): eliminca el objeto de la lista pasado por parmetro.
. clear(): Elimina todos los elementos de la lista.
. indexOf(Object o): Devuelve la posicin de la primera vez que un elemento
coincida con el objeto pasado por parmetro. Si el elemento no se encuentra
devuelve -1.
. lastIndexOf(Object o): Devuelve la posicin de la ultima vez que un elemento
coincida con el objeto pasado por parmetro. Si el elemento no se encuentra
devuelve -1.
.size(): Devuelve el nmero de elementos de la lista.
.contains(Object o): Devuelve verdadero si en la lista aparece el objeto
pasado por parmetro, para lo cual utiliza intrnsecamente el mtodo equals().

En el API de Java ya estn implementados estos mtodos de la Interfaz list.


Implementaciones de List<E>
El interfaz list dispone de tres implementaciones diferentes:
. ArrayList<E>
. LinkedList<E>
. Vector<E>
Porque tiene mas de una implementacin, porque cada una tiene sus ventajas e inconvenientes:
ArrayList<E>
El acceso a un elemento en particular es eficiente.
Para eliminar un elemento, se ha de mover toda la lista para eliminar ese hueco. Por ende es
ineficiente.
LinkedList<E>
Los elementos estn conectados con el anterior y el posterior.
Es eficiente mover/eliminar elementos de la lista, simplemente moviendo/ eliminando sus
referencias hacia otros elementos.
La desventaja es que para utilizar el elemento N de la lista, debemos recorrer N elementos de la
lista hasta encontrarlo.
Vector<E>
Esta clase es igual que un ArrayList, pero sincronizado, lo que significa que esta preparado para
trabajar en programas multihilo.
Si se usa el mismo vector en dos hilos al mismo tiempo, se garantiza que el acceso concurrente
se realiza de forma ordenada.
Es mas lento que el arrayList pero es seguro utilizarlo en programas multihilo.

Ejercicio
Creamos un nuevo proyecto ejemplolistas con la clase Pelcula

Figura 7. Ejemplo Listas en Java Copyright 2016 por Aulavir


Asignamos las propiedades de la clase Pelicula

Figura 8. Propiedades clase Pelicula en Java Copyright 2016 por Aulavir


Asignamos los mtodos Setter y Getter con la opcin Refactor de NetBeans

Figura 9. Encapsular campos en Java Copyright 2016 por Aulavir

Figura 10. Mtodos Setter y Getter en Java Copyright 2016 por Aulavir
Y se generan los mtodos en el programa:
/**
* @return the titulo
*/
public String getTitulo() {
return titulo;
}

/**
* @param titulo the titulo to set
*/
public void setTitulo(String titulo) {
this.titulo = titulo;
}

/**
* @return the sinopsis
*/
public String getSinopsis() {
return sinopsis;
}

/**
* @param sinopsis the sinopsis to set
*/
public void setSinopsis(String sinopsis) {
this.sinopsis = sinopsis;
}

/**
* @return the anyo
*/
public int getAnyo() {
return anyo;
}

/**
* @param anyo the anyo to set
*/
public void setAnyo(int anyo) {
this.anyo = anyo;
}
luego procedemos a fabricar dos objetos:
public class Ejemplolistas {

public static void main(String[] args) {

Pelicula Pelicula1 = new Pelicula();


Pelicula Pelicula2 = new Pelicula();

Ahora Fabricamos la lista utilizando la interfaz list<E>


List<Pelicula> lista;
Si sale error debemos importar en la ayuda de netbeans la clase java.util.list

Figura 11. Ayuda de Netbeans, importar java.util.list Copyright 2016 por Aulavir
Luego generamos la lista
lista = new ArrayList<>();
como podemos darnos cuenta hemos colocado una implementacin de List, el arraylist y los
"()" del constructor.
Si sale error es porque debemos importar la clase arraylist

Figura 12. Ayuda de Netbeans, importar ArrayList Copyright 2016 por Aulavir

Ahora ya podemos pedirle a nuestra lista que almacene los objetos creados
lista.add(Pelicula1);
lista.add(Pelicula2);
Practica

Potrebbero piacerti anche