Title: Definicin de Clases y Variables de referencia'
1Definición de Clases y Variables de referencia.
2Qué es un objeto?
- Un objeto es una combinación de datos (variables)
y acciones (métodos). - Estos datos y estas acciones están relacionadas
entre sí, de manera que dan sentido al objeto.
Esto es encapsulación. - Ejemplo Un punto x,y en un plano Cartesiano.
- objeto punto1
- datos coordenadas (x, y )
- métodos getX, getY, setX, setY.
3Qué es una clase?
y
x
- Una clase es una generalización de un objeto.
- Una clase es un modelo o formato que deben
cumplir todos los objetos que pertenecen a dicha
clase. - En el ejemplo del Punto, podemos tener un objeto
punto1, sin embargo no será único. Todos los
demás puntos que se dibujen en el plano
Cartesiano, punto2, punto3, etc., tienen el mismo
patrón de datos y comportamiento es decir todos
están dibujados en una posición (x,y), y se
pueden accesar sus datos con getX y en getY. - Cada uno de estos puntos es un objeto o instancia
de la clase Point
4más sobre clases...
- Una vez que especificamos o creamos una clase
podemos construir cualquier numero de objetos que
pertenezcan a dicha clase y que por lo tanto
tengan el mismo comportamiento. - Los objetos creados a partir de una clase son
instancias de esa clase.
5Variables de Instancia y Variables de Clase
- Variables de Instancia.- Cada objeto que
pertenece a la clase tiene una copia personal de
la variable. - Variables de Clase.- Existe una sola copia de la
variable, sin importar el numero de objetos que
fueron creados de dicha clase.
6Caracterísiticas de la Programación orientada a
objetos Polimorfismo...
- Si tuvieramos una clase Circulo, para la cual
también se definieron los métodos getX y getY,
JAVA por su característica de polimorfismo sabrá
a qué método referenciar cuando se invoque
objeto.getX - Esto es, si tenemos la siguiente definición
- private Point punto1
- private Circulo circulo1
- Cuando se invoca al método
- punto1.getX() // se está referenciando al
método getX que pertenece a la clase Point. - circulo1.getX() // se está referenciando al
método getX que pertenece a la clase Circulo.
7Caracterísitcas de la Programación orientada a
objetos Herencia...
- Cuando una clase hereda las variables y métodos
de otra clase, se dice que la primera extiende
a, o es una subclase de la segunda. - Se profundizará en este tema más adelante.
8Clase Point
Variable de clase (estática)
public class Point
private static int numCreated0
punto1
punto2
punto3
private int x0
private int y0
x,y
x,y
x,y
x 5 Y 7
x 8 Y 3
x 4 Y 9
Métodos
Estos campos no pueden ser accesados desde afuera
de la clase
9Definiendo un objeto.
- Las siguientes son opciones válidas para definir
un objeto de una clase - public Persona persona1 //con acceso para otras
clases - private Persona persona1 //para uso exclusivo
dentro de la clase - Un arreglo de objetos
- public Persona personas
- Para asignar el objeto a la variable
- persona1 new Persona()
- personas new Persona100
- personas new PersonaMAX_PERSONAS
- Se puede hacer al mismo tiempo
- private Persona personas new Persona()
- private Persona personas new
PersonamaxPersona
10Creando un constructor
- Es posible crear varios constructores para una
misma clase, que hagan algo dependiendo del tipo
de parámetros que reciben. Esto se llama
polimorfismo.
public Vagon() peso 0
Recordar NO lleva definición Tipo de dato de
entrada. El nombre del constructor es el mismo
que el de la clase. Los constructores accesan
directamente las variables de instancia. No se
usan métodos para asignar los valores.
11Constructores
- Cuando utilizas una variable de tipo int o
double, es necesario inicializarla con los
valores que tu requieres. - De la misma manera los objetos de una clase
necesitan ser inicializados cuando son creados. - La forma de inicializar los objetos de una clase,
es al momento de crearlos con el estatuto new. - El estatuto new llama a los métodos constructores
de la clase y envía los datos iniciales con los
que se creará el objeto.
12Caracterísiticas de los métodos constructores
- Tienen el mismo nombre de la clase.
- Pueden existir varios métodos constructores para
la misma clase, con diferentes parámetros,
siempre y cuando se conserve el mismo nombre de
la clase. - El método NO debe de decir int, double, void ni
nada. - Aunque el método constructor no requiera
parámetros, es necesario dejar los paréntesis
vacíos. Default Constructor Ejemplo public
Point( )
13Cambiando los valores de las variablesde
instancia.
- Normalmente los valores de las variables de
instancia los declararemos como private. - Para cambiar el valor de una variable de
instancia se usan metodos mutadores - public void setEdad(int edad)
- this.edad edad
-
- ó
- public void setEdad(int e)
- edad e
-
Si la variable local que se recibe se llama igual
que la variable de instancia se usa el this.
Por convención los métodos Se inician con
minúscula y cada palabra que define el método va
con mayúscula.
No olvidar el void.
14Regresando el valor de una variable de instancia
- Los métodos que regresan un valor de variable de
instancia se declaran usando el valor de retorno.
Y de denominan métodos accesores. - public int getNumMaq()
- return numMaq
-
No recibe parámetros
15Métodos
- Los métodos describen lo que un objeto puede
hacer. - Métodos de instancia o no-estáticos.- Existen
solo para los objetos y deben ser llamados por un
objeto en particular.
Formato objeto.método
Ejemplo punto1.getX()
16Métodos
- Los métodos describen lo que un objeto puede
hacer. - Métodos de clase o estáticos.- Existen solo para
la clase y NO pueden ser llamados por los objetos
en forma individual.
Este es un método estático !!
Formato clase.método
Nota Los métodos estáticos NO accesan datos del
objeto !!
Ejemplo Point.getNumCreated()
17Métodos
- Definición de un método
- return-type name(argument-list) body
- Parámetros Formales
- Lista de argumentos que se encuentran en el
encabezado de la definición del método - Argumentos Actuales
- Lista de argumentos que se encuentran al momento
de hacer la llamada al método. - Los parámetros deben de corresponder en número,
orden y tipo.
18Métodos
- Variables Locales Son declaradas dentro del
método y se crean cada vez que se llama a dicho
método. - Paso de parámetros por valor Para variables
primitivas, los parámetros formales son copia de
los argumentos, de manera que se protege la
integridad de los argumentos actuales.
19Métodos
- El paso de parámetros por valor protege la
integridad de los argumentos actuales Si el
método modifica sus parámetros formales, los
argumentos actuales permanecen sin cambio.
20Creando métodos de la clase
- Asegúrate de reflejar el valor de retorno en la
definición del método y recibir los parámetros. - private boolean setAutores(int numAutores)
- if (numAutores lt MAX_AUTORES)
- this.numAutores numAutores
- return true
- else
- return false
-
-
- public boolean agregaAutor(String nombre)
- autoresnumAutores new Autor(nombre)
- return setAutores(numAutores 1)
-
21Regresando un objeto.
- El siguiente código muestra un ejemplo de retorno
con un objeto. - public Persona masEdad()
- int posMax 0
- for (int i 0 i lt numPersonas i)
- If (personasi.getEdad() gt personasposMax.get
Edad()) - posMaxi
-
-
- return personasposMax
-
22Mandando llamar a los métodos de una clase.
- int i 0
- String titulo
- String nombre
- do
- stdOut.print("Dame el título del libro")
- stdOut.flush()
- libroi.setTitulo(stdIn.readLine())
- stdOut.print("Dame el número de páginas")
- stdOut.flush()
- libroi.setPagina(Integer.parseInt(stdIn.readLin
e())) - do
- stdOut.print("Dame el nombre del autor")
- stdOut.flush()
- libroi.agregaAutor(stdIn.readLine())
- stdOut.print("Deseas ingresar otro autor
s/n?") - stdOut.flush()
- cont stdIn.readLine()
- while (cont.equals("s"))
- stdOut.print("Deseas ingresar otro libro s/n?")
23Trabajando con valores de retorno.
- stdOut.printLn(La persona de mayor edad, tiene
persona1.masPeso().getPeso()) - El método masEdad() regresa un objeto de tipo
Persona - El objeto Pesona tiene un método getEdad()
- Separando la instrucción
- Persona p1 persona1.masPeso()
- int edad p1.getPeso()
- stdOut.printLn(La persona de mayor edad, tiene
edad)
24Acceso a los datos
25Representación de los datos
- Primitivos o Escalares.- Representan un valor
por sí mismos. Son datos pequeños y se requieren
pocos recursos (tiempo y espacio) para crearlos o
destruirlos. - Objetos.- Es una variable más compleja que puede
contener varios valores. Tienden a ocupar más
espacio que los escalares. En este caso los
identificadores o nombres de variables
representan una dirección o localidad en memoria.
- Los objetos son representados por referencia y
los datos escalares o primitivos por valor.
26Representación de los datos
- Objetos.- Ejemplo
- Point p1
- En este caso p1 es solamente una dirección o una
referencia en memoria. - Mientras p1 no sea inicializado adecuadamente su
valor será null - Para crear realmente un objeto debemos utilizar
el operador new en conjunto con los
contstructores definidos.
27Acceso a los datos
- Para accesar un método se utiliza el operador
infijo . De manera que tenemos
objeto.método - Generalmente para accesar una variable de
instancia NO se hace directamente
(objeto.variable) sino que se recurre a un
método hecho especialmente para ello, por
ejemplo p1.getX() - Si se desea accesar una variable de clase,
entonces se utiliza el formato clase.método
28Acceso a los datos
- Si un objeto NO ha sido creado, ovbiamente no
podemos accesar su información a través de ningún
método. - Los únicos que sí pueden ser accesados aunque no
exista ningún objeto, son los métodos y campos
estáticos, pues estos dependen de la clase y no
de los mismos objetos.
29Igualdad y Asignación de objetos
Asignación y comparación de variables primitivas
- int x 5
- int y 5
- x y // la comparación será verdadero !
- Point p1 new Point(2,4)
- Point p2 new Point(2,4)
- p1 p2 // será falso !
- porque está comparando dos direcciones.
Asignación y comparación de variables objeto
30Igualdad y Asignación de objetos
- Point p1 new Point(-1, -1)
- Point p2 new Point(5, 10)
- p2 p1 // lo que tenía p2 se va al garbage
collector... - cuál será el resultado de la siguiente
comparación? - p1 p2
// será verdadero ! porque los dos objetos tienen
la misma dirección.
31Paso de parámetros por referencia
- En JAVA, cuando se pasan parámetros a un
método... - Todos los valores primitivos son pasados por
valor. - Todos los valores no-primitivos (referencias
(direcciones) y objetos) son pasados por
referencia.
32Alcance de Variables (Scope)
- Scope Alcance de las variables. Se refiere a
la porción de programa donde una variable vive
o tiene significado. - Class Scope.- Comprende los identificadores
declarados a nivel clase. Toda la clase puede
ver dichas variables. - Block Scope.- Comprende identificadores
declarados dentro de un bloque . Las
variables locales a un método pueden ser
utilizadas desde su punto de declaración hasta el
final del bloque. Cuando sales de bloque se
mueren las variables.
33Modificadores de acceso
34Modificadores de Acceso
- Normalmente se manejan 2 modificadores de acceso
- public
- private
35Modificadores de Acceso
- Cuando se heredan los objetos todos sus elementos
con modificadores de public pueden seguir siendo
accesados de la misma manera por instancias de la
subclase. - Los elementos con modificadores de private solo
van a poder ser accesado por métodos declarados
en la superclase.
El objetivo del modificador private es que
aquellos elementos declarados con él sean
accesados únicamente por otros elementos internos
a la clase.
36Modificadores de Acceso
Private
Public
Public
Private
Superclase
Subclase
37Modificadores de Acceso
- Cuando se maneja herencia y se desea que
elementos que necesitan ser privados puedan ser
accesados por otros elementos nuevos dentro de
las sublcases entonces se utiliza el modificador
de acceso protected.
El modificador protected es en todos los
aspectos idéntico al modificador private excepto
en la forma en la que funciona con la herencia.
38Modificadores de Acceso
Private
Private
Protected
Public
Protected
Public
Private
Public
Superclase
Subclase
39Modificadores de Acceso
40Modificadores para campos...
- Modificadores para Campos
- modificadores de acceso
- public se puede tener acceso a él desde
cualquier parte desde donde la clase que lo
contiene pueda accesarse - protected puede accesarse solamente desde
adentro de su clase, desde clases del mismo
paquete donde está su clase y por subclases de su
clase - default (no se especifica el acceso) puede
accesarse solamente desde adentro de su clase y
por clases del mismo paquete de su clase - private pueden accesarse solamente desde
adentro de su clase - modificadores de existencia
- static existe uno para toda la clase, en lugar
de uno para cada objeto de su clase - modificadores de uso
- final no puede modificarse (i.e., constante o
de sólo lectura)
41Modificadores para métodos...
- Modificadores para Métodos
- modificadores de acceso
- public se puede tener acceso a él desde
cualquier parte desde donde la clase que lo
contiene pueda accesarse - protected puede accesarse solamente desde
adentro de su clase, desde clases del mismo
paquete donde está su clase y por subclases de su
clase - default (no se especifica el acceso) puede
accesarse solamente desde adentro de su clase y
por clases del mismo paquete de su clase - private pueden accesarse solamente desde
adentro de su clase - modificadores de existencia
- static existen para servir a su clase y no para
servir a objetos individuales de su clase como
consecuencia, los métodos static no tienen acceso
a variables de instancia ya que éstas pertenecen
a los objetos individuales, aún más, estos
métodos no tienen acceso a this ni a super. - modificadores de uso
- final no puede sobreescribirse
- abstract debe sobreescribirse para que sea útil
42Modificadores para clases...
- Modificadores para Clases
- modificadores de acceso
- public se puede tener acceso a ella desde
cualquier clase - default (no se especifica su acceso) puede
accesarse desde adentro de cualquier clase de su
mismo paquete, esto es, A fin de tener acceso por
default a una clase, estas deben estar en el
mismo paquete. - modificadores de uso
- final no puede extenderse(heredada)
- abstract debe extenderse (heredada) para que
sea útil