Programação Orientada a Objetos – Introdução

A Programação Orientada ao Objeto (POO) pode ser considerada como uma extensão quase natural da Programação Modular (ou estruturada); a POO foi criada no inicio da década de 70. A sua origem vem da linguagem Simula, criada na Noruega no início da década de 60, e como o nome indica, foi criada para fazer simulações; entretanto, seu uso alavancou um conceito que até então passava “despercebido” pela maioria dos projetistas: a similaridade com o mundo real.

A Orientação a Objetos é uma metodologia de desenvolvimento e implementação de sistemas complexos baseada em objetos do mundo real.

Definições

O que é um objeto?

Qualquer coisa que possa ser entendido e representado.

Um objeto é um elemento do mundo real que possui seus “dados” e “funções” e constitui o menor elemento de programação da POO, tendo uma identidade própria.

Identidade: diferencia um objeto de outro semelhante
Estado: são as caracteristicas “visiveis” de um objeto, ou seja, informações conhecidas [DADOS]
Entrada
São valores
Comportamento: são as funcionalidades associadas ao objeto [FUNÇÕES]
Saída
Ações que o objeto pode realizar

Objetos podem representar entidades concretas (um arquivo no meu computador, uma bicicleta) ou entidades conceituais (uma estratégia de jogo, uma política de escalonamento em um sistema operacional, diretrizes de contratação).

Embora objetos tenham existência própria no mundo real, em termos de linguagem de programação um objeto precisa de um mecanismo de identificação. Esta identificação de objeto deve ser única, uniforme e independente do conteúdo do objeto.

A estrutura de um objeto é representada em termos de atributos.

O comportamento de um objeto é representado pelo conjunto de operações que podem ser executadas sobre o objeto.

Objetos com a mesma estrutura e o mesmo comportamento são agrupados em classes.

Ex: 

Uma agenda de contatos trabalha com o objeto Contato, como eu posso ter vários contatos, a Classe Agenda vai agrupá-los.

Identidade: Contato

Estado: Nome, Telefone, E-mail

Comportamento: cadastrar(), alterar(), consultar(), excluir()

Este quadro representa a abstração do objeto Contato e por consequencia, da classe Agenda.

Uma classe é uma abstração que descreve propriedades importantes para uma aplicação e simplesmente ignora o resto.

Cada classe descreve um conjunto (possivelmente infinito) de objetos individuais. Cada objeto é uma instância de uma classe. Assim, cada instância de uma classe tem seus próprios valores para cada atributo.
Formalmente, para ser considerada uma linguagem OO, esta precisa implementar quatro conceitos básicos: abstração, encapsulamento, herança e polimorfismo.

Abstração

É considerada como a habilidade de modelar características do mundo real do problema que o programador esteja tentando resolver. Podemos demonstrar o uso de abstração facilmente, quando fechamos os olhos e pensamos em uma mesa; esta mesa imaginária provavelmente não vai ser igual à uma outra imaginada por outras pessoas, mas o que importa é que todos as pessoas que imaginaram uma mesa, colocaram nessa as informações que para elas são necessárias para a sua função (de ser uma mesa). Não importa se a mesa é de três pés ou quatro, ou se o tampão é de vidro, madeira ou mármore; o que importa é que a imagem que idealizamos em nossa cabeça é de uma mesa e tenha as informações necessárias para cumprir sua função.
O uso apropriado de abstração permite que um mesmo modelo conceitual (orientação a objetos) seja utilizado para todas as fases de desenvolvimento de um sistema, desde sua análise até sua documentação.

Encapsulamento

O encapsulamento é a base de toda a abordagem da Programação Orientada ao Objeto, isto porque contribui fundamentalmente para diminuir os malefícios causados pela interferência externa sobre os dados. Partindo desse princípio, toda e qualquer transação feita com esses dados só pode ser feita através de procedimentos colocados “dentro” desse objeto, pelo envio de mensagens. Desta maneira, dizemos que um dado está encapsulado quando envolvido por código de forma que só é visível na rotina onde foi criado; o mesmo acontece com uma rotina, que sendo encapsulada, suas operações internas são invisíveis às outras rotinas.
O uso do encapsulamento permite que a implementação de um objeto possa ser modificada sem afetar as aplicações que usam este objeto. Motivos para modificar a implementação de um objeto podem ser por exemplo melhoria de desempenho, correção de erros e mudança de plataforma de execução.

Herança

Herança é um mecanismo que, se for bem empregado, permite altos graus de reutilização de código. Do ponto de vista prático, pode ser entendido como sendo um conjunto de instâncias criadas a partir de um outro conjunto de instâncias com características semelhantes, e os elementos desse subconjunto herdam todas as características do conjunto original.

A idéia é fornecer um mecanismo simples (mas muito poderoso) para que se defina novas classes a partir de uma já existente. Assim sendo, dizemos que essas novas classes herdam todos os membros (propriedades+métodos) da classe-mãe; isto torna o mecanismo de herança uma técnica muito eficiente para construir, organizar e reutilizar código. Por isso, nas linguagens que não suportam esse mecanismo, as classes são criadas como unidades independentes: cada uma com seus membros concebidos do zero (sem vínculo direto com outras classes), o que torna o processo mais demorado e com códigos, às vezes, redundantes.
Esta capacidade de fatorar as propriedades comuns de diversas classes em uma superclasse pode reduzir dramaticamente a repetição de código em um projeto ou programa, sendo uma das principais vantagens da abordagem de orientação a objetos.

Polimorfismo

Na Informática, e em particular no universo da POO, é definido como sendo um código que possui “vários comportamentos” ou que produz “vários comportamentos”; em outras palavras, é um código que pode ser aplicado à várias classes de objetos. A mesma mensagem é enviada a objetos de classes distintas e eles poderão reagir de maneiras diferentes. Um método polimórfico é aquele que pode ser aplicado à várias classes de objetos sem que haja qualquer inconveniente.

É o caso por exemplo, do método Clear em Delphi®, que pode ser aplicado tanto à classe TEdit como à classe TListBox; nas duas situações o conteúdo desse objetos são limpos, mesmo pertencendo, ambos, à classes distintas.

Um método é uma implementação específica de uma operação para uma certa classe. Polimorfismo também implica que uma operação de uma mesma classe pode ser implementada por mais de um método. O usuário não precisa saber quantas implementações existem para uma operação, ou explicitar qual método deve ser utilizado: a linguagem de programação deve ser capaz de selecionar o método correto a partir do nome da operação, classe do objeto e argumentos para a operação. Desta forma, novas classes podem ser adicionadas sem necessidade de modificação de código já existente, pois cada classe apenas define os seus métodos e atributos.

Assim termino este post com vários conceitos novos e confusos para o leitor que está começando a se interessar pelo assunto, mas tudo fica melhor na prática, as coisas vão ficando mais clara no decorrer do curso.

material produzido com base em apostilas da faculdade sem autores explicitos.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s