introdução à análise orientada a objetos parte 1

36
Introdução à Análise Orientada a Objetos Prof. Ariovaldo Dias de Oliveira

Upload: ariovaldodias

Post on 18-Dec-2014

1.976 views

Category:

Technology


6 download

DESCRIPTION

Introdução à Análise Orientada a Objetos Parte 1

TRANSCRIPT

Page 1: Introdução à análise orientada a objetos parte 1

Introdução à Análise Orientada a Objetos

Prof. Ariovaldo Dias de Oliveira

Page 2: Introdução à análise orientada a objetos parte 1

Apresentações

• Do Professor• Dos Alunos, com suas respectivas

experiências profissionais em Orientação a Objetos

Page 3: Introdução à análise orientada a objetos parte 1

Tópicos

• Paradigma de Orientação a Objetos (OO)• Conceito dos principais elementos da OO• UML: Conceitos e os principais diagramas voltados a

Análise Orientada a Objetos (AOO) • Estudo das Classes, Diagrama de Classes e Objetos,

seu uso nas Fases iniciais do Projeto para identificação do Domínio da Aplicação (Classes de Negócio)

• A evolução das Classes no transcorrer do projeto (do negócio até a especificação do código e ser implementado para a classe)

• Conceito de reuso em OO• Padrões de Software

Page 4: Introdução à análise orientada a objetos parte 1

Paradigmas de programação

• Paradigma procedural• Leva o desenvolvedor a decompor o sistema em

partes menores (funções), criando um emaranhado de inúmeras funções que chamam umas às outras

• Geralmente não há separação de conceitos e responsabilidades, causando dependências enormes no sistema, dificultando futuras manutenções no código do programa. Não existe muito reaproveitamento de código, ao contrário, muitas vezes se tem muito código duplicado

Page 5: Introdução à análise orientada a objetos parte 1

Paradigmas de programação

• Paradigma Orientação a Objetos • O paradigma da OO eleva a programação (POO) e o

desenvolvimento (AOO) de sistemas para um novo patamar.

• A OO é um mecanismo moderno que ajuda a definir a estrutura de programas baseado nos conceitos do mundo real, sejam eles reais ou abstratos

• A OO permite criar programas componentizados, separando as partes do sistema por responsabilidades e fazendo com que essas partes se comuniquem entre si, por meio de mensagens

Page 6: Introdução à análise orientada a objetos parte 1

Comparação Procedural X OO

Programa Classe

Processos

Propriedades

Métodos

Dados

Page 7: Introdução à análise orientada a objetos parte 1

Principais elementos da OO

• Classes• Objetos• Atributos• Construtores• Métodos• Encapsulamento• Herança• Reescrita• Sobrecarga• Polimorfismo

Page 8: Introdução à análise orientada a objetos parte 1

Classes

• Uma classe é uma estrutura que abstrai um conjunto de objetos com características similares

• Exemplos• Classe de Automóveis• Classe de Funcionários de uma empresa• Classe de Livros em uma biblioteca• Classe de Livros em uma gráfica

Page 9: Introdução à análise orientada a objetos parte 1

Objetos

• Um objeto é um exemplar de uma classe• Exemplos

• Civic é um objeto Classe de Automóveis• João é um objeto da Classe de Funcionários de

uma empresa• Algoritmos em VB.Net é um objeto da classe de

Livros em uma biblioteca• 97885604340770 é um objeto da Classe de

Livros em uma gráfica

Page 10: Introdução à análise orientada a objetos parte 1

Atributos

• São os elementos que caracterizam um objeto

• Exemplos

• Cor é um atributo para Carro

• Estado civil é um atributo para Funcionário

• Quantidade é um atributo para Livros

• Gramatura é um atributo para Livros

• Os atributos podem ter valores:

• Prata é um valor para Cor

• Casado é um valor para Estado Civil

• 5 é um valor para Quantidade

• 120 é um valor para Gramatura

Page 11: Introdução à análise orientada a objetos parte 1

Métodos

• São operações que visam:• introduzir (setters) ou recuperar (getters) valores

dos atributos • modificar valores dos atributos

• Exemplos• Pintar é um método que visa mudar o atributo

Cor do objeto carro• getEstadoCivil é um método que recupera o

valor do atributo Estado Civil• Vender é método que altera o atributo

Quantidade

Page 12: Introdução à análise orientada a objetos parte 1

Exemplo de uma Classe

• Conta Bancária

• composta por (atributos):

• número

• nome do Cliente

• saldo

• limite

• O que fazemos em uma conta (métodos)

• sacar um valor x

• depositar um valor x

• imprimir o nome do titular da conta

• transferir x para a conta y

Page 13: Introdução à análise orientada a objetos parte 1

Em Java:

class Conta {

int número;

String nome;

double saldo;

double limite;

}

