Você está na página 1de 35

Um mundo orientado a objetos

Professor Eduardo Henrique de Oliveira


Um mundo orientado a objetos
• O ser humano, no início de sua infância, aprende
e pensa de uma maneira orientada a objetos,
representando o seu conhecimento por meio de
abstrações e classificações.
• Continuamos fazendo isso mesmo quando
adultos mas desenvolvemos outras técnicas que
também utilizamos em paralelo.
Um mundo orientado a objetos
• A orientação a objetos, é um paradigma de
análise, projeto e programação de sistemas de
software baseado na composição e interação
entre diversas unidades de software chamadas
de objetos.
• O termo orientação a objetos pressupõe uma
organização de software em termos de coleção
de objetos discretos incorporando estrutura e
comportamento próprios.
Um mundo orientado a objetos
• O enfoque de modelagem por objetos, vê o mundo
como uma coletânea de objetos que interagem
entre si, apresentam características próprias que
são representadas pelos seus atributos (dados) e
operações (métodos ou serviços).
• Resumidamente, a mudança de enfoque (entre
estruturado e orientado a objetos) é justificada
pelo fato de que objetos existem na natureza
muito antes de haver qualquer tipo de aplicação
deles pelo negócio.
Um mundo orientado a objetos
• Um objeto é uma entidade do mundo real que
tem uma identidade.
• Objetos podem representar entidades concretas
(um arquivo de música, uma bicicleta) ou
entidades conceituais (uma estratégia de jogo,
uma regra de um firewall).
Um mundo orientado a objetos
• Cada objeto ter sua identidade significa que dois
objetos são distintos mesmo que eles
apresentem exatamente as mesmas
características.

Bicicleta do João Bicicleta da Maria


Um mundo orientado a objetos
• Embora objetos tenham existência própria no
mundo real, em termos de linguagem de
programação um objeto necessita um
mecanismo de identificação.
• Esta identificação do objeto deve ser única,
uniforme e independente do conteúdo do objeto.
Um mundo orientado a objetos
• A estrutura de um objeto é representada em
termos de atributos.

Marca.
Modelo.
Cor.
Nº marchas.
Tamanho.
Um mundo orientado a objetos
• O comportamento de um objeto é representado
pelo conjunto de operações (métodos) que
podem ser executadas sobre o objeto.
Pedalar.
Frear.
Virar para esquerda.
Virar para direita.
Empinar.
Um mundo orientado a objetos
• Objetos com a mesma estrutura e o mesmo
comportamento são agrupados em classes.

Classe Bicicleta
Um mundo orientado a objetos
• Uma classe é uma abstração que descreve
propriedades (atributos e operações)
importantes para uma aplicação e simplesmente
ignora o resto. Marca.
Modelo.
Cor.
Nº marchas.
Tamanho.
Classe Bicicleta
Pedalar.
Frear.
Virar para esquerda.
Virar para direita.
Empinar.
Um mundo orientado a objetos
• Cada classe descreve um conjunto de objetos
individuais.
• Cada objeto é dito ser instância de uma classe.

Bicicleta do João
(Instância da classe Bicicleta) Motocicleta do João
(Instância da classe Motocicleta)
Um mundo orientado a objetos
• Cada instância de uma classe tem seus próprios
valores para cada atributo (estado), mas dividem
os nomes dos atributos e métodos com as outras
instâncias da classe.
Marca: Caloi Marca: Caloi
Modelo: Cross Modelo: Ceci
Cor: Azul Cor: Rosa
Nº marchas: 1 Nº marchas: 21
Bicicleta do João Tamanho: Aro 20
Bicicleta da Maria Tamanho: Aro 24
(Instância da classe Bicicleta) (Instância da classe Bicicleta)
Um mundo orientado a objetos
• Três princípios norteiam o paradigma da
orientação a objeto:
▫ Polimorfismo.
▫ Herança.
▫ Encapsulamento.
Um mundo orientado a objetos
• Polimorfismo: a palavra polimorfismo vem do
grego e significa que pode tomar várias formas.
• Encontramos geralmente três tipos de
polimorfismo:
▫ O polimorfismo ad hoc.
▫ O polimorfismo paramétrico.
▫ O polimorfismo de herança.
Um mundo orientado a objetos
• Polimorfismo ad hoc: permite ter funções do mesmo
nome, com funcionalidades similares, em classes distintas.
• O polimorfismo ad hoc permite assim definir operadores
cuja utilização será diferente de acordo com o tipo dos
parâmetros que lhes são passados. É por isso possível, por
exemplo, sobrecarregar o operador + e fazê-lo realizar
ações diferentes conforme se trate de uma operação entre
duas totalidades (adição) ou entre duas cadeias de
caracteres (concatenação).
Um mundo orientado a objetos
• Polimorfismo paramétrico: representa a
possibilidade de definir várias funções do
mesmo nome mas possuindo parâmetros
diferentes (em número e/ou tipo).
• O polimorfismo paramétrico torna assim
possível a escolha automática do bom método a
adotar em função do tipo de dado passado em
parâmetro.
Um mundo orientado a objetos
• Assim, pode-se por exemplo definir vários métodos
homônimos adição( ) efectuando uma soma de valores.
▫ O método int addition (int, int) poderá dar a soma de duas
totalidades
▫ O método float addition (float, float) poderá dar a soma de dois
flutuantes
▫ O método char addition (char, char) poderá definir à vontade do
autor a soma de dois caracteres etc.
• Chama-se assinatura ao número e tipo (estático) dos
argumentos de uma função. É por conseguinte a
assinatura de um método que determina qual será
chamado.
Um mundo orientado a objetos
• Polimorfismo de herança: a possibilidade de
chamar o método de um objeto sem estar
preocupado com o seu tipo intrínseco.
• Isto permite fazer abstração dos detalhes das
classes especializadas de uma família de objeto,
mascarando-o com um interface comum (que é a
classe básica).
Um mundo orientado a objetos
• Imagine um jogo de xadrez que comporta os
objetos rei, rainha, bispo, cavalo, torre e peão,
herdando cada um do objeto peça.
Um mundo orientado a objetos
• O método movimento( ) poderá, graças ao
polimorfismo de herança, efetuar o movimento
adequado em função da classe do objeto
remetido no momento da chamada.

