Você está na página 1de 9

Conceitos de Orientação a

Objetos
Programação para Java
Universidade Católica de Brasília (UCB)
8 pag.

Document shared on www.docsity.com


Downloaded by: sadaruh-100 (sadaruh100.fochesatto@gmail.com)
1. Conceitos Básicos de Orientação a Objetos
Para termos êxito no desenvolvimento de sistemas orientados a objetos é
necessário que tenhamos em mente os principais conceitos relacionados a
esse assunto. Dessa forma, esta seção se propõe a dar uma explanação geral
a respeito do tema, começando com definição de objetos, classes até
Programação Orientada a Objetos (POO).

1.1. Objeto

Pensar em objetos é muito simples, mas defini-los é muito mais complicado do


que parece. Se você selecionar 10 livros que tratam do assunto, você verá 10
definições diferentes, porque cada autor dá uma definição, de acordo o seu
entendimento. Como eu não poderia ser diferente dos demais, também tenho a
minha definição de objetos que é a seguinte: um objeto é qualquer ente,
tangível ou intangível, do mundo real. Entenda-se por tangível como algo que
podemos manipular fisicamente, como o mouse que você está usando neste
momento, por exemplo, e intangível como sendo algo que existe, mas não
podemos manipular fisicamente, como é o caso da dívida contraída pelo João
da Silva no dia 15/01/2011, por exemplo.
Cabe aqui uma ressalva, não confunda classe de objetos (que é definida em
seguida) com objeto propriamente dito. Digo isso porque é comum
encontrarmos exemplos de classes sendo dados como objeto, como, é o caso
de chamar carro de objeto. Carro não é objeto, é uma classe de objetos, um
objeto dessa classe seria carro vermelho de placa AAA0000, da marca AA, ano
0000 e modelo mmmm. A seguir são apresentados alguns exemplos de
objetos.
Carro do João
Marca: BMW
Cor: Amarela
Ano: 00
Modelo: 00

Material elaborado pelo professor José Gonçalo dos Santos


(jose.goncalo.santos@gmail.com) - seu uso é permitido para qualquer fim,
desde que o seu autor seja citado

Document shared on www.docsity.com


Downloaded by: sadaruh-100 (sadaruh100.fochesatto@gmail.com)
Cachorro da Maria
Nome: Rex
Cor: Marrom
Idade (anos): 02
Raça: Vira-lata

Bola do Manoel
Marca: PB
Cor: Preta e branca
Uso: Futebol

Notebook da Marta
Marca: NONONO
Processador: AAA
Tamanho da tela: 14’’
Peso: 3,5 KG

Máquina da Cláudia
Marca: Nikon
Cor: Preta
Tipo: Digital
Tela visor: 4,5’’

Como pode ser observado nas figuras acima, todos os entes são casos
particulares, ou seja, tem características próprias. Quando nos referimos a
objetos, não estamos nos referindo ao gênero e sim a casos particulares. Por
exemplo, o cachorro da Maria é um exemplar de um tipo genérico cachorro, por
isso ele considerado um objeto.

Material elaborado pelo professor José Gonçalo dos Santos


(jose.goncalo.santos@gmail.com) - seu uso é permitido para qualquer fim,
desde que o seu autor seja citado

Document shared on www.docsity.com


