Você está na página 1de 62

Programao Orientada a Objetos 1- Introduo

Curso de Especializao em Informtica - UFPR


Jos Henrique Dometerco

Apresentao

jhdometerco@yahoo.com.br http://www.inf.ufpr.br/dometerco/poo/ 25/06/2009 29/08/2009: 8 encontros 13/07 a 25/07: frias Apresentar os conceitos de OO em linguagem de programao; Desenvolver aplicaes simples explorando os conceitos apresentados; Capacitar o aluno a prosseguir com estudos mais aprofundados no paradigma e nos recursos da linguagem.

Aulas s quintas (19:00-22:40h)


Objetivos da disciplina

Apresentao
Escopo da disciplina

Classes e objetos Estrutura da linguagem de programao Herana, polimorfismo, encapsulamento Interfaces Tratamento de excees Genricos Colees e enumeraes I/O em arquivo e BD Outros (GUI, threads, etc.) Exerccios em todas as aulas

Apresentao
Mtodo

Aulas tericas e prticas Exerccios disponveis no site, resolvidos. 75% de freqncia Trabalho final Todos os alunos aprovados ao final da disciplina com nota A ou B.

Chamadas

Avaliao:

Meta:

Apresentao
Bibliografia

C++ in 24 hours. Jesse Liberty. Sams. 1997. ISBN: 0672-31067-8. Padres de Projeto. Richard Helm, John Vlissides, Ralph Johnson, Erich Gamma. Bookman. ISBN: 8573076100. A Linguagem de Programao Java. Ken Arnold, James Gosling, David Homes. 4. Edio, Bookman, 2007. ISBN: 978-85-60031-64-1. Refactoring: Improving the Design of Existing Code. Martin Fowler. Adisson Wesley. 2000. ISBN: 0201485672. Java: Como Programar. Harvey M. Deitel, Paul J. Deitel. 4. Edio, Bookman. Utilizando UML e Padres. Craig Larman. Bookman.
5

Apresentao
Sites importantes: Google Object Oriented Programming Google Structured Programming

Tutoriais de Java:
http://java.sun.com/docs/books/tutorial/index.html

Documentao da API do Java:


http://java.sun.com/j2se/1.5.0/docs/api/ http://java.sun.com/javase/6/docs/api/

Revistas

Java Magazine Mundo Java


6

Aula 1
Programao Orientada a Objetos (POO) Classes e Objetos em linguagem OO

Introduo
Linguagem de mquina

Introduo
Programao em Assembly Language

Pouca abstrao Pobreza de tipos de dados e controle de fluxo


Uso de goto

Otimizao do uso do hardware devido ao alto custo

Introduo
Programao em linguagem de alto nvel

COBOL, NATURAL, FORTRAN, C, etc. Aprimoramento de tipos de dados e controle


Sequncia Seleo Repetio

Suporte a sub-rotinas Programao em larga escala Abstrao do hardware

10

Introduo
Linguagem versus Tcnica de Programao

A linguagem na qual expressamos nossas idias tem forte influncia na forma que pensamos [1]

Programao no estruturada Programao procedimental Programao modular Programao orientada a objetos

11

Introduo
Programao no estruturada

Seqncia de comandos que operam dados globais ao programa Duplicao de seqncias de cdigo
Comando 1 Comando 2 Comando 3 Comando 4 Comando 5 Comando 6 Comando 2 Comando 3 Comando 7 Comando 8 ...
12

Introduo
Programao procedimental

Procedimentos ou funes
Lugar nico para seqncia de comandos repetentes

Parametrizao Dividir e Conquistar


Mltiplos nveis de chamadas

13

Introduo
Dividir e conquistar

Exemplo: calcular a mdia salarial dos empregados Encontrar quanto cada um ganha Contar o nmero de empregados Somar todos os salrios Dividir a soma pelo nmero de empregados
1.1 Acessar o registro de empregado 1.2 Acessar o salrio 1.3 Adicionar o salrio em um totalizador 1.4 Obter o prximo registro de empregado
1.1.1 Obter a conexo com o banco de dados 1.1.2 ...
14

1. 2. 3. 4.

Introduo
Programao Procedimental

Dividir e conquistar Recurso Ex: mergeSort; fatorial

int fatorial(int i) { if ((i == 0) || (i == 1)) return 1; else return i * fatorial (i - 1); }


15

Introduo
Programao Modular

Agrupam e externalizam procedimentos, para uso por mais programas Estado modular modificado pelas chamadas a procedimentos Existe somente um estado por mdulo Existe s 1 instncia do mdulo para todo o programa

16

Introduo
Programao Modular

Exemplo: Lista encadeada Programas usam estruturas (filas, listas, rvores, etc.) para armazenar dados em memria Operaes so executadas sobre essas estruturas, tais como inserir ou eliminar um item armazenado

