LA PALABRA CLAVE THIS EN JAVA. CONTENIDO NULL POR DEFECTO DE UN OBJETO. SOBRECARGA DE NOMBRES. EJEMPLOS (CU00654B)

Documentos relacionados
CÓMO CREAR CONSTRUCTORES E INICIALIZAR OBJETOS EN JAVA. EJERCICIO EJEMPLO RESUELTO. (CU00639B)

QUÉ ES UNA CLASE JAVA? ATRIBUTOS (PROPIEDADES O CAMPOS), CONSTRUCTOR Y MÉTODOS. (CU00623B)

CLASES QUE UTILIZAN OBJETOS. RELACIÓN DE USO ENTRE CLASES JAVA. CONCEPTO DE DIAGRAMA DE CLASES. (CU00641B)

CONCEPTO Y DEFINICIÓN DE CLASE EN JAVA. OBJETOS DEL MUNDO REAL Y ABSTRACTOS. EJEMPLOS. EJERCICIO (CU00644B)

IMPORTAR Y USAR CLASES DEL API DE JAVA. EJEMPLO CLASE MATH Y MÉTODO POW. CONSTRUCTORES PRIVADOS. (CU00647B)

ASIGNACIÓN DE IGUALDAD EN JAVA. REFERENCIAS A OBJETOS. DIFERENCIA ENTRE IGUALDAD E IDENTIDAD. (CU00663B)

Clases y Objetos en C++

Programación Tema 4: Métodos. Programación DIT-UPM

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A)

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

