programação orientada a objetos - imparbs/pdf/oop.pdf · “programa” é uma seqüência de...

172
Programação Orientada a Objetos Programação Orientada a Objetos Roberto de Beauclair Seixas Roberto de Beauclair Seixas [email protected] [email protected]

Upload: lytuyen

Post on 24-Apr-2018

221 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Programação Orientada a ObjetosProgramação Orientada a Objetos

Roberto de Beauclair SeixasRoberto de Beauclair Seixas

[email protected]@lncc.br

Page 2: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 2

Agenda

✔ Nivelamento

✔ Histórico

✔ Características da OOP

✔ Terminologia– Definições e Exemplos

✔ Desenvolvimentos de Programas OO

✔ Metodologia de Programação OO

✔ Estudo de Casos (Exercícios Orientados)

Page 3: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Parte 1

Conceitos básicos

Page 4: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 4

Nivelamento

✔Programa X Algoritmo X Implementação

✔Técnicas de Programação

✔Abstração X Implementação

Page 5: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 5

Algoritmo X Implementação X Programa

✔O que são e quais as diferenças entre:– Algoritmo ?

– Implementação ?

– Programa ?

✔O que é Metodologia ?

✔E Metodologia de programação ?

Page 6: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 6

Nivelamento

✔Técnicas de Programação– Programação Não-Estruturada

– Programação Procedimental (ou Procedural)

– Programação Estruturada (ou Modular)

– Programação Orientada à Objetos• Modelo de Eventos

• Callbacks

Page 7: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 7

Programação Não-Estruturada

✔Programas simples e pequenos consistindode apenas um programa principal.– Ex. Cartão

✔“Programa” é uma seqüência de comandosou instruções que modificam dados“globais” durante toda a sua execução.

Page 8: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 8

Como melhorar este modelo de programação ?

– Extração de seqüências (procedures)

Programação Não-Estruturada

Main Program

Data

Program

Page 9: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 9

Programação Procedimental

✔Um programa é visto como uma seqüênciade procedimentos que se “comunicam”através de dados locais, denominadosparâmetros.

✔O fluxo destes dados pode ser ilustradocomo um grafo hierárquico ou uma árvore.

Page 10: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 10

Programação Procedimental

Main program

procedure

Page 11: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 11

Programação Procedimental

Main programData

Procedure 1 Procedure 2 Procedure 3

Procedure 4

Page 12: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 12

Programação Procedimental

✔Desta forma, temos um único programa queé dividido em pequenas partes, chamadas“procedures”. Para permitir o uso deprocedimentos genéricos ou grupo deprocedimentos em outros programas,precisamos separá-los e disponibilizá-los.

Grupo de procedures → módulos / estruturas

Page 13: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 13

Programação Estruturada

✔ Um programa não consiste mais de uma única parte em umúnico arquivo. É agora dividido em várias pequenas parteschamados módulos, que interagem, através de chamadasaos procedimentos, formando o programa.

✔ Cada módulo pode ter seus próprios dados. Isto permiteque cada módulo gerencie estruturas de dados internas, quesão modificadas pelas chamadas aos procedimentos.

✔ Entretanto, só existe um estrutura por módulo e cadamódulo só pode existir uma única vez no programa.

Page 14: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 14

Programação Estruturada

Main programData

Module 1Data + Data 1

Module 2Data + Data 2

Procedure 1 Procedure 1 Procedure 2

Page 15: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 15

Programação Estruturada

✔Exemplo:– Programas que usam estruturas de dados para

armazenar eficientemente os dados (listas,árvores, matrizes, filas, etc.)

– Cada uma destas estruturas de dados podem sercaracterizadas pela sua “estrutura” e/ou pelosseus métodos de acesso.

Page 16: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 16

Programação Estruturada

Problema: Implementar um módulo genéricopara manipulação de listas encadeadas.– Definição da interface (API)

• o que está “disponível” - deve esconder “todos” osaspectos de implementação.

– Implementação

dados dados dados dados

Page 17: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 17

Programação Estruturada

/* *** interface definition *** */

boolean list_initialize ();

boolean list_append (ANY data);

boolean list_delete ();

void list_end ();

ANY list_get_first ();

ANY list_get_next ();

boolean list_is_empty ();

Page 18: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 18

Programação Estruturada

✔Exemplo de uso:ANY data;

...

data ← list_get_first();

while (data is valid) do

do_something (data);

data ← list_get_next();

end

Page 19: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 19

Programação Estruturada

✔Problema:

E para se manipular mais de uma lista ?!?

Page 20: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 20

Programação Estruturada

/* *** interface definition *** */

declare type LIST_HANDLE;

LIST_HANDLE list_create ();

void list_destroy (LIST_HANDLE this);

boolean list_append (LIST_HANDLE this, ANY data);

ANY list_get_first (LIST_HANDLE this);

ANY list_get_next (LIST_HANDLE this);

boolean list_is_empty (LIST_HANDLE this);

Page 21: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 21

Programação Estruturada

✔Agora, podemos criar “objetos” do tipo“lista”, cada um unicamente identificadospor um “handle”, cujos procedimentos(métodos) operam em função deste“handle”.

✔Mas … ainda existem alguns problemas!

Page 22: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 22

Programação Estruturada

✔Criação e Destruição Explícita

procedure foo ()

begin

LIST_HANDLE my_list;

my_list ← list_create ();

… /* do something with my_list */

list_destroy (my_list);

end

Page 23: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 23

Programação Estruturada

✔Ora, quando se usa variáveis, não se precisa“criá-las” e “destruí-las”. Então, porqueprecisamos fazer isto com as listas ?

Procedure foo ()

begin

LIST_HANDLE my_list;

… /* do something with my_list */

end

Page 24: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 24

Programação Estruturada

✔ Não acoplar dados com operações !

✔ Módulos são agrupados por operações comuns,tais como as “list_operations” do exemploanterior. Usa-se então estas operações, passando-se os dados, explicitamente, como parâmetros.

✔ Esta abordagem resulta numa estrutura “orientadaà operações”. Podemos até dizer que as operaçõesespecificam ou definem os dados a serem usados.

Page 25: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 25

Programação Orientada a Objetos

✔ Na Orientação a Objetos, a estrutura é organizadapelos dados. Escolhe-se a representação dos dadosque melhor se adequam aos requisitos doproblema.

✔ Consequentemente, os programas ficamestruturados pelos dados e não pelas operações.Isto significa que os dados apenas especificarãooperações válidas. Agora os módulos serãoagrupados por dados e suas representações,denominadas classes.

Page 26: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 26

Programação Estruturada

✔OOPS! Dados Errados.Procedure foo() begin

data_type data1;

other_type data2;

list_handle my_list;

. . .

my_list ← list_create();

list_append (my_list, data1);

list_append (my_list, data2); /* OOPS! */

list_destroy (my_list);

end

Page 27: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 27

Programação Estruturada

✔ É nossa responsabilidade assegurar que a lista éconsistente. Uma possível solução é adicionarinformações a respeito do tipo de cada elementoda lista.

