Buscar

Paradigmas de Programação

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 50 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 50 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 50 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Clique para editar o estilo do título mestre
Clique para editar o estilo do subtítulo mestre
*
*
*
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
*
*
*
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!
*
*
*
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. 
*
*
*
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.
*
*
*
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.
*
*
*
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. 
*
*
*
“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
*
*
*
“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?
*
*
*
“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..
*
*
*
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
*
*
*
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
*
*
*
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:
*
*
*
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
*
*
*
Do “baixo nível” ao “alto nível”!!!
*
*
*
Soma de dois números
*
*
*
Assembly (1/3)
O que o programa faz? 
No programa debug (do DOS), a tela se parecerá com:
C:\>debug
-a 100
0D62:0100 mov ax,0002 ; move o valor 0002 para o registrador ax
0D62:0103 mov bx,0004 ; move o valor 0004 para o registrador bx
0D62: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
 programa
0D62:0109
*
*
*
Entramos com o comando "t" para executar passo a passo as instruções:
-t
AX=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:
-t
AX=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)
*
*
*
Assembly (3/3)
Teclando "t" novamente para ver o resultado da instrução add:
-t
AX=0006BX=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.
*
*
*
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
*
*
*
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
*
*
*
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
*
*
*
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
*
*
*
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
*
*
*
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.
*
*
*
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(" ");
}
*
*
*
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.
*
*
*
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
*
*
*
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
*
*
*
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." 
*
*
*
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”. 
*
*
*
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. 
*
*
*
Exemplo: Classe Carro
*
*
*
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.
*
*
*
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. 
*
*
*
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 valoresdas 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. 
*
*
*
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”. 
*
*
*
Exemplo
*
*
*
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.[...]”
*
*
*
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.
*
*
*
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.
*
*
*
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”. 
*
*
*
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. 
*
*
*
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”
*
*
*
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. 
*
*
*
Exemplo
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”. 
Embora ela contenha todos objetos e portanto esteja “correta” não é muito inteligente.
*
*
*
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? 
*
*
*
Rearranjando nossa estrutura pela introdução de uma nova classe "carros": 
*
*
*
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".
*
*
*
Melhoremos nossa hierarquia fazendo outra abstração:
*
*
*
 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

Continue navegando