Downloaded by: sadaruh-100 (sadaruh100.fochesatto@gmail.com)
1.2. Classe
Tendo em mente o conceito de objetos, podemos definir a classe, que nada
mais é do que um agrupamento de objetos cujas características sejam
semelhantes. Por exemplo, o João tem um carro que tem placa, ano, modelo e
marca; Marta tem um carro com todas essas características também.
Obviamente que os valores (placa=AAA000, para o carro do João e
placa=BBB1111 para o carro da Marta) dessas características são diferentes
para cada caso, mas estas (características) são iguais para ambos. Por isso,
podemos criar um gênero para agrupar todos esses objetos, a esse gênero
chamamos de classe, no nosso caso, carro.
Em resumo, o que tem que estar claro na sua mente é que uma classe, por si
só não é “consumível”, ou seja, não posso usar uma classe, mas sim um
exemplar desta. Veja uma classe como uma especificação do que
determinados objetos devem ter, dessa forma, eu não posso consumir essa
especificação e sim um objeto criado de acordo com esta. Como, por exemplo,
você não pode comer uma receita de bolo (classe), mas pode comer um bolo
feito (objeto) com as especificações constantes na receita. Ainda, você não
pode morar em uma planta de uma casa (classe), mas pode morar em uma
casa construída (objeto) de acordo com as especificações constantes na
nessa (planta da casa).
Note, no parágrafo anterior, o destaque para feito e construída, isso significa
dizer que a partir de uma classe eu posso construir (fazer) objetos, quantos eu
queira.

1.3. Atributos, Operações e Métodos


Um objeto tem características e comportamentos, em se tratando da orientação
objetos, dizemos que essas características são atributos e os comportamentos
são as operações. Tendo em mente que uma classe é uma especificação do
que um objeto deve ter para pertencer a esse (classe), podemos dizer que a
classe define que atributos os objetos pertencentes a ela deve ter e como ele
deve se comportar. Antes de detalhar mais o que é atributo e o que é
operação, quero deixar claro que operação e métodos não são as mesmas
Material elaborado pelo professor José Gonçalo dos Santos
(jose.goncalo.santos@gmail.com) - seu uso é permitido para qualquer fim,
desde que o seu autor seja citado

Document shared on www.docsity.com


Downloaded by: sadaruh-100 (sadaruh100.fochesatto@gmail.com)
coisas, digo isso porque nos livros que tratam do tema, sempre vemos a
clássica definição de que “uma classe é composta de atributos e métodos”. A
seguir vou detalhar cada um desses conceitos para que você não confunda
mais esses termos.
1.3.1. Atributos
Atributos são características dos objetos (não da classe, pois a classe
especifica as características que os objetos devem ter), como, por exemplo, a
máquina da Cláudia tem a marca Nikon, cor preta e tipo digital. Pense assim, a
classe máquina fotográfica especificou que um objeto pertencente a ela deveria
ter esses atributos, por isso esse exemplar (máquina da Cláudia) possui tais
características.
1.3.2. Operações
As operações definem o que os objetos devem fazer, como, por exemplo,
andar, mover, imprimir. Note que neste momento estamos apenas dizendo o
que o objeto tem que fazer, mas dizemos como ele deve executar essa ação.
Seria como dizer a um veículo que ele precisa se mover, mas, como ele irá
fazer isso, a operação não. Em resumo, uma operação diz o que o objeto deve
fazer, porém, não diz como ele deve fazer isso.
1.3.3. Métodos
Os métodos são as formas como os objetos pertencentes a determinadas
classes irão executar determinada operação. Como, por exemplo, uma
operação calcular imposto (note que as operações são verbos de ação) tem
como método cálculos baseados na tabela de alíquota da receita federal.
Dessa forma, um método diz como um objeto deve executar a operação
definida pela classe.
1.4. Encapsulamento
Na orientação a objetos encapsulamento significa ocultação de detalhes de
implentação dos usuários de determinados objetos, em outras palavras,
estamos protegendo nossos atributos contra uso indevido. Vamos pegar o seu
carro como exemplo, quando você o liga, você nem sabe (e nem quer saber) o
que acontece para que ele dê a partida. Na verdade, você quer apenas a
funcionalidade que esse pode lhe oferecer, mas, como você não tem acesso às

Material elaborado pelo professor José Gonçalo dos Santos


(jose.goncalo.santos@gmail.com) - seu uso é permitido para qualquer fim,
desde que o seu autor seja citado

Document shared on www.docsity.com


