stringtranslate.com

Modificadores de acceso

Los modificadores de acceso (o especificadores de acceso ) son palabras clave en lenguajes orientados a objetos que establecen la accesibilidad de clases , métodos y otros miembros. Los modificadores de acceso son una parte específica de la sintaxis del lenguaje de programación que se utiliza para facilitar la encapsulación de componentes. [1]

En C++ , solo hay tres modificadores de acceso. C# amplía el número de ellos a seis, [2] mientras que Java tiene cuatro modificadores de acceso, pero tres palabras clave para este propósito. En Java, si no hay ninguna palabra clave antes, se usa el modificador package-private de manera predeterminada.

Cuando la clase se declara como pública, es accesible para otras clases definidas en el mismo paquete, así como para aquellas definidas en otros paquetes. Este es el especificador más comúnmente utilizado para las clases. Sin embargo, una clase en sí no puede declararse como privada. Si no se indica ningún especificador de acceso, se aplicarán las restricciones de acceso predeterminadas. La clase será accesible para otras clases en el mismo paquete, pero será inaccesible para las clases fuera del paquete. Cuando decimos que una clase es inaccesible, simplemente significa que no podemos crear un objeto de esa clase ni declarar una variable de ese tipo de clase. El especificador de acceso protegido tampoco se puede aplicar a una clase.

Diagrama de clases UML con modificadores de acceso.svg

Nombres de palabras clave

C++ utiliza los tres modificadores llamados public, protected, y private. [3] C# tiene los modificadores public, protected , internal, private, protected internal, private protectedy file. [4] Java tiene public, package, protectedy private; packagees el valor predeterminado, se utiliza si no se especifica ninguna otra palabra clave modificadora de acceso. El significado de estos modificadores puede diferir de un lenguaje a otro. A continuación, se muestra una comparación de las palabras clave, ordenadas desde la más restrictiva a la más abierta, y su significado en estos tres lenguajes. Su visibilidad varía desde la misma clase hasta el paquete donde se define la clase y un permiso de acceso general. A continuación, se escribe el acceso máximo en la tabla.

En Swift, hay cinco niveles de acceso diferentes en relación con el archivo fuente en el que se define la entidad y el módulo que contiene ese archivo fuente. [5]

Ejemplo en C++

#include <iostream> #include <conio.h> usando std :: cout ; usando std :: endl ;    struct B { // el modificador de acceso predeterminado dentro de struct es público void set_n ( int v ) { n = v ; } void f () { cout << "B::f" << endl ; } protected : int m , n ; // B::m, B::n están protegidos private : int x ; }; struct D : B { using B :: m ; // D::m es público int get_n () { return n ; } // B::n es accesible aquí, pero no afuera // int get_x() { return x; } // ERROR, B::x es inaccesible aquí private : using B :: f ; // D::f es privado }; int main () { D d ;                                                    // dx = 2; // ERROR, privado // dn = 2; // ERROR, protegido d . m = 2 ; // protegido B::m es accesible como D::m     d . set_n ( 2 ); // llama a B::set_n(int) cout << d . get_n () << endl ; // salida: 2       // df(); // ERROR, B::f es inaccesible como D::f B & b = d ; // b hace referencia a d y lo "ve" como de tipo B    // bx = 3; // ERROR, privado // bn = 3; // ERROR, protegido // bm = 3; // ERROR, B::m está protegido b . set_n ( 3 ); // llama a B::set_n(int) // cout << b.get_n(); // ERROR, 'struct B' no tiene ningún miembro llamado 'get_n'  b . f (); // llama a B::f() y devuelve 0 ; }   

Referencias

Notas

  1. ^ Mayo 2002, págs. 199.
  2. ^ Wagner, Bill . "Modificadores de acceso - Guía de programación de C#". docs.microsoft.com . Consultado el 13 de enero de 2020 .
  3. ^ "Especificadores de acceso". en.cppreference.com . Consultado el 13 de enero de 2020 .
  4. ^ "Modificadores de acceso (referencia de C#)". learn.microsoft.com . Microsoft . 2022-09-27 . Consultado el 2023-02-08 .
  5. ^ "Control de acceso: el lenguaje de programación Swift (Swift 5.3)". docs.swift.org . Consultado el 8 de febrero de 2021 .

Bibliografía