2.- PROGRAMACIÓN ORIENTADA A OBJETOS



Documentos relacionados
HERENCIA. Problema: Reparar el el coche. Jesús (Valencia) Luis, Mecánico (Valencia) Antonio, Servicio Técnico Ferrari (Madrid)

PROGRAMACIÓN GENÉRICA

CLASE 10 - ESTRUCTURAS DE DATOS DINÁMICAS

Soluciones Ejercicios Tema 7. Cambio de Signo Pila (3/3) if (!p.esvacia()) { d i l cambiasignopila(p); this.apilar(new Integer(-dato));

RELACIÒN ENTRE LA PROGRAMACIÒN ORIENTADA A OBJETOS Y LA ESTRUCTURADA

Tema 1 Introducción al paradigma de programación orientado a objetos

Introducción a Java. Dr. (c) Noé Alejandro Castro Sánchez

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

Introducción y conceptos de POO

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

Tema 7- Modelo y Aplicación de Pila, Cola y. Tema 7- Modelo y Aplicación de. Lista Con Punto de Interés

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

Estructura de Datos Unidad 1: Repaso del Lenguaje Java

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

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

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

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

18. Interfaces Declaración de una interfaz

Conceptos de Programación Orientada a Objetos

Programación C++(3 Parte) Dr. Oldemar Rodríguez Rojas Maestría en Computación Universidad de Costa Rica

Java. Introducción a la Programación Orientada a Objetos

Introducción. Introducción y conceptos de POO. En qué consiste la POO? Vocabulario. Definiciones

5. Sentencias selectivas o condicionales

Tema 4- Representación Enlazada

Prueba N o 1. Programación II

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

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

Programación Orientada o Objetos

Estructura de datos y Programación

Programación Orientada a Objetos con Java

Estructuras de Datos Dinámicas: Tipo de Dato Abstracto parte I. Programación I Departamento de Informática Universidad Nacional de San Luis Argentina

Tema 1. Introducción a la Programación Orientada a Objetos

Programación orientada a objetos (I)

Introducción a OOP. Programación Orientada a Objeto

Estructuras de Datos Clase 4 Pilas y colas

o Una clase es un tipo al cual pertenecen objetos o instancias de la clase.

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

HERENCIA (2ª parte) En Java todas las clases derivan de otra, aunque no se diga explícitamente.

Programación orientada a objetos I

Tema 2: Programación basada en Objetos

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Concurso: Cuánto sabes de JAVA?

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

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

Tema 1. Herencia y Polimorfismo

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

Estructuras de control selectivas

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

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

Bloque II. Elementos del lenguaje de programación Java

INTRODUCCIÓN AL PARADIGMA DE LA PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA

Introducción al lenguaje C

ING1310 Introducción a la Computación. Python. Conceptos Básicos. Carlos Reveco

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

FACULTAD DE INGENIERÍA

ESTRUCTURAS DINÁMICAS DE DATOS (PILAS)

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

obtenidos a partir de los objetos que manipula. un nuevo paradigma de programación, La POO es Clases su forma de módulo.

Práctica 2. Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones

Examen Teórico Convocatoria de Junio de 2012

Bloque II. Elementos del lenguaje de programación Java

PROGRAMACIÓN ORIENTADA A OBJETOS. Java se parece mucho a C pero sin todo lo que nos traía problemas.

Patrones de Diseño. Ing. Miguel Angel Cedeño Garcidueñas

Tema 2 Tipos abstractos de datos. 2.2 Pila de números enteros

Paradigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa

CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE

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

PARTE TEÓRICA - TEST [2,5 PUNTOS]:

INTERACCION ENTRE OBJETOS

TIPO Y MÉTODO ITERATOR. ERROR JAVA.UTIL.CONCURRENT MODIFICATIONEXCEPTION. RESUMEN DE TIPOS DE BUCLES EN JAVA. (CU00667B)

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

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++

Examen Teórico. Convocatoria de Julio de 2015

Tema 3. Estructuras de control

PROGRAMACIÓN ORIETADA A OBJETOS

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Transcripción:

2.- PROGRAMACIÓN ORIENTADA A OBJETOS Lenguajes de Programación - Orientación a Objetos 1 El éxito de la Progr. Orientada a Objetos Permite una mejor organización del software: Es más fácil (??) desarrollar aplicaciones (muy) complejas. Especialmente adecuada para determinadas aplicaciones La POO soporta un alto grado de reutilización de código: Se abarata el proceso de desarrollo Lenguajes de Programación - Orientación a Objetos 2

Seamos Realistas Utilizar un lenguaje Orientado a Objetos NO asegura el éxito. La POO permite hacer las cosas de otra manera, pero lo mismo se puede hacer con lenguajes no-orientados a Objetos: Todo programa se traduce a código máquina, luego cualquier concepto de programación se puede traducir a Ensamblador Lo importante es utilizar con buen criterio las herramientas que proporciona el lenguaje (cualquiera). Lenguajes de Programación - Orientación a Objetos 3 Abstracción y Programación Todos los paradigmas de programación se basan en mecanismos de abstracción. Programación Orientada a Objetos Mecanismo básico de abstracción Objeto. La única forma de manejar la complejidad de los problemas al resolverlos (programar) es emplear la abstracción: Centrarse en los detalles importantes Menos información Ocultar (eliminar) los detalles irrelevantes Lenguajes de Programación - Orientación a Objetos 4

La Abstracción es un proceso natural Los humanos hemos desarrollado una técnica excepcionalmente potente para tratar la complejidad: abstraernos de ella. Incapaces de dominar en su totalidad los objetos complejos, se ignora los detalles no esenciales, tratando en su lugar con el modelo ideal de objeto y centrándonos en los aspectos esenciales (Wulft). Las personas construimos modelos (abstracciones) mentales para comprender el mundo y nos servimos de ellos para resolver los problemas. Ejemplo: Un mapa es un modelo del territorio que representa, NO es el territorio, es una abstracción que lo simplifica y lo hace manejable. El mapa nos permite: localizar lugares, orientarnos en los desplazamientos, etc.. Lenguajes de Programación - Orientación a Objetos 5 Mecanismos de abstracción en Programación Procedimiento: Permite ocultar algoritmos en su interior, también datos útiles, exclusivamente, para estos algoritmos (variables locales). Una vez construido nos olvidamos de su contenido (está oculto), sólo nos interesa cómo se puede usa: nombre_procedimiento (argumentos) Programación procedimental: Descomponer el problema en procedimientos. Diseño conducido por el procesamiento. Lenguajes de Programación - Orientación a Objetos 6

Ejemplo Procedimientos #include <stdio.h> typedef int pila[100]; Procedimientos int pop (pila p) { /* algoritmo */ void push (pila p, int x) { /* algoritmo */ int main() { pila mis_datos; int i; Programa: Usa la definición de procedimientos, es independiente del algoritmo que contienen for (i=0; i<100; i++) push(mis_datos, i); for (i=0; i<100; i++) printf ("%d", pop(mis_datos)); return 0; Lenguajes de Programación - Orientación a Objetos 7 Problemas Relación débil entre procedimientos y datos: Cómo restringir qué el tipo pila se use sólo asociado a las operaciones push y pop? mis_datos[3] = 67; /* Es válido! */ Lenguajes de Programación - Orientación a Objetos 8

Mecanismos de abstracción en Programación Módulos: Archivos que contienen colecciones de procedimientos y datos. Permite ocultar algoritmos y datos en su interior. Mecanismos de visibilidad dentro y fuera del módulo: Elementos públicos: son accesibles desde archivos externos al módulo. Elementos privados: sólo son accesibles desde el interior del módulo. Programación modular: Descomponer el problema en módulos (compilación separada). Diseño conducido por la organización de los datos. Lenguajes de Programación - Orientación a Objetos 9 Ejemplo Módulo /* PILA.H */ /* Sólo declaraciones de */ /* elementos públicos */ #define max 100 int pop (); void push (int x); Módulo PILA Módulo: Oculta mis_datos /* PILA.C */ /* Implementación del módulo */ /* Contiene elementos privados * / #include pila.h static int mis_datos[max]; int pop () { /* algoritmo que usa mis_datos */ void push (int x) { /* algoritmo que usa mis_datos */ /* Programa que usa la PILA */ #include <stdio.h> #include pila.h int main() { int i; Programa: No hay referencias a mis_datos, por lo tanto, no se puede usar incorrectamente for (i=0; i<100; i++) push(i); for (i=0; i<100; i++) printf ("%d", pop()); return 0; Lenguajes de Programación - Orientación a Objetos 10

Problemas No es posible instanciar nuevos datos: Qué ocurre si necesito más de 1 pila? Solución: si un módulo intenta representar un T.A.D. que el lenguaje permita definir tipos de datos con esa estructura: Objetos = Datos + Operaciones Lenguajes de Programación - Orientación a Objetos 11 TIPO pila ELEMENTOS PÚBLICOS: int pop () { /* algoritmo que usa mis_datos */ void push (int x) { /* algoritmo que usa mis_datos */ ELEMENTOS PRIVADOS: int mis_datos[100]; /* Programa que usa PILAS */ int main() { int i; pila p, q; for (i=0; i<100; i++) p.push(i); for (i=100; i>0; i--) q.push(i); for (i=0; i<100; i++) printf ("%d %d", p.pop(), q.pop()); return 0; Lenguajes de Programación - Orientación a Objetos 12

Procedural vs. Orientación a Objetos Programación procedural: Interés en la descomposición en subrutinas (funcionalidad). Más inestable Depende de los cambios en los requisitos funcionales. Programación Orientada a Objetos: Interés en la organización basada en los datos. Más estable y robusta frente a cambios en los requisitos funcionales. Lenguajes de Programación - Orientación a Objetos 13 Problema: Reparar el el coche Jesús (Valencia) Reparar vehículo. Problema: no arranca Luis, Mecánico (Valencia) Lenguajes de Programación - Orientación a Objetos 14

Problema: Reparar el el coche Jesús (Valencia) Reparar vehículo. Problema: no arranca Luis, Mecánico (Valencia) Método empleado Pedir pieza: motor de arranque Antonio, Servicio Técnico Ferrari (Madrid) Lenguajes de Programación - Orientación a Objetos 15 Problema: Reparar el el coche Jesús (Valencia) Reparar vehículo. Problema: no arranca Luis, Mecánico (Valencia) Método empleado Pedir pieza: motor de arranque Antonio, Servicio Técnico Ferrari (Madrid) Pedir pieza: motor de arranque Marco, Responsable Mantenimiento Ferrari (Milán) Lenguajes de Programación - Orientación a Objetos 16

Problema: Reparar el el coche Jesús (Valencia) Reparar vehículo. Problema: no arranca Luis, Mecánico (Valencia) Método empleado Pedir pieza: motor de arranque Gianni, Jefe de Almacén Ferrari (Milán) Antonio, Servicio Técnico Ferrari (Madrid) Pedir pieza: motor de arranque Pedir pieza: motor de arranque Marco, Responsable Mantenimiento Ferrari (Milán) Lenguajes de Programación - Orientación a Objetos 17 Mensajes y Métodos En POO, la acción se inicia mediante la transmisión de un mensaje a un agente (objeto) responsable de la acción. El mensaje tiene codificada la petición de una acción y puede contener información adicional (argumentos) para realizarla. El receptor es el agente al cual se envía el mensaje. Si el receptor acepta el mensaje, está aceptando la responsabilidad de llevar a cabo la acción indicada. En respuesta al mensaje, el receptor ejecutará algún método para satisfacer la petición. Lenguajes de Programación - Orientación a Objetos 18

Clases y Objetos Todos los objetos son ejemplares de una clase. El método aplicado por un objeto en respuesta a un mensaje queda determinado por la clase del receptor. Todos los objetos de una clase usan el mismo método en respuesta a mensajes similares. Objetos de distinta clase pueden responder al mismo mensaje, aunque aplicando distintos métodos (polimorfismo). Lenguajes de Programación - Orientación a Objetos 19 Clases y Objetos (2) Clase Persona Clase = Concepto Juan María Ana José Objetos = Ejemplos concretos de la clase que responden al concepto. Lenguajes de Programación - Orientación a Objetos 20

Ejemplo: Concepto de Silla SILLA Métodos (Acciones, Operaciones): Cómo se puede usar una Silla Entrada sentar nuevo_peso //"sienta" nuevo_peso en la silla levantar viejo_peso //"levanta" viejo_peso de la silla dibujar (nada) // dibuja la silla en pantalla Información (Atributos):? color //color de la silla estilo //tipo de la silla carga_máxima //carga máxima que puede soportar la silla está_rota //indica si la está rota o no Cómo se ha fabricado la silla: carga_actual //carga que está soportando la silla Depende del fabricante El usuario no puede cambiar estas características Lenguajes de Programación - Orientación a Objetos 21 Ejemplo: Concepto de Silla SILLA Métodos (Acciones, Operaciones): Cómo se puede usar una Silla Entrada sentar nuevo_peso //"sienta" nuevo_peso en la silla levantar viejo_peso //"levanta" viejo_peso de la silla dibujar (nada) // dibuja la silla en pantalla Información (Atributos): color //color de la silla estilo //tipo de la silla carga_máxima //carga máxima que puede soportar la silla está_rota //indica si la silla está rota o no carga_actual //carga que está soportando la silla Lenguajes de Programación - Orientación a Objetos 22

Ejemplo Java: Clase Silla class Silla { public void sentar ( int nuevo_peso ) { /*... */ public void levantar ( int viejo_peso ) { /*... */ public void dibujar ( ) { /*... */ private String color; private String estilo; private int carga_maxima; private boolean esta_rota; private int carga_actual; Lenguajes de Programación - Orientación a Objetos 23 Java: Crear Objetos Los objetos se declaran en Java con la misma sintaxis que las variables en C/C++: C/C++: <tipo> <id. variable> int x; Java: <clase> <id. objeto> Silla x; Lenguajes de Programación - Orientación a Objetos 24

Java: Crear Objetos Los objetos se declaran en Java con la misma sintaxis que las variables en C: C/C++: <tipo> <id. variable> int x; Java: <clase> <id. objeto> Silla x; Atención: x es sólo un identificador que puede referenciar a un objeto de la clase Silla pero la declaración anterior no le asocia ningún objeto: La declaración de x NO crea ninguna silla. x.sentar(56); //NO es posible, no existe ninguna silla. Lenguajes de Programación - Orientación a Objetos 25 Java: Crear Objetos (2) Java maneja referencias a objetos. La declaración Silla x; está indicando que x es una referencia que en algún momento, no ahora, permitirá trabajar con un objeto de la clase Silla. El objeto debe crearse explícitamente cuando sea necesario mediante la sentencia new: x = new Silla(); //Ahora SÍ que hay una Silla x.sentar(56); //SÍ es posible. Lenguajes de Programación - Orientación a Objetos 26

Java: Manejo de Objetos Silla mi_silla, otra_silla; //declaración mi_silla = new Silla(); //creación objeto mi_silla.sentar(80); mi_silla.dibujar(); otra_silla = new Silla(); //creación objeto otra_silla.sentar(90); otra_silla.dibujar(); Lenguajes de Programación - Orientación a Objetos 27 Constructores de Objetos Constructor class Silla { public Silla ( ) { /*... */ public void sentar ( int nuevo_peso ) { /*... */ public void levantar ( int viejo_peso ) { /*... */ public void dibujar ( ) { /*... */ private String color; private String estilo; private int carga_maxima; private boolean esta_rota; private int carga_actual; Lenguajes de Programación - Orientación a Objetos 28

Constructores de Objetos (2) class Silla { public Silla ( ) { color = new String ( negro ); estilo = new String ( despacho ); carga_maxima = 100; esta_rota = false; carga_actual = 0; /* El resto de los elementos de la clase */ Lenguajes de Programación - Orientación a Objetos 29 Constructores de Objetos (3) class Silla { public Silla (String c, String e, int cg) { color = c; estilo = e; carga_maxima = cg; esta_rota = false; carga_actual = 0; /* El resto de los elementos de la clase */ Utilización: Silla mi_silla; //declaración mi_silla = new Silla( blanco, cocina, 125); //creación objeto Lenguajes de Programación - Orientación a Objetos 30

Java Código fuente progr.java javac Byte Code progr.class java Código ejecutable Lenguajes de Programación - Orientación a Objetos 31 Ejemplo class Carta { private int numero; // 1..12 private char palo; // O, C, E, B public Carta ( char p, int n ) { palo = p; numero = n; public int obtenernumero ( ) { return ( numero ); public char obtenerpalo ( ) { return ( palo ); public void ponernumero ( int n ) { numero = n; public void ponerpalo ( char p ) { palo = p; Lenguajes de Programación - Orientación a Objetos 32

Ejemplo class Carta { public Carta ( char p, int n ) public int obtenernumero ( ) public char obtenerpalo ( ) public void ponernumero ( int n ) public void ponerpalo ( char p ) Lenguajes de Programación - Orientación a Objetos 33 Ejemplo class Carta { //Version 2 private int codigo; // 1..12 = oros, 13..24 = copas, etc public Carta ( char p, int n ) { if ( p == O ) codigo = n; else if ( p == C ) codigo = 12 + n; else if ( p == E ) codigo =24 + n; else codigo = 36 + n; public int obtenernumero ( ) { if ( p == O ) return ( n ); else if ( p == C ) return ( n - 12 ); else if ( p == E ) return ( n 24 ); else return ( n -36 ); public char obtenerpalo ( ) { // public void ponernumero ( int n ) { // public void ponerpalo ( char p ) { // Lenguajes de Programación - Orientación a Objetos 34

Ejemplo class Carta { public Carta ( char p, int n ) public int obtenernumero ( ) public char obtenerpalo ( ) public void ponernumero ( int n ) public void ponerpalo ( char p ) Lenguajes de Programación - Orientación a Objetos 35 Ejercicio Construir una clase Pila para representar el tipo de datos Pila, caracterizado por las operaciones: Apilar Desapilar Cima esvacia Para simplificar, consideremos que se almacenan datos enteros en la pila. Lenguajes de Programación - Orientación a Objetos 36

class Pila { public Pila () { max = 100; tope = -1; datos = new int [max]; public void Apilar (int x){ if ( tope < (max 1) ) { tope ++; datos [tope] = x; public void Desapilar () { if (! esvacia() ) tope --; public int Cima () { if (! esvacia() ) return (datos [tope]); public boolean esvacia ( ) { if ( tope < 0 ) return (true); else return(false); Ejercicio private int[] datos; //array para almacenar datos private final int max; //nº maximo de elementos private int tope; //hasta donde hay datos en el array Lenguajes de Programación - Orientación a Objetos 37 class miprograma { public static void main (String[] args) { Pila saco, monton; Ejercicio Programa principal saco = new Pila (); for (int i=0; i<25; i++) saco.apilar(i+10); monton = new Pila (); for (int i=25; i<100; i++) monton.apilar(i); System.out.println ( Contenido del saco: ); visualizar (saco); System.out.println ( Contenido del monton: ); visualizar (monton); private static void visualizar (Pila p) { while (! p.esvacia() ) { System.out.println ( p.cima() ); p.desapilar(); Lenguajes de Programación - Orientación a Objetos 38

class Pila { //Versión con 2 constructores public Pila () { max = 100; tope = -1; datos = new int [max]; public Pila (int tamano) { max = tamano; tope = -1; datos = new int [max]; Ejercicio public void Apilar (int x){... public void Desapilar () {... public int Cima () {... public boolean esvacia ( ) {... Lenguajes de Programación - Orientación a Objetos 39 Representación de objetos saco monton datos max tope Apilar() Desapilar() Cima() esvacia() datos max tope Apilar() Desapilar() Cima() esvacia() public int Cima () { if (! esvacia() ) return (datos [tope]); Lenguajes de Programación - Orientación a Objetos 40

Representación de objetos saco monton datos max tope Apilar() Desapilar() Cima() esvacia() datos max tope Apilar() Desapilar() Cima() esvacia() saco.cima() public int Cima () { if (! esvacia() ) return (datos [tope]); Lenguajes de Programación - Orientación a Objetos 41 Representación de objetos saco monton datos max tope Apilar() Desapilar() Cima() esvacia() datos max tope Apilar() Desapilar() Cima() esvacia() saco.cima() yo mis mi public int Cima () { mis datos if (! esvacia() ) return (datos [tope]); yo estoy Vacía mi tope Lenguajes de Programación - Orientación a Objetos 42

Representación de objetos saco monton datos max tope Apilar() Desapilar() Cima() esvacia() datos max tope Apilar() Desapilar() Cima() esvacia() mis datos public int Cima () { if (! esvacia() ) return (datos [tope]); monton.cima() yo estoy Vacía mi tope yo mis mi Lenguajes de Programación - Orientación a Objetos 43 this La referencia this (éste) permite nombrar al objeto que recibe el mensaje que se está realizando. this equivale al sujeto yo this es una referencia constante, no puede asignarse a otro objeto. yo soy yo, no puedo ser otro Lenguajes de Programación - Orientación a Objetos 44

this (Ejemplo) saco monton datos max tope Apilar() Desapilar() Cima() esvacia() datos max tope Apilar() Desapilar() Cima() esvacia() equivalentes public int Cima () { if (! esvacia() ) return (datos [tope]); public int Cima () { if (! this.esvacia() ) return (this.datos [this.tope]); Lenguajes de Programación - Orientación a Objetos 45 Ejercicio class Pila { //Versión con 2 constructores public Pila () { this (100); public Pila (int tamano) { max = tamano; tope = -1; datos = new int [max];... Lenguajes de Programación - Orientación a Objetos 46

class Pila { //Versión con 2 constructores public Pila () { this (100); public Pila (int tamano) { max = tamano; tope = -1; datos = new int [max];...? Ejercicio public Pila () { this = new Pila (100); Lenguajes de Programación - Orientación a Objetos 47 class Pila { //Versión con 2 constructores public Pila () { this (100); public Pila (int tamano) { max = tamano; tope = -1; datos = new int [max];... X Ejercicio public Pila () { this = new Pila (100); No se puede, this es una referencia constante. No puede asignarse. Lenguajes de Programación - Orientación a Objetos 48