class Programa {

public static void main (String [ ] args) {

Conta minhaConta = new Conta( );

}

}

Page 14: Introdução à análise orientada a objetos parte 1

Ao criarmos uma conta, devemos introduzir valores nos atributosclass Programa {

public static void main (String [ ] args) {

Conta minhaConta = new Conta( );

minhaConta.nome = "João" ;

minhaConta.número = 123456;

minhaConta.saldo = 1000;

minhaConta.limite = 5000;

System.out.println(" Saldo = " + minhaConta.saldo);

}

}

Page 15: Introdução à análise orientada a objetos parte 1

Podemos sacar e depositar um determinado valor, e isso é feito definindo-se dois métodos

class Conta {

int número;

String nome;

double saldo;

double limite;

void saca (double valor) {

saldo = saldo - valor;

}

void deposita (double valor) {

saldo = saldo + valor;

}

}

Page 16: Introdução à análise orientada a objetos parte 1

O programa principal deve ser alterado para ativar os métodos recém criados

class Programa {

public static void main (String [ ] args) {

Conta minhaConta = new Conta( );

minhaConta.nome = "João";

minhaConta.número = 123456;

minhaConta.saldo = 1000;

minhaConta.limite = 5000;

minhaConta.deposita (400);

minhaConta.saca(100);

System.out.println("Saldo = " + minhaConta.saldo);

}

}

Page 17: Introdução à análise orientada a objetos parte 1

O método Saca deve verificar se o saque é possível, e retornar se a operação foi realizada com sucesso

class Conta {

int número;

...

boolean saca (double valor) {

if (saldo + limite - valor > 0 ) {

saldo = saldo - valor;

return true;

} else {

return false;

}

}

void deposita (double valor) {

saldo = saldo + valor;

}

}

Page 18: Introdução à análise orientada a objetos parte 1

O programa principal deve testar se o saque foi possível

class Programa {

public static void main (String [ ] args) {

Conta minhaConta = new Conta( );

minhaConta.nome = "João";

minhaConta.número = 123456;

minhaConta.saldo = 1000;

minhaConta.limite = 5000;

minhaConta.deposita (400);

boolean consegui = minhaConta.saca(10000);

if (consegui) {

System.out.println("Saque realizado. Novo saldo = " + minhaConta.saldo);

} else {

System.out.println("Saldo de " + minhaConta.saldo + " insuficiente");

}

}

}

Page 19: Introdução à análise orientada a objetos parte 1

• + público - visível em qualquer classe

• # protegido - qualquer descendente pode usar

• - privado - visível somente dentro da classe

Representação da classe Conta em UML

Conta

+número: int+nome: String +saldo: double+limite: double

+saca (valor: double): boolean+deposita(valor: double)

Os sinais na frente dos nomes das variáveis ou dos nomes dos métodos significam

Page 20: Introdução à análise orientada a objetos parte 1

Acrescentar Método transferePara na classe Conta

class Conta {

int número;

...

boolean saca ......

......

void deposita ...

...

boolean transferePara (Conta destino, double valor) {

boolean retirou = saca(valor);

if (retirou == false) {

return false;

} else {

destino.deposita(valor);

return true;

}

}

}

Page 21: Introdução à análise orientada a objetos parte 1

No programa principal:

class Programa {

public static void main (String [ ] args) {

Conta conta1 = new Conta( );

conta1.nome = "João";

conta1.número = 123456;

conta1.saldo = 1000;

conta1.limite = 5000;

Conta conta2 = new Conta( );

conta2.nome = "Maria";

conta2.número = 987654;

conta2.saldo = 2000;

conta2.limite = 4000;

Segue...

Page 22: Introdução à análise orientada a objetos parte 1

boolean consegui = conta1.transferePara(conta2, 12000); if (consegui) { System.out.println("Saque realizado. Novo saldo conta1 = " + conta1.saldo); System.out.println("Novo saldo conta2 = " + conta2.saldo); } else { System.out.println("Saldo de " + conta1.saldo + " insuficiente"); } }}

Page 23: Introdução à análise orientada a objetos parte 1

Nova Representação da classe Conta em UML

Conta

+número: int+nome: String +saldo: double+limite: double

+saca (valor: double): boolean+deposita (valor: double):+transferePara (destino: Conta, valor: double) : boolean

Page 24: Introdução à análise orientada a objetos parte 1

Nova Classe: Clienteclass Cliente {

String nome;

String sobrenome;

String endereço;

String cpf;

}

Page 25: Introdução à análise orientada a objetos parte 1

Alterações na classe Conta:

class Conta {int número;double saldo;double limite;Cliente titular = new Cliente () ;

boolean saca ............void deposita ............boolean transferePara ...........

}

Page 26: Introdução à análise orientada a objetos parte 1

Alterações no programa principal:

class Programa { public static void main (String [ ] args) { Conta conta1 = new Conta( ); conta1.titular.nome = "João "; ...... conta2.titular.nome = " Maria "; ......

System.out.println("Titular da conta1 = " + conta1.titular.nome); System.out.println("Titular da conta2 = " + conta2.titular.nome); }}

Page 27: Introdução à análise orientada a objetos parte 1

Representação UML das classes Conta e Cliente

Conta

+número: int+saldo: double+limite: double+titular: Cliente

+saca (valor: double): boolean+deposita(valor: double)+transferePara (destino: Conta, valor: double) : boolean

Cliente

+nome: String+sobrenome: String +endereço: String+cpf: String

Page 28: Introdução à análise orientada a objetos parte 1

Um sistema Orientado a Objetos é um grande conjunto de classes que vão se comunicar, delegando responsabilidade para quem for mais apto a realizar determinada tarefa. A classe Banco usa a classe Conta, que usa a classe Cliente, que usa a classe Endereço, etc. Dizemos que esses objetos colaboram, trocando mensagens entre si. Por isso acabamos tendo muitas classes em nossos sistemas, e elas costuma ter um tamanho relativamente curto.

Page 29: Introdução à análise orientada a objetos parte 1

Encapsulamento

• O encapsulamento protege o acesso direto (referência) aos atributos de uma instância fora da classe onde estes foram declarados. Esta proteção consiste em se usar modificadores de acesso mais restritivos sobre os atributos definidos na classe. Depois devem ser criados métodos para manipular de forma indireta os atributos da classe. (Wikipédia)

Page 30: Introdução à análise orientada a objetos parte 1

• O encapsulamento é feito com o uso de modificadores de acesso na declaração dos atributos e/ou métodos.

• Os modificadores são:• public - Qualquer classe pode ter acesso ao

atributo ou ao método

• private – Apenas os métodos da própria classe podem ter acesso ao atributo ou a outros métodos da classe

• protected – Apenas os métodos da própria classe ou das subclasses podem ter acesso ao atributo ou outros métodos da classe

Page 31: Introdução à análise orientada a objetos parte 1

Classe Conta com atributos encapsulados

class Conta {

int número;

private double saldo;

private double limite;

Cliente titular = new Cliente () ;

......

O(s) programa(s) que chama(m) a classe Conta não pode(m) mais referenciar diretamente os atributos saldo nem limite. Isso agora só será possível via métodos. Daí a necessidade de se criar Getters e Setters

Page 32: Introdução à análise orientada a objetos parte 1

Geters e Seters na classe Conta

.....

double getSaldo() {

return saldo;

}

void setSaldo (double valor) {

saldo = valor;

}

double getLimite() {

return limite;

}

void setLimite(double valor) {

limite = valor;

}

Page 33: Introdução à análise orientada a objetos parte 1

No programa principal:

class Programa {

public static void main (String [ ] args) {

Conta conta1 = new Conta( );

conta1.titular.nome = "João";

conta1.número = 123456;

conta1.setSaldo(1000);

conta1.setLimite(5000);

System.out.println("Saldo = " + conta1.getSaldo( ));

System.out.println("Limite = " + conta1.getLimite( ));

}

}

Page 34: Introdução à análise orientada a objetos parte 1

Nova Representação UML das classes Conta e Cliente

Conta

+número: int+saldo: double-limite: double-titular: Cliente

+saca (valor: double): boolean+deposita(valor: double)+transferePara (destino: Conta, valor: double) : boolean+setSaldo(valor: double)+getSaldo ( ): double+setLimite(valor: double)+getLimite( ): double

Cliente

+nome: String+sobrenome: String +endereço: String+cpf: String

Page 35: Introdução à análise orientada a objetos parte 1

Atividade 1

Esta atividade tem por objetivo modelar uma classe para Funcionário. Este deve ter nome, departamento onde trabalha, salário, data de admissão, RG, e um valor booleano que indique se ele ainda é funcionário ou se não trabalha mais na empresa.

Você deve criar alguns métodos de acordo com as necessidades que julgar conveniente para o sistema. Além desses, crie um método bonifica que aumenta o salário de acordo com um parâmetro passado como argumento. Crie também um método demite, que não recebe parâmetro algum, só modifica o valor booleano correspondente.

A. Faça a modelagem em um diagrama UML.

B. Codifique essa classe em Java

C. Crie um programa Java(simples) somente com o objetivo de testar a classe Funcionário

Page 36: Introdução à análise orientada a objetos parte 1

Referências

• Orientação a objetos. Disponível em <http : //www.softechnetwork.com.br/java/CursoOO.pdf >. Acesso em :11 mar. 2011.

• Java e Orientação a Objetos. Disponível em <www. caelum.com.br> Acesso em 15 fev. 2009.

• RUMBAUGH, James et al. Modelagem e Projetos baseados e Objetos. Rio de Janeiro: Campus, 1997.