17

Introduo
Programao Modular

Definio da interface da lista (information hiding) A lista fica em um mdulo comum a vrios programas

18

Introduo
Programao Modular

List_initialize: inicia as variveis locais ao mdulo List_append: insere um elemento List_getFirst: posiciona o cursor e retorna o primeiro elemento List_getNext: obtm o item armazenado e desloca o cursor List_ end : finaliza variveis locais ao mdulo (desaloca memria)
19

Introduo
Programao Modular

20

Introduo
Programao Modular

Mltiplas listas no mesmo programa


Problema: o mdulo mantm apenas um estado

Uma soluo: criar um handle para cada lista

21

Introduo
Programao Modular Problemas

Criao e destruio explcita

22

Introduo
Programao Modular Problemas

Falta de tipos seguros

23

Introduo
Programao Modular Problemas

Operaes e dados esto desacoplados

24

Introduo
Reflexo

Que tal criar dinamicamente, no programa, cpias de um mdulo, de forma que cada cpia ter seu prprio estado ? Que tal uma estrutura nica para dados + procedimentos ? Que tal uma estrutura que represente melhor as partes de um programa ?

25

Introduo
Programao Orientada a Objetos (POO)

Pode-se ter quantas listas forem necessrias (coexistncia). Cada lista um objeto. Procedimentos e dados esto em cada objeto. Afinal, o que um objeto?

26

Programao Orientada a Objetos


Objeto

Existe no tempo e no espao Objeto = dado + operaes Objeto = estado + comportamento

Classe

Descreve as caractersticas (os dados ou atributos) e o comportamento (as operaes) do objeto Molde para criao de objetos

Classe = tipo de dado Objeto = varivel, ou instncia da classe


27

Programao Orientada a Objetos


Atributos Elementos que caracterizam o objeto. Cada objeto tem seu conjunto prprio de atributos. Varivel declarada no contexto da classe. Operaes (ou mtodos) So comportamentos inerentes ao objeto, executados somente quando so solicitados.

Um software orientado a objetos constitui-se de um conjunto de objetos que interagem entre si atravs de troca de mensagens.
28

Programao Orientada a Objetos


Classe
Nota Fiscal

Atributos

Operaes

Nmero e srie, data de Inserir item, retirar item, calcular valor emisso, valor total, valor do total, calcular ICMS. ICMS, itens da nota. Nmero, agncia a que pertence, saldo, limite de crdito, senha. Obter saldo, obter nmero, obter limite de crdito. Realizar depsito em conta, realizar saque em conta, alterar limite de crdito de contas. Movimentar, definir cor, mostrar, ocultar. Comparar, concatenar, copiar, converter em maisculo ou minsculo todos os caracteres, procurar por uma subcadeia. Recuperar lista de objetos, gravar um objeto, excluir um objeto do banco de dados.
29

Conta Corrente Controle de Conta Corrente Elemento Grfico Cadeia de Caracteres Controle de persistncia

Posio no eixo X, posio no eixo Y, cor de preenchimento. Tamanho, lista de caracteres. Conexo com o banco de dados, comandos SQL prdefinidos.

Programao Orientada a Objetos


Abstrao

Generalizao de um conceito Hierarquias de classificao Ocultamento de detalhes

30

Programao Orientada a Objetos


Linguagens OO provem mecanismos para implementar o modelo OO:

Encapsulamento
Agrupamento de atributos e operaes em uma mesma estrutura de classe, propiciando viso de servio (e no viso de implementao), segurana e coeso.

Herana e Reutilizao
Mecanismo pelo qual elementos mais especficos (subclasses) incorporam estrutura e comportamento de elementos mais gerais (superclasses).

Polimorfismo
Recurso para invocar comportamentos distintos de um objeto por meio de uma mesma mensagem.

31

Introduo
Vantagens da POO Um nvel de estruturao a mais, comparado programao modular. Associao mais forte do mundo real com o programa (melhor representao e maior abstrao). Introduo de tipos denominados de classes, com os quais se criam os objetos.

32

Introduo
Empregado.c float indice = 0.25; Empregado.cpp class Empregado { float indice = 0.25;

float calculaSal(int h, float valorH) { return h * valorH; }

float calculaSal(int h, float valorH) { return h * valorH; }

float calculaEncargos(float sal) { return indice * sal; }

float calculaEncargos(float sal) { return indice * sal; }

void imprime(char * folha) { printf(Folha = %s\n, folha); } };

void imprime(char * folha) { printf(Folha = %s\nfolha); }


33

Programao Orientada a Objetos


Exemplos de Linguagens Orientadas a Objetos

Eiffel C++ C# Java

34

Exerccio
Escreva diferenas conceituais entre programao orientada a objetos e outras tcnicas de programao Liste algumas classes pertinentes ao atendimento de uma oficina mecnica.

