Вы находитесь на странице: 1из 40

POO

EN JAVA
FISI - 2013
Agenda

2.-Declaraciones, inicializacin y mbito de las
variables.
Declaracin de clases.
Declaracin, inicializacin y uso de primitivas, arreglos,
enums.
Declaracin de Mtodos.
Instancias de Clases.

Una visin general de la Orientacin a Objetos
Una tcnica para el modelado de sistemas.
Intenta describir un sistema como este existe en la
realidad.
Identifica :
Objetos.
Atributos de los objetos.
Operaciones de los objetos.
Las declaraciones en el archivo fuente
Una opcional declaracin package
Cualquier cantidad de import
Declaraciones de clases e interfaces.
Abstraccin
Funciones Escribir un algoritmos una ves para ser
utilizado en muchas situaciones.
Las clases agrupan un conjunto de atributos y
comportamiento relacionados de un grupo de
objetos.
Framework y APIs Un grupo grande de clases que
soportan un actividad compleja. Un framework puede
ser usado directamente o ser modificado para
ampliar su comportamiento bsico.

Clases como una plantilla de Objetos
En fabricacin una plantilla permite construir
dispositivos en base a un modelo.
En software una clase es una descripcin de un
objeto.
Una clase describe los datos que cada objeto incluye.
Una clase describe el comportamiento a cada objeto.
En la tecnologa JAVA las clases soportan tres
caractersticas clave de la programacin
Orientada o Objetos: Encapsulamiento,
Herencia y Polimorfismo.

Visibilidad en Java
public: puede ser usada por cualquier clase.

protected: puede ser usada por:
funciones miembros de la clase,
funciones miembros de las subclases.
funciones miembros de las clases del propio
paquete.

package: puede ser utilizada por todas las clases
del
paquete.



private: slo puede ser usado por las funciones
miembros de la clase.
Visibilidad en Java
Cuando no se especifican permisos de acceso
(public, private o protected) se supone la opcin
por defecto, que es package.

Si no se ha definido ningn paquete, se utiliza el
package por defecto que es el directorio donde
estn definidas las clases.

Es preciso especificar la visibilidad de cada miembro
ya sea atributo o mtodo de forma independiente.
Control de Acceso

Declarando Clases en JAVA
Sintaxis bsica de una clase en JAVA:
<modifiers> class <class_name>{
[<declaracin_de_atributos>]
[<declaracin_de_constructores>]
[<declaracin_de_mtodos>]
}
Ejemplo:
public class Vehiculo{
private double cargaMaxima;
public void setCargaMaxima(double valor){
cargaMaxima = valor;}
}

Declaracin de Atributos
Sintaxis bsica de un atributo:
<modificadoes> <tipo> <identificador>;
Ejemplo:
public class Algo{
private int x;
private float y = 10000.0F;
private String nombre;
}
Declaracin de mtodos
Sintaxis bsica de un mtodo:
<modificadoes> <tipo_de_retorno>
<identificador>([<lista_de_argunetos>]){
[<declaraciones>]};
Ejemplo:
public class Perro{
private int peso;
public int getPeso( ) {
return peso;}
public void setPeso(int nuevoPeso){
peso = nuevoPeso;
}
}

Accediendo a los Miembros del
Objeto

Ejemplo :La notacin punto: <objeto>.<miembro>
Es usada para acceder a los miembros del objeto estos
incluyen los atributos y los mtodos.

d.setPeso(42);
d.peso = 42; // solo posible accedes a el si es pblico
Ocultando informacin
El Problema:

MyDate

+ day:int
+ month:int
+ year:int





Si los atributos son pblicos se puede
acceder a ellos directamente permitiendo
que cualquier valor sea asignado a ellos

MyDate d = new MyDate ( );
d.day = 32;
//da invalido

d.month = 2; d.day = 30;
// plausible but wrong

d.day = d.day + 1;
// en la asignacin no hay verificacin
Ocultando informacin
Solucin :
MyDate

- day:int
- month:int
- year:int

+ getDay():int
+
setDay(day:int):boolean
+getMonth():int
+setMonth(month:int)
+getYear():int
+setYear(year:int)
+fechaActual()
-validaDay(day:int)



