Paradigmas de Programao Estilos de programao Programao Estruturada

  • Slides: 50
Download presentation
Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional -

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

Atenção! Mais informações sobre Paradigmas de Programação em: 4 Jorge Muniz Barreto Inteligência Artificial

Atenção! Mais informações sobre Paradigmas de Programação em: 4 Jorge Muniz Barreto Inteligência Artificial no Limiar do Século XXI, 2 a. Edição, Florianópolis, 1999 4 Apêndice A, página 272 a 298

Paradigma? 4 “Conjunto de regras que estabelecem fronteiras e descrevem como resolver problemas dentro

Paradigma? 4 “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) 4 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 4 Uma linguagem particular através de suas estruturas de

Estilo Declarativo x Estilo Imperativo 4 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) 4 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. 4 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. ” 4 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 4 Estilo imperativo: descreve-se todas as operações a serem realizadas para solucionar

Estilo Imperativo 4 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”. 4 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 4 Fortran, Pascal, C - estilo imperativo, com associações, estruturas de controle, etc.

Exemplos 4 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. 4 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) 4 Unidade central de processamento

“Relembrar é viver. . ” Organização do computador (1/3) 4 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 4 Unidade de controle – Busca as instruções na memória – decodifica-as e executa as operações 4 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) 4 Memórias – as instruções

“Relembrar é viver. . ” Organização do computador (2/3) 4 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)

“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 4 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) 4 Organização da memória – esquema binário: dois dígitos, bits,

Organização da memória (1/2) 4 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) 4 Execução – a máquina entende instruções – as instruções

Organização da memória (2/2) 4 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) 4 o endereço e o opcode devem ser representado na forma binária

Linguagem de Máquina (0 e 1’s !!!) 4 Por exemplo, imagine a execução das

Linguagem de Máquina (0 e 1’s !!!) 4 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. 4 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. . . 4 O mesmo na

Em Assembly - fica um pouco mais fácil. . . 4 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)) 4 A linguagem Assembly usa: – mnemônicos para as instruções e nomes de variáveis colocadas no endereço numérico 4 Assembler: um sistema de software que traduz as instruções em assembly para a linguagem de máquina 4 Tradução de um programa – linguagem de alto nível – linguagem assembly – linguagem de máquina

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

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

Soma de dois números

Soma de dois números

Assembly (1/3) O que o programa faz? No programa debug (do DOS), a tela

Assembly (1/3) O que o programa faz? No programa debug (do DOS), a tela se parecerá com: C: >debug -a 100 0 D 62: 0100 mov ax, 0002 ; move o valor 0002 para o registrador ax 0 D 62: 0103 mov bx, 0004 ; move o valor 0004 para o registrador bx 0 D 62: 0106 add ax, bx ; adiciona o conteúdo dos registradores ax e bx guardando o resultado em ax D 62: 0108 nop ; a instrução nop (nenhuma operação) finaliza o programa 0 D 62: 0109

Assembly (2/3) Entramos com o comando "t" para executar passo as instruções: -t AX=0002

Assembly (2/3) Entramos com o comando "t" para executar passo as instruções: -t AX=0002 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DS=0 D 62 ES=0 D 62 SS=0 D 62 CS=0 D 62 IP=0103 NV UP EI PL NZ NA PO NC 0 D 62: 0103 BB 0400 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 DS=0 D 62 ES=0 D 62 SS=0 D 62 CS=0 D 62 IP=0106 NV UP EI PL NZ NA PO NC 0 D 62: 0106 01 D 8 ADD AX, BX

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

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 DS=0 D 62 ES=0 D 62 SS=0 D 62 CS=0 D 62 IP=0108 NV UP EI PL NZ NA PE NC 0 D 62: 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 4 A utilização do computador para resolver problemas exige que se faça

Programação Estruturada 4 A utilização do computador para resolver problemas exige 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 4 na programação estruturada tem-se: – refinamentos sucessivos de algoritmos: parte de

Programação Estruturada 4 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á

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

Soma de dois números Linguagem Basic 1 REM LINGUAGEM BASIC 5 REM PROGRAMA PARA

Soma de dois números Linguagem Basic 1 REM LINGUAGEM BASIC 5 REM PROGRAMA PARA ADICIONAR DOIS NUMEROS S 0 MA. 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

Linguagem Fortran !=================== ! Soma de dois numeros inteiros ! entradas: a, b, dois

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(*, *) 'A soma dos numeros e', x END PROGRAM soma

