Sunday, March 17, 2013

Construtores na Orientação a Objetos

Construtores

Quando implementamos nossas classes em uma linguagem de programação Orientada a Objetos, o compilador, por padrão, cria um método sem parâmetros chamado “construtor”. A finalidade desse método é executar atividades iniciais que preparem o objeto para uso como: invocar o construtor da classe base, atribuir valores padrões para as variáveis membros; etc.


O (pseudo-) método construtor determina que ações devem ser executadas quando da criação de um objeto. Em Java, o construtor é definido como um método cujo nome deve ser o mesmo nome da classe e sem indicação do tipo de retorno -- nem mesmo void. O construtor é unicamente invocado no momento da criação do objeto através do operador new.

O retorno do operador new é uma referência para o objeto recém-criado. O construtor pode receber argumentos, como qualquer método. Usando o mecanismo de sobrecarga, mais de um construtor pode ser definido para uma classe. (RICARTE)

Uma das principais características da Orientação a Objetos, o Polimorfismo, permite que o método construtor, como qualquer método, seja sobrescrito e tenha várias versões com assinaturas diferentes (parâmetros com tipos e quantidades diversas). Vejamos mais detalhes no texto abaixo:

Toda classe tem pelo menos um construtor sempre definido. Se nenhum construtor for explicitamente definido pelo programador da classe, um construtor padrão, que não recebe argumentos, é incluído para a classe pelo compilador Java. No entanto, se o programador da classe criar pelo menos um método construtor, o construtor padrão não será criado automaticamente -- se o programador desejar mantê-lo, deverá criar um construtor sem argumentos explicitamente.

No momento em que um construtor é invocado, a seguinte sequência de ações é executada para a criação de um objeto:

  1. O espaço para o objeto é alocado e seu conteúdo é inicializado (bitwise) com zeros.
  2. O construtor da classe base é invocado. Se a classe não tem uma superclasse definida explicitamente, a classe Object é a classe base.
  3. Os membros da classe são inicializados para o objeto, seguindo a ordem em que foram declarados na classe.
  4. O restante do corpo do construtor é executado.

    Seguir essa sequência é uma necessidade de forma a garantir que, quando o corpo de um construtor esteja sendo executado, o objeto já terá à disposição as funcionalidades mínimas necessárias, quais sejam aquelas definidas por seus ancestrais. O primeiro passo garante que nenhum campo do objeto terá um valor arbitrário, que possa tornar erros de não inicialização difíceis de detectar.

    Bibliografia
     

    RICARTE, I. L. M. Construtores. In: <http://www.dca.fee.unicamp.br/cursos/PooJava/metodos/construtor.html>. Acesso em 17/03/2013.

     

    Thursday, March 14, 2013

    Mensagens na Orientação a Objetos


    Mensagens na Orientação a Objetos



    A orientação a objetos é um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos (WIKIPÉDIA).

    A interação entre esses objetos se dá por meio de trocas de mensagens. Por definição, “Mensagem é uma chamada a um objeto para invocar um de seus métodos, ativando um comportamento descrito por sua classe. Também pode ser direcionada diretamente a uma classe (através de uma invocação a um método estático).” (WIKIPÉDIA).

    Em outras palavras, mensagem é um texto enviado de um objeto para outro, que este entende como invocação de um de seus métodos (habilidades ou comportamentos). Além desse texto em si, é possível, também, a passagem de valores ou parâmetros, que são informações trocadas entre os objetos.

    Se uma mensagem não é compreendida pelo objeto, ele automaticamente retornará um erro. Uma mesma mensagem pode executar comportamentos diferentes, dependendo do contexto. Isso envolve mais uma característica da Orientação a Objetos: o Polimorfismo.

    Polimorfismo consiste em quatro propriedades que a linguagem pode ter (atente para o fato de que nem toda linguagem orientada a objeto tem implementado todos os tipos de polimorfismo):

     
    • Universal: Inclusão: um ponteiro para classe mãe pode apontar para uma instância de uma classe filha (exemplo em Java: "List lista = new LinkedList();" (tipo de polimorfismo mais básico que existe);
    • Paramétrico: se restringe ao uso de templates (C++, por exemplo) e generics (Java/C♯);
    • Ad-Hoc: Sobrecarga: duas funções/métodos com o mesmo nome mas assinaturas diferentes;
    • Coerção: a linguagem que faz as conversões implicitamente (como por exemplo atribuir um int a um float em C++, isto é aceito mesmo sendo tipos diferentes pois a conversão é feita implicitamente); (WIKIPÉDIA)


    Bibliografia

    ORIENTAÇÃO A OBJETOS. In: WIKIPÉDIA, a enciclopédia livre. Flórida: Wikimedia Foundation, 2013. Disponível em: <http://pt.wikipedia.org/w/index.php?title=Orienta%C3%A7%C3%A3o_a_objetos&oldid=34261231>. Acesso em: 12 mar. 2013.

    DAVID, M.F. Programação Orientada A Objetos: Uma Introdução. In < http://www.hardware.com.br/artigos/programacao-orientada-objetos/>. Acesso em 12 mar. 2013.

     

    Search This Blog

    About Me

    My photo
    Cristão, apaixonado por Deus. Consultor em Tecnologia da Informação