El cliente debe usar los mtodos set/get
Para acceder a los datos internos:
MyDate d = new MyDate( );
d.setDay(32);
// da invalido, regresa false
d.setMonth(2);
d.setDay(30);
//posible error setDay regresa false
d.setDay(d.getDay() +1);
// este regresar falso si la verificacin es
necesaria
Encapsulamiento
Oculta los detalles de implementacin de una clase .
Obliga al usuario a utilizar un interface (mtodos
pblicos) para acceder a los datos.
Hace que sea fcil darle mantenimiento a el cdigo.
Encapsulamiento
Es una de las propiedades de la POO que define que
el objeto debe ser una cpsula o caja negra que
encapsula su funcionamiento y estructura interna.

Slo se ven desde afuera los miembros (la interfaz
para el caso de los mtodos) con visibilidad pblica.


Buenas Prcticas: los atributos deben ser privados o
protegidos y se debe acceder a ellos a travs de los
mtodos que pueden ser pblicos.
Encapsulamiento
instancia1
instancia2
CLASE
INTERFAZ de la CLASE
CLASE
Datos y
Funciones Miembros
Privadas, Protegidas y
de Paquete
Atributos Pblicos Mtodos Pblicos

Encapsulamiento
El encapsulamiento permite:

Ocultar detalles de implementacin.

Simplificar el programa.

Minimizar el impacto del cambio.

Garantizar integridad de los datos.
Referencias en Java
Una referencia es un apuntador que se usa para indicar el
valor de un objeto.

Cuando se asigna un objeto a una variable o se pasa un
objeto a un mtodo como argumento no se usan objeto, ni
copias de objetos sino referencias a los objetos.

Ejemplo:
Point pt1, pt2;
pt1 = new Point (100, 100);
pt2 = pt1;
pt1.x= 200;
pt1.x= 200;
System.out.println(Punto1: = + pt1.x + , + pt1.y);
System.out.println(Punto2: = + pt2.x + , + pt2.y);

Punto1: 200, 200
Punto2: 200, 200
Referencias en Java
Punto1: 200, 200
Punto2: 200, 200
Punto p1;
Punto p2;
p1 = new Punto(100, 100);
p2 = p1;
p1.x = 200;
p1.x = 200;
System.out.println(Punto1: = + p1.x + , + p1.y);
System.out.println(Punto2: = + p2.x + , + p2.y);

Referencias en Java
Punto p1;
Punto p2;
p1 = new Punto(100, 100);
p2 = new Punto(300, 300);
p2 = p1;
p1.x = 200;
p1.x = 200;
System.out.println(Punto1: = + p1.x + ,
+ p1.y);
System.out.println(Punto2: = + p2.x + ,
+ p2.y);

Punto1: 200, 200
Punto2: 100, 100
Hay que probar esto
Acceso a variables de instancia y mtodo
En Java
Circulo c = new Circulo(2.0, 2.0, 4.0);
System.out.println("Radio = + c.r +
"unidades.");
c.r = 5; // se cambia el valor del radio

Para referirse a variables de instancias y mtodos de
objetos se puede usar la notacin de punto:
c: referencia al objeto + operador . + nombre de la variable
miembro r (c.r).

