Turma de Licenciatura Plena em Geografia EAD 2013- Uniube

Turma de Licenciatura Plena em Geografia EAD 2013- Uniube
Geografia Uniube EAD 2013

quinta-feira, 24 de novembro de 2011

O que é um objeto?

Objetos são a base da tecnologia orientada a objetos. Consistem de modelos (abstrações) de objetos reais. Eles preservam as características essenciais de um objeto real: o seu estado e o seu comportamento.
Qualquer objeto real pode ser abstraído para filtrar seu estado e comportamento. Vejamos alguns exemplos:
OBJETO
ESTADO
COMPORTAMENTO
Carro
velocidade atual, marcha, cor, modelo, marca
troca marchas, acelera, da partida, freia
Gato
nome, raça, com fome, com preguiça
mia, dorme, se estica, brinca, caça, liga o "motor"
Caneta
cor, nível de tinta
escreve, coloca mais tinta
Toca-fitas
ligado, girando, sentido da fita, tocando, gravando
grava, toca, avança, volta, para, pausa, ejeta, liga
Em programação orientada a objetos, o estado de um objeto representado por campos de dados (variáveis), e seu comportamento implementado com métodos (funções). A única forma de mudar o estado dos dados é através de métodos. Por exemplo, para mudar o estado do toca-fitas para ligado, é necessário utilizar o método liga. A figura abaixo representa um objeto de software:

Classes são protótipos utilizados para construir objetos. Os objetos são instâncias das classes. Quando criamos um objeto, dizemos que instanciamos uma classe. Cada instância é uma entidade individual e pode então receber valores para as suas variáveis e modificá-las através de métodos.
A grande vantagem de se usar classes é a reutilização do código. Toda a estrutura de um objeto é definida na classe, que depois é utilizada quantas vezes for necessário para criar vários objetos.

As vantagens de se usar objetos como blocos para a construção de aplicações são muitas. Podemos citar:
  • Simplicidade: os objetos escondem a complexidade do código. Pode-se criar uma complexa aplicação gráfica usando botões, janelas, barras de rolamento, etc., sem conhecer complexidade do código utilizado para criá-los.
  • Reutilização de código: Um objeto, depois de criado, pode ser reutilizado por outras aplicações, ter suas funções extendidas e serem usados como blocos fundamentais em sistemas mais complexos.
  • Inclusão Dinâmica: objetos podem ser incluídos dinamicamente no programa, durante a execução. Isso permite que vários programas compartilhem os mesmos objetos e classes, reduzindo o seu tamanho final.