✔ No entanto, o que realmente queremos é ummecanismo que nos permita especificar qual o tipodos dados a ser manipulado na lista, mantendo asmesmas funções. Ou seja, uma lista que armazenenúmeros, carros, maças ou pessoas, tem asmesmas operações.

Page 28: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 28

Programação Orientada a Objetos

✔Em OO existe o conceito de “template”, que“casa” as operações com os dados.

✔Exemplo:– LIST_HANDLE <cars> list1; /* lista de carros */

– LIST_HANDLE <people> list1; /* lista de pessoas */

Page 29: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 29

Programação Orientada a Objetos

✔Cada objeto “implementa”seus própriosmódulos e dados, permitindo que váriasestruturas coexistam.

✔Cada objeto é responsável por inicializar edestruir os seus dados. Consequentemente,não existe mais a necessidade de explicitaruma chamada aos procedimentos de criaçãoe destruição.

Page 30: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 30

Programação Orientada a Objetos

✔Interação de Objetos

Objeto 2Data

Objeto 1Data

Objeto 4DataObjeto 3

Data

Page 31: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 31

Implementação de Tipos Abstratos

1 - int i, j, k;

2 - i = 1;

3 - j = 2;

4 - k = i + j;

Page 32: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 32

Implementação de Tipos Abstratos

1 - int i, j, k;Para cada instância, uma operação inicial deverá ser

chamada (construtor). No exemplo, isto é feitointernamente pelo compilador, que reserva amemória necessária para o armazenamento denúmeros inteiros e o associa a um nome (binding).Assim, podemos nos referir a “i ” significando umaárea da memória que guarda um valor de númerointeiro que foi “construída” pela definição de “i ”.Opcionamente, o compilador pode inicializar estaárea de memória, por exemplo, com o valor zero.

Page 33: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 33

Implementação de Tipos Abstratos

2 - i = 1;

3 - j = 2;

Atribui o valor “1” a variável “i ”. Realiza a operação deatribuição do argumento “1” ao inteiro instanciado por“i ”. Idem para “j ”. Ou seja,

i.set(1);

j.set(2);

Page 34: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 34

Implementação de Tipos Abstratos

✔Dois níveis de representação:– Nível dos tipos abstratos de dados:

• Expressamos tudo que é feito com uma instância dotipo abstrato por chamadas a operações pré-definidas.

– Nível de implementação:• Uma representação é escolhida para a operação.

• Por exemplo, em C a implementação da operação“set ” é feita pelo símbolo “=”. Entretanto, em Pascala implementação é feita pelo símbolo “:= ”.

Page 35: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 35

Implementação de Tipos Abstratos

4 - k = i + j;

i.add(j);

k.set(i.add(j));

Page 36: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 36

Classe

✔É a implementação (representação) de umtipo abstrato de dados. Define atributos emétodos que implementam a estrutura dedados e as operações dos tipos abstratos dedados, respectivamente.

✔Consequentemente, as “classes” definem aspropriedades e o comportamento dosconjuntos de objetos.

Page 37: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 37

Classe

class Integer {

// implementação da estrutura de dadosatributos:

int i;

// operações do tipo abstrato de dadosmétodos:

void setValue (int n);

Integer addValue (Integer j);

};

Page 38: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 38

Objetos

✔ Um “objeto” é uma instância de uma classe.

✔ Deve ser univocamente identificado pelo seu “nome” edefinir um “estado” que é representado pelos valores dosatributos ao longo do tempo.

✔ O estado dos objetos mudam de acordo com os métodosque lhe são aplicados. Esta seqüência de trocas de estadodefinem o “comportamento” dos objetos.

✔ Assim, O comportamento de um objeto é definido peloconjunto de métodos que podem ser utilizados.

Page 39: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 39

Classes e Objetos

✔ Dois grandes conceitos da Orientação por Objetos:Classes e Objetos.

✔ Programar Orientado por Objetos é, portanto, aimplementação de tipos abstratos de dados, ou,simplesmente, a definição de classes.

✔ Assim, em tempo de execução, as instâncias dasclasses, ou seja, os objetos, resolvem o problemapela troca dos seus estados. Conseqüentemente,podemos pensar no programa como uma coleçãode objetos.

Page 40: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 40

Pergunta:

Como estes objetos interagem ???

Page 41: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 41

Mensagens

✔Um programa OO em execução é naverdade um repositório em que objetos sãocriados, interagem entre si e então sãodestruídos.

✔Esta interação é baseada em “mensagens”que são enviadas de um objeto para outroque indica qual método deve ser aplicado.

Page 42: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 42

Mensagens

Integer i; // define um novo objeto

i.setValue(1); // atribui o valor “ 1”

A mensagem “aplique o método setValue com o argumento“1” a si mesmo” é enviado ao objeto “i ”. Note que “enviarmensagem” ao objeto “i ” é simplesmente representado por“.”. Assim, enviar mensagens aos objetos é muito similaras chamadas de procedimentos da programação tradicional.

Page 43: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 43

Mensagens

✔ Entretanto, em OO existe uma visão de objetosautônomos que se comunicam pela troca demensagens. Os objetos reagem quando recebemmensagens aplicando-se os métodos.

✔ Uma mensagem é uma solicitação para um objetoexecutar um de seus métodos. A mensagem deveconter o nome e os argumentos do método.

Page 44: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 44

Exemplo

Como o computador exibe um

caracter que você digita ??

Page 45: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 45

Procedimental

Wait until a key is pressed

get a key value

write key value at cursor position

advance cursor position

Desta forma, fica difícil distinguir entidadesque definirão as propriedades e oscomportamentos.

Page 46: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 46

Orientado por Objetos

Objeto tecla Objeto tela

Mensagem que indica queo estado deve ser trocado

para “pressionado”

Mensagem com o código da tecla pressionada

Mensagem para exibir a imagem da

tecla pressionada

Page 47: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 47

Exercícios

✔Descreva as seguintes tarefas nas formasprocedimental e na forma OO– ver TV

– comprar um refrigerante na cantina

✔Qual a diferença entre mensagem echamadas a procedimentos ?

✔Identifique os objetos e as mensagens nocontexto da Internet.

Page 48: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Parte 2

Programação (básica)

Orientada a Objetos

Page 49: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 49

Histórico

✔Linguagens de Programação

✔OOP

✔C++

Page 50: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 50

Linguagens de Programação

linguagens de programação

objetos ? não ⇒ linguagens convencionais

classes ? não ⇒ linguagens com objetos

herança ? não ⇒ linguagens com classes

concorrência ? não ⇒ OOP

OOP concorrente

Page 51: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 51

Histórico de OOP

1966 - Dahl & Nygaar Simula

1972 - Kay Smalltalk

1978 - Ingalls

1983 - Goldberg & Robson Smalltalk 80

1985 - Stroustrup C++

1985 - Hewitt Actor

1987 - Yonezawa & Tokoro Parallel OOP

Page 52: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 52

Histórico de C++✔ Desenvolvida inicialmente por Bjarne Stroustrup na AT&T -

Bell Laboratories no início dos anos 80.

– Primeira versão comercial 1985

– Primeiras versões eram tradutores

✔ Concebida como extensão do C, mantém todas as facilidades dasua antecessora com o acréscimo da capacidade de permitir aprogramação orientada por objetos.

