Você está na página 1de 92

PROGRAMAÇÃO

ORIENTADA A OBJETOS
ESPECIALIZAÇÃO DE ENGENHARIA DE SOFTWARE
PROGRAMAÇÃO
ORIENTADA A OBJETOS
Programação
Orientada a Objetos
• Foco nos dados (objetos) do sistema, não nas funções

• Estruturação do programa é baseada nos dados, não


nas funções

• As funções mudam mais do que os dados


Objeto conta bancária
Estados do Objeto Conta
Bancária
Orientação a Objetos
• A ideia é Abstrair
• abstrair (abs-tra-ir)
• Verbo transitivo cujo significado é:
• Separar. V. i. Considerar separadamente. V. p.
Concentrar-se. Alhear-se.
• Em outras palavras, captar a essência de um
problema ou contexto e considerar o que
realmente importa.

6
Objetos
• Objetos são a chave para entender a OO;
• Se olharmos em nossa volta, encontraremos vários
exemplos de objetos reais:
• Celular;
• Mesa;
• Computador;
• Janela;
• Lâmpada;
• Etc.

7
Objetos
• Comportamento + características

• Métodos + atributos

• Estado (valores de atributos) encapsulado

8
Objetos
• Os objetos reais possuem duas características
• Estado (Valor dos Atributos);
• Comportamento.
• Por exemplo, um cachorro
• Estado: nome, cor, raça, fome…
• Comportamento: latindo, abanando o rabo, comendo…
• Uma bicicleta
• Estado: marcha atual, freio, rotação…
• Comportamento: mudando de marcha, freando…

9
Objetos
• Quais são as características de uma lâmpada?
• Quais são as características de um projetor?
• E como tratamos a lâmpada do projetor?
• Objetos variam em complexidade
• Porém, os detalhes relevantes dependem do contexto;
• Esta análise de características é traduzível em orientação
a objetos.

10
Objetos

Métodos Atributos
(Comportamento) (Estado)

11
Atributos e Métodos
• Um objeto de software é conceitualmente similar
aos objetos reais
• Objetos armazenam seu estado em atributos
• Correspondentes às variáveis em programação
estruturada.
• Objetos expõem seu comportamento através de
métodos
• Correspondentes às funções em programação
estruturada.

12
Objetos

45 km/h
Mudança
de Marcha
90 rpm

Freio

Rotações

3a marcha
13
Objetos
• Empacotar o código em objetos individuais fornece:
• Modularidade
• Objetos são independentes.
• Ocultação de informação
• Os detalhes da implementação de um objeto permanecem
ocultos.
• Reuso
• Objetos podem ser reutilizados em diferentes programas.
• Plugabilidade
• Objetos podem ser substituídos em um programa, como peças.

14
Encapsulamento de Dados
• Os métodos definem o estado interno de um objeto
• E servem como mecanismo primário de comunicação
entre objetos.
• Esconder o estado interno e requerer que toda
interação seja feita através de métodos é chamado
de encapsulamento de dados
• Um princípio fundamental de OO.

15
Encapsulamento de Dados
• Através do encapsulamento de dados, evitamos
alterações acidentais nos atributos de um objeto
• Caso haja alguma alteração nos atributos, temos certeza
de qual método foi utilizado.
• A ideia é proteger informações de uma parte da
aplicação das demais partes da aplicação
• Alterações pontuais podem ser feitas no código sem
introdução de bugs adicionais em trechos que não tem
relação com o trecho alterado.

16
Encapsulamento de Dados
• Mantendo o estado e provendo métodos para
alterar o estado, quem determina como o mundo
pode interagir com o objeto é o próprio objeto
• O objeto está no controle;
• Por exemplo, não poderíamos passar a 7a marcha se o
objeto só possuir 6 marchas;
• Não é o que ocorre no mundo real?

17
Classes
• No mundo real, encontramos vários objetos de um
mesmo tipo
• Deve haver centenas de outras bicicletas, do mesmo
fabricante e modelo;
• Cada bicicleta pode ser produzida a partir do mesmo
conjunto de projetos e conter as mesmas peças.

18
Classes
• Em orientação a objetos, dizemos que um objeto é
uma instância da classe de objetos conhecida
como Bicicleta;
• Uma classe é o projeto a partir do qual objetos
individuais são criados
• Ela define os atributos e os métodos correspondentes
aos seus objetos.

19
Classes
• Agrupamento de objetos do mesmo tipo

20
Classes
• Para definir uma classe é necessário abstrair um
conjunto de objetos com características similares;
• Outros possíveis membros de uma classe são:
• Construtores
• Define as operações a serem realizadas quando um objeto é
criado.
• Destrutores
• Define as operações a serem realizadas quando um objeto é
destruído, como por exemplo, fechar um arquivo.

21
Construtor
• Construtores são métodos especiais utilizados para
inicializar objetos, podendo inicializar os valores
dos seus atributos.
• Não apresentam um tipo de retorno explícito e
possuem o mesmo nome da classe.
• Cada classe pode ter um ou mais construtores
sobrecarregados (overloading - sobrecarga),
variando-se na quantidade e no tipo dos
parâmetros fornecidos.

22
Tipos de Classes
• Classes Abstratas
• Classes que não utilizaremos para instanciar objetos;
• Existem apenas para servir de molde para outras classes
• Para que outras classes herdem interface e/ou implementação.

• Classes Concretas
• Podem ser instanciadas
• Ou seja, podemos criar objetos.

23
Instâncias e Classes
• Os objetos são instâncias de uma classe. Sendo
assim, vários objetos de um mesmo tipo ou classe
podem ser criados e cada instância terá uma cópia
de todos os atributos declarados na classe.

• As instâncias de uma classe são, portanto,


independentes entre si.
• A modificação do campo saldo de uma instância da
classe Conta não afeta o valor do mesmo campo em
outras instâncias da classe.
Instâncias e Classes
• Então, como compartilhar uma informação entre todas as
instâncias de uma classe?

• Uma forma é declarando essa informação como variável


estática.

• Os atributos estáticos de uma classe são compartilhados


entre todas as instâncias do objeto. Caso algum objeto
altere o valor do atributo, todos os demais terão acesso à
essa nova informação.
Instâncias e Classes
• Atributos estáticos são conhecidos como atributos
da classe e não precisa de uma instância da classe
pra ser acessado.

• Os atributos da instância são os atributos


particulares de cada objeto e precisam de um
objeto para serem manipulados.
Instâncias e Classes
• Métodos também podem ser estáticos.
• Métodos devem ser estáticos quando:
• Somente manipulam atributos estáticos;
• Implementam rotinas que não precisam de atributos;
• Exemplo: Fatorial;

• Os métodos estáticos também podem ser utilizados


sem a criação da instância.
Instâncias e Classes
• Se um método for chamado diretamente a partir do
método main, este método deverá ser
obrigatoriamente declarado como estático, já que o
método main é estático.

• Se o método main for acessar atributos/campos


declarados na sua classe, mas fora do método
main, estes atributos/campos também deverão ser
estáticos.
Alias de Objetos
• Quando dois objetos referem-se ao mesmo objeto.
Em outras palavras, este objeto tem dois nomes,
Objeto1 e Objeto2.

• Quando duas variáveis são alias, todas as mudanças


que afetam uma variável também afetara a outra.
Relacionamento
Entre Classes
Relacionamentos Entre Classes
• Diferentes classes podem se relacionar entre si,
criando/compondo novos tipos de objetos
• Um determinado objeto pode ser basear em um outro e
adicionar informações, estendendo a classe
• Pode também se basear em dois ou mais tipos diferentes de
objetos.
• É possível também que um objeto “utilize” outro tipo de
objeto
• Um projetor não utiliza uma lâmpada?

31
Relacionamentos Entre Classes
• Os relacionamentos entre classes são:
• Associação;
• Composição;
• Agregação;
• Herança;
• Dependência.

32
Associação

33
Associação

34
Associação
• Uma Associação é o mecanismo pelo qual um
objeto utiliza os recursos de outro
• Pode ser uma associação simples
• “Usa um”;
• “Uma Pessoa usa um computador”.
• Ou um acoplamento
• “Parte de”;
• “O teclado é parte de um computador”.

35
Associação
• A associação ocorre quando uma classe possui
atributos do tipo de outra classe.
• Uma bicicleta em dois pneus;

• Agregação e Composição são tipos especiais de


Associação;

36
Agregação

37
Agregação
• Uma Agregação representa um todo que é composto de
várias partes
• Não é uma relação de contenção;
• É uma variação do relacionamos “tem um”;
• As partes de uma agregação podem ter outros papéis em
outras relações
• Há compartilhamento.
• Por exemplo, uma reunião é uma agregação de sala,
pauta e pessoas
• Uma reunião tem uma sala, tem uma pauta e tem pessoas;
• Se a reunião acabar, as pessoas continuam a existir.

38
Agregação
• A agregação ocorre quando uma classe usa outras
classes em suas operações. As classes utilizadas
participam da classe principal, mas a classe
principal não contém estas classes utilizadas como
sendo partes suas.

39
Agregação

40
Composição
• A Composição é um relacionamento de contenção
(do verbo conter)
• Define uma relação do tipo “contém um”
• Um objeto contém outro(s) objeto(s).
• Os objetos contidos dependem do objeto contêiner para
existir
• Se o contêiner é destruído, os objetos contidos nele também
são.
• Conceito de não compartilhamento
• Os objetos pertencem somente a um contêiner.

41
Composição
• A composição é semelhante a agregação, pois
também é um conjunto onde há uma classe
representando o todo e classes satélites
funcionando como partes.

• A diferença ocorre quando o objeto todo deixa de


existir, neste caso, todas as partes também deixam
de existir.

42
Composição

43
Herança

44
Herança

45
Herança
• O relacionamento de Herança define um
relacionamento do tipo “é um”
• “Mountain Bike é uma bicicleta”.
• Indica que uma (a subclasse) de duas classes
relacionadas é uma forma especializada da outra (a
superclasse)
• A superclasse é considerada uma generalização da
subclasse.

46
Herança
Generalização e Especialização
• A generalização consiste em obter similaridades
entre as várias classes e partir destas similaridades,
novas classes são definidas.
• Estas classes são chamadas superclasses
• A especialização por sua vez consiste em observar
diferenças entre os objetos de uma mesma classe e
dessa forma novas classes são criadas.
• Estas classes são chamadas subclasses

47
Herança
• Diferentes tipos de objetos frequentemente
possuem semelhanças com outros

• Bicicletas Tandem;
• Mountain bikes;
• Bicicletas de corrida.

48
Herança
• Todas estas bicicletas possuem características de
bicicletas
• Velocidade atual;
• Rotação atual;
• Marcha atual.
• No entanto, também possuem características
diferentes
• As Tandem possuem dois bancos e guidões;
• As de corrida possuem guidão angulado;
• Moutain bikes possuem correntes maiores, alterando o
peso das marchas.
49
Herança
• A orientação a objetos permite que as classes
herdem o estado e comportamento comuns a
outras classes
• Neste exemplo, a classe Bicicleta se torna a superclasse
de MountainBike, TandemBike e RoadBike
• Estas agora são consideradas subclasses.

50
Herança
Bicicleta

51
Herança
• Neste exemplo, o mecanismo de herança permite
que MountainBike, TandemBike e RoadBike
possuam automaticamente os mesmos atributos e
métodos da superclasse Bicicleta
• E ainda permite que cada uma das subclasses defina
seus atributos e métodos adicionais;
• Ou seja, nas subclasses nos preocuparemos em definir
apena aquilo que as tornam diferentes.

52
Herança
 O código da superclasse não estará disponível no código
da subclasse
 Então é necessário que ele esteja bem documentado.

 Quando uma subclasse possui mais que uma superclasse,


usamos o termo herança múltipla;

 Também, uma subclasse pode se tornar superclasse de


outras.

53
Herança
• Podemos pensar sobre herança como algo
semelhante a funções
• Quando identificamos um trecho de código que se
repete várias vezes, criamos uma função com aquele
conteúdo;
• Quando identificamos várias características em comum
em um grupo de classes, podemos criar uma
superclasse;
• Evitamos a redundância.

54
Herança – Hierarquia de Classes
• Superclasse direta: Herdada explicitamente (um
nível acima na hierarquia).
• Superclasse indireta: Herdada de dois ou mais
níveis acima na hierarquia.
• Herança única: Herda de uma superclasse.
• Herança múltipla: Herda de múltiplas superclasses.
• Obs.: O Java não suporta herança múltipla.

55
FINAL
• Caso se queira criar elementos que não podem ser
modificados, devem ser declarados como FINAL.

• Variáveis (atributos), declarados como Final são tratados


como “Constantes”.

• Um método Final não pode ser sobrescrito pelas subclasses.

• Uma classe Final não pode ter subclasses;


Dependência

57
Dependência
• Uma Dependência é uma forma fraca de
relacionamento
• Indica que uma classe depende de outra porque apenas
em um momento específico ela a utiliza;

• A dependência existe se um objeto é utilizado como


parâmetro ou variável local de um método de outra
classe.

58
Dependência
• Em um relacionamento de dependência, um objeto
é dependente da especificação de outro objeto. Se
a especificação mudar, você precisará atualizar o
objeto dependente.

• Isso pode gerar um alto acoplamento entre as


classes.

59
Polimorfismo

60
Polimorfismo
• A definição dos dicionários para polimorfismo se
refere a um princípio em biologia no qual um
organismo ou espécie pode possuir diferentes
formas
• Este princípio pode ser aplicado à OO.
• Podemos utilizar um único nome para definir várias
formas distintas
• Por exemplo, uma família de funções com o mesmo
nome e códigos independentes.

61
Polimorfismo
• O polimorfismo é caracterizado quando duas ou
mais classes distintas tem métodos de mesmo
nome, de forma que uma função possa utilizar
um objeto de qualquer uma das classes
polimórficas, sem necessidade de tratar de forma
diferenciada conforme a classe do objeto.

62
Polimorfismo
• Existem 3 tipos de polimorfismo:
• Inclusão;
• Paramétrico;
• Sobrecarga.

63
Polimorfismo
• Inclusão
• Um método pode ser escrito para suportar um objeto da
superclasse, no entanto, também funciona
perfeitamente para objetos das subclasses;

• Ex. Um função ImprimeVelocidade para objetos Bicicleta


pode tratar objetos MountainBike.

• Automaticamente o método é incluído na subclasse,


estar explícito.

64
Polimorfismo
• Paramétrico
• Permite que uma função ou tipo de dados seja escrita
genericamente, tratando identicamente valores de tipos
diferentes, são os genéricos;
• Por exemplo, podemos ter uma função que trata listas
encadeadas independente do tipo que será armazenado
na lista.
List<Object> lstObject = new List<Object>();
• Resumindo: o tipo do parâmetro é dado na criação do
objeto.

65
Polimorfismo
• Sobrecarga
• Métodos e operadores que podem ser aplicados a
diferentes parâmetros
• Porém, se comportam de acordo com o tipo do argumento
atual.
• Por exemplo, dois ou mais métodos possuem o mesmo
identificador, porém, possuem assinaturas diferentes
• Como número e tipo de parâmetros;
• Ou ainda, um operador aritmético pode possuir
diferentes comportamentos dependendo dos
operandos.

66
Polimorfismo
• Por exemplo, já são embutidas
• 5 + 2 = 7;
• 3.4 + 5.8 = 9.2.

• E podemos criar outras


• “Marco” + “Antonio” = “Marco Antonio”.

• Na sobrecarga, podemos ter métodos/operadores com o mesmo


nome e diferentes parâmetros. Isso é conhecido como overloading.

• A sobrecarga de operadores também é chamada de Polimorfismo


de Coerção.

67
Interfaces

68
Interfaces
• Como dito anteriormente, os próprios objetos
definem a interação com o mundo externo
• De acordo com os seus métodos.
• Os métodos formam a interface de um objeto com
o mundo externo;
• Os botões de um celular são a interface entre nós e
os mecanismos internos do telefone
• Se apertarmos o power, podemos ligá-lo ou desligá-lo.

69
Interfaces
• Em sua forma mais comum, uma interface é um
grupo de métodos relacionados, porém, sem
definição interna
• Temos apenas especificados quais são os métodos
• E não como são os métodos.
• Por exemplo, uma interface Bicicleta pode ter os
métodos
• acelerar;
• trocarMarcha;
• frear.

70
Interfaces
• Uma interface deve ser implementada por uma
classe
• Formaliza o comportamento que a interface promete
fornecer.
• Interfaces são como contratos entre a classe e o
mundo externo
• Todos os métodos devem ser implementados;
• O que é forçado pelo compilador.

71
Interfaces
• As classes de acesso a base de dados são
específicas, mas implementam uma interface
genérica.

72
Pacotes

73
Pacotes
• Pacotes são um modo de organizar classes e
interfaces
• Um programa pode ser formado por centenas de classes
individuais;
• Analogamente como a organização de arquivos em
pastas, faz sentido organizar classes e interfaces
relacionadas;
• Diferentes linguagens de programação fornecem
bibliotecas de classes (um conjunto de pacotes) que
representam as tarefas mais comuns de programação de
propósito geral.

74
Acoplamento Dinâmico

75
Acoplamento
• Acoplamento é uma associação possivelmente entre
um atributo e uma entidade.

• Variáveis de programa são entidades com atributos


de nome, tipo e área de armazenamento.

• Tempo de acoplamento é o tempo em que ocorre o


acoplamento entre a entidade e seus atributos.
Acoplamento
• O acoplamento pode ser Estático e Dinâmico

• O acoplamento é estático ou adiantado (“early”) se


ocorre antes do tempo de execução e permanece
inalterado durante a execução do programa

77
Acoplamento
• O acoplamento é dinâmico ou atrasado (“late”) se
ocorre durante o tempo de execução, e muda no
curso da execução do programa.

• Exemplo: acoplamento de nomes de operações a


métodos (isto é, código executável)

• Em POO, combina-se verificação estática de tipos


com acoplamento dinâmico

78
Acoplamento Dinâmico
• Ao receber uma requisição, o objeto verificará se
existe um método que atenda a requisição.

• Pode ser que não exista no objeto acionado, um


método de acordo com a inovação feita pela
requisição.

79
Acoplamento Dinâmico
• Caso o objeto não encontre um método dentro de
seu encapsulamento, verificará em seus ramos de
herança aquelas superclasses que tenham o
método invocado. Esse mecanismo de busca de
métodos é o que chamamos de acoplamento
dinâmico.

80
Classes Abstradas

81
Classes Abstratas
• Uma classe abstrata é uma classe que não tem
instâncias diretas.

• Uma classe concreta é uma classe que pode ser


instanciada.

• Uma operação abstrata define a forma de uma


operação para qual cada subclasse deve
providenciar sua própria implementação.

82
Classes Abstratas

83
Classes Abstratas
• Duas ideias principais envolvidas com a noção de classe
abstrata:
• Presença de operações abstratas e
• Habilidade de criar instâncias

• A presença de uma operação abstrata implica na


inabilidade de instanciar objetos.

• Uma classe pode ser abstrata e não conter operações


abstratas.

84
Classes Abstratas
• A classe abstrata contém modelos que devem ser
seguido pelas classes concretas.

85
Análise e Projeto Orientados a
Objetos

86
Análise e Projeto OO
• Em breve estaremos programando OO
• Como faremos?
• Ligar o computador e começar a digitar?
• Funciona para apenas pequenos programas.
• E se fôssemos contratados para criar um software que
gerencia os caixas eletrônicos de um grande banco?
• Ou, se fôssemos trabalhar em uma equipe em que o
trabalho é dividido entre 100 pessoas?

87
88
Análise e Projeto OO
• Antes de escrever o código, é necessário analisar os
requisitos (o quê) de seu projeto e projetar uma
solução (como) satisfatória
• Pode poupar muitas horas de trabalho e dinheiro.

• Quando esta análise envolve um ponto de vista de


OO, chamamos de análise e projeto orientados a
objetos.

89
Análise e Projeto OO
• Idealmente, membros de um grupo de
desenvolvimento devem definir um processo para
resolver um determinado problema e uma maneira
uniforme para comunicar os resultados deste processo
para outro;

• Existem várias linguagens utilizadas para comunicação


de qualquer processo de análise e projeto OO. Um
exemplo é a linguagem gráficas Unified Modeling
Language (UML).

90
Análise e Projeto OO
• Benefícios de um projeto Orientado a Objetos:
• Modelagem mais natural;
• Reutilização;
• Projetos mais rápidos com qualidade;
• Codificação mais simples de programas (padrões);

91
DÚVIDAS

Você também pode gostar