La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Definición de Clases y Variables de referencia.

Presentaciones similares


Presentación del tema: "Definición de Clases y Variables de referencia."— Transcripción de la presentación:

1 Definición de Clases y Variables de referencia.

2 ¿Qué es un objeto? Ejemplo: Un punto x,y en un plano Cartesiano.
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.

3 ¿Qué 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

4 má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.

5 Variables 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.

6 Caracterí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.

7 Caracterí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.

8 Clase Point: private int x=0 private int y=0 x,y x,y x,y Métodos }
Variable de clase (estática) public class Point { numCreated = 1 = 2 = 3 private static int numCreated=0 punto1 punto2 punto3 private int x=0 private int y=0 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

9 Definiendo 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 Persona[100]; personas = new Persona[MAX_PERSONAS]; Se puede hacer al mismo tiempo private Persona personas = new Persona(); private Persona[] personas = new Persona[maxPersona];

10 Creando 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.

11 Constructores: 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.

12 Caracterí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( ) {}

13 Cambiando los valores de las variables de 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.

14 Regresando 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

15 Métodos: Formato: objeto.método Ejemplo: punto1.getX();
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();

16 Métodos: Formato: clase.método Ejemplo: Point.getNumCreated();
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 !! Nota: Los métodos estáticos NO accesan datos del objeto !! Formato: clase.método Ejemplo: Point.getNumCreated();

17 return-type name(argument-list) body
Mé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.

18 Mé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.

19 Mé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.

20 Creando 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 <= MAX_AUTORES) { this.numAutores = numAutores; return true; } else { return false; } public boolean agregaAutor(String nombre) { autores[numAutores] = new Autor(nombre); return setAutores(numAutores + 1);

21 Regresando 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 <= numPersonas; ++i) { If (personas[i].getEdad() > personas[posMax].getEdad()) { posMax=i; } return personas[posMax];

22 Mandando 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(); libro[i].setTitulo(stdIn.readLine()); stdOut.print("Dame el número de páginas"); libro[i].setPagina(Integer.parseInt(stdIn.readLine())); stdOut.print("Dame el nombre del autor"); libro[i].agregaAutor(stdIn.readLine()); stdOut.print("Deseas ingresar otro autor s/n?"); cont = stdIn.readLine(); } while (cont.equals("s")); stdOut.print("Deseas ingresar otro libro s/n?"); ++i;

23 Trabajando 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);

24 Acceso a los datos

25 Representació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.

26 Representació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.

27 Acceso 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

28 Acceso 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.

29 Igualdad 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

30 Igualdad 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.

31 Paso 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.

32 Alcance 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.

33 Modificadores de acceso

34 Modificadores de Acceso
Normalmente se manejan 2 modificadores de acceso: public private Public Private Los elementos que tienen el modificador de public pueden ser accesados desde fuera del objeto a través del mismo. Los elementos que tienen el modificador de private solo pueden ser accesados desde el interior del objeto.

35 Modificadores 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*. Leer la filmina *El objetivo del modificador private es que aquellos elementos declarados con él sean accesados únicamente por otros elementos internos a la clase.

36 Modificadores de Acceso
Public Private Private Public Public Filmina anterior en forma gráfica Private Superclase Subclase

37 Modificadores 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. Erase una vez el modificador 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.

38 Modificadores de Acceso
Private Private Protected Public Protected Public Private Nuevamente, filmina anterior en forma grafica Public Superclase Subclase

39 Modificadores de Acceso
Acceso a miembro heredado Acceso desde public private protected package Métodos anexos de subclases Métodos del mismo paquete entre la superclase y la subclase Una clase externa En esta tabla se muestra el acceso a diferentes elementos declarados con los diversos modificadores de acceso.

40 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)

41 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

42 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


Descargar ppt "Definición de Clases y Variables de referencia."

Presentaciones similares


Anuncios Google