Downloaded by: sadaruh-100 (sadaruh100.fochesatto@gmail.com)
partes internas do motor, o objeto (no caso, carro) veio provido de uma
interface para que o usuário (no caso, você) se comunicasse com essas partes
oculta. Na programação orientada a objetos acontece a mesma coisa,
encapsulamos detalhes de implementação e oferecemos uma interface para a
comunicação entre o objeto e os usuários deste.
Na programação Java quando definimos um atributo ou método, nós
escolhemos como será a sua visibilidade (como faremos o encapsulamento),
que são de quatro tipos: público, protegido, de pacote ou privado. Essa escolha
é feita de acordo a necessidade, mas, para isso é necessário se conhecer qual
a visibilidade de cada um dos tipos apresentados, isso é feito a seguir.
1.4.1. Público (public)
Quando definimos um atributo (ou operação) como público, queremos dizer
que ele é visível (acessível) por qualquer objeto de qualquer classe e em
qualquer pacote, ou seja, é a visibilidade mais ampla que pode ser oferecida a
um usuário da classe. Este tipo de visibilidade serve tanto para classe quanto
para método e atributos.
1.4.2. Protegido (protected)
Diferente da pública, esta visibilidade só se aplica a atributos e métodos.
Quando um atributo (ou operação) é protegido, no Java, ele é visível por
objetos das subclasses (que estão dentro do pacote) ou mesmo por objetos de
outras classes que se encontram dentro do mesmo pacote.
1.4.3. De pacote (default)
Os métodos ou atributos marcados com este tipo de visibilidade são acessíveis
por todos os objetos pertencentes a todas as classes que se encontram dentro
do mesmo pacote. Quando queremos que nossos recursos sejam “de pacote”,
não usamos nenhum tipo de modificador (public, protected ou private).
1.4.4. Privado (private)
Este tipo de visibilidade é o mais restritivo possível, pois recursos privados só
são acessíveis por objetos da mesma classe na qual eles foram definidos. É
recomendável que todos os atributos de nossas classes sejam do tipo privado,
pois não queremos que sejam modificados diretamente por outros objetos
pertencentes a outras classes. Quando queremos que uma classe reutilizável,

Material elaborado pelo professor José Gonçalo dos Santos


(jose.goncalo.santos@gmail.com) - seu uso é permitido para qualquer fim,
desde que o seu autor seja citado

Document shared on www.docsity.com


Downloaded by: sadaruh-100 (sadaruh100.fochesatto@gmail.com)
normalmente, definimos seus atributos como privado e suas operações como
pública para ter acesso externo.
1.5. Herança
Antes de falar de herança, é necessário falar de subclasse que é uma classe
mais especializada, ou seja, ela tem uma responsabilidade mais específica que
a sua classe ancestral, mas no mundo real uma subclasse pode ter outras
subclasses.
Para esclarecer melhor isso, vamos pegar a ensino brasileiro como uma classe
chamada ensino que tem as subclasses ensino superior, ensino médio e
ensino fundamental. Note que a classe ensino superior, que é uma subclasse
de ensino, também tem as subclasses ensino de graduação e pós-graduação.
Nós podemos ir especializando essas classes até chegar ao nível mais baixo
de especialidade. Com essa especialização formamos uma hierarquia de
classe, onde as classes que estão acima na hierarquia são chamadas de
superclasse das classes inferiores, conforme ilustra a Figura 2.1.

Figura 2.1: Hierarquia de classe.


O exemplo da Figura 2.1 mostra que a classe EnsinoSuperior é subclasse de
Ensino, porém, é superclasse de Graduacao. Dessa forma, o conceito
superclasse e subclasse é relativo, um subclasse pode ser superclasse. No
Java, existe uma classe (Object) que não superclasse, ou seja, ela não é
subclasse de ninguém e é superclasse de todas as classes Java que criamos.
Quando uma classe é subclasse de outra, ela herda, obrigatoriamente,
TODOS os seus recursos (atributos e operações). Isso quer dizer que uma
herança é somativa, isto é, a subclasse pode ter mais atributos que a
superclasse, mas, nunca, pode ter menos. A figura 2.2 mostra que a subclasse
Material elaborado pelo professor José Gonçalo dos Santos
(jose.goncalo.santos@gmail.com) - seu uso é permitido para qualquer fim,
desde que o seu autor seja citado

