paradigmas de programação - estilos de programação - programação estruturada - programação...

50
Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a Objetos Profa. Maria Aparecida Fernandes Almeida, M. Comp. Estágio de docência: INE 5214 - Introdução à Computação e Informática Agrícola Centro de Ciências Agrárias - CCA - UFSC Prof. Orientador: Jorge Muniz Barreto, Dr. Departamento de Informática e de Estatística - INE Universidade Federal de Santa Catarina - UFSC

Upload: internet

Post on 21-Apr-2015

145 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Paradigmas de Programação- Estilos de programação

- Programação Estruturada

- Programação Funcional

- Programação em Lógica- Programação Orientada a Objetos

Profa. Maria Aparecida Fernandes Almeida, M. Comp. Estágio de docência:

INE 5214 - Introdução à Computação e Informática Agrícola Centro de Ciências Agrárias - CCA - UFSCProf. Orientador: Jorge Muniz Barreto, Dr.

Departamento de Informática e de Estatística - INEUniversidade Federal de Santa Catarina - UFSC

Page 2: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Mais informações sobre Paradigmas de Programação

em: Jorge Muniz Barreto Inteligência

Artificial no Limiar do Século XXI,2a. Edição, Florianópolis, 1999

Apêndice A, página 272 a 298

Atenção!

Page 3: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Paradigma? “Conjunto de regras que estabelecem fronteiras e

descrevem como resolver problemas dentro destas fronteiras. Os paradigmas influenciam nossa percepção: ajudam-nos a organizar e a coordenar a maneira como olhamos o mundo...” . (Morris e Brandon - Reengenharia -Reestruturando a empresa)

Paradigmas de programação referem-se ao estilo de programação, portanto tem fortes vínculos com a linguagem de programação utilizada.

Page 4: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Estilo Declarativo x Estilo Imperativo

Uma linguagem particular através de suas estruturas de controle conduzem a um estilo específico de escrever programas (não confundir estilo com linguagem)

Estilo declarativo: é feita a descrição do problema. Cada sentença tem significado por si mesma e adiciona algumas informações diretamente associadas ao resultado final. Elas podem ser apresentadas em qualquer ordem.

Exemplo: pedir amigo o favor de encadernar fotocópias:

– “Escute, você tem uma coleção de papéis para encadernar. As capas estão na mesa da secretária. Você pode pegar uma. As máquinas para encadernar cópias estão na sala número 2 e as explicações estão pregadas na parede.”

Você descreve o resultado e dá a informação necessária para resolver o problema. Descreveu o problema, como soluciona-lo é decidido pelo programador.

Page 5: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Estilo Imperativo Estilo imperativo: descreve-se todas as operações a serem realizadas

para solucionar o problema. O resultado final é uma conseqüência da realização destas operações. Cada sentença é uma forma imperativa e devem ser executadas em ordem e somente todas as sentenças juntas fazem sentido.

– Exemplo: pedir ao amigo para encadernar fotocópias

• “será que você pode encadernar esta coleção de papéis? Para fazer isso, vá até a mesa da secretária. Pegue uma capa. Vá a sala número 2. Leia e siga as instruções na parede. Volte com a capas encadernadas. Obrigada”.

A escolha da linguagem tem forte influência no estilo imperativo ou declarativo de programação. Porém, em um programa real encontramos ambos estilos em diferentes partes do programa.

Page 6: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Exemplos Fortran, Pascal, C - estilo imperativo, com

associações, estruturas de controle, etc. Contudo na declaração de variáveis, definição de tipos e estruturas tem-se parte de programação declarativa.

Prolog, Lisp - estilo declarativo, mas a execução em Prolog depende da ordem das instruções e definição de funções em Lisp é feita de modo imperativo.

Page 7: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

“Relembrar é viver....” Organização do computador (1/3)

Unidade central de processamento

– controla a operação do computador

– desenvolve todas operações aritméticas e lógicas

– armazena e recupera instruções e dados Unidade de controle

– Busca as instruções na memória

– decodifica-as e executa as operações Unidade lógica e aritmética da CPU

– desenvolve as operações que são aritméticas ou lógicas

– contém os registradores

Page 8: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

“Relembrar é viver....” Organização do computador (2/3)

Memórias

– as instruções e dados são armazenados na memória

– principal, primária, acesso aleatório (RAM)

• RAM é volátil, a informação será perdida com a queda de energia

• os registradores, de alta velocidade que localizam-se dentro da CPU também são voláteis

– As memórias de somente leitura ROM (Read Only Memory)

• não voláteis, contém informações de inicialização que não se perdem e nem podem ser trocadas. Pergunta: E as EPROM’s, EEPRO’s?

Page 9: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

“Relembrar é viver....” Organização do computador (3/3)

– memórias de armazenamento (secundárias)

• disco rígido, disquetes, “zips drive” e CD

• dados estão na forma magnética ou ótica

– os dispositivos periféricos oferecem armazenamento de "longa duração"

– o acesso aos dados é mais lento do que na memória principal

outros dispositivos periféricos

• dispositivos de entrada/saída

• impressoras, monitores, terminais, alto-falantes

• teclado, scanner,câmera digital , etc..

Page 10: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Organização da memória (1/2)

Organização da memória

– esquema binário: dois dígitos, bits, 0 e 1

– representam dois estados elétricos diferentes da máquina: “on” (ligado) e “off” (desligado)

– um grupo de 8 bits é um byte

– a memória é referida em blocos

– 210 bytes - 1024 bytes = 1 K

– Megabyte = 210 x 210 = 1.048.576 bytes

– bytes são agrupados em palavras (do mesmo tamanho que os registradores da CPU - comum: 16, 32 e 64 bits)

– cada localização da memória é referida por seu endereço

Page 11: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Organização da memória (2/2)

Execução

– a máquina entende instruções

– as instruções são construídas de

• código de operação numérica (opcode)

• endereço de um operando

– código de operação numérica (opcode) é a representação numérica de uma operação que a CPU pode desenvolver (carregar, multiplicar, adicionar, armazenar)

o endereço e o opcode devem ser representado na forma binária

Page 12: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Linguagem de Máquina (0 e 1’s !!!)

Por exemplo, imagine a execução das seguintes tarefas:

– buscar o conteúdo da memória na localização 1024 e carregar no registrador

– buscar o conteúdo da memória na localização 1025 e computar o produto deste valor e o valor do registrador

– armazenar o conteúdo do registrador na localização 1027. Supondo que os opcodes são : 16 (para carregar), 17 (para armazenar), 35

(para adicionar) e 36 (para multiplicar) as instruções em linguagem de máquina seriam:

Page 13: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Em Assembly - fica um pouco mais fácil... O mesmo na linguagem Assembly ficaria:

MOV A, ACC (mova o valor A (1024) para registrador ACC)

MUL B, ACC (multiplique o valor B (1025) pelo conteúdo de ACC)

ADD C, ACC (adicione o valor obtido na multiplicação (C) pelo conteúdo de ACC)

STO ACC, X (armazene o valor de ACC em X (1027)) A linguagem Assembly usa:

– mnemônicos para as instruções e nomes de variáveis colocadas no endereço numérico

Assembler: um sistema de software que traduz as instruções em assembly para a linguagem de máquina

Tradução de um programa

– linguagem de alto nível

– linguagem assembly

– linguagem de máquina

Page 14: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Do “baixo nível” ao “alto nível”!!!

Page 15: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Soma de dois números

Page 16: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Assembly (1/3)O que o programa faz?

No programa debug (do DOS), a tela se parecerá com:C:\>debug-a 1000D62:0100 mov ax,0002 ; move o valor 0002 para o registrador ax0D62:0103 mov bx,0004 ; move o valor 0004 para o registrador bx0D62:0106 add ax,bx ; adiciona o conteúdo dos registradores ax e bx guardando o resultado em ax D62:0108 nop ; a instrução nop (nenhuma operação) finaliza o programa0D62:0109

Page 17: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Entramos com o comando "t" para executar passo a passo as instruções:-tAX=0002 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0D62 ES=0D62 SS=0D62 CS=0D62 IP=0103 NV UP EI PL NZ NA PO NC0D62:0103 BB0400 MOV BX, 0004

Vemos o valor 0002 no registrador AX. Teclamos "t" para executar a segunda instrução:-tAX=0002 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0D62 ES=0D62 SS=0D62 CS=0D62 IP=0106 NV UP EI PL NZ NA PO NC 0D62:0106 01D8 ADD AX,BX

Assembly (2/3)

Page 18: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Assembly (3/3)Teclando "t" novamente para ver o resultado da instrução add:-t

AX=0006 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0D62 ES=0D62 SS=0D62 CS=0D62 IP=0108 NV UP EI PL NZ NA PE NC 0D62:0108 90 NOP

A possibilidade dos registradores conterem valores diferentes existe, mas AX e BX devem conter os mesmos valores acima descritos.

Page 19: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Programação Estruturada

A utilização do computador para resolver problemas exige que se que se faça uma a descrição de um conjunto de comandos que, obedecidos, provocarão uma sucessão finita de ações que resultarão na resolução do problema proposto (algoritmo).

– O desenvolvimento estruturado de algoritmos tem como objetivos:

• facilitar o desenvolvimento dos algoritmos

• facilitar seu entendimento pelos humanos

• antecipar a comprovação de sua correção

• facilitar a sua manutenção e modificação

• permitir o desenvolvimento em equipe

Page 20: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Programação Estruturada

na programação estruturada tem-se:

– refinamentos sucessivos de algoritmos: parte de descrições gerais e gradativas e sucessivamente entram em detalhes e minúcias do problema

– modularização: divisão do programa em módulos que delimitam poucas funções e são os mais independentes possíveis

– nos módulos deve ser usado um número limitado de diferentes comandos e de diferentes estruturas de controle

Page 21: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Algoritmo Soma de dois números inteiros

- Ler o primeiro valor (A) que será entrado via teclado- Ler o segundo valor (B) que será entrado via teclado- Calcular a soma de A e B, atribuindo o valor total (A + B) a uma variável (X). - Mostrar a soma (valor de X) na tela.

Exemplo: Se A = 1 e B =2, então X = 3

Page 22: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Linguagem Basic

1 REM LINGUAGEM BASIC

5 REM PROGRAMA PARA ADICIONAR DOIS NUMEROS S0MA.BAS

10 PRINT "QUAL O VALOR DE A?"

20 INPUT A

30 PRINT "QUAL O VALOR DE B?"

40 INPUT B

50 X = A + B

60 PRINT "A SOMA DOS NUMEROS E':"

70 PRINT X

Soma de dois números

Page 23: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Linguagem Fortran!======================================! Soma de dois numeros inteiros ! entradas: a, b, dois numeros inteiros! saida: x , a soma dos numeros!====================================== PROGRAM soma IMPLICIT NONE INTEGER :: a, b INTEGER :: x ! le os numeros a e b

WRITE(*,*) 'Qual o valor de A?' READ(*,*) a WRITE(*,*) 'Qual o valor de B?' READ(*,*) b

! soma o valor de a e b na variavel x x = a + b ! mostra o resultado da soma WRITE(*,*) WRITE(*,*) 'A soma dos numeros e', x

END PROGRAM soma

Page 24: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Linguagem Pascal

{LINGUAGEM PASCAL}

{Programa para adicionar dois numeros}

program adiciona;

var

{declaracao de variaveis}

X, A, B: integer;

begin

Writeln('Qual valor de A? ');

readln(A);

writeln('Qual valor de B? ');

readln(B);

X := A+B;

writeln('A soma dos numeros: ', X);

readln;

end.

Page 25: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Linguagem C/* programa adiciona dois numeros inteiros */

/* inclui informacao sobre biblioteca de comandos */

#include <stdio.h>

/* define uma funcao chamada main que nao recebe argumentos */

main()

{

/* define as variaveis A e B que serao somadas em X como inteiras */

int A;

int B;

int X;

/* scanf() e printf() entrada e saida de dados */

printf("Digite o valor de A:");

scanf("%d", &A);

printf("Digite o valor de B:");

scanf("%d", &B);

/* soma dois numeros (A e B) inteiros */

X = A + B;

/* %d imprime o resultado X como inteiro decimal */

printf("valor da soma eh: %d", X);

printf(" ");

}

Page 26: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Programação Funcional É um estilo de programação, sem atribuição, sem alteração

dos argumentos de funções, e em que estas se limitam a produzir novos valores.

Neste paradigma, qualquer função da linguagem é considerada uma função matemática pura que, para os mesmos argumentos produz sempre os mesmos valores. Nunca nada é destruído.

Uma função que junta duas listas produz uma nova lista sem alterar as listas originais.

Ex.: uma função que “muda o número de portas de um automóvel produz um novo automóvel”.

Vantagens: produzir programas muito rapidamente e minimizar erros.

Limitações: incapacidade em modificar seja lá o que for.

Page 27: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Programação Funcional Linguagem LISP

Soma de dois números em LISP: A forma especial setq recebe uma variável e um valor e atribui o valor à variável.

> (let ((x 2)) ; atribui valor 2 a x (setq x (+ x 3)) ; soma em x ao valor 3 (x=5) (setq x (* x x)) ; multiplica os valores de x (x.x = 25) (setq x (- x 5)) ; subtrai de o valor x=25 o valor 5 x) ; o resultado é 20 ou seja (25 - 5)20

Exemplo :> (setq y 20) 20> (let ((x 10)) (+ x y))30

Page 28: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Programação em Lógica Uso da Lógica como paradigma de programação,

anos 70 Kowalsky Origens: demonstração automática de teoremas na

IA. Objetivo é solucionar um problema. O problema (P)

é tratado como objeto matemático P = (D, R, q) onde D = dados, R = resultados e q = condição do

problema

Page 29: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Orientação a objetos Análise orientada a objetos (OOA): ”Um método de

análise cujos requisitos são examinados da perspectiva de classes e objetos encontrados no vocabulário do domínio do problema”.

Decomposição orientada a objetos: "É o processo de quebrar um sistema em partes, cada parte representando uma classe ou objeto dentro do domínio do problema. Na decomposição orientada a objetos, o mundo é visto como uma coleção de objetos que cooperam uns com os outros para atingir a funcionalidade desejada."

Page 30: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Orientação a objetos Projeto orientado a objetos (OOD): "Um método de

projeto compreendendo o processo de decomposição orientada a objetos e a notação descrevendo os modelos físicos e lógicos, assim como os modelos estáticos e dinâmicos do sistema considerado; especificamente esta notação incluem os diagramas de classes, os diagramas de módulos e os diagramas de processo”.

Programação orientada a objetos (OOP): "Um método de implementação no qual os programas são organizados como uma coleção cooperativa de objetos, cada qual representando uma instância de alguma classe, e cujas classes são todas membros de uma hierarquia de classes unidas por relações de herança”.

Page 31: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Classes Uma classe é o elemento fundamental de um sistema

orientado a objetos. Todas as classes de um sistema orientado a objetos são arranjadas em uma hierarquia de classes com uma classe raiz no topo.

"Uma classe é uma cópia fiel ou protótipo que define as variáveis e métodos comuns a todos objetos com uma certa característica". O que isso significa?

cópia fiel: Uma classe não pode fazer qualquer coisa consigo mesma.

define: Uma classe oferece algo que pode ser usado mais tarde.

objetos: Uma classe pode ser somente usada se "traz para o mundo real" pela sua instanciação.

Page 32: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Exemplo: Classe Carro

Page 33: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Classe Carro A classe representando um carro tem as variáveis

(marca, velocidade, marcha,...) e métodos (acelerar, frear,...).

Esta classe serve como uma descrição genérica de qualquer carro, porque cada coisa no mundo real que é um carro tem por exemplo, uma velocidade máxima, um número de rodas ... e quando dirige um carro você pode acelerar ou mudar a marcha.

Mas você não dirige um carro genérico com um número de rodas em uma velocidade. Você usualmente diz, por exemplo, quatro rodas a 80 km/h. Isto especifica uma instância da classe “carro” e portanto denominada objeto.

Page 34: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Objetos Objetos: instância de uma classe “Um objeto tem um estado, um comportamento e

identidade”. A estrutura e o comportamento de objetos similares são definidos em suas classes comuns. O que isto significa?

estado: Um objeto tem uma condição determinada por valores correntes de suas variáveis.

comportamento: o estado de um objeto pode ser mudado aplicando-se um certo método.

identidade: cada objeto pode ser distinguido de outros objetos.

Page 35: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Objeto MeuCarro O objeto parece ser similar a classe e foi instanciado dela. Portanto,

devido a isto sua estrutura não muda. Pela aplicação de certos valores das variáveis, o objeto MeuCarro tem

agora um certo estado assim como uma identidade. É ainda um carro pois tem o mesmo comportamento de todos os outros

carros, os quais são definidos em métodos de sua classe comum Carro.

Page 36: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Métodos Sinônimo: mensagem Segundo BOOCH, um método é: "Uma operação em um objeto definido como parte da declaração

de uma classe." Os métodos, definidos em um classe, indicam o que objetos

instanciados são capazes de fazer. Um método de um objeto é chamado por outros objetos do sistema.

Uma mensagem é compreendida por três componentes: 1. o objeto a quem a mensagem é endereçada 2. o nome do método a ser executado 3. quaisquer parâmetros necessários ao método Assim, se quisermos mudar a velocidade de nosso carro, o

motorista (que também é considerado um objeto) tem que chamar o método “acelerar”.

Page 37: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Exemplo

Page 38: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Encapsulamento Sinônimo: informação escondida O encapsulamento é uma das características mais importantes de um

sistema orientado a objetos. BOOCH descreve o encapsulamento como: "O processo de esconder todos os detalhes de um objeto que não

contribuem para suas características essenciais. Geralmente a estrutura de um objeto é escondida assim como a implementação de seus métodos.[...]”

Page 39: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Exemplo Como mostra a figura do objeto MeuCarro, todas as suas variáveis são

enclausuradas dentro dos métodos do objeto e podem ser mudadas somente por estes métodos.

