Escolar Documentos
Profissional Documentos
Cultura Documentos
VALDINEI J. SAUGO
Valdinei J. Saugo
IESDE
2020
© 2020 – IESDE BRASIL S/A.
É proibida a reprodução, mesmo parcial, por qualquer processo, sem autorização por escrito do autor e do detentor dos
direitos autorais.
Projeto de capa: IESDE BRASIL S/A. Imagem da capa: whiteMocca/Shutterstock
Apresentação 7
1 Linguagens de programação 9
1.1 Surgimento das linguagens de programação 9
1.2 Definição das linguagens de programação 11
1.3 Aplicações das linguagens de programação 14
6 Paradigmas de programação 59
6.1 Paradigmas de programação funcional, imperativo e lógico 59
6.2 Exemplos de aplicação 64
7 Paradigma de programação orientada a objetos 67
7.1 O que é programação orientada a objetos? 67
7.2 Definição de classes e objetos 68
7.3 Exemplos de aplicação de orientação a objetos 71
Gabarito 83
Apresentação
As tecnologias modernas estão em constante evolução e são aplicadas nos mais diversos
segmentos de mercado, especialmente no desenvolvimento de sistemas ou de software para
empresas. Para que muitos equipamentos utilizados no nosso cotidiano operem, é necessário um
sistema – o software –, responsável por dar “vida e sentido” a muitas máquinas, de modo que
cumpram o papel para o qual foram destinadas.
O software, atualmente, está embutido em diversos produtos eletrônicos de uso diário, tais
como: televisores, celulares, veículos, eletrodomésticos e equipamentos de internet. Se um produto
eletrônico realiza algum cálculo ou processamento, certamente parte dele é constituído de um
software. No dia a dia estão presentes, também, sistemas em vários segmentos, como a internet,
com suas páginas web e serviços que não seriam possíveis sem um conjunto de tecnologias que
permitam a troca de informações entre pessoas e computadores.
Para que toda essa tecnologia seja operacional e ajude as pessoas em suas tarefas, é preciso
estudá-la, projetá-la e, em algum momento, inseri-la nesses produtos tecnológicos. A presente obra,
nesse sentido, visa colaborar com uma apresentação introdutória sobre linguagens e paradigmas de
programação. Cada tipo de aplicação e sistema tem uma metodologia de desenvolvimento, na qual
as linguagens de programação entram em cena.
Bons estudos!
1
Linguagens de programação
1 Niklaus Wirth nasceu em 1934, é suíço e engenheiro eletrônico. Projetou algumas linguagens de programação,
incluindo a Pascal e escreveu livros nas áreas de engenharia de software e programação estruturada. Em 1984, recebeu o
Prêmio ACM Turing, atribuído em reconhecimento ao desenvolvimento de uma sequência inovadora de linguagens, e, em
2004, foi nomeado membro do Museu de História da Computação.
2 Autor da célebre frase “O coração tem razões que a própria razão desconhece”, o gênio da ciência e da literatura
universal, Blaise Pascal, nasceu na França, em 1623, e acumula os títulos de físico, matemático, filósofo, teólogo, pai da
computação digital, da probabilidade, da física experimental, da hidráulica, do cálculo integral e diferencial, e da geometria
projetiva. Aos 16 anos, iniciou suas pesquisas voltadas para a física e inventou, na época, uma pequena calculadora.
Em 1647, fez experimentos sobre a pressão atmosférica, redigiu um tratado sobre o vácuo, aperfeiçoou o barômetro
de Torricelli e concebeu dois inventos: a prensa hidráulica e a seringa. Seus trabalhos foram de grande valor para o
desenvolvimento da estatística e, no campo da matemática, teve reconhecimento por meio da teoria da probabilidade e
do tratado do triângulo aritmético.
Linguagens de programação 11
1 #include <iostream>
2 using namespace std;
3
4 int main()
5 {
6 int a, b, c;
7 cin >> a;
8 cin >> b;
9
10 _asm
11 {
12 mov eax, a
13 add eax, b
14 mov c, eax
15 };
16
17 cout << c << endl;
18 cin.get();
19 return 0;
20 }
Fonte: Elaborada pelo autor.
Linguagens de programação 13
Podemos observar que a Figura 1 demonstra um exemplo de código em linguagem C++, que
é uma evolução da linguagem C, no qual foram adicionados recursos do paradigma de programação
orientada a objetos. No código exemplificado, há um trecho que realiza uma operação de soma
entre dois números inteiros. Um programa, quando escrito totalmente ou quando contém partes
em assembly, está preparado em um formato que pode ser lido pelas pessoas, mas que é ilegível ao
processador até que seja convertido para linguagem de máquina por meio de um programa assembler.
Com a utilização de linguagens de alto nível, o desenvolvedor não precisa se preocupar com
os níveis mais baixos de hardware, como instruções do processador, endereços de memória ou
tipos de processador; tarefa a cargo do compilador. Essa característica das linguagens de alto nível é
conhecida por abstração e, em geral, desenvolver sistemas com linguagens de programação de alto
nível é mais fácil e produtivo, em comparação à linguagem de máquina e à assembly.
A performance do software desenvolvido em linguagem de alto nível não é mesma de um
programa escrito em assembly ou na linguagem de máquina. Entretanto, devido à sua complexidade,
essas linguagens são utilizadas quando não é possível resolver determinado problema ou algum
fator externo com linguagem de alto nível, como ocorre nas limitações de hardware. Na Figura 3,
podemos ver um exemplo de linguagem de alto nível cujo código foi escrito em linguagem Python,
que é derivada da linguagem C e surgiu na década de 1990, sendo aplicada basicamente em sistemas
de internet. Devido à sua estrutura simplificada e otimizada para operar cálculos matemáticos, teve
boa aceitação no meio científico e recentemente vem ganhando espaço em sistemas que processam
grandes volumes de informação.
14 Linguagens e paradigmas de programação
>>> numero1 = 20
>>> numero2 = 30
>>> soma = numero1 + numero2
>>> print(‘Resultado: ’, soma)
Resultado: 50
componentes e interfaces
para operação, ocupava o
tamanho de uma sala. Sua
capacidade resumia-se a realizar
cálculos matemáticos, o que
era considerado uma grande
evolução para a época.
Com o passar dos anos
e com a evolução da indústria
eletrônica, existem processadores
em miniatura que em alguns
casos chegam a ser menores do
Linguagens de programação 15
que uma unha. Na Figura 5, é possível conferir o grau de miniaturização com o exemplo de um
microprocessador moderno.
Em comparação aos primeiros computadores, as máquinas atuais são milhares de vezes
menores. A redução no tamanho dos processadores permitiu que fossem colocados dentro dos
aparelhos, possibilitando, assim, a criação de diversos novos equipamentos. Além disso, essa
evolução abriu caminho para o desenvolvimento de novas aplicações e sistemas, e influenciou a
criação de outras linguagens de programação e o aperfeiçoamento das já existentes.
Figura 5 – Exemplo de um microprocessador de uso geral
IM_VISUALS/Shutterstock
Muitos equipamentos de uso doméstico, industrial, médico, militar, aeroespacial etc.,
que contêm um microcontrolador ou microprocessador e realizam algum processamento, têm
programas em execução em sua parte interna. Alguns desses equipamentos resolvem problemas ou
executam tarefas por conta própria, enquanto outros interagem em nossas atividades, fornecendo
informações com entrada de dados das mais variadas maneiras.
Independentemente da forma de funcionamento, dentro desses equipamentos existem
um ou mais programas em operação, que foram desenvolvidos com base em linguagens de
programação. Se tomarmos como exemplo um relógio digital de pulso, veremos que, para
mostrar as horas em seu visor, ele possui um processador interno cujo programa pode ser escrito
em linguagem assembler ou linguagem C.
A evolução para a chamada computação pessoal, na qual as pessoas, de um modo geral,
começaram a ter acesso aos computadores, ocorreu na década de 1970. Foi em 1977 que a Apple
Computer começou a popularizar os computadores em ambientes domésticos e corporativos. Em
1981, por sua vez, a IBM era a maior fornecedora de computadores do mundo e lançou sua versão de
computador pessoal conhecido como IBM Personal Computer, consolidando o termo PC (personal
computer), usado até hoje para designar computador. A partir desse momento, a computação
pessoal chegou às residências, às empresas, aos órgãos governamentais e às indústrias, abrindo um
leque de oportunidades para o desenvolvimento de softwares a fim de atender às carências desses
segmentos (DEITEL, P.; DEITEL, H., 2010).
16 Linguagens e paradigmas de programação
Alguns anos mais tarde, com a chegada da internet, tanto as empresas quanto as pessoas
começam a ter mais necessidade de trocar informações via rede, entre diferentes plataformas e
sistemas, com a finalidade de reduzir as distâncias e o tempo nas comunicações. Isso gerou demandas
para novas funcionalidades e adequações das linguagens de programação, de modo a dar suporte de
comunicação via internet nos chamados sistemas distribuídos (DEITEL, P.; DEITEL, H., 2010).
Assim, diversos websites e sistemas de web, utilizados pelas pessoas e empresas, foram
desenvolvidos com linguagem PHP, e muitos dos aplicativos que rodam hoje em smartphones ou
smart TVs são desenvolvidos em linguagem Java.
Considerações finais
As linguagens de programação fazem parte de muitas das nossas tarefas, e até mesmo quem
não é profissional da área e não mantém contado direto com esse meio está ligado a elas. Vários
produtos e serviços que utilizamos em nossas vidas possuem tecnologias e sistemas que os tornam
capazes de executar tarefas, tendo sido construídos com linguagens de programação.
Algumas das linguagens de programação clássicas mais conhecidas e ainda utilizadas
são Cobol, Fortran, Pascal e Basic. Dentre as outras linguagens modernas mais conhecidas e
amplamente aplicadas estão C++, C# (C Sharp), C, Java, PHP, JavaScript, Visual Basic e Python
(TIOBE Software BV, 2020).
Os recursos atuais vêm sendo cada vez mais difundidos e integrados, bem como suas
aplicações executadas em ambientes diversificados, como dispositivos móveis, computação em
nuvem, relógios inteligentes, computadores e notebooks, servidores, sistemas eletrônicos, veículos,
entre outros. Com as melhorias e os aperfeiçoamentos realizados nas redes de comunicação durante
os últimos anos, a integração de diferentes plataformas vem crescendo, assim como acontece com o
volume de dados operacionalizados diariamente.
O profissional de tecnologia da informação, como mencionado no início deste capítulo, tem
uma ampla gama de áreas de atuação à sua escolha. Vimos também que a grande integração de
sistemas e tecnologias faz com que as linguagens de programação estejam direta e indiretamente
atreladas às tarefas cotidianas. Assim, o profissional que mais se destaca é aquele que está atualizado
frente à tecnologia e sabe aproveitar o potencial dessas linguagens, aplicando-as de forma eficiente
na construção de sistemas e no tratamento de dados.
• PIRATAS do Vale do Silício. Direção: Martyn Burke. Produção: Steven Haft; Nick
Lombardo; Leanne Moore; Joseph Dougherty. Roteiro: Paul Freiberger; Michael Swaine;
Martyn Burke. Estados Unidos: Haft Entertainment, St. Nick Productions; TN, 1999. (95
min.), son., color., 35 mm.
O filme Piratas do Vale do Silício mostra como a linguagem Basic esteve presente na
ascensão da Microsoft, no ramo de softwares e sistemas operacionais.
Atividades
1. As linguagens de programação são ferramentas essenciais para o desenvolvimento de novas
tecnologias e sistemas de informação. Dentro do setor de tecnologia da informação, a
computação em nuvem vem ganhando destaque. Diante dessas informações, realize uma
pesquisa e identifique as linguagens de programação mais utilizadas para o desenvolvimento
de sistemas de computação em nuvem.
Referências
AHO, A. V. et al. Compiladores: princípios, técnicas e ferramentas. 2. ed. São Paulo: Pearson, 2008. p. 1-16.
COMPUTER HISTORY MUSEUM. Konrad Zuse. Disponível em: https://www.computerhistory.org/
fellowawards/hall/konrad-zuse/. Acesso em: 07 out. 2019.
DEITEL, P.; DEITEL, H. Java: como programar. 8. ed. São Paulo: Pearson, 2010. p. 3-7.
IBM. Fortran: the pioneering programming language. Disponível em: https://www.ibm.com/ibm/history/
ibm100/us/en/icons/fortran/. Acesso em: 10 out. 2019.
SILVA, E. L. da (org.). Programação de computadores. São Paulo: Pearson, 2015. p. 36-38.
TIOBE Software BV. Tiobe Index for January 2020: January Headline – Programming Language C awarded
Programming Language of the Year 2019. Disponível em: https://www.tiobe.com/tiobe-index/. Acesso em:
06 jan. 2020.
2
Tipos de linguagens de programação
Linguagens de programação
Assertivas Declarativas
Satisfação de
Imperativas Orientada a objetos Funcionais Declarativas
restrições
C C++ Lisp
Prolog Mozart/OZ
Pascal Java Miranda
Gödel Alice
Fortran C# Haskell
1 Alan Turing (1912-1954) foi um matemático e criptoanalista que, por meio da Máquina de Turing, sua invenção,
influenciou o desenvolvimento da ciência da computação e a formalização do conceito de algoritmo.
2 John von Neumann (1903-1957) foi um matemático que, entre importantes contribuições, sugeriu armazenar
instruções na memória do computador para serem executadas mais rapidamente. Com isso, formalizou o primeiro projeto
lógico de um computador.
Tipos de linguagens de programação 21
contexto, podemos observar que a maioria dos sistemas web são construídos com base na
orientação a objetos.
Com o aumento da complexidade dos problemas computacionais que precisam ser
solucionados, surgiu a necessidade de se dividir um programa em partes menores. A fim de
resolver problemas pela colaboração entre vários agentes – por sua vez responsáveis apenas por seus
serviços –, passou-se também a prover recursos às linguagens de programação para dar suporte a
essa ideia.
O conceito da programação orientada a objetos teve início com a linguagem Simula 673, mas
foi com a linguagem Smalltalk4, na década de 1980, que obteve um melhor alcance. Vale salientar
que a Smalltalk até hoje é considerada, por alguns autores, como a única linguagem de programação
puramente orientada a objetos (MELO; SILVA, 2014).
Sob o ponto de vista computacional, devemos ter objetos capazes de prover serviços sob a
sua própria responsabilidade – isso requer que os objetos sejam proprietários dos seus estados e que
possam dar soluções próprias aos serviços requisitados. As linguagens de programação orientadas
a objetos permitem a criação de objetos considerados entidades computacionalmente ativas, que
armazenam um conjunto de dados (atributos) e os serviços (métodos) que esse objeto pode prover.
Para permitir a colaboração computacional dos objetos, também é preciso possuir os meios
para realizar a comunicação entre eles (mensagens). Assim, uma vez que o objeto tem um serviço
requisitado, por meio da mensagem recebida, sua responsabilidade é processar a mensagem e,
dentro do seu contexto, realizar esse serviço.
Ao usuário, os passos necessários para a execução do serviço não são relevantes, porém, os
resultados sim. Nas linguagens orientadas a objetos, existe o conceito de classes cuja finalidade é
agrupar objetos que possuam um mesmo comportamento, definido por meio de abstrações. Para
fornecer um sistema de classificação, é necessário que tenhamos a relação entre as classes segundo
a noção de hierarquia organizada pelo mecanismo de herança, sendo esta compreendida como
uma forma de organizar diferentes objetos com atributos iguais sob um mesmo nome de classe.
O funcionamento de um programa orientado a objetos pode ser visto como a ativação de
objetos, mediante sua criação e colaboração entre objetos ativos. Como cada objeto é responsável
pelos seus próprios dados (estado) e transformações (métodos), o estado do programa é assumido
como um conjunto de estados dos objetos ativos.
3 “Dois noruegueses, Kristen Nygaard e Ole-Johan Dahl, desenvolveram a linguagem Simula I entre 1962 e 1964, no
Centro de Computação Norueguês (NCC), em Oslo. Eles estavam inicialmente interessados em usar computadores
para simulação, mas também trabalhavam em pesquisa operacional. [...] Quando a implementação de Simula I estava
concluída, Nygaard e Dahl começaram os esforços para estender a linguagem, adicionando novos recursos e modificando
algumas das construções existentes para torná-la útil para aplicações de propósito geral. O resultado desse trabalho foi
Simula 67, cujo projeto foi apresentado publicamente pela primeira vez em março de 1967” (DAHL; NYGAARD, 1967 apud
SEBESTA, 2018, p. 70).
4 “Muitos acreditam que Smalltalk é a linguagem de programação orientada a objetos definitiva. Ela foi a primeira a
incluir suporte completo para esse paradigma. [...] é uma linguagem pequena, apesar de o sistema Smalltalk ser grande.
A sintaxe da linguagem é simples e altamente regular” (SEBESTA, 2018, p. 499-500).
Tipos de linguagens de programação 23
Carro
ano: Integer
marca: String
modelo: String
chassi: String
valor: Double
void ligar ( )
acelerar ( )
frear ( )
desligar ( )
5 John McCarhy (1927-2011) foi um cientista da computação com importantes estudos no campo da inteligência
artificial, responsável por criar a linguagem de programação Lisp.
Tipos de linguagens de programação 25
Um programa funcional é composto por uma única expressão, a qual descreve em detalhes
uma função e um elemento de domínio dessa mesma função. A redução de um programa consiste
na substituição de uma parte da expressão original obedecendo a certas regras de reescrita. As
regras de reescrita são organizadas geralmente em três propriedades: correção, confluência e
terminação.
A correção é uma propriedade semântica e, para que seja válida em qualquer expressão, é
imprescindível que alguma convenção para codificar funções e seus parâmetros seja obedecida.
Já a confluência e a terminação são propriedades sintáticas, pois independem de como os
símbolos no programa são interpretados. A combinação dessas duas propriedades permite que
sejam construídas estratégias genéricas para reduzir a expressão, as quais são computacionalmente
eficientes e capazes de resolver qualquer problema cotidiano como um programa funcional.
A base formal para construir um conjunto de regras de reescrita, conforme explanado, que
seja conveniente para a programação puramente funcional, chama-se lambda e consiste em um
cálculo desenvolvido em 1930 pelo matemático Alonzo Church. Esse cálculo possui três operações
básicas: substituição, aplicação e abstração (MELO; SILVA, 2014). Vejamos:
• Substituição: troca textual de todas as ocorrências de uma variável em uma expressão por
outra expressão. Se F e G são expressões, a substituição F [X ← G] denota a expressão F
com todas as ocorrências da variável X trocadas por G.
• Aplicação: avaliação de uma função para um dado elemento de seu domínio. Se F é a
expressão que codifica uma função e A é um elemento de seu domínio, a aplicação (F)A
denota o valor de F em A.
• Abstração: recurso básico para codificar funções, indicando quais símbolos em uma
expressão são variáveis. Se F é uma expressão, então λX.F é o mapeamento de todos os
valores que a variável X pode assumir para as substituições das ocorrências de X em F por
aqueles valores.
Entre as opções das linguagens de paradigma funcional existe a linguagem Haskell, que é
amplamente utilizada para fins científicos. Na Figura 4, podemos ver um exemplo de aplicação de
linguagem Haskell para a resolução do cálculo do fatorial de um número.
26 Linguagens e paradigmas de programação
Considerações finais
Em comparação com os tradicionais paradigmas de programação imperativo (estruturado)
e programação orientada a objetos, o paradigma de programação funcional vem ganhando a
atenção de grandes empresas nos últimos anos. Sites respeitados, como GitHub6 e Stack OverFlow7,
mostram que as linguagens funcionais estão aumentando gradativamente sua presença no mercado.
Isso não significa que os paradigmas estruturados ou a orientação a objetos serão substituídos pela
linguagem funcional, mas, sim, que cada paradigma tem a sua aplicação e a forma de resolução de
problemas pode ser mais bem desenvolvida com a utilização de um paradigma de programação
adequado.
O mundo da tecnologia está em constante evolução, e o crescente volume de dados abre
espaço para a exploração de novas linguagens de programação, além da experimentação dos
paradigmas. Áreas de machine learning, mineração de dados e inteligência artificial, por exemplo,
conseguem obter resultados mais expressivos com linguagens de programação funcionais. Já as
linguagens imperativas, como a linguagem C, têm grande mercado em sistemas eletrônicos e
programação de baixo nível.
No mercado atual, as tecnologias e os sistemas trabalham de modo mais integrado devido
às constantes melhorias em hardware e redes de comunicação, por isso, atualmente temos outros
exemplos de serviços e aplicações que são compostos por softwares desenvolvidos em mais de
um paradigma de programação. Problemas complexos exigem, em muitos casos, integração com
diferentes sistemas e cada ponto de processamento e/ou coleta de informação pode se beneficiar
de uma correta aplicação de paradigmas de programação, visando a sistemas mais eficientes que
sejam capazes de entregar resultados de relevância para seus usuários.
Atividades
1. O paradigma de programação orientada a objetos é muito difundido atualmente no mercado
para o desenvolvimento de aplicações comerciais, industriais, financeiras, sistemas na
internet, dentre outros. Considerando as mais variadas aplicações de orientação a objetos,
realize uma pesquisa e apresente três linguagens de programação orientada a objetos:
Referências
ASCENCIO, A. F. G.; CAMPOS, E. A. V. de. Fundamentos da programação de computadores. 2. ed. São Paulo:
Pearson, 2007.
MELO, A. C. V. de; SILVA, F. S. C. da. Princípios de linguagens de programação. São Paulo: Blucher, 2014.
SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Porto Alegre: Bookman, 2018.
TUCKER, A. B.; NOONAN, R. E. Linguagens de programação: princípios e paradigmas. 2. ed. São Paulo: Mc
Graw Hill, 2010.
3
Tipos de dados em linguagens de programação
Variável é um nome para fazer referência a um endereço de memória. Esse endereço é onde
será armazenado um tipo de dado, que pode ser lógico, numérico ou em caracteres. Toda vez que
o programa fizer uma referência a uma variável, será lido ou registrado um conteúdo no endereço
de memória correspondente.
Todo computador possui uma tabela de alocação que contém o nome da variável, seu tipo
(para determinar quantos bytes serão necessários) e o seu endereço inicial de armazenamento.
Assim, quando um algoritmo necessita buscar alguma informação em memória, basta saber o nome
da variável para que o computador, por meio da tabela de alocação, possa buscá-la automaticamente
(TUCKER; NOONAN, 2009).
As variáveis, como mencionado, são nomes que fazem referência a um endereço de memória
e armazenam dados utilizados pelo programa. Elas estão sujeitas a modificações de conteúdo ao
longo da execução de um programa. Mesmo que a variável assuma valores diferentes, ela tem a
capacidade de armazenar apenas um valor a cada instante.
Em complemento ao uso de variáveis, existem as constantes, que são dados com valores fixos
e que não se alteram ao longo da execução de um algoritmo. Da mesma forma que as variáveis, as
constantes ocupam espaço em memória e possuem uma tabela de alocação com seus endereços de
início, apenas com a diferença de não sofrerem alteração no conteúdo armazenado.
Independentemente da linguagem de programação utilizada, a lógica de aplicação de
variáveis é a mesma, ocorrendo variações apenas na sintaxe (forma de escrita do código).
Representando recursos importantes ao desenvolvimento de programas de computadores,
uma vez que por meio delas um algoritmo armazena os dados do problema, as variáveis e
constantes são consideradas os elementos básicos que um programa manipula. Isso implica
dizer que as variáveis e as constantes armazenam dados em memória durante o funcionamento
de um programa de computador.
“As expressões fazem a combinação entre as variáveis e as constantes para calcular novos
valores” (ALMEIDA, 2008, p. 26). As expressões lógicas e matemáticas desenvolvidas em um
programa de computador são responsáveis por combinar variáveis e constantes, para acessar seus
valores realizando leitura ou modificação dos valores contidos em memória.
1 #include <stdio.h>
2 int main()
3 {
4 int numero01 = 12;
5 int numero02 = 25;
6 int soma = numero01 + numero02;
7 printf("O valor da soma é: %d", soma);
8 return 0;
9 }
Já os números reais são os dados numéricos, positivos e negativos, que possuem parte
decimal. Em linguagens de programação, também são conhecidos como números de ponto
flutuante, pois a parte decimal é separada da parte inteira com um ponto que pode “flutuar”
tanto para a direita como para a esquerda. Nas Figuras 3 e 4, a seguir, podemos ver exemplos
de algoritmos realizando operações com números reais nas linguagens C++ e Python,
respectivamente.
32 Linguagens e paradigmas de programação
1 #include <stdio.h>
2
3 int main()
4 {
5 float numero01;
6 float numero02;
7 float resultado;
8 printf("Digite o número 1: \n");
9 scanf("%f", &numero01);
10 printf("Digite o número 2: \n");
11 scanf("%f", &numero02);
12 resultado = numero 01 + numero 02;
13 printf("O resultado da soma é: %.2f", resultado);
14 return 0;
15 }
Digite o número 1:
12.45
Digite o número 2:
45.89
O resultado da soma é: 58.34
Fonte: Elaborada pelo autor.
Os caracteres são sequências compostas por uma letra e um sinal de mais ( + ), podendo ser
agrupados dados numéricos com letras, formando, assim, sequências alfanuméricas. Os caracteres
Tipos de dados em linguagens de programação 33
são mostrados entre aspas e conhecidos, também, como tipo string, literal ou cadeia. As Figuras 5 e
6, a seguir, exemplificam o uso de caracteres em linguagens Java e C++, respectivamente. Algumas
linguagens de programação fazem uma diferenciação, utilizando aspas duplas para identificar
sequência de caracteres e aspas simples para indicar apenas um caractere.
Figura 5 – Exemplo com caracteres em linguagem Java
1 #include <stdio.h>
2 int main()
3 {
4 char letra = 'a';
5 char *palavra = "Linguagem de Programação C++";
6 printf("A variável letra contém: %c\n", letra);
7 printf("A variável palavra contém: %s", palavra);
8 }
A variável letra contém: a
A variável palavra contém: Linguagem de Programação C++
Fonte: Elaborada pelo autor.
Por fim, os valores lógicos são os dados com valor verdadeiro ou falso; ou, dependendo
da linguagem de programação, podem ser representados pelos números zero e um, sendo que
apenas esses dois valores são suportados. O tipo lógico também é chamado de booleano devido à
contribuição do filósofo e matemático inglês George Boole1 à área da lógica matemática. As Figuras
7 e 8, a seguir, apresentam exemplos de aplicação do tipo booleano nas linguagens de programação
Java e C++, respectivamente.
1 George Boole (1815-1864) foi um matemático e filósofo britânico que criou a álgebra booleana, trabalho fundamental
para o posterior desenvolvimento da programação e da computação moderna.
34 Linguagens e paradigmas de programação
1 #include <stdio.h>
2 int main()
3 {
4 bool opcao01 = true;
5 bool opcao02 = false;
6 printf("O status da opção 01 é: %d/n", opcao01);
7 printf("O status da opção 02 é: %d/n", opcao02);
8
9 }
O status da opção 01 é : 1
O status da opção 02 é : 0
Fonte: Elaborada pelo autor.
Os dados necessários para identificar não podem ser agrupados em uma variável, pois são
de tipos diferentes. Porém, as linguagens de programação dão suporte à criação de estruturas
específicas para agrupar tipos de dados diferentes sob um mesmo nome de variável. As linguagens
de programação orientadas a objetos, por sua vez, dão suporte à solução desse problema por meio
da criação de classes, nas quais são agrupados os tipos de dados necessários; outras linguagens de
programação dão suporte usando o conceito de estruturas.
Agora, analisaremos a criação de tipos em linguagem C com a utilização de estruturas
(structs) e de objetos em linguagem Java.
As structs são as variáveis de tipo simples e armazenam apenas valores básicos, ou seja, números
inteiros, números reais ou caracteres. Para armazenar valores mais elaborados em linguagem C, podem
ser criadas estruturas (structs) que definem tipos novos de variáveis a partir dos tipos básicos existentes
(int, char, float, double, bool). As estruturas são utilizadas em casos nos quais é necessário agrupar em
um local de memória dados que sejam de tipos diferentes, porém atribuídos e acessíveis por um único
nome de variável. Dessa forma, é possível definir elementos em um sistema de computador que sejam
mais aproximados ao modo como os seres humanos os identificam.
O exemplo que citamos (gerenciamento de informações de veículos) pode ser elaborado em
linguagem C++. Vejamos a Figura 9:
Figura 9 – Criação de estruturas em linguagem C++
1 #include <stdio.h>
2
3 struct veiculo
4 {
5 int ano;
6 float valor;
7 char *modelo;
8 char *proprietário;
9 char *placa;
10 };
11
12 int main()
13 {
14
15 veiculo v1; //declaração de uma variável do tipo veículo
16 v1.ano = 2015;
17 v1.valor = 21590.0;
18 v1.modelo = "Fusca";
19 v1.proprietario = "Ana Maria";
20 v1.placa = "XYZ-4567";
21 printf("O valor do carro %s é: R$ %.2f/n", v1.modelo, v1.valor);
22 return 0;
23 }
Considerações finais
O desenvolvimento de programas de computador sempre estará atrelado à identificação de
entidades do mundo real, que podem ser pessoas, objetos, ações, entre outros elementos. Vale
destacar que a transcrição dessas entidades se dá em linhas de código.
Os tipos de dados primitivos das linguagens de programação suprem as necessidades mais
básicas de criação de variáveis. No entanto, para que os sistemas possam atender às necessidades de
modelagem dos elementos do mundo real, em vários momentos é necessário criar tipos próprios
contendo um ou mais tipos de dados para sua identificação.
O paradigma de programação orientado a objetos pode ser utilizado como uma das
alternativas para essa modelagem e para a criação de tipos de dados, e os desenvolvedores têm total
liberdade para criar tipos de dados na resolução de problemas em seus algoritmos.
Atividades
1. Explique as diferenças entre variáveis e constantes.
2. Como as estruturas podem ser úteis em um sistema de computador?
3. O que são os dados primitivos de uma linguagem de programação?
Referências
ALMEIDA, M. Curso de lógica de programação. São Paulo: Digerati Books, 2008.
ASCENCIO, A. F. G.; CAMPOS, E. A. V. de. Fundamentos da programação de computadores. 2. ed. São Paulo:
Pearson, 2007.
DEITEL, P.; DEITEL, H. Java: como programar. 8. ed. São Paulo: Pearson, 2010.
TUCKER, A. B.; NOONAN, R. E. Linguagens de programação: princípios e paradigmas. 2. ed. São Paulo:
McGraw-Hill, 2009.
4
Introdução à linguagem
de programação Java
Neste capítulo, serão tratados aspectos formais e técnicos sobre o tema “linguagens de
programação e o paradigma de programação orientado a objetos”. Iniciaremos os estudos da
linguagem de programação Java, passando pelo seu surgimento e evolução, com exemplos de
aplicação e de códigos.
A linguagem Java é uma das mais utilizadas mundialmente, e sua relevância é dada pela
presença em diversos equipamentos e compatibilidade com sistemas operacionais, tornando-a
umas das mais versáteis. Java é utilizada desde em pequenas aplicações na internet até em sistemas
corporativos de grande porte, em empresas multinacionais. Por isso também abordaremos o
potencial de mercado para essa que é uma das principais linguagens de programação da atualidade.
A linguagem Java é umas das mais utilizadas no desenvolvimento de sistemas, tendo suas
aplicações voltadas para uso geral em computadores, dispositivos móveis, banda de dados e web.
De acordo com a Tiobe Software BV (2020) – instituição que realiza levantamentos no mercado
e na comunidade global de desenvolvedores de software –, o Java figurou entre a primeira e a
segunda posição no renomado ranking de linguagens de programação da companhia, no período
compreendido entre 2004 e 2019. Além disso, foi classificado por essa mesma entidade como a
linguagem dos anos de 2005 e 2015.
Apesar de ter bastante tempo de uso se comparada às linguagens que vêm ganhando
popularidade e adesão pela comunidade de desenvolvedores, o Java possui grande relevância
devido ao seu potencial de desenvolvimento de sistemas multiplataforma e aplicabilidade em
praticamente qualquer solução de sistema informatizado. Além disso, tem forte presença em
sistemas web de pequeno a grande porte, sendo utilizado por empresas multinacionais em diversos
tipos de sistemas e plataformas.
O mercado de desenvolvimento de sistemas possui muitas oportunidades para as linguagens
de programação. A linguagem Java, por ser considerada uma das mais importantes e utilizadas na
atualidade, abre muitas opções para profissionais – seja para a concepção de novos produtos ou
para a adequação e manutenção de sistemas em operação nas grandes corporações e na internet.
“Uma variável é um nome definido pelo programador, ao qual pode ser associado um valor
pertencente a um certo tipo de dados” (JANDL JR., 1999, p. 17). Para que muitas coisas aconteçam
em nossos sistemas, precisaremos de variáveis, como operações aritméticas, armazenamento de
dados e mensagens para o usuário. Isso implica dizer que “uma variável é como uma memória:
capaz de armazenar o valor de um certo tipo e com um nome que usualmente descreve seu
significado ou propósito. Resumidamente, como já vimos, toda variável possui um nome, um tipo
e um conteúdo” (JANDL JR., 1999, p. 17).
Segundo Jandl Jr. (1999, p. 17), em linguagem Java, o nome de uma variável “pode ser uma
sequência de um ou mais caracteres alfabéticos e numéricos, iniciados por uma letra ou, ainda,
pelos caracteres ‘_’ (underscore) ou ‘$’ (cifrão). Os nomes não podem conter outros símbolos
gráficos, operadores ou espaços em branco”. As letras minúsculas são consideradas diferentes das
maiúsculas, de modo que a linguagem Java é conhecida como case sensitive. Assim, temos como
exemplos válidos para a declaração de variáveis:
• a
• soma
• c3
• $valor
• _info
• Maximo
• minhaVariavel
• TOTAL
As regras de formação do nome não permitem a uma variável utilizar uma palavra reservada
da linguagem, ou seja, comandos, nomes dos tipos primitivos, especificadores e modificadores
pertencentes à sintaxe não podem ser utilizados (JANDL JR., 1999). Podemos observar que, de
forma geral, a declaração de variáveis em Java segue a sintaxe:
tipoDaVariavel nomeDaVariavel;
Primeiro identificamos o tipo da variável; na sequência declaramos o nome da variável
e finalizamos com ponto e vírgula. Vale lembrar que na linguagem Java é recomendado que “a
declaração de variáveis utilize nomes iniciados com letras minúsculas” e, caso o nome da variável
seja composto de mais de uma palavra, as demais devem ser “iniciadas com letras maiúsculas”
(JANDL JR., 1999, p. 18). Vejamos exemplos:
• int número;
• double medias;
• char letra;
A linguagem Java possui ao todo oito tipos de dados primitivos que serão vistos a seguir
e que podem ser organizados em números inteiros, números com ponto flutuante e tipos não
numéricos.
Introdução à linguagem de programação Java 43
Os números inteiros serão utilizados para armazenar em variáveis os tipos inteiros e possuem
as seguintes variedades: byte, short, int e long.
Tabela 1 – Números inteiros
Os números com ponto flutuante serão utilizados para armazenar em variáveis os valores
numéricos reais, ou seja, os números que possuem parte inteira e decimal, resultantes de frações.
Tabela 2 – Números com ponto flutuante
Já os tipos não numéricos são um grupo definido pelos tipos de dados utilizados para
armazenar caracteres e valores booleanos (verdadeiros ou falsos), conforme listamos a seguir.
Tabela 3 – Tipos não numéricos
Como podemos facilmente observar, “os tipos primitivos do Java são os mesmos encontrados
na maioria das linguagens de programação e permitem a representação adequada de valores
numéricos” (JANDL JR., 1999, p. 15).
No código representado pela Figura 2 existem linhas iniciando com “//”, que indicam
comentários. Os comentários são textos ignorados na execução do código, utilizados para colocar
informações sobre o código que está sendo desenvolvido. No exemplo da Figura 3, a seguir,
podemos ver a execução do código escrito na Figura 2, no ambiente Online GDB.
Figura 3 – Execução de um código Java
As variáveis que irão compor um programa em Java serão feitas no bloco principal do código
dessa linguagem. Futuramente, veremos que também existem outros pontos nos quais é possível
declarar variáveis. No próximo exemplo (Figura 4), podemos ver a declaração de três variáveis, a
atribuição de valor e a exibição do conteúdo delas.
Introdução à linguagem de programação Java 45
Na Figura 4 são declaradas três variáveis, a, b e c, sendo respectivamente dos tipos int, double
e char. Cada variável recebe um valor de acordo com seu tipo e, na sequência, é exibido o conteúdo
armazenado em memória. Já no próximo exemplo (Figura 5), podemos observar a escrita de um
código que pede para o usuário informar dois números inteiros para que o algoritmo realize a
operação de adição e, então, mostre o resultado.
Figura 5 – Exemplo de código com leitura de dados via teclado
1 import java.util.Scanner;
2 public class Main
3 {
4 public static void main(String[] args)
5 {
6 //A linha abaixo define um objeto para leitura do teclado
7 Scanner teclado = new Scanner(System.in);
8 int a;
9 int b;
10 int soma;
11 System.out.println("Informe um valor inteiro para a: ");
12 a = teclado.nextInt()
13 System.out.println("Informe um valor inteiro para b: ");
14 b = teclado.nextInt()
15 soma = a + b;
16 System.out.println("A soma de a + b vale: " + soma):
17 }
18 }
Informe um valor inteiro para a:
25
Informe um valor inteiro para b:
52
A soma de a + b vale: 77
Fonte: Elaborada pelo autor.
46 Linguagens e paradigmas de programação
No exemplo representado pela Figura 5, a primeira linha do código, que significa a chamada
de recursos adicionais, traz a mensagem “import java.util.Scanner;”. Podemos observar que a
palavra reservada import sempre será utilizada para incluir recursos ao programa Java, que, no
exemplo em questão, necessita do recurso de leitura via teclado. Ainda, conforme a sintaxe da
linguagem Java, cada linha deve ser finalizada por ponto e vírgula, enquanto os blocos de códigos
são representados por chaves.
Considerações finais
A linguagem Java, sendo uma linguagem de programação derivada de C++, possui a
sintaxe idêntica a esta e, em alguns momentos, sua forma de escrita de códigos também é igual –
característica que contribuiu para que pessoas com conhecimento prévio em C++ se adequassem
rapidamente ao uso de Java.
Atualmente a linguagem Java é uma das principais para o desenvolvimento de aplicações
baseadas na internet e para softwares de equipamentos que se comunicam por meio de uma rede.
Alguns equipamentos de uso doméstico, como TVs, são em parte constituídos por tecnologia Java
para conexão à internet. De acordo com a atual empresa proprietária do Java, a Oracle, mais de 1
bilhão de dispositivos contam com essa tecnologia, sendo considerada a linguagem de programação
mais apropriada para atender às necessidades de empresas de segmentos variados.
As aplicações de Java são diversas e existem versões com ferramentas adequadas para grandes
projetos, como a Enterprise Edition (EE)1 e a Micro Edition (ME)2, voltadas para o desenvolvimento
de aplicações em dispositivos com limitações de hardware.
1 Java Enterprise Edition é uma plataforma Java voltada para o desenvolvimento de aplicações web/corporativas.
Saiba mais acessando o Guia de Referência disponível em: https://www.devmedia.com.br/guia/java-enterprise-edition-
java-ee/34474. Acesso em: 6 jan. 2020.
2 J2ME ou Java Micro Edtion (Java ME) oferece ambiente para aplicativos executados em dispositivos móveis e
integrados. Saiba mais em: https://www.java.com/pt_BR/download/faq/whatis_j2me.xml. Acesso em: 6 jan. 2020.
Introdução à linguagem de programação Java 47
• COMPUTER WORLD. Oracle agora exige assinatura para uso do Java SE. Disponível em:
https://computerworld.com.br/2018/06/22/oracle-agora-exige-assinatura-para-uso-do-
java-se/. Acesso em: 3 out. 2019.
Quando a Sun foi adquirida pela Oracle, muito se especulou sobre existir pagamento de
licenças no uso de Java em todos os níveis de uso da ferramenta. Porém, em 2018, a Oracle
alterou suas políticas de licenciamento de produtos comerciais com a linguagem Java.
Atividades
1. Considerando que Java é uma linguagem de programação fortemente tipada, realize uma
pesquisa sobre o tema e identifique o que significa esse termo.
2. Vimos que a linguagem Java pode ser considerada uma linguagem case sensitive. Discorra
sobre o que significa esse conceito.
3. Explique o que você entendeu por JVM (Java Virtual Machine) e sobre o fato de Java ser uma
linguagem multiplataforma.
Referências
DEITEL, P.; DEITEL, H. Java: como programar. 8. ed. São Paulo: Pearson, 2010.
JANDL JR., P. Introdução ao Java. Núcleo de Educação a Distância, Universidade São Francisco, 1999.
(Apostila). Disponível em: http://valdata.com.br/downloads/CURSOS/Apostila%20de%20Java.pdf. Acesso
em: 6 jan. 2020.
TIOBE Software BV. The Java Programming Language. Disponível em: https://www.tiobe.com/tiobe-index/
java/. Acesso em: 6 jan. 2020.
5
Estruturas de dados com
linguagem de programação Java
5.2.1 Vetores
São estruturas que podem armazenar diversas variáveis do mesmo tipo, formando um
agrupamento dessas variáveis sob um mesmo nome. Um vetor pode ser visto como uma estrutura
de espaços de memória enfileirados, cada um contendo um índice para identificar sua posição.
Supondo que esses espaços permitam apenas números inteiros, cada posição do vetor pode
armazenar um valor inteiro, como podemos observar na Figura 1.
Figura 1 – Exemplo de um vetor contendo seis números inteiros
25 58 -9 1 444 100
5.2.2 Matrizes
Conhecidas também como vetores bidimensionais ou vetores multidimensionais, as matrizes
são estruturas de dados utilizadas para armazenar variáveis de mesmo tipo e, de modo análogo aos
vetores, igualmente necessitam de espaço em memória para essas informações. Entretanto, com
as matrizes, os dados em memória são organizados em duas dimensões, utilizando o conceito de
linhas e colunas, conforme revela a Figura 2.
Figura 2 – Exemplo de uma matriz contendo dez números inteiros
[0] 25 58 -9 1 444
[1] 5 33 4 –1 77
Como os dados estão dispostos em formato de linhas e colunas, nas matrizes, cada item
será identificado pela sua respectiva posição, sempre iniciando a contagem pelo índice zero. No
exemplo da Figura 2, o valor 4 é identificado pela posição [1][2], ou seja, está localizado na linha 1
e na coluna 2. Nesse exemplo de matriz, vemos que ela possui uma quantidade de linhas diferente
do número de colunas, também sendo possível criar matrizes quadradas, nas quais o número de
linhas e colunas é igual (PUGA; RISSETI, 2008).
5.2.3 Filas
As estruturas do tipo fila são conhecidas como FIFO (first in first out, em tradução livre, “o
primeiro que entra é o primeiro que sai”). Para esse tipo de estrutura, a linguagem Java fornece
classes específicas para a manipulação dos dados, a fim de permitir a inserção e a remoção deles no
formato FIFO. Observemos a Figura 3:
Figura 3 – Exemplo de uma estrutura de dados em formato fila
E D C B A
Nessa figura, vemos um exemplo de estruturas de dados em formato fila. Esse conceito
é muito utilizado na computação para a resolução dos mais variados problemas, desde filas de
atendimento a pessoas, sistemas bancários e comerciais, até sistemas que demandem organização
de informações em formato sequencial (ASCENCIO; ARAÚJO, 2008).
5.2.4 Pilhas
As estruturas do tipo pilha são conhecidas como FILO (first in, last out, em tradução livre,
“o primeiro que entra é o último que sai”). Para esse tipo de estrutura, a linguagem Java também
fornece classes específicas para a manipulação, as quais permitem a inserção e a remoção de dados
no formato FILO (ASCENCIO; ARAÚJO, 2008).
O conceito de pilhas é muito utilizado para a resolução de gerenciamento de recursos em um
computador, como no uso de memória em dispositivos móveis e no gerenciamento de aplicações
ativas em um celular.
De acordo com o exemplo da Figura 4, a seguir, os dados em pilha são, literalmente,
empilhados, forçando com que o primeiro elemento a entrar seja o último a sair, similar ao que
acontece em uma pilha de pratos, por exemplo.
52 Linguagens e paradigmas de programação
Entrada na fila
Último elemento
E
Saída da fila
Primeiro elemento
Nesta seção, vimos que as estruturas de vetores, matrizes, filas e pilhas podem ser aplicadas
na resolução de problemas diversos, sejam de baixo ou alto grau de complexidade. Ainda,
observamos que sua correta utilização em programas de computador pode trazer um expressivo
ganho computacional em questões de uso de memória e de processamento.
1 package exemplos;
2
3 public class Exemplo_Vetor {
4 public static void main(String[] args) {
5 double[] notas = new double [4];
6 notas [0] = 5.9;
7 notas [1] = 7.8;
8 notas [2] = 8.6;
9 notas [3] = 7.0;
10 double media = (notas[0] + notas[1] + notas [2] + notas [3]) / 4;
11 System.out.println("A média do aluno é: " + media);
12 }
13 }
Fonte: Elaborada pelo autor.
Estruturas de dados com linguagem de programação Java 53
1 2 3
4 5 6
7 8 9
Fonte: Elaborada pelo autor.
Nesse exemplo, conforme mostra o código da Figura 7, a seguir, os dados serão inseridos
em uma matriz quadrada de 3 linhas e 3 colunas, sendo a linha 0 para os números 1, 2 e 3; a linha
2 para os números 4, 5 e 6; e a linha 3 para os números 7, 8 e 9.
Figura 7 – Exemplo de código Java com matriz
1 package exemplos;
2 public class ExemploMatriz {
3 public static void main(String[] args) {
4 int[] [] numeros = new int[3] [3];
5 numeros [0] [0] = 1;
6 numeros [0] [1] = 2;
7 numeros [0] [2] = 3;
8 numeros [1] [0] = 4;
9 numeros [1] [1] = 5;
10 numeros [1] [2] = 6;
11 numeros [2] [0] = 7;
12 numeros [2] [1] = 8;
13 numeros [2] [2] = 9;
14 for (int i = 0; i <= 2; i++) {
15 for (int j = 0; j <= 2; j++) {
16 System.out.print(numeros[i] [j] + " ");
17 }
18 System.out.println();
19 }
20 }
21 }
Fonte: Elaborada pelo autor.
54 Linguagens e paradigmas de programação
1 package exemplos;
2 import java.util.LinkedList;
3 import java.util.Queue;
4
5 public class ExemploFila {
6 public static void main(String[] args) {
7 Queue<String> fila = new LinkedList<>();
8 fila.add("Pessoa 1");
9 System.out.println("A fila possui " + fila.size() + " pessoa(s)");
10 System.out.println(fila);
11 fila.add("Pessoa 2");
12 System.out.println("A fila possui " + fila.size() + " pessoa(s)");
13 System.out.println(fila);
14 fila.add("Pessoa 3");
15 System.out.println("A fila possui " + fila.size() + " pessoa(s)");
16 System.out.println(fila);
17 fila.poll();
18 System.out.println("Uma pessoa atendida");
19 System.out.println("A fila possui" + fila.size() + "pessoa(s)");
20 System.out.println(fila);
21 }
22 }
O exemplo, na Figura 8, utiliza o recurso da linguagem Java chamado queue, classe que
possibilita ao desenvolvedor elaborar algoritmos para estruturas de dados dos mais variados tipos.
Essa classe fornece métodos para contagem, inserção e remoção de elementos do início ou do fim
da estrutura, de forma que as estruturas fila e pilha possam ser codificadas com rapidez e eficiência.
Finalizando os exemplos de códigos Java na demonstração de estruturas de dados, veremos
um exemplo para a estrutura pilha, no qual será implementado o processo LIFO, representando
uma pilha de livros e a maneira como serão colocados e retirados dela.
A Figura 9, a seguir, mostra o funcionamento do algoritmo. Para esse exemplo, foi utilizado
um recurso Java chamado Stack, classe que possibilita criar estruturas para representar pilhas e
executar o processo LIFO.
Figura 9 – Exemplo de código Java para estrutura pilha
1 package exemplos;
2 import java.util.Stack;
3
4 public class ExemploPilha {
5
6 public static void main(String[] args) {
7 Stack <String> livros = new Stack <String>();
8 System.out.println("Colocando 3 livros da pilha...");
9 livros.push("Livro 01");
10 livros.push("Livro 02");
11 livros.push("Livro 03");
12 System.out.println("Livros contidos na pilha: " + livros);
13 System.out.println("Retirando um livro da pilha...");
14 livros.pop();
15 System.out.println("Colocando outro livro na pilha...");
16 livros.push("Livro 04");
17 System.out.println("Livros contidos na pilha: " + livros);
18 }
19 }
Considerações finais
As estruturas de dados são recursos importantes e amplamente utilizados em sistemas
computacionais, além disso auxiliam na modelagem e na resolução de problemas de maior
complexidade. A linguagem Java, assim como outras linguagens modernas, possui ferramentas
avançadas e, se comparada às variáveis, traz mais ganhos, pois torna o trabalho do desenvolvedor
mais ágil, otimiza o custo computacional e resulta em um desempenho melhor do sistema final.
A linguagem Java possui recursos capazes de ajudar no desenvolvimento de algoritmos que
utilizem estruturas de dados. Suas especificidades também contribuem para o bom aproveitamento
do desenvolvedor, o qual deve conhecer os recursos que a linguagem oferece e estar sempre atualizado.
Os programas de computador operam com os mais variados tipos de dados e as soluções
computacionais devem estar em concordância com os processos realizados para essas estruturas
– sejam vetores, matrizes, filas ou pilhas –, que, por sua vez, devem dar suporte para as situações
reais de nosso cotidiano.
Atividades
1. Vetores e matrizes em linguagem Java utilizam colchetes para sua identificação. Verifique se
as declarações de vetor e matriz a seguir funcionam e desenvolva uma explicação.
2. Considerando a afirmação “o tipo fila implementa o processo FIFO (o primeiro que entra é
o primeiro que sai)”, identifique quatro atividades realizadas diariamente pelas pessoas que
são exemplos de fila.
Referências
ASCENCIO, A. F. G.; ARAÚJO, G. S. de. Estruturas de dados, algoritmos, análise da complexidade e
implementações em Java e C/C++. São Paulo: Pearson, 2008.
DEITEL, P.; DEITEL, H. Java: como programar. 8. ed. São Paulo: Pearson, 2010.
PUGA, S; RISSETI, G. Lógica de programação e estruturas de dados com aplicação em Java. 2. ed. São Paulo:
Pearson, 2008.
6
Paradigmas de programação
>qsort[] = []
> qsort[] (x:xs) = qsort small ++ mid ++ qsort large
> where> small = [y | y<-xs, y<x]
> mid = [y | y<-xs, y==x] ++ [x]
> large = [y | y<-xs, y>x]
i = left;
j = right;
x = a[(left + right) / 2];
while(i <= j) {
while(a[i] < x && i < right) {
i++;
}
while(a[j] > x && j > left) {
j--;
}
if(i <= j) {
y = a[i];
a[i] = a[j];
a[j] = y;
i++;
j--;
}
}
> imprimeLista [ ] = [ ]
> imprimeLista (x:xs) = print x imprime xs
1 Multithread ou multithreading é um recurso disponível nos sistemas operacionais que permite a execução simultânea
de várias threads. Thread, por sua vez, é uma porção de código escrito para compartilhar recurso computacional de
processamento em um computador.
62 Linguagens e paradigmas de programação
memória para a CPU, e os resultados das operações lógicas e aritméticas são devolvidos da CPU
para que sejam armazenados na memória (MELO; SILVA, 2014).
De acordo com a arquitetura de von Neumann, as características principais das linguagens
imperativas são:
• variáveis utilizadas para identificação de espaços de memória;
• comandos de atribuição de valores para preenchimento dos espaços de memória;
• execução das instruções de programa de modo sequencial e iterativo, na forma de
estruturas de repetição;
• realização de operações lógicas e aritméticas com utilização de operadores, aplicáveis aos
conteúdos armazenados em locais de memória (variáveis).
A seguir, veremos mais detalhes sobre essas características.
• Variáveis: são utilizadas para manter o estado de um programa imperativo e associadas
com locais de armazenamento que correspondem a um endereço de memória para que,
em determinado momento da execução, ele receba um valor. O valor de uma variável
pode ser acessado e alterado por meio de comandos ou atribuições de valores.
• Atribuições: são comandos utilizados para preenchimento de uma variável (local de
memória), com valores obtidos de resultados de cálculos internos de um algoritmo ou
por meio da entrada de meios externos.
• Sequência: a programação imperativa determina que as linhas de comando de um
programa sejam escritas para execução realizada de modo sequencial. Todas as instruções
de um programa escrito em paradigma imperativo, portanto, devem ser elaboradas de
maneira que sejam executadas uma a uma, sequencial e ordenadamente.
2 Álgebra booleana é a base para a computação atual, na qual os sistemas são estruturados em proposições que assumem
valores verdadeiros ou falsos. O conceito de zeros (0) e uns (1) aplicado na computação é originário da álgebra booleana.
Paradigmas de programação 63
A linguagem lógica mais popular, e maior responsável pela difusão desse paradigma de
programação, é a Prolog. Quase todos os exemplos na apresentação desse paradigma são escritos
nessa linguagem, por ser utilizada de modo geral e especialmente associada com a inteligência
artificial e a linguística computacional.
A estrutura básica de um programa em paradigma lógico consiste em fatos, os quais são tidos
como proposições, ou seja, declarações lógicas que não têm nenhuma regra para sua veracidade e,
portanto, são consideradas condições verdadeiras. Na Figura 4, podemos observar a declaração de
alguns fatos em linguagem Prolog.
Figura 4 – Declaração de fatos em Prolog
homem(jonas).
homem(silvio).
mulher(ana).
mulher(cintia).
pai(jonas, silvio).
pai(jonas, cintia).
mae(ana, silvio).
mae(ana, cintia).
De acordo com o exemplo, na primeira linha temos a proposição de que Jonas é homem e na
terceira, de que Ana é mulher. Já a quinta proposição determina que Jonas é pai de Silvio.
Dentro da estrutura de programação lógica, identificadores de relacionamentos (homem,
mulher, pai, mãe e filhos) são denominados predicados. Já os identificadores de objetos (Jonas, Ana
e Silvio) são denominados átomos. A linguagem Prolog determina que ambos devem ser sempre
escritos com a primeira letra minúscula e sem o uso de caracteres especiais ou de acentuação, como
vemos na Figura 4.
Ao se preparar um conjunto de declarações e fatos para compor um programa em Prolog,
é possível interagir com esse conjunto por meio de perguntas. O objetivo é identificar se existem
relacionamentos verdadeiros dentre as declarações e fatos ou, ainda, quais as possibilidades
de relacionamento entre os objetos. A seguir, vejamos alguns exemplos de consultas sobre as
declarações apresentadas anteriormente, com a utilização do comando ?.
• ? – homem(jonas): essa sentença faz uma pergunta para identificar se jonas é homem. Em
caso afirmativo, a resposta será yes.
• ? – pai(jonas, X): esse exemplo pergunta ao sistema quem são os filhos de jonas, ou
seja, quais as relações existentes de parentesco paterno para jonas. A letra X representa
uma variável que receberá os resultados da consulta, retornando X = silvio. Para que
o Prolog realize mais consultas sobre o parentesco paterno, basta usar ponto e vírgula
para obter X = joana, indicando que joana é filha de jonas. Para encerrar a consulta, é
usada a tecla enter.
Na linguagem Prolog, as variáveis são escritas com letras maiúsculas e, como podemos ver
no exemplo apresentado, a letra X representa uma variável.
64 Linguagens e paradigmas de programação
1 #include <stdio.h>
2 int main()
3 {
4 int numero;
5 int fatorial = 1;
6 printf(“Digite um número inteiro:”);
7 scanf(“%d”, &numero);
8 for(int i = 1; i <= numero; i++){
9 fatorial = fatorial *
i;
10 }
11 printf(“Fatorial de %d é: %d”, numero, fatorial);
12 }
Digite um número inteiro:6
Fatorial de 6 é: 720
Fonte: Elaborada pelo autor.
Paradigmas de programação 65
1 pai(arthur,silvio).
2 pai(arthur,carlos).
3 pai(carlos,xico).
4 pai(silvio,ricardo).
5 avo(x,z) :- pai(x,y), pai(x,y),
6 write(x)
7 write(‘ é avô de ’), write(z).
?- avo(x,y)
Considerações finais
Neste capítulo, foram analisados os paradigmas de programação funcional, imperativo e
lógico, por serem os mais conhecidos e aplicados em projetos de sistemas computacionais. Eles
apresentam distinções e propósitos de aplicação diferenciados, cada qual com suas particularidades
e formas de utilização.
Vimos que cada paradigma atende a necessidades específicas, de modo que corresponde
ao domínio para o qual foi originalmente proposto, apresentando, a depender da situação, mais
vantagens no desenvolvimento de sistemas. Nesse sentido, podemos compreender que cada
paradigma oferece conceitos, técnicas e abstrações apropriadas para esses domínios de aplicação
(TUCKER; NOONAN, 2010).
66 Linguagens e paradigmas de programação
Atividades
1. Explique o conceito de recursividade presente em linguagens de paradigma funcional.
Referências
ASCENCIO, A. F. G.; CAMPOS, E. A. V. de. Fundamentos da programação de computadores. 3. ed. São Paulo:
Pearson, 2012.
MELO, A. C. V. de; SILVA, F. S. C. da. Princípios de linguagens de programação. São Paulo: Blucher, 2014.
TUCKER, A. B.; NOONAN, R. E. Linguagens de programação: princípios e paradigmas. 2. ed. São Paulo:
Mc Graw Hill, 2010.
7
Paradigma de programação
orientada a objetos
com a linguagem Smalltalk 80, a ideia de objeto ganhou mais importância, visto que, em uma
tentativa de aproximar o paradigma de programação ao mundo real e imitar os processos
de cognição humana de relacionar diferentes elementos para responder aos estímulos da
realidade, tudo nessa linguagem são objetos e cada um deles é uma instância de uma classe. A
Smalltalk foi bastante influente, uma vez que com base nela foram criadas outras linguagens
de programação orientada a objetos, como Eiffel e Java.
mesmo tipo de classe predeterminada. De modo geral, esse exemplo da classe carro e seus objetos
podem ser representados conforme a figura a seguir.
Figura 1 – Exemplo de uma classe carro
Carro
Gol 2016
Fiesta 2015
Fusca 1986
Fonte: Elaborada pelo autor.
Nesse contexto, é relevante afirmar que os objetos não são, necessariamente, coisas que
existem no mundo físico. Podem ser agrupados em três tipos:
• Tangíveis:
• supermercado;
• caixa de leite;
• cartão de débito.
Com relação a objetos, é preciso considerar que não há um modelo fechado em sua
classificação, e isso varia conforme a modelagem, podendo haver uma enorme variedade de objetos
e classes entre eles. Imaginemos um objeto como algo que guarda os dados ou as informações
sobre sua estrutura e possui um comportamento definido pelas suas operações (PUGA; RISSETTI,
2008).
Classes, assim como seus atributos, podem ser privadas ou públicas. Naturalmente, uma
classe que inicie com o termo public significa que é pública. Já um atributo, ou seja, um objeto
identificado com private é visível apenas à classe pertencente. A seguir, a Figura 2 representa um
exemplo em linguagem Java.
Figura 2 – Exemplo de classe em linguagem Java
70 Linguagens e paradigmas de programação
No exemplo da Figura 2, observamos que foi definida uma classe pública chamada
Funcionario, com três atributos privados: salario, nome e dataAdmissao. Com isso, a referida classe
pode ser acessada por qualquer função ou até mesmo por outras classes dentro do programa,
enquanto os atributos salario, nome e dataAdmissao somente podem ser acessados na classe
Funcionario.
Como vimos, a programação orientada a objetos consiste na relação entre objetos e classes,
por isso as possibilidades de combinações são enormes. Em cada classe há atributos, isto é, objetos
que se referem a elas. Para representar a classe círculo, por exemplo, não se pode ter o atributo
largura. Deve-se ter atributos como diâmetro, raio, comprimento e outros. Assim, podemos afirmar
que uma classe retângulo também pode ter os atributos largura e altura.
Agora, imaginemos o seguinte: temos um círculo azul, com 50 cm de diâmetro e 25 cm de
raio; e outro círculo, transparente, com diâmetro de 400 cm e raio de 200 cm. Podemos notar que
os círculos são diferentes, mas isso não significa que façam parte de classes diferentes. Embora
elementos do tipo cor, valores do raio e do diâmetro sejam próprios de cada círculo, correspondem
a instâncias do objeto de uma mesma classe, apenas com atributos diferentes. Desse modo, podemos
ter infinitas combinações de círculos, dependendo da instanciação de cada objeto da mesma classe.
Em termos mais simples, podemos criar vários objetos a partir da mesma classe. Ao tomar
um círculo (classe) e alterar o valor (instância) do seu diâmetro (atributo), podemos ter alterado
apenas um círculo, e não o conjunto todo, conforme a figura a seguir apresenta:
Figura 3 – Exemplo de instanciação de objetos
Circulo
- string: cor
circulo01: instância de circulo
- double: raio circulo02: instância de circulo
- double: diametro
- double: comprimento
- double: area
- double: volume
circulo01 circulo02
Na Figura 3, podemos observar que a programação orientada a objetos tem como base o
conceito de objetos e classes, que derivam subclasses e instâncias responsáveis por executar relações
entre si para o funcionamento dos programas. Essa comunicação entre objetos acontece por meio
de mensagens, como se um objeto fizesse uma solicitação a outro e recebesse uma resposta em
troca, segundo os atributos e as operações da própria classe.
Veiculo
Subclasse, comumente conhecida como classe filha ou classe derivada, na linguagem Java, é a
nova classe criada que herdará os componentes de uma superclasse. Ela também pode ser empregada
como superclasse para outro conjunto de objetos criados posteriormente. Assim, uma classe pode
ser superclasse e subclasse ao mesmo tempo, sem causar nenhum problema na execução do código.
É importante lembrar que todo objeto de uma subclasse pertence à sua superclasse, mas nem todo
objeto de uma superclasse estará naquela que herdou seus atributos e métodos. Vejamos nas Figuras 5
e 6 um exemplo, em linguagem Java, de como aplicar herança e compartilhar atributos em comum:
Figura 5 – Exemplo de classes compartilhando atributos
Veiculo
-string: modelo
-string: marca
-int: potencia
Na Figura 5, temos a superclasse Veiculo, que define atributos em comum para todos os tipos
de veículos, e as subclasses Carro, Moto e Onibus, que possuem atributos que as diferenciam. Por
herança, essas classes recebem todos os atributos definidos em Veiculo.
Na linguagem Java, conforme exemplo da Figura 6, para determinarmos que uma classe
herdará atributos de outra classe, e que se tornará uma subclasse, é utilizada a palavra reservada extends
em sua declaração. Extends significa que a classe em questão herdará os membros da classe indicada.
Paradigma de programação orientada a objetos 73
Quando utilizamos herança nos códigos escritos em Java, não há necessidade de reescrever
nas subclasses os atributos que estão descritos na superclasse. Implicitamente, os atributos da
superclasse foram incorporados nas classes filhas por intermédio da palavra extends, e dessa
maneira a máquina virtual do Java consegue identificar as classes que herdam atributos.
Considerações finais
Atualmente, ao usarmos um computador, estamos usufruindo de, em média, 50 anos de
refinamento. A programação, antes, era demorada e trabalhosa. Os programadores introduziam
os programas diretamente na memória principal do computador por meio de bancos de chaves
(interruptores), escrevendo-os na quase inacessível linguagem binária – uma programação
muito propensa a erros, cuja manutenção do código se tornou praticamente impossível devido
à falta de estrutura.
Quando os computadores se tornaram mais comuns, linguagens de nível mais alto e
procedurais começaram a aparecer, sendo a primeira delas a Fortran. Entretanto, linguagens
posteriores, como Algol, tiveram mais influência sobre a orientação a objetos.
As linguagens procedurais permitem ao programador reduzir um programa em
procedimentos refinados para processar dados, e esses procedimentos refinados definem a
estrutura global do programa. Chamadas sequenciais a esses procedimentos geram a execução de
um programa procedural; o programa termina, vale destacar, quando acaba de chamar sua lista de
procedimentos.
74 Linguagens e paradigmas de programação
Atividades
1. Defina o que são classes, objetos e instâncias de classes.
2. Elabore uma classe com três atributos, montando sua representação gráfica e seu respectivo
código em linguagem Java.
3. Elabore um exemplo em linguagem Java que defina uma superclasse chamada conta bancária
e crie duas heranças para definir conta corrente e conta poupança.
Referências
BARNES, D. J.; KÖLLING, M. Programação orientada a objetos com Java. 4. ed. São Paulo: Pearson, 2008.
DEITEL, P.; DEITEL, H. Java: como programar. 8. ed. São Paulo: Pearson, 2010.
PUGA, S.; RISSETTI, G. Lógica de programação e estruturas de dados com aplicação em Java. 2. ed. São Paulo:
Pearson, 2008.
8
Tendências em linguagens de programação
O conceito de Big Data vem sendo aplicado em diversos segmentos de negócios, como nas
áreas médica, industrial, financeira, científica e meteorológica aeroespacial, entre outras. Assim, as
linguagens de programação estão passando por um processo recente de adequação, a fim de dar
suporte ao processamento de volumes maiores de informação, algo diferente do que existia há uma
ou mais décadas.
Considerando o processamento de volumes de dados cada vez maior, algumas linguagens
e ferramentas têm se destacado e vêm sendo amplamente aplicadas em projetos diversificados.
As linguagens de programação e as ferramentas que estudaremos a seguir são as mais utilizadas
neste momento em que acompanhamos uma necessidade mais expressiva de processamento e
de crescimento no volume de dados oriundos das mais diversas fontes conectadas à internet. As
aplicações que abordaremos são voltadas para várias áreas, sendo que algumas das linguagens são
mais específicas a determinados segmentos, enquanto outras podem ser aplicadas em uma ampla
gama de sistemas informatizados.
Artigo
Sugerimos a leitura do artigo Python: 10 motivos para aprender a linguagem
em 2019, que oferece informações interessantes sobre esta ser uma linguagem
de relevante aprendizado.
Disponível em: https://computerworld.com.br/2019/09/15/python-10-motivos-
para-aprender-a-linguagem-em-2019/. Acesso em: 28 jan. 2020.
8.1.2 Linguagem R
Essa linguagem de programação é voltada para a estatística computacional, sendo bastante
aplicada em projetos que operam grandes volumes de dados com a mineração deles. Embora sua
sintaxe de programação não seja tão simples, como ocorre nas linguagens Python e JavaScript, ela
é poderosa no processo de extração de informações de grandes bases de dados.
Com o advento conhecido como Big Data, a linguagem R acabou ganhando destaque
nos últimos anos por ser utilizada em empresas como Facebook, Twitter e Google (THE R
FOUNDATION, 2019).
É importante frisar que a linguagem SQL trabalha somente com dados organizados e
distribuídos em tabelas relacionadas, e que esses dados precisam ser condicionados em formatos
adequados, para processamento em conjunto com outros tipos de dados que compõem uma
solução de Big Data.
Para o profissional de desenvolvimento de software, independentemente de sua área
de atuação, conhecer SQL é fundamental. Os sistemas computacionais em sua grande maioria
armazenam informações em banco de dados ,pois em várias situações este profissional irá
interagir com um banco de dados preexistente ou até mesmo irá participar do projeto de
construção de um banco de dados.
8.1.7 Linguagem Go
Criada pelo Google, possui familiaridade com a linguagem C e vem recebendo críticas
positivas por sua facilidade de escrita de códigos e sua robustez. Boa parte do sucesso atribuído
a ela e de sua aceitação no mercado vem do fato de ser uma linguagem que possibilita executar
rotinas de outras linguagens, além de ser de programação rápida.
A linguagem Go surgiu para aplicação de análise de dados em segmentos que geram grandes
volumes deles, como saúde, agricultura, indústria, varejo, entre outros (GO, 2019).
Considerações finais
O mercado de desenvolvimento de soluções computacionais se tornou mais abrangente
nos últimos anos, e vem demandando tecnologias capazes de promover um nível maior de
integração entre dispositivos e processos. Os crescentes aperfeiçoamentos na fabricação de
produtos eletrônicos, a expansão da área de abrangência e o aumento da velocidade das redes
de comunicação fizeram com que a oferta de serviços baseados em internet, computação em
nuvem e dispositivos móveis levassem a um incremento no volume de dados gerados e a serem
processados.
As ferramentas modernas e os novos projetos de sistemas começam a levar em consideração
o processamento e o armazenamento de dados, que, por sua vez, tendem a crescer gradativamente
e exigem maior poder computacional, além de segurança no gerenciamento.
Com isso, os profissionais de tecnologia da informação precisam desenvolver um perfil
que ultrapasse o conhecimento das competências técnicas na área de programação. Começa a ser
exigido que tenham conhecimentos acerca de um novo ambiente, em que os dados e as tecnologias
estão em sinergia, buscando favorecer o sucesso dos negócios e das corporações.
Atividades
1. Por que Python é umas das principais linguagens de programação aplicadas em projetos de
ciência de dados?
2. Java é uma linguagem de programação consolidada no mercado. Conhecê-la pode ser útil
em qual cenário?
3. SQL é uma linguagem aplicada para banco de dados em vários níveis de sistemas, Qual a
importância em conhecê-la?
Referências
GARTNER. Leading the IoT: Gartner insights on how to lead in a connected world. Stanford: Gartner, 2017.
Disponível em: https://www.gartner.com/imagesrv/books/iot/iotEbook_digital.pdf. Acesso em: 10 out. 2019.
JULIA. The Julia language, 2019. Página inicial. Disponível em: https://docs.julialang.org/en/v1/index.html.
Acesso em: 10 out. 2019.
SCALA. Página inicial. Disponível em: https://www.scala-lang.org/. Acesso em: 10 out. 2019.
THE R FOUDATION. R-project, 2019. Página inicial. Disponível em: https://www.r-project.org/. Acesso
em: 10 out. 2019.
TIOBE Software BV. Tiobe: the software quality company, 2020. Tiobe Index for January 2020. January
Headline: Programming Language C awarded Programming Language of the Year 2019. Disponível em:
https://www.tiobe.com/tiobe-index/. Acesso em: 13 jan. 2020.
Gabarito
1 Linguagens de programação
1. Para o desenvolvimento de sistemas de computação em nuvem, as linguagens mais
usadas são: Python, Java, .NET, PHP, JavaScript, Ruby, R, Go e Dart. Todas elas são de
paradigma orientado a objetos, uma metodologia de programação que será estudada
mais à frente, ao longo dessa obra.
Vale ressaltar que Python é uma linguagem de programação orientada a objetos que
também implementa o paradigma funcional. Ainda, JavaScript, em suas atualizações
mais recentes, vem trazendo recursos que permitem implementar o paradigma funcional.
84 Linguagens e paradigmas de programação
2. As estruturas podem ser aplicadas em casos nos quais os tipos de dados primitivos de uma
linguagem não suprem as necessidades. Dessa forma, é possível o desenvolvedor do sistema
criar seus próprios tipos de dados.
2. significa que a linguagem Java faz diferenciação entre letras maiúsculas e minúsculas na
nomenclatura de variáveis, ou seja, duas variáveis que tenham nomes iguais, porém com
diferenciação entre caracteres maiúsculos e minúsculos, serão tratadas pela linguagem Java
como variáveis diferentes.
2. São exemplos de fila vivenciados em nosso cotidiano: fila para pegar ônibus, fila para pesar
comida no buffet, fila para abastecer o carro no posto de combustível, fila no caixa do
supermercado.
Gabarito 85
6 Paradigmas de programação
1. Recursividade é uma propriedade presente em linguagens funcionais que permite a uma
função ser chamada dentro dela mesma, de modo que esta seja realizada de forma encadeada.
2. As linguagens lógicas irão trabalhar com um conjunto de fatos, e sobre estes fatos e sentenças
o programa irá procurar inferir resultados que validem ou não as sentenças lógicas.
2. Exemplo de resolução:
3. Exemplo de resolução:
ContaBancaria
-String: cliente
-String: nroConta
ContaCorrente ContaPoupanca
-double: saldo -double: saldo
-String: pagamentos -double: taxaJuros
86 Linguagens e paradigmas de programação