SlideShare uma empresa Scribd logo
1 de 20
Baixar para ler offline
Apostila – Paradigmas de
Programação
José Corrêa Viana

jcorrea@unipam.edu.br
jcorreavian@hotmail.com
twitter.com/rhuodox
facebook.com/ jcorreaviana

Patos de Minas, 2014.
O que você encontrará aqui
O objetivo dessa apostila é auxiliar no processo de aprendizado e fixação dos
conteúdos vistos em sala de aula. Essa apostila abordará conceitos sobre:


Linguagens regulares;



Paradigma Imperativo;



Paradigma Lógico Funcional;



Paradigma Orientado a Objeto.

Qualquer dúvida e/ou sugestões para adicionar valor a este material, basta
entrar em contato nos meios de comunicação disponibilizados na primeira
página dessa apostila.
Primeiros Conceitos
Acredito que a primeira pergunta que surge em nossa mente quando
iniciamos um novo estudo é saber por que estamos fazendo isso correto?
Então talvez a melhor candidata como primeira pergunta dessa disciplina
seja: “O que é Paradigma de Programação?”. Espero ter acertado que essa
seja sua pergunta ou que seja ao menos algo semelhante. Mas vamos
começar por ela.
Pois bem. Paradigma de Programação nada mais é do que a estrutura ou a
maneira que um programa será executado. Através de um exemplo fica mais
fácil, correto?! :
O que diferencia as linguagens Java ou C# das linguagens COBOL ou
Pascal partindo da visão essencial de cada uma?
Java e C# São linguagens de programação ORIENTADAS A OBJETO, ou
seja, o programador deve ter a capacidade de abstrair que uma linguagem
com essa característica trabalha através da interação de objetos, correto?!
As linguagens COBOL e Pascal são linguagens onde o programador deve
entender que o programa será executado como uma pilha de funções
executadas de maneira sequencial, ou seja, PROGRAMAÇÃO FUNCIONAL.
Se fizermos uma analogia com Engenharia de Software, existem diversas
metodologias que possuem suas particularidades correto? As metodologias
ágeis – Scrum, XP, etc - se diferenciam das metodologias tradicionais –
Processo Unificado, Cascata, Espiral – através de suas características e
também devido a sua aplicabilidade em determinados problemas que devem
ser resolvidos. Os Paradigmas de Programação possuem basicamente o
mesmo conceito: diferentes linguagens de programação possuem diferentes
paradigmas de programação.
Java, C#, Pascal e COBOL são poucos exemplos de linguagens que possuem
no mercado. Vou deixar como tarefa para você pesquisar mais alguns
exemplos de linguagens de programação e quais seus paradigmas. Para
iniciar suas pesquisas, lhe ajudarei com uma excelente dica! Clique aqui
para ver qual é. .
Vamos começar então vendo alguns conceitos de linguagens regulares e
alguns conceitos importantes, como autômatos, expressão regular e
gramática regular.
Autômato Finito
Então, o que é um autômato finito?

Figura 1 – Exemplos de autômatos: Semáforo, porta eletrônica e elevador.

Autômatos finitos são máquinas que possuem
componentes e que são bem fáceis de ser lembrados:

basicamente

três

1. Fita: dispositivo que tem a informação que será processada;
2. Unidade de Controle: estado corrente da máquina. Essa possui uma
unidade de controle que acessa um estado da fita e que se movimenta
exclusivamente para a direita;
3. Programa ou função de transição: determina o novo estado da
máquina através de leituras e de funções.

Figura 2 - Exemplo de um autômato de estado finito com a fita, controle e estados
Através da imagem podemos ver que o funcionamento de um autômato é
bem simples. Basicamente ele possui um caminho a ser seguido (fita) que, de
acordo com uma função ou leitura, ele muda seu estado e para saber qual o
estado atual é utilizado um controle ou um indicador de qual o estado atual.
No exemplo a cima a fita é lida pelo programa como nós lemos essa apostila,
sempre da esquerda para a direita.
Definindo um autômato finito, temos algumas propriedades que nos ajudam
a entender melhor como isso funciona. Vamos ver as definições formais e
depois veremos alguns exemplos que podem nos auxiliar a compreender
melhor os autômatos finitos.
Autômato Finito Determinístico
Existem algumas propriedades que são utilizadas ao realizar a diagramação
de um autômato (veremos alguns exemplos mais à frente).

Figura 3 - Representação da mudança de estados de um autômato através da leitura de um símbolo

Figura 4 - Representação de um estado inicial e um estado final

O que define o autômato finito é uma quíntupla (ou 5-upla) definida por:
, onde:

Essa quíntupla pode parecer um pouco confusa no início do conteúdo, mas
com exemplos ficará mais fácil de entender e com o passar do tempo você irá
decorá-la intuitivamente. Prometo! .
Vamos voltar às figuras apresentadas acima e vamos explicar como funciona
a porta eletrônica. Essa porta é utilizada em shoppings, supermercados e em
outros lugares. Para que ela abra automaticamente existem dois tapetes,
um de frente para a porta do lado interno e outro tapete do lado externo.
Isso porque pessoas devem entrar e pessoas querem sair. A porta irá abrir
quando uma pessoa se aproximar e se fechará quando a pessoa se distanciar
da porta.

Figura 5 - Visão por cima de uma porta automática

A porta pode assumir dois estados: aberto ou fechado. Ele irá mudar de um
estado para o outro de acordo com o estímulo que receber e, nesse caso,
existem quatro possibilidades:
1. Frente: pessoa está no tapete da frente (me deixe entrar!);
2. Retaguarda: pessoa está no tapete de dentro (me deixe sair!);
3. Ambos: existe uma pessoa no tapete da frente e outra no tapete de
dentro;
4. Nenhum: não há ninguém sobre os tapetes.
Vamos supor que a porta receberá a seguinte sequência de estímulos ou
valores de entrada:
frente; retaguarda; nenhum; frente, ambos.
Sabemos que nesse caso a porta estará aberta ou fechada e, de acordo com a
sequência de estímulos ela passará de um estado para outro ou ainda
continuará no mesmo estado. Portanto, para a sequência de estímulos
teremos as seguintes transações de estados:
fechado (início) -> aberto; aberto -> aberto; aberto -> fechado; fechado ->
aberto; aberto -> aberto.
Se transpusermos todas essas frases acima em uma imagem ficam mais
fáceis? Vamos representar em uma imagem, também chamado de diagrama
de transições ou diagrama de estados.

Figura 6 - Diagrama de transições da porta automática

Ao realizar a leitura da imagem – para ajudar a esclarecer os conceitos – é
possível notar os estados e quais as leituras ou transações são realizadas
para passagem de uma situação para outra. Vamos ler a imagem:


Se ninguém quer entrar ou sair, a porta permanecerá fechada;


Se houver alguém na frente, na retaguarda ou em ambos e a porta
estiver fechada, ela mudará para o estado aberta;



Se ainda existir pessoas na porta da frente, na retaguarda ou em
ambos, a porta continuará aberta;



Se a porta estiver aberta, porém mais ninguém irá passar, ela
mudará do estado aberta para fechada.

Esse é um exemplo inicial. Daqui a pouco iremos utilizar programas que
simulam o funcionamento de autômatos e poderemos ver de uma maneira
mais interativa como eles funcionam.
Para exercitar a transição entre os estados do autômato, teste e nesse
momento, tente entender como é a feita a passagem de estados no autômato.
CLIQUE AQUI E FAÇA ALGUNS TESTES!
“Se estiver com alguma dúvida, clique no ícone “?” que o site irá compilar
passo a passo a transição dos estados do autômato.
Representação de um Autômato Finito
Iremos ver nessa apostila basicamente três tipos de representações de
autômatos finitos:
1. Definição formal ou linguagem formal;
2. Através do diagrama de transições;
3. Através da tabela de transições.
Agora vamos ver um exemplo que apresenta as três maneiras dessa
representação:
Especifique formalmente um autômato finito determinístico (DFA) que
aceite somente strings de a’s e b’s que têm a sequência ab em algum lugar
da string.

Portanto, podemos definir de maneira formal essa linguagem L como:
Z e X que consistem somente em

{ |
a’s e b’s

Ou ainda podemos definir apresentado os parâmetros a e b à esquerda da
barra vertical:
{

|

Exemplos de strings nessa linguagem: ab; bbaba; baaaabb, aaaaaaaaab.
Exemplos de strings que não estão nessa linguagem: a; bbbaaa; ba.
Podemos deduzir que:


O alfabeto de entrada será ∑ = {a, b};



Possui um conjunto de estados, onde vamos dizer que q0 é o estado
inicial;



O autômato deve armazenar algumas informações para que a string
passada seja uma substring de entrada:
1. Já viu ab? Então vai aceitar todas as demais entradas e só
estará em estado de aceitação;
2. Nunca viu ab, mas sua entrada mais recente foi a? Então se ele
ver um b, terá visto ab e poderá aceitar o que vier em diante;
3. Nunca viu ab, mas sua entrada ou não existe ou começa com a?
Então ele não poderá aceitar até ver o primeiro a seguido de b.

Agora vamos atribuir para cada situação dessa um estado.


Estado 3: será representado pelo estado q0. Precisamos ver uma
sequência ab. Porém, se no estado q0 vermos b, então devemos ficar
no estado q0.
o δ (q0, b) = q0;



Estado 2: estamos no estado q0 e vemos um a, mas nunca vimos um
ab. Esse estado será o q2. Portanto se a entrada for a, então podemos
passar para o estado 2.
o δ (q0, a) = q2;


Estado 3: nesse estado será considerado que estamos no estado 2.
Então, se virmos outra letra a estaremos no mesmo lugar correto?
Ainda não vimos uma sequência ab ! Não vimos ab, mas a ainda
continua sendo nosso último símbolo e ainda estamos esperando pela
letra b.
o δ (q2, a) = q2;.
Se estamos no estado q2 e vemos a letra b, agora existe uma
sequência ab. Chamaremos essa condição de q1, e ela será nossa
condição de aceitação.
o δ (q2, b) = q1;

Como foi definido no problema, ao final dessa condição, se vermos uma
sequência ab, qualquer entrada será aceita e continuará na situação de
aceitação.
o δ (q1, a) = δ (q1, b) = q1;
Agora podemos definir nosso autômato aplicando a quíntupla vista
anteriormente. Q = {q0, q1, q2}. Como foi definido, q0 será o estado inicial e
o único estado de aceitação é q1, ou seja, F = {q1}. A definição completa do
autômato A que aceita a linguagem L de strings que tem como subconjunto
ab, é:
{

{

{

Já vimos uma definição formal do autômato. Essa representação é a mais
extensa e pode ficar até um pouco cansativa de se visualizar um autômato.
Vamos ver agora duas outras formas de representação.
A representação por diagrama já foi vista anteriormente no exemplo da
porta automática, lembra-se? Vamos ver algumas definições para esse tipo
de representação:
 Para cada estado Q existe um nó correspondente;
 Cada para cada mudança de estado existirá um estado resultante. Essa
mudança se deve com a entrada do estado atual e da função de
transição. δ (q, a) = p. Ou seja, o estado q após passar pela função de
transição a resultará em p;
 Existe uma seta inicial em q0 identificada como início. Essa seta não se
origina em nenhum estado (representados por nós);
 Os estados ou nós de aceitação são representados por um círculo duplo
e os estados que não estão nessa situação são círculos simples.

Figura 7 - Diagrama de transições que aceita todas strings que contêm a substring ab

A última representação que iremos ver é a tabela de transições. Essa
representação e através (como o nome já diz né, hehe) através de uma tabela
que representa como se devem as mudanças de um estado para outro. As
linhas correspondem aos estados, e as colunas correspondem às entradas.
A tabela de transição que representa o exemplo que estamos acompanhando
é dada por:

→ q0
* q1
q2

a
q2
q1
q2

b
q0
q1
q1

Tabela 1 - Tabela de transição do exemplo anterior

Nesse caso, o estado inicial é representado com uma seta, e os estados de
aceitação são marcados com um asterisco.
Função de Transição Estendida
Essa é outra maneira de representar os autômatos. Através da fórmula de
transição de estados é possível responder se uma palavra pode ou não ser
aceita por um autômato. Vamos ver como essa representação funciona
através de duas palavras para o autômato anterior.
1. baabaab
Através da função estendida, temos:
δ (q0, baabaab)
δ (q0, b) aabaab = q2
δ (q2, a) abaab = q2
δ (q2, a) baab = q2
δ (q2, b) aab = q1
δ (q2, a) ab = q1
δ (q2, a) b = q1

δ (q2, b) ε = q1 -> PALAVRA ACEITA
2. baa
δ (q0, baa)
δ (q0, b) aa = q0
δ (q0, a) a = q2

δ (q0, a) ε = q2 -> PALAVRA REJEITADA
Note que as expressões seguem a tabela de transição ou o diagrama do
autômato. O símbolo ε indica que não existem mais entradas para serem
lidas, portanto ao ver essa letra, o autômato irá ler o último valor e o estado
de saída será o estado final da palavra. Caso esse estado seja de aceitação a
palavra será aceita, do contrário será rejeitada.
Autômato Finito Não Determinístico
Bem, até agora trabalhamos com Autômatos Finitos Determinísticos, ou
seja, são autômatos que partem de um estado e vão para outro estado. Pois
bem, existem ainda outras formas de representação que são utilizadas para
facilitar a representação de fórmulas matemáticas: são os Autômatos Finitos
Não Determinísticos.
A diferença entre um determinístico – AFD – e um não determinístico –
AFN – são os estados. Em um AFD temos um estado determinado, onde
através da função de transição passamos do estado q0 para q1 por exemplo.
No caso do AFN podemos ter um conjunto de estados, ou seja, de q0 é
possível ir para q1 ou q2. Vamos ver essa representação de autômato em um
diagrama.

Figura 8 - Representação de um Autômato Finito Não Determinístico

O interessante nesse autômato é que podemos através de uma mesma
entrada estar em dois estados ao mesmo tempo. Por isso o nome não
determinístico. Não é possível garantir que um autômato terá apenas um
estado resultante, mas agora ele poderá ter um conjunto de estados
resultantes. Interessante, não? A ideia dos autômatos finitos não
determinísticos é simplificar a representação dos autômatos finitos.
Portanto, por analogia podemos presumir que para cada autômato finito não
determinístico teremos um autômato finito determinístico.
CLIQUE AQUI PARA SABER MAIS SOBRE A HISÓRIA DOS AFN
Nosso foco no curso será ver como podemos converter um AFN para um AFD
(vamos tentar usar as siglas para simplificar agora, ok?!). Assim, caso tenha
mais interesse sobre os AFN’s, utilize a internet para aprimorar seus
conhecimentos sobre esse assunto. Essa apostila é apenas um direcionador
para seus estudos. Você e somente você pode definir se você quer aprender
mais ou não, jovem pandawan !
O que define o AFN é uma quíntupla (ou 5-upla) definida por:
, onde:

Se compararmos com o AFD, a diferença da 5-upla é a função de transição.
Nesse caso ela indica que após passarmos por uma função de transição
poderemos ter como resultado um conjunto de estados ou partes de Q
(podemos ter mais de um estado).
Em um AFN teremos estados que estarão inacessíveis e que, portanto,
podem ser descartados para simplificar o nosso autômato. No pior dos casos,
ao converter um AFN para um AFD podemos ter

novos estados. Isso nem

sempre irá acontecer devido à remoção dos estados inacessíveis a partir do
estado inicial.
Converter AFN em AFD

Para realizar a conversão de um AFN para AFD iremos nos concentrar
basicamente na tabela de transição e no diagrama de representação do
autômato. Estendendo a fórmula de transição também é possível provar essa
conversão, mas esse não será nosso foco. Deixo aqui um site que apresenta a
transição de um AFN para AFD estendendo a fórmula de transição.
Pois bem, mãos a obra!
Sabemos que através de um diagrama de representação do autômato
podemos elaborar nossa tabela de transição. Então vamos utilizar o
autômato apresentado no tópico anterior.
A partir de agora iremos construir o autômato finito através da tabela de
transição. Para isso, iremos considerar as linhas em nossa tabela onde os
estados que possuem um estado de acesso. Como estado de acesso podemos
considerar como todos os conjuntos de onde existe o estado inicial. Isso
porque não conseguimos aceitar ou rejeitar uma palavra, desde que ela não
passe pelo estado inicial. Vou provar isso através de um exemplo por
indução! 
Para o autômato acima, queremos ver se a entrada 00101 será aceita.
No exemplo, temos que caso a entrada seja 0, o autômato pode continuar no
estado q0 ou ir para o estado q1 correto? Vamos fazer a prova aos poucos.
0
q0

q0
q1

Ok. Até aqui estamos em dois estados, ou q0 ou q1 serão aceitos. Isso será
válido pois o primeiro valor da entrada foi 0. Agora o autômato receberá
outro 0. Agora ele seguirá somente por q0 novamente. O estado q1 será
parado pois caso q1 receba zero ele não irá para nenhum lugar, ou seja,
ficará paralisado. Indicarei paralisado com o símbolo P.
0
q0

0
q0

q0

q1 (P)

q1

Já sabemos que q0 aceita como próximos estados q0 e q1. Portanto eles se
repetem. O próximo valor de entrada será 1. Agora devemos considerar o
seguinte: caso q0 receba o valor 1, ele continuará em q0 e caso q1 receba o
valor 1 o autômato irá para q2.
0
q0

0

1

q0

q0

q1 (P)

q0

q1
q2

Chegamos ao estado final, porém nossa palavra ainda não acabou.
Precisamos continuar para finalizar todos os valores da palavra. A próxima
entrada será 0. Então agora q2 será paralisado, pois não tem para onde ir e
no caso de q0 ele novamente terá duas opções. Ou continua no estado q0 ou
vai para o estado q1.

0
q0

0

1

q0

q0

q1 (P)

0
q0

q0

q1

q1
q2 (P)

Nossa última entrada será 1. Portanto, q0 continuará em q0 mas q1 irá para
q2. Como existe um conjunto e estados {q0, q1} ao final da palavra, ela será
aceita pois q2 é um estado de aceitação.
Consideramos que uma palavra seja aceita caso ela termine em qualquer
conjunto de estados que possua um estado final ou de aceitação.
0
q0

0

1

q0

q0

q1 (P)

0
q0

q1

1
q0

q0

q1
q2 (P)

q2

Portanto, podemos ver que para que uma palavra seja aceita ela deve
sempre passar pelo estado inicial – nesse caso, q0 – pois para transitar entre
os demais estados os valores que ainda devem ser lidos partem do início do
autômato. Assim, os estados válidos e utilizados para transformar um AFN
em AFD são somente aqueles conjuntos de estados que possuem o estado
inicial. Os demais estados são denominados inacessíveis. Isso porque não é
possível chegar até ele sem que passemos pelo estado inicial.
Agora é hora de fazer algumas alterações na tabela de transição para
conseguirmos fazer nosso AFN se transformar em AFD. Para facilitar a
leitura dos estamos podemos criar apelidos para as linhas de transição. Isso
não é obrigatório ok?! É só para a tabela ficar mais apresentável e fácil de
entender. Serão criadas mais duas colunas. Uma coluna para sabermos
quais estados estão acessíveis e que devemos utilizar para criar o AFD. A
coluna Acessível terá o valor “S” para sim e “N” para não. A outra coluna
será o apelido para cada coluna. Ao invés de representarmos por conjuntos
de estados representaremos por letras do alfabeto.
Apelido Acessível?
A
N
B
S
C
N
D
N
E
S
F
S

0
Ø

→ q0
q1
*q2
q0, q1
*q0, q2

1

Ø

Ø

q0, q1

q0

Ø

q2

Ø

Ø

q0, q1

q0, q2
q2

Ø

Tabela 2 - Construindo os subconjuntos do AFN para transformá-lo e AFD

Podemos ver através da tabela acima que os estado acessíveis serão três. B,
E, F. Isso porque eles possuem com característica comum o estado inicial, e
por isso são estados acessíveis. Vamos agora renomear os estados para ver
como a tabela fica.
Apelido Acessível?
A
N
B
S
C
N
D
N
E
S
F
S

A
-> B
C
D
E
F

0
A
E
A
A
E
E

Tabela 3 - Renomeando os estados do autômato

1
A
B
D
A
F
B
Vamos considerar agora apenas os estados acessíveis para fazermos nosso
AFD.
Apelido Acessível?
B
S
E
S
F
S

-> B
E
F

0
E
E
E

1
B
F
B

Tabela 4 - Estados de aceitação do autômato

Invertendo os apelidos para as funções temos.
Apelido Acessível?
B
S
E
S
F
S

→ q0
q0, q1
*q0, q2

0
q0, q1
q0, q1
Ø

1
q0
q0, q2
q2

Tabela 5 - Estados de aceitação do autômato

Agora podemos representar do AFD do AFN apresentado. Com ele podemos
confirmar que para o AFN realmente existe seu respectivo AFD.

Figura 9 - AFD convertido através do AFN

É possível aplicar qualquer palavra para testar o autômato. Faça um teste
com a palavra utilizada no exemplo anterior para provar a regra do AFN e
veja se ela será aceita ou rejeitada. Você verá que o resultado será o mesmo
do apresentado na explicação. Quando temos uma transição para um
conjunto de estados, qualquer conjunto que tenha o estado final será um
estado de aceitação. Como dito no início dos AFN, eles são utilizados para
simplificar a representação dos AFD.

Mais conteúdo relacionado

Mais procurados

Logica Algoritmo 02 Algoritmo
Logica Algoritmo 02 AlgoritmoLogica Algoritmo 02 Algoritmo
Logica Algoritmo 02 AlgoritmoRegis Magalhães
 
Algoritmos e lp parte 1-introdução
Algoritmos e lp parte 1-introduçãoAlgoritmos e lp parte 1-introdução
Algoritmos e lp parte 1-introduçãoMauro Pereira
 
Lógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicionalLógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicionalWesley R. Bezerra
 
Apostila logica algoritmos e estrutuara de dados
Apostila  logica algoritmos e estrutuara de dadosApostila  logica algoritmos e estrutuara de dados
Apostila logica algoritmos e estrutuara de dadosGelber Freitas
 
1º introdução a lógica de programação
1º   introdução a lógica de programação1º   introdução a lógica de programação
1º introdução a lógica de programaçãoLucas Mendes
 
Algoritmos 1 - Semana 2
Algoritmos 1 - Semana 2Algoritmos 1 - Semana 2
Algoritmos 1 - Semana 2Eder Samaniego
 
Lógica de Programação
Lógica de ProgramaçãoLógica de Programação
Lógica de ProgramaçãoAdao Chiavelli
 
Lógica de Programação e Algoritmos
Lógica de Programação e AlgoritmosLógica de Programação e Algoritmos
Lógica de Programação e AlgoritmosMario Jorge Pereira
 
Lógica de programação em ppt
Lógica de programação em pptLógica de programação em ppt
Lógica de programação em pptAndrei Bastos
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência JavaMario Jorge Pereira
 
Logica Algoritmo 07 Subalgoritmos
Logica Algoritmo 07 SubalgoritmosLogica Algoritmo 07 Subalgoritmos
Logica Algoritmo 07 SubalgoritmosRegis Magalhães
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOMicrosoft
 

Mais procurados (20)

Logica Algoritmo 02 Algoritmo
Logica Algoritmo 02 AlgoritmoLogica Algoritmo 02 Algoritmo
Logica Algoritmo 02 Algoritmo
 
Algoritmos e lp parte 1-introdução
Algoritmos e lp parte 1-introduçãoAlgoritmos e lp parte 1-introdução
Algoritmos e lp parte 1-introdução
 
Lógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicionalLógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicional
 
Apostila logica algoritmos e estrutuara de dados
Apostila  logica algoritmos e estrutuara de dadosApostila  logica algoritmos e estrutuara de dados
Apostila logica algoritmos e estrutuara de dados
 
Algoritmos: Variáveis e Constantes
Algoritmos: Variáveis e ConstantesAlgoritmos: Variáveis e Constantes
Algoritmos: Variáveis e Constantes
 
Lógica de Programação
Lógica de ProgramaçãoLógica de Programação
Lógica de Programação
 
1º introdução a lógica de programação
1º   introdução a lógica de programação1º   introdução a lógica de programação
1º introdução a lógica de programação
 
Algoritmo - tipos de dados
Algoritmo - tipos de dadosAlgoritmo - tipos de dados
Algoritmo - tipos de dados
 
Algoritmos 1 - Semana 2
Algoritmos 1 - Semana 2Algoritmos 1 - Semana 2
Algoritmos 1 - Semana 2
 
Lógica de Programação
Lógica de ProgramaçãoLógica de Programação
Lógica de Programação
 
Lógica de Programação e Algoritmos
Lógica de Programação e AlgoritmosLógica de Programação e Algoritmos
Lógica de Programação e Algoritmos
 
Algoritmo 04 - Estruturas de decisão
 Algoritmo 04 - Estruturas de decisão Algoritmo 04 - Estruturas de decisão
Algoritmo 04 - Estruturas de decisão
 
Lógica de programação em ppt
Lógica de programação em pptLógica de programação em ppt
Lógica de programação em ppt
 
Aula 04
Aula 04Aula 04
Aula 04
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência Java
 
Guia rapido java v2
Guia rapido java v2Guia rapido java v2
Guia rapido java v2
 
Logica Algoritmo 07 Subalgoritmos
Logica Algoritmo 07 SubalgoritmosLogica Algoritmo 07 Subalgoritmos
Logica Algoritmo 07 Subalgoritmos
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
 
Logica de Programacao
Logica de ProgramacaoLogica de Programacao
Logica de Programacao
 
Algoritmos - Pascal
Algoritmos - PascalAlgoritmos - Pascal
Algoritmos - Pascal
 

Semelhante a Paradigmas Programação Linguagens

Semelhante a Paradigmas Programação Linguagens (20)

01-Lógica de Programação .pptx
01-Lógica de Programação .pptx01-Lógica de Programação .pptx
01-Lógica de Programação .pptx
 
Forb.cap1
Forb.cap1Forb.cap1
Forb.cap1
 
Python bge
Python bgePython bge
Python bge
 
Lp
LpLp
Lp
 
Logica programar
Logica programarLogica programar
Logica programar
 
Progr
ProgrProgr
Progr
 
Aula 1 - Lógica de Programação.pptx
Aula 1 - Lógica de Programação.pptxAula 1 - Lógica de Programação.pptx
Aula 1 - Lógica de Programação.pptx
 
Exercicios
ExerciciosExercicios
Exercicios
 
Aprendendo C# do zero
Aprendendo C# do zeroAprendendo C# do zero
Aprendendo C# do zero
 
Curso de Delphi - Lógica de Programacao
Curso de Delphi - Lógica de ProgramacaoCurso de Delphi - Lógica de Programacao
Curso de Delphi - Lógica de Programacao
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintótica
 
Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmos
 
Introdução
IntroduçãoIntrodução
Introdução
 
Lógica de programação
Lógica de programaçãoLógica de programação
Lógica de programação
 
Linguagem de Programação PERL
Linguagem de Programação PERLLinguagem de Programação PERL
Linguagem de Programação PERL
 
Programar Em Pascal
Programar Em PascalProgramar Em Pascal
Programar Em Pascal
 
Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-php
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
ApostilaAlgoritmo
ApostilaAlgoritmoApostilaAlgoritmo
ApostilaAlgoritmo
 

Último

"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamentalAntônia marta Silvestre da Silva
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...azulassessoria9
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdfLeloIurk1
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?AnabelaGuerreiro7
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelGilber Rubim Rangel
 
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresAnaCarinaKucharski1
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdfAna Lemos
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfWagnerCamposCEA
 
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESCOMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESEduardaReis50
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...licinioBorges
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfHELENO FAVACHO
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfCamillaBrito19
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Ilda Bicacro
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfmaurocesarpaesalmeid
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....LuizHenriquedeAlmeid6
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfEmanuel Pio
 

Último (20)

"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim Rangel
 
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdf
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
 
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESCOMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdf
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdf
 

Paradigmas Programação Linguagens

  • 1. Apostila – Paradigmas de Programação José Corrêa Viana jcorrea@unipam.edu.br jcorreavian@hotmail.com twitter.com/rhuodox facebook.com/ jcorreaviana Patos de Minas, 2014.
  • 2. O que você encontrará aqui O objetivo dessa apostila é auxiliar no processo de aprendizado e fixação dos conteúdos vistos em sala de aula. Essa apostila abordará conceitos sobre:  Linguagens regulares;  Paradigma Imperativo;  Paradigma Lógico Funcional;  Paradigma Orientado a Objeto. Qualquer dúvida e/ou sugestões para adicionar valor a este material, basta entrar em contato nos meios de comunicação disponibilizados na primeira página dessa apostila.
  • 3. Primeiros Conceitos Acredito que a primeira pergunta que surge em nossa mente quando iniciamos um novo estudo é saber por que estamos fazendo isso correto? Então talvez a melhor candidata como primeira pergunta dessa disciplina seja: “O que é Paradigma de Programação?”. Espero ter acertado que essa seja sua pergunta ou que seja ao menos algo semelhante. Mas vamos começar por ela. Pois bem. Paradigma de Programação nada mais é do que a estrutura ou a maneira que um programa será executado. Através de um exemplo fica mais fácil, correto?! : O que diferencia as linguagens Java ou C# das linguagens COBOL ou Pascal partindo da visão essencial de cada uma? Java e C# São linguagens de programação ORIENTADAS A OBJETO, ou seja, o programador deve ter a capacidade de abstrair que uma linguagem com essa característica trabalha através da interação de objetos, correto?! As linguagens COBOL e Pascal são linguagens onde o programador deve entender que o programa será executado como uma pilha de funções executadas de maneira sequencial, ou seja, PROGRAMAÇÃO FUNCIONAL. Se fizermos uma analogia com Engenharia de Software, existem diversas metodologias que possuem suas particularidades correto? As metodologias ágeis – Scrum, XP, etc - se diferenciam das metodologias tradicionais – Processo Unificado, Cascata, Espiral – através de suas características e também devido a sua aplicabilidade em determinados problemas que devem ser resolvidos. Os Paradigmas de Programação possuem basicamente o mesmo conceito: diferentes linguagens de programação possuem diferentes paradigmas de programação. Java, C#, Pascal e COBOL são poucos exemplos de linguagens que possuem no mercado. Vou deixar como tarefa para você pesquisar mais alguns exemplos de linguagens de programação e quais seus paradigmas. Para
  • 4. iniciar suas pesquisas, lhe ajudarei com uma excelente dica! Clique aqui para ver qual é. . Vamos começar então vendo alguns conceitos de linguagens regulares e alguns conceitos importantes, como autômatos, expressão regular e gramática regular.
  • 5. Autômato Finito Então, o que é um autômato finito? Figura 1 – Exemplos de autômatos: Semáforo, porta eletrônica e elevador. Autômatos finitos são máquinas que possuem componentes e que são bem fáceis de ser lembrados: basicamente três 1. Fita: dispositivo que tem a informação que será processada; 2. Unidade de Controle: estado corrente da máquina. Essa possui uma unidade de controle que acessa um estado da fita e que se movimenta exclusivamente para a direita; 3. Programa ou função de transição: determina o novo estado da máquina através de leituras e de funções. Figura 2 - Exemplo de um autômato de estado finito com a fita, controle e estados
  • 6. Através da imagem podemos ver que o funcionamento de um autômato é bem simples. Basicamente ele possui um caminho a ser seguido (fita) que, de acordo com uma função ou leitura, ele muda seu estado e para saber qual o estado atual é utilizado um controle ou um indicador de qual o estado atual. No exemplo a cima a fita é lida pelo programa como nós lemos essa apostila, sempre da esquerda para a direita. Definindo um autômato finito, temos algumas propriedades que nos ajudam a entender melhor como isso funciona. Vamos ver as definições formais e depois veremos alguns exemplos que podem nos auxiliar a compreender melhor os autômatos finitos. Autômato Finito Determinístico Existem algumas propriedades que são utilizadas ao realizar a diagramação de um autômato (veremos alguns exemplos mais à frente). Figura 3 - Representação da mudança de estados de um autômato através da leitura de um símbolo Figura 4 - Representação de um estado inicial e um estado final O que define o autômato finito é uma quíntupla (ou 5-upla) definida por:
  • 7. , onde: Essa quíntupla pode parecer um pouco confusa no início do conteúdo, mas com exemplos ficará mais fácil de entender e com o passar do tempo você irá decorá-la intuitivamente. Prometo! . Vamos voltar às figuras apresentadas acima e vamos explicar como funciona a porta eletrônica. Essa porta é utilizada em shoppings, supermercados e em outros lugares. Para que ela abra automaticamente existem dois tapetes, um de frente para a porta do lado interno e outro tapete do lado externo. Isso porque pessoas devem entrar e pessoas querem sair. A porta irá abrir quando uma pessoa se aproximar e se fechará quando a pessoa se distanciar da porta. Figura 5 - Visão por cima de uma porta automática A porta pode assumir dois estados: aberto ou fechado. Ele irá mudar de um estado para o outro de acordo com o estímulo que receber e, nesse caso, existem quatro possibilidades: 1. Frente: pessoa está no tapete da frente (me deixe entrar!); 2. Retaguarda: pessoa está no tapete de dentro (me deixe sair!);
  • 8. 3. Ambos: existe uma pessoa no tapete da frente e outra no tapete de dentro; 4. Nenhum: não há ninguém sobre os tapetes. Vamos supor que a porta receberá a seguinte sequência de estímulos ou valores de entrada: frente; retaguarda; nenhum; frente, ambos. Sabemos que nesse caso a porta estará aberta ou fechada e, de acordo com a sequência de estímulos ela passará de um estado para outro ou ainda continuará no mesmo estado. Portanto, para a sequência de estímulos teremos as seguintes transações de estados: fechado (início) -> aberto; aberto -> aberto; aberto -> fechado; fechado -> aberto; aberto -> aberto. Se transpusermos todas essas frases acima em uma imagem ficam mais fáceis? Vamos representar em uma imagem, também chamado de diagrama de transições ou diagrama de estados. Figura 6 - Diagrama de transições da porta automática Ao realizar a leitura da imagem – para ajudar a esclarecer os conceitos – é possível notar os estados e quais as leituras ou transações são realizadas para passagem de uma situação para outra. Vamos ler a imagem:  Se ninguém quer entrar ou sair, a porta permanecerá fechada;
  • 9.  Se houver alguém na frente, na retaguarda ou em ambos e a porta estiver fechada, ela mudará para o estado aberta;  Se ainda existir pessoas na porta da frente, na retaguarda ou em ambos, a porta continuará aberta;  Se a porta estiver aberta, porém mais ninguém irá passar, ela mudará do estado aberta para fechada. Esse é um exemplo inicial. Daqui a pouco iremos utilizar programas que simulam o funcionamento de autômatos e poderemos ver de uma maneira mais interativa como eles funcionam. Para exercitar a transição entre os estados do autômato, teste e nesse momento, tente entender como é a feita a passagem de estados no autômato. CLIQUE AQUI E FAÇA ALGUNS TESTES! “Se estiver com alguma dúvida, clique no ícone “?” que o site irá compilar passo a passo a transição dos estados do autômato. Representação de um Autômato Finito Iremos ver nessa apostila basicamente três tipos de representações de autômatos finitos: 1. Definição formal ou linguagem formal; 2. Através do diagrama de transições; 3. Através da tabela de transições. Agora vamos ver um exemplo que apresenta as três maneiras dessa representação: Especifique formalmente um autômato finito determinístico (DFA) que aceite somente strings de a’s e b’s que têm a sequência ab em algum lugar da string. Portanto, podemos definir de maneira formal essa linguagem L como:
  • 10. Z e X que consistem somente em { | a’s e b’s Ou ainda podemos definir apresentado os parâmetros a e b à esquerda da barra vertical: { | Exemplos de strings nessa linguagem: ab; bbaba; baaaabb, aaaaaaaaab. Exemplos de strings que não estão nessa linguagem: a; bbbaaa; ba. Podemos deduzir que:  O alfabeto de entrada será ∑ = {a, b};  Possui um conjunto de estados, onde vamos dizer que q0 é o estado inicial;  O autômato deve armazenar algumas informações para que a string passada seja uma substring de entrada: 1. Já viu ab? Então vai aceitar todas as demais entradas e só estará em estado de aceitação; 2. Nunca viu ab, mas sua entrada mais recente foi a? Então se ele ver um b, terá visto ab e poderá aceitar o que vier em diante; 3. Nunca viu ab, mas sua entrada ou não existe ou começa com a? Então ele não poderá aceitar até ver o primeiro a seguido de b. Agora vamos atribuir para cada situação dessa um estado.  Estado 3: será representado pelo estado q0. Precisamos ver uma sequência ab. Porém, se no estado q0 vermos b, então devemos ficar no estado q0. o δ (q0, b) = q0;  Estado 2: estamos no estado q0 e vemos um a, mas nunca vimos um ab. Esse estado será o q2. Portanto se a entrada for a, então podemos passar para o estado 2. o δ (q0, a) = q2;
  • 11.  Estado 3: nesse estado será considerado que estamos no estado 2. Então, se virmos outra letra a estaremos no mesmo lugar correto? Ainda não vimos uma sequência ab ! Não vimos ab, mas a ainda continua sendo nosso último símbolo e ainda estamos esperando pela letra b. o δ (q2, a) = q2;. Se estamos no estado q2 e vemos a letra b, agora existe uma sequência ab. Chamaremos essa condição de q1, e ela será nossa condição de aceitação. o δ (q2, b) = q1; Como foi definido no problema, ao final dessa condição, se vermos uma sequência ab, qualquer entrada será aceita e continuará na situação de aceitação. o δ (q1, a) = δ (q1, b) = q1; Agora podemos definir nosso autômato aplicando a quíntupla vista anteriormente. Q = {q0, q1, q2}. Como foi definido, q0 será o estado inicial e o único estado de aceitação é q1, ou seja, F = {q1}. A definição completa do autômato A que aceita a linguagem L de strings que tem como subconjunto ab, é: { { { Já vimos uma definição formal do autômato. Essa representação é a mais extensa e pode ficar até um pouco cansativa de se visualizar um autômato. Vamos ver agora duas outras formas de representação. A representação por diagrama já foi vista anteriormente no exemplo da porta automática, lembra-se? Vamos ver algumas definições para esse tipo de representação:  Para cada estado Q existe um nó correspondente;
  • 12.  Cada para cada mudança de estado existirá um estado resultante. Essa mudança se deve com a entrada do estado atual e da função de transição. δ (q, a) = p. Ou seja, o estado q após passar pela função de transição a resultará em p;  Existe uma seta inicial em q0 identificada como início. Essa seta não se origina em nenhum estado (representados por nós);  Os estados ou nós de aceitação são representados por um círculo duplo e os estados que não estão nessa situação são círculos simples. Figura 7 - Diagrama de transições que aceita todas strings que contêm a substring ab A última representação que iremos ver é a tabela de transições. Essa representação e através (como o nome já diz né, hehe) através de uma tabela que representa como se devem as mudanças de um estado para outro. As linhas correspondem aos estados, e as colunas correspondem às entradas. A tabela de transição que representa o exemplo que estamos acompanhando é dada por: → q0 * q1 q2 a q2 q1 q2 b q0 q1 q1 Tabela 1 - Tabela de transição do exemplo anterior Nesse caso, o estado inicial é representado com uma seta, e os estados de aceitação são marcados com um asterisco.
  • 13. Função de Transição Estendida Essa é outra maneira de representar os autômatos. Através da fórmula de transição de estados é possível responder se uma palavra pode ou não ser aceita por um autômato. Vamos ver como essa representação funciona através de duas palavras para o autômato anterior. 1. baabaab Através da função estendida, temos: δ (q0, baabaab) δ (q0, b) aabaab = q2 δ (q2, a) abaab = q2 δ (q2, a) baab = q2 δ (q2, b) aab = q1 δ (q2, a) ab = q1 δ (q2, a) b = q1 δ (q2, b) ε = q1 -> PALAVRA ACEITA 2. baa δ (q0, baa) δ (q0, b) aa = q0 δ (q0, a) a = q2 δ (q0, a) ε = q2 -> PALAVRA REJEITADA Note que as expressões seguem a tabela de transição ou o diagrama do autômato. O símbolo ε indica que não existem mais entradas para serem lidas, portanto ao ver essa letra, o autômato irá ler o último valor e o estado de saída será o estado final da palavra. Caso esse estado seja de aceitação a palavra será aceita, do contrário será rejeitada.
  • 14. Autômato Finito Não Determinístico Bem, até agora trabalhamos com Autômatos Finitos Determinísticos, ou seja, são autômatos que partem de um estado e vão para outro estado. Pois bem, existem ainda outras formas de representação que são utilizadas para facilitar a representação de fórmulas matemáticas: são os Autômatos Finitos Não Determinísticos. A diferença entre um determinístico – AFD – e um não determinístico – AFN – são os estados. Em um AFD temos um estado determinado, onde através da função de transição passamos do estado q0 para q1 por exemplo. No caso do AFN podemos ter um conjunto de estados, ou seja, de q0 é possível ir para q1 ou q2. Vamos ver essa representação de autômato em um diagrama. Figura 8 - Representação de um Autômato Finito Não Determinístico O interessante nesse autômato é que podemos através de uma mesma entrada estar em dois estados ao mesmo tempo. Por isso o nome não determinístico. Não é possível garantir que um autômato terá apenas um estado resultante, mas agora ele poderá ter um conjunto de estados resultantes. Interessante, não? A ideia dos autômatos finitos não determinísticos é simplificar a representação dos autômatos finitos. Portanto, por analogia podemos presumir que para cada autômato finito não determinístico teremos um autômato finito determinístico. CLIQUE AQUI PARA SABER MAIS SOBRE A HISÓRIA DOS AFN Nosso foco no curso será ver como podemos converter um AFN para um AFD (vamos tentar usar as siglas para simplificar agora, ok?!). Assim, caso tenha
  • 15. mais interesse sobre os AFN’s, utilize a internet para aprimorar seus conhecimentos sobre esse assunto. Essa apostila é apenas um direcionador para seus estudos. Você e somente você pode definir se você quer aprender mais ou não, jovem pandawan ! O que define o AFN é uma quíntupla (ou 5-upla) definida por: , onde: Se compararmos com o AFD, a diferença da 5-upla é a função de transição. Nesse caso ela indica que após passarmos por uma função de transição poderemos ter como resultado um conjunto de estados ou partes de Q (podemos ter mais de um estado). Em um AFN teremos estados que estarão inacessíveis e que, portanto, podem ser descartados para simplificar o nosso autômato. No pior dos casos, ao converter um AFN para um AFD podemos ter novos estados. Isso nem sempre irá acontecer devido à remoção dos estados inacessíveis a partir do estado inicial. Converter AFN em AFD Para realizar a conversão de um AFN para AFD iremos nos concentrar basicamente na tabela de transição e no diagrama de representação do autômato. Estendendo a fórmula de transição também é possível provar essa conversão, mas esse não será nosso foco. Deixo aqui um site que apresenta a transição de um AFN para AFD estendendo a fórmula de transição. Pois bem, mãos a obra!
  • 16. Sabemos que através de um diagrama de representação do autômato podemos elaborar nossa tabela de transição. Então vamos utilizar o autômato apresentado no tópico anterior. A partir de agora iremos construir o autômato finito através da tabela de transição. Para isso, iremos considerar as linhas em nossa tabela onde os estados que possuem um estado de acesso. Como estado de acesso podemos considerar como todos os conjuntos de onde existe o estado inicial. Isso porque não conseguimos aceitar ou rejeitar uma palavra, desde que ela não passe pelo estado inicial. Vou provar isso através de um exemplo por indução!  Para o autômato acima, queremos ver se a entrada 00101 será aceita. No exemplo, temos que caso a entrada seja 0, o autômato pode continuar no estado q0 ou ir para o estado q1 correto? Vamos fazer a prova aos poucos. 0 q0 q0 q1 Ok. Até aqui estamos em dois estados, ou q0 ou q1 serão aceitos. Isso será válido pois o primeiro valor da entrada foi 0. Agora o autômato receberá outro 0. Agora ele seguirá somente por q0 novamente. O estado q1 será parado pois caso q1 receba zero ele não irá para nenhum lugar, ou seja, ficará paralisado. Indicarei paralisado com o símbolo P. 0 q0 0 q0 q0 q1 (P) q1 Já sabemos que q0 aceita como próximos estados q0 e q1. Portanto eles se repetem. O próximo valor de entrada será 1. Agora devemos considerar o seguinte: caso q0 receba o valor 1, ele continuará em q0 e caso q1 receba o valor 1 o autômato irá para q2.
  • 17. 0 q0 0 1 q0 q0 q1 (P) q0 q1 q2 Chegamos ao estado final, porém nossa palavra ainda não acabou. Precisamos continuar para finalizar todos os valores da palavra. A próxima entrada será 0. Então agora q2 será paralisado, pois não tem para onde ir e no caso de q0 ele novamente terá duas opções. Ou continua no estado q0 ou vai para o estado q1. 0 q0 0 1 q0 q0 q1 (P) 0 q0 q0 q1 q1 q2 (P) Nossa última entrada será 1. Portanto, q0 continuará em q0 mas q1 irá para q2. Como existe um conjunto e estados {q0, q1} ao final da palavra, ela será aceita pois q2 é um estado de aceitação. Consideramos que uma palavra seja aceita caso ela termine em qualquer conjunto de estados que possua um estado final ou de aceitação. 0 q0 0 1 q0 q0 q1 (P) 0 q0 q1 1 q0 q0 q1 q2 (P) q2 Portanto, podemos ver que para que uma palavra seja aceita ela deve sempre passar pelo estado inicial – nesse caso, q0 – pois para transitar entre os demais estados os valores que ainda devem ser lidos partem do início do
  • 18. autômato. Assim, os estados válidos e utilizados para transformar um AFN em AFD são somente aqueles conjuntos de estados que possuem o estado inicial. Os demais estados são denominados inacessíveis. Isso porque não é possível chegar até ele sem que passemos pelo estado inicial. Agora é hora de fazer algumas alterações na tabela de transição para conseguirmos fazer nosso AFN se transformar em AFD. Para facilitar a leitura dos estamos podemos criar apelidos para as linhas de transição. Isso não é obrigatório ok?! É só para a tabela ficar mais apresentável e fácil de entender. Serão criadas mais duas colunas. Uma coluna para sabermos quais estados estão acessíveis e que devemos utilizar para criar o AFD. A coluna Acessível terá o valor “S” para sim e “N” para não. A outra coluna será o apelido para cada coluna. Ao invés de representarmos por conjuntos de estados representaremos por letras do alfabeto. Apelido Acessível? A N B S C N D N E S F S 0 Ø → q0 q1 *q2 q0, q1 *q0, q2 1 Ø Ø q0, q1 q0 Ø q2 Ø Ø q0, q1 q0, q2 q2 Ø Tabela 2 - Construindo os subconjuntos do AFN para transformá-lo e AFD Podemos ver através da tabela acima que os estado acessíveis serão três. B, E, F. Isso porque eles possuem com característica comum o estado inicial, e por isso são estados acessíveis. Vamos agora renomear os estados para ver como a tabela fica. Apelido Acessível? A N B S C N D N E S F S A -> B C D E F 0 A E A A E E Tabela 3 - Renomeando os estados do autômato 1 A B D A F B
  • 19. Vamos considerar agora apenas os estados acessíveis para fazermos nosso AFD. Apelido Acessível? B S E S F S -> B E F 0 E E E 1 B F B Tabela 4 - Estados de aceitação do autômato Invertendo os apelidos para as funções temos. Apelido Acessível? B S E S F S → q0 q0, q1 *q0, q2 0 q0, q1 q0, q1 Ø 1 q0 q0, q2 q2 Tabela 5 - Estados de aceitação do autômato Agora podemos representar do AFD do AFN apresentado. Com ele podemos confirmar que para o AFN realmente existe seu respectivo AFD. Figura 9 - AFD convertido através do AFN É possível aplicar qualquer palavra para testar o autômato. Faça um teste com a palavra utilizada no exemplo anterior para provar a regra do AFN e veja se ela será aceita ou rejeitada. Você verá que o resultado será o mesmo do apresentado na explicação. Quando temos uma transição para um
  • 20. conjunto de estados, qualquer conjunto que tenha o estado final será um estado de aceitação. Como dito no início dos AFN, eles são utilizados para simplificar a representação dos AFD.