class identificador{ //Bloque de propiedades (datos miembro, atributos, propiedades) //Bloque de métodos (comportamientos) }

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

12. Tipos de atributos

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

Programación Orientada a Objetos en C++

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

Examen Teórico Convocatoria de Junio de 2012

EL MÉTODO EQUALS EN JAVA. DIFERENCIA ENTRE IGUALDAD E IDENTIDAD. COMPARAR OBJETOS. EJEMPLOS. (CU00662B)

Programación Orientada a Objetos. Resumen de Temas Unidad 3: Constructores y destructores

int[] nombrearray1; int nombrearray2[];

Examen escrito de Programación 1

Clases en Java. Declaración de clases en Java 02/09/16. Ing. Roberto Martínez Román - public class Alumno { private int matricula;

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFAZ CLONEABLE DE JAVA. MÉTODO CLONE() PARA CLONAR OBJETOS. (CU00912C)

INTERFACE ITERATOR DEL API JAVA. MÉTODO REMOVE PARA BORRAR OBJETOS EN COLECCIONES. EJERCICIOS Y EJEMPLO RESUELTO. (CU00919C)

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Tema: Clases y Objetos en C#. Parte II.

TIPOS DE DATOS (VARIABLES) EN JAVA. TIPOS PRIMITIVOS (INT, BOOLEAN, ETC.) Y OBJETO (STRING, ARRAY, ETC.) (CU00621B)

Unidad Didáctica 5: Introducción a la Programación Orientada a Objetos

CONSTRUCTORES JAVASCRIPT. CREAR OBJETOS VACÍOS. AÑADIR PROPIEDADES Y MÉTODOS. OBJETOS ÚNICOS O SINGLETON. EJEMPLOS (CU01145E)

Grado en Ingeniería Informática. Estructura de Datos y Algoritmos, Grupo 84M, 2014/ de Marzo de

REPASO ARRAYS O ARREGLOS UNIDIMENSIONALES EN JAVA. EJEMPLOS DE CÓDIGO. (CU00903C)

FACULTAD DE ECONOMIA Y ADMINISTRACION DEPARTAMENTO DE CIENCIAS DE LA COMPUTACION CÁTEDRA PROGRAMACION GENERAL. Trabajo Práctico Nº 4

PRÁCTICA No 4 POO Encapsulación. El alumno conocerá los principios de la encapsulación, y el uso de constructores para la inicialización de datos

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

o Una clase en Java se compone de: o A los anteriores se les conoce también como miembros de la clase.

Unidad Nº V Listas Enlazadas

EJEMPLO DE CÓDIGO JAVA BÁSICO. CREAR CLASES CON CAMPOS, CONSTRUCTOR Y MÉTODOS. LA PALABRA CLAVE THIS (CU00652B)

Para crear un arreglo de cualquier tipo de elementos la sintaxis es:

CONCEPTO DE INTERFACE Y HERENCIA MÚLTIPLE EN JAVA. IMPLEMENTS. EJEMPLOS Y DIAGRAMAS DE CLASES. (CU00696B)

Clases en Java. Declaración

Principios de Computadoras II

Tema 2: Clases y Objetos en Java. Programación Orientada a Objetos Curso 2010/2011

En Java, un arreglo es un grupo de variables (llamados elementos o componentes) que contienen valores, todos del mismo tipo.

Los tipos de datos primitivos

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

NETBEANS JAVA PROGRAMACIÓN ORIENTADA A OBJETOS

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

EJEMPLO EJERCICIO RESUELTO CON POLIMORFISMO, SOBREESCRITURA DE MÉTODOS Y HERENCIA JAVA. CÓDIGO (CU00691B)

Los Constructores(1)

FUNCIONES JAVASCRIPT. CONCEPTO. PARÁMETROS O ARGUMENTOS Y TIPOS. PASO POR VALOR. RETURN. EJEMPLOS. (CU01122E)

Java Constructores por defecto. Java Constructores this() y super()

Estructura de datos y Programación

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Taller #1 (versión del 18 de septiembre de 2009) Programación básica y aproximación al paradigma orientado a objetos

Java para programadores

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

ALGORITMICA Y PROGRAMACION POR OBJETOS I

4/14/2010. Objetivos. Que es JAVA. JAVA como plataforma. Reglas Sintácticas y de Codificación Básicas de JAVA

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Entiendo los métodos de Java equals y hashcode

TEMA 3:Programación con Clases y Objetos.

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Unidad Didáctica 1. Introducción a la Programación Orientada a Objetos (POO) Conceptos de clase, objeto e interfaz. Atributos y métodos

LA CLASE VECTOR DEL API JAVA. MÉTODOS TRIMTOSIZE Y ENSURECAPACITY EJEMPLO Y EJERCICIOS RESUELTOS. (CU00922C)

INTERACCION ENTRE OBJETOS

DOCUMENTAR PROYECTOS JAVA CON JAVADOC. COMENTARIOS, SÍMBOLOS, TAGS (DEPRECATED, PARAM, RETURN, ETC.) (CU00680B)

Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso.

IF ELSE, IF ELSE IF JAVASCRIPT. CONDICIONALES DEL FLUJO O ESTRUCTURAS DE DECISIÓN. EJEMPLOS. EJERCICIOS. (CU01119E)

FUNDAMENTOS DE INFORMÁTICA

Arreglos. H. Tejeda. Marzo Declaración de arreglos Inicialización de arreglos Uso de subíndices variables en un arreglo 5

Programación Orientada a Objetos (POO)

Curso de Java Introducción a la Programación II

Programación. Arrays. Dr. (c) Noé Alejandro Castro Sánchez

Informática Lección 5. Arreglos (vectores) Curso Pedro Álvarez y José Ángel Bañares 2/11/2010. Dpto. Informática e Ingeniería de Sistemas.

Programación Orientada a Objetos. Orientación a Objetos en Java

CAPÍTULO V - PRUEBAS Y RESULTADOS

Introducción a Java. Introducción a Java. Programación I

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:

CAPITULO 2. COMPRENDER LAS DEFINICIONES DE CLASE

Programación orientada a objetos. Capítulo 8 Mejora de las estructuras mediante herencia

5. Sentencias selectivas o condicionales

INTERFACE LIST DEL API JAVA. CLASES ARRAYLIST, LINKEDLIST, STACK, VECTOR. EJEMPLO CON ARRAYLIST. (CU00920C)

CLAVE EXAMEN: a cd. c u r s o r = c u r s o r. g e t S i g u i e n t e ( ) ; p o s i c i o n ++;

PARA QUÉ SIRVEN LAS INTERFACES JAVA. IMPLEMENTAR UNA INTERFAZ DEL API. VENTAJAS. EJEMPLOS BÁSICOS. (CU00697B)

FUNCIONES EN C QUÉ SIGNIFICA VOID? QUÉ ES EL TIPO DE RETORNO? PARA QUÉ SIRVE RETURN? MÓDULOS (CU00547F)

FACULTAD DE INGENIERÍA

BUCLES EN LENGUAJE C (ESTRUCTURA DE REPETICIÓN) CONDICIÓN, CONTADOR. EJEMPLOS. (CU00533F)

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

XMLHTTPREQUEST AJAX: PROPIEDADES STATUS, ONREADYSTATECHANGE, READYSTATE, RESPONSETEXT O XML (CU01207F)

PNFSI. Asignatura: Desarrollo de Software. Tema 1: Programación Orientada a Objetos

Java para no Programadores

Temas. Taller III 2007 Gentile,Vazquez

Programación de sistemas Listas enlazadas

! Fundamentos de la POO. ! Comportamiento y estado. ! Clases y objetos en Java

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

1. (1 punto) Dado el siguiente fragmento en Java:

Universidad Autónoma del Estado de Hidalgo Instituto de Ciencias Básicas e Ingeniería Área Académica de Computación y Electrónica

Transcripción:

APRENDERAPROGRAMAR.COM LA PALABRA CLAVE THIS EN JAVA. CONTENIDO NULL POR DEFECTO DE UN OBJETO. SOBRECARGA DE NOMBRES. EJEMPLOS (CU00654B) Sección: Cursos Categoría: Curso Aprender programación Java desde cero Fecha revisión: 2029 Resumen: Entrega nº54 curso Aprender programación Java desde cero. Autor: Alex Rodríguez

PALABRA CLAVE THIS EN JAVA. CONTENIDO NULL POR DEFECTO DE UN OBJETO. Ya hemos visto en el epígrafe anterior que la palabra clave this puede ser usada para invocar a un constructor. Sin embargo, su uso quizás más frecuente en Java tiene lugar en otro contexto: cuando existe sobrecarga de nombres. La sobrecarga de nombres se da cuando tenemos una variable local de un método o constructor, o un parámetro formal de un método o constructor, con un nombre idéntico al de un campo de la clase. Este sería un mal ejemplo de sobrecarga de nombres, tanto con parámetros como con variables locales: public class Mensaje { //Campos private String remitente; private String para; private String texto; //Constructor con sobrecarga de nombres al coincidir nombres de parámetros con los de campos public Mensaje (String remitente, String para, String texto) { remitente = remitente; // Cómo va a saber Java cuál es el parámetro y cuál el campo? para = para; // Cómo va a saber Java cuál es el parámetro y cuál el campo? texto = texto; // Cómo va a saber Java cuál es el parámetro y cuál el campo? } //Cierre del constructor //Método con sobrecarga de nombres al coincidir un parámetro con un campo public void setremitente (String remitente) { remitente = remitente; // Cómo va a saber Java cuál es el parámetro y cuál el campo? } //Cierre del método //Método con sobrecarga de nombres al coincidir una variable local con un campo public void extraerfracciontexto () { String texto = ""; //Esto supone declarar una variable local que tapa al campo texto = texto.substring (0, 5); // Cómo va a saber Java si nos referimos al campo? } //Cierre del método } // Cierre de la clase Escribe y compila el código anterior. El código, efectivamente compila. Por qué? Porque Java tiene previstos mecanismos para resolver conflictos de nombres y aplica una reglas. En concreto, la regla de que un nombre hace referencia a la variable más local de entre las disponibles. Y el carácter de local se interpreta de la siguiente manera:

Variable local > Parámetro formal > Campo de clase Crea ahora un objeto de tipo Mensaje e introduce un texto como remitente, por ejemplo Juan, otro como para, por ejemplo Pedro y otro como texto, por ejemplo Saludos desde Buenos Aires. A continuación, inspecciona el estado del objeto. El resultado será algo así: Interpretemos ahora por qué nos aparece null como contenido de los atributos del objeto. En el constructor hemos definido tres parámetros: remitente, para y texto. Luego hemos indicado que remitente = remitente;. Qué variable usa Java? Tiene que elegir entre usar el campo o usar el parámetro del método. No puede usar ambos porque no podría saber cuándo usar uno y cuándo usar otro. El conflicto lo resuelve utilizando el parámetro del método, es decir, interpretando que el parámetro es igual al parámetro. Esto no tiene ningún efecto, lo que significa que el atributo remitente se queda sin inicializar. Lo hemos declarado, pero no lo hemos inicializado. En nuestra clase tenemos tres campos o variables de instancia cuyo ámbito es toda la clase. El ámbito de los parámetros o variables locales es exclusivamente el constructor o método al cual se aplican. Recordemos que un String es un objeto en Java. Un objeto no inicializado carece de contenido y esto nos lo informa Java indicándonos un contenido aparente null. La palabra clave null indica que un objeto se encuentra vacío, carente de contenido. La palabra clave null indica que un objeto se encuentra vacío, carente de contenido. Esto puede deberse a que no se ha inicializado, a que su contenido ha sido eliminado usando una instrucción del tipo nombredelobjeto = null;, o a otros motivos. En el caso de un String, hay que diferenciar entre que el objeto tenga como contenido una cadena vacía, que al fin y al cabo es un contenido, o que carezca de contenido. La palabra clave null no es aplicable a los tipos primitivos, que no admiten una asignación del tipo nombrevariable = null. Un tipo primitivo no inicializado tendrá como contenido un valor en el rango de valores admisibles para el tipo como 0 para int o false para boolean. Recordar que por norma inicializaremos siempre cualquier objeto o variable de forma explícita. Una instrucción del tipo if (remitente == null) { } nos puede servir para detectar si un objeto ha sido inicializado adecuadamente.

Volvamos ahora al código de nuestra clase Mensaje. El conflicto de nombres vamos a solventarlo haciendo uso de la palabra clave this. Escribiendo this.nombredelcampo le indicaremos a Java que nos referimos al atributo de la clase en vez de a una variable local o parámetro. Veámoslo aplicado en el código: public class Mensaje { private String remitente; private String para; private String texto; //Constructor con sobrecarga de nombres al coincidir nombres de parámetros con los de campos public Mensaje (String remitente, String para, String texto) { this.remitente = remitente; //this.remitente es el campo y remitente el parámetro this.para = para; //this.para es el campo y para el parámetro this.texto = texto; //this.texto es el campo y texto el parámetro } //Método con sobrecarga de nombres al coincidir un parámetro con un campo public void setremitente (String remitente) { this.remitente = remitente; //this.remitente es el campo y remitente el parámetro } //Método con sobrecarga de nombres al coincidir una variable local con un campo public String extraerfracciontexto () { String texto = ""; //texto es una variable local texto = this.texto.substring (0, 5); //this.texto es el campo de los objetos de la clase return texto; } } Crea ahora un objeto de tipo Mensaje e inicialízalo introduciendo valores para los parámetros requeridos por el constructor. El resultado es que ahora sí se produce una inicialización correcta porque hemos definido adecuadamente cómo han de gestionarse los nombres de variables. En resumen, usando la palabra clave this podemos evitar que los parámetros o variables locales tapen a las variables globales. Para interpretar el significado de this, podemos pensar que hace referencia al objeto actual en un momento dado. Repetir los nombres de campos como parámetros y como variables locales queda a elección de cada programador. En sí misma, esta práctica no puede considerarse ni buena ni mala siempre que se mantenga una coherencia y lógica global de nombres. La

realidad es que la repetición de nombres es muy frecuente en la práctica de la programación porque a la hora de desarrollar programas largos intervienen muchas variables y la búsqueda de nombres distintos puede hacer perder tiempo al programador y hacer más difícil de seguir el código. EJERCICIO Define una clase Profesor considerando los siguientes atributos de clase: nombre (String), apellidos (String), edad (int), casado (boolean), especialista (boolean). Define un constructor que reciba los parámetros necesarios para la inicialización y otro constructor que no reciba parámetros. El nombre de los parámetros debe ser el mismo que el de los atributos y usar this para asignar los parámetros recibidos a los campos del objeto. Crea los métodos para poder establecer y obtener los valores de los atributos, con sobrecarga de nombres y uso de this en los métodos setters (los que sirven para establecer el valor de los atributos). Compila el código para comprobar que no presenta errores, crea un objeto usando el constructor con sobrecarga. Comprueba que se inicializa correctamente consultando el valor de sus atributos después de haber creado el objeto. Usa los métodos setters y comprueba que funcionen correctamente. Para comprobar si es correcta tu solución puedes consultar en los foros aprenderaprogramar.com. Próxima entrega: CU00655B Acceso al curso completo en aprenderaprogramar.com -- > Cursos, o en la dirección siguiente: http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&itemid=188