Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

POO - Programação Orientada a Objetos
Peter
Objecto
Classe
Métodos
Propriedades
É uma instancia de
Tem
Reage
Eventos
Abstracção
Encapsulamento
Herança
Polimorfismo
Princípios- chave
POO
Composição
Modularidade
Interfaces
Class abstrata
Abstracção e Encapsulamento 
Em conjunto, definem o objecto 
POO é baseada no trabalho corporativo de múltiplos objetos que comunicam entre si através de mensagens
obj6
obj1
obj5
obj2
obj4
obj7
obj3
mensagem
POO
Objetos
São estruturas computacionais autónomas, Independentes do programa
Código pode ser reutilizado, reduz custo produção soft.
Programa A
Programa B
Objeto C
POO
POO
Exemplos:
Pessoa, Automóvel, Cliente // Entidades reais
Entrevista, Consulta Médica // Conceitos
Objetos
Representam (abstrações) entidades reais ou conceitos que o programa processa
POO
Cada um tem uma responsabilidade particular no programa
Cada um presta serviços a outros objetos
Objetos
POO
Exemplo - Programa para gerir contas de uma dependência bancária
Dados do Programa Relativos a
Contas
Clientes
Gestão
Criar Objetos que Representem
Contas // representam conceitos
Clientes // representam entidades reais
Gestor // representam entidades reais
Objeto Conta
Responsabilidade: gestão dos dados de uma conta
Serviços prestados: fornecer o saldo da conta e titulares, fazer levantamento e depósito, ...
Objeto Cliente
Responsabilidade: gestão dos dados de um cliente
Serviços prestados: fornecer o nome, morada, NIF,
Objeto Gestão
Responsabilidade: gestão da dependência
Serviços prestados: criar e eliminar: cliente e conta; 
 fornecer o total de saldos, ...
Gestão
Conta A
Conta B
Cliente 1
Cliente 2
POO
Abstração
POO
Um objecto é uma abstracção de uma entidade real ou conceito
 
