Modificadores de Metodos en Typescript (Restringiendo el acceso a los métodos) - El Mundo de Angular

Modificadores de Metodos en Typescript (Restringiendo el acceso a los métodos)

Ya lo dicen en todos lados, una cosa es lo que pasa puertas adentro, y otra puertas afuera de tu casa. Lo mismo pasa con las clases en la programación orientada a objetos ya que, una cosa es lo que pasa dentro de la clase, y otra lo que «ven los de afuera». Nosotros podemos elegir qué métodos pueden ver los de afuera y cuáles no.  Si querés saber cómo hacer para que tus clases compartan sólo una parte de lo que hacen ¡seguí leyendo y entérate!

Como pasa con los atributos, los métodos también tienen modificadores de acceso a sus métodos. Estos modificadores son public, private y protected.

Modificadores:  mecanismo por el cual se permite hacer visibles o no, atributos y métodos de una clase.

 

Lo que comparten las clases con todos

Cuando a un método no le agregás el modificador, o el modificador es public, entonces todo el mundo tiene acceso a esos métodos.

Si tenemos el siguiente código:


class TodosSabenMisSecretos {
    metodo1() {
       console.log('metodo publico a todo el mundo');
    }
    public metodo2() {
       console.log('metodo tambien publico a todo el mundo')
    }
}

/* el mundo exterior */
let objetoConMetodosPublicos = new TodosSabenMisSecretos();
objetoConMetodosPublicos.metodo1();
objetoConMetodosPublicos.metodo2();

Como podes ver cualquiera puede llamar tanto a “metodo1” como a “metodo2”

 

 

Los comportamientos que no comparten las clases (modificador private)

 

El modificador private, tal como pasaba con los atributos, es lo opuesto al modificador public. Si un método fuera de la clase quiere acceder a un método private, no podrá hacerlo.


class NadieSabenMisSecretos {
    privatemetodo1() {
       console.log('metodo privado a todo el mundo');
    }
}

/* el mundo exterior */
let objetoConMetodosPrivados = new NadieSabenMisSecretos();
objetoConMetodosPrivados.metodo1(); // ERROR

 

¿Y para qué me sirve un método al que sólo la clase tiene acceso?

Generalmente, se usa para ocultar información al mundo exterior. Por ejemplo, si tenés un método public, y éste método tiene varios métodos dentro, sólo se “muestra” al mundo exterior el método público, y se ocultan los métodos internos de la clase. Recordemos que una de las características de la programación orientada a objetos son las clases, y éstas sólo muestran lo justo y necesario.


class ClaseConMetodoPublicoYPrivado {
    publicmetodoPublico() {
       this.metodoPrivado1();
        this.metodoPrivado2()
    }
    privatemetodoPrivado1() {
       /* CODIGO */
    }
    privatemetodoPrivado2() {
       /* CODIGO */
    }
}

/* el mundo exterior */
let objeto = new ClaseConMetodoPublicoYPrivado();
objeto.metodoPublico();

Nota: fijáte que para acceder a los métodos privados dentro de la clase, se usa el operador “this” que es la palabra reservada que hace referencia a un objeto que se quiere apuntar a sí mismo.

 

THIS: “this” es la palabra reservada que hace referencia a un objeto que se quiere apuntar a sí mismo.

Los métodos que se comparten entre clases (modificador protected)

Por último, tenemos el modificador protected que, al igual que en los atributos, sirve para compartir la visibilidad entre clases padres a hijas, pero sin que esta visibilidad llegue a todo el mundo.


class ClasePadreConMetodosProtected {
    protectedmetodo1() {
       /* codigo */
    }
}
class ClassHijaUsaMetodosProtected extends ClasePadreConMetodosProtected {
    publicmetodo2() {
       super.metodo1();
    }
}

/* Mundo exterior */
let obj = new ClassHijaUsaMetodosProtected();
obj.metodo1(); // ERROR
obj.metodo2();

¿Ves algo nuevo? ¡correcto! la palabra “super” que hace referencia a la clase padre.

super es la palabra reservada que hace referencia a la clase “padre”

 

Así como está this que se usa para que un objeto haga referencia a sí mismo, existe la palabra super que se usa para que un objeto hijo, haga referencia a su padre.

 

Conclusión

Los modificadores permiten aislar tu clase del mundo exterior, al restringir el acceso sólo a lo justo y necesario que se necesita saber de una clase, y nada más. Esto tiene ventajas, como ser, simplificar el acceso a la clase (menos métodos expuestos al mundo exterior) y evitar que una clase externa llame a métodos que pueden alterar el estado de la clase (o sea, sus atributos), por consiguiente, el comportamiento deseado. ¡Mucho ojo a quién le das acceso a tus métodos!

About the Author

Mi nombre es Gustavo Hernán Dohara, soy Ingeniero en Sistemas y, sobre todas las cosas, soy un apasionado por la tecnología; tengo más de 10 años de experiencia en diferentes tecnologías y he decidido compartir mis conocimientos y experiencias con cualquiera que desee aprender: alumnos, empleados, freelancers y vos. Al ritmo que cada uno pueda, en el horario en que cada uno pueda y en el lugar que cada uno elija.