diego/disciplinas/2014_2/... · created date: 8/11/2014 6:43:08 pm
TRANSCRIPT
Ementa Oficial
•Revisão de Conceitos de Orientação a Objetos. •Programação com Tipos Genéricos. •Programação com APIs para Conteiners. •Revisão de Princípios de Projeto Orientado a Objetos. •Padrões de Projeto. •Frameworks. •Linhas de Produto. •Aplicações e Estudo de Casos.
2012.2 Técnicas de Programação Avançada 3
Organização do curso
Parte I – Orientação a objetos Parte II – Padrões de Projetos e Outros Conceitos
2012.2 Técnicas de Programação Avançada 4
Organização do curso
Parte I – Orientação a objetos •Revisão de O.O.: Classes e Objetos, Métodos, Encapsulamento •Herança e Hierarquia de Classes •Diagrama de classes em UML •Tipos Genéricos •Coleções •Polimorfismo
2012.2 Técnicas de Programação Avançada 5
Organização do curso
Parte II – Padrões de Projeto
•Princípios de Programação Orientada a Objetos •Introdução aos padrão de projeto •Padrões Grasp •Frameworks •Linhas de Produtos
2012.2 Técnicas de Programação Avançada 6
Avaliação
2 provas (P1,P2) 1 trabalho (T1) Média: (P1+P2+T1)/3 Reposição apenas via procedimento oficial
2012.2 Técnicas de Programação Avançada 7
Bibliografia
Linguagens de Programação - Conceitos e Técnicas. Flávio Varejão. Editora Campus Use a Cabeça ! Padrões de Projetos (Design Patterns) - 2ª Ed. Elisabeth Freeman e Eric Freeman. Editora: Alta Books Padrões de Projeto – Soluções reutilizáveis de software orientado a objetos. Erich Gamma, Richard Helm, Ralph Johnson. Editora Bookman Fundamentos do Desenho Orientado a Objeto com UML. Melir Page-Jones. Makron Books
2012.2 Técnicas de Programação Avançada 8
Técnicas de Projeto e Implementação de Sistemas I
TCC-0640XX Prof.: Diego Passos
www.ic.uff.br/~dpassos [email protected]
Conteúdo: Revisão de Orientação a Objetos
Slides modificados a partir do material original do Professor Anselmo Montenegro.
Introdução
04/08/2014 Programação de Computadores II 2
Programação Estruturada Composição dos Programas:
Um programa é composto por um conjunto de rotinas A funcionalidade do programa é separada em rotinas Os dados do programa são variáveis locais ou globais
Fluxo de Execução:
O programa tem início em uma rotina principal A rotina principal chama outras rotinas Estas rotinas podem chamar outras rotinas, sucessivamente Ao fim de uma rotina, o programa retorna para a chamadora
Paradigmas de programação
Introdução
04/08/2014 Programação de Computadores II 3
Programação Orientada a Objetos Composição do programa:
A funcionalidade do programa é agrupada em objetos Os dados do programa são agrupados em objetos Os objetos agrupam dados e funções correlacionados
Fluxo de Execução:
Similar ao anterior Os objetos colaboram entre si para a solução dos objetivos A colaboração se realiza através de chamadas de rotinas
Paradigmas de programação
Introdução
04/08/2014 Programação de Computadores II 4
OO
Estruturada
• Encapsulamento
• Herança
• Polimorfismo
• Seqüencia
• Decisão
• Repetição
Paradigmas de programação
Introdução
04/08/2014 Programação de Computadores II 5
O ser humano se relaciona com o mundo através do conceito de objetos.
Estamos sempre identificando objetos ao nosso redor. Para isso:
atribuímos nomes classificamos em grupos – classes.
Objetos
Introdução
04/08/2014 Programação de Computadores II 6
Definição Um objeto é a representação computacional de um elemento ou processo do mundo real Cada objeto possui um conjunto de características e comportamentos
Objetos
04/08/2014 Programação de Computadores II 7
Características de um objeto
Definição
Uma característica descreve uma propriedade de um objeto, ou seja, algum elemento que descreva o objeto
Exemplo de características de um objeto identificado como carro:
Cor Marca Número de portas Ano de fabricação e tipo de combustível
Orientação a Objetos
04/08/2014 Programação de Computadores II 8
Comportamento de um objeto
Definição:
Um comportamento representa uma ação ou resposta de um objeto a uma ação do mundo real.
Exemplos de comportamento para o objeto carro
Acelerar Parar Andar Estacionar
Orientação a Objetos
04/08/2014 Programação de Computadores II 9
Características e comportamentos de objetos
Exemplos: Cachorros
características: nome, cor, raça comportamentos: latir, correr
Bicicletas
características: marcha atual, velocidade atual comportamentos: trocar marcha, aplicar freios
Orientação a Objetos
04/08/2014 Programação de Computadores II 10
Mapeamento entre objetos reais e computacionais
Orientação a Objetos
Características
Comportamento
Objeto no Mundo Real
Atributos
Métodos
Objeto Computacional
04/08/2014 Programação de Computadores II 12
Identificação
Identificar as características e o comportamento de objetos do mundo real é o primeiro passo da programação OO. Observe um objeto e pergunte:
1. Quais os possíveis características deste objeto e quais estados elas assumem?
2. Quais comportamentos (ações) que ele pode executar?
Orientação a Objetos
Introdução
04/08/2014 Programação de Computadores II 13
Conceitos
04/08/2014 Programação de Computadores II 14
Classes
Objetos não são considerados isoladamente Um processo natural é identificar características e comportamentos semelhantes entre objetos Objetos com características e comportamentos semelhantes são agrupados em classes
Orientação a Objetos
04/08/2014 Programação de Computadores II 15
Classes
A unidade fundamental em programação em orientação a objetos (POO) é a classe. Classes contém: Atributos: determinam o estado do objeto;
Métodos: semelhantes a procedimentos em linguagens
convencionais, são utilizados para manipular os atributos.
Orientação a Objetos
Classes Orientação a Objetos
04/08/2014 Programação de Computadores II 16
Anda Para Acelera Estaciona
Carro
Número de Rodas
Cor
Cor Lateral
Orientação a Objetos
04/08/2014 Programação de Computadores II 17
Classes
Aluno
Nome Matrícula Nota Média
João 193.31.098-7 7,6
Maria 195.31.022-5 8,7
04/08/2014 Programação de Computadores II 18
Classes
As classes proveem a estrutura para a construção de objetos - estes são ditos instâncias das classes
Classe
Aluno Nome Matrícula Nota Média
setNome(nome) getNome() ...
atributos
métodos
Instâncias
João 193.31.098-7 7,6
Maria 195.31.022-5 8,7
Orientação a Objetos
04/08/2014 Programação de Computadores II 19
Objetos
Bicicleta
Marcha Velocidade
mudarMarcha() mudarVelocidade() ...
campos (atributos)
métodos
Instâncias
3ª 20 km/h
Classe
7ª 35 km/h
Bicicleta B
Bicicleta A
Orientação a Objetos
04/08/2014 Programação de Computadores II 20
Objetos como instâncias de classes
Um objeto é uma instância de uma única classe.
Uma instância de um objeto é uma unidade de programação que é armazenada em uma variável. Um programa orientado a objetos é composto por um conjunto de objetos que interagem entre si.
Orientação a Objetos
04/08/2014 Programação de Computadores II 21
Colaboração entre objetos
Um programa OO é um conjunto de objetos que colaboram entre si para a solução de um problema Objetos colaboram através de trocas de mensagens A troca de mensagem representa a chamada de um método
Orientação a Objetos
Motorista
Carro
Freia
04/08/2014 Programação de Computadores II 22
Mensagens Orientação a Objetos
Um envio de mensagem sempre possui:
Um emissor Um receptor Um seletor de mensagens (nome do método chamado) Parâmetros (opcionais)
Uma mensagem pode retornar um valor
04/08/2014 Programação de Computadores II 23
Objetos
Métodos operam no estado interno de um objeto e servem como mecanismo de comunicação entre objetos.
Bibicleta B
7º 35 km/h
João
João 30 anos
mudarMarcha
Orientação a Objetos
04/08/2014 Programação de Computadores II 24
Classes em Java Orientação a Objetos
Qualificador_de_acesso class Nome_Da_Classe
{
// atributos da classe
// métodos da classe
}
// Class Lampada
public class Lampada
{
// Atributos
boolean acesa;
// Métodos
public void ligar()
{ acesa = true; }
public void desligar()
{ acesa = false; }
}
// Class Bicicleta
class Bicicleta
{
// Atributos
int velocidade = 0;
int marcha = 1;
// Métodos
void mudarMarcha(int novoValor)
{ marcha= novoValor; }
Void aumentaVelocidade(int incremento)
{ velocidade+= incremento; }
}
04/08/2014 Programação de Computadores II 25
Criando Objetos em Java Orientação a Objetos
Para instanciarmos um novo objeto devemos utilizar o operador new, como nos exemplos abaixo:
NomeDaClasse nomeDoObjeto = new NomeDaClasse(); Criando dois objetos bicicleta:
Bicicleta bicicleta1 = new Bicicleta(); Bicicleta bicicleta2 = new Bicicleta();
Invocando seus métodos:
bicicleta1.mudarMarcha(2); bicicleta2.aumentaVelocidade(5);
04/08/2014 Programação de Computadores II 26
Resumindo ... Orientação a Objetos
A classe provê a estrutura para a construção de objetos. Um objeto é uma instância de uma classe. Contém um estado (valores de seus atributos). Expõe o seu comportamento através de métodos (funções).
Introdução
04/08/2014 Programação de Computadores II 27
Conceitos
04/08/2014 Programação de Computadores II 28
Encapsulamento Orientação a Objetos
É um princípio fundamental da OO:
Esconder o estado interno (valores dos atributos). Obrigar que interações com os atributos sejam executadas através de métodos. Com o encapsulamento um objeto determina a permissão que outros objetos terão para acessar seus atributos (estado).
04/08/2014 Programação de Computadores II 29
Encapsulamento Orientação a Objetos
Definição
É a utilização de técnicas de programação e mecanismos de linguagem de programação para agrupar e restringir acesso à atributos métodos e classes
Objetivo:
Reduzir a complexidade externa (interface) das classes Preservar a integridade dos dados internos dos objetos
04/08/2014 Programação de Computadores II 30
Tipos de encapsulamento Orientação a Objetos
Encapsulamento de atributos: métodos de acesso Encapsulamento de métodos: classes Encapsulamento de classes: pacotes
04/08/2014 Programação de Computadores II 31
Encapsulamento de Dados Orientação a Objetos
Atributos e Métodos
Os métodos formam uma “cerca” em torno dos atributos
Os atributos não podem ser manipulados diretamente
Os atributos somente podem ser alterados ou consultados através dos métodos do objeto
04/08/2014 Programação de Computadores II 32
Encapsulamento de Dados Orientação a Objetos
Proteger os atributos
Permitir acesso aos atributos através dos métodos
Pessoa
- nome: String - idade: int
+definirNome(nome: Sting): void
+retornarNome(): String
+definirIdade(idade: int): void
+retornarIdade(): int
...
04/08/2014 Programação de Computadores II 33
Encapsulamento de Dados. Orientação a Objetos
Um objeto X é denominado cliente de um objeto Y se utiliza métodos de Y Pelo encapsulamento:
Clientes de um objeto podem utilizar seus métodos sem conhecer os detalhes de sua implementação A implementação de um objeto pode ser alterada sem o conhecimento de seus clientes, desde que a interface visível seja mantida
04/08/2014 Programação de Computadores II 34
Encapsulamento de Dados Orientação a Objetos
Pedido de Serviço
Interface Visível
Implementação
Introdução
04/08/2014 Programação de Computadores II 7
Conceitos
04/08/2014 Programação de Computadores II 8
Herança Orientação a Objetos
Diferentes classes podem ter diversas semelhança
Duas ou mais classes poderão compartilhar os mesmos atributos e/ou os mesmos métodos.
Herança: Permite a uma classe herdar o estado (atributos) e o comportamento (métodos) de outra classe.
– Superclasse
– Subclasse
– Ancestral
– Descendente
04/08/2014 Programação de Computadores II 9
Herança Orientação a Objetos
Aluno Curso Matrícula Nota Média
Professor Formação Área de interesse Departamento
Pessoa
Nome Idade
04/08/2014 Programação de Computadores II 10
Herança Orientação a Objetos
Professor
- nome: String - idade: int - formação: String
+definirNome(nome: Sting): void
+retornarNome(): String
+definirIdade(idade: int): void
+retornarIdade(): int
+definirFormacao(f: Sting): void
+retornarFormacao(): String
...
Aluno
- nome: String - idade: int - curso: String
+definirNome(nome: Sting): void
+retornarNome(): String
+definirIdade(idade: int): void
+retornarIdade(): int
+definirCurso(c: Sting): void
+retornarCurso(): String
...
04/08/2014 Programação de Computadores II 11
Herança Orientação a Objetos
Professor
- nome: String - idade: int - formação: String
+definirNome(nome: Sting): void
+retornarNome(): String
+definirIdade(idade: int): void
+retornarIdade(): int
+definirFormacao(f: Sting): void
+retornarFormacao(): String
...
Aluno
- nome: String - idade: int - curso: String
+definirNome(nome: Sting): void
+retornarNome(): String
+definirIdade(idade: int): void
+retornarIdade(): int
+definirCurso(c: Sting): void
+retornarCurso(): String
...
04/08/2014 Programação de Computadores II 12
Herança Orientação a Objetos
Aluno - curso: String
Professor - formação: String
Pessoa
- nome: String - idade: int
+definirNome(nome: Sting): void
+retornarNome(): String
+definirIdade(idade: int): void
+retornarIdade(): int
+definirFormacao(f: Sting): void
+retornarFormacao(): String
+definirCurso(f: Sting): void
+retornarCurso(): String
04/08/2014 Programação de Computadores II 13
Herança Orientação a Objetos
Pessoa
- nome: String - idade: int
+definirNome(nome: Sting): void
+retornarNome(): String
+definirIdade(idade: int): void
+retornarIdade(): int
Aluno - curso: String
+definirCurso(f: Sting): void
+retornarCurso(): String
João
25
Sistemas de Informação
Instâncias de Aluno
Maria
20
Sistemas de Informação
04/08/2014 Programação de Computadores II 14
Herança Orientação a Objetos
//SuperClass.java
public class SuperClass
{
// Atributos e métodos
}
//SubClass.java public class SubClass extends SuperClass
{
// Atributos e métodos
}
04/08/2014 Programação de Computadores II 15
Herança Orientação a Objetos
class Pessoa { String nome; int idade; void definirNome(String valor) { nome = valor; } String retornarNome() { return nome; } void definirIdade(int valor) { idade = valor; } int retornarIdade() { return idade; } }
class Aluno extends Pessoa { String curso; void definirCurso(String valor) { curso = valor; } String retornarCurso() { return curso; } }
04/08/2014 Programação de Computadores II 16
Herança Orientação a Objetos
Aluno joao = new Aluno(); joao.definirNome(“João”); joao.definirIdade(25); joao.definirCurso(“Sistemas de Informação”); Aluno maria = new Aluno(); maria.definirNome(“Maria”); maria.definirIdade(20); maria.definirCurso(“Ciência da Computação”);
João 25 Sistemas de Informação
Maria 20 Ciência da Computação
04/08/2014 Programação de Computadores II 17
Herança Orientação a Objetos
Eletrodoméstico
Voltagem Garantia
Ligar Desligar
Liquidificador
Fabricante Cor
Auto Limpeza Velocidade
04/08/2014 Programação de Computadores II 18
Superposição de atributos e métodos Orientação a Objetos
Atributos com mesmo nome de atributos de superclasses escondem o atributo da superclasse
O acesso ao atributo da superclasse se faz com o uso do operador super
04/08/2014 © UFF/IC
public class Automovel extends VeiculoTerrestre {
public String licenca;
public Automovel(){
super.licenca="LAL1229";
}
}
04/08/2014 Programação de Computadores II 19
Herança e Generalização Orientação a Objetos
Uma generalização é um relacionamento entre itens gerais (superclasse) e itens mais específicos (subclasses) É representada por uma linha sólida com um triângulo vazado apontando para o item mais geral.
“é um”
“é um tipo de”
superclasse
subclasse
04/08/2014 © UFF/IC
04/08/2014 Programação de Computadores II 20
Classes Abstratas Orientação a Objetos
São classes que existem apenas conceitualmente para definir conjuntos de métodos e propriedades
Uma classe abstrata é uma classe que não tem instâncias diretas
Entretanto, suas classes descendentes podem ter instâncias diretas
04/08/2014 Programação de Computadores II 21
Herança Orientação a Objetos
public abstract class Empregado {
public Empregado (String nome, double salario) { this.numero = ++contador;
this.nome = nome;
this.salario = salario; }
public abstract void aumentaSalario(double percentual);
}
public class Vendedor extends Empregado{
public void aumentaSalario (double percentualDeAumento)
{ percComissao = percComissao * (1+percentualDeAumento/100);}
}
public class Gerente extends Empregado {
public void aumentaSalario(double percentual) {
double novoSalario = getSalario() * (1+2 * percentual/100);
setSalario(novoSalario);
}
}
04/08/2014 Programação de Computadores II 22
Interfaces Orientação a Objetos
Uma interface apenas propõe os métodos que devem ser implementados pelas classes que desejarem
Uma interface define um tipo.
04/08/2014 Programação de Computadores II 23
Herança Orientação a Objetos
public interface Ordenavel {
public int comparar(Ordenavel b);
}
public class Empregado implements Ordenavel {
...
public int comparar(Ordenavel b) {
Empregado e = (Empregado)b;
if (salario < e.salario) return -1;
if (salario > e.salario) return 1;
return 0;
} ...
}
public class Ordenacao {
public static void ordena(Ordenavel[] a)
{ ... if (a[i].comparar(a[i+]) > 1) ... }
}
04/08/2014 Programação de Computadores II 24
Classes Abstratas, concretas e interfaces Orientação a Objetos
Classes Abstratas Vs Classes Concretas
– Uma classe abstrata é uma classe que não tem instâncias diretas, mas cujas classes descendentes podem ter instâncias diretas.
– Uma classe concreta é uma classe que pode ser instanciada.
Classes Abstratas Vs Interfaces
– A classe abstrata pode possuir métodos não abstratos, bastando ter apenas um método abstrato para ser considerada como tal.
– Um interface apenas propõe os métodos que devem ser implementados pelas classes que desejarem.
– Uma interface define um tipo.
04/08/2014 Programação de Computadores II 25
Modificadores de Acesso Orientação a Objetos
Uma classe pode ser:
public acessada por qualquer outra classe.
nenhum modificador (package-private) acessada somente dentro do seu pacote.
04/08/2014 Programação de Computadores II 26
Modificadores de Acesso Orientação a Objetos
Atributos e Métodos podem ser:
public acessados por qualquer outra classe.
nenhum modificador (package-private) acessados somente dentro do seu pacote.
private acessados somente dentro de suas próprias classes.
protected
acessados somente dentro do seus pacotes e por suas subclasses.
04/08/2014 Programação de Computadores II 27
Modificadores de Acesso Orientação a Objetos
Não Não Não Sim private
Não Não Sim Sim nenhum
Não Sim Sim Sim protected
Sim Sim Sim Sim public
todos subclasse pacote
Classe/ Atributos ou
métodos
modificador
04/08/2014 Programação de Computadores II 28
Modificadores de Acesso Orientação a Objetos
Não Não Não Sim private
Não Não Sim Sim nenhum
Não Sim Sim Sim protected
Sim Sim Sim Sim public
Gamma AlphaSub Beta
Alpha
modificador
Alpha
Beta
AlphaSub
Gamma
SubClass
04/08/2014 Programação de Computadores II 29
Construtores Orientação a Objetos
class Pessoa { String nome; int idade; public Pessoa (String nome, int idade) { this.nome = nome; this.idade = idade; } public Pessoa () { this.nome = “João”; this.idade = 25; } }
Pessoa maria = new Pessoa(“Maria”, 20); Pessoa joao = new Pessoa();
04/08/2014 Programação de Computadores II 30
Construtores Orientação a Objetos
Devem ter o mesmo nome da classe que inicializam. Podem ter parâmetros. Não tem retorno. Se não é declarado nenhum construtor, a linguagem provê um construtor padrão sem argumentos que não faz nada.
04/08/2014 Programação de Computadores II 31
Construtores Orientação a Objetos
import java.util.*; public class AloMundo { private String mensagem = “ ”; public AloMundo () { Date data = new Date(); mensagem = "Alô, Mundo” + data.toString() ;
}
public void mostrarMensagem () { System.out.println( mensagem ); } }
Classe
Pacotes
Métodos
Variáveis
Construtores