É um Modelo simplificado 
Representa apenas os atributos (dados) essenciais para o programa 
Nome
Morada
N.º BI
NIF
N.º Cliente
Obj. Cliente
Atributos
Abstração
POO
Processo de Abstração
Definir uma abstração (atributos essenciais) de uma entidade real ou conceito
Os Atributos essenciais são determinados pelas suas responsabilidades no programa
Processo de abstração
Responsabilidade da Entidade Real ou Conceito no Programa
Atributos essenciais
POO
Processo de Abstração
Exemplo: Cliente de um Banco
Atributos
altura, peso, cabelo, olhos, nome, morada, filiação, etc.
Responsabilidades específicas no programa
Reportar o nome, morada, nº de identificação fiscal e número do BI, nº de cliente
Atributos essenciais para o programa
Nome
Morada
NIF
Número do BI
Nº de Cliente
Nome
Morada
N.º BI
NIF
N.º Cliente
Atributos do Obj. Cliente
Processo de abstração
Responsabilidade do Objeto Cliente
Atributos essenciais
POO
Encapsulamento
POO
Um objeto deve encapsular (agregar), numa única estrutura computacional, ... os dados (atributos de uma abstração) e as operações que manipulam esses dados, ...
Encapsulamento
... de modo a permitir que os dados sejam acessíveis do exterior, apenas através de operações próprias da entidade 
... esconder do exterior da entidade, as estruturas de dados e as implementações das operações
Dados
Operações
POO
Nome
Morada
N.º BI
NIF
N.º Cliente
Consultar Nome
Consultar Morada
Modificar Morada
Consultar n.º Cliente
Consultar NIF
Dados
Operações
Exemplo:
Clientes de um banco
POO
Interesse do Encapsulamento de Dados e Operações
Dados acessíveis do exterior só através de operações do próprio objeto
Permite controlar as modificações dos dados de modo a garantir a integridade dos dados
Contribui para a obtenção de programas mais robustos, sem erros de execução
Estruturas de dados e implementações das operações escondidas do exterior
Permite alterações deste código de objeto sem implicar modificações dos programas que usam os objetos
Modularidade
(Modularity)
Basic idea: Partition a system such that
parts can be designed and revised
independently (“divide and conquer”)
• System is partitioned into modules that
each fulfil a specific task
• Modules should be changeable and
reuseable independent of other modules
https://www.st.cs.uni-saarland.de/edu/se/2012/lecture-slides/09-Design%20Principles.pdf
POO
Implementação de um Objeto em Java
Variáveis Privadas
Métodos Privados
Construtor
Métodos Públicos
Objeto
Estrutura
Comportamento
Interface (API)
para guardar os dados
Privadas // para satisfazer princípio do encapsulamento
Variáveis 
Públicos // operações acessíveis do exterior
Privados // métodos auxiliares para executarem cálculos intermédios
Métodos
(implementam as operações)
Estrutura: conjunto de todas as variáveis do objeto
Estado: conjunto de todos os dados (conteúdos das variáveis) do objeto
Comportamento: conjunto de todos os métodos do objeto
Interface (API): conjunto dos métodos acessíveis do exterior
Definições
POO
Objetos Similares
Maria
Rua O
111111
12345678
101
Consultar Nome
Consultar Morada
Modificar Morada
Consultar n.º Cliente
Consultar NIF
Manuel
Rua C
222222
87654321
214
Consultar Nome
Consultar Morada
Modificar Morada
Consultar n.º Cliente
Consultar NIF
Programa Pode Processar múltiplos objetos similares // da mesma espécie
Objetos Similares têm
Estruturas iguais
Comportamentos iguais
Dados (Estados) diferentes
Cliente X
Cliente Y
POO
Noção de Classe e Instância
Para criar múltiplos objetos similares…
É preciso uma estrutura computacional que guarde a Estrutura (variáveis) e o Comportamento (métodos) desses objetos, para servirem de molde na sua construção
Essa estrutura é chamada Classe
Classe
Tem capacidade para criar objetos similares
Chamados instâncias de uma classe
Pode funcionar como fábrica de instâncias
Class
Cliente
Instancia de Cliente
(Maria)
Instancia de Cliente
(Manuel)
Instancia de Cliente
(Joaquim)
Objeto
Instância de uma classe
Criado por uma classe
POO
Estrutura Geral de uma Classe
Membros de Instância // Para criar instâncias de classes
Variáveis de instância 
// Definem a Estrutura para guardar o Estado das instâncias (dados)
Métodos de instância 
// Definem o Comportamento das instâncias (operações)
Variáveis de classe 
// Definem a Estrutura para guardar dados da classe (dados globais)
Métodos de classe 
// Definem o Comportamento da classe (operações)
Membros de Classe // Para guardar os dados e as operações próprias da classe
Construtores 
// Criam instâncias, reproduzindo as variáveis e métodos de instância
Especiais
POO
Categorias de Classes
Classes Instanciáveis // Fábricas de instâncias (Ex: Array)
Classes Não-Instanciáveis 
// Prestadoras de serviços (Ex: classe Math) 
// não disponibilizam para o exterior nenhum construtor
Int[] vetor = new int[10];
Int x = Math.random();
POO
Classes Não-Instanciáveis
Classes não geradoras de instâncias
Com construtor privado
ou ainda Classe abstrata
(Apenas prestam serviços - Prestadoras de Serviços)
Variáveis da Class
Métodos da Class
Construtor Privado
Estrutura geral:
Class Math
Só presta serviços de matemática
 abs(), sin(), sqrt(), round(), …
Math.sqrt(4)
POO
Geradoras de instâncias - Fábricas de Instâncias
Classes Instanciáveis
Variáveis da Class
Métodos da Class
Construtor
Variáveis da Instância
Métodos da Instância
Estrutura geral:
Classe String
método format() é método de classe
POO
Classe é Tipo de Dados
Um Tipo de Dados Define:
Um conjunto de dados + Um conjunto de operações sobre esses dados
Dados
Operações
Exemplo:
Tipo boolean
Conjunto de dados: { true, false } // únicos dados de variável tipo boolean
Conjunto de operações: { AND, OR, NOT } // únicas operações sobre esses dados
Classe Define:
Um conjunto de instâncias + Um conjunto de métodos que podem ser aplicados a essas instâncias
Instâncias São dados dos programas, Logo, são tipo de dados ... definido pelo utilizador
Dados
(Instâncias)
Operações
(Métodos)
Class Pode definir o tipo de uma variável
Sintaxe: Classe nomeVariável;
Exemplo: cCliente cliente1; // variável cliente1 para guardar instâncias da classe cCliente
POO
Mecanismo de Controlo de Acesso
	Tipos de Acesso	Membro acessível à
	private	Própria classeNenhum - (package)	Própria classe e classes dentro da sua package
	protected	Própria classe, classes dentro da sua package e qualquer subclasse
	public	Qualquer classe
