A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a."— Transcrição da apresentação:

1 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 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

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

3 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.

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

5 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.

6 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.

7 “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

8 “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?

9 “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..

10 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 –2 10 bytes bytes = 1 K –Megabyte = 2 10 x 2 10 = 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

11 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

12 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 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:

13 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

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

15 Soma de dois números

16 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

17 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: D8 ADD AX,BX Assembly (2/3)

18 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: NOP A possibilidade dos registradores conterem valores diferentes existe, mas AX e BX devem conter os mesmos valores acima descritos.

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

20 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

21 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

22 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

23 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

24 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.

25 Linguagem C /* programa adiciona dois numeros inteiros */ /* inclui informacao sobre biblioteca de comandos */ #include /* 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(" "); }

26 Programação Funcional 4 É 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. 4 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. 4 Uma função que junta duas listas produz uma nova lista sem alterar as listas originais. 4 Ex.: uma função que “muda o número de portas de um automóvel produz um novo automóvel”. 4 Vantagens: produzir programas muito rapidamente e minimizar erros. 4 Limitações: incapacidade em modificar seja lá o que for.

27 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

28 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

29 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."

30 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”.

31 Classes 4 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. 4 "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? 4 cópia fiel: Uma classe não pode fazer qualquer coisa consigo mesma. 4 define: Uma classe oferece algo que pode ser usado mais tarde. 4 objetos: Uma classe pode ser somente usada se "traz para o mundo real" pela sua instanciação.

32 Exemplo: Classe Carro

33 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.

34 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.

35 Objeto MeuCarro 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 MeuCarro 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.

36 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 de uma classe." 4 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. 4 Uma mensagem é compreendida por três componentes: 4 1. o objeto a quem a mensagem é endereçada 4 2. o nome do método a ser executado 4 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”.

37 Exemplo

38 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.[...]”

39 Exemplo 4 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. 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.

40 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.

41 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 ”.

42 Abstração 4 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. 4 "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 [...]” 4 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. 4 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.

43 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”

44 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.

45 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”.

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

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

48  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".

49 4 Melhoremos nossa hierarquia fazendo outra abstração:

50 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


Carregar ppt "Paradigmas de Programação - Estilos de programação - Programação Estruturada - Programação Funcional - Programação em Lógica - Programação Orientada a."

Apresentações semelhantes


Anúncios Google