prefácio para a poorcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 programação...

39
1 Programação Orientada a Objetos Prefácio para a POO Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo Gomes [email protected] Tipos de Dados Abstratos Histórico das Linguagens de POO Paradigmas de Desenvolvimento de Software Maneiras diferentes de pensar em resolver os problemas através de sistemas computacionais: problemas através de sistemas computacionais: Exemplos: Estruturado (funções e módulos), Orientado a Objetos 2

Upload: others

Post on 24-Mar-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

1

Programação Orientada a Objetos

Prefácio para a POOPrefácio para a POOAbstração e encapsulamento

Ti d D d Ab t t

Reinaldo [email protected]

Tipos de Dados AbstratosHistórico das Linguagens de POO

Paradigmas de Desenvolvimento de Software

Maneiras diferentes de pensar em resolver os problemas através de sistemas computacionais:problemas através de sistemas computacionais:

• Exemplos: Estruturado (funções e módulos), • Orientado a Objetos

2

Page 2: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

2

Gap semântico

3

Gap semânticoDistância entre o problema no mundo real e o modelo abstrato construído;modelo abstrato construído;Quanto menor, mais rápida será a construção da solução;Portanto, diminuir o gap semântico tornou-se um dos objetivos da Engenharia de Software;

4

O paradigma orientado a objetos busca meios de diminuir este gap.

Page 3: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

3

Modelagem Conceitual

5

Se essas abstrações não tiverem uma expressão direta (ou próxima) do mundo computacional, a complexidade da solução será aumentada

Modelagem ConceitualTarefa mais importante de um processo de desenvolvimento de softwaredesenvolvimento de software

realiza-se a análise do domínio da aplicação e a modelagem das entidades e fenômenos desse domínio que o projetista considera importante, independentemente da implementação

A tarefa de modelagem conceitual envolve dois

6

A tarefa de modelagem conceitual envolve dois mecanismos:

AbstraçãoRepresentação

Page 4: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

4

Modelagem Conceitual

7

Paradigma Orientado a objetosRaciocinar e solucionar problemas em termos de objetos, diretamente associados às entidades do objetos, diretamente associados às entidades do mundo real;O mundo é composto por “objetos”;Objetos podem representar entidades concretas ou conceituais (uma estratégia de jogo, por ex.)

P

8

casa Pessoa

Árvore

Page 5: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

5

Vantagens: Por que utilizar OO?Facilidade maior para modelagem de objetos do mundo real;mundo real;Necessidade de construção de softwares mais complexos;Maior extensibilidade: Facilidade de incrementar funcionalidades

9

Facilidade de manutençãoMaior reuso

Conceitos Chave de OOAuxiliam a administrar a complexidadeGuiam toda a tarefa de modelagemGuiam toda a tarefa de modelagemConceitos

AbstraçãoObjetosEncapsulamento

10

pHerançaPolimorfismo

Page 6: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

6

AbstraçãoAbstração:

11Copyritght 1991 © Grady Booch

AbstraçãoO resultado de uma operação mental de abstração depende não tanto do fenômeno observado, mas depende não tanto do fenômeno observado, mas do interesse do observador

12

Page 7: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

7

AbstraçãoDefinição 1:

“Uma abstração denota as características essenciais de um objeto que o distinguem de outros tipos de objetos e assim provê

uma fronteira conceitual firmemente definida, de acordo com a perspectiva do

13

de acordo com a perspectiva do observador.”

[Grady Booch]

AbstraçãoDefinição 2:

“( ) 2 P t l i t “(...) 2. Processo mental que consiste em escolher ou isolar um aspecto

determinado de um estado de coisas relativamente complexo, a fim de simplificar

a sua avaliação, classificação ou para

14

ç , ç ppermitir a comunicação do mesmo (...) ”

Fonte: Dicionário Houaiss

Page 8: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

8

AbstraçãoDefinição 3:

“Uma abstração é uma visualização ou uma representação de uma entidade que

inclui somente os atributos de importância em um contexto particular.”

[R b t S b t ]

15

[Robert Sebesta]

AbstraçãoAbstração:

Técnica para lidar com a complexidade de um p pproblema.Destaca os aspectos importantes do objeto real abstraído, segundo perspectiva do observadorIgnora os detalhes não relevantes para o observador

Exemplos de uso da abstração no dia a dia:

16

Dirigir um carroUsar um tocador de DVD ou outro dispositivo eletrônicoTomar um vôo num aeroportoRetirar dinheiro num caixa eletrônico

Page 9: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

9

Exemplos de Abstrações

Isto não é o mundo!Como assim?

17

Exemplos de AbstraçõesNão são aviões alemães da segunda guerra!

Wie geht es Ihnen?

Danke! Es geht

18

Danke! Es geht mir gut! Und Sie?

Page 10: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

10

Exemplos de Abstrações

Não são casas!

19

Exemplos de AbstraçõesNão é você!

20

Page 11: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

11

Exemplos de Abstrações

Não é uma ficha de preenchimento de dados!

21

AbstraçãoAbstração na programação:

Abstração de processos: Abstração de processos: • Dividimos um programa em subprogramas menores e mais

fáceis de escrever e compreender ("dividir para conquistar").• Para usar um subprograma escrito por terceiros abstraímos

a sua implementação e nos concentramos na sua interface.Abstração de dados:

22

• Serve para representarmos entidades reais do domínio do problema numa linguagem de programação, identificando as propriedades destas entidades que interessam ao sistema bem como suas operações.

Page 12: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

12

Abstração de processosQuem usa as funções abaixo interessa-se por:int main() {

Saber quantos são os parâmetros para as funções

int main() {char valor[] = "4";int num;num = atoi(valor);printf("%f", sqrt(num));

}

23

chamadas e em que ordem são passadosSaber quais os tipos dos parâmetrosSaber os tipos dos dados que as funções retornamSaber o significado desse dado retornado

Abstração de dadosDefine-se uma estrutura e operações para um novo tipo:ptypedef struct st_stack {

int top;float data[MAX];

} stack;

stack* newstack (int) {...}int push (stack * float) { }

24

int push (stack *, float) {...}int pop (stack *, float *) {...}int isempty (stack) {...}int top (stack, float*) {...}int destroy (stack *) {...}

Page 13: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

13

EncapsulamentoEncapsulamento:

25

Copyritght 1991 © Grady Booch

EncapsulamentoDefinição 1:

“Encapsulamento é o processo de esconder todos os detalhes de um objeto

que não contribuem para suas características essenciais.”

26

[Grady Booch]

Page 14: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

14

EncapsulamentoDefinição 2:

“O l t é t d “O encapsulamento é um agrupamento de subprogramas e dos dados que eles

manipulam. O encapsulamento, separada ou independentemente compilável,constitui um

sistema abstraído e uma organização lógica

27

para uma coleção de computações relacionadas.”

[Robert Sebesta]

EncapsulamentoConsiderações/recomendações:

“Nenhuma parte de um sistema complexo deve depender dos detalhes internos das

outras partes”

“Para uma abstração dar certo sua

28

çimplementação deve estar encapsulada.”

[Grady Booch]

Page 15: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

15

EncapsulamentoEncapsulamento:

Esconde os detalhes internos de uma abstraçãoEsconde os detalhes internos de uma abstraçãoUma vez selecionada a implementação de uma abstração, ela deve ser tratada como um segredo da abstração e escondida dos seus clientes.

Encapsulamento versus abstraçãoA b t ã t it

29

A abstração representa um conceitoO encapsulamento impede os clientes de verem como este conceito foi implementado

Exemplos de encapsulamentos

O encapsulamentode um Circuito Integrado!de um Circuito Integrado!

30

Ele no raio-x

Page 16: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

16

Exemplos de encapsulamentos

Encapsulamento tradicionaltradicionalde uma CPU!

31

Encapsulamento meia-sola-metido-a-bestamas que é bonitinha, é!

Exemplos de encapsulamentos

Alguma dúvida sobreos benefícios do encapsulamentoos benefícios do encapsulamentohumano através da pele?

32

Page 17: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

17

Exemplos de encapsulamentosEncapsulamento comprometido! Hummm, to vendo como ele foi implementado! Não é humano!

33

EncapsulamentoEncapsulamento nas linguagens:

Em C funções são completamente encapsuladas mas Em C, funções são completamente encapsuladas, mas a estrutura de um tipo abstrato de dados não é completamente protegida (encapsulamento imperfeito)

• Funções em outras bibliotecas têm acesso à estrutura interna do tipo, violando o encapsulamento

Em Modula-2 há como encapsular totalmente tanto

34

dados como subprogramasJava e C++ possuem construções sintáticas para controlar o nível de visibilidade de um elemento (tipos, dados ou subprogramas) numa biblioteca

Page 18: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

18

EncapsulamentoExemplo em C: Elementos visíveis fora da biblioteca.

typedef struct st pilha {typedef struct st_pilha {int topo;float dados[MAX];

} pilha;

void cria_pilha (pilha *){...}int empilha (pilha *, float) {...}int desempilha (pilha *, float *) {...}

Elementos invisíveis

35Obs: Em C, um arquivo de biblioteca define uma fronteira de encapsulamento.

int ta_vazia (pilha) {...}int topo (pilha, float*) {...}int limpa (pilha *) {...}

EncapsulamentoExemplo em Java: Parte invisível fora da classe

public class Pilha {private int topo;private float dados[];

public Pilha (int tam) {...}public void empilha(float dado) {...}public float desempilha() {...}public float topo() { }

36

public float topo() {...}public boolean taVazia() {...}

}

Parte visível fora da classe (apenas para chamadas, a implementação é invisível sempre!)Obs: Em Java, uma classe

define uma fronteira de encapsulamento.

Page 19: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

19

Tipos Abstratos de DadosQuando a linguagem não oferece um tipo nativo adequado para representar uma entidade do adequado para representar uma entidade do domínio do problema recorremos a um TAD"Um TAD é um encapsulamento que inclui somente a representação de dados de um tipo específico de dado e os subprogramas que f ã ti " [S b t 99]

37

fornecem as operação para esse tipo" [Sebesta99]TAD = encapsulamento(estrutura+operações)TIPO

Tipos Abstratos de DadosBenefícios da programação com TADs:

Método para organizar melhor um programa em Método para organizar melhor um programa em unidades lógicas que podem ser compiladas em separado.Permite modificações localizadas na representação ou operações do tipo (promove a manutenibilidade)O encapsulamento promove a independência entre o

38

O encapsulamento promove a independência entre o TAD e seus clientes.Aumento da confiabilidade, uma vez que os clientes não têm acesso direto à representação do TAD, a não ser por suas operações.

Page 20: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

20

Tipos Abstratos de DadosUm TAD pilha implementado com arranjos:typedef struct st pilha {typedef struct st_pilha {

int topo;float dados[MAX];

} pilha;

void cria_pilha (pilha *){...}int empilha (pilha *, float) {...}int desempilha (pilha *, float *) {...}

Representação ou estruturado TAD pilha

39

int ta_vazia (pilha) {...}int topo (pilha, float*) {...}int limpa (pilha *) {...}

Operações do TAD pilha

Tipos Abstratos de DadosUm cliente para o TAD pilha:main() {main() {

pilha p;float x;

cria_pilha(&p);if (ta_vazia(p)) {

empilha(&p, 1.2f);empilha(&p, 3.0f);

Em respeito ao encapsulamento,não há acessos à representação

da pilha nos clientes, mas apenas àssuas operações.

40

}topo(&p, &x);if (x == 3.0f)

desempilha (&p, &y);limpe (&p);

}

Page 21: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

21

Tipos Abstratos de DadosA implementação muda para lista encadeada:typedef struct st pilha { Modifica-se typedef struct st_pilha {

float dado;struct st_pilha prox;

} nopilha;typedef nopilha* pilha;

void cria_pilha (pilha *){...}int empilha (pilha *, float) {...}

E a implementaçãodas operações

Modifica se a representação do TAD

41

p pint desempilha (pilha *, float *) {...}int ta_vazia (pilha) {...}int topo (pilha, float*) {...}int limpa (pilha *) {...}

Tipos Abstratos de DadosO cliente não se altera (compare ao anterior):main() {main() {

pilha p;float x;

cria_pilha(&p);if (ta_vazia(p)) {

empilha(&p, 1.2f);empilha(&p, 3.0f);

42

}topo(&p, &x);if (x == 3.0f)

desempilha (&p, &y);limpe (&p);

}

Page 22: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

22

Tipos Abstratos de DadosEntretanto, se o encapsulamento fosse violado...main() {main() {

pilha p;float x;

cria_pilha(&p);if (p.topo == -1) {

empilha(&p, 1.2f);empilha(&p, 3.0f);

Acessos à estruturado TAD violam o encapsulamento e

aumentam o acoplamento entreo TAD e seus clientes

Estes acessos à representaçãodo TAD são específicos para aimplementação com arranjos.

43

}x = p.dados[p.topo];if (x == 3.0f)

desempilha (&p, &y);limpe (&p);

}

p ç jNão servem para a nova

implementação com lista!

TADs e o encapsulamento

“A habilidade de mudar a representação de uma abstração sem perturbar quaisquer de seus clientesabstração sem perturbar quaisquer de seus clientes

é o principal benefício do encapsulamento”

“O encapsulamento não impede o programador de fazer coisas estúpidas”

[Grady Booch]

44

“O encapsulamento previne acidentes, não fraudes”

[Bjarne Stroustroup]

Page 23: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

23

Tipos Abstratos de DadosO conjunto de operações públicas que um TAD oferece é chamado de Interface do TAD.oferece é chamado de Interface do TAD.Quando é que uma mudança num TAD exige mudanças nos clientes?

Quando há mudanças na interface dele.Se a interface permanecer a mesma, os clientes não se

45

alteram.

Tipos Abstratos de DadosMudou a interface da operação desempilha:typedef struct st pilha {typedef struct st_pilha {

float dado;struct st_pilha prox;

} nopilha;typedef nopilha* pilha;

void cria_pilha (pilha *){...}int empilha (pilha *, float) {...}

Era assim...

46

p pint desempilha (pilha *, float *) {...}int ta_vazia (pilha) {...}int topo (pilha, float*) {...}int limpa (pilha *) {...}

Page 24: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

24

Tipos Abstratos de DadosMudou a interface da operação desempilha:typedef struct st pilha {typedef struct st_pilha {

float dado;struct st_pilha prox;

} nopilha;typedef nopilha* pilha;

void cria_pilha (pilha *){...}int empilha (pilha *, float) {...}

Mudou a interface!

47

p pfloat desempilha (pilha *) {...}int ta_vazia (pilha) {...}int topo (pilha, float*) {...}int limpa (pilha *) {...}

Tipos Abstratos de DadosO cliente não se altera (compare ao anterior):main() {main() {

pilha p;float x;

cria_pilha(&p);if (ta_vazia(p)) {

empilha(&p, 1.2f);empilha(&p, 3.0f);

Ferrou o cliente!

48

}topo(&p, &x);if (x == 3.0f)

desempilha (&p, &y);limpe (&p);

}

Page 25: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

25

Tipos Abstratos de DadosO que uma linguagem deve ter para permitir a definição de TADs?definição de TADs?

Permitir o encapsulamento da definição do tipo e das operações do TAD numa unidade de compilação.Permitir acesso ao tipo definido para o TAD e ao cabeçalho das operações.Impedir o acesso à representação do TAD e à

49

Impedir o acesso à representação do TAD e à implementação das operações.

Tipos Abstratos de DadosEncapsulamento bom é aquele que...typedef struct st pilha { Permitetypedef struct st_pilha {

float dado;struct st_pilha prox;

} nopilha;typedef nopilha* pilha;

void cria_pilha (pilha *){...}int empilha (pilha *, float) {...}

Permite

Impede

50

p pint desempilha (pilha *, float *) {...}int ta_vazia (pilha) {...}int topo (pilha, float*) {...}int limpa (pilha *) {...}

Page 26: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

26

Tipos Abstratos de DadosSuporte para TADs em C:

C permite que se especifiquem TADs em bibliotecasC permite que se especifiquem TADs em bibliotecascompiladas em separado.A definição do tipo e os protótipos das funções que implementam as operações ficam num arquivo de cabeçalhos (com extensão .h).A implementação das operações ficam num arquivo de

51

A implementação das operações ficam num arquivo de implementação (extensão .c)O encapsulamento de C não é perfeito: os clientes podem acessar os campos da estrutura do tipo.

Tipos Abstratos de DadosExemplo de uma biblioteca em C:#define MAX 100

pilha.h#define MAX 100

typedef struct st_pilha {int topo;float dados[MAX];

} pilha;

// protótipos das funções

52

void cria_pilha (pilha *);int empilha (pilha *, float);int desempilha (pilha *, float *);int ta_vazia (pilha);int topo (pilha, float*);int limpa (pilha *);

Page 27: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

27

Tipos Abstratos de DadosExemplo de uma biblioteca em C:#include "pilha h"

pilha.c#include "pilha.h"

void cria_pilha (pilha *p) {...

}

int empilha (pilha *p, float e) {...

53

}

... //outras funções

Tipos Abstratos de DadosSuporte para TADs em Pascal:

O Pascal atual permite que TADs sejam definidos em O Pascal atual permite que TADs sejam definidos em units (arquivos com extensão .pas).Uma unit possui uma área (interface) para declaração do tipo e cabeçalho dos procedimentos e funções que implementam as operações.Há ainda uma área (implementation) onde os

54

Há ainda uma área (implementation) onde os subprogramas são implementados, à qual o cliente não tem acesso.Assim como C, o acesso aos campos do tipo no cliente são sintaticamente válidos.

Page 28: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

28

Tipos Abstratos de DadosExemplo de Unit:unit TPilha;

TPilha.pas

interfacetype pilha = record

topo : integer;dados : array[1..MAX] of real;

end;

d i ilh ( ilh )

55

procedure cria_pilha (var p: pilha);procedure empilha (var p : pilha; e : float);function desempilha (var p : pilha) : real;function ta_vazia (var p : pilha) : boolean;function topo (p : pilha) : real;procedure limpa (var p : pilha);

Tipos Abstratos de DadosExemplo de Unit:implementation

TPilha.paspprocedure cria_pilha (var p: pilha);begin

...end;

procedure empilha (var p : pilha; e : float);begin

56

...end;

... {outros subprogramas}

end. {fim da unit}

Page 29: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

29

Tipos Abstratos de DadosSuporte para TADs em Java:

Define TADs em classes (arquivo .java).( q j )A classe é a unidade sintática para encapsulamento de TADs e também a unidade de compilação.Pode-se controlar o nível de encapsulamento de cada elemento de uma classe.Java não tem construtores de tipo como struct do C ou

57

Java não tem construtores de tipo como struct do C ou o record do Pascal: cada classe em si é um novo tipo com propriedades e operações.Valores de classes são chamados de objetos.

Tipos Abstratos de DadosExemplo de classe Java:public class Pilha {

Pilha.javapublic class Pilha {

private int topo;private float[] dados;

public void empilha (float e) {...

}

58

public float desempilha() {...

}... // outros métodos

} //fim da classe

Page 30: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

30

Tipos Abstratos de DadosSuporte para TADs em C++:

C++ permite que TADs sejam definidos em classesC++ permite que TADs sejam definidos em classes(arquivos .cpp).A classe deve ser a unidade sintática adequada para encapsulamento de TADs.Pode-se controlar o nível de encapsulamento de cada elemento de uma classe

59

elemento de uma classe.Como em Java, valores de classes são chamados de objetos.

Tipos Abstratos de DadosExemplo de classe C++:class pilha {

Pilha.cppclass pilha {

private:int topo;float dados[MAX];

public:void empilha (float e) {

...}

60

float desempilha() {...

}... // outros métodos

} //fim da classe

Page 31: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

31

Programação Orientada a ObjetosO paradigma de programação orientado a objetos baseia-se em três princípios chave [3]:baseia se em três princípios chave [3]:

Abstração de dados (TADs)HerançaLigação Dinâmica

Em geral, os TADs definidos numa linguagem

61

orientada a objetos são chamados de classes.Os valores destes tipos são chamados objetos.Classes se relacionam por meio de herança.

Programação Orientada a ObjetosUma operação do TAD implementada numa classe é chamada de método.é chamada de método.Uma forma de invocar um método de um objeto é enviando-lha uma mensagem.A ligação dinâmica associa uma mensagem ao método mais adequado

62

A ligação dinâmica permite que a "herança funcione" dinamicamente, isto é, em tempo de execução

Page 32: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

32

Programação Orientada a ObjetosProgramar no paradigma OO é:

Definir classes (estrutura + operações) para os Definir classes (estrutura + operações) para os elementos do domínio do problema em questão.

• A criação de uma classe pode usar a definição de classes prévias, criando composições de classes.

Relacionar classes por meio de herança e composiçãoEntender o mecanismo de vinculação dinâmica da

63

Entender o mecanismo de vinculação dinâmica da linguagem e aproveitar seu incrível poder.Abstrair a sua visão do problema para um conjunto de objetos interagindo. Bem-vindo ao mundo da Orientação a Objetos!

Histórico das Linguagens OOLinha do tempo da programação orientada a objetos:objetos:

SIMULA67: 1967 por Dahl e Nygaard• Introduziu os principais conceitos da programação orientada a

objetos: classes, objetos, herança.SmallTalk-72: 1972 por Alan Kay e Adele Goldberg

• Primeiro ambiente gráfico para programação orientada a

64

Primeiro ambiente gráfico para programação orientada a objetos. É considerada a única linguagem puramente orientada a objetos. Introduziu o conceito de janelas em GUIs

C++: 1984 por Bjarne Stroustrup• Uma das primeiras linguagens OO com boa performance.

Page 33: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

33

Histórico das Linguagens OOLinha do tempo da programação orientada a objetos:objetos:

Eiffel: 1986 por Bertrand Meyer • Possui algumas características avançadas da OO, tais

como, tipos genéricos, asserções e herança múltipla.Java: 1995 por James Gosling e outros

• Primeira linguagem OO da era da Internet. Portabilidade,

65

Primeira linguagem OO da era da Internet. Portabilidade, design enxuto e ampla API são suas características marcantes. Empregada em várias plataformas, de celulares e PDAs a sistemas empresariais distribuídos.

Smalltalk

Galeria de fotosC++

84 72

Alan KayBjarne Stroustroup

SIMULAJAVA

6772

66James Gosling95

Page 34: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

34

Galeria de fotosNa busca por uma máquina que fosse fácil de ser usada por crianças

FLEX machine idealizada por Kay

p çe não programadores ele antecipou a idéia de PDAs. (abaixo)

67

Alan Kay não apenas previu que os objetos dominariam a programação mas lançou a idéia do computador pessoal e do ambiente gráfico baseado em janelas. (acima) Dynabooks idealizados por Kay

Galeria de fotosKay projetou o Smalltalk para ser não apenas uma linguagem de programação linguagem de programação, mas um ambiente interativo baseado em janelas sobrepostas que permitissem ao programador fazer simulações de objetos. O termo programação orientada a objetos é atribuído a sua

68Esboço do Smalltalk-72

autoria. (ao lado)

Page 35: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

35

Bibliografia[1] Booch, G. Projeto Orientado a Objetos. 1991.[2] Hostetter C Survey of Objected Oriented [2] Hostetter , C. Survey of Objected Oriented Programming Languages. Disponível em:http://www.rescomp.berkeley.edu/~hossman/cs263/paper.html.

[3] Sebesta, R. Conceitos de Linguagens de Programação.4a. edição. Bookman. 1999.

69

[4] Sierra, Kathy, Bates, Bert. Head First Java. 2005.

BibliografiaOutros sites sobre o assunto:

http://www campusprogram com/reference/en/wikipediahttp://www.campusprogram.com/reference/en/wikipedia/o/ob/object_oriented_programming_1.htmlhttp://en.wikipedia.org/wiki/Object-oriented_programminghttp://jeffsutherland.com/papers/Rans/OOlanguages.pdfhttp://www princeton edu/~ehuang/OOP/index html

70

http://www.princeton.edu/~ehuang/OOP/index.htmlhttp://javaranch.com (legal!)

Page 36: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

36

Programação Orientada a Objetos

Prefácio para a POOPrefácio para a POOAbstração e encapsulamento

Ti d D d Ab t t

Reinaldo [email protected]

Tipos de Dados AbstratosHistórico das Linguagens de POO

Compilação e modularizaçãoUnidade sintática:

Menor unidade de código sintaticamente válida segundo Menor unidade de código sintaticamente válida segundo a gramática da linguagemEx: declaração de variáveis, chamadas de procedimentos, expressões, declaração de programas

Unidade de compilação:C j t d id d i táti d id

72

Conjunto de unidade sintáticas de um programa reunidas segundo as regras da gramática da linguagem.Ex: programa principal, biblioteca de procedimentos, módulos, etc.

Page 37: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

37

Compilação e modularização

main() {Unidade de Compilação dobro.c

main() {int x=2, y;

y = dobro(x);printf("%d", y);

}Unidades sintáticas

73

int dobro(int x) {return 2*x;

}

Compilação e modularizaçãoCompilação independente:

As unidades de compilação são compiladas de forma As unidades de compilação são compiladas de forma independente umas das outras. Não há necessidade de uma ordem de compilação e a quantidade e os tipos dos parâmetros não são checados entre chamada e definição.

Compilação em separado:

74

Compilação em separado:As fronteiras das unidades de compilação são ultrapassadas para verificação de tipos e as unidades não são independentes entre si.

Page 38: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

38

Compilação Independente

main() { soma(int x) {main.c bib.cEu não quero nem

saber se soma() tem parâmetro ou

soma();}

func() {...

}

...}

subtrai() {...

}

pnão!

Quero meu

O Linker não vai gostar

disso...

75

} }

main.obj bib.obj

advogado!

Compilador

Compilação em Separado

main() { soma(int x) {main.c bib.cAm♥r! Sua função

soma() é sem parâmetro?soma();

}

func() {...

}

...}

subtrai() {...

}

parâmetro?

Nã-na-nim-na-não! soma() tá

sem parâmetro! Não fofo, é com parâmetro!

S k!

76

} }

main.obj bib.obj

Compilador

Sm♥ck!

Page 39: Prefácio para a POOrcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 Programação Orientada a Objetos Prefácio para a POO Abstração e encapsulamento Ti d D d Ab t t Reinaldo

39

Compilação e modularizaçãoPódio da compilação!

Em Separado

Possuem compilação independente:FORTRAN77, C de Ritchie

Possuem compilação em separado:

pa ad

12 3

Independente Nenhuma

77

Possuem compilação em separado:Ada, C ANSI, Modula-2, Java, C++

Não possuem nenhuma das duas:Pascal original, FORTRAN II, BASIC