Elementos do modelo orientado a objetos
Os autores divergem quanto às características que fazem uma linguagem ser orientada a objetos, mas a maioria concorda que o paradigma se baseia em quatro princípios básicos: abstração, encapsulamento, herança e polimorfismo. Explicaremos cada um deles a seguir.
É o processo de extrair as características essenciais de um objeto real. A abstração é necessária para se ter um modelo fiel 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 nem sempre produz os mesmos resultados. Depende do contexto onde é utilizada. Ou seja, a abstração de um objeto por uma pessoa pode ser diferente na visão de outra. Por exemplo, para um mecânico, um carro é caracterizado pela marca, modelo, potência, cilindradas, etc. Já um usuário comum pode caracterizá-lo pela cor, marca, modelo, consumo e preço. E finalmente, para o Departamento de Trânsito, um carro pode ser totalmente caracterizado pela placa, proprietário, marca, modelo, cor e número de chassi.
É o processo de combinar tipos de dados, dados e funções relacionadas em um único bloco de organização e só permitir o acesso a eles através de métodos determinados. Por exemplo, existe um número determinado de coisas que se pode fazer com um toca-fitas. Pode-se avançar, voltar, gravar, tocar, parar, interromper e ejetar a fita. Dentro do toca-fitas, porém, há várias outras funções sendo realizadas como acionar o motor, desligá-lo, 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 toca-fitas e não temos acesso a elas diretamente. Quando apertamos o play o motor é ligado e o cabeçote de reprodução acionado, mas não precisamos saber como isso é feito para usar o toca-fitas.
Uma das principais vantagens do encapsulamento é esconder a complexidade do código. Outra, é proteger os dados. Permitindo o acesso a eles apenas através de métodos evitando assim, que seus dados sejam corrompidos por aplicações externas.
No exemplo do toca-fitas, quando usamos o método gravar, sabemos que o aparelho irá gravar informações na fita em um formato padrão que poderá ser lido por outros aparelhos similares. Se não existisse o método gravar e tivéssemos acesso direto à fita, cada pessoa poderia estabelecer uma maneira diferente de gravar informações (usando laser, imãs, etc.). Gravar uma fita passaria a ser uma tarefa complicada, pois o usuário teria que conhecer toda a complexidade do aparelho. Depois, se perderia a compatibilidade, pois não haveria uma forma de proteger os dados para que fossem sempre gravados em um formato padrão. O encapsulamento, então, funciona tanto para proteger os dados, como para simplificar o uso de um objeto.
Há vários exemplos na programação. Os aplicativos que conhecemos e que rodam no Windows tem uma grande semelhança porque usam os mesmos objetos. Cada objeto tem um número limitado de funções (métodos) que podem ser invocados sobre ele. Se você decide usar, em alguma parte do seu programa, dois botões: OK e Cancela, você não precisa entender como ele foi escrito, nem saber quais as suas variáveis internas. Basta saber como construí-lo, mudar o texto que contém e depois incluí-lo em seu programa. Não há como corromper a estrutura interna do botão.
É o aproveitamento e extensão das características de uma classe existente. Não bastasse a reutilização do código proporcionado pelas classes, na criação de objetos, a POO vai mais longe e define meios de permitir, em uma classe, a reutilização do código de outras classes.
Existem muitos exemplos na natureza. No reino animal, os mamíferos herdam a característica de terem uma espinha dorsal por serem uma subclasse dos vertebrados. Acrescentam a essa característica várias outras, como ter sangue quente, amamentar, etc. 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. Tipo de objeto como um protótipo do mesmo que na terminologia da POO se chama de classe. A herança permite a formação de uma hierarquia de classes, onde cada nível é uma especialização do nível anterior, mais genérico.
É comum desenvolver estruturas genéricas para depois ir acrescentando detalhes em POO. Isto simplifica o código e permite uma organização maior de um projeto. Também favorece a reutilização de código.
A figura abaixo ilustra uma hierarquia de classes formada pelas subclasses da classe Avião. As características altitude, velocidade, direção, etc. podem estar definidas na classe Avião, que declara métodos elevador(), partida(), leme(), etc. Esses métodos e variáveis podem ser herdadas pelas classes Jato e Hélice que são tipos de aviões. A classe Cessna pode ser uma subclasse de Hélice e a classe Jato pode ter outras subclasses como F15, Boeing737, MD11 e assim por diante.
Em cada classe, métodos novos podem ser criados, outros podem ser redefinidos e novos campos de dados podem ser declarados. Cada subclasse adiciona alguma nova funcionalidade à classe pai e continua sendo um objeto do tipo definido pela raiz das classes. Ou seja, tanto Cessna, AirbusA300, e Boeing737 são aviões. Cessna e Piper são aviões e são movidos a hélice. É importante observar esta relação de ser no projeto de sistemas orientados a objetos.
heranca.gif (7137 bytes)
Todos os métodos e dados públicos de uma superclasse são herdados pelas suas subclasses. Desta forma, se Avião já define o método partida(), não há necessidade de Cessna redefini-lo. Os objetos criados com a classe Cessna já nascem com um método partida(), mesmo que este não faça parte da planta do avião.
Mas, na maioria das vezes, a forma como uma classe genérica define uma ação não serve para classes mais específicas. Provavelmente a partida na classe Avião seja manual. Neste caso, a subclasse pode sobrepor ou sobrecarregar os métodos herdados. O Cessna, por exemplo, pode ou não definir um novo método partida(tipo) que suporte tanto partida manual como elétrica, mantendo o método partida() para acionamento manual (sobrecarga), ou simplesmente reescrever partida() para que faça somente partida elétrica (sobreposição). Cessna, por exemplo, pode acrescentar novos métodos como baixarTrem() e horizonte() (para ler as indicações do horizonte artificial). Jato deve sobrepor os métodos partida(), elevador(), leme() com uma implementação específica para um jato genérico. Talvez acrescente flaps(), pilotoAut(). Jato também pode acrescentar novas variáveis capacidadeDeCarga, númeroDePassageiros, etc. para caracterizar melhor os objetos que serão produzidos.


Nenhum comentário:

Postar um comentário