Programação D - modificadores de acesso de classe
A ocultação de dados é uma das características importantes da Programação Orientada a Objetos que permite evitar que as funções de um programa acessem diretamente a representação interna de um tipo de classe. A restrição de acesso aos membros da classe é especificada pelo rotuladopublic, private, e protectedseções dentro do corpo da classe. As palavras-chave public, private e protected são chamadas de especificadores de acesso.
Uma classe pode ter várias seções rotuladas públicas, protegidas ou privadas. Cada seção permanece em vigor até que outro rótulo de seção ou a chave direita de fechamento do corpo da classe seja vista. O acesso padrão para membros e classes é privado.
class Base {
public:
// public members go here
protected:
// protected members go here
private:
// private members go here
};
Os membros públicos em D
UMA publicmembro pode ser acessado de qualquer lugar fora da classe, mas dentro de um programa. Você pode definir e obter o valor de variáveis públicas sem qualquer função de membro, conforme mostrado no exemplo a seguir -
Exemplo
import std.stdio;
class Line {
public:
double length;
double getLength() {
return length ;
}
void setLength( double len ) {
length = len;
}
}
void main( ) {
Line line = new Line();
// set line length
line.setLength(6.0);
writeln("Length of line : ", line.getLength());
// set line length without member function
line.length = 10.0; // OK: because length is public
writeln("Length of line : ", line.length);
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Length of line : 6
Length of line : 10
Os membros privados
UMA privatea variável ou função de membro não pode ser acessada ou mesmo visualizada de fora da classe. Apenas as funções de classe e amigo podem acessar membros privados.
Por padrão, todos os membros de uma classe são particulares. Por exemplo, na seguinte aulawidth é um membro privado, o que significa que até você rotular um membro explicitamente, ele é considerado um membro privado -
class Box {
double width;
public:
double length;
void setWidth( double wid );
double getWidth( void );
}
Na prática, você precisa definir os dados na seção privada e as funções relacionadas na seção pública para que possam ser chamados de fora da classe, conforme mostrado no programa a seguir.
import std.stdio;
class Box {
public:
double length;
// Member functions definitions
double getWidth() {
return width ;
}
void setWidth( double wid ) {
width = wid;
}
private:
double width;
}
// Main function for the program
void main( ) {
Box box = new Box();
box.length = 10.0;
writeln("Length of box : ", box.length);
box.setWidth(10.0);
writeln("Width of box : ", box.getWidth());
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Length of box : 10
Width of box : 10
Os membros protegidos
UMA protected a variável de membro ou função é muito semelhante a um membro privado, mas forneceu um benefício adicional que eles podem ser acessados em classes filhas que são chamadas de classes derivadas.
Você aprenderá classes derivadas e herança no próximo capítulo. Por agora você pode verificar o seguinte exemplo onde uma classe de criançaSmallBox é derivado de uma classe pai Box.
O exemplo a seguir é semelhante ao exemplo acima e aqui width membro é acessível por qualquer função de membro de sua classe derivada SmallBox.
import std.stdio;
class Box {
protected:
double width;
}
class SmallBox:Box { // SmallBox is the derived class.
public:
double getSmallWidth() {
return width ;
}
void setSmallWidth( double wid ) {
width = wid;
}
}
void main( ) {
SmallBox box = new SmallBox();
// set box width using member function
box.setSmallWidth(5.0);
writeln("Width of box : ", box.getSmallWidth());
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Width of box : 5