photo
+ Responder ao Tópico
Resultados de 1 a 1 de 1

Thread: Encapsulamento e Extensibilidade de Tipo

  1. #1 Fechar a publicação
    Senior Member
    Data de afiliação
    Aug 2018
    Postagens
    110
    Obrigado
    14
    Agradecimentos 134 Tempos em 53 Postagens
    AssinarAssinar
    subscritar: 0

    Encapsulamento e Extensibilidade de Tipo

    OOP é uma abordagem balanceada para escrever software. Dados e comportamento são empacotados juntos. Este encapsulamento cria tipos de dados definidos pelo usuário, estendendo os tipos de dados da linguagem e interagindo com eles. Extensibilidade de tipos é uma oportunidade de adicionar à linguagem tipos de dados definidos pelo usuário, que são também fáceis de usar, tanto quanto os tipos básicos.

    Um tipo de dado abstrato (ADT), por exemplo, uma string, é uma descrição do ideal, bem conhecido tipo de comportamento.

    O usuário de string sabe que as operações de string, tais como concatenação ou impressão, têm um certo comportamento. Operações de concatenação e impressão são chamados métodos.

    Uma certa implementação de ADT pode ter algumas restrições, por exemplo, strings podem ser limitados no comprimento. Estas limitações afetam o comportamento aberto a todos. Ao mesmo tempo, detalhes da implementação privada ou interna não afetam diretamente a jeito como o usuário vê o objeto. Por exemplo, a string é freqüentemente implementado como um array, enquanto o endereço de base interno deste array e seu nome não são essenciais para o usuário.

    Encapsulamento é a habilidade de ocultar os detalhes de implementação quando a interface aberta para o tipo definido pelo usuário é fornecida. Em MQL5, assim como em in C++, definições de classe e estrutura (class e struct) são usadas para as provisões de encapsulamento em combinação com as palavras-chave de acesso private, protected e public.

    A palavra-chave public mostra que o acesso aos membros que ficam depois dela, é aberto sem restrições. Sem esta palavra-chave, membros de classe ficariam bloqueados por default. Membros privados são acessíveis somente por funções membro de sua própria classe.

    Funções de classe protegidas são disponíveis para funções de classe não apenas em sua classe, mas também em suas classes herdeiras. Funções de classe publicas são disponíveis para qualquer função dentro do escopo da declaração da classe. A proteção torna possível ocultar parte da implementação da classe, evitando assim mudanças inesperadas na estrutura dos dados. Restrição de acesso ou ocultamento de dados é uma característica da programação orientada a objetos.

    Geralmente, funções de classe são protegidas e declaradas com o modificador protected, a leitura e a escrita de valores são realizadas por meio do uso de métodos especiais chamados set e get que são definidos por meio do modificador de acesso public.



    Exemplo:

    class CPerson
    {
    protected:
    string first_name; // nome
    public:
    void SetName(string n){m_name=n;}// atribui o nome
    string GetName(){return (m_name);} // retorna o nome
    };



    Esta abordagem oferece várias vantagens. Primeiro, por meio do nome da função nós podemos entender o que ela faz - define (sets) ou obtém (gets) o valor de um membro de classe. Segundo, talvez no futuro precisemos modificar o tipo da variável m_name na classe CPerson ou em qualquer de suas classes derivadas.

    Neste caso, necessitaríamos apenas alterar a implementação das funções SetName() e GetName(), enquanto que objetos da classe CPerson estariam disponíveis para uso em um programa sem nenhuma alteração de código, porque o usuário nem ao menos saberia que o tipo de dado do m_name foi alterado.

    Exemplo:

    struct Name
    {
    string first_name; // nome
    string last_name; // último nome
    };

    class CPerson
    {
    protected:
    Name m_name; // nome
    public:
    void SetName(string n);
    string GetName(){return(m_name.first_name+" "+m_name.last_name);}
    private:
    string GetFirstName(string full_name);
    string GetLastName(string full_name);
    };

    void CPerson::SetName(string n)
    {
    m_name.first_name=GetFirstName(n);
    m_name.last_name=GetLastName(n);
    }

    string CPerson::GetFirstName(string full_name)
    {
    int pos=StringFind(full_name," ");
    if(pos>0) StringSetCharacter(full_name,pos,0);
    return(full_name);
    }

    string CPerson::GetLastName(string full_name)
    {
    string ret_string;
    int pos=StringFind(full_name," ");
    if(pos>0) ret_string=StringSubstr(full_name,pos+1);
    else ret_string=full_name;
    return(ret_string);
    }

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


  2. The Following User Says Thank You to BrasilForeingExchange For This Useful Post:

    Não registrado (1 )

+ Responder ao Tópico

Permissões de postagens

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts