Sie sind auf Seite 1von 44

Introduo Anlise

Orientada a Objetos

Apresentaes

Do Professor

Dos Alunos, com suas respectivas experincias


profissionais em Orientao a Objetos

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Tpicos

Paradigma de Orientao a Objetos (OO)

Conceito dos principais elementos da OO

UML: Conceitos e os principais diagramas voltados a


Anlise Orientada a Objetos (AOO)

Estudo das Classes, Diagrama de Classes e Objetos, seu


uso nas Fases iniciais do Projeto para identificao do
Domnio da Aplicao
(Classes de Negcio)

A evoluo das Classes no transcorrer do projeto (do


negcio at a especificao do cdigo e ser
implementado para a classe)

Conceito de reuso em OO

Padres de Software
Prof. Paulo Lacerda
paulo@quallyleste.com.br

Paradigmas de programao
Paradigma

procedural

Leva o desenvolvedor a decompor o sistema em partes menores


(funes), criando um emaranhado de inmeras funes que
chamam umas s outras

Geralmente no h separao de conceitos e responsabilidades,


causando dependncias enormes no sistema, dificultando futuras
manutenes no cdigo do programa. No existe muito
reaproveitamento de cdigo, ao contrrio, muitas vezes se tem
muito cdigo duplicado

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Paradigmas de programao
Paradigma

Orientao a Objetos

O paradigma da OO eleva a programao (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

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Comparao Procedural X OO
Programa

Classe

Processos
Propriedades

Dados
Mtodos

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Principais elementos da OO

Classes

Objetos

Atributos

Construtores

Mtodos

Encapsulamento

Herana

Reescrita

Sobrecarga

Polimorfismo

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Classes

Uma classe uma estrutura que abstrai um conjunto de objetos


com caractersticas similares

Exemplos

Classe de Automveis

Classe de Funcionrios de uma empresa

Classe de Livros em uma biblioteca

Classe de Livros em uma grfica

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Objetos

Um objeto um exemplar de uma classe

Exemplos

Civic um objeto Classe de Automveis

Joo um objeto da Classe de Funcionrios de uma empresa

Algoritmos em PHP um objeto da classe de Livros em uma biblioteca

97885604340770 um objeto da Classe de Livros em uma grfica

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Atributos

So os elementos que caracterizam um objeto

Exemplos

Cor um atributo para Carro

Estado civil um atributo para Funcionrio

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

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Mtodos

So operaes que visam:

introduzir (setters) ou recuperar (getters) valores dos atributos

modificar valores dos atributos

Exemplos

Pintar um mtodo que visa mudar o atributo Cor do objeto carro

getEstadoCivil um mtodo que recupera o valor do atributo Estado


Civil

Vender mtodo que altera o atributo Quantidade

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Exemplo de uma Classe

Conta Bancria

composta por (atributos):

nmero

nome do Cliente

saldo

limite

O que fazemos em uma conta (mtodos)

sacar um valor x

depositar um valor x

imprimir o nome do titular da conta

transferir x para a conta y

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Em Java:
class Conta {
int nmero;
String nome;
double saldo;
double limite;
}
class Programa {
public static void main (String [ ] args) {
Conta minhaConta = new Conta( );
}
}
Prof. Paulo Lacerda
paulo@quallyleste.com.br

Ao criarmos uma conta, devemos


introduzir valores nos atributos
class Programa {
public static void main (String [ ] args) {
Conta minhaConta = new Conta( );
minhaConta.nome = "Joo" ;
minhaConta.nmero = 123456;
minhaConta.saldo = 1000;
minhaConta.limite = 5000;
System.out.println(" Saldo = " + minhaConta.saldo);
}
}

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Podemos sacar e depositar um determinado


valor, e isso feito definindo-se dois mtodos
class Conta {
int nmero;
String nome;
double saldo;
double limite;
void saca (double valor) {
saldo = saldo - valor;
}
void deposita (double valor) {
saldo = saldo + valor;
}
}

Prof. Paulo Lacerda


paulo@quallyleste.com.br

O programa principal deve ser alterado para


ativar os mtodos recm criados
class Programa {
public static void main (String [ ] args) {
Conta minhaConta = new Conta( );
minhaConta.nome = "Joo";
minhaConta.nmero = 123456;
minhaConta.saldo = 1000;
minhaConta.limite = 5000;
minhaConta.deposita (400);
minhaConta.saca(100);
System.out.println("Saldo = " + minhaConta.saldo);
}
}

Prof. Paulo Lacerda


paulo@quallyleste.com.br

O mtodo Saca deve verificar se o saque


possvel, e retornar se a operao foi realizada
com sucesso
class Conta {
int nmero;
...
boolean saca (double valor) {
if (saldo + limite - valor > 0 ) {
saldo = saldo - valor;
return true;
} else {
return false;
}
}
void deposita (double valor) {
saldo = saldo + valor;
}
}
Prof. Paulo Lacerda
paulo@quallyleste.com.br

O programa principal deve testar se o saque


foi possvel
class Programa {
public static void main (String [ ] args) {
Conta minhaConta = new Conta( );
minhaConta.nome = "Joo";
minhaConta.nmero = 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");
}
}
}

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Representao da classe Conta em


UML
Conta
+nmero: int
+nome: String
+saldo: double
+limite: double
+saca (valor: double): boolean
+deposita(valor: double)

Os sinais na frente dos nomes das variveis ou dos nomes dos mtodos significam

+ pblico - visvel em qualquer classe

# protegido - qualquer descendente pode usar

- privado - visvel somente dentro da classe

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Acrescentar Mtodo
transferePara na classe Conta
class Conta {
int nmero;
...
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;
}
}
}

Prof. Paulo Lacerda


paulo@quallyleste.com.br

No programa principal:
class Programa {
public static void main (String [ ] args) {
Conta conta1 = new Conta( );
conta1.nome = "Joo";
conta1.nmero = 123456;
conta1.saldo = 1000;
conta1.limite = 5000;
Conta conta2 = new Conta( );
conta2.nome = "Maria";
conta2.nmero = 987654;
conta2.saldo = 2000;
conta2.limite = 4000;
Prof. Paulo Lacerda
paulo@quallyleste.com.br
Segue...

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");
}
}
}

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Nova Representao da classe


Conta em UML
Conta
+nmero: int
+nome: String
+saldo: double
+limite: double
+saca (valor: double): boolean
+deposita (valor: double):
+transferePara (destino: Conta, valor: double) : boolean

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Nova Classe: Cliente


class Cliente {
String nome;
String sobrenome;
String endereo;
String cpf;
}

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Alteraes na classe Conta:


class Conta {
int nmero;
double saldo;
double limite;
Cliente titular = new Cliente () ;
boolean saca ......
......
void deposita ......
......
boolean transferePara .....
......
}

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Alteraes no programa principal:


class Programa {
public static void main (String [ ] args) {
Conta conta1 = new Conta( );
conta1.titular.nome = "Joo ";
......
conta2.titular.nome = " Maria ";
......
System.out.println("Titular da conta1 = " + conta1.titular.nome);
System.out.println("Titular da conta2 = " + conta2.titular.nome);
}
}

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Representao UML das classes


Conta e Cliente
Conta
+nmero: int
+saldo: double
+limite: double
+titular: Cliente

Cliente
+nome:
String
+sobrenome: String
+endereo:
+cpf:

String
String

+saca (valor: double): boolean


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

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Um sistema Orientado a Objetos um grande


conjunto de classes que vo 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 Endereo, 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.

Encapsulamento

O encapsulamento protege o acesso direto (referncia)


aos atributos de uma instncia fora da classe onde estes
foram declarados. Esta proteo consiste em se usar
modificadores de acesso mais restritivos sobre os
atributos definidos na classe. Depois devem ser criados
mtodos para manipular de forma indireta os atributos
da classe. (Wikipdia)

Prof. Paulo Lacerda


paulo@quallyleste.com.br

O encapsulamento feito com o uso de modificadores de acesso


na declarao dos atributos e/ou mtodos.

Os modificadores so:

public - Qualquer classe pode ter acesso ao atributo ou ao mtodo

private Apenas os mtodos da prpria classe podem ter acesso ao


atributo ou a outros mtodos da classe

protected Apenas os mtodos da prpria classe ou das subclasses


podem ter acesso ao atributo ou outros mtodos da classe

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Classe Conta com atributos