✔ O C++ pode ser utilizado como um C melhorado, umalinguagem orientada a objetos ou como uma junção das duas.

Page 53: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 53

Relacionamento entre C e C++

CLASSES DERIVADAS

CLASSES

C

FRIEND FUNCTIONS

C++

Page 54: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 54

Características de OOP

✔Conceitos

✔Programação Tradicional x OOP

✔Ciclo de Vida do Software OOP

Page 55: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 55

Conceitos da OOP

✔A programação orientada por objetos (OOP- Object Oriented Programming) baseia-sena construção de programas através dajunção de abstrações de tipos.

✔Um tipo abstrato é composto por dados epelas funções que podem atuar sobre estesdados.

Page 56: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 56

Conceitos da OOP✔ A OOP permite a visualização de conceitos como

uma variedade de objetos. Pode-se representar ainteração, as tarefas a serem executadas equaisquer condições que devem ser observadasentre os objetos.

✔ As classes podem conter objetos intimamenterelacionados que compartilham atributos. Umaclasse define as propriedades e os atributos quedescrevem as ações de um objeto pertencentesàquela classe.

Page 57: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 57

Programação tradicional versus OOP

✔Programação tradicional– subrotinas e funções formam o programa

– usuário das subrotinas deve conhecer estrutura de dados

– modificações em uma subrotina podem alterar outras

– adaptação de subrotinas para atender a outrosproblemas semelhantes

– difícil manutenção

Page 58: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 58

Programação tradicional versus OOP

✔OOP– programa é formado pela junção de tipos abstratos

– não há necessidade do usuário saber a estrutura interna(dados) do tipo abstrato

– alteração interna de um tipo abstrato não altera outros

– fácil manutenção

– “reusabilidade”

Page 59: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 59

Programação tradicional versus OOP

tipos abstratos

operação que pode atuarsobre estes tipos

ativar um método

classe ⇒objeto ⇒

⇒ classe

⇒ método

⇒ enviar mensagem

dados + funções

variável de uma classe

Page 60: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 60

Programação tradicional versus OOP

struct x class x

dados variável dados variável

funções

funções

Em C++ os dados e as funções fazem parte daclasse e estão intimamente ligados, o quenão ocorre em C.

Page 61: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 61

Ciclo de Vida de Software OOmodelo requisitos

mundo real do usuário

requisitos informais

análise dos

requisitos

modelo descritivo biblioteca de

projeto e componentes

construção reutilizáveis

redes de classes

modelo abstração e

conceitual generalização

Page 62: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 62

Terminologia

✔Encapsulamento

✔Hierarquia de classes

✔Herança

✔Polimorfismo

✔Funções Virtuais– Definições e Exemplos

Page 63: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 63

Encapsulamento✔ Encapsulamento diz respeiro a forma de definição dos

objetos

✔ Em OOP, uma classe é composta de várias seções:

– PRIVADA: é usada para definir a estrutura do tipo dedado;

– PÚBLICA: é usada para as informações de interfaceque tornam a classe reutilizável dentro dos aplicativos;

– PROTEGIDA: é usada para isolar os detalhesfuncionais de objeto externo a classe.

Page 64: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 64

Hierarquia de Classes

✔ As classes servem como um padrão para a criaçãode objetos. Os objetos são ocorrências da classe.

✔ Pode-se desenvolver uma hierarquia de classe emque há uma classe-raiz e diversas subclasses ouclasses derivadas.

✔ As classes-raiz representam as tarefas maisgeneralizadas enquanto as subclasses recebemtarefas mais específicas.

Page 65: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 65

Herança

✔ Classes derivadas (filhos) herdam todas ascaracterística de seus ancestrais (variáveis efunções) e podem possuir suas próprias.

✔ Classes raiz ou base (pais) devem ser o maisgenéricas possíveis, deixando para seus filhos oque for específico. Com isto, é possível a criaçãode classes altamente sofisticadas sem grandeesforço, já que boa parte do que elas devem fazerjá foi feito por seus “pais”.

Page 66: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 66

Herança: Vantagem

Permite um grande reaproveitamento declasses já existentes e testadas, tornando odesenvolvimento de programas mais fácil,mais rápido e mais confiável.

Page 67: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 67

Herança simples✔ Novos tipos abstratos, ou classes, podem também ser

criados a partir de outros já existentes.

SHQD�GH�DoR SHQD�GH�RXUR

WLQWHLUR HVIHURJUiILFD

FDQHWD

Page 68: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 68

Herança simples

tiposabstratosde dados

subtipos

conceitos

classes classeherança

implementação

Page 69: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 69

Herança simples

parte derivada(herdada de X)

parte incremental(código novo

específico de Y)

(herda de)

X (classe base)

Y (classe derivada)

Page 70: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 70

Herança: ExemploUtilizaremos o seguinte esquema: #include <stdio.h>

class base

{

protected:

int a;

public:

void set (int i)

{ a = i; }

void printf ()

{ printf (“a = %d\n”, a); }

void get (int &i)

{ i = a; }

void titulo (char *s)

{ printf (“%s \n”, s); }

};

base

deriv1

deriv2

Page 71: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 71

Herança: Exemploclass deriv1 : public base

{

protected:

int b;

public:

void set (int i, int j)

{ base :: set (i); b = j; }

void print ( )

{

base :: printf ();

printf (“b = %d\n”, b);

}

void get (int &i, int &j)

{ base :: get (i); j = b; }

};

class deriv2 : public deriv1

{

protected:

int b;

public:

void set (int i, int j, int k)

{ deriv1 :: set (i, j); c = k; }

void print ( )

{

deriv1 :: printf ();

printf (“c = %d\n”, c);

}

void get (int &i, int &j, int &k)

{ deriv1 :: get (i, j); k = c; }

};

Page 72: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 72

Herança: Exemplovoid main ( )

{

deriv2 d2;

int i, j, k;

d2.set (1, 2, 3);

d2.titulo (“Teste de deriv 2:”);

d2.print ();

d2.get (i, j, k);

printf (“get: “);

printf (“%d %d %d\n”, i, j, k);

}

Resultados do programa:

Teste de deriv2:

a = 1

b = 2

c = 3

get: 1 2 3

Page 73: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 73

Herança múltipla✔ Uma classe pode se tornar “pai” de outras classes e várias

classes podem compor uma nova classe.

carro barco

FDUUR�DQILELR

Page 74: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 74

Herança múltipla: ExemploUsaremos o seguinte esquema:

soma mult subt divi

calc

Page 75: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 75

Herança múltipla: Exemploclass soma

{

private:

float x, y, z;

public:

soma (float a, float b) { x = a; y = b; }

float exec () { return (x + y); }

};

class subt

{

private:

float x, y, z;

public:

subt (float a, float b) { x = a; y = b; }

float exec () { return (x - y); }

};

class mult

{

private:

float x, y, z;

public:

mult (float a, float b) { x = a; y = b; }

float exec () { return (x * y); }

};

class divi

{

private:

float x, y, z;

public:

divi (float a, float b) { x = a; y = b; }

float exec () { return (x / y); }

};

Page 76: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 76

Herança múltipla: Exemploclass calc : public soma, public subt,

public mult, public divi

{

private:

float rso, rsu, rmu, rdv;

public:

calc (float a, float b) : soma (a, b), subt (a, b),mult (a, b), divi (a, b)

{ /* nada */ }

void exec ()

{

rso = soma :: exec();

rsu = subt :: exec ();

rmu = mult :: exec ();

rdv = divi :: exec ();

}

void print ()

{

printf (“soma = %.2f\n”, rso);

printf (“subt = %.2f\n”, rsu);

printf (“mult = %.2f\n”, rmu);

printf (“divi = %.2f\n”, rdv);

}

};

Page 77: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 77

Herança múltipla: Exemplo

void main ( )

{

calc tudo (10, 2);

tudo.exec ( );

tudo.print ( );

}

Resultados do programa:

soma = 12.00

subt = 8.00

mult = 20.00

divi = 5.00

Page 78: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 78

Herança múltipla: ProblemaComo não temos um controle total sobre classes criadas por

outras pessoas e, ainda assim, podemos usá-las comoclasses base, pode ocorrer o seguinte problema:

base

deriv1 deriv2

deriv3

Page 79: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 79

Herança múltipla: SoluçãoPare evitar que sejam criadas várias instâncias da classe base,

esta deve ser definida como virtual nas suas derivadas.

class base { ... };

class deriv1 : public virtual base { ... };

class deriv2 : public virtual base { ... };

class deriv3 : public deriv1, public deriv2

{ ... };

Page 80: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 80

Ponteiros e herançaQuando temos uma classe base e várias classes derivadas, um ponteiro da

classe base pode receber como valor o endereço de qualquer uma desuas classes derivadas.

class base { ... };

class d1 : public base { ... };

class d2 : public base { ... };

temos:base *b;

d1 a;

d2 c;

b = &a;

b = &c;

Page 81: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 81

Polimorfismo

É a característica pela qual uma únicamensagem pode ser enviada a todos osmembros de uma família de classes (pais eseus filhos), cada um deles respondendo deuma forma particular mediante o seupróprio método. O C++ utilizapolimorfismo através do uso de funçõesdenominadas funções virtuais.

Page 82: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 82

Polimorfismo: ExemploPara compreendermos melhor o conceito de polimorfismo, vamos supor que

tenhamos uma classe base de nome DESENHO e as classes derivadas RETA,CIRCULO e QUADRADO. Se possuirmos um método Desenhe virtual,podemos ter:

DESENHO *ptr_desenho;

...

ptr_desenho.Desenhe();

Dependendo do objeto apontado no momento, o método Desenhe responderá deforma correta, mesmo que o tipo de “desenho” a ser feito seja diferente.

Page 83: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 83

Herança com Polimorfismo: Exemplo✔ Utilizaremos o seguinte esquema: #include <stdio.h>

class base

{

protected:

int a;

public:

base ( ) { a = 0 };

base (int i) { a = i };

virtual void print ( )

{

printf(“base: %d\n”, a);

}

};

base

drv1 drv2 drv3

Page 84: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 84

Herança com Polimorfismo: Exemploclass drv1 : public base

{

protected:

int d1;

public:

drv1 ( ) { d1 = 0 };

drv1 (int i, int j) : base (i)

{ d1 = j };

void print ( )

{

base :: print ();

printf(“drv1: %d\n”, d1);

}

};

class drv2 : public base

{

protected:

int d2;

public:

drv2 ( ) { d2 = 0 };

drv2 (int i, int j) : base (i)

{ d2 = j };

void print ( )

{

base :: print ();

printf(“drv2: %d\n”, d2);

}

};

class drv3 : public base{protected: int d3;public: drv3 ( ) { d3 = 0 }; drv3 (int i, int j) : base (i) { d3 = j }; void print ( ) { base :: print (); printf(“drv3: %d\n”, d3); }};

Page 85: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 85

Herança com Polimorfismo: Exemplovoid main ()

{

base b (1);

drv1 d1 (10, 20);

drv2 d2 (100, 200);

drv3 d3 (1000, 2000);

base *ptrbase[4];

ptrbase[0] = &b;

ptrbase[1] = &d1;

ptrbase[2] = &d2;

ptrbase[3] = &d3;

for (int i = 0; i < 4; i++)

ptrbase[i] -> print ();

};

Resultados do programa:

base: 1

base: 10

drv1: 20

base: 100

drv2: 200

base: 1000

drv3: 2000

Page 86: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 86

Herança com Polimorfismo: Exemplo

E assim, como fica ?

base

drv1

drv2

drv3

Page 87: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 87

Funções Virtuais✔ Estão intimamente associadas ao conceito de polimorfismo.

✔ As funções virtuais são definidas na classe-raiz quando asclasses derivadas subseqüentes “sobrecarregam” a funçãoredefinindo a sua implementação.

✔ São métodos especiais de classes base públicas e podem serativadas através de ponteiros ou referências.

✔ A seleção e ativação de uma determinada função virtual é feitadurante a execução do programa e não em tempo de link-edição,como ocorre com funções normais.

Page 88: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 88

Funções Virtuais

✔ Uma das vantagens das classes é a sua habilidadede esconder dados. Entretanto, as friend functionspermitem o compartilhamento de informações daclasse privada com funções não-membro.

✔ As friend functions, que não são definidas naprópria classe, podem compartilhar os mesmosrecursos de classe que as funções-membro, aomesmo tempo que permanecem externas àdefinição de classe.

Page 89: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 89

Funções Virtuais: sobrecargaclass absoluto {

public:

int ab (int);

double ab (double);

};

int absoluto::ab(int val1) {

int temp;

temp = abs(val1);

return(temp);

}

double absoluto::ab (double val2) {

double temp;

temp = fabs(val2);

return(temp);

}

void main ( )

{

absoluto número;

cout << “O valor absoluto é “

<< numero.ab (-123)

<< endl;

cout << “O valor absoluto é “

<< numero.ab (-123.4567)

<< endl;

return;

}

Page 90: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 90

Funções Virtuais: friend#include <stdio.h>

class teste

{

private:

int x;

public:

void set (int a) { x = a; }

friend void print (teste&);

};

void print (teste& v)

{

printf (“%d”, v.x); // friend

}

void main ( )

{

teste a;

a.set (10);

print (a);

}

Page 91: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 91

Polimorfismo e Funções Virtuais: Exemplo

✔ Utilizaremos o seguinte esquema: #include <stdio.h>

class base

{

protected:

int dado;

public:

base (int a) { dado = a; };

virtual void print (char *msg)

{

printf(“base: %s e %d\n”, msg, dado);

}

};

drv1*

base*

drv2

drv3* drv4 drv5

Page 92: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 92

Polimorfismo e Funções Virtuais: Exemplo

class drv1 : public base

{

public:

drv1 (int a) : base (a) { }

virtual void print (char *msg)

{ printf(“drv1: %s e %d\n”, msg, dado); }

};

class drv3 : public drv1

{

public:

drv3 (int a) : drv1 (a) { }

void print (char *msg)

{ printf(“drv3: %s e %d\n”, msg, dado); }

};

class drv2 : public base

{

public:

drv2 (int a) : base (a) { }

};

class drv4 : public drv1

{

public:

drv4 (int a) : drv1 (a) { }

};

class drv5 : public drv2

{

public:

drv5 (int a) : drv2 (a) { }

};

Page 93: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 93

Polimorfismo e Funções Virtuais: Exemplo

void main ()

{

base b (1);

drv1 d1 (10);

drv2 d2 (100);

drv3 d3 (1000);

drv4 d4 (10000);

drv5 d5 (15000);

printf (“Objetos:\n”);

b.print (“objeto tipo base”);

d1.print (“objeto tipo drv1”);

d2.print (“objeto tipo drv2”);

d3.print (“objeto tipo drv3”);

d4.print (“objeto tipo drv4”);

d5.print (“objeto tipo drv5”);

}

Resultados do programa:

Objetos:

base: objeto tipo base e 1

drv1: objeto tipo drv1 e 10

base: objeto tipo drv2 e 100

drv3: objeto tipo drv3 e 1000

drv1: objeto tipo drv4 e 10000

base: objeto tipo drv5 e 15000

Page 94: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Parte 3

Metodologia de Desenvolvimento

de Programas Orientados a Objetos

Page 95: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 95

Desenvolvimento de Programas OO

✔Diferença entre desenvolvimento deprogramação tradicional e OO

✔Abstração

✔Proteção dos dados

✔Construtores e Destrutores

✔Construção de métodos

✔Compilação em OOP

Page 96: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 96

Diferença entre desenvolvimento comprogramação tradicional e com OO

Tradicional:

✔ visão de programação orientada à procedimentos

✔ o programa descreve uma série de passos a serem executados

OOP:

✔ visão de programação orientada a objetos

✔ o programa descreve um sistema de objetos interagindo

✔ conceito chave :

– abstração: processo de ignorar os detalhes, de forma a seconcentrar nas características essenciais

Page 97: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 97

Tipos de AbstraçãoAbstração nos procedimentos:

– permite ignorar detalhes sobre os processos

– projeta-se o sistema em função de operações lógicas, ao invésde instruções específicas da linguagem de programação

Abstração nos dados:

– permite ignorar detalhes de como os dados são representados

– sempre envolvem algum grau de abstração nosprocedimentos

Page 98: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 98

Abstração

Problema:

É possível declarar estruturas de dados sem sedeclarar as funções necessárias para se usá-las.As linguagens de programação tradicionaispermitem que se tenha abstração deprocedimentos e abstração de dados como duastécnicas distintas, quando de fato elas estãototalmente interligadas.

Page 99: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 99

Abstração

Solução:

Uso da principal propriedade das classes:

– O usuário vê um objeto em termos dasoperações que podem ser realizadas, não emtermos da sua estrutura de dados.

Page 100: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 100

Abstração em Linguagens OO

Linguagens OO combinam abstração de dados eabstração de procedimentos.

✔ Quando se define uma classe, descreve-se tudo sobre umaentidade de alto nível.

✔ Quando se usa um objeto desta classe, pode-se ignorar ostipos construídos contidos na classe e os procedimentosusados para manipulá-los.

Page 101: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 101

Exemplo: polígonoDefinição:

– série de pontos, armazenados como uma série de paresde números.

No entanto, um polígono é mais que uma série de pontos. Umpolígono tem:

– perímetro, área e forma característica.

– pode-se querer mover, rodar, refletir, ...

– dado dois polígonos, pode-se querer achar as suasinterseções ou sua união, ou testar se são iguais.

Page 102: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 102

Exemplo: estrutura tipo pilhaVamos supor que seja necessário que criemos uma estrutura

tipo pilha. Isto pode ser feito de várias maneiras, porémnem todas são eficientes quanto a integridade dos dados.

A maneira mais simples seria criando uma estrutura quecontivesse um vetor para os dados da pilha e uma variávelque fornecesse o local (índice) para inserir ou retirar umdado.

Para o acesso, seriam criadas as funções push para inserir epop para retirar. O usuário deveria criar uma variável dotipo pilha e utilizar as funções push e pop.

Page 103: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 103

Exemplo: estrutura tipo pilha#include <stdio.h>

#include <stdlib.h>

#define MAX 100

/* Tipo Abstrato */

typedef struct _pilha {

int v[MAX];

int topo;

} Pilha;

/* Protótipos */

void push (Pilha *p, int dado);int pop (Pilha *p);

Page 104: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 104

Exemplo: estrutura tipo pilhavoid push (Pilha *p, int dado)

{

if (p->topo >= MAX)

{

printf(“Pilha cheia.\n”);

exit(1);

}

p->v[p->topo] = dado;

p->topo++;

}

int pop (Pilha *p)

{

p->topo--;

if (p->topo < 0)

{

printf(“Pilha vazia.\n”);

exit(1);

}

return (p->v[p->topo]);

}

Page 105: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 105

Exemplo: estrutura tipo pilhavoid main ( )

{

static Pilha p;

int i;

for (i = 0; i < 10; i++)

push (&p, i);

for (i = 0; i < 10; i++)

printf (“%d\n”, pop (&p));

}

Page 106: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 106

Problema:Apesar de funcionar, esta é a pior forma possível em termos

de proteção de dados, pois nada impediria que alguém que“sabe o que está fazendo”, utilizasse instruções do tipo:

p.topo = 5; ou p.v[10] = 7;

ou algo pior.

Page 107: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 107

Solução 1: Usando structA forma mais simples de classe em

C++ é a estrutura (struct).

Entretanto, a struct não possui, emprincípio, a proteção necessáriaaos dados.

Para exemplificar a criação de umaclasse usando struct, criaremos aseguir o tipo ou “classe”PILHA .

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

const int MAX = 100;

struct PILHA

{

// dados

char v [MAX];

int topo;

Page 108: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 108

Solução 1: Usando struct// operações (métodos)

void cria ()

{ topo = 0; }

void push (char c)

{

if (topo >= MAX)

{

printf(“Pilha cheia.\n”);

exit(1);

}

v [topo++] = c;

}

char pop ()

{

topo--;

if (topo < 0)

{

printf(“Pilha vazia.\n”);

exit(1);

}

return (v [topo] );

}

}; // fim da struct PILHA

Page 109: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 109

Solução 1: Usando structvoid main ()

{

PILHA p1, p2;

static char str1[] =

{“Exemplo da classe PILHA”};

static char str2[] =

{ “Uma string qualquer”};

int i;

// coloca ponteiros no início

p1.cria ();

p2.cria ();

printf (“Strings originais:\n”);

printf (“%s\n”, str1);

printf (“%s\n”, str2);

// armazena primeira string

int tam1 = strlen(str1);

for (i = 0; i < tam1; i++)

p1.push (str1[i]);

// armazena segunda string

int tam2 = strlen(str2);

for (i = 0; i < tam2; i++)

p2.push (str2[i]);

Page 110: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 110

Solução 1: Usando struct// retira strings

printf (“\nStrings invertidas:\n”);

for (i = 0; i < tam1; i++)

printf (“%c”, p1.pop());

printf(“\n”);

for (i = 0; i < tam2; i++)

printf (“%c”, p2.pop());

printf(“\n”);

}

Resultados do programa:

Strings originais:

Exemplo da classe PILHA

Uma string qualquer

Strings invertidas:

AHLIP essalc ad olpmexE

reuqlauq gnirts amU

Page 111: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 111

public, private e protectedA palavra-chave public, indica que o acesso aos membros que

estiverem abaixo é livre, enquanto a private indica que elessão privados, somente podendo ser acessados pelosmétodos da classe. O protected indica que os dados sópodem ser acessados pelos métodos da classe e pormétodos de classes derivadas (herança). A diferençabásica entre private e protected é que se os membros foremdeclarados como protected, as classes derivadas poderãoutilizar estes membros com se fossem seus, o que nãoocorre quando estes forem declarados como private.

Page 112: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 112

Solução 2: Usando classstruct PILHA

{

// dados

private:

char v [MAX];

int tam;

int topo;

// operações (métodos)

public:

void cria () { ... }

void push ( char c ) { ... }

int pop () { ... }

};

class PILHA

{

// dados

private:

char v [MAX];

int tam;

int topo;

// operações (métodos)

public:

void cria () { ... }

void push ( char c ) { ... }

int pop () { ... }

};

Page 113: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 113

Construtores e DestrutoresSão métodos especiais das classes e possuem características

interessantes:

– o construtor tem o nome da sua classe e é ativadosempre que declararmos um objeto da classe.

– o destrutor tem o nome da classe com o caracter “~” nafrente e é ativado sempre que termina o escopo de umobjeto da classe.

Quando uma classe não possui estes métodos especiais,apenas é criada a área correspondente ao tamanho dosdados.

Page 114: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 114

Construtores e Destrutores: Exemplo#include <stdio.h>

#include <stdlib.h>

#include <string.h>

const int MAX = 1000;

class PILHA

{

private:

char *v;

int tam;

int topo;

public:

// construtor sem parâmetro

PILHA ()

{

printf(“Ativou Construtor 1\n”);

topo = 0;

tam = MAX;

v = new char[MAX];

}

// construtor com parâmetro

PILHA (int t)

{

printf(“Ativou Construtor 2\n”);

topo = 0;

tam = t;

v = new char[t];

}

Page 115: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 115

Construtores e Destrutores: Exemplo~PILHA ()

{

printf (“Ativou destrutor\n”);

delete v;

}

void push (char c)

{

if (topo >= tam)

{

printf (“Pilha cheia.\n”);

exit (1);

}

v [topo++] = c;

}

char pop ()

{

topo--;

if (topo < 0)

{

printf(“Pilha vazia.\n”);

exit(1);

}

return (v[topo]);

}

};

Page 116: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 116

Construtores e Destrutores: Exemplovoid main ()

{

PILHA p1, p2 (100);

static char str1[] =

{“Exemplo da classe PILHA”);

static char str2[] =

{“Uma string qualquer”};

printf (“Strings originais:\n”);

printf (“%s\n”, str1);

printf (“%s\n”, str2);

// armazena primeira string

int tam1 = strlen(str1);

for (i = 0; i < tam1; i++)

p1.push (str1[i]);

// armazena segunda string

int tam2 = strlen(str2);

for (i = 0; i < tam2; i++)

p2.push (str2[i]);

// retira strings

printf (“\nStrings invertidas:\n”);

for (i = 0; i < tam1; i++)

printf (“%c”, p1.pop());

printf(“\n”);

for (i = 0; i < tam2; i++)

printf (“%c”, p2.pop());

printf(“\n”);

}

Page 117: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 117

Construtores e Destrutores: ExemploResultados do programa:

Ativou Construtor 1

Ativou Construtor 2

Strings originais:

Exemplo da classe PILHA

Uma string qualquer

Strings invertidas:

AHLIP essalc ad olpmexE

reuqlauq gnirts amU

Ativou destrutor

Ativou destrutor

Page 118: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 118

Construção de métodosOs métodos que vimos até o momento são inline, isto é, não

são funções verdadeiras. Entretanto é útil que se separe adefinição da classe da sua implementação.

Desta forma, é possível se criar uma biblioteca de classes e ousuário necessitará apenas incluir o header de definição daclasse para a compilação e utilizar a biblioteca de classesdurante a link-edição.

A outra vantagem, é a possibilidade de proteger a classe deolhos alheios.

Page 119: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 119

pilha.hpp#ifndef PILHA_HPP

#define PILHA_HPP

const int MAX = 1000;

class PILHA

{

private:

char *v;

int topo;

int MaxTam;

public:

// construtor sem parâmetros

PILHA ( );

// construtor com parâmetros

PILHA (int tam);

// destrutor

~PILHA ( );

void push (char c);

char pop ( );

};

#endif

Page 120: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 120

pilha.cpp#include “pilha.hpp”

PILHA::PILHA ()

{

topo = 0;

v = new char[MAX];

MaxTam = MAX;

}

PILHA::PILHA (int tam)

{

topo = 0;

v = new char[tam];

MaxTam = tam;

}

PILHA::~PILHA ()

{

delete v;

}

void PILHA::push (char c)

{

if (topo >= MaxTam)

{

printf(“Pilha cheia.\n”);

exit(1);

}

v[topo++] = c;

}

char PILHA::pop () { topo --; if (topo < 0) { printf(“Pilha Vazia.\n”); exit(1); } return(v[topo]); }

Page 121: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Parte 4

Detalhamento da Metodologia

Page 122: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 122

Metodologia de Programação OO

✔Identificação das classes

✔Determinação dos atributos e ações

✔Determinação dos relacionamentos

✔Determinação das hierarquias

Page 123: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 123

Metodologia de Programação OO

Programação estruturada: Top-Down

– Especificar as funções do programa

• “O que este programa deve fazer ?”

• Definição das rotinas principais

• Detalhamento por refinamentos sucessivos

O programa é tratado como uma descrição de processos,que são divididos em sub-processos.

Page 124: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 124

Metodologia de Programação OO

Visão Abstrata

Visão Detalhada

Page 125: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 125

Metodologia de Programação OO

Programação OO:

– NÃO analise o programa em termos de processos outarefas;

– NÃO descreva-o pensando nas estruturas de dados;

– Analise o programa como um Sistema de ObjetosInteragindo.

O que são os objetos ?

Quais são as entidades ativas do programa ?

Page 126: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 126

Metodologia de Programação OO

Visão AbstrataSuper Classe

Visão DetalhadaSub-Classes

ERRADO !top-down

Page 127: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 127

Metodologia de Programação OO

Visão DetalhadaSub-Classes

Visão GlobalSuper Classe

ERRADO !bottom-up

Page 128: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 128

Metodologia de Programação OO

Programação em OO envolve ambos os níveis de abstração,trabalhando com top-down e bottom-up.

Programação em OO envolve:

– Identificar as classes

– Determinar atributos e ações

– Determinar relacionamentos entre as classes

– Arrumar as classes em uma forma hierárquica

Page 129: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 129

Metodologia de Programação OO

identificar asclasses

determinaratributos e ações

determinarrelacionamentos

determinarhierarquias

é um processo iterativo !

Page 130: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 130

Identificação das Classes

Determinar as classes que um programa necessita émais difícil que identificar uma função principal.

Não se pode simplesmente fazer uma decomposiçãodos procedimentos do problema, esperando-seobter tipos estruturados ou estruturas de dadospara convertê-los em classes.

As classes tem que ser o princípio básico, asentidades ativas do programa.

Page 131: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 131

Identificação das Classes✔ Uma boa técnica para identificação de classes é escrever

uma descrição dos propósitos do programa, listando todosos substantivos que aparecem na descrição e escolher asclasses desta lista.

O sucesso desta abordagem simples depende de como equão boa está a descrição escrita, mas pode dar boasidéias para os iniciantes em OO.

Page 132: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 132

Identificação das Classes✔ Utilizar os modelos físicos dos objetos.

Exemplo 1: reserva de acentos em aviões

• classe aeronave

• classe passageiro

Exemplo 2: sistema operacional

• classe processos (programas, interrupções, etc.)

• classe dispositivos (discos, impressora, etc.)

Page 133: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 133

Identificação das Classes✔ Utilizar as entidades conceituais que o programa irá

manipular.

Exemplos:

• programa de desenho– classe retângulo, classe círculo, ...

• compilador– classe sintaxe, ???

• sistema operacional– classe processos, classe dispositivos, ???

Page 134: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 134

Identificação das Classes✔ Classes menos óbvias:

– Eventos

• fatos que podem acontecer com os objetos

– Interações

• fatos que podem acontecer entre os objetos

Exemplo: banco

classe transações para representar fatos comodepósitos, empréstimos, transferências, etc.

Page 135: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 135

Determinação dos Atributos e Ações

✔ Determine as responsabilidades de cada classe.

– A informação que um objeto de cada classe tem quemanter.

O que um objeto desta classe tem que saber ?

– As operações que um objeto pode efetuar ou o que podeser feito com ele.

O que este objeto pode fazer ?

O que podemos fazer com este objeto ?

Page 136: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 136

Determinação dos Atributos e Ações

Toda classe tem atributos. São as propriedades oucaracterísticas que a descrevem.

classe retângulo: altura e largura

classe cursor: forma

classe arquivo: nome, modo de acesso e posição

Importante: Não confundir atributos e classes. Não se devedefinir um classe para descrever um atributo.

Page 137: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 137

Determinação dos Atributos e Ações

Toda classe tem um comportamento, que diz como um objetointerage com outros objetos (ações) e como seus atributosmudam durante esta interação.

– O fato de se determinar atributos e ações dão uma idéiaclara do que constitui uma classe útil.

– Ter o cuidado de não se criar classes que não fazemnada além do que “encapsular” processos.

– Determinar quais atributos vão ser guardados e quaisvão ser calculados quando necessários.

Page 138: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 138

Determinação dos Relacionamentos

É uma extensão da etapa anterior (determinar ascaracterísticas de cada classe). Determinar como as classesvão usar outras classes.

Algumas classes podem existir independentemente, outrasnão. Algumas vezes, uma classe é depende de outra classepois não tem utilidade alguma, a menos que a outra classeexista. Isto é necessário quando uma classe executa umafunção membro de outra classe.

Uma classe pode estar “embutida” em outra classe,significando que contém objetos de outra classe.

Page 139: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 139

Determinação dos Relacionamentos

Exemplos:

A classe Hora necessita de uma função que faça aconversão para um objeto string. Esta função chamauma função da classe String.

Um objeto círculo necessita de um objeto ponto pararepresentar o seu centro, da mesma forma que necessitade um número inteiro para representar o seu raio(composição).

Page 140: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 140

Determinação de Hierarquias

É uma extensão da primeira etapa (identificação das classes)mas necessita da informação obtida durante as demaisetapas.

Exemplos:

– classe Conta_Bancária

• classe Conta_Corrente e classe Poupança

– classe Carro

• tipo de carro é um atributo e não uma classe

Page 141: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 141

Composição e HerançaTanto composição como herança permitem que uma classe

use o código de outra classe.

Entretanto, composição deve ser usada quando a definição deuma classe tem outra classe, enquanto herança deve serusada quando uma classe é um tipo de outra classe.

– Um círculo não é um tipo de ponto; um círculo tem umponto para definir o seu centro.

– Um dado numérico não contém um dado genérico; umdado numérico é um tipo de dado.

Page 142: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 142

Compilação em C++✔ Os programas em C++ podem ser gerados de duas formas:

✔ fonte C++ fonte C++

tradutor

fonte C

compilador

objeto

link

executável

Page 143: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 143

Um Exemplo Completo

Because a user caninteract with onlyone window at atime, whetherscorlling or enteringtext, you need a wayto specify whichwindow receivesinput. That windowsis the active window.Olny one window

Because a user can interactwith only one window at atime, whether scorlling orentering text, you need a wayto specify which windowreceives input. That windowsis the active window. Olnyone window can be active atany given time.

Page 144: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 144

Um Exemplo Completo✔ Identificação das classes

– uma classe óbvia: classe Win, onde cada window é umobjeto.

– uma classe para as interações com o usuário, tais comoteclado, mouse, etc. : classe Event, que passará aoobjeto win um objeto event, para realizar uma açãocorrespondente.

– uma classe candidata: classe WinMgr, para que se possadeterminar para qual objeto win um objeto event deveser enviado.

Page 145: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 145

Um Exemplo Completo✔ Identificação das classes (continuação)

– como o programa irá manipular posições, é convenienterepresentá-las através de uma classe, ao invés de umpar de inteiros: classe Point

– o programa irá manipular janelas que terão a formaretangular. Assim, é razoável que também tenhamos aclasse Rect.

Page 146: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 146

Um Exemplo Completo✔ Determinação dos atributos e ações

Objeto WinMgr

– guardar a posição dos objetos win

– manter uma ordem dos objetos win, através de umapilha, de forma que o objeto win que está no alto dapilha seja o objeto ativo

– refazer a pilha quando o usuário desejar que outroobjeto win seja ativado

Page 147: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 147

Um Exemplo Completo✔ Determinação dos atributos e ações

Objeto WinMgr

– guardar a posição dos objetos win

– manter uma ordem dos objetos win, através de umapilha, de forma que o objeto win que está no alto dapilha seja o objeto ativo

– refazer a pilha quando o usuário desejar que outroobjeto win seja ativado

Page 148: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 148

Um Exemplo Completo✔ Determinação dos atributos e ações

Objeto Win

– guardar a sua posição e tamanho

– guardar o texto que deve exibir, estando visível ouinvisível pelo uso de scroll-bars

– guardar a posição absoluta do texto exibido

– exibir o texto

– responder aos movimentos de cursor e mouse

Page 149: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 149

Um Exemplo Completo✔ Determinação dos atributos e ações

Objeto Scroll-Bar

– guardar a sua posição e tamanho

– guardar a posição relativa do texto exibido

– exibir texto

– responder aos movimentos de cursor e mouse

Page 150: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 150

Um Exemplo CompletoPode-se notar várias similaridades entre o objeto win e o

objeto scroll-bar: eles sabem seus tamanhos e posição,exibem informações e podem responder a interações com ousuário.

Ou seja, este comportamento comum aponta para a criação deuma classe base, fazendo com que as classes Win e Scroll-Bar sejam classes derivadas. Esta nova classe, representaráa área de interação com o usuário com uma entidadelógica.

Page 151: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 151

Um Exemplo Completo✔ Determinação dos atributos e ações

Objeto Interactor

– guardar a sua posição e tamanho

– guardar a posição relativa do texto exibido

– exibir texto

– responder aos movimentos de cursor e mouse

Page 152: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 152

Um Exemplo Completo✔ Determinação da hierarquia

Apesar de prematuro, já conseguimos determinar umahierarquia de classes. Falta verificar se esta hierarquia semanterá no decorrer do desenvolvimento.

Interactor

Scroll-Bar Win

Page 153: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 153

Um Exemplo Completo✔ Determinação dos atributos e ações

Objeto Event

– determinar qual tecla foi pressionada (se teclado)

– determinar qual o estado dos botões e a posição domouse (se mouse)

– informar o que determinou

Page 154: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 154

Um Exemplo Completo✔ Determinação da hierarquia

Uma vez que esta classe possui dois tipos que parecem nãoter nada em comum, é interessante derivá-las de umaclasse abstrata.

Event

Keyboard Mouse

Page 155: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 155

Um Exemplo Completo✔ Determinação dos relacionamentos

Uma window pode ter, ou não, uma scroll-bar. Istorepresenta um relacionamento, onde uma windowcontém uma scroll-bar como um objeto membro. Win,consequentemente, usa scroll-bar.

A interação entre windows e scroll-bar requer duasformas de comunicação, uma vez que usando-se ascroll-bar afetamos a window e, movendo o cursor nawindow, afetamos a scroll-bar. Scroll-bar precisa saberda interface de win para se comunicar.

Page 156: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 156

Um Exemplo Completo✔ Determinação dos relacionamentos (continuação)

Events são passados aos Interactors. Então, Interactortem que ter uma função membro capaz de receber umobjeto Event. Interactor usa Event.

WinMgr manipula objetos Win. Como podemos ter umnúmero arbitrário de Wins, não os podemos ter comoobjetos membro. Ao invés disso, faremos com queWinMgr consiga inserir ou deletar objetos Win.WinMgr também usa Event, que são então passadospara as Win.

Page 157: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 157

Relacionamentos

contémusa

usa

contém comunica com

usa

WinMgr

Event Win

Scroll-Bar

Page 158: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 158

Um Exemplo CompletoNeste momento, as hierarquias são muito simples, não

necessitando de nenhuma reestruturação.

Entretanto, é necessário decidir quais característicaspertencerão as classes bases e quais pertencerão as classesderivadas. Isto requer uma análise mais detalhada arespeito dos atributos e ações de cada classe. Para talanálise, inicia-se a definição das interfaces das classes, ouseja, o que será public, private ou protected.

Page 159: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 159

classe Interactorclass Interactor

{

public:

int width ();

int height ();

Point origin ();

int withinBounds (Point pos);

virtual void paint () = 0;

virtual void handleEvent (Event &action) = 0;

protected:

Rect area;

};

Page 160: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 160

classe Winclass Win : public Interactor

{ private:

public: ScrollBar *Hscroller;

int paint (); ScrollBar *Vscroller;

int handleEvent (Event &action); char *textBuffer;

void setchar (Point pos, char newchar); int textrows, textcolumns;

char retchar (Point pos); Point position;

void putstr (Point pos, char *newstr); Point cursorPos;

int rows (); char *title;

int columns (); };

void setTitle (char *newtitle);

Page 161: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 161

classe Win: ProblemasÉ muita informação para somente uma classe.

É fácil notar que existem vários atributos que pertencem aotexto colocado na classe Win, não pertencendopropriamente ao objeto window.

– Dito isso, é interessante se criar uma nova classe queguarde o texto e incluí-la como membro da classe Win.

Page 162: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 162

classe Winclass Win : public Interactor

{

public:

void paint ();

void handleEvent (Event &action);

void setTitle (char *newtitle);

private:

ScrollBar *Hscroller, *Vscroller;

Buffer canvas;

Point position; // Posição relativa do texto visível

Point cursorPos;

char *title;

};

Page 163: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 163

classe Bufferclass Buffer

{

public:

int rows ();

int columns ();

Point origin ();

void setchar (Point pos, char *newchar);

char retchar (Point pos);

void putstr (Point pos, char *newstr);

private:

int width, length;

char *textArray;

};

Page 164: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 164

classe ScrollBarclass ScrollBar : public Interactor

{

public:

void paint ();

void handleEvent (Event &action);

void setSlider (int pos);

private:

Win *parentWin;

int sliderPos;

int orientation; // Horizontal ou Vertical

};

Page 165: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 165

classe WinMgrclass WinMgr

{

public:

void handleEvent (Event &action);

void addWindow (Win *newWindow);

void deleteWindow ();

void repaint();

private:

List winList; // classe já definida para manipulação de listas

};

Page 166: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 166

classe Eventclass Event

{

public:

virtual EventType getType () = 0;

};

Uma vez que não existe nenhum tipo associado com o objetogenérico Event, a função getType é declarada como virtual.Cada classe derivada rescreve getType para retornar umaconstante de identificação.

Page 167: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 167

classe KbdEventclass KbdEvent : public Event

{

public:

EventType getType () { return KBD_EVENT; }unsigned int val ();

private:

char ascii;

char scancode;

};

Page 168: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 168

classe MouseEventclass MouseEvent : public Event

{

public:

EventType getType () { return MOUSE_EVENT; }Point getPosition ();

int getButton ();

private:

Point pos;

int buttons;

};

Page 169: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 169

classe ScrollEventclass ScrollEvent : public Event

{

public:

EventType getType () { return SCROLL_EVENT; }int getDirection ();

int getDistance ();

ScrollBar *getSource ();

private:

int direction;

int distance;

ScrollBar *source;

};

Page 170: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 170

Manipulação de Eventosvoid Win :: handleEvent (Event &action)

{

switch ( action.getType () )

{

case KBD_EVENT:

KbdEvent &keyAction = (KbdEvent &) action;

// executa o que for relativo à tecla pressionada

case MOUSE_EVENT:

MouseEvent &keyAction = (MouseEvent &) action;

// ...

case SCROLL_EVENT:

ScrollEvent &keyAction = (ScrollEvent &) action;

// ...

}

}

Page 171: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 171

BibliografiaObject Orientation: Concepts, Languages, Databases and Interfaces

Setrag Khoshafian and Razmik Abnous

John Wiley & Sons, Inc. - 1990

An Introduction to Object-Oriented Programming an C++

Richard S. Wiener and Lewis J. Pinson

Addison-Wesley Publishing Company - 1988

Object-Oriented Environment in C++

David Hu

MIS Press - 1990

Page 172: Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução

Mar/97 Beauclair 172

BibliografiaC++ Programming

John Thomas Berry

Howard W. Sams & Company - 1989

C++ Tutorial

Microsoft Group

Microsoft Corporation - 1991

Borland C++

Chris H. Pappas and William H. Murray

Makron Books - 1995