• Nenhum resultado encontrado

CAPÍTULO 1: ROBÔS MÓVEIS

2.3. Elementos da programação orientada a objetos

A utilização da programação orientada a objetos permite um aumento de produtividade pelo reuso de elementos de software. Ela também contempla as características psicológicas do programador, pois nos modelos de aprendizagem, a organização da informação de entrada conduz à aprendizagem mais rápida e à melhor memorização (SOUSA, 1999). A recuperação da informação armazenada se torna muito mais fácil se esta é organizada desde o início. Os itens na memória de longo prazo são tanto mais prontamente recuperados quanto mais se acham estruturados ou categorizados. O estratagema dos métodos propostos para o desenvolvimento de sistemas de memória consiste em aprender a organizar as informações que devemos aprender, de modo que elas possam ser novamente encontradas em nossa memória, quando necessário. Este ponto vai ao encontro da estruturação da programação orientada a objetos. Os objetos (entidades) são organizados ou categorizados em classes, formando uma estrutura hierarquizada, possibilitando uma boa organização da informação, que é captada pelas pessoas envolvidas no desenvolvimento dos programas.

Por fim, pode-se dizer que o desenvolvimento de um programa orientado a objetos, é baseado em quatro princípios básicos: abstração, encapsulamento, herança e polimorfismo, que serão discutidos a seguir.

2.3.1 Abstração

A abstração é o processo de extrair as características essenciais de um objeto real e é necessária para se ter um modelo o mais exato possível da realidade sobre o qual se possa operar. O conjunto de características resultante da abstração forma um tipo de dados abstrato com informações sobre seu estado e comportamento. A abstração no entanto pode não produzir os mesmos resultados para diferentes observadores, pois, dependendo do contexto onde é utilizada, a abstração de um objeto descrito por uma pessoa pode ser diferente na visão de outra. No desenvolvimento de software a abstração é o mecanismo básico utilizado para realização da análise do domínio da aplicação, e cada passo do processo de engenharia de software é um aprimoramento do nível de abstração da solução (PRESSMAN, 1995).

2.3.2 Encapsulamento

Através do encapsulamento, os atributos de um objeto só podem ser alterados por métodos definidos na própria classe, garantindo desta forma a integridade dos atributos do objeto. A única maneira de um objeto alterar os atributos de um outro objeto é através da ativação de um de seus métodos por uma mensagem. Este conceito, onde atributos e métodos são visíveis apenas através de mensagens, é conhecido como encapsulamento. O encapsulamento funciona como uma proteção para os atributos e métodos, além de tornar explícito qualquer tipo de comunicação com o objeto (WINBLAND, 1993).

Um exemplo prático de encapsulamento no mundo real pode ser descrito por um vídeo cassete. Em um vídeo cassete existe um número determinado de funções que podem ser executadas, como por exemplo, avançar, voltar, gravar, tocar, parar e ejetar a fita. Dentro do vídeo cassete, porém, há várias outras funções sendo realizadas como acionar o motor, desligar o motor, acionar o cabeçote de gravação, liberar o cabeçote, e outras operações mais complexas. Essas funções são escondidas dentro do mecanismo do vídeo cassete e não temos acesso a elas diretamente. Quando a tecla play é pressionada, o motor é ligado e o cabeçote de

reprodução é acionado, sem que para isso, seja necessário saber como é feito internamente.

A principal vantagem do encapsulamento é poder esconder a complexidade do código e proteger os dados, permitindo o acesso a eles apenas através de métodos evitando que seus dados sejam corrompidos por aplicações externas.

No exemplo do vídeo cassete, quando o método gravar é acionado, o aparelho grava as informações presentes na fita de vídeo em um formato padrão, que poderá ser lido por outros aparelhos similares. Se não existisse o método gravar e fosse possível o acesso direto à fita, cada pessoa poderia estabelecer uma maneira diferente de gravar informações, fazendo com que o processo de se gravar uma fita de vídeo se tornasse uma tarefa complicada, pois o usuário teria que conhecer toda a complexidade do aparelho. Isso acarretaria numa perda de compatibilidade pois não haveria uma forma de proteger os dados para que fossem sempre gravados em um formato padrão. Neste caso, o encapsulamento funciona tanto para proteger os dados, como para simplificar o uso de um objeto.

Outro exemplo pode ser dado pelos aplicativos desenvolvidos para a plataforma Windows. Em aplicações deste tipo, quando em alguma parte do programa onde é necessário o uso de um botão OK e um botão Cancela, por exemplo, não é preciso entender como ele foi escrito, nem saber quais são seus dados internos. Basta saber como construí-lo, mudar o texto que contém a informação do botão e depois incluí-lo no programa, sem correr o risco de corromper a estrutura interna do botão, definida em uma biblioteca padrão.

2.3.3 Herança

O conceito de herança permite definir uma nova classe, com base em uma já existente. Uma classe-filha pode ser criada herdando os membros de dados e os métodos de uma classe-pai. Assim, novas classes podem ser criadas pela especialização da classe-pai, formando uma hierarquia de classes (WINBLAND, 1993).

De uma maneira bastante simples, pode-se dizer que herança é o aproveitamento e extensão das características de uma classe existente. Na natureza

existem muitos exemplos de herança. No reino animal, os mamíferos herdam a característica de terem uma espinha dorsal por serem uma subclasse dos vertebrados, podendo ainda, acrescentar a essa característica, outras, como ter sangue quente e amamentar. Os roedores herdam todas as características dos vertebrados e mamíferos e acrescentam outras, e assim por diante. Em programação, a herança ocorre quando um objeto aproveita a implementação (estruturas de dados e métodos) de um outro tipo de objeto para desenvolver uma especialização dele. A herança permite a formação de uma hierarquia de classes, onde cada nível é uma especialização do nível anterior, que é mais genérico.

Em programação orientada a objetos, é comum desenvolver estruturas genéricas para depois ir acrescentando detalhes. Isto simplifica o código e permite uma organização maior de um projeto, fazendo com que seja possível a reutilização de código. Se for preciso implementar um botão azul e já temos uma classe que define as características de um botão cinza, podemos fazer com que nossa implementação seja uma subclasse do botão cinza, e depois estender suas características. Desta forma, nos concentramos apenas no necessário, que neste caso é a cor do botão, e evitamos ter que definir novamente todas as características para um novo botão.

2.3.4 Polimorfismo

O termo polimorfismo significa ter muitas formas. Em programação, esta definição pode ser traduzida pelo envio de uma mesma mensagem para um conjunto de objetos, onde cada objeto responde de forma diferente em função da mensagem recebida (WINBLAND, 1993). Polimorfismo também pode ser definido como sendo a propriedade de se utilizar um mesmo nome para fazer coisas diferentes. Por exemplo, mandar alguém correr pode produzir resultados diferentes dependendo da situação. Se a pessoa estiver parada e em pé, irá obedecer à ordem simplesmente correndo. Se a pessoa estiver no volante de um carro, o resultado será o aumento da pressão do pé no acelerador.

Em programação, uma mesma mensagem poderá provocar um resultado diferente, dependendo dos argumentos que foram passados e do objeto que o

receberá. Por exemplo, o envio de uma instrução que desenhe para uma subclasse de polígono, poderá desenhar um triângulo, um retângulo ou um pentágono, dependendo da classe que receber a instrução. Isto é muito útil para escrever programas versáteis, que possam lidar com vários tipos diferentes de objetos.

Documentos relacionados