Especificar quem tem acesso (visibilidade) às entidades definidas:
Classes
Membros das classes
Variáveis
Métodos
Construtores
+ 
Acessibilidade 
-
POO
Declaração de uma Classe
[modificador de acesso] [final] class NomeClasse [extends SuperClasse] [implements Interfaces] { //membros da classe 
}
[...] opcional
modificador de acesso: private, public, protected ou sem modificador = package
final: class não pode ser herdada considerada classe completa (não há especializações)
NomeClasse: nome da class
extends: aplica-se a classe que estende outra classe (herança)
implements: aplica-se a classe que implementa um ou mais interfaces
Exemplo:
public class cCliente { 
}
POO
Organização dos Membros de uma Classe
[modificador de acesso] [final] class NomeClasse [extends SuperClasse] [implements Interfaces] {
 // variáveis de classe 
 // variáveis de instância 
 // construtores
 // métodos de classe 
 // métodos de consulta (gets) 
 // métodos de modificação (sets) 
 // métodos complementares e auxiliares 
 // métodos de instância 
 // métodos de consulta (gets) 
 // métodos de modificação (sets) 
 // métodos complementares e auxiliares 
}
Variáveis da Class
Métodos da Class
Construtores
Variáveis da Instância
Métodos da Instância
Class X:
POO
Declaração de Variáveis de Instância e Classe
[modificador de acesso] [final] [static] tipo nomeVariável [=valor_inicial];
[...] opcional
modificador de acesso: public, private, protected ; sem modificador = package
final: só pode ser feita uma atribuição; torna a variável numa constante
static: variável de classe; sem static => variável de instância
tipo: primitivo ou referência
nomeVariável: nomes simples (não-compostos) devem ter apenas letras minúsculas
=valor_inicial: para atribuir o valor inicial
 public class cCliente { 
// variáveis de instância 
private String nome; 
private String morada; 
private int numero; 
private int nif; 
private int nbi; 
// variáveis de classe 
private static int quantidadeClientes = 0; 
private static int proximoCliente = 0;
}
Exemplo:
Declarações fora de métodos
Private para garantir o princípio do encapsulamento
Variáveis de instância devem ser inicializadas pelos construtores da classe
POO
Declaração de Métodos de Instância e de Classe
[modificador de acesso] [final] [static] [tipo de retorno] nomeMétodo (lista de parâmetros) {
//corpo do método
}
[...] opcional
modificador de acesso: public, private, protected ; sem modificador = package
final: método não pode ser reescrito nas subclasses (será abordado noutra aula sobre Herança)
static: método de classe sem static: o método é de instância
tipo de retorno: primitivo ou referência
nomeMétodo: letra inicial deve ser minúscula
Sintaxe da lista de parâmetros: tipo1 nome1, tipo2 nome2, ..., tipoN nomeN
public class cCliente { ... 
// métodos de instância 
public String getNome(){
	 return this.nome 
} 
public void setMorada(String moradaCliente){ 
	this.morada = moradaCliente;
 }
 
// método de classe 
public static int getQuantidadeClientes(){
 return quantidadeClientes; 
} 
... }
POO
Sobrecarga de Métodos (Overloading)
Permite a uma classe declarar múltiplos métodos com o mesmo nome, desde que as suas assinaturas sejam diferentes:
Em número de parâmetros ou
Nos tipos de parâmetros
Exemplos de assinaturas de métodos m sobrecarregados (com overloading) 
m() 
m(int) 
m(float, String) 
m(String, int) 
m(int, String, int)
POO
Invocação de Métodos (Envio de Mensagens)
Tipos de Invocação de Métodos
Mesma classe
Classes diferentes
Invocação de Métodos da Mesma Classe
nome_método(lista_argumentos)
Invoca o método m1 da mesma classe
Invocação de Métodos de Outras Classes
Nome_da_instancia.nome_método(lista_argumentos)
Invoca o método m2 da classe cPessoa, 
instanciada como p1
cPessoa p1 = new cPessoa();
p1.m2(10);
m1(10)
POO
Referência this
Referência especial da instância corrente
this.nome
Apenas pode ser usada dentro de
Métodos de instância
Construtores
Permite indicar só membros de instância
//Variáveis de instância
	this.nomeVariável
	this.nome
