sexta-feira, 2 de maio de 2014

Conceitos de Orientação a Objetos

O que é a “Orientação a Objetos”?
Antes de descrevermos os conceitos de orientação a objetos vamos entender o que é esse conceito.
A orientação a objeto (vamos utilizar a abreviação OO) é um paradigma de programação, ou seja, é um dos muitos métodos que existem de se codificar um programa de computador.
É importante saber que a OO não é um paradigma novo, nem o mais atual; no entanto, é um método de programação bastante eficaz e amplamente utilizado nos sistemas atuais.
Podemos entender a OO como a criação de objetos (subdivisões do sistema) que tem características próprias e podem interagir com outros objetos dentro e fora do sistema.
A OO ganhou grande força e popularidade conforme os sistemas modernos foram se tornando mais complexos, isso se deve a dois fatos importantes, a OO permite uma maior proximidade da linguagem computacional com o mundo real (através de seus objetos) e uma grande capacidade de reaproveitamento de código (através de conceitos como Herança e Encapsulamento), gerando maior produtividade na concepção de sistemas.
A OO tem alguns princípios fundamentais que a caracterizam e a tornam um paradigma poderoso no desenvolvimento de sistemas, são eles:
- Abstração;
- Herança;
- Encapsulamento;
- Polimorfismo.

Abstração:
Trata-se da capacidade de entender problemas do mundo real, identificar os possíveis objetos pertencentes a esse problema e criar esses objetos dentro do sistema através da OO.
A esse processo de entendimento do problema e transformação em objetos de sistema damos o nome de abstração, trata-se de uma técnica necessária a ser dominada pelo projetista de sistemas que utiliza esse paradigma.

Herança:
Uma das grandes forças da OO é a capacidade de herança entre seus objetos, para entender melhor a herança vamos explicar brevemente outros 3 conceitos: Classe, Atributo e Método.
Uma classe é um modelo de um objeto, ou seja, é um projeto contendo todas as características para a criação do objeto no sistema.
Podemos exemplificar uma classe como sendo uma receita de bolo enquanto o objeto derivado dessa classe será o próprio bolo.
Uma classe tem atributos e métodos que a caracterizam, os Atributos também podem ser chamados de propriedades ou campos, que armazenarão os dados referente a classe, no exemplo acima poderíamos ter atributos que seriam os ingredientes do bolo.
Métodos são funções da classe, ou seja, capacidades que o objeto originário dessa classe terá.
Um objeto carro por exemplo pode conter métodos (funções) como: acelerar, frear, etc.
Então, sabemos que existem Classes, que são modelos de objetos e que esses modelos possuem Atributos e Métodos, podemos agora entender o processo de herança.
A herança é a capacidade de transmitir todas as informações contidas em uma determinada classe (classe mãe) para uma outra classe (classe filha), gerando assim uma economia de recursos para a programação da classe filha.
Vamos recorrer novamente a um exemplo para fixar o entendimento.
Imaginemos uma classe chamada automóvel e outra chamada caminhão.
Imaginemos que várias características e funções dessas classes sejam similares.
Podemos então decidir criar uma super classe (classe mãe) chamada veículo que contenha os atributos e métodos comuns em ambas, e o processo de herança da OO cuidará para que esses atributos e métodos sejam transmitidos para a classe filha.

Encapsulamento:
O conceito de encapsulamento é outra grande vantagem da OO, trata-se do fato de não precisarmos ter conhecimento a programação interna de uma classe/objeto para utilizá-la; ou seja, se existir uma classe em nosso sistema que executa determinada ação e armazena determinadas informações que precisamos em outra parte do sistema, podemos utilizá-la sem nos preocuparmos com a sua codificação.
Por exemplo, imagine que em um sistema de vendas tenhamos uma Classe chamada Impostos, essa classe cuida de diversos cálculos tributários que atendem a nossa complicada legislação.
Podemos no momento de uma venda, invocar essa classe através da instância de um objeto, e acionar suas funções de cálculo para retornar os impostos que desejamos.
Não precisamos ter nenhum conhecimento sobre a codificação interna dessa classe, apenas precisamos saber quais funções ela tem e como posso utilizá-las.
Podemos traçar um paralelo com um automóvel, por exemplo, a grande maioria das pessoas não faz nenhuma ideia de como um automóvel funciona, trata-se de um objeto encapsulado, mas todos sabemos fazer uso das suas funcionalidades, dirigindo o automóvel para onde desejamos ir.