35

Classes e objetos em Java


Em Java, uma classe uma estrutura que pode conter dados-membros (constantes e variveis), funesmembro (construtores e mtodos) e classes aninhadas. Sintaxe:
[especificador-de-acesso] class <identificador> { [Declaraes de atributos] [Declaraes de construtores] [Declaraes de mtodos] [Declaraes de classes aninhadas] }

Observao: os elementos sublinhados sero vistos nas prximas aulas.


36

Classes e objetos em Java


class

Palavra reservada que caracteriza a declarao de uma classe.

<identificador>

Qualquer nome vlido de classe.


Vlido = iniciado por uma letra, pelo caracter sublinhado ou por um cifro ($), seguidos de letras ou dgitos.

Padro recomendado (exemplos):


ContaCorrente, Pessoa, ControleDePersistencia.

{..}

Os caracteres { e } so delimitadores do corpo da classe.


37

Classes e objetos em Java


Arquivo: ContaCorrente.java

class ContaCorrente { }

38

Sintaxe para Atributos


[especificador-de-acesso] <tipo> <identificador> [= <valor-inicial>]; Observao: o elemento sublinhados ser visto nas prximas aulas.

<tipo>

Tipo do atributo: primitivo (char, byte, int, long, float, double, boolean) ou qualquer outra classe. Qualquer nome vlido de atributo (mesmo critrio usado na nomeao de classes) Padro recomendado (exemplos):

<identificador>

saldo, limiteDeCredito, agencia, posicaoNoEixoX.

<valor-inicial>

Expresso de inicializao do atributo (opcional).


39

Classes e objetos em Java


Arquivo: ContaCorrente.java

class ContaCorrente { int numero; double saldo; String senha; double limiteDeCredito = 100; }

40

Sintaxe para mtodos


[especificador-de-acesso] <tipoRetorno> <identificador>([lista-argumentos]) { comando(s); [return <valor>;] }
Observao: o elemento sublinhados ser visto nas prximas aulas.

<tipoRetorno>

Um tipo primitivo, uma classe ou void quando nada retornado. Nome do mtodo. Usar mesmas regras para nomes de atributos. Sempre utilizar verbos, indicando a ao executada. Lista de argumentos do mtodo. So separados por vrgula quando existe mais de um.
41

<identificador>

<[lista-argumentos]>

Sintaxe para mtodos


{..}

Os caracteres { e } so delimitadores do bloco de cdigo do mtodo. <Valor> representa o resultado gerado pelo mtodo, compatvel com o seu tipo de retorno. return, alm de retornar um resultado, causa a interrupo na execuo do mtodo.

[return <valor>;]

A assinatura do mtodo formada pelo identificador do mtodo mais os tipos de argumentos.


42

Classes e objetos em Java


class ContaCorrente { int numero; double saldo; String senha; double limiteDeCredito = 100; double depositar (double valor) { saldo = saldo + valor; return saldo; } }
43

Classes e objetos em Java


Declarao e criao de objetos em Java

Declarar: <tipo> <identificador> [= <valor-inicial>]; Criar: Utilizar o operador new

ContaCorrente cc1; cc1 = new ContaCorrente(); ContaCorrente cc2 = new ContaCorrente();


cc1 numero=0 saldo=0.0 senha=null limiteDeCredito=100.0 depositar(double)
cc2 numero=0 saldo=0.0 senha=null limiteDeCredito=100.0 depositar(double)
44

Classes e objetos em Java


Acesso aos atributos e mtodos

Utilizar o operador ponto . , precedido do objeto.

cc1.numero = 222; cc1.senha = anhes; cc1.depositar(400); cc2.depositar(300);


cc1 numero=222 saldo=400.0 senha=anhes limiteDeCredito=100.0 depositar(double)
cc2 numero=0 saldo=300.0 senha=null limiteDeCredito=100.0 depositar(double)
45

Programa mnimo em Java


Deve existir um mtodo em alguma classe com a seguinte assinatura:
public static void main (String[] args)

Este mtodo o ponto de entrada para a execuo do programa Java.


public class Teste { public static void main (String[] args) { ContaCorrente cc1 = new ContaCorrente(); cc1.numero = 222; cc1.depositar(400); System.out.println (O saldo : + cc1.saldo); } } Arquivo: Teste.java

46

Compilao e execuo
Compilao:
javac <arquivo.java> Aps a compilao, ser gerado um arquivo com a extenso .class.

Execuo:

java <arquivo>

Exemplo:
javac Teste.java java Teste ou javac *.java

47

Utilitrios
jps : Java Virtual Machine Process Status Tool jconsole: monitorao da memria do ambiente de execuo (JVM) jstat, jstatd, visualGC: monitorao da memria do ambiente de execuo (JVM)