//Métodos de instância
	this.nomeMétodo(lista de argumentos)
	this.getNome()
Não pode ser usada em métodos de classe
public class cCliente { 
// variável de instância 
private String nome; 
... 
// método de instância 
public void setNome(String nome){ 	this.nome = nome; 
} 
public String getNome(){ 
	return this.nome; 
} 
... 
}
POO
Categorias dos Métodos de Instância
Consulta ou Interrogadores (Gets)
Permitirem a consulta exterior dos dados das instâncias
Públicos
Modificadores (Sets)
Permitem a modificação exterior dos dados das instâncias
Públicos
Complementares
Completam as responsabilidades dos métodos anteriores
toString()
Públicos
Auxiliares
Auxiliam a implementação de outros métodos mais complexos, realizando cálculos intermédios, etc.
Privados
Responsáveis pelo acesso exterior aos dados das instâncias de classes. 
Garantem o princípio do encapsulamento
POO
public String getNome() { 
	return this.nome;
}
Dados
Operações
get
Categorias dos Métodos de Instância
Métodos de Consulta
Métodos Modificadores
public void setNome(String nome){
 	this.nome=nome;
}
Dados
Operações
set
Métodos toString()
@Override
public String toString(){
	String s=“”;
	s+= this.nome +” “ +…;
return s;
}
POO
Noção de Construtor
Membro especial de uma classe
Permite:
Criar instâncias de classes // reproduzindo as variáveis e métodos de instância
Inicializar o estado das instâncias // variáveis de instância
POO
Declaração de Construtor
[modificador de acesso] nomeClasse(lista de parâmetros){
 	... 
}
Nome do construtor é igual ao nome da class
Modificador de acesso opcional 
	public (em geral)
Permite criar instâncias de classes
Garante classe instanciável
Faz parte da API de uma classe instanciável 
	private
Não permite criar instâncias
		Ex: classe Math