Document shared on www.docsity.com


Downloaded by: sadaruh-100 (sadaruh100.fochesatto@gmail.com)
Terrestre tem o atributo qtdEixo, isto equivale dizer que ela tem 3 atributos
(dois herdados da classe Transporte mais um próprio) enquanto Aquatico e
Aereo tem apenas os dois herdados de Transporte. Além disso, as subclasses
Automovel, Onibus e CarroAnfibio tem 3 atributos também.
Em suma, herança é a capacidade que um objeto de uma subclasse tem de
herdar os recursos do objeto da superclasse.

Figura 2.2: Hierarquia de classe, com herança múltipla.

1.5.1. Herança múltipla


Às vezes temos subclasses que são herdeiras de mais de uma classe ao
mesmo tempo, como é o caso de CarroAmfibio da Figura 2.2. Nesse caso,
dizemos que houve uma herança múltipla. Infelizmente o Java não permite
implemetar esse tipo de herança, mas existe uma solução para esse problema,
que é o uso de interface, que será apresentada mais à frente.
1.6. Classe abstrata
Observe a Figura 2.2 e responda à pergunta: você anda de transporte ou anda
de automóvel ou ônibus? É óbvio que resposta seria: “ando de automóvel”. Por
que não andamos de transporte? Na verdade, quando estamos desenvolvendo
sistemas, precisamos criar modelos que retratam a realidade, por isso
precisamos usar alguns mecanismos para que isso seja possível, e um dos
mecanismos é o uso de classes abstratas.
Classes abstratas são aquelas que não criamos objetos dela porque não tem
sentido (no Java significa não é possível), isso quer dizer que criamos objetos
de suas subclasses concretas. No caso da Figura 2.2, podemos construir um

Material elaborado pelo professor José Gonçalo dos Santos


(jose.goncalo.santos@gmail.com) - seu uso é permitido para qualquer fim,
desde que o seu autor seja citado

Document shared on www.docsity.com


Downloaded by: sadaruh-100 (sadaruh100.fochesatto@gmail.com)
Automovel, Onibus e CarroAnfibio, mas não podemos construir um Terrestre ou
mesmo um Transporte porque não faz sentido.
Resumindo, uma classe abstrata serve para tornar o nosso modelo de sistema
mais próximo da realidade. Para construirmos um objeto que tenham os
recursos especificados nela, precisamos ter uma classe concreta que seja
herdeira dela.
A hierarquia entre classes é do tipo “é-um”, como é o caso do ônibus que é um
transporte terrestre, que também é um transporte, mas em termos concretos, o
objeto utilizado por nós é o ônibus.
1.7. Polimorfismo
Observe que a operação mover aparece nas quatro classes da hierarquia
acima, por que essa repetição já que as subclasses herdam os recursos da
superclasse? Na verdade, o método (como será feito) mover difere de cada
meio de transporte. Assim, cada um cria o seu método para a mesma operação
e quem define qual método será executado é o tipo de objeto que está
acessando a operação. Por exemplo, o método mover de transporte aéreo é
“voar”, de transporte terrestre é rodar e de transporte aquático é flutuar, dessa
forma, o objeto é quem determina qual método será usado, se for objeto
automóvel, o método executado é rodar e se for navio, o método executado é
flutuar, mas todos eles estão se movendo. A isso damos o nome polimorfismo,
ou seja, várias formas de implementar a mesma operação.

Material elaborado pelo professor José Gonçalo dos Santos


(jose.goncalo.santos@gmail.com) - seu uso é permitido para qualquer fim,
desde que o seu autor seja citado

Document shared on www.docsity.com


Downloaded by: sadaruh-100 (sadaruh100.fochesatto@gmail.com)

Você também pode gostar