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.

     

    Tuesday, February 26, 2013

    Classes e Instâncias


    Classes e Instâncias

     No mundo da Orientação a Objetos as classes são o centro de tudo. Classes são como plantas de uma casa. Suponha que você queira construir um daqueles condomínios de várias casas idênticas; você não irá fazer várias plantas, uma para cada casa, já que elas são idênticas. Você fará apenas uma planta, que servirá de base para cada casa construída naquele condomínio. No mundo dos objetos é a mesma coisa: você fará apenas uma classe para qualquer número de objetos definidos por aquela classe.


    Em orientação a objetos, uma classe é uma estrutura que abstrai um conjunto de objetos com características similares. Uma classe define o comportamento de seus objetos através de métodos e os estados possíveis destes objetos através de atributos. Em outros termos, uma classe descreve os serviços providos por seus objetos e quais informações eles podem armazenar.( CLASSE (PROGRAMAÇÃO). In: WIKIPÉDIA, a enciclopédia livre. Flórida: Wikimedia Foundation, 2013. Disponível em: <http://pt.wikipedia.org/w/index.php?title=Classe_(programa%C3%A7%C3%A3o)&oldid=34062388>. Acesso em: 26 fev. 2013.)


    Cada objeto tem seus métodos (ações) definidos pela classe. Uma vez que a classe seja construída, você pode criar quantos objetos quiser a partir dela. Isso se chama instanciação: criar um objeto a
    partir de sua definição ou classe. Em outras palavras um objeto é uma instância de uma classe.

     

    Instância é a concretização de uma classe. Em termos intuitivos, uma classe é como um "molde" que gera instâncias de um certo tipo; um objeto é algo que existe fisicamente e que foi "moldado" na classe.

     Assim, em programação orientada a objetos, a palavra "instanciar" significa criar. Quando falamos em "instanciar um objeto", criamos fisicamente uma representação concreta da classe. Por exemplo: "animal" é uma classe ou um molde; "cachorro" é uma instância de "animal" e apesar de carregar todas as características do molde de "animal", é completamente independente de outras instâncias de "animal" (INSTÂNCIA (CLASSE). In: WIKIPÉDIA, a enciclopédia livre. Flórida: Wikimedia Foundation, 2012. Disponível em: <http://pt.wikipedia.org/w/index.php?title=Inst%C3%A2ncia_(classe)&oldid=33379109>. Acesso em: 26 fev. 2013.).

     

    Bibliografia

    STELLMAN, Andrew; GREENE, Jennifer. Head First C#, 2nd ed. Sebastopol, CA: O’Reilly Media, Inc, 2010. 797 p.

    Search This Blog

    About Me

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