Paradigma de Linguagem de Programaçao
Paradigma de Linguagem de Programaçao
Paradigma de Linguagem de Programaçao
LINGUAGEM DE
PROGRAMAÇÃO
GRADUAÇÃO
Unicesumar
Reitor
Wilson de Matos Silva
Vice-Reitor
Wilson de Matos Silva Filho
Pró-Reitor de Administração
Wilson de Matos Silva Filho
Pró-Reitor de EAD
Willian Victor Kendrick de Matos Silva
Presidente da Mantenedora
Cláudio Ferdinandi
PARADIGMAS DE LINGUAGEM DE
PROGRAMAÇÃO
SEJA BEM-VINDO(A)!
Caro(a) acadêmico(a), este livro tem como finalidade principal mostrar como as lingua-
gens de programação utilizadas diferem sob diversos aspectos e em que isso pode in-
fluenciar dentro do tipo de função ao qual se aplica.
Podemos ter linguagens muito específicas para determinadas tarefas diretamente liga-
das a Tecnologia da Informação (TI) ou não, sendo que estas podem ser indicadas para o
desenvolvimento de software rodando em determinado tipo de hardware.
Sobre hardware, temos a ideia de que representa tudo relacionado à parte física, onde o
software, que seria a parte lógica, é executado. Ou seja, softwares englobam os progra-
mas de forma geral enquanto hardwares englobam os equipamentos.
Assim, temos que toda linguagem de programação é usada para criar e gerir processos
executados em máquinas para que estas sejam capazes de executar suas tarefas.
O ponto em que os estudos levarão indicará, dentre as diferentes opções de linguagens
existentes, aquelas que seriam mais adequadas para determinadas tarefas.
Linguagens mais recentes têm estrutura diferente em sua programação, agregando
conceitos inovadores, capazes de reduzir codificação ou permitir a criação de progra-
mas que contemplem um estado tecnológico mais atual.
A própria programação chamada de Orientada a Objeto é muito utilizada e domina o
mercado de novos produtos de software, mas existem tendências que podem mudar
toda a forma de se programar com o tempo.
Diferenças de plataformas para as quais se programa, contemplando as particularidades
de cada sistema operacional, também podem ser características que influenciam a esco-
lha entre uma linguagem e outra.
Durante as unidades do livro, aspectos relevantes serão detalhados para fornecer fer-
ramentas para que programadores experientes ou pessoas que tenham interesse em
escolher uma linguagem para aprender possam optar com mais segurança dentre alter-
nativas disponíveis por aquela que mais se adeque a suas necessidades.
Portanto, não basta conhecer as funções e a sintaxe dos comandos de uma linguagem,
mas poder escolher aprender uma linguagem de programação pelas necessidades reais
envolvidas.
09
SUMÁRIO
UNIDADE I
15 Introdução
19 Métodos de Implementação
33 Orientação a Objetos
44 Considerações Finais
48 Referências
49 Gabarito
UNIDADE II
53 Introdução
54 Sintaxe e Semântica
65 Operadores e Expressões
67 Estruturas de Controle
10
SUMÁRIO
69 Considerações Finais
74 Referências
75 Gabarito
UNIDADE III
SUB-ROTINAS E FUNÇÕES
79 Introdução
80 Sub-Rotinas
81 Implementando Sub-Rotinas
83 Funções
84 Passagem de Parâmetros
86 Bibliotecas
88 Considerações Finais
92 Referências
93 Gabarito
UNIDADE IV
97 Introdução
98 Abstração de Dados
99 Encapsulamento
11
SUMÁRIO
112 Referências
113 Gabarito
UNIDADE V
117 Introdução
118 Concorrência
130 Referências
131 Gabarito
133 CONCLUSÃO
Professor Esp. Ronie Cesar Tokumoto
I
EVOLUÇÃO DAS LINGUAGENS
UNIDADE
DE PROGRAMAÇÃO, SINTAXE,
SEMÂNTICA E ANÁLISE LÉXICA
Objetivos de Aprendizagem
■■ Compreender algumas diferentes linguagens e suas aplicações.
■■ Conhecer formas de implementação de programas.
■■ Compreender sintaxe, semântica e análise sintática.
Plano de Estudo
A seguir, apresentam-se os tópicos que você estudará nesta unidade:
■■ Avaliação de linguagens e categorias de linguagens
■■ Métodos de implementação
■■ Evolução das linguagens de programação
■■ O início
■■ Orientação a objetos
■■ Linguagens para internet
15
INTRODUÇÃO
Introdução
16 UNIDADE I
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
simples, mas que manipulam valores extremamente precisos e com grande quan-
tidade de casas decimais, utilizando a totalidade dos recursos de hardware, de
máquinas simples a supercomputadores.
Há também aplicações comerciais que exigem menos capacidade computa-
cional, mas que demandam estruturas de dados mais complexas, com necessidade
muito maior de armazenamento para estes dados, normalmente.
Projetos que envolvam o desenvolvimento de sistemas operacionais tam-
bém necessitam de linguagens diferenciadas, capazes de manipular o hardware
a fim de que possam, com isso, garantir o controle necessário do sistema opera-
cional criado ao hardware onde quer que seja utilizado.
A inteligência artificial necessita de menor processamento matemático, mas
maior capacidade de análise simbólica e flexibilidade no uso de dados, pois é
uma área que trabalha com situações menos exatas e lida com probabilidades.
Finalmente, temos as aplicações para web, mais recentes e contemplando parte
dos conceitos das aplicações comerciais no uso de dados, mas podendo também
utilizar conceitos das demais áreas, constituindo o que há de mais recente entre as
alternativas citadas até o momento. Algumas características também diferenciam
linguagens de acordo com a forma com que seus programas são escritos e seu
código compreendido. A facilidade de leitura e compreensão de um programa é
um fator muito importante na popularização de uma linguagem de programação,
pois afeta muito o tempo necessário para que se possa iniciar o desenvolvimento
de programas e a facilidade com que estes são compreendidos por quem precise
esforço lógico maior para compreender o que foi feito pelo programador que
criou o código.
Problemas diversos envolvem linguagens complexas, desde sintaxes que per-
mitam muitas variações e operadores que possam sofrer sobrecargas com valores
não esperados, gerando problemas em tempo de execução.
Podemos então observar que linguagens mais limitadas e que tenham recur-
sos para reduzir a quantidade de erros em tempo de execução que possam ocorrer
são mais simples de se entender e aprender.
Tendo em mente essas ideias, temos que uma linguagem simples permite
maior facilidade no aprendizado e compreensão de seus códigos implementa-
dos. É muito provável que se tenha, com isso, maiores limitações em relação
à quantidade de soluções que possam ser implementadas em linguagens que
sejam mais simples e que aceitem menos variações de sintaxe e combinações
entre seus comandos.
Um conceito chamado ortogonalidade traz esta ideia, pois representa que
uma linguagem de programação com fraca ortogonalidade tem comandos que
aceitam maior variedade de usos e interpretações, mas uma linguagem com
forte ortogonalidade é mais restrita e com menor variação em sua programação.
Uma fraca ortogonalidade faz com que a programação, numa linguagem
assim, permita que exceções indevidas ocorram mais facilmente e limitem as
possibilidades de desenvolvimento de soluções e diferentes combinações entre
comandos, tipos de dados ou estruturas.
Tipos de dados influenciam essa ideia, pois quando temos em uma lingua-
gem a definição precisa para o uso de cada tipo de dado, as exceções também
diminuem, mas no caso da linguagem C que, por exemplo, não possui um tipo
para Verdadeiro e Falso definido, é preciso improvisar, usando um tipo numérico.
A sintaxe afeta diretamente a leitura e compreensão de programas devido ao
uso de símbolos para finalizar blocos de comandos, ao invés de palavras reser-
vadas próprias que indiquem a qual comando se referem como SE e FIMSE.
A facilidade de codificação de uma linguagem é afetada por aspectos como
sua facilidade na leitura e compreensão dos códigos escritos, quantidade de
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
comandos e tipos de dados possíveis, afetando sua ortogonalidade.
A implementação da abstração de dados em uma linguagem permite que
recursos como trechos de código sejam representados por funções, chamadas
por vezes em diversos trechos do programa, evitando a replicação sem necessi-
dade de código repetitivo.
Checagem de tipos de dados em tempo de execução também são muito
inconvenientes e linguagens que o fazem durante a compilação tendem a ser
muito menos custosas para manutenção e leitura do código.
Tratamentos de erros e exceções durante a execução também são recursos
muito bem-vindos, sendo algo que diferencia as linguagens C e C++, pois C pre-
cisa do tratamento manual de erros sem recursos automatizados disponíveis.
A referência a variáveis por meio de ponteiros também é perigosa pelo fato de
ser possível a atribuição de mais de um ponteiro a uma variável ao mesmo tempo,
podendo provocar confusão em relação a valores que uma variável possa conter.
Existe um custo quando se usa uma linguagem de programação que envolve,
além das características citadas anteriormente, as características de cada progra-
mador e as técnicas de codificação que cada um adota.
Isso inclui uma série de elementos envolvidos como treinamento de novos
programadores em função da facilidade do aprendizado da linguagem e leitura
de seus códigos, seu tempo de compilação e execução.
O hardware (parte física) onde é executado o programa e os demais softwa-
res (programas) que funcionam em paralelo ao programa desenvolvido como
sistemas operacionais e softwares de proteção interfere diretamente na veloci-
dade de execução e compatibilidade do software com o equipamento.
MÉTODOS DE IMPLEMENTAÇÃO
Métodos de Implementação
20 UNIDADE I
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
mento, ou maior simplicidade nas tarefas executadas pelo código.
Uma forma híbrida de implementação consiste em compilar uma lingua-
gem de alto nível em outra intermediária, mas de interpretação bem mais rápida
para garantir melhores resultados em tempo de execução.
Algumas versões de Java são híbridas, pois convertem o código Java em
uma forma intermediária compatível com qualquer plataforma chamada byte
code que roda na Java Virtual Machine específica de cada plataforma, mas há
versões que convertem byte code em linguagem de máquina para maior veloci-
dade de execução.
Just-in-Time (JIT) também funciona de forma híbrida, sendo que o sistema
traduz a linguagem inicial em Java, por exemplo, em linguagem intermediária
para ser interpretada em tempo de execução, mas o código interpretado é man-
tido para as execuções seguintes.
O pré-processador é um software que faz a primeira preparação antes da
compilação, para preparar tipos definidos pelo programador e carregar o código
de bibliotecas para dentro do código original.
Fortran I FLOW-MATIC
Fortran II ALGOL 58
USP
ALGOL 60 APL COBOL
Fortran IV CPL
SIMULA I SNOBOL
BASIC PL/I
ALGOL W
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
SIMULA 67
ALGOL 68
BCPL
B
Pascal C
Prolog
Scheme
MODULA 2
Fortran 77 awk ML
Smalltalk 80
ICON
Ada 83 Miranda
C++ COMMON LISP
Perl
MODULA Oberon QuickBasic Haskell
Ansi C (C89)
Fortran 90 Eiffel Visual Basic
Python
Javascript
C99
C# Python 2.0
Visual Basic.NET
Fortran 2003
Ruby 1.8 Java 5.0
Ada 2005
Java 6.0 C# 2.0 Python 3.0
C# 3.0
Fortran 2008 Ruby 1.9
C# 4.0
Java 7.0
O INÍCIO
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
recursos que possuíam.
Ainda no final da década de 1940, o UNIVAC I (primeiro computador ven-
dido nos Estados Unidos com fins comerciais) utilizava uma linguagem chamada
Short Code, que trabalhava dentro das especificações da arquitetura diferenciada
do hardware do UNIVAC I.
Anos depois, a IBM conseguiu criar uma das mais importantes linguagens da
história, chamada Fortran (The IBM Mathematical Formula Translating System),
na década de 1950, para ser utilizada com o IBM 704 como, provavelmente, a
primeira linguagem compilada de alto nível.
A linguagem era baseada nas instruções do IBM 704 e continha certas regras
em sua sintaxe que padronizavam regras como a que variáveis iniciadas com as
letras I, J, K, L, M e N seriam do tipo inteiro, e as demais para valores de ponto
flutuante.
Mudanças foram ocorrendo com o passar dos anos e a linguagem Fortran
sofreu modificações, como suporte a orientação a objetos, até a versão 2008
(ISO/IEC 1539-1, 2010).
A linguagem LISP também surgiu no final dos anos 1950 como exemplo
de linguagem de programação funcional, baseada em suas predecessoras IPL-I,
IPL-II e FLPL que eram mais limitadas.
A linguagem LISP trabalha apenas com átomos e listas representando símbo-
los literais simples ou agrupados (delimitados entre parênteses) respectivamente,
sendo ideal para uso na área de inteligência artificial (IA) e de codificação sim-
ples devido a pouca variação de comandos em seu código.
Figura 3 – Exemplo de código LISP
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Fonte: Sebesta (2012 - p. 50-51).
ALGOL (Algorithmic Language) foi uma linguagem com fins científicos que ser-
viu de base para muitas outras e teve base na linguagem Fortran, modificando
diversos conceitos para torná-la universal e sem ligação com algum hardware
específico.
Sua versão 58 ficou mundialmente conhecida e, com o tempo, sugestões de
mudanças foram debatidas para que sua versão 60 fosse implementada, incluindo
conceitos como passagem de parâmetros para sub-rotinas e recursividade.
A linguagem COBOL é uma das mais usadas na história e pode ter influen-
ciado algumas outras linguagens que vieram depois dela, pois era fortemente
voltada ao desenvolvimento de aplicações comerciais.
Implementada no final dos anos de 1950, assim como a linguagem FLOW-
MATIC para UNIVACs, COMTRAN, implementada pela IBM, e a linguagem
AIMACO usada pela Força Aérea Norte Americana.
A linguagem COBOL teve modificações padronizadas pelo padrão ANSI
até o início dos anos 2000 e continua em uso em softwares específicos e main-
frames. O aumento da capacidade de hardware contribuiu para que a linguagem
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
sobrevivesse, pois, com baixa performance, seu custo e benefício se tornaram
menos atrativos.
Figura 5 - Exemplo de código COBOL
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Fonte: Sebesta (2012 - p. 61-63).
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Na década de 1970, quando surgiu a linguagem Pascal, que teve sua base ins-
pirada em linguagens como o ALGOL 60, sua popularidade foi tremenda devido
ao seu uso no meio acadêmico para o aprendizado de programação.
Uma linguagem ideal para a época, por ter códigos de fácil leitura e ser
capaz de implementar códigos para diversos tipos de aplicações diferentes. Foi
amplamente usada até a década de 1990, quando começou a perder espaço para
linguagens como C++.
No início dos anos 2000, a linguagem Delphi, híbrida de imperativa com
orientação a objetos, utilizou a linguagem Pascal como base, incluindo compo-
nentes para desenvolvimento em plataforma visual.
Figura 7 - Exemplo de código Pascal
No início dos anos de 1970, a linguagem C foi implementada por Dennis Ritchie
baseando-se nos conceitos de linguagens como B, BCPL e CPL, que foram desen-
volvidas anteriormente, partindo do início dos anos de 1960.
Essa linguagem é utilizada em larga escala, sendo uma das três linguagens
mais utilizadas no mundo por servir de base para uma quantidade enorme de
softwares que interajam diretamente com hardware e sirvam de base para outros
softwares como sistemas operacionais ou sistemas embarcados.
Tem uma leitura um pouco mais difícil por permitir maior variação nos coman-
dos e ser menos ortogonal que muitas outras linguagens, mas como serviu de
base para a elaboração de quase todas as linguagens que vieram após ela, direta
ou indiretamente, segue sendo uma referência no desenvolvimento de softwares e
aprendizado de programação.
#include <stdio.h>
int main () {
float notas [3][2];
int i, j;
float media[3];
for (i=0; i<3; i++) {
for (j=0; j<2; j++) {
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
printf (“Aluno %d - nota %d: “, i+1, j+1);
scanf (“%f ”, ¬as [i][j]);
}
}
for (i=0; i<3; i++) {
printf (“\n\nNota do aluno %d”, i+1);
for (j=0; j<2; j++) {
printf (“\n%f . nota: “, notas [i][j]);
media[i] = media[i] + notas [i][j];
}
printf (“\nMedia: %f ”, media[i]/2);
}
}
Fonte: O autor.
mas seu uso pode ter declinado quando o Departamento de Defesa dos Estados
Unidos deixou de solicitar programas na linguagem Ada.
ORIENTAÇÃO A OBJETOS
Orientação a Objetos
34 UNIDADE I
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Orientação a Objetos
36 UNIDADE I
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Javascript, uma linguagem que surgiu no início dos anos 2000, baseou-se na lin-
guagem LiveScript de 1995 e teve sucessivas evoluções que adicionam recursos
a esta poderosa linguagem a cada nova implementação.
A linguagem Javascript pode ter seu interpretador adequado para ser embu-
tido em aplicações e navegadores web, tendo seu código incluído dentro do
código HTML, neste caso.
Sua forma de codificação similar a Java, mas com conceitos diferentes, per-
mite tipos definidos em tempo de execução e estruturas de dados dinâmicas,
além de orientação a objetos sem recursos como herança.
Figura 12 - Exemplo de código Javascript
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
se baseia em três tipos de dados (listas, tuplas e dicionários),
É uma linguagem orientada a objetos como Perl e contém tratamento de
exceções, controle de objetos descartados, computação gráfica e acesso a dados
pelo navegador.
Ruby, uma linguagem implementada nos anos 1990, continua em uso e seu
código é todo voltado para orientação a objetos, assim como Smalltalk. Classes
e objetos podem ter métodos adicionados dinamicamente e isso faz com que, a
cada execução, classes e objetos possam ser diferentes.
A linguagem Lua, desenvolvida no Brasil durante a década de 1990 por
Roberto Ierusalimschy, Waldemar Celes e Luis Henrique de Figueiredo na
Pontifícia Universidade do Rio de Janeiro, suporta programação procedural e
funcional.
É uma linguagem não orientada a objetos, mas segue os conceitos desta cate-
goria de linguagens de programação, sendo uma linguagem simples com poucas
palavras reservadas e costumando servir de complemento para outras linguagens.
A linguagem C#, desenvolvida na década de 2000 pela Microsoft, mescla
conceitos de várias linguagens como C++, Java e Delphi, trabalhando com pro-
gramação visual e desenvolvimento .NET no pacote de desenvolvimento criado
pela própria Microsoft chamado Visual Studio.
C# é uma linguagem poderosa e segue em evolução para, assim como Java,
ser uma referência na programação .NET, tendo as qualidades essenciais de C++
e podendo adicionar as evoluções advindas da programação web.
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
livro, mas também teve novas implementações que permitiram o surgimen-
to de novas versões que também seguem fazendo sucesso no mercado do
desenvolvimento de aplicações.
A mais importante foi a linguagem C++, que permitiu um avanço enorme
na programação e afastou um pouco o programador do baixo nível de pro-
gramação.
Outra implementação com base na linguagem C foi a linguagem Java e sua
variante Javascript, com seu foco voltado para o desenvolvimento web.
C# e Objective-C foram desenvolvidas para criação de aplicações web, sendo
que C# permite programação para várias plataformas e a outra é mais espe-
cífica para a Apple.
Fonte: VEJA quais são as 20 linguagens de programação mais populares. Olhar Di-
gital, 2015. Disponível em: <http://olhardigital.uol.com.br/noticia/veja-quais-sao-as-
-20-linguagens-de-programacao-mais-populares/46271>. Acesso em: 29 mar. 2016.
como Javascript e PHP, que contribuem com a qualidade dos resultados obtidos
e agregam muitas funcionalidades a estas linguagens de marcação.
Uma linguagem desenvolvida para auxiliar a produção de código em lingua-
gens de marcação foi a linguagem CSS, que sofre evoluções para agregar novas
funcionalidades. É uma linguagem simples, agregada ao HTML para padroni-
zação de formato dos elementos das páginas como texto e imagem.
Figura 14: Exemplo de código HTML
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Fonte: O Autor.
CONSIDERAÇÕES FINAIS
Considerações Finais
44 UNIDADE I
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
princípios são utilizados e quais técnicas mais específicas são implementadas
representam as diferenças entre as linguagens.
Independente de quais sejam os paradigmas de cada linguagem, cabe ao pro-
gramador identificar aqueles relacionados à sua forma de produzir código e de
que forma as especificidades técnicas de cada linguagem afetam seu trabalho.
Se a aplicação a ser desenvolvida envolver programação orientada a objetos
ou programação estrutural, por exemplo, isso pode ser um critério para a deci-
são em relação à linguagem a ser utilizada na implementação.
Material Complementar
REFERÊNCIAS
REFERÊNCIA LIVROS
ASCENCIO, A. F. G. Fundamentos da programação de computadores: algoritmos
PASCAL, C/C++ (padrão ANSI) e JAVA. 3. São paulo: Ed. Pearson Education do Brasil,
2012.
MACLENNAN, B. J. Principles of Programming Languages: Design, Evaluation and
Implementation (em inglês). 3ª ed. Oxford: Oxford University Press, 1999.
SEBESTA, R. W. Concepts of programming languages.10ª ed. New Jersey: Pd. Pear-
son EducationInc., 2012.
REFERÊNCIA LINKS
VEJA quais são as 20 linguagens de programação mais populares. Olhar Digital,
2015. Disponível em: <http://olhardigital.uol.com.br/noticia/veja-quais-sao-as-
-20-linguagens-de-programacao-mais-populares/46271>. Acesso em: 29 mar. 2016.
49
GABARITO
II
NOMES, TIPOS DE DADOS,
UNIDADE
OPERADORES, EXPRESSÕES
E ESTRUTURAS
Objetivos de Aprendizagem
■■ Conhecer regras para definição de nomes utilizados em linguagens.
■■ Conhecer os tipos de dados aceitos.
■■ Saber os tipos de operadores aceitos.
■■ Compreender a estrutura de expressões lógicas e matemáticas.
■■ Ser capaz de elaborar estruturas compostas de dados.
Plano de Estudo
A seguir, apresentam-se os tópicos que você estudará nesta unidade:
■■ Sintaxe e semântica
■■ Análise sintática e léxica
■■ Nomes e tipos de dados
■■ Operadores e expressões
■■ Estruturas de controle
53
INTRODUÇÃO
Introdução
54 UNIDADE II
SINTAXE E SEMÂNTICA
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
ser avaliada por possíveis usuários e tenha, por meio dos retornos (feedback),
trazidos por estes, a possibilidade de ser ajustada até que possa ser oficialmente
lançada no mercado e utilizada profissionalmente no desenvolvimento de soluções.
Guias de referência, livros e cursos precisam ser ofertados para capacitar
todos os interessados na ferramenta para que sejam capacitados a explorar as
potencialidades da linguagem.
Neste contexto, o termo sintaxe se refere a como são construídos os coman-
dos de uma linguagem de programação, indicando, para cada palavra reservada,
parâmetros aceitos e a forma correta de usá-los.
Complementarmente, a semântica avalia a correta colocação dos comandos
que podem conter ou não blocos com outros comandos associados a estes blo-
cos, e sua colocação dentro de subprogramas ou do programa como um todo.
Em geral, uma linguagem é formada por caracteres de um alfabeto agrupados
em cadeias que formam sentenças. O termo comando será utilizado para deno-
minar estas sentenças aceitas por uma linguagem de programação, mesmo que,
em diversas linguagens, se utilize outras nomenclaturas, como TAG ou seletor.
Uma análise de sintaxe parte do princípio que determinada linguagem con-
tenha palavras reservadas formadas por símbolos de um alfabeto definido. O
processo lê uma cadeia de símbolos contidos em uma linha até que se encontre
um símbolo marcador de final de comando.
Todas as sequências menores de símbolos são analisadas separadamente para
serem validadas em relação às regras de construção de comandos na linguagem
em termos de palavras reservadas e parâmetros.
Fonte: O Autor.
Sintaxe e Semântica
56 UNIDADE II
<atribuição>
<atribuição> = <expressão>
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Fonte: O Autor.
Fonte: O Autor.
<laço>
Sintaxe e Semântica
58 UNIDADE II
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
des válidas que ampliam o uso de cada símbolo na construção da metalinguagem.
Esses atributos podem ser sintetizados para passar informações sobre o
símbolo para níveis superiores da árvore de análise semântica ou herdados que
passam informações para níveis inferiores da árvore de análise semântica.
Além destes dois tipos de atributos, existe um terceiro que é gerado quando
se declaram variáveis e estruturas de dados, por exemplo, que criam novos símbo-
los que passam a ser aceitos dentro da análise semântica como válidos, contendo
a forma de uso já previamente determinada na metalinguagem.
Uma variável em diversas linguagens de programação é declarada com um
nome com regras de uso de caracteres restrita, um tipo válido dentre os acei-
tos e, em alguns casos, um símbolo terminal para indicar o fim da declaração.
Com isto, antes deste símbolo terminal, pode-se utilizar outro símbolo sepa-
rador para que mais de uma variável de mesmo tipo seja declarada num mesmo
comando a ser analisado sintática e semanticamente.
Um exemplo pode ser visto na Figura 5, em que é mostrada a mesma situ-
ação de associação de valor a uma variável pelo ponto de vista sintático e, em
seguida, semântico, para que se perceba a diferença na estruturação do comando.
Figura 5 - Exemplo de atribuição de valor à variável
Fonte: O Autor.
pretador seja desenvolvido para verificar códigos criados nesta linguagem e sua
estrutura, lógica e comandos.
A semântica é mais complexa que a sintaxe, e descrever o significado de suas
expressões em uma linguagem é uma tarefa difícil, mas importante para que os
profissionais que programarem na linguagem conheçam as instruções e suas
funções dentro de um código.
A chamada Semântica Operacional lida com programas em execução, inter-
pretando o que ocorre com cada instrução e alterações que possam ocorrer com
valores utilizados pelo hardware durante o processo.
Na Figura 6, temos um exemplo em que um comando de decisão do tipo
“se” é interpretado de forma a deixar bem claro como os desvios do fluxo ocor-
rem e a condição para que estes desvios sejam feitos.
Figura 6 - Exemplo de análise semântica operacional
Fonte: O Autor.
Sintaxe e Semântica
60 UNIDADE II
Isso pode ser feito por meio de outra semântica chamada axiomática, que
se baseia em lógica matemática e trabalha com expressões lógicas antes e depois
de cada instrução do código para garantir que as condições para execução das
instruções ocorra adequadamente.
Outro método bastante importante, chamado de Semântica Denotacional,
se baseia na teoria da recursividade para descrever uma linguagem de progra-
mação. Ela, com objetos matemáticos e funções para descrever o significado de
programas, sendo que objetos matemáticos são precisos e bem definidos, ao
passo que instruções de linguagem, não.
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Assim, é preciso trabalhar para conseguir definir os objetos para a lingua-
gem e associar estas funções ligadas a estes objetos para definir os elementos da
sintaxe da linguagem.
Um exemplo de relação denotacional poderia ser utilizado para analisar a
Figura 4, em que poderíamos ter uma função como a da Figura 7 em que letras
maiúsculas com índices indicam as funções associadas ao conceito de pré-con-
dição de uma estrutura de decisão.
Figura 7 - Exemplo de semântica denotacional para estrutura de decisão
Fonte: O Autor.
A análise léxica é a busca por padrões em cadeias de símbolos que sejam aceitos
em uma linguagem de programação. Esta análise é feita antes da análise sintá-
tica, pois verifica, um a um, todos os símbolos e sua validade, uma vez que, em
caso de falha, a análise sintática nem precisa ocorrer para aquela instrução.
Um exemplo simples é mostrado na Figura 8, em que é ilustrada a análise
léxica da primeira linha da estrutura de decisão baseada na estrutura mostrada
na Figura 6 que representa a parte fundamental da estrutura em si.
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Fonte: O autor.
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
como estruturar a análise descendente recursiva.
Figura 9 - Exemplo de BNF estendida e subprograma para análise recursiva
Fonte: O Autor.
dos demais tipos de nomes permitidos numa linguagem, como nomes de vari-
áveis e constantes.
Variáveis que representam endereços de memória associados a nomes em
programas para armazenamento de dados são comuns em todas as linguagens,
assim como constantes que apenas se diferenciam pela não alteração dos valo-
res armazenados em memória durante a execução do programa.
Toda variável ou constante tem um tipo de dado associado que indica o
tipo de valor aceito para armazenamento em memória e o quanto de espaço na
memória do hardware é reservado para este armazenamento, podendo este ser
temporário na memória RAM ou permanente em disco, no caso de alguns tipos
de dados para manipulação de arquivos.
Entende-se por valor para uma variável ou constante o tipo de dado que é
permitido e a faixa de valores aceitos pela definição do tipo de dado na lingua-
gem e o limite aceito pelo espaço reservado para o armazenamento em memória.
Vincular um tipo a uma variável é uma associação que ocorre durante a codi-
ficação, usando elementos aceitos em uma linguagem de programação ou espaços
de memória reservados para tipos variáveis em tempo de execução.
Esta vinculação permite que compiladores façam as ligações necessárias
entre sub-rotinas e elementos de ligação no código e que realizem chamadas a
estas sub-rotinas durante a execução.
Os vínculos que ocorrem dinamicamente em tempo de execução, por exem-
plo, possuem tempo de vida associado ao quanto são utilizados em tempo de
execução de um programa e perdem seus vínculos no momento em que dei-
xam de ser utilizados.
Uma variável local pertencente a uma sub-rotina, com escopo apenas para
uso durante a execução da mesma. Esta sub-rotina é liberada da memória assim
que é finalizada, assim como ocorre com objetos que sejam finalizados por méto-
dos destrutores em linguagens orientadas a objeto.
Dentro da declaração de tipos, uma linguagem que seja do tipo fortemente
tipada tem bem estabelecido o tipo de dado aceito por variáveis e constantes,
tendo então a reserva de memória já padronizada em termos de espaço a ocupar.
Uma linguagem fracamente tipada já permite que a reserva de espaço em
memória seja menos padronizada e ocorra de forma bem dinâmica durante a
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
execução, associando a quantidade de memória para armazenamento de valo-
res de acordo com o dado recebido, por exemplo.
É preciso ter regras bem definidas numa linguagem em relação à compatibili-
dade entre tipos de dados e conversões possíveis para evitar exceções indesejadas
em tempo de execução.
O chamado escopo citado a pouco define se variáveis têm uso permitido ape-
nas dentro de sub-rotinas quando chamadas (variáveis locais) ou em outras áreas
do código (variáveis globais), mas existe outra categoria de escopo que permite
que uma variável seja visível dentro da sub-rotina em que foi declarada, assim
como em outras sub-rotinas chamadas por ela, utilizando o conceito de herança
da programação orientada a objetos.
Os tipos de dados definem com quais valores um programa desenvolvido em
determinada linguagem pode trabalhar em tempo de execução, podendo mani-
pular desde tipos simples até estruturas de dados mais complexas.
Tipos primitivos representam a categoria básica de valores aceitos na lingua-
gem e contemplam, em geral, valores numéricos inteiros ou de ponto flutuante
(números com casas decimais), tipos caractere (texto em geral), booleanos (ver-
dadeiro ou falso), e cadeias de valores ou caracteres.
Tipos podem ser definidos pelo usuário como listas de valores chamadas
tipos enumerados, restringindo a faixa de valores de aceitos de um tipo primi-
tivo, ou matrizes e registros que representam coleções de outros tipos agrupados
em uma estrutura com uma ou mais dimensões.
Registros são mais comumente usados para armazenamento de tipos varia-
dos em uma mesma estrutura e matrizes para dados de mesmo tipo de dado,
sendo que estas podem ser, inclusive, muitas vezes do tipo registro.
O tipo união também é utilizado em algumas linguagens para agrupar dados
de tipos diferentes, de forma que a memória reserve espaço adequado para rece-
ber dados de quaisquer dos tipos pertencentes à união criada.
Ponteiros também são úteis, pois permitem a criação de listas dinâmicas de
dados capazes de alterarem o espaço utilizado em memória durante a execu-
ção, permitindo o trabalho com o endereçamento direto de memória, em que
ficam os dados.
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
OPERADORES E EXPRESSÕES
Operadores e Expressões
66 UNIDADE II
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
podem incluir um valor incorreto truncado, ou seja, os componentes inteiros
da expressão calculados podem gerar um número decimal com suas casas deci-
mais eliminadas em função do tipo dos dados da expressão antes da operação
de atribuição à variável decimal.
Existem, além dos operadores matemáticos, operadores relacionais como >
e < usados em comparações em instruções de decisão, ou operadores booleanos
como AND e OR usados em conjunto com os demais operadores anteriormente
citados para análises mais complexas de decisão, por exemplo.
A figura 10 ilustra alguns exemplos de operadores mais comuns em expressões
e estruturas de ecisão diversas, mostrando a quantidade de variações possíveis
com o seu uso.
Figura 10 - Exemplos de expressões matemáticas, relacionais e booleanas
Fonte: O Autor.
ESTRUTURAS DE CONTROLE
Fonte: O Autor.
Estruturas de Controle
68 UNIDADE II
Laços de repetição também são estruturas muito importantes dentro das lin-
guagens de programação, pois permitem instruções isoladas ou que blocos de
instruções sejam executados um número fixo ou variável de vezes, eliminando
a repetição desnecessária de código.
A Figura 12 mostra exemplos de instruções que criam laços de repetição
diferentes, em que primeiro laço FOR tem seu número de repetições pré-defi-
nido, ao passo que o laço WHILE depende de uma condição ser satisfeita para
que alguma repetição ocorra.
Figura 12 - Exemplos de laços de repetição em linguagem C
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Fonte: O Autor.
Existem regras para o uso de laços em cada linguagem, e estilos de laços aceitos
também, como o caso do comando GOTO usado em muitas linguagens que pode
criar desvios até pontos específicos de um código, sendo que estes não precisam
estar necessariamente em blocos definidos dentro da própria instrução de desvio.
Há problemas que precisam ser tratados como um que pode ocorrer com o
código da Figura 12, em que o código à esquerda tem sua variável de controle
inicializada, um valor limite definido e uma regra de incremento da variável
de controle, completando as regras necessárias para um laço de repetição com
número de repetições conhecido.
Mas, na mesma Figura 12, o comando WHILE à direita não possui esses
parâmetros todos definidos em sua instrução de controle, e cabe ao programa-
dor inicializar a variável antes de seu uso dentro do laço, a menos que aceite o
valor 0 padrão utilizado pela linguagem no momento da sua criação.
BASIC, por exemplo, mas devido à sua simplicidade e pouca variação lógica,
deu lugar a outras estruturas, como as definidas por comandos como while
ou repeat de linguagens como C e Pascal, respectivamente.
Fonte: Adaptado de: Linguagens e Ambientes de Programação (2015/2016).
Disponível em: <http://ctp.di.fct.unl.pt/~amd/lap/teoricas/09.html>. Acesso em: 29.
mar. 2016.
CONSIDERAÇÕES FINAIS
Considerações Finais
70 UNIDADE II
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Uma parte essencial de qualquer linguagem se refere a instruções de con-
trole capazes de influenciar todo o processamento por meio de instruções mais
complexas, capazes de agregar outras instruções de mesmo tipo ou não em blo-
cos que são controlados através destas instruções.
Essas instruções podem ser laços de repetição que eliminam a repetição des-
necessária de instruções que necessitem ser executadas diversas vezes, ou podem
ser estruturas de decisão que podem fazer por si só escolhas entre blocos de ins-
truções a serem executadas dinamicamente.
Parte importante do estudo de uma linguagem de programação se refere a
como ela lida com sub-rotinas, e este é o ponto a ser tratado na próxima unidade.
A Execução de um Programa
Toda linguagem de programação é constituída por instruções que, agrupadas, conse-
guem, de certa forma, criar produtos utilizados nas mais diversas áreas profissionais,
pesquisa e educação, por exemplo.
A chamada metalinguagem contida em cada linguagem não é exatamente como o por-
tuguês, mas sim uma forma abreviada que contém regras de sintaxe e semântica como
em uma língua qualquer.
Essas instruções são claras para um programador que desenvolva código em uma
linguagem de programação, mas, para o hardware em que será executado, é algo
incompreensível, pois máquinas compreendem instruções mais próximas de seu
funcionamento, em que são especificados os recursos a serem utilizados a todo o
momento, e como devem ser utilizados.
Esta chamada linguagem de máquina compreendida pelo hardware é diferente da me-
talinguagem de programação, pois se encontra em um “nível” mais baixo de interação
com este hardware.
O processo de conversão do código escrito em linguagem de programação de nível
mais alto para um baixo nível de linguagem de máquina pode ocorrer por interpretação
ou por compilação.
Um interpretador simplesmente lê o código e, à medida em que vai conseguindo com-
preender as ações indicadas pelas instruções, vai executando as mesmas, como ocorre
em linguagens como BASIC e Javascript, por exemplo.
No caso do compilador, este, por meio de sua conversão da linguagem de alto nível, cria
um novo arquivo considerado executável pelo sistema operacional, e este é capaz de
realizar tarefas por si só depois de criado, sem a necessidade do compilador, fato que
não ocorre com linguagens interpretadas que sempre usam um software intermediário.
Existe também o caso de linguagens compiladas que geram um arquivo intermediário
que é executado através de uma máquina virtual, como é o caso das linguagens Java e
C#, sendo uma das formas mais estudadas de programação na atualidade.
De qualquer maneira, o objetivo de uma linguagem de programação sempre será o de
servir de intermediário entre o programador e o hardware, de forma que o fato de ser
uma linguagem interpretada por outro programa, ou compilada, gere um software in-
dependente.
Fonte: Adaptado de: Linguagens e Ambientes de Programação (2015/2016). Disponível em:
<http://ctp.di.fct.unl.pt/~amd/lap/teoricas/09.html>. Acesso em: 29. mar. 2016.
MATERIAL COMPLEMENTAR
Material Complementar
REFERÊNCIAS
REFERÊNCIAS LIVROS
ASCENCIO, A. F. G. Fundamentos da programação de computadores: algoritmos
PASCAL, C/C++ (padrão ANSI) e JAVA. 3. São Paulo: Ed. Pearson Education do Brasil,
2012.
MACLENNAN, B. J. Principles of Programming Languages: Design, Evaluation and
Implementation (em inglês). 3ª ed. Oxford: Oxford University Press, 1999.
SEBESTA, R. W. Concepts of programming languages.10ª ed. New Jersey: ed. Pear-
son Education, Inc,2012.
REFERÊNCIAS LINKS
INSTRUÇÃO GoTo. Developer Network, 2015. Disponível em: <https://msdn.micro-
soft.com/pt-br/library/69whc95c.aspx>. Acesso em: 29 mar. 2016.
Linguagens e Ambientes de Programação (2015/2016). Disponível em: <http://
ctp.di.fct.unl.pt/~amd/lap/teoricas/09.html>. Acesso em: 29. mar. 2016.
75
GABARITO
III
UNIDADE
SUB-ROTINAS E FUNÇÕES
Objetivos de Aprendizagem
■■ Compreender o conceito de sub-rotina.
■■ Conhecer as vantagens do uso de sub-rotinas em programas.
■■ Ser capaz de optar entre as diferentes formas de uso de sub-rotinas.
Plano de Estudo
A seguir, apresentam-se os tópicos que você estudará nesta unidade:
■■ Sub-rotinas
■■ Implementando sub-rotinas
■■ Funções
■■ Passagem de parâmetros
■■ Bibliotecas
79
INTRODUÇÃO
Introdução
80 UNIDADE III
SUB-ROTINAS
Sub-rotinas são trechos de código que podem ou não ser chamados durante a
execução do código principal de uma linguagem.
Uma sub-rotina é criada para permitir que blocos de instruções, que podem
ser executados várias vezes durante a execução de um programa, não precisem
ser repetidos diversas vezes dentro do código principal, reduzindo a quantidade
de linhas do programa.
Toda sub-rotina é chamada, em algum momento, pelo programa principal,
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
que tem sua execução suspensa até que a sub-rotina seja executada por completo
e possa retornar ao ponto da execução do programa principal, em que houve o
desvio de execução do programa.
Na maioria das linguagens de programação, as sub-rotinas são chamadas de
funções ou procedimentos, e possuem uma série de recursos associados ao seu
uso, como a possibilidade de declaração de variáveis locais.
Uma diferença entre procedimento e função é que um procedimento é exe-
cutado sem se preocupar em retornar um valor como resultado, ao passo que
uma função já tem um tipo atribuído ao seu nome para que um valor deste tipo
seja retornado, ao final de sua execução, para uso do programa principal.
Assim como blocos de instruções, as sub-rotinas precisam que suas instru-
ções possuam delimitadores como símbolos do tipo { e }, ou palavras reservadas
como início (begin) e fim (end).
Existem linguagens fortemente tipadas que exigem que o tipo de dados acei-
tos por cada parâmetro seja definido na declaração da sub-rotina, mas outras
permitem que apenas o nome dos parâmetros seja definido para que a execução
defina o tipo de acordo com os parâmetros que receba no momento da chamada.
SUB-ROTINAS E FUNÇÕES
81
IMPLEMENTANDO SUB-ROTINAS
Então, todo o estado das variáveis e demais estruturas, como laços em execu-
ção no momento de chamar a sub-rotina, devem ser armazenados, e a indicação
do ponto na memória onde buscar este retorno ao estado anterior é armazenado
de forma dinâmica e temporária.
Após todo este procedimento, a sub-rotina pode ser chamada, ativando
todas as estruturas para a nova etapa de execução, como variáveis recebidas
como parâmetros e a reserva de memória para o próprio tipo de retorno, no
caso de uma função.
Na memória, todas as estruturas utilizadas, tanto no programa principal
quanto em sub-rotinas, são organizadas em pilhas de dados na memória do
computador.
Imaginando um programa que contenha uma sub-rotina com parâmetros e
um tipo de retorno, teríamos uma organização na memória semelhante à indi-
cada na ilustração da Figura 1.
Figura 1 - Ilustração da organização em pilha do programa na memória
Variável local 2
Variável local 1
Parâmetro 1 Parâmetro 1
Tipo de retorno da sub-rotina
Tipo de retorno da sub-rotina
Link dinâmico da pilha
Variável local Programa principal
Fonte: O Autor.
Implementando Sub-Rotinas
82 UNIDADE III
A pilha é montada de baixo para cima, tendo embaixo tudo relativo ao pro-
grama principal que, no caso da Fugira 1, indica que o programa principal possui
apenas uma variável local a ser armazenada dinamicamente na memória.
Acima, temos o endereço de retorno para que uma sub-rotina chamada possa
retornar ao estado anterior do programa principal e continuar sua execução.
Depois, temos em ordem o tipo declarado da função que representa a sub-ro-
tina do exemplo que conterá o valor a ser devolvido para o programa principal
a ser armazenado na única variável local existente, um parâmetro passado na
chamada da sub-rotina, e duas variáveis locais criadas para uso privado da sub-
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
-rotina em seu processamento do parâmetro recebido.
O link dinâmico da pilha segue o fluxo da execução da sub-rotina enquanto
estiver ativa na memória e, ao fim de sua execução, é descartado, assim como
todos os dados armazenados na pilha e pertencentes à sub-rotina.
Recursos como a recursão que permite a chamada de uma sub-rotina por
ela mesma para efetuar seguidas instâncias da mesma sub-rotina em situações
onde, por exemplo, tenhamos cálculos desta natureza (fatorial ou potência) criam
pilhas maiores, pois a cada nova chamada da mesma sub-rotina um novo con-
junto de dados é armazenado na pilha sobre os dados já existentes.
SUB-ROTINAS E FUNÇÕES
83
FUNÇÕES
Fonte: O Autor.
Funções
84 UNIDADE III
A instrução return var; mostra de que maneira ocorrerá este retorno por
meio da devolução do valor contido na posição de memória referente à variável
local da função var declarada para manipular dados.
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
valor precisa ser controlada em seu encerramento.
PASSAGEM DE PARÂMETROS
SUB-ROTINAS E FUNÇÕES
85
Este tipo de passagem permite que, ao invés da sub-rotina receber uma cópia
de um valor armazenado por uma variável do programa principal em memória,
a sub-rotina receba o endereço de memória utilizado pela variável do programa
e possa manipular seu valor real diretamente de dentro da sub-rotina.
Isso muda muito o uso de sub-rotinas, pois assim elas têm liberdade para
manipular dados processados pelo programa principal, tendo maior influência
sobre o estado em que o programa estará ao ocorrer o retorno da sub-rotina.
Outra forma de passagem de parâmetros é por nome, onde a sub-rotina
recebe, no momento de sua chamada, como parâmetro, uma variável ou estru-
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
tura para ser manipulada diretamente dentro de si, sendo o tipo de elemento
aceito como parâmetro de entrada definido pela linguagem. Observe um exem-
plo na Figura 3.
Figura 3 - Exemplo de passagem de parâmetro por nome
Fonte: O Autor.
Passagem de Parâmetros
86 UNIDADE III
BIBLIOTECAS
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
referência a este arquivo de sub-rotinas e pudesse, a partir deste arquivo, aces-
sá-las livremente, reduzindo o tamanho do próprio programa.
Diversas linguagens como C e Java permitem o uso destes arquivos chama-
dos de bibliotecas, que seguem regras levemente diferentes de nomenclatura,
diferenciando suas extensões de programas normais da linguagem.
Em C, os arquivos de código seguem uma momenclatura padrão do tipo
nomedoarquivo.c (ou nomedoarquivo.cpp em linguagem C++, por exemplo), e
bibliotecas que possa chamar sejam nomeadas como nomedabiblioteca.h (tanto
em C como em C++).
O uso da extensão diferenciada já indica ao compilador se o arquivo contém
um código de programa ou uma biblioteca para ser agregada a este programa.
A Figura 4 mostra um pequeno exemplo de biblioteca que contém apenas
uma função para limpar a tela do console na plataforma Linux, codificada em
linguagem C, e que pode ser utilizada em C++.
SUB-ROTINAS E FUNÇÕES
87
Fonte: O Autor.
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Bibliotecas
88 UNIDADE III
CONSIDERAÇÕES FINAIS
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
muitas vezes, atendem a um mesmo nicho de mercado, e que podem reutilizar
algumas destas sub-rotinas sem alterações.
Estas sub-rotinas podem ser do tipo procedimento sem tipo definido de
retorno, ou funções com tipo de retorno indicado para que o programa princi-
pal tenha uma espécie de feedback desta sub-rotina, sem que seja necessário o
uso de variáveis do programa principal, exceto pelas passadas por parâmetros.
Parâmetros são melhores para uma sub-rotina do que o uso de variáveis glo-
bais, pois permitem um melhor controle das ações de sub-rotinas em relação a
um programa, uma vez que mantêm um nível seguro de encapsulamento que
reduz a ocorrência de erros em tempo de execução.
Estes parâmetros que podem ser passados de diferentes formas a uma sub-ro-
tina são muito úteis para auxiliar no processamento da mesma, pois, sem receber
valores passados pelo programa principal, pode ser difícil uma sub-rotina inte-
ragir com o programa que a chamou sem usar variáveis globais do programa.
Mesmo sub-rotinas do tipo procedimento, que não geram valor de retorno,
são úteis para manipular valores utilizando parâmetros passados por referência ou
ações que se baseiem apenas nos parâmetros recebidos, podendo armazená-los em
um arquivo físico em disco, por exemplo.
Na próxima unidade é mostrada uma evolução que houve em relação ao
uso de sub-rotinas, a qual permitiu a garantia do encapsulamento e outras téc-
nicas mais modernas de programação, baseadas na ideia da abstração de dados.
SUB-ROTINAS E FUNÇÕES
89
O Tipo Vazio
O uso de funções é muito comum, e as linguagens de programação utilizam, em maior
quantidade, funções ao invés de procedimentos, pois a função permite maior interação
com o programa principal e pode funcionar como procedimento muitas vezes, se aceito
pela linguagem como alternativa de programação.
A linguagem C e suas variantes, por exemplo, aceitam definir uma função como tipo
void (vazio) para que não seja necessário o retorno de um valor ao final de sua execução,
pois não existe a sub-rotina do tipo procedimento puramente dita nestas linguagens.
Acaba sendo uma prática muito comum de vários programadores utilizar em demasia
esse recurso, tornando todas as funções de um programa similares a procedimentos
na prática, pois sempre tem seu tipo atribuído como vazio no momento da declaração
destas funções.
Isso reduz a interação da sub-rotina com o programa principal, e faz com que a passa-
gem de parâmetros na chamada da função seja o único mecanismo de compartilha-
mento de dados entre as partes de um programa.
Uma função sem tipo definido não pode retornar um resultado diretamente a uma va-
riável do programa principal, e acaba tendo que receber parâmetros por referência, por
exemplo, onde possa internamente manipular dados do programa principal.
Se não utilizar recursos assim, pode apenas servir de sub-rotina auxiliar ao programa
principal, sem alterar valores deste, e apenas realizar tarefas independentes como criar
um arquivo, exibir uma janela de informações ou outras ações sem ligação com o estado
em que se encontre a execução.
Cabe ao usuário, inclusive, se incluirá no momento de criação de bibliotecas próprias
funções com retorno de valores ou não, de acordo com as ações a serem realizadas pelas
funções e procedimentos codificados para a biblioteca, lembrando que uma biblioteca
contém funções de uso comum e que se baseiam na ideia do reuso de código.
Alguns programadores utilizam o tipo vazio em todas as funções que codificam em pro-
gramas de linguagens que não possuem procedimentos, mas essa prática se revela não
muito boa, devido a eliminar a possibilidade de interligar melhor os componentes de
um programa.
Fonte: VOID (c++). Developer Network, 2015. Disponível em: <https://msdn.microsoft.com/pt-
-br/library/fxky5d0w.aspx>. Acesso em: 29. mar. 2016.
MATERIAL COMPLEMENTAR
Material Complementar
REFERÊNCIAS
REFERÊNCIA LIVROS
ASCENCIO, Ana Fernanda Gomes. Fundamentos da programação de computa-
dores: algoritmos PASCAL, C/C++ (padrão ANSI) e JAVA. 3. São Paulo: Ed. Pearson
Education do Brasil, 2012.
MACLENNAN, Bruce J. Principles of Programming Languages: Design, Evaluation
and Implementation (em inglês). 3ª ed. Oxford: Oxford University Press, 1999.
SEBESTA, Robert W. Concepts of programming languages.10ª New Jersey:Ed. Pe-
arson Education, Inc., 2012.
REFERÊNCIA LINKS
VOID (c++). Developer Network, 2015. Disponível em: <https://msdn.microsoft.
com/pt-br/library/fxky5d0w.aspx>. Acesso em: 29. mar. 2016.
93
GABARITO
IV
TIPOS ABSTRATOS DE
UNIDADE
DADOS, ORIENTAÇÃO A
OBJETO
Objetivos de Aprendizagem
■■ Compreender a abstração de dados.
■■ Conhecer detalhes da orientação a objetos em algumas linguagens
de programação conhecidas.
■■ Saber interpretar um programa orientado a objeto.
Plano de Estudo
A seguir, apresentam-se os tópicos que você estudará nesta unidade:
■■ Abstração de dados
■■ Encapsulamento
■■ Programação orientada a objeto
■■ Estrutura de programas orientados a objeto
■■ Estudo de caso
97
INTRODUÇÃO
Nas unidades anteriores foi visto que existem diversos conceitos envolvendo a pro-
gramação e como uma linguagem de programação tem seus conceitos definidos.
Conceitos como laços e estruturas são complexos em sua definição, pois
necessitam que todas as regras de uso sejam definidas, assim como alternativas
de implementação, instruções aceitas e combinações possíveis entre elas.
Algumas linguagens trabalham conceitos de programação estruturada, onde
se utilizam diversas sub-rotinas para dividir, em partes, problemas computacio-
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Introdução
98 UNIDADE IV
ABSTRAÇÃO DE DADOS
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
sem que o programador tenha que se preocupar com a forma como os dados são
manipulados internamente pela sub-rotina, focando seus esforços no desenvol-
vimento do programa principal.
Tal forma de abstração é chamada de abstração de processo e é a mais comum
em linguagens de programação pelo fato de oferecer o ocultamento de proces-
sos internos às sub-rotinas de um programa ou outros elementos que possam
ser utilizados sem a preocupação em como foram implementados.
Essa característica facilita a codificação de programas sempre que sub-ro-
tinas puderem ser reutilizadas sem modificações, pois partes essenciais de um
programa de tamanho maior já se encontram prontas e não precisam ser ana-
lisadas nem escritas.
Na Figura 1 é mostrada a estrutura básica de uma classe definida com seus
atributos e métodos de forma a ilustrar a base da orientação a objetos que depende
da divisão do código em classes ao invés do uso apenas de sub-rotinas como fun-
ções espalhadas pelo código.
Figura 1: Exemplo de classe em C++
Fonte: O Autor.
ENCAPSULAMENTO
Encapsulamento
100 UNIDADE IV
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
PROGRAMAÇÃO ORIENTADA A OBJETO
programação.
Toda classe é estruturada para que represente um agrupamento de elemen-
tos que tenham relação entre si e atendam a alguma demanda de programação.
Ela possui atributos representados por variáveis e parâmetros em sua decla-
ração que servem para manipular os dados necessários à sua finalidade, além de
métodos que são sub-rotinas capazes de processar os seus e realizar tarefas tam-
bém relativas ao seu propósito.
Cada instância de classe atribuída a uma variável acessa os mesmos méto-
dos definidos, mas cria estruturas de atributos personalizados para que tenham
dados próprios para uso da instância, sem interferir nos valores de outras ins-
tâncias atribuídas a uma mesma definição de classe.
Uma instância de classe é criada a partir de um chamado objeto que controla
o tempo em que uma instância ocupará a memória do computador ou deixará
de ocupar ao término de sua utilização, sendo esse processo automaticamente
realizado pelo próprio programa, ou manualmente quando necessário.
Dentro de um programa, a declaração de uma classe deve ser feita toda
no início do programa ou pode também ter apenas seu cabeçalho no início do
código e toda sua estrutura em um ponto mais ao final do código, abaixo da
parte principal do programa.
Outra forma de utilização de classes é colocando apenas o cabeçalho de
declaração da classe no programa principal, e a classe em si estar codificada em
um arquivo externo chamado no processo de compilação para criação do pro-
grama executável, fazendo com que o código do programa principal seja menor.
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Além de prejudicar a segurança dos dados de atributos e erros devido a cha-
madas impróprias de atributos e métodos por objetos que podem prejudicar a
correta execução dos métodos das classes, fere a regra do encapsulamento.
O ideal é que haja níveis de acesso a atributos e métodos para garantir o
correto encapsulamento, permitindo que outras características da programa-
ção orientada a objetos sejam utilizadas.
O que bloqueia o acesso a atributos e métodos de uma classe por outras ins-
tâncias é a cláusula private que também deve ser utilizada antes da declaração
de atributos e métodos a encapsular.
Existem funções chamadas de construtores e destrutores, utilizadas para ini-
cializar atributos de objetos instanciados e para encerrar estes objetos quando
não são mais necessários, respectivamente.
Essas funções são executadas automaticamente em linguagens, mas podem
ser manualmente controladas por comandos para este fim com na linguagem
C++, que usa as palavras-chave constructor e destructor.
A ideia da reutilização de software que começou com a popularização do
computador pessoal, durante a década de 80, trouxe novas necessidades para a
programação, pois apenas a ideia de classes com encapsulamento não era sufi-
ciente para garantir a reutilização, devido a diferenças entre atributos dos novos
e já existentes códigos para reutilização.
Para resolver estes problemas de ajustes entre dados da antiga codificação
e da nova, surgiu um recurso que permitiu que novos tipos abstratos pudessem
herdar atributos de tipos abstratos já implementados.
Ademais, a herança permite que tipos abstratos já criados possam ser modifi-
cados e que novos tipos abstratos criados possam absorver atributos e métodos já
existentes e, em subclasses, incluir novos elementos necessários ao novo programa.
Para efeito de referência, uma classe que está um nível acima de uma sub-
classe é chamada de superclasse e representa o tipo abstrato de dados original,
de onde a subclasse obtém seus principais métodos e atributos.
Quando métodos de classes são utilizados em tempos de execução, chama-
mos de mensagem sua chamada de um objeto para outro, sendo esta a base da
programação orientada a objetos.
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
em tempo de execução.
Esse processo funciona de forma distinta em várias linguagens que aceitam
a orientação a objetos com C++ onde um método precisa ser definido como vir-
tual para ser vinculado dinamicamente, mas em Java todos os métodos criados
já permitem a vinculação, a menos que sejam definidos que não.
ESTUDO DE CASO
Estudo de Caso
106 UNIDADE IV
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Fonte: O Autor.
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
O programa principal ilustrado pela Figura 2 declara duas variáveis para a classe
Livros que são em seguida instanciadas para as subclasses Ficção e Romance, mas
observamos que não é instanciada a própria classe Livro, que já é o tipo das vari-
áveis criadas para conter os objetos.
Assim, tendo o tipo declarado da classe principal, a variável já pode ser ins-
tanciada às subclasses, criando os objetos Obj1 e Obj2 que, em seguida, chamam
seus respectivos métodos de cadastro de livros (CadastraLivro) implementados
de forma distinta em cada subclasse, mas acessíveis por meio dos conceitos de
herança e polimorfismo.
Estudo de Caso
108 UNIDADE IV
CONSIDERAÇÕES FINAIS
O uso da orientação a objetos é uma técnica muito interessante, pois permite que
haja uma forte independência entre as partes de num programa e que isso gere
maiores facilidades no futuro, com reuso de código e evoluções do software criado.
Técnicas como encapsulamento são mais comuns entre as diversas lingua-
gens existentes, mas nem todos os conceitos definidos pela teoria da programação
orientada a objetos são comuns nas linguagens.
O uso de classes contendo atributos e métodos definidos com cláusulas para
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
torná-los públicos ou privados permite que conceitos muito importantes, como
a permissão destes atributos e métodos em subclasses associadas a uma super-
classe, sejam fundamentais na subdivisão de problemas computacionais em
partes que possam ser interligadas se necessário.
O uso da cláusula de privado para atributos ajuda a manter uma classe inde-
pendente de qualquer parte de um programa, facilitando seu reuso em outros
programas que necessitem apenas indicar parâmetros pedidos pelos métodos
da classe para processamento dos dados.
Já o uso da cláusula pública para classes que permite que sejam visíveis para
todo o código ajuda na ligação entre as partes de um programa e auxilia para
que novas implementações para métodos da classe sejam utilizadas por meio da
virtualização oferecida pelo polimorfismo.
O reuso é algo muito importante na produção de software, pois reduz o
tempo de codificação de um novo software que tenha partes em comum com
outros softwares já produzidos, e por isso a criação de uma biblioteca de códigos
e classes reutilizáveis auxilia empresas a criar novos produtos em menor tempo,
mantendo padrões que facilitam a manutenção do software.
Assim, temos que o uso da orientação a objetos possui pontos positivos e
negativos, mas, independente de quais ou quantos sejam, seus conceitos de pro-
gramação são válidos ao ponto de servirem de base para praticamente todas as
linguagens dominantes do mercado.
Adaptado de: JACKSON, J. Apple anuncia Swift, uma nova linguagem de programação para o iOS
e OS X. Macworld on-line, 02 de jun. de 2014 às 19h24. Disponível em: < http://macworldbrasil.
com.br/noticias/2014/06/02/apple-anuncia-swift-uma-nova-linguagem-de-programacao-para-
-o-ios-e-os-x/>. Acesso em: 29 de mar. de 2016.
MATERIAL COMPLEMENTAR
Material Complementar
REFERÊNCIAS
REFERÊNCIA LIVROS
ASCENCIO, Ana Fernanda Gomes. Fundamentos da programação de computa-
dores: algoritmos PASCAL, C/C++ (padrão ANSI) e JAVA. 3. São Paulo: Ed Pearson
Education do Brasil, 2012.
MACLENNAN, Bruce J. Principles of Programming Languages: Design, Evaluation
and Implementation (em inglês). 3ª ed. Oxford: Oxford University Press, 1999.
SEBESTA, Robert W. Concepts of programming languages.10ª ed. New Jersey: Pe-
arson Education, Inc., 2012.
REFERÊNCIA LINKS
ESPECIAL: Nove linguagens de programação que vale a pena aprender agora. Com-
puterworld, 11 set. 2015 às 08h15. Disponível em: <http://computerworld.com.
br/especial-nove-linguagens-de-programacao-que-vale-pena-aprender-agora>.
Acesso em: 29 de mar. de 2016.
FACEBOOK cria linguagem de programação chamada “Hack”. Olhar digital, 20 de
mar. de 2014 às 17h. Disponível em: <http://olhardigital.uol.com.br/pro/noticia/fa-
cebook-cria-linguagem-de-programacao-chamada-hack/40937>. Acesso em: 29 de
mar. de 2016.
JACKSON, J. Apple anuncia Swift, uma nova linguagem de programação para o iOS
e OS X. Macworld on-line, 02 de jun. de 2014 às 19h24. Disponível em: < http://
macworldbrasil.com.br/noticias/2014/06/02/apple-anuncia-swift-uma-nova-lin-
guagem-de-programacao-para-o-ios-e-os-x/>. Acesso em: 29 de mar. de 2016.
113
GABARITO
1. Procedimento ou função.
2. Estrutura abstrata de dados que servem de base para a programação orientada
a objetos.
3. Atributos são as variáveis de uma classe. Métodos são as sub-rotinas responsá-
veis por processar dados de uma classe.
4. É uma forma de isolar os elementos de uma sub-rotina para garantir que seja
independente do restante do código de um programa.
5. A herança trata da ligação possível entre classes, podendo facilitar o comparti-
lhamento de métodos entre superclasses e subclasses.
Professor Esp. Ronie Cesar Tokumoto
V
CONCORRÊNCIA, TRATAMENTO
UNIDADE
DE EXCEÇÕES
PROGRAMAÇÃO FUNCIONAL E
PROGRAMAÇÃO LÓGICA
Objetivos de Aprendizagem
■■ Compreender os princípios de concorrência, semáforos e monitores.
■■ Tratar exceções e eventos de acordo com a linguagem utilizada.
■■ Conhecer os conceitos das programações funcional e lógica.
Plano de Estudo
A seguir, apresentam-se os tópicos que você estudará nesta unidade:
■■ Concorrência
■■ Tratamento de exceções
■■ Programação funcional
■■ Programação lógica
117
INTRODUÇÃO
sificada e complicada.
Assim como lidar com processos que ocorrem paralelamente, temos momen-
tos em que exceções ocorrem e podem ser tratados pelo programa de forma a
ocultar erros mais simples ou permitir que o próprio programa gerencie esssas
ocorrências de forma devida.
Além de conhecer algumas técnicas mais avançadas de programação, pode-
mos, nesta unidade, conhecer estilos diferentes de programação, voltados a áreas
mais específicas, como inteligência artificial.
A programação funcional oferece uma maneira de lidar com cálculos mate-
máticos de forma estruturada, podendo criar grandes códigos capazes de resolver
problemas mais complexos, sem a necessidade de utilizar todas as demais instru-
ções disponíveis nas demais linguagens, pois esta variedade reduz o desempenho
dos programas em tempo de execução, sendo este o fator primordial em cálculo
matemático.
Finalmente, outro tipo de programação baseada em lógica também oferece
uma forma totalmente diferente de codificar programas baseados em regras que
estabelecem uma base de conhecimento para consultas e podem também ser uti-
lizados em mecanismos de inteligência artificial.
Esta unidade complementa as demais, mostrando recursos que podem exis-
tir em linguagens comentadas durante as unidades anteriores, mas o essencial
são os conceitos mostrados e a forma como estes influenciam todo o trabalho
profissional, necessitando de programadores com perfil diferenciado para tra-
balhar com tais formas de programação.
Introdução
118 UNIDADE V
CONCORRÊNCIA
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
grama pelo hardware também aumenta muito sua eficiência.
Isso pode ocorrer por meio da capacidade do hardware de processar dife-
rentes tarefas ao mesmo tempo ou do próprio sistema operacional multitarefa,
que pode processar mais de uma tarefa ao mesmo tempo, ou podendo utilizar
um sistema de time-sharing (compartilhamento de tempo).
Poder dividir o processamento das instruções de um programa para que
possam ser executadas paralelamente permite novas possibilidades para uma
linguagem e programação, mas criar códigos capazes de funcionar desta forma
é uma tarefa mais complexa do que pode parecer num primeiro momento.
É preciso especificar no código do programa de que forma os dados podem
ser distribuídos pelos recursos computacionais disponibilizados pelo hardware
ou pelo sistema operacional, e quais dentre os utilizados no programa podem.
Muitos computadores possuem a capacidade de utilizar processamento
ocioso para realizar processamento paralelo para aumentar a eficiência do uso
de seus recursos.
Um exemplo seria o processamento de outras atividades enquanto uma tarefa
lenta que exige pouco recurso, como impressão ou processos de entrada e saída,
é realizada pelo programa principal em atividade.
Existem tipos diferentes de computadores com capacidade de realizar o
processamento de multitarefa como servidores com dois ou mais processado-
res acoplados em seu hardware, ou os atuais processadores com vários núcleos
simulando vários processadores, capazes de efetuar processamento paralelo.
Por meio da sincronização de tarefas de um programa que possam ocor-
rer concorrentemente, duas ou mais tarefas de sub-rotinas podem ocorrer
Fonte: O Autor.
Concorrência
120 UNIDADE V
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
TRATAMENTO DE EXCEÇÕES
Fonte: O Autor.
Tratamento de Exceções
122 UNIDADE V
PROGRAMAÇÃO FUNCIONAL
Uma linguagem funcional tem como base o uso de funções matemáticas e repre-
senta um conjunto de linguagens como LISP, Scheme, ML e Haskell que trabalham
dentro da ideia de conjuntos domínio e imagem, como na matemática.
Assim, temos que a sequência de execução dessas linguagens se baseia mais
na ordem em que as operações devem ocorrer de acordo com suas regras, e não
de forma sequencial, como nas linguagens tradicionais chamadas imperativas.
Na linguagem LISP, provavelmente a mais popular, utiliza-se apenas dois
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
tipos de dados em sua implementação inicial chamados de átomos e listas, mas
têm uso diferente dos tipos em linguagens imperativas.
Essas listas definidas entre parênteses contendo átomos ou outras listas com
seus elementos entre parênteses também, como por exemplo, (a b (c d)), sendo
(c d) uma lista considerada um dos três elementos da lista completa.
As funções da linguagem são implementadas de forma simples, baseando-
-se na sintaxe básica onde é primeiramente indicada a função matemática como
primeiro elemento entre parênteses e depois os elementos a serem utilizados na
função, como por exemplo (+ 2 2) que resultaria 4.
Com o tempo, novas formas de construção de código em LISP foram imple-
mentadas para que funções pudessem ser vinculadas a outras, como em (+ 2 (*
2 2)) que resultaria em 6. Comandos foram agregados com o passar do tempo
para manter a linguagem popular e aumentar sua eficiência.
Na Figura 3 temos um exemplo de código que calcula o fatorial de um valor,
em que o comando if verifica se a recursão deve encerrar e iniciar o retorno até
que se possa exibir o resultado final do cálculo.
Figura 3 - Exemplo de código em linguagem LISP
Fonte: O Autor.
Fonte: O Autor.
PROGRAMAÇÃO LÓGICA
Programação Lógica
124 UNIDADE V
Fonte: O Autor.
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
venções definidas na linguagem.
A linguagem Prolog trabalha com o chamado termo, que representa uma
constante (átomo em LISP) ou variável, podendo ser também uma estrutura.
Uma constante é representada por cadeias de caracteres todos minúsculos, uma
variável por caracteres iniciando por letra maiúscula, e estruturas que represen-
tam as relações seguindo a sintaxe da Figura 5.
Conjunções em Prolog permitem termos compostos separados por ope-
radores lógicos como E ou OU utilizando símbolos próprios para cada tipo de
operador definido na linguagem.
Um exemplo seria indicar que uma regra é consequência de outra se for
verdadeira, seguindo a sintaxe consequência :- condição, onde consequência e
condição representam proposições, como nos exemplos da Figura 6.
Figura 6 - Exemplo de regras em programação lógica
Fonte: O Autor.
Além das regras mostradas aqui, temos diversas outras aceitas pela linguagem
Prolog capazes de torná-la muito interessante para realizar operações lógicas e
oferecer uma linguagem com potencial para sua área de atuação, não sendo a
toa sua posição de linguagem lógica mais popular.
Considerações Finais
126 UNIDADE V
CONSIDERAÇÕES FINAIS
Assim, findando esta unidade, temos uma ideia de como o universo da progra-
mação é vasto e se mantém em constante evolução, criando novos conceitos e se
adaptando às novas tecnologias que emergem a todo o momento.
Linguagens foram criadas, como as recentes Go criada pela Google para fins
diversos, Hack desenvolvida para uso no Facebook, e Swift criado pela Apple
para, aos poucos, substituir a linguagem Objective-C, variação de C utilizada
para o desenvolvimento de aplicações para seus dispositivos.
Reprodução proibida. Art. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.
Assim, muda o perfil dos novos estudantes de programação que a cada dia,
entram em áreas mais específicas do desenvolvimento de software com foco vol-
tado a áreas como desenvolvimento de aplicativos para dispositivos móveis ou
sistemas embarcados em dispositivos eletrônicos.
Independente de qual seja a área em que se deseje ingressar, é preciso estar
disposto a entrar em um ramo em que estar atualizado e conhecer novas tecno-
logias é uma constante, assim como em toda a área de Tecnologia da Informação.
Conhecer linguagens como as exemplificadas nesta unidade são um desafio
diferente das linguagens mais populares, pois é mais difícil encontrar material
de estudo e exemplos de código para servirem de base teórica.
Estudar e criar códigos cada vez melhores, mais otimizados e eficientes pode
ser a porta de entrada para o mercado de trabalho, pois quem desenvolve sof-
twares de boa qualidade acaba sendo reconhecido e buscado pelas empresas.
Refinamentos como o tratamento de erros e exceções permitem que se criem
programas mais robustos com mecanismos que deixam o usuário mais confor-
tável e menos receoso em trabalhar com o mesmo.
É preciso estar sempre pesquisando conteúdos adicionais sobre linguagens
que conheça, sem deixar de observar novas tendências e nichos para os quais se
possa desenvolver aplicações, visando ou não o lucro.
Os Dispositivos Móveis
Dispositivos baseados no sistema operacional IOS e OSX da Apple utilizam aplicativos
desenvolvidos por programadores espalhados em todo o mundo, da mesma forma que
aplicativos para os sistemas Android e Windows Phone.
No caso da Apple, a linguagem oficial para desenvolvimento de aplicações para seus
dispositivos se chama Objective-C, que deriva das linguagens C e C++, acrescentando
todas as funcionalidades necessárias para programação mobile.
A própria Apple desenvolveu uma linguagem chamada Swift para substituir a lingua-
gem padrão utilizada até então, com o propósito de manter sob seu domínio a ferra-
menta de desenvolvimento das suas aplicações.
Como a linguagem Objective-C deriva de C, existe a necessidade da retrocompatibilida-
de com a sintaxe da linguagem C, ao passo que a linguagem Swift, por ser totalmente
nova, não necessita ser compatível com linguagem alguma, por mais que mantenha
muito da sintaxe da linguagem Objective-C.
Fazendo uma comparação entre um código escrito com linguagem Objective-C e Swift,
é nítida a redução de código, pois bibliotecas adicionadas por #include, e outras partes
dispensáveis do código por não afetarem diretamente a funcionalidade do mesmo não
existem na linguagem Swift.
Linguagens antigas tendem a detalhar mais seu código, necessitando de maior quanti-
dade de instruções para a realização de tarefas, ao passo que, com evolução das lingua-
gens, todo tipo de instrução descartável é retirada para melhorar desempenho, desde o
momento da compilação até a sua execução.
Novas versões que são implementadas de linguagens já existentes tendem a acrescen-
tar funções ou otimizar a própria linguagem e sua codificação. Tudo para que as melho-
rias aconteçam regularmente.
É importante que novas tecnologias sejam agregadas na definição de linguagens, pois
linguagens que não sofreram alterações acabaram restritas a aplicações legadas ou des-
continuadas em razão de não comportarem as novas tecnologias que surgiram com o
passar do tempo.
Fonte: Disponível em: JACKSON, J. Apple anuncia Swift, uma nova linguagem de programação
para o iOS e OS X. Macworld on-line, 02 de jun. de 2014 às 19h24. Disponível em: <http://ma-
cworldbrasil.com.br/noticias/2014/06/02/apple-anuncia-swift-uma-nova-linguagem-de-progra-
macao-para-o-ios-e-os-x/>. Acesso em: 29 de mar. de 2016.
MATERIAL COMPLEMENTAR
Material Complementar
REFERÊNCIAS
REFERÊNCIA LIVROS
ASCENCIO, A. F. G. Fundamentos da programação de computadores: algoritmos
PASCAL, C/C++ (padrão ANSI) e JAVA. 3. Ed. São Paulo: Ed. Pearson Education do
Brasil, 2012.
MACLENNAN, B. J. Principles of Programming Languages: Design, Evaluation and
Implementation (em inglês). 3ª ed. Oxford: Oxford University Press, 1999.
SEBESTA, R. W. Concepts of programming languages.10ª ed. New Jersey: Pearson
Education, Inc., 2012.
REFERÊNCIA LINKS
JACKSON, J. Apple anuncia Swift, uma nova linguagem de programação para o iOS
e OS X. Macworld on-line, 02 de jun. de 2014 às 19h24. Disponível em: <http://ma-
cworldbrasil.com.br/noticias/2014/06/02/apple-anuncia-swift-uma-nova-lingua-
gem-de-programacao-para-o-ios-e-os-x/>. Acesso em: 29 de mar. de 2016.
PARADIGMA Funcional: Conceitos Básicos. Departamento de Informática – UEM.
Disponível em: <http://din.uem.br/ia/ferramentas/lisp/lisp3.htm>. Acesso em 29 de
mar. de 2016.
131
GABARITO
1. Processos que podem ocorrer paralelamente dividindo recursos físicos para se-
rem processados.
2. Hardware com dois ou mais processadores ou sistemas operacionais que podem
realocar recursos ociosos durante processos lentos.
3. Exceções são eventos fora do esperado que podem ocorrer durante a execução
e um programa ou eventos esperados e que podem tratados pelo programa.
4. É uma linguagem própria para trabalhar com funções matemáticas, com imple-
mentação de códigos diferente das linguagens estruturadas ou orientadas a ob-
jeto, pois se tem foco em cálculo.
5. É uma linguagem que utiliza regras para criar uma base de dados que permite
efetuar consultas lógicas utilizadas em inteligência artificial.
133
CONCLUSÃO