Assim como, quando você acelera um carro no mundo real não sabe exatamente como o motor do carro trabalha. Você só tem que saber apertar o pedal do acelerador, embreagem e mudar a marcha.

Isto conduz a uma interface amigável, com benefícios para o usuário e para o programador tais como:

– O usuário não precisa conhecer detalhes da estrutura interna e da funcionalidade de um objeto. Ele deve saber quais operações podem ser feitas num objeto para mudar seu estado.

– O programador pode mudar e melhorar detalhes de implementação sem mudança da interface.

– Outra vantagem é que toda funcionalidade é enclausurada num mesmo objeto, o que facilita o manuseio de um objeto.

Page 40: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Herança Como visto anteriormente, um sistema orientado a

objetos consiste de “classes arranjadas em uma hierarquia de classe”.

Uma classe que esteja no topo desta hierarquia serve como uma base para outras classes, as quais tem a mesma ou propriedades adicionas. Este processo é denominado herança.

É um relacionamento entre classes, onde uma classe compartilha a estrutura ou comportamento definido em uma (herança simples) ou mais classes (herança múltipla).

A herança define “uma característica” hierárquica entre classes.

Page 41: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Embora um carro conversível e um caminhão não sejam parecidos, ambos têm algo em comum.

Assim, foram definidos como subclasses de “Carro”. Por exemplo, ambos têm “um número de rodas” e podem ser “acelerados”.

Page 42: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Abstração Pela definição de subclasses, chega-se uma hierarquia de classes,

onde as partes inferiores são mais e mais especializadas. Por outro lado, as classes nas partes superiores são mais generalizadas. Isto leva a outro aspecto da orientação objetos, a qual é denominada abstração.

"São as características essenciais de um objeto que o distingue de outros tipos de objetos e portanto oferecem fronteiras bem definidas, relativas à perspectiva de um observador, no processo de focalizar as características de um objeto [...]”

Como a definição diz, as abstrações são "relativas à perspectiva do observador", que significa que ela depende muito do domínio do problema para qual uma estrutura de classe será criada.

A pesquisa para se fazer abstrações inicia-se após os objetos do domínio do problema terem sido encontrados durante a fase de análise.

É a parte mais difícil e crítica do processo de desenvolvimento, porque o projeto dos níveis de abstração determina a qualidade do sistema considerado.

Page 43: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Exemplo Considerando que o resultado da fase de análise foram

os seguintes objetos:– carros conversíveis – bicicletas "mountain bike" – motocicletas – bicicleta de dois lugares (tandem)– ônibus escolar – camionete– um “Buggy” – um caminhão – um “Puma GTB”

Page 44: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Exemplo Obviamente, os objetos representam diferentes tipos de

veículos. Analisando o fato, encontramos nossa primeira abstração tomando a classe de "veículos" como a classe base da nossa hierarquia.

Page 45: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Exemplo

Embora ela contenha todos objetos e portanto esteja “correta” não é muito inteligente.

Uma violação evidente do princípio da abstração é por exemplo, que “carro conversível” pode ser encontrada no mesmo nível de um “Buggy” e um “Puma GTB”. Isto deve estar errado pois ambos são tipos de “carros conversíveis”.

Page 46: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Mudando a hierarquia:

Assim temos uma hierarquia mais estruturada com subclasses “bicicletas”, “carros conversíveis” e "transportadores". Mas eles ainda são muito específicos. Por exemplo, se um novo objeto “Omega” for adicionado a hierarquia, onde seria inserido, pois não é um carro conversível?

Page 47: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Rearranjando nossa estrutura pela introdução de uma nova

classe "carros":

Page 48: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Agora existem quatro níveis de abstração. A nova classe "carros" pode conter as propriedades que são comuns a todas suas subclasses.

Mas algo ainda está errado com nossos carros conversíveis e "carros de luxo".

Como pode ser visto, eles estão arranjado no mesmo nível de abstração do que, por exemplo, um "caminhão". Mas um caminhão é mais abstrato do que um "Buggy" ou um "Omega".

Page 49: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

Melhoremos nossa hierarquia fazendo outra abstração:

Page 50: Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a

• Um quinto nível de abstração foi criado e nossa hierarquia de classe é agora mais adequada que nossa primeira tentativa mas ainda não terminou... •Isto foi um exemplo de processo de abstração para demonstrar somente como uma hierarquia de classe pode ser construída e quais reflexões devem ser feitas.•Linguagens orientadas a objetos: C++, JAVA, Smalltalk (ver exemplo no livro do Prof. Barreto)

•That’all folks! •The End