Rainha.movimento( ) Bispo.movimento( )
Peao.movimento( )
Um mundo orientado a objetos
PEÃO movimento( )

CAVALO movimento( )

TORRE movimento( )
PEÇA
BISPO movimento( )

movimento( ) RAINHA movimento( )

REI movimento( )

(Polimorfismo de herança)
Um mundo orientado a objetos
• A herança (em inglês inheritance) é um princípio
próprio à programação orientada para o objeto,
permitindo criar uma nova classe a partir de
uma classe existente.
• O nome “herança” (que pode às vezes ser
chamada "derivação de classe") provém do fato
de a classe derivada (a última classe criada)
conter os atributos e os métodos da sua
superclasse (a classe da qual deriva).
Um mundo orientado a objetos
• O interesse essencial da herança é poder definir
novos atributos e novos métodos para a classe
derivada, que vêm acrescentar-se aos herdados.
• Por este meio, cria-se uma hierarquia de classes
cada vez mais especializadas.
• Isto tem a vantagem essencial de não ter de
partir do zero quando se quer especializar uma
classe existente.
Um mundo orientado a objetos
• Hierarquia de classes: representação da relação
de parentesco que existe entre diferentes classes.
Um mundo orientado a objetos
• Inicia-se por uma classe geral chamada
superclasse (às vezes classe básica, classe
parente, classe antepassado, classe mãe ou classe
pai, as metáforas genealógicas são numerosas).
• Seguidamente, as classes derivadas (classe filha
ou sub-classe) tornam-se cada vez mais
especializadas.
Um mundo orientado a objetos
• Assim, pode-se geralmente exprimir a relação
que vincula uma classe filha à sua mãe pela frase
“é um” (do inglês “is a”).
Classe pai

Classe filha
Um mundo orientado a objetos
• Herança múltipla: possibilidade herdar uma
classe de duas superclasses.
Um mundo orientado a objetos
• Encapsulamento: é um mecanismo que consiste
em reunir os dados e os métodos numa estrutura
escondendo a implementação do objeto, ou seja,
impedindo o acesso aos dados por um meio
diferente dos serviços propostos.
• O encapsulamento permite por conseguinte
garantir a integridade dos dados contidos no
objeto.
Um mundo orientado a objetos
• O utilizador de uma classe não tem necessariamente de
saber como estão estruturados os dados no objeto, isto
significa que um utilizador não tem de conhecer a
aplicação.
• Assim, proibindo o utilizador de alterar diretamente os
atributos, e obrigando-o a utilizar as funções definidas
para alterá-los (chamadas interfaces), podemos garantir
a integridade dos dados (poderá por exemplo garantir
que o tipo dos dados fornecido está conforme ao
desejado, ou ainda que os dados se encontram no
intervalo esperado).
Um mundo orientado a objetos
• O encapsulamento permite definir níveis de
visibilidade dos elementos da classe. Estes níveis
de visibilidade definem os direitos de acesso aos
dados e operações conforme este acesso seja por
um método da própria classe, de uma classe
herdeira, ou de uma classe qualquer.
Um mundo orientado a objetos
• Existem três níveis de visibilidade:
▫ pública: as funções de todas as classes podem
acessar os dados ou os métodos de uma classe definida
com o nível de visibilidade pública. Trata-se de mais
baixo nível de proteção de dados
▫ protegida : o acesso aos dados está reservado às
funções das classes herdeira, ou seja, às funções
membros da classe, bem como as classes derivadas
▫ privada: o acesso aos dados é limitado aos métodos
da própria classe. Trata-se do nível de proteção dos
dados mais elevado.
Um mundo orientado a objetos
• Abstração OO: Habilidade mental que permite aos
seres humanos visualizarem os problemas do mundo
real com vários graus de detalhe, dependendo do
contexto corrente do problema. [Rumbaugh]
• Abstração é a habilidade de concentrar nos aspectos
essenciais de um contexto qualquer, ignorando
características menos importantes ou acidentais. Em
modelagem orientada a objetos, uma classe é uma
abstração de entidades existentes no domínio do
sistema de software.
Atividade prática
Para a próxima aula:
Relacionar 10 (dez) objetos com os seus atributos e operações.
Identificar entre quais há uma relação de herança e montar o
diagrama de hierarquia de classes.
Dúvidas ?

Você também pode gostar