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
Gostei bastante das explicações de vocês!!!
ResponderExcluirAtt,
Luana
Muito bom.... principalmente a lista de exercícios.
ResponderExcluirParabéns!!!