uma linguagem orientada a objetos é uma linguagem de programação de computador que gira em torno do conceito de um objeto. Linguagens orientadas a objetos foram desenvolvidas para tornar mais fácil o desenvolvimento, depuração, reutilização e manutenção de software do que é possível com linguagens anteriores. Compreender objetos, e linguagens orientadas a objetos, requer conhecimento da evolução de linguagens de programação computacional e estruturas de dados.
Evolution of Computer Programming Languages
Computer programming languages have evolved continuously over the years. Esta evolução é detalhada nos seguintes exemplos.
linguagem de montagem.
os primeiros programas de computador foram escritos em linguagem assembly. Este é um tipo primitivo de linguagem em que cada afirmação corresponde a uma única instrução de máquina; é a operação de computador mais básica possível. Realizar qualquer coisa útil requer muitas instruções de máquina. A linguagem Assembly é específica para um tipo particular de computador; mover o programa para um tipo diferente de computador requer escrever um programa totalmente novo. Programas de linguagem de montagem são difíceis de escrever, depurar e manter. Embora outras linguagens são agora usadas para a maioria das aplicações de computador, a linguagem assembly ainda é usada hoje como a primeira linguagem quando um novo chip é desenvolvido.
línguas de Alta Ordem.
Depois da linguagem assembly, as linguagens de ordem superior foram desenvolvidas; entre as primeiras foram FORTRAN e BASIC. Uma declaração em uma língua de alta ordem corresponde a uma frase em inglês. Um programa chamado um compilador lê as declarações de um arquivo fonte e gera um arquivo contendo instruções de máquina, que é chamado de arquivo objeto. O arquivo do objeto pode então ser carregado e executado pelo computador. A high order language is more portable than an assembly language program; the same source file can be compiled for any computer as long as a suitable compiler exists.
As primeiras linguagens de alta ordem só são permitidas para tipos de dados simples como número inteiro, número de vírgula flutuante, ou string (uma sequência de letras). A única estrutura de dados disponível era o array. Um array é uma lista de elementos que são todos do mesmo tipo de dados; por exemplo, uma lista de números ou uma lista de strings. Um banco de dados foi criado usando um grupo de arrays. Por exemplo, um banco de dados de produtos pode conter três matrizes chamadas número do Produto, Descrição do produto e preço do produto. Cabe ao programador manter as matrizes alinhadas; por exemplo, para garantir que o terceiro elemento de cada matriz correspondesse ao mesmo produto.
línguas estruturadas.
o próximo passo na evolução das linguagens de programação computacional foi o desenvolvimento de linguagens estruturadas, como C e PASCAL, e a introdução de estruturas de dados. Uma estrutura de dados é um conjunto de tipos de dados mais simples em um único registro. Por exemplo, uma base de dados de produtos poderia ser construída como um conjunto de registros de produtos, cada registro contendo o número do Produto, Descrição do produto e campos de preço do produto. Agora um registro poderia conter todas as informações necessárias sobre um único item. As estruturas também se tornaram mais definidas na parte processual da língua. Uma função ou procedimento é uma pequena parte de um programa maior que poderia ser escrito para fornecer alguma operação básica em uma estrutura de dados, como um registro.
linguagens orientadas a objetos.
o próximo passo na evolução das linguagens de programação de computadores, orientação de objetos, foi introduzido na linguagem Smalltalk. A orientação do objeto leva os conceitos de programaçãoestruturada um passo adiante. Agora, em vez de estruturas de dados e estruturas de programas separados, tanto os elementos de dados e programas são combinados em uma estrutura chamada um objeto. Os elementos de dados do objeto são chamados atributos, enquanto os elementos do programa do objeto são chamados métodos. Coletivamente, atributos e métodos são chamados de membros do objeto. Normalmente, os métodos de um objeto são os únicos programas capazes de operar nos atributos do objeto.
com orientação a objetos, uma mudança fundamental veio na forma como os programas são vistos. A visão anterior era que os dados devem ser manipulados de alguma forma para alcançar um resultado final, e um programa era visto como um meio sequencial de realizar as manipulações. De uma perspectiva de orientação a objetos, UM programa é visto como um grupo de objetos que reagem a mensagens do usuário, outros programas ou outros objetos. Esta visão levou à ideia de programação orientada a eventos; i.e. quando o evento A acontece, este objeto executa a ação B. Uma mensagem é enviada para um objeto chamando um de seus métodos.
características da Programação Orientada a objetos
As principais características da programação orientada a objetos incluem encapsulação e ocultação de dados, herança e polimorfismo.encapsulamento e ocultação de dados.
a ideia central na programação orientada a objetos (OOP) é que os atributos do objeto e os métodos que operam sobre os atributos estão unidos, ou encapsulados, no objeto. Os métodos do objeto fornecem as únicas interfaces entre o objeto e outras partes do programa. Isto é diferente de linguagens anteriores, onde qualquer parte de um programa poderia operar em qualquer peça de dados a qualquer momento. Embora isso pareça restritivo, as restrições resultam em um programa mais modular que é mais fácil de desenvolver e menos provável de conter erros. Também significa que é mais fácil mover um objeto para um ambiente diferente e ainda ter que funcionar corretamente.
um objeto de software é algo semelhante a um objeto físico. Por exemplo, um motor pode ser usado para alimentar um carro. Tem componentes internos, correspondentes a atributos, mas não é preciso preocupar-se com o que são ou como funcionam. O motor deve interagir com o acelerador, o sistema de combustível, a transmissão, a admissão e os colectores de escape, todos eles correspondentes a métodos. É inconcebível que o combustível entre no motor por qualquer outro meio que não seja através do sistema de combustível. Enquanto as interfaces corretas forem mantidas, o motor funcionará. Assim é com objetos. Os atributos do objeto estão escondidos do exterior. O objeto interage com seu ambiente através de seus métodos.herança.
outro conceito importante para a programação orientada a objetos é a herança. Uma classe de objeto é definida em uma hierarquia, e é dito herdar o comportamento de seus ancestrais (aqueles objetos acima dela na hierarquia). Por exemplo, um programa de desenho pode incluir três classes de objetos: Forma, Retângulo e círculo. Eles poderiam ser definidos de modo que retângulo e círculo são ambos descendentes da forma.
Forma inclui atributos comuns a qualquer forma, tais como a localização da forma numa superfície de desenho. Shape também fornece métodos para manipular esses atributos. Por exemplo, um método de movimento mudaria a localização da forma. Além disso, forneceria uma definição para Métodos aos quais todas as formas devem ser capazes de responder, por exemplo, um método de desenho para reproduzir a forma em uma superfície de desenho. O método de desenho neste caso é dito abstrato; ele não faz nada além de criar um requisito que classes descendentes devem implementá-lo.
Uma vez que o retângulo é um descendente da forma, herda atributos (localização) e métodos (mover) da forma. Ele fornece os atributos adicionais de que necessita (largura e altura) e novos métodos que manipulam esses atributos (setWidth, setHeight). Retângulo também deve fornecer um método de desenho que pinta um retângulo na superfície de desenho, porque cada descendente de forma deve implementar um método de desenho. Da mesma forma, Circle provê um novo atributo (raio), métodos para manipulá-lo (setRadius), e um método de desenho próprio.com este tipo de arranjo, o programa do Gestor de desenho teria uma lista de formas na superfície do desenho. Para mover um objeto, ele chamaria o método de movimento do objeto. Para desenhar um objeto, o gerente chama o método de desenho do objeto. O Gerente não sabe nem se importa como o objeto se move ou desenha a si mesmo, desde que o trabalho seja feito. Na verdade, ele pode nem mesmo saber que tipo de forma um objeto particular realmente é. Pode ser um rectângulo, um círculo ou qualquer outro objecto descendente da forma. Só precisa de saber que é descendente da forma, para que possa enviar-lhe qualquer mensagem que uma forma possa receber.
A capacidade de herança de uma linguagem orientada a objetos adicionou uma nova dimensão à programação. Aprender uma linguagem de alta ordem mais antiga foi principalmente envolvido com a aprendizagem da sintaxe da linguagem (como as declarações da linguagem são construídas), o que não é assim tão difícil. Em uma linguagem orientada a objetos, aprender a sintaxe ainda é necessária, mas familiarizar—se com as hierarquias de classe padrão—que podem incluir milhares de classes, cada classe com seus próprios métodos-é uma tarefa muito maior. Vale a pena, no entanto, porque um objeto herda os atributos e o comportamento de seu pai. Um programador pode evitar trabalho desnecessário encontrando um objeto existente que já faz a maior parte do que é necessário. Em seguida, nova capacidade pode ser adicionada incrementalmente. O resultado é menor custo, software de maior qualidade.
Esta característica também levou à inclusão de recursos de documentação automática em várias linguagens orientadas a objetos. Em línguas anteriores, a documentação-se gerada—foi feita separadamente, quase como uma reflexão posterior. Agora, a informação da documentação pode ser incluída no código fonte do objeto e usada para gerar um documento de marcação de hipertexto (HTML) automaticamente, completo com hiperligações para cima e para baixo das hierarquias de classes, que podem ser vistas com um navegador de Internet. Isso torna muito mais fácil manter uma documentação precisa e atualizada.polimorfismo.
a próxima característica importante da linguagem orientada a objetos é o polimorfismo, o que significa que um objeto descendente não tem que responder a uma mensagem exatamente como seu ancestral. Um novo objeto pode sobrepor os métodos de seu pai, o que faz com que o novo objeto reaja a uma mensagem de forma diferente. Por exemplo, uma classe comum em um sistema de janelas é um componente, que representa um objeto visível. Um componente é uma classe ancestral para cada objeto visível na tela: ícones, botões, menus, barras de slide, opções, botões de rádio, até mesmo janelas. Todas estas classes descendentes sobrepõem-se a alguns dos métodos do componente para mudar o comportamento. Por exemplo, um objeto ícone precisa exibir-se como uma imagem pequena. O ícone substitui o método de desenho do componente para mostrar a imagem.
linguagens orientadas a objetos comuns
linguagens orientadas a objetos comuns incluem Smalltalk, C, Java, e outras linguagens como BASIC e PASCAL.Smalltalk.
Smalltalk foi a língua original orientada a objetos, desenvolvida no início da década de 1970 pela Xerox. Desde então, várias variações foram introduzidas. Continua a ser utilizada, mas a aceitação generalizada tem sido dificultada pela falta de um padrão universal.
c+.
c+ + é uma extensão da linguagem C que forneceu capacidades OOP. É provavelmente a linguagem mais difundida orientada a objetos atualmente em uso. C é uma linguagem híbrida porque compila programas padrão C; não requer o uso de objetos. Isto permite-lhe tirar proveito do software C existente, ao usar a orientação do objeto para o novo software. C é controlado por normas ANSI.
Java.
Java é a linguagem mais amplamente aceita pura orientada a objetos. Foi desenvolvido pela Sun Microsystems originalmente como uma linguagem de controle para pequenos aparelhos. No entanto, provou ser ideal para uso com a Internet. Um applet Java pode ser incorporado em uma página web. Quando um navegador carrega a página web, ela também carrega e exibe o applet. Sun ainda mantém o controle estrito do padrão de linguagem.
para facilitar a operabilidade entre plataformas (trabalhando em tipos de computadores totalmente diferentes sem recompilação), Java é implementado em duas partes. O compilador produz um arquivo objeto que só pode ser executado por uma máquina virtual Java (JVM). Um JVM separado está disponível para cada sistema operacional suportado (Windows, Unix/Linux, ou Solaris). Isso faz com que os programas Java sejam capazes de executar em qualquer um desses sistemas sem recompilar.outras línguas.
a maioria das linguagens comumente usadas hoje permitem alguma forma de orientação a objetos. BASIC has evolved into object-oriented Visual BASIC; PASCAL into object-oriented DELPHI. Geralmente estas são linguagens híbridas, como C, que suportam a orientação do objeto sem requerê-lo.
veja também Compiladores; Mouse; linguagens processuais.
Donald M. McIver
Bibliography
Deitel, Harvey M., and Paul J. Deitel. Java: How to Program, 2nd ed. Upper Saddle River, NJ: Prentice Hall, 1998.Voss, Greg. Object-Oriented Programming, An Introduction. New York: Osborne McGraw-Hill, 1991.