Definición de Clases y Variables de referencia.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Curso de java básico (scjp)
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
Clases en C++.
22/11/2005 E.T.S de Ingenieros de Telecomunicación - UPNA.1 Clases y Objetos Silvia Larrayoz Leire Urriza.
Lenguaje de programación Java
SCJP Sun Certified Programmer for Java 6
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Arquitectura CLARO-TECNOTREE
Elementos básicos del Lenguaje
La Programación Orientado a Objetos
Lección 1 Introducción a la POO
Inner classes CAPITULO 8.
Informática II Prof. Dr. Gustavo Patiño MJ
UNIVERSIDAD LATINA (UNILA)
Aplicación del paradigma orientado a objetos
Diseño y programación de
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Programación Orientada a Objetos en Java
Unidad 3 Punteros.
PROGRAMACIÓN EN JAVA Curso-taller inicial de programación en JAVA Facultad de Estadística e Informática TEMA II.
HERENCIA.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.

Métodos Algoritmos y Desarrollo de Programas I. Cuando utilizar métodos  Los métodos se utilizan para romper un problema en pedazos de forma que este.
Modificadores.
POO Java Módulo 3 Elementos de programas Identificadores
Estructura de Datos En C++
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Introducción a Java II.
Lic. Rosemary Torrico Bascopé
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
POO en C++ Programación Orientada a Objetos. Declaración de clases con struct Las clases en C++ pueden definirse utilizando la construcción struct Ejemplo:
SCJP Sun Certified Programmer for Java 6
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA TRES ASIGNACION.
Programación III Clase 06 Funciones.
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Clases y objetos. La unidad fundamental del lenguaje Java es la clase, que proporciona la estructura de los objetos y mecanismos para fabricarlos, a partir.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Herramientas de polimorfismo y herencia en C++
FACULTAD DE ESTUDIOS SUPERIORES ARAGON
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Programanción I Ing. Cristhian Garita Fonseca
Constructor  Un constructor es un método que inicia un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que iniciar.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
Informatica II1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase que ha sido extendida. La clase original se conoce como superclase.
Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos.
Programación Orientada a Objetos
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Detalles Generales sobre Java
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA SEIS DESARROLLO, INNER CLASSES.
Programación orientada a objetos
Capítulo 2 “Subprogramas/Funciones - Arreglos”
INSTITUTO TECNOLOGICO DE TEHUACAN Ingeniería en sistemas computacionales Curso de apoyo a la titulación CLASES DE JAVA Diciembre de 2008.
Clases “ Es una Abstracción de un elemento del mundo real ”
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
:: Prof. Yeniffer Peña Introducción a JAVA Presentación Programación I.
Prof. Manuel B. Sánchez. Declaración de Objetos Una vez que la clase ha sido implementada se pueden declarar objetos como variables locales de métodos.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
RELACIONES ENTRE CLASES M.C. YOLANDA MOYAO MARTINEZ.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Prof. Manuel B. Sánchez. Es un mecanismo y uno de los pilares de la POO que permite definir nuevas clases a partir de otras preexistentes. La Herencia.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Paso de parámetros Diseño de programas iterativos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 7 Versión.
Transcripción de la presentación:

Definición de Clases y Variables de referencia.

¿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.

¿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

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.

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.

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.

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.

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

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];

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.

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.

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

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.

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

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();

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();

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.

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.

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.

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

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];

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;

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

Acceso a los datos

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.

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.

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

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.

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

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.

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.

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.

Modificadores de acceso

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.

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.

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

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.

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

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.

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)

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

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