Estas expresiones de evalan de izquierda a derecha.
Acceso a variables de clase
Circulo c = new Circulo(2.0, 2.0, 4.0);
System.out.println(c.numCirculos + crculos
creados.");
Circulo.numCirculos = 5; // se cambia el valor

Para accesar y cambiar las variables de clases se
puede usar la notacin de punto utilizando tanto el
nombre de la instancia como de la clase a la izquierda
del punto.

Se sugiere usar el nombre de la clase, ya que el
nombre de la instancia puede resultar confuso.
Acceso a mtodos
Se pueden combinar llamadas de mtodos anidados y
referencias a variables de instancia.
System.out.println();

Systems describe el comportamiento para el sistema en que
se est ejecutando Java
System.out es una variable de clase que contiene una
instancia de la clase PrintStream.
Este objeto de PrintStream representa la salida estndar del
sistema.
Los objetos PrintStream tienen un mtodo println que enva
una cadema al flujo de salida.
Acceso a mtodos
public Circulo elMayor(Circulo c) {
if (this.r>=c.r)
return this;
else
return c;
}
public static Circulo elMayor(Circulo c, Circulo d) {
if (c.r>=d.r)
return c;
else
return d;
}

Circulo c = c1.elMayor(c2);
Circulo c = Circulo.elMayor(c1, c2);

Ambas funciones (sobrecargadas) retornan una
referencia al objeto que constituye el mayor crculo.
Acceso a variables y mtodos en C++
En funcin de como se cree el objeto hay dos
formas de acceder a los atributos y funciones
miembros.

1- objeto.<atributo o funcin miembro>

Fecha fecha(5,1,2000);
fecha.IncA(4);

2- objeto-><atributo o funcin miembro>

Fecha* miCumple = new Fecha(5,1,2000);
miCumple->IncA(4);

Alcance de variables
En C++, existen variables:
Globales
Locales
Variables de instancia
Variables de clase

En Java, existen variables:
Locales
Variables de instancia
Variables de clase

En Java no existen variables globales.
Alcance de variables
Java busca primero una variable en el bloque
actual, despus en el mtodo. Si la variable no es
local, la busca como variable de instancia o
variable de clase. Si no la encuentra, la busca en
las superclases.

Si una variable de instancia tiene el mismo nombre
de una variable local (sum) y es preciso trabajar en
el mtodo con ambas:

this.sum // se refiere a la variable de instancia

sum // se refiere a la variable local

Buenas prcticas
Hay que ser muy cauteloso al nombrar todos los
tipos de variables
Alcance de variables
int a = 1; // variable global

class TClase
{
int a;
public:
TClase(int);
};

TClase clase(5);
TClase.a; // error, trata de encontrala en el
// mbito de TClase y es privada.


En C++, las clases tienen su propio mbito.

Declaracin de los constructores
Sintaxis bsica de un constructor:
<modificador> <nombre_clase>([<lista_de_argumentos>]{
[<declaraciones>]}
Ejemplo:
public class Perro{
private int peso;
public Perro( ) {
peso = 42;}
public int getPeso( ) {
return peso;}
public void setPeso(int nuevoPeso){
peso = nuevoPeso;
}
}
El Constuctor por Default
Siempre hay al menos un constructor.

Si no se escribe un constructor, el constructor por default
esta presente automticamente:
El constructor por default no tiene argumentos.
El constructor por defecto no tiene cuerpo.

Se habilita el constructor por default al crear un objeto
con new <nombre_clase>( ) si no se escribi un
constructor.
Estructura del un archivo fuente
Sintaxis bsicade un archivo fuente :
[<declaracin_del_paquete>]
[<declaracin_de_los_import>]
<declaracin_de_la_clase>
Ejemplo archivo VehiculoReporteCapacidad :
package shipping.reports;
import shipping.domain.*;
import java.util.List;
Import java.io.*;
Public class VehiculoReporteCapacidad{
private List vehiculos;
public void generateReport(Writer output){ .}
}

Paquetes de Software(package)
package ayuda a administrar sistemas grandes de
software.
package puede contener clases y subclases.
La declaracin package
Sintaxis Bsica de la declaracin package:
package <top_pkg_name>[.<sub_pkg_name>]*;
Ejemplo:
package shipping.reports;
Especifica la declaracin al inicio del archivo
fuente
Solo una declaracin package por archivo.
Si la declaracin package no es declarada
entonces la clase pertenece al default package.
Diseo de directorios y paquetes
(package)
Los paquetes son almacenados en el rbol que
contiene el nombre del paquete.
Ejemplo de la aplicacin shipping :
La declaracin import
Sintaxis bsica de declaracin import
import <pkg_name>[.<sub_pkg_name>].<class_name>;
Or
import <pkg_name>[.<sub_pkg_name>].*;
Ejemplos:
import shipping.domain.*;
import java.util.List;
import java.io.*;
Precede a todas las declaraciones de clases.
Indica al compilador donde encontrar las clases
utilizadas.

Actividad a desarrollar
Describe con tus propias palabras junto con ejemplo de
los siguientes trminos:
Clase
Objeto
Atributo
Mtodo
Constructor
Paquete
Genera la clase Fecha
MyDate

- day:int
- month:int
- year:int

+MyDate(day:int,month:int,year:int)
+MyDate(dia:int,mes:int,ao:int)
+MyDate(dia:int)
+ getDay():int
+ setDay(day:int)
+getMonth():int
+setMonth(month:int)
+getYear():int
+setYear(year:int)
+fechaActual()
-validaDay(day:int)



Crea otra clase
llamada
PruebaMyDate.java
que utilice la clase
MyDate y que solicite
desde el teclado los
datos necesarios para
actualizar la clase y
que imprima los
valores
Tarea:
Agregar a la clase MyDate el mtodo que permita
calcular los aos que han pasado a partir de una
fecha.
Agregar los mtodos necesarios para realizar
validacin de las fechas introducidas

Вам также может понравиться