encapsulados
class Conta {
int nmero;
private double saldo;
private double limite;
Cliente titular = new Cliente () ;
......
O(s) programa(s) que chama(m) a classe Conta no
pode(m) mais referenciar diretamente os atributos
saldo nem limite. Isso agora s ser possvel via
mtodos. Da a necessidade de se criar Getters e
Setters

Prof. Paulo Lacerda


paulo@quallyleste.com.br

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;
}
Prof. Paulo Lacerda
paulo@quallyleste.com.br

No programa principal:
class Programa {
public static void main (String [ ] args) {
Conta conta1 = new Conta( );
conta1.titular.nome = "Joo";
conta1.nmero = 123456;
conta1.setSaldo(1000);
conta1.setLimite(5000);
System.out.println("Saldo = " + conta1.getSaldo( ));
System.out.println("Limite = " + conta1.getLimite( ));
}
}
Prof. Paulo Lacerda
paulo@quallyleste.com.br

Nova Representao UML das


classes Conta e Cliente
Conta
+nmero: int
+saldo: double
-limite: double
-titular: Cliente

Cliente
+nome:
String
+sobrenome: String
+endereo:
+cpf:

String
String

+saca (valor: double): boolean


+deposita(valor: double)
+transferePara (destino: Conta,
valor: double) : boolean
+setSaldo(valor: double)
+getSaldo ( ): double
+setLimite(valor: double)
+getLimite( ): double
Prof. Paulo Lacerda
paulo@quallyleste.com.br

Atividade 1
Esta atividade tem por objetivo modelar uma classe para Funcionrio.
Este deve ter nome, departamento onde trabalha, salrio, data de
admisso, RG, e um valor booleano que indique se ele ainda
funcionrio ou se no trabalha mais na empresa.
Voc deve criar alguns mtodos de acordo com as necessidades que
julgar conveniente para o sistema. Alm desses, crie um mtodo bonifica
que aumenta o salrio de acordo com um parmetro passado como
argumento. Crie tambm um mtodo demite, que no recebe parmetro
algum, s modifica o valor booleano correspondente.
A.

Faa 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 Funcionrio

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Mtodo Construtor
O mtodo construtor desenvolvido da mesma forma que
uma funo, a nica diferena que ele tem o mesmo nome
da classe.
Isso se deve ao fato de que um objeto deve ser construdo
cada vez que chamamos a classe. E a responsabilidade de
fazer isso do construtor. Isso parte do princpio que
podemos ter dois objetos com a mesma caracterstica, mas
que no so os mesmos objetos.
public class MinhaClasse {
public MinhaClasse() { //esse o metodo
construtor
System.out.println("Oi!");
}
}
Prof. Paulo Lacerda
paulo@quallyleste.com.br

Herana
Enquanto programamos em Java, h a necessidade de
trabalharmos com vrias classes. Muitas vezes, classes diferentes
tem caractersticas comuns, ento, ao invs de criarmos uma nova
classe com todas essas caractersticas usamos as caractersticas
de um objeto ou classe j existente.
Ou seja, herana , na verdade, uma classe derivada de outra
classe.

class NomeDaClasseASerCriada extends NomeDaClasseASerHerdada


Importante: Java permite que uma classe herde apenas as caractersticas de
uma nica classe, ou seja, no pode haver heranas mltiplas. Porm,
permitido heranas em cadeias, por exemplo: se a classe Mamifero herda a
classe Animal, quando fizermos a classe Cachorro herdar a classe Mamifero,
a classe Cachorro tambm herdar as caractersticas da classe Animal.

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Sobrecarga
Java nos permite criar vrios mtodos com o mesmo nome
desde que tenham parmetros diferentes. Isso o que
chamamos de sobrecarga de mtodos.
A sobrecarga de mtodos consiste em criarmos o mesmo mtodo
com possibilidades de entradas diferentes. Essas entradas,
caracterizadas como parmetros, devem sempre ser de tipos
diferentes, quantidades de parmetros diferentes ou posies dos
tipos diferentes.