nomeClasse obrigatorio = nome da respetiva classe
parâmetros para receberem dados iniciais das instâncias criadas
public class cPessoa{ 
// variáveis de instância 
private String nome; 
private int idade; 
// construtor 
public cPessoa(String nome,int idade){ 
 setNome(nome); 
setIdade(idade);
} 
... 
}
POO
Sobrecarga dos Construtores (Overloading)
Permite declarar múltiplos construtores com o mesmo nome, mas com assinaturas diferentes:
Em número de parâmetros ou
Nos tipos de parâmetros
public class cPessoa{ 
// variáveis de instância 
private String nome; 
private int idade; 
// construtores 
public cPessoa(String nome,int idade){ // construtor completo 
setNome(nome); 
setIdade(idade); 
} 
public cPessoa(String nome){ //construtor só com um parâmetro
 this(nome,0); // idade inicializada por omissão 
} 
public cPessoa(){ // construtor sem parâmetros 
} 
}
POO
Construção de Instâncias
nomeConstrutor nomeVariavel =new nomeConstrutor(lista_parâmetros)
public class TestePessoa { 
public static void main(String[] args){
cPessoa p1 = new cPessoa( “Maria", 24 ); 
 
cPessoa p2 = new cPessoa(“Manuel”);
cPessoa p3 = new cPessoa();
}
}
//cria instância de cPessoa 
// Estado inicializado com dados passados por parâmetro 
// referência dessa instância é guardada em p1
POO
Classe Principal de um Programa (Main Class)
Classe que contém o método principal do programa (Primeiro método do programa executado pelo interpretador de JAVA)
public static void main(String[] args){ 
// corpo do método 
}
Pode ser usada para instanciar e utilizar novas classes (exemplo: cPessoa):
public class TestePessoa { 
public static void main(String[] args){ 
	cPessoa p;
	p = new cPessoa( "Rita", 12 );
	System.out.println( "Nome" + p.getNome() );
	System.out.println( "Idade:" + p.getIdade() );
p.setIdade( 11 );
System.out.println( p.toString() );
System.out.println( p ); //mesmo que toString
}
}
POO
Mecanismos de reutilização de código
Redução do esforço de programação=> redução dos custos de produção de software
Como?
Código Novo
Código Existente
Programa Novo
Baseado na construção de classes novas a partir de classes existentes (Reutilização de Código)
POO
Mecanismos de reutilização de código
Composição
Herança
Composição
Permite criar uma classe composta por outras classes (Classes Agregadas)
CA2
CA1
Classe Nova (CN)
Classes agregadas (CA) estão no mesmo nível
Herança
Permite criar uma classe que herda (acrescenta) outras classes
Classe Nova (CN)
CH2
CH1
POO
Composição
POO
Herança
http://www.ntu.edu.sg/home/ehchua/programming/java/j3b_oopinheritancepolymorphism.html
O mecanismo de herança permite definir uma nova classe a partir de uma classe
existente, com modificações e/ou extensões de comportamento. 
POO
A classe inicial é a superclass ou classe base.
A nova classe é a subclasse da anterior ou classe derivada.
Class A
Class B
Class D
Class C
SuperClass
(Class base - Existente)
SubClass
(Nova Class)
Uma classe (subclasse) pode herdar operações de uma superclasse
As operações de uma superclass podem ser herdadas por subclasses. 
Herança
POO
Criar uma nova classe por herança (ou extensão) de uma classe existente 
Herda membros de instância de uma classe existente
Nova classe
Variáveis de Instância
Métodos de Instância
Acrescenta novos membros particulares (Especialização)
Novas Variáveis de Instância
Novos Métodos de Instância
Herança
POO
Class Existente
(superclass)
Nova Class
(subclasse)
Membros de instância de uma classe existente
Membros Novos
+
Herança
+ Genérica
+ Específica
Especialização
Generalização
POO
Bicycle
mountainBike
roadBike
tandemBike
Exemplo de uma hierarquia de classes de uma aplicação sobre bicicletas…
Herança
superClass
subClasses
POO
Herança
bicycle
Atributos 
private int cadence;
private int gear;
private int speed
Operações 
public void setCadence(int n)
public void setGear(int n)
public void applyBreak(int n)
public void speedUp(int n)
Construtor 
public bicycle
public Bicycle(int startCadence, int startSpeed, int startGear) {
 gear = startGear;
 cadence = startCadence;
 speed = startSpeed;
 }
superClass
mountainBike
Atributos 
private int seatHeight; 
Operações 
public void setHeight(int n)
Construtor 
public mountainBike
 public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) {
 super(startCadence, startSpeed, startGear);
 seatHeight = startHeight;
 } 
subClasses
 public class mountainBike extends bicycle { ... }
 public class bicycle { ... }
POO
Herança
A
D
F
Herança Transitiva
Herda diretamente de A
Herda diretamente de D e indiretamente de A
Herança Transitiva
(Indireta)
Herança direta
Herança direta
POO
Tipos de Herança em POO 
Simples
Múltipla
Herança
A
C
B
D
F
E
G
X
W
Y
T
U
Z
V
Herança simples:
Herança múltipla:
Herança Simples
Uma classe apenas pode herdar diretamente de outra classe
No Java apenas é permitida a herança simples
Herança Múltipla
Uma classe pode herdar diretamente de múltiplas classes
Exemplo: Classe Z
No C++ é permitida a herança múltipla
O Java
Não permite em herança múltipla em hierarquias de classes
Permite herança múltipla em hierarquias de interfaces
POO
Está no topo de todas as hierarquias de classes Java
Superclasse de todas as classes
Qualquer classe em Java é subclasse, pelo menos, de Object
Classe Java mais Genérica
Herança
POO
Declaração de uma Subclasse
Herança
[modificador de acesso] [final] class nomeSubClass extends nomeSuperClasse { ... }
modificador de acesso
public
private
protected
sem modificador = package
[...] = opcional
final
Classe não pode ser herdada
É uma classe completa - Não há especializações
Exemplo: Classe String
 public class mountainBike extends bicycle { ... }
