Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de...
Transcript of Programação Orientada a Objetos - IMPArbs/pdf/oop.pdf · “Programa” é uma seqüência de...
![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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/1.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/2.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/3.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/4.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/5.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/6.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/7.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/8.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/9.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/10.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/11.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/12.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/13.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/14.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/15.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/16.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/17.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/18.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/19.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/20.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/21.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/22.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/23.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/24.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/25.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/26.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/27.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/28.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/29.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/30.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/31.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/32.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/33.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/34.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/35.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/36.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/37.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/38.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/39.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/40.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/41.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/42.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/43.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/44.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/45.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/46.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/47.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/48.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/49.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/50.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/51.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/52.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/53.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/54.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/55.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/56.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/57.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/58.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/59.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/60.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/61.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/62.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/63.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/64.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/65.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/66.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/67.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/68.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/69.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/70.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/71.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/72.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/73.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/74.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/75.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/76.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/77.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/78.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/79.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/80.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/81.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/82.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/83.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/84.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/85.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/86.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/87.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/88.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/89.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/90.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/91.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/92.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/93.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/94.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/95.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/96.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/97.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/98.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/99.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/100.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/101.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/102.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/103.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/104.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/105.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/106.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/107.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/108.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/109.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/110.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/111.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/112.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/113.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/114.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/115.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/116.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/117.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/118.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/119.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/120.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/121.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/122.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/123.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/124.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/125.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/126.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/127.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/128.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/129.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/130.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/131.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/132.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/133.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/134.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/135.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/136.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/137.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/138.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/139.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/140.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/141.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/142.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/143.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/144.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/145.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/146.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/147.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/148.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/149.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/150.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/151.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/152.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/153.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/154.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/155.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/156.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/157.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/158.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/159.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/160.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/161.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/162.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/163.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/164.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/165.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/166.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/167.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/168.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/169.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/170.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/171.jpg)
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.](https://reader031.fdocumentos.tips/reader031/viewer/2022021820/5ade50417f8b9aa5088dfadf/html5/thumbnails/172.jpg)
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