package tiexpert;
public class Eletrodomestico {
private boolean ligado;
private int voltagem;
private int consumo;
public Eletrodomestico(boolean ligado, int voltagem, int
consumo) {
this.ligado = ligado;
this.voltagem = voltagem;
this.consumo = consumo;
}
// (...)
}

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Sobreescrita
Diferente da sobrecarga, a sobrescrita acontece quando um
mtodo existe em uma classe pai e reescrito na classe filha para
alterar o comportamento. A assinatura do mtodo deve ser igual
na classe pai e na classe filha.
Mtodo Sobrescrito so mtodos declarados com mesmo nome em
sua classe ou em suas subclasses, mas com algumas caractersticas:
lista de argumentos iguais.
mesmo tipo de retorno (isso inclui retorno covariantes).
nvel de acesso mais restritivo
no pode sobrescrever mtodo static e marcado com final
no pode sobrescrever mtodos private, ou seja, se ele no poder ser
herdado, no pode ser subscrito.
no pode pode lanar excees checadas novas mais abrangentes.
pode lanar qualquer exceo no-checadas, independente do
mtodo novo ou antigo declarar ou no a exceo.

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Interfaces
Interface um recurso da orientao a objeto utilizado em Java que
define aes que devem ser obrigatoriamente executadas, mas que
cada classe pode executar de forma diferente.
Interfaces contm valores constantes ou assinaturas de mtodos
que devem ser implementados dentro de uma classe.
E por que isso?
Isso se deve ao fato que muitos objetos (classes) podem possuir a
mesma ao (mtodo), porm, podem execut-la de maneira
diferente.
Usando um exemplo bem drstico, podemos ter uma interface
chamada areo que possui a assinatura do mtodo voar(). Ou
seja, toda classe que implementar areo deve dizer como
voar(). Portanto, se eu tenho uma classe chamada pssaro e
outra chamada avio, ambas implementando a interface
areo, ento, nestas duas classes devemos codificar a forma
como cada um ir voar().

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Classes Abstratas e Mtodos


Abstratos

Classes abstratas tem uma funo importante na orientao a


objeto em Java.
De forma objetiva, uma classe abstrata serve apenas como
modelo para uma classe concreta (classe que comumente
usamos).
Como classes abstratas so modelos de classes, ento, no
podem ser instanciadas diretamente com o new, elas sempre
devem ser herdadas por classes concretas.
Outro fato importante de classes abstratas que elas podem conter
ou no mtodos abstratos, que tem a mesma definio da assinatura
de mtodo encontrada em interfaces. Ou seja, uma classe abstrata
pode implementar ou no um mtodo.

Os mtodos abstratos definidos em uma classe abstrata devem


obrigatoriamente ser implementados em uma classe concreta. Mas se
uma classe abstrata herdar outra classe abstrata, a classe que herda
no precisa implementar os mtodos abstratos.

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Modificadores de Acesso
Em programao orientada a objetos, modificador de acesso,
tambm chamado de viso de mtodo ou ainda viso de atributo,
a palavra-chave que define um atributo, mtodo ou classe como
pblico (ou public, qualquer classe pode ter acesso), privado (ou
private, apenas os mtodos da prpria classe pode manipular o
atributo) ou protegido (ou protected, pode ser acessado apenas
pela prpria classe ou pelas suas subclasses).

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Modificadores de Acesso
Um atributo quando declarado com o modificador static tem a
caracterstica de "propagar o seu valor" por todas as instncias da
classe a que pertence, ou seja o seu valor ser o mesmo para
todas as instncias.
palavra chave final sim, esta ajuda a implementar objetos imutveis
j que s se pode atribuir valor ao membro "final" uma nica vez, e
j que o compilador exige que este valor seja atribudo j no
construtor da classe (caso no tenha sido atribudo j na prpria
declarao do membro esttico)

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Referncias

Orientao a objetos. Disponvel em


<http :
//www.softechnetwork.com.br/java/CursoOO.pdf >. Acesso
em :11 mar. 2011.

Java e Orientao a Objetos. Disponvel em


caelum.com.br> Acesso em 15 fev. 2009.

RUMBAUGH, James et al. Modelagem e Projetos baseados e


Objetos. Rio de Janeiro: Campus, 1997.

<www.

Prof. Paulo Lacerda


paulo@quallyleste.com.br

Das könnte Ihnen auch gefallen