Java - Modulo 2
Java - Modulo 2
Contenido
Arreglos
UML: Diagramas de
Clase
Declarando clases: repaso
+ detalle
Atributos y mtodos de
clase
Modificadores de Acceso
Herencia
De Diagramas de Clase a
Java
Paquetes
Clases Abstractas
Interfaces
Vector
Colecciones
Tipos
Arrays
Arrays
Declaracion
equivale a
int[] a;
a es un array; b y c son enteros
int a[];
a, b y c son arrays:
int a[], b, c;
int[] a, b, c;
Instanciacion
a = new int[20];
System.out.println(a.length); // imprime 20
Arreglos
Inicializacion de Arrays
Ejemplos de Arrays
int[] digitos = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
String[] dias = {"lunes","martes","mircoles","jueves",
"viernes","sbado","domingo"};
Fecha[] festivos = { new Fecha ( 1, 1, 2000),
new Fecha ( 15, 5, 2000),
new Fecha ( 12, 10, 2000),
new Fecha ( 6, 12, 2000),
}
Recorrido:
int[] lista = new lista[10];
for (int i = 0; i < lista.length; i++)
{
System.out.println(lista[i]);
}
Arrays Multidimensionales
new int[3][];
int[12];
int[12];
int[12];
Inicializacin de Arrays
Multidimensionales
Se necesita un conjunto de datos
entre llaves para cada dimensin
int[][] matriz =
{
{1, 2, 3},
{4, 5, 6}
};
equivale a
int[][] matriz
new int[2][3];
matriz[0][0] =
matriz[0][1] =
matriz[0][2] =
matriz[1][0] =
matriz[1][1] =
matriz[1][2] =
=
1;
2;
3;
4;
5;
6;
if (isPalindrome(string)) {
System.out.println(
for (i = (len - 1); i >= 0; i--) {
"It IS a palindrome!");
c = string.charAt(i);
} else {
if (Character.isLetterOrDigit(c)) {
System.out.println(
dest.append(c);
"It is NOT a palindrome!");
}
}
}
System.out.println();
return dest.toString();
}
}
Orientacin a Objetos
Miembros de la clase:
Una clase
class Persona {
// Atributos
private String nombre;
private String telefono;
private Persona padre;
private Persona madre;
// Constructores
public Persona(String nombre, String telefono) {
this(nombre,telefono,null,null);
}
public Persona(String nombre, String telefono,
Persona padre, Persona madre) {
this.nombre = nombre;
this.telefono = telefono;
this.padre = padre;
this.madre = madre;
.... }
// Metodos, acceden a atributos privados
public String nombre() {return nombre;}
public String telefono() {return telefono;}
public Persona padre() {return padre;}
public Persona madre() {return madre;}
public boolean hayPadre() {return padre != null;}
public boolean hayMadre() {return madre != null;}
}
El Lenguaje de Modelacin
Unificado (UML)
Es un lenguaje estndar para la
escritura
de
modelos
de
software. UML puede ser utilizado
para
visualizar,
especificar,
construir
y
documentar
los
artefactos de un sistema de
software intensivo.
Elementos
Relaciones
Diagramas
Elementos
Elementos Estructurales
Elementos de Comportamiento
Elementos de Agrupacin
Paquetes
Elementos de Anotacin
Notas
Relaciones
Dependencia
Asociacin
Generalizacin
Realizacin
Diagramas
Diagramas de Clase
Diagramas de Objeto
Diagrama de Secuencia
Diagrama de Estado
Diagramas de Actividad
Diagramas de Componente
Diagramas de Desarrollo
Elementos Estructurales
Los elementos estructurales son
los sustantivos de los modelos
UML.
Estos son la mayora de las partes
estticas
de
un
modelo,
representando elementos que son
conceptuales o fsicos.
Clases en UML
Nodo
Red
+ Creados: integer
+ RetrasoMedio: float
1..N
+ CreaPaquete()
...
+ Id: integer
Nodos + Procesados: integer
+ ServicioMedio: float
+ RestrasoMedio: float
1..1
EnEspera
+ NMedio: integer
+ Tamao: float
1..1
+ Encola(Paquete)
+ Desencola():Paquete
...
1..N
Siguiente
Origen
Paquetes
Asociacin
Paquete
Agregacin
Herencia
1..1
Destino
1..1
+ Id: integer
+ tamao: integer
Ms Orientacin a Objetos
Volviendo a Java
Llama al Constructor.
Puede dar excepcion: OutOfMemoryError
p1.nombre = otro // illegal: privated
p1.nombre()
new Persona(maria,...).nombre() == maria
Declarando
Clase
Atributos
Mtodos
Constructores
La cla se...
espblicamente acce
si
ble
no puede serinst
anciada
la l
case no puedeserderivada
ti
enepornom bre Name
hereda
deSuperClass
im plementa i
certasInterfaces
Declarando un atributo
Partesde lade claraci n Pro pos ito
niveld eacceso
private,protected,etc.
static
si e
sunavarde l
case
final
es c
onst
ante
transient
no seriali
zar
volatile
cam bia inespera
damente
(threa
d)
ti
po n
om bre
Declarando un mtodo
Sintaxis:
modificadores tipo nombre(parametrosFormales)
[ throws excepciones]
{
sentencias
}
Constructores
Constructores
class Punto {
private double x;
private double y;
public Punto() {
this(0.0,0.0);
}
public Punto(double x,
double y) {
this.x = x;
this.y = y;
}
...
}
class Circulo {
private Punto centro;
private double radio;
public Circulo() {
this(new Punto(),1);
}
public Circulo(double x,
double y, double radio) {
this(new Punto(x,y),radio);
}
public Circulo(Punto centro, double radio) {
this.centro = centro;
this.radio = radio;
} ... }
Sobrecarga de mtodos
(Polimorfismo)
Sobrecarga de mtodos
(Polimorfismo)
public
void
void
void
void
}
class DemoOverloading {
print(int a, int b) { ... }
print(int a, char b) { ... }
print(char a, int b) { ... }
print(int a, int b, int c) { ... }
Destructores
Atributos de clase
Mtodos de clase
Ejemplo de static
public class Error
{
int x ;
public static y ;
public static void main (String args[])
{
y = 15 ;
x = 20 ; ERROR
}
}
Inicializacin de atributos
estticos
class Primos {
public static int[] primos = new int[4];
static {
primos[0] = 2;
for (int i = 1; i < primos.length; i++)
primos[i] = siguientePrimo();
}
private static int siguientePrimo() {...}
}
Referencias
Modificadores de Acceso
Modificadores de acceso:
atributos y mtodos
Mtodos privados
Modificadores de acceso:
atributos y mtodos
Es pe cificad or
Clase
private
Si
No
No
No
pr otect e d
Si
Si*
Si
No
pu blic
Si
Si
Si
Si
pa c kage
Si
No
Si
No
Herencia
Herencia
Object
Object
public class
Ficha {
private long id;
private static long idactual = 0;
public Ficha() {
id = idactual++;
}
public long id() {return id;}
public boolean equals(Object o) {
return (o instanceof Ficha) &&
((Ficha)o).id() == id;
}
public String toString() {
return "Ficha(id="+id+")";
}
Operadores de Comparacin
de Objetos
String s1 = new String("Hola");
String s2 = new String("Hola");
if (s1 == s2)
...
// false
if (s1.equals(s2))
...
// true
Heredando clases
Heredando clases
public class Persona { // Hereda de Object
private String nombre;
public Persona(String nombre) {
this.nombre = nombre;
}
public String nombre() {return nombre;}
}
public class Empleado extends Persona {
private double salario;
public Empleado(String nombre,double salario) {
super(nombre);
this.salario = salario;
}
public double salario() {return salario;}
}
Constructores y Subclases
Constructores y Subclases
Los constructores no se
heredan.
La forma de invocar
constructores de la
superclase desde la subclase
es a travs de super(...)
El uso de this(...) como
primera sentencia de un
constructor permite
retardar la eleccin del
constructor de la superclase
que se va a ejecutar.
Relacin "es-un
Para saber si la relacin de herencia es correcta, se plantea la pregunta
"la subclase es-una superclase?". La respuesta debe ser "s
el Jefe es-un Empleado? S
la Secretaria es-un Empleado? S
class Bici
{
int numRuedas;
int numAsientos;
int velocidadMax;
}
class Avion
class Bici
{
int numRuedas;
int numAsientos;
int velocidadMax;
}
class Avion extends
Bici
{
{
int
int
int
int
numRuedas;
numAsientos;
velocidadMax;
numAlas;
int numAlas;
}
Avion es-una Bici? NO
class Chasis
{
class Coche
{
Motor
m;
Chasis ch;
}
}
Sobreescritura de Mtodos
Polimorfismo en Herencia
Una clase slo tiene una forma, pero una variable que
hace referencia a la superclase de una jerarqua puede
tener muchas formas (una por cada subclase)
Empleado e1 = new Empleado();
Empleado e2 = new Jefe();
Empleado e3 = new Secretaria();
e2.numTrabajadores=15; // Error
((Jefe)e2).numTrabajadores=15;
Parmetros Polimrficos
class Mascota {...}
class Raton extends Mascota {...}
class Gato
extends Mascota {...}
class Veterinario
{
void vacunar ( Mascota m )
{...}
}
...
Veterinario doctor = new Veterinario();
Gato tom = new Gato();
Raton jerry = new Raton();
doctor.vacunar(tom);
doctor.vacunar(jerry);
...
Colecciones Heterogneas
Ejemplo de Colecciones
Heterogneas
class Empleado
{
...
int salario;
int calcularVacaciones(){...}
}
class Jefe extends Empleado
{
int numTrabajadores;
int calcularVacaciones(){...}
}
...
Empleado[] lista =
new Empleado[100];
lista[0] = new Empleado();
lista[1] = new Empleado();
...
lista[56] = new Jefe();
...
lista[99] = new Empleado();
for (int i = 0;
i < lista.length; i++)
{
System.out.println(
lista[i].
calcularVacaciones());
}
Lnea Venta
class LneaVenta {
int cantidad;
cantidad:entero
subtotal( ) {...}
subtotal( )
LneaVenta() {...}
}
Transformacin de
asociaciones para una
implementacin OO
Una asociacin bidireccional es implementada,
Transformacin de
asociaciones para una
implementacin OO
Los atributos de referencia de la clase uno son
Transformacin de
asociaciones para una
implementacin OO
1..*
Persona
trabajapara
Compaa
empresario
empleado
class Persona {
class Compaa {
Compaa empresario;
Persona[] empleado;
Persona( ) {
Compaa( ) {
}
}
Transformacin de
asociaciones para una
implementacin OO
1..*
Libros
class Libro {
Edita
Editorial
class Editorial {
Libro[] mislibros;
Libro( ) {
}
Editorial( ) {
}
}
Transformacin de clase
asociacin para una
implementacin OO
0..*
Usuario
Esta autorizado en
0..*
Estacin de
trabajo
Autorizacin
class Usuario {
autorizacin[] miautori;
Usuario( ){
}
}
class autorizacin {
usuario miusuario;
estacint miestacin;
autorizacin( ){
}
}
class estacint {
autorizacin[] miautori;
estacint( ){
}
}
Transformacin de atributos
de enlace para una
implementacin OO
Asociacin uno-a-uno: Los atributos de enlace se pueden
almacenar como atributos de cualquiera de los objetos.
Asociacin uno-a-muchos: Los atributos de enlace se
pueden almacenar como atributos del objeto muchos.
Asociacin muchos-a-muchos: Se implementa la
asociacin como una clase.
Transformacin de agregacin
para una implementacin OO
Se implementa igual que la asociacin.
computadora
1
1..*
monitor
class Computadora {
Monitor[] mismonitores;
Teclado miteclado;
Computadora( ) {
}
}
teclado
class Monitor {
Monitor( ) {
}
}
class Teclado {
Teclado( ) {
}
}
Transformacin de herencia
simple para una
implementacin OO
Lmpara
Fluorescente
class Lmpara {
Lmpara( ) {
}
}
Incandescente
class Incandescente
extends Lmpara
{
Incandescente( ) {
}
}
Paquetes
Paquetes
package <nombre.paquete>;
Ejemplo de Paquetes
Sentencia import
import <nombre.paquete>.<NombreClase>;
import <nombre.paquete>.*;
import java.lang.*;
El paquete que contiene las clases fundamentales para programar
en Java (System, String, Object...)
Ejemplo de import
import empresa.finanzas.*;
public class Jefe extends Empleado
{
String departamento;
Empleado[] subordinados;
}
Si no se pone el import, deberamos referirnos a
Empleado como empresa.finanzas.Empleado
La clase Jefe pertenece al paquete annimo por
defecto
String pertenece al paquete java.lang
Modificadores de acceso:
atributos y mtodos
Es pe cificad or
Clase
private
Si
No
No
No
pr otect e d
Si
Si*
Si
No
pu blic
Si
Si
Si
Si
pa c kage
Si
No
Si
No
Clases Abstractas
Clases Abstractas
Una clase abstracta es una clase de la que no se pueden
crear objetos
// Error
Mtodos Abstractos
Ejemplo
Jerarqua de figuras
geomtricas:
class Punto
{
int x;
int y;
int color;
}
abstract class Figura
{
Punto ptoOrigen;
abstract void
dibujar();
}
class Rectangulo
extends Figura
{
Punto ptoFinal;
void dibujar()
{...}
}
class Circulo
extends Figura
{
int radio;
void dibujar()
{...}
}
Interfaces
Interfaces (I)
Interfaces (II)
Equivalencia
Interfaz - Clase Abstracta
interface Interfaz
{
<tipo> <mtodo1>();
<tipo> <mtodo2>();
...
<tipo> <mtodoN>();
}
equivale a
abstract class Interfaz
{
abstract <tipo> <mtodo1>();
abstract <tipo> <mtodo2>();
...
abstract <tipo> <mtodoN>();
}
Vector
Atributos:
Constructores:
Mtodos:
int capacity()
int size()
Mtodos:
void removeElementAt(int
index)
void insertElementAt(Object
elem,
int index)