48

Programao Orientada a Objetos


Notao UML (Unified Modeling Language)
<<Esteretipo>> NomeDaClasse atributo operacao()

NomeDoObjeto : NomeDaClasse

Classe

Objeto

49

Exerccios
Implemente em linguagem Java as seguintes classes.
TesteDoConversor main(args: String[]): void ConversorTemperatura fahrenheitParaCelsius(valor: double): double celsiusParafahrenheit(valor: double): double

Observaes:

A classe TesteDoConversor inicia a execuo do programa. Ela instancia um objeto da classe ConversorDeTemperatura, invoca cada um de seus mtodos informando um valor numrico (20.0, por exemplo), e ento mostra na tela cada resultado da converso. A relao entre temperaturas Celcius (C) e Fahrenheit (F) :
C = 5.0 / 9.0 * (F 32) F = 9.0 C / 5.0 + 32

Use System.out.println (...); para mostrar na tela o resultado. Exemplo: System.out.println (f + F = + c + C);
20.0 F = -6.666666666666667 C
50

Exerccios
Implemente em programao orientada a objetos uma lista para armazenar tarefas a fazer.

Cada tarefa (objeto da classe Tarefa) tem uma descrio, um status (se est pendente ou se j foi concluda), um esforo estimado em horas de trabalho para sua execuo, e o valor real de horas gastas para a sua execuo (inicialmente esse valor zero) A lista deve permitir a insero de tarefas (sempre no final da lista) e a remoo de tarefas (sempre do comeo) e informar ainda a quantidade de tarefas armazenadas. Obs.: ao remover, testar se a lista no est vazia. Neste caso, retornar um objeto invlido (null), como mostrado abaixo:
if (quantidade > 0) {

.... } else { return null; }


51

Exerccios
Operaes da lista:

void adicionar (Tarefa t) Tarefa remover (); int quantidade ()

52

Pontos de Ateno
No sair criando classes ao bel-prazer

necessrio pensar antes (anlise e projeto) e usar princpios e boas prticas

Viso simplista de projeto OO: aps identificar requisitos e criar um modelo de domnio, acrescente mtodos s classes de software e defina as trocas de mensagens entre os objetos para atender aos requisitos.

Questo: como alocar mtodos nas classes?

53

Pontos de Ateno
Qual o tamanho de uma classe? Classes devem ser coesas devem ter ou fazer coisas que tm afinidades entre si

Uma classe que l dados pela porta USB e envia pela porta paralela tem coeso?

A boa estruturao do sistema depende, por exemplo, de uma boa anlise e de aplicaes de padres de projeto
54

Separao de responsabilidades
Ex: padro de projeto DAO (Data Access Object)
Cliente +nome +dataNascimento +sexo +... +Operation1() +Operation2() +...() ClienteDAO +create(Cliente) +retrieve(Key): Cliente +update(Cliente) +delete(Cliente)

RDBMS

OrdemDeServico +data +... +Operation1() +...()

OrdemDeServicoDAO +create(OrdemDeServico) +retrieve(Key): OrdemDeServico +update(OrdemDeServico) +delete(OrdemDeServico)

RDBMS

55

Camadas

Apresentao Aplicao Domnio Infra de negcio Servios tcnicos Base

Separation of concerns OSI Dependncia Reuso Propagao Equipes diferentes

56

Interao entre as camadas

57

Identificao inicial de classes (anlise)


Exemplo (sugesto):

Secretria

Cadastrar aluno

SGBD

<<Fronteira>>

<<Controle>>

<<Fronteira>>

InterfaceSecretaria

ControleCadAluno

InterfaceSGBD

<<Entidade>>

Aluno

58

Identificao inicial de classes (anlise)


Outra sugesto:
Emitir dirio de classe

Secretria

SGBD

<<Entidade>>

<<Entidade>>

<<Entidade>>

<<Entidade>>

DiarioClasse
codigoTurma : char[8] listaAlunos

Disciplina
cargaHoraria : int nomeDisciplina : char[20] codigoDisciplina : char[10]

Professor
codigo : int nome : char[30] categoria : char

Aluno
registro : int nome : char[30] curso : int

<<Fronteira>>

<<Controle>>

<<Fronteira>>

InterfaceSecretaria

CtrlEmissaoDiario

InterfaceSGBD

59

Roteiro para modelagem


Exemplo:

60

Interao entre objetos


Janela

Controlador

ClienteDao

Cliente

DataSource

1 : mostar info cliente() 2 : recuperar cliente() 3 : retrieve() 4 : get data() 5 : new()

6 : set data()

7 : getNome()

61

Sites consultados
[1]http://pplab.snu.ac.kr/courses/adv_pl05/papers /p261-knuth.pdf [2]http://gd.tuwien.ac.at/languages/c/c++ooppmueller

62