Linguagem Pascal {LINGUAGEM PASCAL} {Programa para adicionar dois numeros} program adiciona; var {declaracao de

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: ', readln; end. X);

Linguagem C /* programa adiciona dois numeros inteiros */ /* inclui informacao sobre biblioteca

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 4 É um estilo de programação, sem atribuição, sem alteração 4 4

Programação Funcional 4 É um estilo de programação, sem atribuição, sem alteração 4 4 4 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

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 4 Uso da Lógica como paradigma de programação, anos 70 Kowalsky

Programação em Lógica 4 Uso da Lógica como paradigma de programação, anos 70 Kowalsky 4 Origens: demonstração automática de teoremas na IA. 4 Objetivo é solucionar um problema. O problema (P) é tratado como objeto matemático 4 P = (D, R, q) 4 onde D = dados, R = resultados e q = condição do problema

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

Orientação a objetos 4 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”. 4 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 4 Projeto orientado a objetos (OOD): "Um método de projeto compreendendo

Orientação a objetos 4 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”. 4 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 4 Uma classe é o elemento fundamental de um sistema 4 4 orientado

Classes 4 Uma classe é o elemento fundamental de um sistema 4 4 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

Exemplo: Classe Carro

Classe Carro 4 A classe representando um carro tem as variáveis (marca, velocidade, marcha,

Classe Carro 4 A classe representando um carro tem as variáveis (marca, velocidade, marcha, . . . ) e métodos (acelerar, frear, . . . ). 4 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. 4 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 4 Objetos: instância de uma classe 4 “Um objeto tem um estado, um

Objetos 4 Objetos: instância de uma classe 4 “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? 4 estado: Um objeto tem uma condição determinada por valores correntes de suas variáveis. 4 comportamento: o estado de um objeto pode ser mudado aplicando-se um certo método. 4 identidade: cada objeto pode ser distinguido de outros objetos.

Objeto Meu. Carro 4 O objeto parece ser similar a classe e foi instanciado

Objeto Meu. Carro 4 O objeto parece ser similar a classe e foi instanciado dela. Portanto, devido a isto sua estrutura não muda. 4 Pela aplicação de certos valores das variáveis, o objeto Meu. Carro tem agora um certo estado assim como uma identidade. 4 É 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 4 Sinônimo: mensagem 4 Segundo BOOCH, um método é: 4 "Uma operação em

Métodos 4 Sinônimo: mensagem 4 Segundo BOOCH, um método é: 4 "Uma operação em um objeto definido como parte da declaração 4 4 4 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

Exemplo

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

Encapsulamento 4 Sinônimo: informação escondida 4 O encapsulamento é uma das características mais importantes de um sistema orientado a objetos. 4 BOOCH descreve o encapsulamento como: 4 "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 4 Como mostra a figura do objeto Meu. Carro, todas as suas variáveis

Exemplo 4 Como mostra a figura do objeto Meu. Carro, todas as suas variáveis são enclausuradas dentro dos métodos do objeto e podem ser mudadas somente por estes métodos. 4 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. 4 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 4 Como visto anteriormente, um sistema orientado a objetos consiste de “classes arranjadas

Herança 4 Como visto anteriormente, um sistema orientado a objetos consiste de “classes arranjadas em uma hierarquia de classe”. 4 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. 4 É 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). 4 A herança define “uma característica” hierárquica entre classes.

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

4 Embora um carro conversível e um caminhão não sejam parecidos, ambos têm algo em comum. 4 Assim, foram definidos como subclasses de “Carro”. Por exemplo, ambos têm “um número de rodas” e podem ser “acelerados”.

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

Abstração 4 Pela definição de subclasses, chega-se uma hierarquia de classes, 4 4 onde as partes inferiores são 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 4 Considerando que o resultado da fase de análise foram os seguintes objetos:

Exemplo 4 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 4 Obviamente, os objetos representam diferentes tipos de veículos. Analisando o fato, encontramos

Exemplo 4 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 Embora ela contenha todos objetos e portanto esteja “correta” não é muito inteligente.

Exemplo Embora ela contenha todos objetos e portanto esteja “correta” não é muito inteligente. 4 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”.

4 Mudando a hierarquia: Assim temos uma hierarquia mais estruturada com subclasses “bicicletas”, “carros

4 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?

4 Rearranjando nossa estrutura pela introdução de uma nova classe "carros":

4 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

®Agora existem quatro níveis de abstração. A nova classe "carros" pode conter as propriedades que são comuns a todas 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".

4 Melhoremos nossa hierarquia fazendo outra abstração:

4 Melhoremos nossa hierarquia fazendo outra abstração:

 • Um quinto nível de abstração foi criado e nossa hierarquia de classe

• 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