Exemplo:
POO
Tipos de Membros de Classes
Herança
relativamente à Herança, qualquer classe tem dois tipos de membros
Herdados
Locais
Class
Membros Herdados
Membros Locais
Definidos na sua superclass
Definidos na própria classe
POO
Membros Herdados
Herança
Apenas são herdados variáveis e métodos de instância
Class
Membros Herdados
Variáveis da instância
Métodos da Instância
Membros Locais
Membros de classe // variáveis e métodos de classe
Mas podem estar acessíveis // p. ex., os métodos de classe públicos
Construtores
Porque não são membros de uma classe
Mas podem estar acessíveis - Através da chamada super()
Membros não Herdados
POO
Membros Herdados
Herança
Relativamente ao acesso, os membros herdados podem ser
Acessíveis
Inacessíveis
Acesso depende (em Java)
Do Nível de acesso (visibilidade)
public // acessível
protected // acessível
package (sem modificador) // acessível se classe pertencer à package da superclasse (direta)
private // inacessível
Variáveis de Instância
Inacessíveis (sendo privados)
Membros Locais
Métodos de Instância
• Acessíveis 
• Inacessíveis (sendo privados)
Membros Herdados
Class
POO
Conceitos diferentes: herdar e aceder
Um membro pode ser herdado ....... mas pode não estar acessível à subclasse
Exemplo: método de instância privado
Um membro pode estar acessível ... e não ser herdado
Exemplo: membros de classe públicos
Membros Herdados
Herança
Para simplificar a programação:
Podemos considerar herdado o que está acessível
POO
Herança
Membros Locais
Membros especificados na própria classe – membros locais
Variáveis e métodos
Instância
Classe
Variáveis de Instância
Membros Locais
Métodos de Instância
Definidos
Redefinidos
Membros Herdados
Class
Variáveis de Class
Métodos da Class
Definidos
Redefinidos
Relativamente à definição, podem ser
Definidos //Novos
Redefinidos //(Override ou Reescritos)
POO
Herança
Membros Locais
Membros Locais Definidos (Novos)
Cujas definições residem apenas na própria classe
Definições inexistentes nas suas superclasses
Class A
Class B
metodoX()
(Definido)
Membro Local Definido
Membros Locais Redefinidos (Override)
São redefinições de membros das superclasses
Interesse: Quando os membros de superclasses não são apropriados para uma subclasse
Exemplo:
Método toString() herdado, pelo menos, da classe Object
Suportado pelo Mecanismo da Sobreposição (@Override)
Class A
Metodo1()
Class B
metodo1()
Metodo2()
(Definido)
Membro Local Redefinido
(Redefinido)
(Definido)
POO
Herança
Exemplo
Class Circle
Class Cylinder 
h
cylinder
r
circle
Circle
Cylinder
superClass
subClass
POO
POO
Herança
POO
Referência super
Herança
Definição
Referência da superclasse (direta) da subclasse
Interesse
Invocar um membro de instância herdado e acessível da superclasse direta
Particularmente útil para acesso a métodos que foram sobrepostos
Exemplo
super.toString() // invoca método toString() da superclasse
POO
super não se deve aplicar a variáveis e métodos de classe
Referência super
Herança
Não pode ser usada de forma encadeada: super.super.metodo();
Deve ser utilizada para Distinguir dois tipos de métodos de instância
Herdados da superclasse direta // com prefixo super
Locais da classe // sem prefixo super
POO
Invocação super()
Herança
Sintaxe
super(lista_parâmetros); // lista pode ser vazia
Interesse
Acesso aos construtores da superclasse (direta) para inicialização das suas variáveis de instância
Uso
Só em construtores
Obrigatoriamente a 1ª instrução do construtor
Exemplo
https://www.tutorialspoint.com/java/java_abstraction.htm
POO
Abstração
POO 2 - Herança. Polimorfismo. Classes Abstratas -PDF
http://www.inf.pucrs.br/flash/lapro2/aula_heranca/
http://javapapers.com/java/java-abstract-class-and-methods/
POO
Variáveis da Class
Métodos da Class
Construtor
Variáveis da Instância
Métodos da Instância
Instância
Class
Especial
Membros
Class X
Molde de Instância
POO
http://www.ntu.edu.sg/home/ehchua/programming/java/j3b_oopinheritancepolymorphism.html
https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
image2.png
image5.png
image6.png
image3.png
image7.jpeg
image8.jpeg
image9.jpeg
image10.jpeg
image11.png
image12.png
image13.gif
image14.png
image15.pngimage16.png
image17.png
image18.emf
image19.png
image20.png
image21.png
image22.png
image23.png
image24.png
image25.png
image1.png

Mais conteúdos dessa disciplina