Polimorfismo:
Polimorfismo é a capacidade de alterarmos o funcionamento de algo que tenha a mesma nomenclatura dentro de classes diferentes.
Por exemplo, suponha que tenhamos a classe Veículo e nessa classe exista um método exibirVelocidade.
O método exibirVelocidade da classe veículo, cada vez que é acionado, retorna para o sistema a velocidade atual que consta no atributo velocidade seguido do texto “Km/h” (Kilometros por hora).
Foi criada uma classe automóvel que herda a classe veículo, mas o sistema a será implantado em uma revenda de veículos nos Estados Unidos, surge então a necessidade de transformar a exibição da velocidade em “mph” (milhas por hora).
O programador responsável pelo projeto decide então, criar um novo método na classe automóvel com o mesmo nome da super classe, exibirVelocidade, só que esse novo método converte a velocidade e agrega o texto “mph”.
Portanto, temos dois métodos com o mesmo nome, e o método da classe filha passa a ser o padrão para os objetos criados a partir dela, sem a interferência na classe mãe e outras classes que possam herdar as suas informações.
A esse procedimento damos o nome de Polimorfismo.
Embora em um primeiro momento pareça difícil entender a aplicabilidade do polimorfismo, podemos dizer que em sistemas do mundo real existem centenas/milhares de classes e muitas vezes desejamos modificar o funcionamento de um método para um uso específico, se alterássemos a classe mãe teríamos uma implicação em todo o sistema, mas com o polimorfismo podemos usar a herança e efetuar modificações especializadas.

REFERÊNCIA BIBLIOGRÁFICA

UML 2.0 – Do Requisito à Solução 4ª edição – Adilson da Silva Lima – Capítulo 1 – Conceitos Básicos da Orientação a Objetos (pág. 20 a 28).

Segue parte do texto abaixo (Intitulado Resumo da pág. 27 e 28)
- Objetos são coisas do mundo real que descobrimos estudando suas características (atributos) e seu comportamento (ações).
- Abstração é o processo de separar mentalmente os objetos observados e estudados da realidade.
- Domínio da aplicação é o modelo obtido dentro de um contexto de negócio após o estudo e a observação da realidade.
- Classe é a definição dos atributos e do comportamento de um conjunto de objetos individuais em qualquer contexto.
- Cada objeto pertencente a uma classe é denominado instância de classe.
- Atributos são a representação das propriedade ou elementos de dados de um objeto. Em algumas linguagens, são denominados de variáveis de instância de classe ou membros de dado. Possuem algumas características importantes, como visibilidade (escopo), nome, tipo de dado e valor inicial.
- Operações são recursos de uma classe que representam um comportamento ou serviço que ela suporta.
- Os objetos interagem e comunicam-se por meio de mensagens, que identificam os métodos a serem executados no objeto receptor.
- Uma operação possui visibilidade, nome, lista de argumentos e tipo de retorno. O conjunto dessas características é denominado assinatura da operação.
- A visibilidade pode ser pública (acessível por outras classes), privada (acessível somente pela própria classe), protegida (acessível somente pela própria classe e suas subclasses) e de pacote (acessível somente pelas classes do pacote que a contém).
- Herança é o mecanismo em que uma classe herda atributos e comportamento de sua classe imediatamente superior e também pode possuir atributos e operações (ações) específicos dela mesma.
- Polimorfismo é a capacidade de objetos diferentes possuírem operações com o mesmo nome e a mesma lista de argumentos, mas que executem tarefas de formas diferentes.
- Encapsulamento, ou ocultação de informações, é uma técnica que consiste em separar aspectos externos dos internos da implementação de um objeto – os detalhes ficam ocultos aos demais e dizem respeito apenas ao próprio objeto.
- A orientação a objetos preocupa-se com o que um objeto é e não em como ele deve ser utilizado. Antes de desenvolver orientado a objetos, é preciso pensar orientado a objetos.

VÍDEOS DE REFERÊNCIA

Assistir primeiros 20 minutos!
(teoria básica da OO) 

EXERCÍCIO TEÓRICO
(Instituto Federal de Educação, Ciência e Tecnologia – Fernanda Farinelli)

EXERCÍCIOS PARA PRATICAR

Os exercícios demonstrados nesse tópico estão disponíveis em 2 PDFs que recomendamos fortemente e podem ser baixados gratuitamente no Site da Editora Campus abaixo.
A primeira lista traz 330 exercícios de orientação a objetos usando Java e a segunda lista traz 85 exercícios matemáticos para aplicação em Java.

(Cadastre-se e faça o download do material complementar)

Alunos -
Daniel Rodrigues - RM 71693
Jeisiel Silva - RM 71869
Sandro Almeida - RM 72233




2 comentários: