Você está na página 1de 90

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO

VALDINEI J. SAUGO

Código Logístico Fundação Biblioteca Nacional


ISBN 978-85-387-6523-3

58843 9 788538 765233


Linguagens e
paradigmas de
programação

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

CIP-BRASIL. CATALOGAÇÃO NA PUBLICAÇÃO


SINDICATO NACIONAL DOS EDITORES DE LIVROS, RJ
S273L
Saugo, Valdinei J.
Linguagens e paradigmas de programação / Valdinei J. Saugo. - 1. ed. - Curitiba
[PR] : IESDE, 2020.
86 p. : il.
Inclui bibliografia
ISBN 978-85-387-6523-3
1. Linguagem de programação (Computadores). I. Título.
CDD: 005.13
19-60714
CDU: 004.43

Todos os direitos reservados.

IESDE BRASIL S/A.


Al. Dr. Carlos de Carvalho, 1.482. CEP: 80730-200
Batel – Curitiba – PR
0800 708 88 88 – www.iesde.com.br
Valdinei J. Saugo
Especialista em Engenharia de Software pela Pontifícia Universidade Católica do Paraná
(PUCPR) e em Sistemas Embarcados pela Universidade Positivo. Bacharel em Sistemas da
Informação pela Unibrasil. Profissional de Tecnologia da Informação com experiência em
consultoria e desenvolvimento de projetos de software e hardware para metrologia industrial,
automação industrial e controle de acesso com tecnologia RFID. Professor no ensino de
desenvolvimento de software na área de Tecnologia da Informação e Internet das Coisas.
Sumário

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

2 Tipos de linguagens de programação 19


2.1 Classificação das linguagens de programação 19
2.2 Linguagens de programação estruturadas 20
2.3 Linguagens de programação orientadas a objetos 21
2.4 Linguagens de programação funcionais 24

3 Tipos de dados em linguagens de programação 29


3.1 Definição de dados em linguagens de programação 29
3.2 Dados primitivos em linguagens de programação 30
3.3 Criação de dados em linguagens de programação 34

4 Introdução à linguagem de programação Java 39


4.1 Surgimento da linguagem Java e suas aplicações 39
4.2 Tipos de dados e sintaxe da linguagem Java 41
4.3 Programação em linguagem Java e exemplos de aplicação 43

5 Estruturas de dados com linguagem de programação Java 49


5.1 O que são estruturas de dados 49
5.2 Definição de vetores, matrizes, filas e pilhas em linguagem Java 50
5.3 Algoritmos de estruturas de dados em linguagem Java 52

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

8 Tendências em linguagens de programação 75


8.1 Futuro das linguagens de programação 75
8.2 Linguagens de programação mais promissoras 79

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.

Existem paradigmas e linguagens de programação adequados para cada necessidade do


mercado – sistemas eletrônicos e de internet, por exemplo, utilizam metodologias distintas. Dessa
forma, esta obra destina-se não apenas a informar os leitores sobre o que é tecnologia e software,
mas também visa orientá-los nas diferentes aplicações de sistemas e de linguagens de programação
para reconhecer quais as tecnologias mais adequadas a cada situação.

O livro está estruturado em oito capítulos e aborda, inicialmente, conceitos inerentes às


linguagens e paradigmas de programação e, na sequência, as metodologias de programação
orientada a objetos, programação funcional e programação lógica. Por fim, conclui o conteúdo
com uma apresentação de tendências de mercado para linguagens de programação e sistemas.

Bons estudos!
1
Linguagens de programação

A tecnologia da informação apresenta uma infinidade de segmentos, cada um com suas


particularidades e usabilidades. O profissional do setor, portanto, sempre contará com um grande
volume de conteúdo a ser explorado. Nesse sentido, um dos diferenciais mais importantes a quem
trabalha na área é adquirir conhecimentos em programação de computadores.
O contínuo avanço desse mercado, nas últimas décadas, levou a Central de Processamento
de Dados (CPD), como era chamado o departamento de informática das organizações, a superar
sua restrição apenas às tarefas técnicas de operação e manutenção de sistemas para ocupar
posições estratégicas.
A evolução da internet, somada aos serviços e dispositivos cada vez mais integrados na
rede, em todos os níveis da sociedade, torna hoje imprescindível a presença de um profissional de
tecnologia da informação. Nesse cenário em que a tecnologia está presente em nossas residências
e em nosso cotidiano por meio de computadores, eletrônicos, eletrodomésticos, smartphones e
smart TVs, por exemplo, é necessário um corpo técnico de engenheiros e de desenvolvedores
de sistemas para projetar e programar equipamentos funcionais às nossas necessidades. Assim,
quando falamos de linguagens de programação, nós as reconhecemos capazes de atender às mais
variadas demandas, nos mais diversos segmentos do mercado.
Neste capítulo, trataremos dos assuntos que introduzem os conceitos das linguagens de
programação, como surgiram e suas principais características, aplicações e utilidades para o
profissional moderno de tecnologia da informação.

1.1 Surgimento das linguagens de programação


Vídeo
Linguagens de programação são linguagens técnicas, utilizadas para
desenvolver sistemas e comunicação com o computador. Em sua totalidade, são
constituídas de comandos que, quando utilizados de forma adequada, executam
uma ou mais ações. Assim, podemos afirmar que um software em utilização no
computador é um conjunto predefinido de comandos e sentenças lógicas que
realizam as ações para as quais aquele sistema foi desenvolvido. Os próprios sistemas operacionais
que utilizamos nos computadores ou celulares, por exemplo, foram escritos com base em uma ou
mais linguagens de programação.
O surgimento dos primeiros computadores elétricos aconteceu na década de 1930 e veio
em substituição a equipamentos mecânicos utilizados na época. Apenas em 1948, Konrad Zuse
publicou seu estudo para uma nova linguagem de programação, chamada Plankalkül. Entretanto,
naquele tempo, seu feito ainda não tinha muita utilidade e acabou sendo esquecido (COMPUTER
HISTORY MUSEUM, 2019).
10 Linguagens e paradigmas de programação

A partir do início da década de 1950, surgiram as primeiras linguagens de programação até


então modernas, destacando-se Fortran (Formula Translation) e Cobol (Common Business-Oriented
Language), hoje consideradas clássicas. A linguagem de programação Fortran foi desenvolvida
pela empresa americana International Business Machines (IBM) para ser utilizada em projetos
científicos e de engenharia, os quais demandavam complexidade em cálculo matemático, sendo
que, inicialmente, foi amplamente utilizada por matemáticos e cientistas. À época, as instruções
para programas de computador eram uma tarefa trabalhosa; depois, no entanto, 1.000 instruções
de códigos foram facilmente traduzidas para 47 instruções em Fortran, por exemplo (IBM, 2019).
Já a linguagem de programação Cobol foi desenvolvida no final da década de 1950 por
fabricantes e usuários de computadores do governo norte-americano. Sua aplicação era voltada
ao desenvolvimento de sistemas comerciais que exigiam manipulação precisa e eficiente de um
grande volume de dados. Vale ressaltar que boa parte das aplicações de empresas varejistas ainda é
desenvolvida em linguagem Cobol.
Durante a década de 1960, uma pesquisa foi conduzida em Dartmouth College e resultou na
evolução da programação estruturada que, naquele momento, foi considerada uma opção para a
escrita mais clara dos programas de computador, fácil de testar e de modificar. Um dos resultados
mais importantes da pesquisa foi o desenvolvimento da linguagem de programação Pascal, pelo
professor Niklaus Wirth1, em 1971 – batizada, assim, para homenagear o matemático e filósofo Blaise
Pascal2. Essa linguagem acabou sendo adotada no ensino de programação estruturada em ambientes
acadêmicos e logo se tornou a preferida na maioria das universidades (DEITEL, P.; DEITEL, H., 2010).
Os paradigmas da programação começaram a despontar na década de 1960 e foram, em
grande parte, elaborados na década de 1970, momento em que surgiram importantes linguagens
na área, como:
• Simula: foi a primeira linguagem de programação que deu suporte ao conceito de classes.
• C: uma das primeiras linguagens de programação aplicada a sistemas e que, atualmente,
tem uma grande influência.
• Basic: desenvolvida com o objetivo de escrever programas simples, sendo seu principal
propósito familiarizar os iniciantes com as técnicas de programação.
• Prolog: foi elaborada em 1972 e considerada a primeira com paradigma lógico; é uma das
linguagens utilizadas no desenvolvimento e ensino de técnicas de inteligência artificial.

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

Na década de 1990, algumas linguagens de programação foram aprimoradas e outras


surgiram com o foco redirecionado para um novo modelo de sistemas, agora integrado à rede
e permeado por diversas outras interações que a evolução da internet começou a oferecer. Aqui,
estamos falando de linguagens como Java, JavaScript e PHP, mais completas e modernas que as
existentes na época, trazendo melhorias aos processos de desenvolvimento de sistemas – todas
relacionadas com a internet –, e também Visual Basic e Object Pascal, bastante utilizadas em
aplicações corporativas (DEITEL, P.; DEITEL, H., 2010).
Quando tratamos de linguagens de programação, é difícil afirmar se uma é melhor que a
outra. O que pode existir são vantagens e desvantagens ao compará-las, portanto, é importante
que o profissional de tecnologia possua conhecimento sobre as especificidades de cada uma delas
para utilizar a mais apropriada em cada situação. A linguagem Java, por exemplo, é considerada
robusta e possibilita desenvolver aplicações web de grande porte, aplicativos móveis e aplicações
para Windows, Linux e macOS. Já a linguagem PHP, que é destinada a sistemas web, não possibilita
desenvolver um aplicativo para smartphones.
As linguagens de programação fazem parte do cotidiano do profissional de tecnologia da
informação e estão presentes em todos os equipamentos eletrônicos atuais (dispositivos móveis,
sistemas operacionais, sistemas corporativos e sistemas em nuvem). Direta ou indiretamente, o
profissional dessa área terá contato com tais tecnologias, tanto para manutenção e desenvolvimento
de sistemas como para especificação de projetos ou suporte técnico.
Por fim, podemos observar que as linguagens de programação vêm evoluindo, tornando-se
mais robustas, acessíveis e com novas funcionalidades, além de mais adaptáveis e compatíveis com
as atuais demandas do mercado e dos sistemas informatizados modernos.

1.2 Definição das linguagens de programação


Vídeo
Os primeiros computadores que surgiram eram programados em linguagem
de máquina, ou seja, as instruções eram definidas utilizando-se sequências de
números zero e um, que diziam exatamente o que a máquina deveria realizar. Esses
programas iniciais realizavam operações chamadas de nível baixo, pois consistiam
em mover dados de um lugar para outro ou realizar comparação entre registradores
de memória. Porém, essas tarefas eram demoradas e cansativas de se preparar e, após finalizadas
essas instruções, sua leitura e modificações, quando necessárias, eram complexas (AHO et al.,
2008).
As linguagens de programação possuem propriedades que podem ser classificadas quanto
às suas características, às suas funcionalidades e ao seu paradigma de programação. Quanto ao
seu tipo, as linguagens de programação podem ser organizadas em três grupos básicos: linguagem
de máquina, linguagem de montagem (assembly) e linguagem de alto nível. Vejamos a seguir as
especificidades de cada uma delas.
12 Linguagens e paradigmas de programação

1.2.1 Linguagem de máquina


Um programa construído em linguagem de máquina é escrito em formato legível apenas
para os computadores, ou seja, é uma sequência de bytes com as instruções que serão executadas
pelo processador, sendo cada uma delas uma tarefa que o processador realizará de modo sequencial.
Para escrever um programa com essa linguagem, é necessário ter em mãos os códigos de
instruções do processador e possuir conhecimentos acerca de sua arquitetura, porém, obter esses
códigos e gerenciá-los é uma tarefa árdua.
O desenvolvimento de um software com linguagem de máquina é algo aplicado em situações
muito específicas, sendo raramente utilizado em sistemas direcionados aos usuários finais. Devido
a sua complexidade, foi criada a linguagem chamada assembly, composta por códigos e siglas que
representam as mesmas instruções do processador e facilitam o desenvolvimento de códigos de
baixo nível, quando houver essa necessidade (SILVA, 2015).

1.2.2 Linguagem assembly


Utiliza a língua inglesa para representar as operações básicas de um programa escrito em
assembly. Existem os programas chamados assemblers, que realizam a conversão de um programa
escrito nessa linguagem para a linguagem de máquina, que, por sua vez, é legível pelo processador.
Vejamos a figura a seguir:
Figura 1 – Exemplo de código em assembly

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.

1.2.3 Linguagem de alto nível


Linguagens de alto nível são as mais utilizadas, pela maioria dos profissionais de tecnologia,
no desenvolvimento de sistemas e serão o nosso principal objeto de estudos. Elas consistem em
uma sintaxe que se assemelha à nossa escrita e, normalmente, a língua inglesa é escolhida para sintaxe: em
linguagem de
registrar as instruções. programação,
é a estrutura de
No alto nível, toda a complexidade da assembly e da linguagem de máquina ficam a cargo escrita de códigos
e comandos
de um compilador, que será o responsável por converter as instruções legíveis para os humanos utilizados.

em um programa com instruções para o computador. Na Figura 2, podemos observar as etapas da


construção de um programa usando linguagem de alto nível.
Figura 2 – Etapas de produção com linguagem de alto nível
Código executável
Escrita do programa Compilação
em memória

Código-fonte Código-objeto Código executável


Compilador Carregador Execução

Fonte: Elaborada pelo autor.

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

Figura 3 – Exemplo de código em linguagem de alto nível

>>> numero1 = 20
>>> numero2 = 30
>>> soma = numero1 + numero2
>>> print(‘Resultado: ’, soma)
Resultado: 50

Fonte: Elaborada pelo autor.

Ao longo dos anos, os compiladores modernos passaram por diversas melhorias e


aperfeiçoamentos. Atualmente, existem também otimizadores para aprimorar a performance do
software gerado em linguagem de alto nível (AHO et al., 2008).
Na maioria dos sistemas que usamos diariamente, essa diferença na performance é quase
imperceptível. Porém, existem aplicações críticas voltadas para áreas de saúde, aviação e sistemas
industriais, por exemplo, que dependem de alto desempenho e de respostas instantâneas na
resolução de cálculos e de diversas outras atividades. No caso desses produtos, as partes que
compõem o software são desenvolvidas em linguagem de baixo nível a fim de obter o máximo
desempenho e, assim, atender aos requisitos de resposta imediata, quando solicitado.

1.3 Aplicações das linguagens de programação


Vídeo
As linguagens de programação, desde seu surgimento, sempre tiveram o
objetivo de auxiliar na escrita de programas para a realização de tarefas em um
computador. Porém, em seus primórdios, as aplicações desenvolvidas eram
voltadas à realização de cálculos para o meio científico e de engenharia.
Se comparadas aos computadores atuais, as primeiras máquinas eram grandes,
de pouco desempenho e custavam muito caro – apenas órgãos governamentais e universidades de
prestígio tinham funcionários qualificados e condições financeiras para mantê-las em operação. Na
Figura 4, podemos ver o Eniac (Electronic Numerical Integrator and Computer), considerado o
primeiro computador digital Figura 4 – Eniac, computador da década de 1940
do mundo que, com seus
Everett Historical/Shutterstock

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.

Ampliando seus conhecimentos


• 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.
Tiobe Index, como é conhecida, é uma pesquisa realizada pela empresa de consultoria
em software Tiobe. Essa pesquisa apresenta um índice que produz um ranking com as
linguagens de programação mais utilizadas no mercado.
Linguagens de programação 17

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

2. Sistema embarcado é um termo utilizado para o software executado em dispositivos específicos


e normalmente aplicados a situações particulares, ao contrário dos computadores, que têm seu
uso bem amplo. O software de controle de uma câmera fotográfica, por exemplo, pode ser
classificado dessa forma, pois sua finalidade é somente gerenciar as funcionalidades da câmera;
não é possível desenvolver outra atividade com a câmera a não ser fotografar ou gravar vídeos.
A maioria dos softwares para sistemas embarcados é desenvolvida em linguagem C, pois suas
características fazem com que ela seja umas das preferidas para essa finalidade.
Considere as informações expostas e realize uma pesquisa para identificar quais são as
qualidades que caracterizam a linguagem C como sendo ótima para sistemas embarcados.
3. A linguagem HTML (hyper text markup language) é amplamente utilizada para o
desenvolvimento de websites e, em muitos momentos, é confundida com linguagem de
programação, sendo que sua definição correta é linguagem de marcação de texto. Nesse
sentido, pesquise e apresente as diferenças entre linguagens de programação e linguagem de
marcação de texto.

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

Há diferentes paradigmas de linguagens de programação que são amplamente utilizados e estão


relacionados com os domínios de aplicação desejados e com os métodos para a resolução de problemas.
Nesse contexto, podemos perceber que as próprias metodologias de desenvolvimento
de sistemas computacionais estão em constante evolução e que novos recursos são
permanentemente incorporados às linguagens da área, de modo a suprir as características
emergentes de tais metodologias. Ademais, junto com as mudanças nas metodologias, surgem
novas formas de implementação de elementos das linguagens.
Tendo em vista a relevância de conhecer as linguagens de programação, portanto, neste
capítulo, estudaremos os principais paradigmas de programação e abordaremos de maneira mais
aprofundada os conceitos relacionados às linguagens orientadas a objetos, estruturadas e funcionais.

2.1 Classificação das linguagens de programação


Vídeo
É importante ressaltar que cada linguagem de programação deve prover
mecanismos que permitam a representação e a manipulação naturais dos elementos
básicos pelos quais se orientam os problemas tratados.
A verificação de tipos, por exemplo, que é realizada no momento da compilação
das linguagens tradicionais, é feita durante a execução em linguagens modernas. Ela se
dá em decorrência do requisito existente nas metodologias de desenvolvimento mais atuais, as quais estão
voltadas à flexibilidade e à representação de dados, objetos e relações (MELO; SILVA, 2014).
As linguagens de programação podem ser organizadas em dois grandes grupos: assertivas e
declarativas. São, ainda, subdividas em outras categorias, conforme apresenta a Figura 1.
Figura 1 – Classificação das 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

Fonte: Elaborada pelo autor.


20 Linguagens e paradigmas de programação

As linguagens assertivas baseiam-se em expressões que modificam valores de entidades


(dados ou objetos), e as linguagens declarativas têm base em expressões que verificam ou induzem
relações entre as declarações.
Quanto às subdivisões das linguagens de programação assertivas, temos:
• Orientadas a objetos: podem ser vistas como ferramentas para construir soluções de
problemas, organizando seus elementos com representações de coisas do mundo real.
• Imperativas: também conhecidas como estruturadas, são orientadas por dados e podem
ser consideradas instrumentos para a resolução de problemas.
As linguagens declarativas podem ser como ferramentas para a construção de soluções de
problemas orientados por relações entre declarações – nesse caso, os elementos representados são,
respectivamente, objetos, dados e relações.
Cada parte dessa metodologia apresenta características que a tornam mais apropriada para
certos problemas. Ainda, essas características determinam os recursos e as propriedades sintáticas
e semânticas desejáveis nas linguagens de programação correspondentes.
Por fim, podemos considerar que um paradigma de programação está diretamente relacio-
nado à forma de pensar do desenvolvedor e ao modo como ele busca a solução para um problema.
É esse paradigma que permite ou não a utilização de determinadas técnicas de programação.

2.2 Linguagens de programação estruturadas


Vídeo
O paradigma de programação estruturada é fundamentado no conceito da
Máquina de Turing. Na década de 1930, o pesquisador Alan Turing1, razão do nome
dessa programação, elaborou uma abstração matemática para um conjunto de
funções computáveis. Essa caracterização das funções computáveis foi aproximada
por John von Neumann2 a uma arquitetura de computadores que se tornou a base
para o que até hoje é utilizado.
A programação estruturada obedece a uma sequência de comandos predeterminados
e organizados para resolver um problema de forma sequencial, ou seja, instruções de código
preparadas linha por linha. Isso ocorre porque a programação estruturada tem suas origens
relacionadas à arquitetura de computadores, que inicialmente eram programados em sequências
ordenadas de códigos e instruções de máquina.
Segundo o paradigma estruturado, qualquer problema pode ser resolvido utilizando três
estruturas: sequencial, condicional e iterativa. Vale ressaltar que esse paradigma procura encontrar
uma forma de quebrar qualquer problema complexo em partes menores e mais simples, de modo
que, trabalhando em conjunto, pode-se solucioná-lo (ASCENCIO; CAMPOS, 2007).

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

A programação estruturada é baseada em três conceitos para a resolução de problemas:


• Variáveis: recursos utilizados para armazenamento de dados em memória.
• Estados: resultados de operações lógicas, de decisão ou cálculos realizados com os
conteúdos armazenados em variáveis.
• Comandos: utilizados para atribuir valor a variáveis e controlar as ações e instruções em
execução dentro de um programa.
A correta utilização dessas estruturas resulta em soluções modularizadas, que conseguem
usar uma quantidade menor de linhas de código otimizando o desempenho do sistema.
As linguagens de programação estruturadas têm sido aplicadas em várias áreas do mercado.
Grande parte dos sistemas bancários e dos projetos científicos de universidades e órgãos de
pesquisas é desenvolvida a partir de linguagens estruturadas.
Um dos motivos de sua grande aplicação é de caráter histórico: os primeiros projetos de
linguagens de programação utilizados comercialmente foram baseados no paradigma estruturado.
Outro motivo de sua grande aplicabilidade é a proximidade dessas linguagens com a máquina,
o que faz com que sejam implementadas de maneira mais eficiente que algumas linguagens em
outros paradigmas de programação.

2.3 Linguagens de programação orientadas a objetos


Vídeo
O paradigma de programação orientada a objetos tem como objetivo
principal solucionar problemas pela colaboração de vários elementos, similar à
forma como usamos a prestação de serviços de outras pessoas para resolver vários
problemas do cotidiano.
A ideia da prestação de serviços pode ser exemplificada pelas situações
diárias. Imagine que precisamos realizar uma viagem e reservar um quarto de hotel, então, podemos
acessar um sistema web, escolher o hotel desejado e proceder com a reserva. Quando requisitamos
um serviço como no exemplo, não precisamos saber como o site de reservas faz para contatar o
hotel e garantir o quarto; precisamos apenas acessar o serviço on-line e realizar o processo pelo
sistema, sem a necessidade de participar ou interferir diretamente na negociação.
Perceba que na situação descrita nos abstraímos da forma como o serviço foi realizado,
interagindo apenas com o serviço on-line (objeto) de reserva de quartos e esperando pelo
resultado. Esse modelo de prestação de serviços por agentes apropriados é a base para o paradigma
de programação orientada a objetos, e a metodologia que se aplica a esse paradigma tem como
princípio a distribuição de serviços e responsabilidades para reduzir a complexidade de um dos
colaboradores.
Nos últimos anos, as áreas de aplicação das linguagens de programação orientadas a objetos
têm expandido. Essas linguagens foram criadas, juntamente com seus ambientes, para dar suporte
ao desenvolvimento de sistemas mais complexos e, por esse motivo, são aplicadas a novos sistemas
comerciais. O crescente uso dessas linguagens ocorre principalmente pelo desenvolvimento
de novas metodologias de sistemas que empregam o paradigma de orientação a objetos. Nesse
22 Linguagens e paradigmas de programação

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

A solução computacional de um problema no paradigma orientado a objetos, portanto, é


entendida a partir de quais objetos são necessários e como irão cooperar entre si. Dessa forma, os
objetos tornam-se entidades computacionais independentes e resolver o problema significa fazê-lo
com cada uma dessas unidades, incluindo a comunicação entre elas.
Conforme vimos anteriormente, classes são uma maneira de identificar tipos abstratos,
ou seja, os dados que o objeto deve conter são identificados pelos seus atributos, os quais
têm a função de guardar os valores necessários ao estado do objeto. O comportamento que
uma classe assume é identificado por entidades, denominadas métodos, que, por sua vez, são
utilizadas para realizar ações, responder a chamadas e colaborar com outros objetos em um
programa. De acordo com a Figura 2, é possível verificar um exemplo de classe para abstrair a
representação de um carro e suas funcionalidades dentro de um programa orientado a objetos,
usando a linguagem de programação Java.
Figura 2 – Exemplo de classe em linguagem Java

1 public class Carro


2 {
3 //Atributos para identificar e armazenar dados
4 int ano;
5 String modelo;
6 String marca;
7 String chassi;
8 double valor;
9
10 //Métodos que representam as funcionalidades do carro
11 public void ligar() {
12
13 }
14
15 public void acelerar() {
16
17 }
18
19 public void frear() {
20
21 }
22 public void desligar() {
23
24 }
25 }
Fonte: Elaborada pelo autor.

Dentro do paradigma de programação orientada a objetos, as classes podem ser representadas


graficamente. Dessa forma, projetos de maior complexidade podem ser modelados, ilustrando
seus atributos e métodos e, de maneira mais clara, verificando as relações entre os diversos objetos
de um projeto de software. Na Figura 3, observamos um exemplo de modelagem da classe carro,
apresentada anteriormente.
24 Linguagens e paradigmas de programação

Figura 3 – Exemplo de uma classe

Carro
ano: Integer
marca: String
modelo: String
chassi: String
valor: Double

void ligar ( )

acelerar ( )

frear ( )

desligar ( )

Fonte: Elaborada pelo autor.

2.4 Linguagens de programação funcionais


Vídeo
O paradigma de programação funcional surgiu no início da década de 1960,
a partir da necessidade dos pesquisadores no desenvolvimento de inteligência
artificial, computação simbólica, prova de teoremas, sistemas baseados em regras e
processamento de linguagem natural. Naquela época, as linguagens de programação
estruturadas disponíveis não supriam satisfatoriamente essas necessidades.
Uma das primeiras linguagens de programação funcional foi a Lisp, desenvolvida por John
McCarthy5, em 1960. Essa linguagem serve basicamente para o processamento simbólico de
dados, sendo aplicada em cálculos diferenciais e integrais, projetos de circuitos elétricos, lógica
matemática, jogos e alguns campos da inteligência artificial (TUCKER; NOONAN, 2010).
A característica fundamental das linguagens de programação funcionais é a computação vista
como uma função matemática mapeando entradas e saídas, diferente do paradigma estruturado no
qual não existe uma noção de estado, não sendo, assim, preciso instruções de atribuição. Dessa forma,
o efeito de um laço é obtido via repetição, pois não há um modo de incrementar ou decrementar
o valor de uma variável no estado, já que não há variáveis. Embora algumas linguagens funcionais
suportem as noções de variáveis, atribuição e laço, é importante destacar que esses elementos não
fazem parte do modelo puro de programação funcional (TUCKER; NOONAN, 2010).
A programação funcional resolve problemas computacionais a partir da avaliação de
funções matemáticas, evitando alteração de estados e geração de dados que se modificam ao longo
da execução de um programa, como acontece na programação estruturada. Como o paradigma
funcional é regido por funções, estas, quando definidas dentro de um sistema, devem retornar
como um dado ou até mesmo uma outra função durante sua execução.

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 envolve um processo computacional, portanto, que ocorre por


meio de transformações, conhecidas como reduções, embora a redução de uma expressão funcional
não a torne, necessariamente, mais simples. Vejamos o exemplo:

Sem fazer uso de uma notação específica para programas funcionais,


podemos considerar a função f(x) = xx. Se x = 4, a expressão inicial 44 é
reduzida para o valor 256, embora 44 tenha somente dois dígitos e 256
tenha três.

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

Figura 4 – Exemplo de código em linguagem Haskell

1 module Main where


2 fatorial n = if n = = 0 then 1 else n * fatorial (n – 1)
3 main = do putStrLn "Quanto é 5! ?"
4 x <- readLn
5 if x = = fatorial 5
6 then putStrLn “Você acertou!”
7 else putStrLn “Você errou!”
Fonte: Elaborada pelo autor.

Algumas linguagens de programação mais modernas conseguem operar de maneira mista,


como é o caso da linguagem Python, que consegue implementar o paradigma orientado a objetos
e também permite aos desenvolvedores construírem soluções com códigos escritos em paradigma
funcional.

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.

6 Site de hospedagem de projetos git, disponível em: https://github.com/.


7 Site de perguntas e respostas, disponível em: https://pt.stackoverflow.com/.
Tipos de linguagens de programação 27

Ampliando seus conhecimentos


• PARADIGMAS de programação. 2016. 1 vídeo (7min13s). Publicado pelo canal Código
Fonte TV. Disponível em: https://www.youtube.com/watch?v=EefVmQ2wPlM. Acesso
em: 1 out. 2019.
PROGRAMAÇÃO orientada a objetos (POO): dicionário do programador. 2018. 1 vídeo
(9min56s). Publicado pelo canal Código Fonte TV. Disponível em: https://www.youtube.
com/watch?v=QY0Kdg83orY. Acesso em: 1 out. 2019.

• PROGRAMAÇÃO funcional: dicionário do programador. 2019. 1 vídeo (8min15s).


Publicado pelo canal Código Fonte TV. Disponível em: https://www.youtube.com/
watch?v=BxbHGPivjdc. Acesso em: 1 out. 2019.
O canal de vídeos Código Fonte TV apresenta conteúdo relevante dentro da área de
tecnologia da informação e de linguagens de programação. Os vídeos selecionados trazem
explicações acerca do contexto geral dos paradigmas de programação e abordam detalhes
das linguagens de programação funcionais e orientadas a objetos.

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:

a) Uma utilizada em sistemas web.


b) Uma aplicada em sistemas bancários/financeiros.
c) Uma usada em sistemas de gestão empresarial.
2. O paradigma estruturado, também conhecido como imperativo, tem muita relevância em
projetos de sistemas embarcados (hardware). Uma das principais linguagens para esse
mercado é a linguagem C que, apesar de ter mais de três décadas, ainda é amplamente
utilizada. Considerando isso, explique o que justifica sua enorme aplicação.

3. Nos últimos anos, o paradigma de programação funcional vem ganhando um espaço


significativo no mercado. Dentre suas mais variadas aplicações, cite duas linguagens
funcionais de relevância em aplicações para internet.
28 Linguagens e paradigmas de programação

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

Antes de iniciarmos os estudos dos tipos de dados utilizados em programação, precisamos


entender não apenas os conceitos de variáveis e constantes, mas também como se dá a sua utilização
em algoritmos desenvolvidos nas mais variadas linguagens. Dados e variáveis são recursos de
extrema importância em um sistema computacional, pois todas as informações nele tratadas
necessitam ser armazenadas em memória. Além de armazenar dados, os sistemas precisam
identificar com que tipo de informação estão trabalhando. Dentro de um software, existem dados
numéricos, lógicos, textuais e outros. Por esse motivo, veremos neste capítulo o que são dados em
linguagens de programação e como criá-los em seus diferentes tipos.

3.1 Definição de dados em linguagens de programação


Vídeo
Um programa de computador recebe e processa dados, que precisam ser
armazenados no computador para serem utilizados no processamento. Esse
armazenamento, por sua vez, é feito na memória do computador, e, quanto maior
a memória, mais dados poderão ser armazenados para que o programa realize o
tratamento deles.
Todo o trabalho feito por um computador se baseia na manipulação dos dados contidos em
sua memória. Segundo Ascencio e Campos (2007), os tipos de dados mais comuns, denominados
primitivos, são:
• números inteiros;
• números reais;
• caracteres;
• valores lógicos.

As linguagens de programação sempre proverão um conjunto básico de tipos de dados para


o desenvolvimento de algoritmos, baseado nesses tipos primitivos que serão estudados em detalhes
nas próximas seções.
O funcionamento de um programa de computador é baseado no sistema numérico binário.
Nele, os dados são transformados em sequências de zero e um (0 e 1) para serem armazenados em
memória. Os conjuntos de dados organizados pelos dígitos binários (0 e 1) são chamados bits e
ocupam porções de memória denominadas bytes, que estão agrupadas em conjunto de 8 bits. Cada
byte em memória é identificado por meio de um endereço (TUCKER; NOONAN, 2009).
30 Linguagens e paradigmas 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.

3.2 Dados primitivos em linguagens de programação


Vídeo
As linguagens de programação proveem um conjunto básico de dados para
a elaboração de algoritmos, e a esse conjunto comumente chamamos de dados
primitivos, que são tipos de dados utilizados na ciência para a representação de
informações elementares. São, normalmente, números inteiros, números reais
(com casas decimais, fracionários), caracteres (letras, números) e valores lógicos
(booleanos, verdadeiro ou falso) (ASCENCIO; CAMPOS, 2007).
Tipos de dados em linguagens de programação 31

Os números inteiros são os dados numéricos positivos ou negativos, eliminando desses


qualquer parte fracionária, incluindo o número zero. Nas Figuras 1 e 2, a seguir, podemos verificar
um exemplo de cálculo de soma com números inteiros na linguagem de programação Java e na
linguagem C++, respectivamente.
Figura 1 – Exemplo com números inteiros em linguagem Java

1 public class Main


2 {
3 public static void main(String[] args) {
4 int numero01 = 12;
5 int numero02 = 25;
6 int soma = numero01 + numero02;
7 System.out.println("O valor da soma é:" + soma);
8 }
9 }

Fonte: Elaborada pelo autor.

Figura 2 – Exemplo com números inteiros em linguagem C++

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 }

Fonte: Elaborada pelo autor.

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

Figura 3 – Exemplo com números reais em linguagem C++

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.

Figura 4 – Exemplo com números reais em linguagem Python

>>> numero01: float


>>> numero02: float
>>> resultado: float
>>> print('Digite o número 1')
Digite o número 1
>>> numero01: float(input())
12.89
>>> print('Digite o número 2:')
Digite o número 2:
>>> numero02: float(input())
45.56
>>> resultado = numero01 + numero02
>>> print('o resultado da soma é:', resultado)
o resultado da soma é: 58.45

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 public class Main


2 {
3 public static void main(String[] args) {;
4 char letra = 'a';
5 String palavra = "Linguagem de Programação Java";
6 System.out.println("A variável letra contém: "+ letra);
7 System.out.println("A variável palavra contém: "+ palavra);
8 }
9 }

A variável letra contém: a


A variável palavra contém: Linguagem de Programação Java

Fonte: Elaborada pelo autor.

Figura 6 – Exemplo com caracteres em linguagem C++

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

Figura 7 – Exemplo com valores lógicos em linguagem Java

1 public class Main


2 {
3 public static void main(String[] args) {;
4 boolean opcao01 = true;
5 boolean opcao02 = false;
6 System.out.println("O status da opção 01 é: "+ opcao01);
7 System.out.println("O status da opção 02 é: "+ opcao02);
8 }
9 }

O status da opção 01 é: true


O status da opção 02 é: false

Fonte: Elaborada pelo autor.

Figura 8 – Exemplo com valores lógicos em linguagem C++

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.

3.3 Criação de dados em linguagens de programação


Vídeo
No processo de desenvolvimento de determinados algoritmos e programas de
computador, é necessário criar tipos de dados quando os primitivos não satisfazem
às necessidades de uma aplicação de software. Normalmente, a criação de dados
específicos em um sistema se torna útil quando é necessário agrupar mais de um tipo
de dado para identificar objetos ou coisas do mundo real. Esses objetos, em sua maioria,
são compostos por mais de um tipo de dados de diferentes valores (DEITEL, P.; DEITEL, H., 2010).
Vamos imaginar que estamos desenvolvendo um algoritmo para gerenciar informações de
veículos com o valor, modelo, ano, proprietário e placa. As informações descritas são de tipos
diferentes e podem ser classificadas da seguinte forma:
• Valor = número real.
• Modelo = sequência de caracteres.
• Ano = número inteiro.
• Proprietário = sequência de caracteres.
• Placa = sequência de caracteres.
Tipos de dados em linguagens de programação 35

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 }

O valor do carro Fusca é: R$ 21590.00

Fonte: Elaborada pelo autor.


36 Linguagens e paradigmas de programação

A palavra struct, na linguagem C, refere-se à criação de estruturas (no exemplo, à identificação


de veículos) e permite criar um tipo de dado próprio.
Nos programas de computador, é comum os desenvolvedores criarem seus próprios tipos
de dados, pois os dados primitivos fornecidos pelas linguagens suprem somente as necessidades
básicas dos algoritmos, deixando o desenvolvedor livre para criar. Na Figura 10, a seguir, podemos
observar o exemplo da criação de um tipo veículo, de acordo com o que vimos a respeito da
identificação de veículos, na linguagem Java. Essa linguagem, diferentemente da linguagem C, não
possui o recurso de estruturas, mas a criação de novos tipos é suportada pelo conceito de classes e,
instanciação: posteriormente, com a instanciação de objetos.
processo por
meio do qual
Figura 10 – Criação de objetos em Java
se faz a cópia
de um objeto
1 public class Main
existente.
2 {
3 public static class Veiculo
4 {
5 int ano;
6 double valor;
7 String modelo;
8 String proprietário;
9 String placa;
10 }
11 public static void main(String[] args)
12 {
13 Veiculo v1 = new Veiculo90;//Criação de um objeto do tipo carro
14 v1.ano = 2015;
15 v1.valor = 21590.0;
16 v1.modelo = "Fusca";
17 v1.proprietario = "Ana Maria";
18 v1.placa = "XYZ-4567";
19 System.out.println(v1.roprietario "possui um" v1.modelo);
20 }
21 }

Ana Maria possui um Fusca

Fonte: Elaborada pelo autor.

Na sequência, dada a sua relevância, serão trabalhados os conceitos do paradigma de


programação orientada a objetos com a utilização da linguagem de programação Java, além de
diversos exemplos de aplicação da sintaxe de escrita de algoritmos com essa linguagem.
É válido ressaltar, ainda, que as variáveis de tipo primitivo podem armazenar exatamente
um valor por vez do seu tipo declarado. Uma variável de tipo lógico, em determinado momento,
pode armazenar um valor false. Porém, se em outro momento de execução do código o valor true
for atribuído a essa variável, seu valor inicial será substituído. Ao contrário do que ocorre com as
variáveis – que mudam de valor durante a execução de um código –, as constantes possuem um valor
fixo, que é determinado no início do programa e permanece intacto até o término do algoritmo.
Tipos de dados em linguagens de programação 37

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.

Ampliando seus conhecimentos


• OnlineGDB. Disponível em: https://www.onlinegdb.com/. Acesso em: 8 jan. 2020.
OnlineGDB é um ambiente virtual de criação, testes e execução de algoritmos em várias
linguagens de programação. O usuário pode utilizá-lo em qualquer lugar, por meio de
um navegador web. Sugerimos acessar o serviço e testar os algoritmos que usamos como
exemplos ao longo deste capítulo.

• SOLOLEARN. Learn Java. Aplicativo. Disponível em: https://www.sololearn.com/


Course/Java/. Acesso em: 8 jan. 2019.
Há diversos aplicativos para aprendizagem de linguagens de programação. Uma boa
opção é o Learn Java, que pode ser obtido gratuitamente para utilização em celulares ou
tablets. Instale o aplicativo em um dispositivo móvel e teste seus conhecimentos.

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.

4.1 Surgimento da linguagem Java e suas aplicações


Vídeo
A linguagem Java surgiu na década de 1990, mais precisamente em 1991, ano em
que a empresa Sun Microsystems financiou internamente um projeto de pesquisa, que
resultou em uma linguagem de programação baseada na linguagem C++. Seu criador,
James Gosling (1955-), a nomeou inicialmente como Oak, em homenagem a uma
árvore de carvalho vista da janela do seu escritório na Sun, mas logo se descobriu que
esse nome já havia sido atribuído a uma linguagem de programação. Algum tempo depois, uma equipe
da Sun visitou uma cafeteria onde havia um café importado de um local chamado Java, cujo nome foi
sugerido e acabou sendo aceito. Com isso, a logomarca da linguagem passou a ser uma xícara de café,
como podemos observar na Figura 1 (DEITEL, P.; DEITEL, H., 2010).
Figura 1 – Logomarca da linguagem Java
Trismegist san/Shutterstock
40 Linguagens e paradigmas de programação

No período inicial de desenvolvimento, o projeto passou por algumas dificuldades. A


linguagem Java surgiu com a intenção de ser aplicada em dispositivos eletrônicos inteligentes
e, naquela época, a evolução desses equipamentos não se deu na velocidade prevista pela
empresa Sun.
No início da década de 1990, com o crescente aumento no uso da internet, a Sun percebeu
que o Java tinha potencial para adicionar conteúdos dinâmicos e animações às páginas web que
surgiam, determinando novos rumos para a linguagem. Seu lançamento oficial, então, ocorreu
em maio de 1995, durante uma conferência de tecnologia. Posteriormente, o feito acabou gerando
interesse na comunidade de negócios devido à atenção dedicada à web durante a década de 1990
(DEITEL, P.; DEITEL, H., 2010).
É importante ressaltar que a linguagem Java exibe importantes características, as quais, em
conjunto, a diferenciam de outras linguagens de programação. Segundo Jandl Jr. (1999, p. 10-11),
essas características são:
• Orientação a objetos: tudo em Java são classes ou instâncias de uma classe. Com a
exceção de seus tipos primitivos de dados, essa linguagem é puramente orientada a objetos
e atende a todos os requisitos para tal, uma vez que oferece mecanismos de abstração,
encapsulamento e hereditariedade.
• Multiplataforma: independe de plataforma, uma vez que os programas escritos a partir
da linguagem são compilados para uma forma intermediária de código denominada
bytecodes, que utiliza instruções e tipos primitivos de tamanho fixo, ordenação big-endian
e uma biblioteca de classes padronizada. Os bytecodes são como uma linguagem de
máquina destinada a uma única plataforma, a Java Virtual Machine (JVM), que por sua
vez interpreta os bytecodes e pode ser implementada em qualquer sistema operacional.
Assim teremos um mesmo programa Java passível de execução em qualquer arquitetura
que disponha de uma JVM.
• Ausência de ponteiros: a linguagem Java não permite a manipulação direta de
endereços de memória e não exige que os objetos criados sejam destruídos, liberando
os desenvolvedores de uma tarefa complexa. Além disso, a JVM possui um mecanismo
automático de gerenciamento de memória conhecido como garbage collector (coletor de
lixo), que recupera a memória alocada para objetos não mais referenciados pelo programa.
• Performance: foi projetada para ser compacta, para atuar independentemente da
plataforma e para ser utilizada em rede, o que levou à decisão de ser interpretada por meio
dos esquemas de bytecodes. Como uma linguagem interpretada tem seu desempenho
razoável, a Java não pode ser comparada à velocidade de execução de código nativo.
Para superar essa limitação, várias JVM dispõem de compiladores just in time (JIT) que
compilam os bytecodes para códigos nativos durante a execução, otimizando a mesma e
resultando em uma melhora significativa na performance de programas Java.
• Segurança: considerando a possibilidade de aplicações executadas por meio de uma rede,
a linguagem Java possui mecanismos de segurança que podem evitar qualquer operação
no sistema de arquivos da máquina-alvo, minimizando problemas de segurança. Tal
Introdução à linguagem de programação Java 41

mecanismo é flexível o suficiente para determinar se um programa Java é considerado


seguro, especificando nesta situação diferentes níveis de acesso ao sistema-alvo. A
linguagem Java continua posicionada como uma das plataformas mais seguras do mundo,
sendo utilizada em sistemas que exigem altíssima segurança, como os de governos de
países e de importantes empresas listadas na bolsa, incluindo bancos públicos e privados.
• Multithreading: o Java oferece recursos para o desenvolvimento de aplicações, os quais são
capazes de executar múltiplas atividades de modo concorrente, e dispõe de elementos para
a sincronização dessas várias rotinas. Cada um desses fluxos de execução é denominado
thread, um importante recurso de programação de aplicações mais sofisticadas. Além
disso, a linguagem é bastante robusta, oferece tipos inteiros e ponto flutuante compatíveis
com as especificações do Institute of Electrical and Electronic Engineers (IEEE) para
suporte para caracteres Unicode.

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.

4.2 Tipos de dados e sintaxe da linguagem Java


Vídeo
As linguagens de programação sempre proveem um conjunto básico de tipos
de dados para o desenvolvimento de programas. Esse conjunto é conhecido como
primitivo, e nesta seção veremos os tipos de dados primitivos da linguagem Java,
sua forma de escrita e como se dá a declaração de suas variáveis.
Todo programa Java é um sistema computacional completo e, como tal, é
feito de entrada de dados, processamento e saída de informações. Esses dados geralmente são
armazenados para processamento e transporte pela memória do computador em estruturas
denominadas variáveis, que representam o menor elemento de um programa de computador.
42 Linguagens e paradigmas de programação

“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

Tipo Tamanho Valor mínimo Valor máximo


byte 8 bits –128 127

short 16 bits –32.768 32.767

int 32 bits –2.147.483.648 2.147.483.647

long 64 bits –9.223.372.036.854.775.808 9.223.372.036.854.775.807


Fonte: Adaptado de Jandl Jr., 1999, p. 15.

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

Tipo Tamanho Valor mínimo Valor máximo


float 32 bits –3,4028E+38 3,4028E+38

double 64 bits –1,7976E+308 1,7976E+308


Fonte: Adaptado de P. Deitel; H. Deitel, 2010, p. 105.

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

Tipo Valores permitidos


char Caracteres

boolean Valores booleanos: true ou false; 0 ou 1


Fonte: Adaptado de P. Deitel; H. Deitel, 2010, p. 105.

O tipo char permite a representação de caracteres individuais. Como a


linguagem Java utiliza uma representação interna no padrão Unicode, cada
caractere ocupa 16 bits (2 bytes) sem sinal, o que permite representar até 32.768
caracteres diferentes, teoricamente facilitando o trabalho de internacionalização
de aplicações Java. (JANDL JR., 1999, p. 16)

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

4.3 Programação em linguagem Java e exemplos de aplicação


Vídeo
Nesta seção, iniciaremos nossos estudos com exemplos de algoritmos em
linguagem Java para o desenvolvimento de conceitos de lógica de programação,
declaração de variáveis e mais detalhes da sintaxe de programas por meio de
códigos que explorem a entrada e saída de dados.
44 Linguagens e paradigmas de programação

Uma aplicação desenvolvida a partir dessa linguagem é um programa de computador


executado quando usamos o comando java para iniciar a JVM – procedimento que pode ser
facilmente realizado via linha de comando nos sistemas operacionais Windows, Unix, Linux,
MacOS e outros. Porém, para fins didáticos e dinamismo das explicações, utilizaremos a ferramenta
chamada Online GDB, que é um ambiente web para desenvolvimento de código-fonte em diversas
linguagens de programação.
Todo código-fonte Java é escrito em arquivos denominados classes. Na Figura 2 a seguir,
vemos um exemplo de estrutura básica de um programa Java que exibe na tela a mensagem
“Hello World”.
Figura 2 – Exemplo de classe em linguagem Java

1 public class Main //Declaração do nome da classe


2 {//bloco de código da classe
3 public static void main(String[] args)
4 {//bloco de código principal
5 System.out.println("Hello World");
6 }
7 }
Fonte: Elaborada pelo autor.

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

1 public class Main


2 {
3 public static void main(String[] args)
4 {
5 System.out.println("Hello World");
6 }
7 }
Hello World
Fonte: Elaborada pelo autor.

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

Figura 4 – Exemplo de declaração de variáveis

1 public class Main


2 {
3 public static void main(String[] args)
4 {
5 System.out.println("Programa Java de Exemplo");
6 int a = 12;
7 double b = 12.89;
8 char c = 'R';
9 System.out.println("Conteúdo de a: " + a);
10 System.out.println("Conteúdo de b: " + b);
11 System.out.println("Conteúdo de c: " + c);
12 }
13 }
Programa Java de Exemplo
Conteúdo de a: 12
Conteúdo de b: 12.89
Conteúdo de c: R
Fonte: Elaborada pelo autor.

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.

Ampliando seus conhecimentos


• G1. Oracle anuncia compra da Sun por mais de US$ 7 bilhões. Disponível em: http://
g1.globo.com/Noticias/Tecnologia/0,,MUL1091457-6174,00-ORACLE+ANUNCIA+CO
MPRA+DA+SUN+POR+MAIS+DE+US+BILHOES.html. Acesso em: 3 out. 2019.
No ano de 2009, a empresa Sun Microsystems, detentora do Java na época, foi adquirida
pela quantia de aproximadamente 7 bilhões de dólares pela Oracle, que passou a cuidar
de todo o ecossistema Java.

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

• ORACLE. Disponível em: https://www.oracle.com/java/. Acesso em: 11 set. 2019.


Desde a época de seu lançamento e da posterior aquisição pela Oracle, a linguagem
Java e diversas ferramentas relacionadas são fornecidas gratuitamente. Embora existam
ferramentas pagas, a comunidade de desenvolvedores Java tem a opção de desenvolver
softwares com baixo ou nenhum custo de licenciamento de software ou ferramentas para
desenvolvimento de sistemas. No site oficial é possível conhecer a Oracle e seus projetos.

• 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

Neste capítulo, abordaremos as estruturas de dados e as coleções de itens de dados


relacionados para utilização na linguagem Java. As estruturas de dados são de extrema
importância na elaboração de sistemas computacionais de maior complexidade, pois com a
utilização desse recurso é possível elaborar sistemas mais robustos, confiáveis e com utilização
eficiente dos recursos de memória e processamento, gerando um melhor desempenho da solução
final.
Veremos também as estruturas de dados dos tipos vetores, matrizes, filas e pilhas, com a
aplicação e a análise de exemplos práticos que demonstram manipulações de dados contidos em
arrays, isto é, estruturas de dados em Java.

5.1 O que são estruturas de dados


Vídeo
As estruturas de dados são recursos utilizados em sistemas computacionais
para realizar o agrupamento de informações de maneira organizada e sistematizada.
Assim, tornam possível interagir com esses dados, realizando rotinas de leitura
e alteração dos conteúdos armazenados em memória (DEITEL, P.; DEITEL, H.,
2010).
São aplicadas na resolução e na modelagem de problemas que não podem ou que
apresentariam alto grau de complexidade para serem resolvidos, com o uso de variáveis. Nesse
cenário, a utilização de estruturas de dados torna a escrita do código mais simples e eficiente do
ponto de vista computacional, pois dispensa a necessidade de muitas variáveis e de inúmeras linhas
de código.
As estruturas de dados em Java mais conhecidas são as arrays, também chamadas de vetores.
Arrays e vetores são constituídos por itens de dados relacionados do mesmo tipo. Elas tornam
conveniente processar grupos relacionados de valores de mesmo tipo.
Convém considerar que o tamanho dos arrays permanece o mesmo depois de criados,
embora uma variável de array possa ser reatribuída de maneira que referencie um novo array de
tamanho diferente.
A linguagem Java é munida de diversas ferramentas para otimizar a escrita e a elaboração de
algoritmos que irão interagir com as estruturas de dados. Podemos pensar em estruturas de dados
como recursos computacionais de memória e operações, destinados a manipular um conjunto de
dados desse mesmo tipo, associados a um mesmo nome identificador.
50 Linguagens e paradigmas de programação

5.2 Definição de vetores, matrizes, filas e pilhas em linguagem Java


Vídeo
Com a linguagem de programação Java, podemos escrever programas que
utilizem estruturas de dados para a resolução dos mais diversos problemas que
exijam tal complexidade. A seguir, veremos as definições dos principais tipos de
estruturas de dados utilizados nos programas de computador.

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

[0] [1] [2] [3] [4] [5]

25 58 -9 1 444 100

Fonte: Elaborada pelo autor.

Na linguagem Java, os dados armazenados em vetores, arrays unidimensionais, possuem


índices começando pelo número zero, ou seja, o índice do último item de um vetor é dado pelo
número de itens do vetor (PUGA; RISSETI, 2008).

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] [1] [2] [3] [4]

[0] 25 58 -9 1 444

[1] 5 33 4 –1 77

Fonte: Elaborada pelo autor.


Estruturas de dados com linguagem de programação Java 51

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

Último elemento Primeiro elemento

E D C B A

Entrada na fila Saída da fila

Fonte: Elaborada pelo autor.

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

Figura 4 – Exemplo de uma estrutura de dados em formato pilha

Entrada na fila
Último elemento
E

Saída da fila
Primeiro elemento

Fonte: Elaborada pelo autor.

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.

5.3 Algoritmos de estruturas de dados em linguagem Java


Vídeo
Nas próximas páginas, veremos exemplos de códigos em linguagem Java,
demonstrando a utilização de estruturas do tipo vetor, matriz, fila e pilha.
A estrutura vetor é a mais simples das estruturas de dados, amplamente
utilizada para agrupar informações de mesmo tipo. Na Figura 5, a seguir, podemos
ver um exemplo de código para ler e armazenar as notas bimestrais de um aluno e,
ao final, uma mensagem com a média aritmética das notas lançadas no algoritmo.
Figura 5 – Exemplo de vetor em Java

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

No código exemplificado na Figura 5, o vetor é declarado na linha 5 para armazenar quatro


valores do tipo double, e a inserção de conteúdo se dá nas linhas 6 a 9. Note que o último valor
é inserido no índice 3, pois nas estruturas do tipo vetor a numeração dos índices começa pelo
número 0 (zero).
Depois de todos os valores inseridos no vetor, para que ocorra a leitura de um determinado
valor, basta informar o nome do vetor e, ao seu lado, entre colchetes, o número do índice cujo
conteúdo se deseja ler: notas[índice].
Agora, para demonstração do uso de matriz, veremos a elaboração de um algoritmo para
armazenar os valores de 1 a 9, em formato de tabela, conforme exemplo da Figura 6.
Figura 6 – Formato de dados inseridos em uma matriz

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

O código apresentado na Figura 7 exemplifica a inserção de nove valores do tipo inteiro,


dispostos em formato de matriz, ou seja, cada valor é identificado por um índice composto de
linha e coluna. A linha 4 do código do exemplo é onde a matriz é criada, determinando o tipo de
dado e a quantidade de linhas e colunas que se deseja. Já o primeiro colchete, ao lado do nome
da variável, determina o número de linhas, enquanto o segundo identifica o número de colunas,
sendo números[linhas][colunas].
A interação com o conteúdo ocorre por meio da utilização de duas estruturas de repetição
do tipo, sendo o mais externo utilizado para o algoritmo navegar entre as linhas, e o mais interno
utilizado para interagir com as colunas da matriz.
Dando continuidade aos exemplos, veremos agora um código para interagir em uma
estrutura do tipo fila, realizando o processo FIFO, em um conjunto de nomes. Conforme a
Figura 8, a seguir, podemos verificar o funcionamento do algoritmo realizando a inserção e a
remoção de itens, simulando uma fila de atendimentos, na qual o primeiro que entra é o primeiro
que sai.
Figura 8 – Exemplo FIFO em linguagem Java

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 }

A fila possui 1 pessoa(s)


[Pessoa 1]
A fila possui 2 pessoa(s)
[Pessoa 1, Pessoa 2]
A fila possui 3 pessoa(s)
[Pessoa 1, Pessoa 2, Pessoa 3]
Uma pessoa atendida
A fila possui 2 pessoa(s)
[Pessoa 2, Pessoa 3]
Fonte: Elaborada pelo autor.
Estruturas de dados com linguagem de programação Java 55

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 }

Colocando 3 livros na pilha...


Livros contidos na pilha: [Livro 01, Livro 02, Livro 03]
Retirando um livro da pilha...
Colocando outro livro na pilha...
Livros contidos na pilha: [Livro 01, Livro 02, Livro 04]

Fonte: Elaborada pelo autor.

A estrutura pilha, conforme consta no código de exemplo da Figura 9, foi preparada


com o uso da classe Stack, que possui métodos capazes de facilitar a manipulação de estruturas
nesse formato. A variável livro, criada no exemplo, consegue acessar os métodos push() e pop()
da classe Stack, os quais, respectivamente, permitem inserir e remover itens do topo da pilha.
Para que o primeiro livro inserido seja removido da pilha, sucessivas chamadas do método
pop() devem ser realizadas até que se chegue no primeiro elemento inserido, removendo por
completo os livros da pilha.
56 Linguagens e paradigmas de programação

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.

Ampliando seus conhecimentos


• Linguagem de programação Java
JAVA // Dicionário do programador. 2019. 1 vídeo (8min. 43seg.). Publicado pelo canal
Código Fonte TV. Disponível em: https://www.youtube.com/watch?v=sZAxLRMxEUo.
Acesso em: 8 jan. 2020.

• Estruturas de dados com linguagem Java


CURSO de Java 01: Introdução e dicas para quem está começando. 2013. 1 vídeo (55min.
57seg.). Publicado pelo canal Loiane Groner. Disponível em: https://www.youtube.com/
watch?v=LnORjqZUMIQ. Acesso em: 8 jan. 2020.

Para aprofundar seus conhecimentos em linguagem de programação e estruturas de dados,


assista aos vídeos indicados acima, que foram produzidos por canais especializados em
tecnologia da informação e desenvolvimento de sistemas. Esses conteúdos abordam as
características da linguagem Java de modo geral e também aprofundam os conhecimentos
em estruturas de dados com a utilização de Java.

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.

a) int[] vetor = new int[1]


b) int[][] matriz = new int[1][1]
Estruturas de dados com linguagem de programação Java 57

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.

3. Aplicativos abertos em um smartphone são organizados em memória por um recurso


conhecido como Stack (pilha). Qual o princípio básico de uma pilha em sistemas
computacionais?

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

Os paradigmas de programação estão diretamente relacionados à forma como os


desenvolvedores de sistemas buscam soluções para os problemas. O tipo de técnica para o
desenvolvimento de um projeto de software é determinado de acordo com o paradigma de
programação. Vale lembrar que existem vários paradigmas de programação, como o estruturado, o
orientado a objetos, o lógico, o funcional, entre outros. Neste capítulo, analisaremos os paradigmas
funcional, imperativo e lógico.
Também é importante destacar que o paradigma de programação está ligado à maneira de
pensar do desenvolvedor. E possível ver, por exemplo, que o uso de uma linguagem com suporte
nativo à orientação a objetos não implica, necessariamente, a criação de um produto de software
orientado a objetos. Além disso, podemos encontrar facilmente soluções não estruturadas,
construídas a partir de linguagens de programação com suporte à estruturação.

6.1 Paradigmas de programação funcional, imperativo e lógico


Vídeo
Existem diversos paradigmas de programação direcionados para as mais
variadas aplicações e para o desenvolvimento de sistemas. A seguir, apresentaremos
detalhes e exemplos de aplicação de alguns dos paradigmas de programação mais
utilizados pelo mercado: funcional, imperativo e lógico.

6.1.1 Paradigma de programação funcional


O paradigma de programação funcional surgiu como uma maneira de alterar a abordagem
de um problema. Nem sempre é uma tarefa simples identificar como resolver um problema, e um
dos propósitos da programação funcional é permitir que os desenvolvedores trabalhem na solução
dos problemas de software, não exigindo, necessariamente, conhecimentos sobre ela.
Um exemplo clássico de aplicação da programação funcional é a resolução do famoso
algoritmo de ordenação conhecido como Quick Sort, amplamente utilizado no ensino de lógica
computacional no tratamento de estruturas de dados. Elaborar o código para o funcionamento do
Quick Sort em linguagens de programação como C ou Java exige uma quantidade considerável de
linhas de código. Um exemplo de aplicação com linguagem funcional e que exige menor esforço
em lógica e quantidade de linhas pode ser observado na Figura 1, que apresenta a solução do
algoritmo Quick Sort em linguagem de programação Haskell.
60 Linguagens e paradigmas de programação

Figura 1 – Exemplo de código em linguagem Haskell

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

Fonte: Elaborada pelo autor.

Em comparação com o código em linguagem Haskell, um algoritmo desenvolvido em


linguagem C para codificar o Quick Sort seria similar ao exemplo descrito na Figura 2. A diferença
na escrita e na quantidade de linhas é bem maior em uma linguagem de programação que não é
paradigma funcional – no caso do exemplo, a linguagem C.
Figura 2 – Exemplo de código em linguagem C

void quick_sort(int *a, int left, int right) {


int i, j, x, y;

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--;
}
}

if(j > left) {


quick_sort(a, left, j);
}
if(i < right) {
quick_sort(a, i, right);
}
}

Fonte: Elaborada pelo autor.


Paradigmas de programação 61

Quando se aplicam linguagens de programação funcionais em um projeto de software,


não há a necessidade de declarar variáveis informando explicitamente seus tipos. A alocação de
memória para as variáveis ocorre no momento em que uma função é chamada, alocando apenas
o espaço necessário para os parâmetros declarados em sua definição. Estruturas de repetição, que
são recursos amplamente utilizados em outros paradigmas de programação, podem ser resolvidas
em linguagens funcionais com a aplicação do conceito da recursividade, no qual uma função faz
referência a ela mesma e, dessa forma, permite sua repetição.
O exemplo de código da Figura 3, em linguagem Haskell, apresenta um formato de escrita de
função recursiva, no qual são impressos todos os elementos contidos em uma lista. Enquanto essa
lista for diferente de zero, o primeiro elemento será impresso.
Figura 3 – Exemplo de código recursivo

> imprimeLista [ ] = [ ]
> imprimeLista (x:xs) = print x imprime xs

Fonte: Elaborada pelo autor.

Diversos conceitos definidos dentro do paradigma funcional permitem que as linguagens


funcionais tenham um comportamento multithread1 sem muito esforço, sendo que atualmente sua
aplicação em processamento paralelo vem crescendo.

6.1.2 Paradigma de programação imperativo


Pelo paradigma imperativo, também conhecido como estruturado ou procedural, qualquer
problema pode ser dividido em problemas menores, de resolução mais fácil, chamados de sub-rotinas
ou funções. Cada sub-rotina ou função pode receber valores de entrada e submetê-los a um processo
capaz de gerar um valor de saída para quem fez uso da função. O paradigma estruturado preconiza,
ainda, que todo processamento pode ser realizado pelo uso de três tipos de estrutura: sequencial,
condicionada e iterativa (ASCENCIO; CAMPOS, 2012).
Na estrutura sequencial, as instruções de um algoritmo são realizadas em uma sequência
predeterminada, enquanto na forma condicionada as ações são direcionadas de acordo com
pontos de decisão ou de escolha de um algoritmo. Já nas estruturas iterativas, os códigos
de um algoritmo são executados em forma de repetições, determinadas por intervalos ou
quantidade de execuções.
O modelo de arquitetura de computadores conhecido como von Neumann exerceu um papel
de extrema importância sobre o projeto das linguagens de programação imperativas e em como se
deu toda a evolução da área no decorrer das últimas quatro décadas.
Os computadores projetados com arquitetura de von Neumann utilizam os dados e programas
alocados em uma mesma unidade de armazenamento. A Unidade Central de Processamento
(CPU), em que as instruções dos programas são executadas, fica separada fisicamente da memória.
Nesse modelo de arquitetura, as instruções dos programas e os dados são transportados sempre da

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.

Funções em linguagens de programação imperativas são porções de código escritas de forma


isolada e sob um nome. Essas funções encapsulam códigos que podem ser executados conforme a
necessidade, e normalmente são utilizadas de modo que sejam escritos uma única vez códigos que
se repetem em um algoritmo.

6.1.3 Paradigma de programação lógico


O paradigma lógico surgiu na década de 1970. É uma linguagem criada para propósitos
gerais que, com o passar dos anos, foi sendo associada à programação de sistemas para inteligência
artificial. Suas origens são baseadas na lógica, diferentemente da álgebra booleana2 e da aritmética,
que são utilizadas em linguagens funcionais e imperativas.
Na linguagem de programação lógica (Prolog), um conjunto de fatos pode ser declarado pelo
programador e, com base nesse conjunto de fatos, teoremas podem ser provados. Essa linguagem,
para atingir o objetivo proposto, busca uma coleção de fatos e passos de inferência.

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

Fonte: Elaborada pelo autor.

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

6.2 Exemplos de aplicação


Vídeo
Nesta seção, veremos algumas das principais aplicações dos paradigmas de
programação estudados até aqui. Esses exemplos serão apresentados em forma de
código-fonte e por meio de tipos de sistemas que podem ser aplicados.

6.2.1 Paradigma funcional


Um exemplo de código em linguagem funcional pode ser observado na Figura 5, em que é
realizado o cálculo do fatorial de um número em linguagem funcional Haskell.
Figura 5 – Exemplo de código em linguagem Haskell

1 module Main where


2 fatorial n = if n == 0 then 1 else n *
fatorial (n - 1)
3 main = do putStrLn “Quanto é 5! ?”
4 x <- readLn
5 if x == fatorial 5
6 then putStrLn “Você acertou!”
7 else putStrLn “Você errou!”
Fonte: Elaborada pelo autor.

Algumas linguagens de programação mais modernas conseguem operar de forma mista,


como é o caso da linguagem Python, que implementa o paradigma orientado a objetos e permite
aos desenvolvedores construírem soluções com códigos escritos em paradigma funcional.

6.2.2 Paradigma imperativo


Uma das principais linguagens de paradigma imperativo é a linguagem C, que é atualmente
aplicada a diversos tipos de sistemas, como: eletrônicos, indústria automobilística, automação
industrial, sistemas de internet das coisas, computação móvel e computação em nuvem. O exemplo
da Figura 6 apresenta um algoritmo em linguagem C para a resolução do cálculo do fatorial de um
número inteiro. Vejamos:
Figura 6 – Exemplo de fatorial em linguagem C

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

Devido à sua estrutura de funcionamento, com instruções em forma sequencial, a resolução


de um problema é realizada em etapas previamente organizadas. Havendo pontos de decisão no
algoritmo que direcionem as saídas de dados para pontos esperados de funcionamento, essas
saídas podem representar valores esperados, em caso de funcionamento adequado do algoritmo,
ou resultados indesejados, de acordo com as informações fornecidas para o seu funcionamento.

6.2.3 Paradigma lógico


A seguir, na Figura 7, podemos ver algumas operações com fatos lógicos em um programa
escrito em Prolog.
Figura 7 – Exemplo de paradigma lógico

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

arthur é avô de ricardo


x = arthur,
y = ricardo

Next 10 100 1,000 Stop

?- avo(x,y)

Fonte: Elaborada pelo autor.

Como observamos anteriormente, a linguagem Prolog é uma das principais linguagens de


paradigma lógico utilizadas atualmente. Baseada em fatos e predicados lógicos, é aplicada em redes
neurais, sistemas de inteligência artificial e mineração de dados.

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

Durante o processo de desenvolvimento de um sistema computacional, parte da tarefa dos


desenvolvedores é identificar características do projeto e avaliar quais metodologias e paradigmas
de programação mais se adequam ao projeto em questão. Após a análise e as especificações de
várias características do projeto, definem-se quais estruturas de linguagens de programação utilizar.
Dependendo da complexidade e dos resultados esperados do projeto, pode haver a necessidade
de utilizar uma ou mais linguagens de programação para obter o melhor funcionamento de um
sistema computacional.

Ampliando seus conhecimentos


• PARADIGMAS de programação // Vlog #26. 2016. 1 vídeo (7 min.). Publicado pelo canal
Código Fonte TV. Disponível em: https://www.youtube.com/watch?v=EefVmQ2wPlM.
Acesso em: 18 dez. 2019.

• PROGRAMAÇÃO funcional // Dicionário do programador. 2019. 1 vídeo (8 min.).


Publicado pelo canal Código Fonte TV. Disponível em: https://www.youtube.com/
watch?v=BxbHGPivjdc. Acesso em: 18 dez. 2019.

O canal Código Fonte TV apresenta conteúdo de relevância dentro da área de


tecnologia da informação e linguagens de programação. Nesses dois vídeos sugeridos,
os apresentadores explicam o contexto geral dos paradigmas de programação e detalhes
das linguagens funcionais e orientadas a objetos.

Atividades
1. Explique o conceito de recursividade presente em linguagens de paradigma funcional.

2. Como o paradigma lógico se difere do paradigma de programação imperativo?

3. Explique a característica de sequência das linguagens de paradigma imperativo.

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

Neste capítulo, abordaremos a introdução dos conceitos do paradigma de programação


orientada a objetos, que é aplicado em uma grande variedade de sistemas e amplamente utilizado na
indústria de software. O desenvolvimento de aplicações modernas, em grande parte, é sustentado
por esse paradigma e, portanto, conheceremos quais são as principais características de orientação
a objetos e como ela pode ser utilizada de maneira produtiva no desenvolvimento de sistemas.
Veremos também que a programação orientada a objetos facilita a interação dos
computadores com o mundo real. Entenderemos que isso ocorre porque qualquer coisa que
pertença ao mundo físico pode ser transcrita na forma digital, como uma pessoa, um emprego
ou um utensílio doméstico. Enfim, são inúmeras possibilidades que chamamos de objetos dentro
dessa modalidade de programação.
Por fim, observaremos que a orientação a objetos preza a padronização e metodologia no
projeto e desenvolvimento de sistemas, resultando em produtos mais robustos, capazes de atender
aos níveis de qualidade e segurança exigidos pelo mercado atual.

7.1 O que é programação orientada a objetos?


Vídeo
Em nosso cotidiano, usamos a comunicação para conseguir executar nossas
atividades. Um modelo de comunicação é a língua, isto é, o idioma que atua como
código, que pode ser expresso por meio do registro escrito ou falado e que constitui
a principal ferramenta de comunicação.
Quando vamos a uma loja e pedimos um produto, não levamos em
consideração a complexidade do fenômeno que ocorre nesse simples ato de comunicação. E se o
atendente fosse estrangeiro, por exemplo, e não entendesse português? O que torna meu pedido
bem-sucedido, e eu possa levar o produto para casa, é o fato de a mensagem ser compreendida.
Isso se impõe como um pré-requisito, por isso, em programação, chamamos de linguagem o modo
pelo qual trocamos mensagens para conseguir executar as tarefas que desejamos em sistemas
computacionais.
No caso específico da programação orientada a objetos, essa troca ocorre entre objetos
que, por sua vez, são organizados por tipo, função, características, entre outras hierarquias. Isso
ocorre para aproximar o máximo possível a linguagem e o funcionamento da computação às
coisas existentes no mundo real, ou seja, a organização desse tipo de programação é similar àquela
utilizada pelas pessoas para descrever objetos do mundo real (DEITEL, P.; DEITEL, H., 2010).
A programação orientada a objetos foi desenvolvida com base em um tipo de linguagem
de programação criada em 1967, a Simula 67, pioneira no conceito de objeto. Posteriormente,
68 Linguagens e paradigmas de programação

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.

7.2 Definição de classes e objetos


Vídeo
Vamos imaginar que precisamos organizar um guarda-roupa. Para isso,
é necessário considerar as roupas como o principal item para trabalharmos,
portanto, elas seriam objetos. Se tudo que existe no mundo real pode ser um objeto,
contudo, dizer que roupas são objetos seria uma afirmação muito vaga para nossa
organização. Afinal, não costumamos guardar talheres e copos no guarda-roupa.
Assim, ao falarmos de roupas, estamos tratando de uma categoria específica de objetos, uma classe,
comparada a outros itens do cotidiano, como louças, móveis e eletrodomésticos.
Quando começamos a organizar o guarda-roupa, vemos que a classe roupas ainda não é
específica o suficiente, porque precisamos acomodar camisas, calças e gravatas, e não queremos
guardar meias e toalhas de banho na mesma gaveta. Percebemos, então, que o tipo de peça, sua
categoria, é uma classe bem mais útil para nossa missão. Camisas, meias e vestidos são as classes
que definimos para a organização. Com isso, temos maneiras mais específicas de encontrá-las
dentro do nosso guarda-roupa, levando em consideração seus atributos.
Se procuramos uma roupa para sair, e desejamos aquela camiseta preta, daquela banda
preferida, temos certeza de que não vamos encontrá-la na gaveta de meias, tampouco na
prateleira de camisetas brancas. Os atributos de determinada peça de roupa a tornam única
e conferem a ela o título de objeto. Logo, a camiseta preta estará na prateleira de camisetas
escuras; essa é sua classe.
Na lógica da programação orientada a objetos, devemos saber que é possível analisar diversas
ações cotidianas, e não apenas organizar o guarda-roupa, para encontrarmos nossas peças com
mais facilidade, por exemplo. Sendo a programação orientada a objetos constituída de classes e
objetos, precisamos entender o papel desses dois conceitos dentro da lógica de programação.
Precisamos saber, primeiro, que um objeto é criado a partir de uma classe. Aqui, objetos
são extensões do mundo real para o mundo da programação (BARNES; KÖLLING, 2008). Em
resumo, objetos correspondem a elementos da vida real e classes agrupam esses objetos. Dessa
maneira, quando falamos de carro, e apenas de carro, estamos falando de uma classe, isso porque
não especificamos suas características. Então, várias características podem estar contidas, mas o
importante é que se trata de um carro.
Agora, considere que um Gol fabricado em 2016 está ao lado de um Fiesta fabricado em
2015, ambos em uma concessionária onde, na rua, acabou de passar um Fusca fabricado em 1986.
Podemos dizer, então, que o Gol 2016, o Fiesta 2015 e o Fusca 1986 são objetos da classe carro,
não importando sua marca ou ano de fabricação, ou seja, são elementos comuns e pertencem ao
Paradigma de programação orientada a objetos 69

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.

• Incidentes (evento ou ocorrência):


• atender ao cliente;
• buscar o produto;
• fazer o pagamento.

• Interações (transação ou contrato):


• solicitar o produto;
• solicitar o valor da compra.

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

1 public class Funcionario


2 {
3 private double salario;
4 private String nome;
5 private Date dataAdmissao;
6 }
Fonte: Elaborada pelo autor.

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

raio: 25 raio: 250

diametro: 50 diametro: 500

cor: azul cor: transparente


Paradigma de programação orientada a objetos 71

Fonte: Elaborada pelo autor.

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.

7.3 Exemplos de aplicação de orientação a objetos


Vídeo
Atualmente, a programação orientada a objetos é um dos principais
paradigmas de programação utilizados no desenvolvimento de software, desde
em sistemas corporativos de grande porte, em aplicações web e mobile, até jogos
digitais. Nesta seção, veremos algumas formas de utilização da programação
orientada a objetos com a linguagem Java e conceitos fundamentais como herança.
Considerada uma maneira de reutilizar o código, na herança há uma nova classe que
incorpora os membros de uma classe já existente, que são aprimorados com novas ou melhores
capacidades. A partir da herança, os programadores economizam tempo no desenvolvimento de
um programa, uma vez que podem reutilizar códigos já testados e aprovados.
Consequentemente, crescem as possibilidades de o novo sistema ter sucesso ao ser
implementado. Além disso, com a herança podemos diferenciar o relacionamento “é um” do
relacionamento “tem um”. No relacionamento “é um”, o objeto de uma classe é uma herança e,
portanto, pode ser tratado como elemento de sua superclasse.
Na Figura 4, a seguir, temos o carro (subclasse), que é um veículo (superclasse). Logo,
todo carro é um veículo, mas nem todo veículo é um carro. No relacionamento “tem um”, existe
uma composição quando não há herança e, com isso, um objeto terá uma ou mais referências de
objetos como membros. Um carro, por exemplo, tem direção e motor e, portanto, o objeto carro
faz referência aos objetos direção e motor.
Ao criar uma classe, em vez de declarar novos membros, podemos fazer com que ela herde
membros de uma classe já existente. Consequentemente, teremos uma superclasse (comumente
conhecida como classe pai ou classe mãe) ou classe-base. Na linguagem Java, a classe utilizada como
base para aquelas criadas posteriormente serve como modelo estrutural de objetos e métodos. Ela
pode ser direta, quando utilizada explicitamente como fonte, ou indireta, quando às vezes se faz de
fonte para uma classe de dois ou mais níveis inferiores na hierarquia.
72 Linguagens e paradigmas de programação

Figura 4 – Exemplo do conceito de herança

Veiculo

Carro Moto Onibus

Fonte: Elaborada pelo autor.

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

Carro Moto Onibus


- string: linha
-int: qtdeAirBag -string: tipoGuidao
-int: qtdeAssentos
Fonte: Elaborada pelo autor.

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

Figura 6 – Exemplo de aplicação de herança em Java

1 public class Veiculo


2 {
3 private String modelo;
4 private String marca;
5 private String potencia;
6 }
7
8 public class Carro extends Veiculo
9 {
10 private int qtdeAirBags;
11 }
12
13 public class Moto extends Veiculo
14 {
15 private String tipoGuidao;
16 }
17
18 public class Onibus extends Veiculo
19 {
20 private String linha;
21 private int qtdeAssentos;
22 }

Fonte: Elaborada pelo autor.

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

Conforme a computação foi avançando e os sistemas se tornando mais complexos, as linguagens


procedurais geraram códigos muito extensos, de difícil entendimento e manutenção. A partir desse
cenário, as linguagens de programação orientadas a objetos tiveram a possibilidade de mostrar como um
novo paradigma ajudaria na resolução de problemas em sistemas de maior complexidade.
Desde o seu surgimento, a orientação a objetos se tornou referência e padrão em desenvolvimento
de sistemas, visto sua característica de organizar as informações em classes e objetos, de modo a tornar a
modelagem de sistemas e codificação mais próximas de como as coisas são no mundo real.

Ampliando seus conhecimentos


• PROGRAMAÇÃO orientada a objetos (POO)/Dicionário do programador. 2018. 1 vídeo
(9min. 56seg.). Publicado pelo canal Código Fonte TV. Disponível em: https://www.
youtube.com/watch?v=QY0Kdg83orY. Acesso em: 7 out. 2019.
O canal Código Fonte TV apresenta conteúdo de relevância na área de tecnologia da
informação e linguagens de programação. Nesse vídeo, podemos ver detalhes acerca do
paradigma de programação orientada a objetos e conhecer mais sobre sua importância no
desenvolvimento de sistemas.
Unified Modeling Language (UML). Disponível em: http://uml.org/. Acesso em: 27 jan. 2020.
A programação orientada a objetos está ligada a conceitos de Unified Modeling Language
(UML – "Linguagem Unificada de Modelagem", em tradução livre), que determina um
conjunto padrão de elementos gráficos para a elaboração de projetos de sistemas que
utilizem esse paradigma de programação. Conheça mais sobre o que é UML e orientação
a objetos nesse site oficial.

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

Desde o surgimento dos computadores elétricos, na década de 1940, e com a constante


evolução na indústria da eletrônica, ao longo das décadas seguintes, o processo de desenvolvimento
de software foi aperfeiçoado por meio de diversas técnicas e metodologias. No foco central do
desenvolvimento de sistemas, passaram a figurar as linguagens de programação e as técnicas de
projeto e decodificação que conhecemos como paradigmas de programação.
Para acompanhar as aceleradas evoluções dos sistemas informatizados, as linguagens
de programação sempre andaram em conjunto com elas e adaptaram-se às melhorias, que são
constantemente implementadas nos computadores. No decorrer dos anos, o fato de a internet e
as redes de comunicação tornarem-se mais presentes no dia a dia das pessoas e dos ambientes
corporativos, demanda paradigmas de projetos e linguagens de programação adequados a cada
momento tecnológico.
Neste capítulo, abordaremos as tecnologias mais modernas no que diz respeito ao
desenvolvimento de sistemas. Ademais, vamos conhecer quais são as linguagens de programação
mais promissoras no âmbito da tecnologia, que despontarão nas próximas décadas.

8.1 Futuro das linguagens de programação


Vídeo
Processos, pessoas e tecnologias estão cada vez mais integrados por meio das
redes de comunicação de alta velocidade – que vão desde redes de celulares e sem fio
residenciais até as redes corporativas. Sabemos que a internet passou por constantes
evoluções e melhorias desde a sua ascensão na década de 1990, e, hoje, sua presença
é notável na maioria dos ambientes. Já não conseguimos dissociar dela muitas de
nossas atividades, e o computador parece não ter mais utilidade se não estiver conectado à rede.
O volume de dados gerado diariamente nos mais diversos tipos de sistemas computacionais
e dispositivos eletrônicos está na casa de zetta bytes, ou seja, 270 bytes. De acordo com o Gartner
Institute (2017), parte desse volume é originado por, aproximadamente, 3,7 bilhões de pessoas
conectadas em todo o planeta.
Para um novo modelo de negócios, no qual o volume e o tipo de dados gerados diariamente
crescem de maneira exponencial, as ferramentas de desenvolvimento de sistemas e as linguagens
de programação precisam se adaptar a um novo modelo de processamento de dados em grandes
proporções. Nesse novo modelo, conhecido como Big Data, as demandas de processamento e
armazenamento são feitas em computadores capazes de realizar trilhões de operações por segundo.
No Big Data, em comparação com sistemas de armazenamento de dados tradicionais,
os dados registrados podem assumir diversas formas. Atualmente, os dados processados pelos
sistemas de internet são mistos e podem ser compostos de vídeos, imagens, áudios e textos – tudo
armazenado em planilhas e tabelas relacionadas.
76 Linguagens e paradigmas 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.

8.1.1 Linguagem Python


A linguagem de programação Python1 possui código aberto (open source) e ganhou
popularidade nos últimos anos devido à sua facilidade de aprendizagem. É uma das linguagens
mais aptas a operar com grande volume de dados e parte da sua popularidade se deve ao fato
de ela possuir uma comunidade de desenvolvedores bastante ativa, especializada e disposta em
aperfeiçoá-la.
Essa linguagem vem ganhando notoriedade e adeptos por ser amplamente utilizada pela
comunidade acadêmica em projetos de ciência de dados. Tal notoriedade se reflete no mercado,
onde diversas corporações vêm aplicando a linguagem Python em seu dia a dia para a resolução
de problemas em grandes volumes de dados, de modo que a demanda por profissionais que a
conheçam está aumentando.

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

1 Saiba mais a respeito dessa linguagem no site oficial: http://www.python.org.


Tendências em linguagens de programação 77

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

8.1.3 Linguagem Julia


A linguagem de programação Julia vem ganhando espaço entre desenvolvedores de soluções
de Big Data e cientistas de dados. Sua expansão crescente se deve ao fato de ser uma linguagem
versátil, que opera com vários tipos de aplicações e, ainda, permite trabalhar com sistemas
distribuídos, ou seja, que operam em ambientes e regiões geográficas distintos.
Entre suas principais características está o código aberto, que possibilita a realização de
tarefas paralelamente em sistemas distribuídos, além de executar códigos da linguagem C sem a
necessidade de ferramentas adicionais (JULIA, 2019).
Julia é uma linguagem de programação relativamente recente, sendo um projeto iniciado
em 2009. Um fator de destaque dessa linguagem é sua capacidade de alto desempenho em uso
científico e em cálculos numéricos.

8.1.4 Linguagem Java


Essa não é exatamente uma das linguagens escolhidas para iniciar um projeto em Big Data,
mas, dependendo do tipo de projeto a ser realizado, existe a necessidade de migrar dados antigos
para situações presentes. Nesse caso, a linguagem em questão, ou as ferramentas baseadas nela,
podem ajudar no processo de migração de dados, pois Java2 é considerada uma das principais
linguagens da atualidade, além de estar presente em diversas aplicações corporativas, de pequeno
a grande porte.
Ter conhecimentos em linguagem Java pode ser um diferencial na carreira de um
profissional de desenvolvimento de software. Mesmo trabalhando em um projeto de Big Data
com ferramentas mais adequadas que Java, ainda existe a possibilidade de integração de sistemas
para troca de dados entre diferentes plataformas. Java é uma linguagem de programação utilizada
em aplicações para computação em nuvem, dispositivos móveis e compatíveis com os principais
sistemas operacionais do mercado.

8.1.5 Linguagem SQL


Assim como na linguagem Java, a Structured Query Language (SQL)3, que significa, em
português, Linguagem de Consulta Estruturada, pode ser utilizada em projetos cuja migração de
dados antigos para um cenário de Big Data mais atual seja necessária. Nesse caso, a SQL pode
facilitar a transposição dos dados para um formato adequado ao processamento em ferramentas
de Big Data.

2 Saiba mais a respeito dessa linguagem no site oficial: https://www.java.com/pt_BR/.


3 Saiba mais a respeito dessa linguagem no tutorial disponibilizado pelo w3schools.com em: https://www.w3schools.
com/sql/.
78 Linguagens e paradigmas de programação

É 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.6 Linguagem Scala


A linguagem Scala, como o próprio nome sugere, tem escalabilidade e pode ser aplicada em
praticamente qualquer plataforma. Ela é executada sobre a máquina virtual do Java e opera com os
paradigmas de programação funcional e orientado a objetos.
Como a linguagem Scala é baseada em Java, o fato de ela possuir paradigma funcional torna
a codificação mais simples e objetiva. As aplicações de Big Data com linguagem Scala merecem
destaque, pois possibilitam operar em todas as camadas da aplicação, de modo a reduzir sua
complexidade e melhorar seu desempenho, sem a necessidade de agregar outras ferramentas ou
linguagens de programação ao mesmo projeto (SCALA, 2019).

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

Dentro do segmento de Big Data e da ciência de dados, as opções de ferramentas, linguagens


e paradigmas de programação são bastante diversificadas. A cada ano, surgem novas tecnologias
para dar suporte ao desenvolvimento de soluções corporativas que necessitam analisar e processar
grandes quantidades de dados. Ferramentas como os exemplos que observamos são linguagens
conhecidas e já consolidadas no mercado. Porém, com a criação de novas possibilidades,
toda a cadeia de desenvolvimento de soluções passa a ficar mais integrada e a compartilhar
funcionalidades, propiciando, assim, ainda mais poder de processamento para a infraestrutura de
redes e computação.
Tendências em linguagens de programação 79

8.2 Linguagens de programação mais promissoras


Vídeo
O panorama de desenvolvimento apresentado neste capítulo está bastante
voltado para o novo mercado de ciência de dados que, por sua vez, está em
crescente aumento e carente de profissionais qualificados. O desenvolvimento
das soluções corporativas atuais requer um novo olhar por parte dos projetistas
e desenvolvedores, pois o contexto contemporâneo exige maior integração entre
departamentos. Além disso, podemos afirmar que a tecnologia da informação, tida como um setor
de suporte em tempos anteriores, hoje é parte ativa do negócio, auxiliando em decisões estratégicas
dentro das empresas.
Os termos “internet das coisas” (IoT – Internet of Things) e “ciência de dados” estão cada
vez mais em evidência, tornando-se comuns no cotidiano das corporações e nos produtos e
serviços ofertados para a população. Aos desenvolvedores de sistemas e às empresas de tecnologia,
é de fundamental importância olhar para o presente e analisar as projeções futuras, pois a atual
conjuntura é de alta competitividade. Ademais, as novas soluções de linguagens e ferramentas
surgem conforme as demandas do mercado em oferecer informações de qualidade, que tenham
precisão para auxiliar nas tomadas de decisão.
No conceito de internet das coisas e de ciência de dados, existem duas plataformas
bastante integradas: software e hardware. Em tempos atuais, a oferta de dispositivos conectados
aumenta exponencialmente e, de acordo com o Gartner Institute (2017), no ano de 2020, haverá
aproximadamente 20 bilhões de dispositivos IoT ativos, ou seja, uma imensidão de dispositivos
conectados à internet, gerando e enviando dados para servidores em diversos locais. Toda
essa infraestrutura demanda desenvolvimento, seja no dispositivo remoto, que é um item de
hardware, seja nas aplicações remotas, que recebem os dados e posteriormente os softwares de
Big Data, responsáveis pela análise de dados, utilizando uma ou mais linguagens de programação
(GARTNER, 2017).
Nesse contexto, é válido acompanhar a ferramenta Tiobe Index, utilizada por diversas
empresas e pela comunidade de desenvolvedores para identificar as linguagens de programação
mais utilizadas no mercado. O índice da Tiobe é atualizado mensalmente e apresenta um ranking
com as 20 linguagens mais utilizadas, também listando, em segundo plano, um total com 50
linguagens. Nos anos de 2018 e 2019, por exemplo, o Tiobe Index mostrou um sensível aumento
no uso de tecnologias para a ciência de dados (TIOBE Software BV, 2020).
Como o mercado de soluções atual é bastante integrado, coexistindo em um mesmo ambiente
aplicações em dispositivos móveis, internet das coisas, aplicações web e Big Data, as demandas
e perspectivas de linguagens de programação são bastante variadas. Mercados que necessitem
de soluções mais voltadas para hardware, por exemplo, utilizam massivamente a linguagem de
programação C. Já os ambientes mais voltados para a utilização dos clientes finais demandam
tecnologias baseadas em web, que facilitem a apresentação dos dados, como HTML e JavaScript.
80 Linguagens e paradigmas de programação

No mercado atual, linguagens consolidadas e relativamente antigas, tal como a linguagem C,


criada em 1972, têm alta demanda devido ao fato de existir um crescente volume de equipamentos
IoT lançado todos os anos. O mercado de linguagens voltadas para a análise e a ciência de dados é
relativamente novo. Existem muitas opções de ferramentas, como as apresentadas ao longo deste
capítulo, sendo algumas já consolidadas enquanto outras, novas, possuem grande potencial de
crescimento.
Levando em conta essas reflexões, cabe aos desenvolvedores analisar o histórico de cada
linguagem e avaliar o mercado a que se destina cada ferramenta. Para isso, recursos como os
ofertados pelo Tiobe Index, por exemplo, são imprescindíveis, pois contribuem com a identificação
de tecnologias com potencial de mercado, resultando em projetos com maior probabilidade de
aceitação e consequente sucesso.

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.

Ampliando seus conhecimentos


• GOOGLE. Google Cloud, 2020. Página inicial. Disponível em: https://cloud.google.com/.
Acesso em: 10 jan. 2020.
• AWS. Amazon Web Services, 2019. Página inicial. Disponível em: https://aws.amazon.
com/pt/. Acesso em: 10 jan. 2020.
• MICROSOFT. Microsoft Azure, 2020. Página inicial, 2019. Disponível em: https://azure.
microsoft.com/pt-br/. Acesso em: 10 jan. 2020.
Tendências em linguagens de programação 81

Atualmente, no mercado de computação, existem várias plataformas que auxiliam as


empresas no processo de desenvolvimento de sistemas e na análise de dados. Entre as
plataformas disponíveis, destacam-se Google Cloud, Amazon Web Services e Microsoft
Azure.
Cada uma dessas possibilidades tem suas particularidades e conta com um conjunto
específico de ferramentas, porém o propósito de todas é idêntico: fornecer soluções de
tecnologia com base em computação em nuvem, inteligência artificial, negócios e análise
de dados.
Para as empresas, existem vantagens em utilizar esses serviços, pois não há necessidade de
adquirir equipamentos, bastando alocar os recursos conforme a necessidade e pagar por
aquilo que se usa. Em casos que ocorra aumento na demanda de recursos computacionais,
as plataformas mencionadas nessa seção ajustam automaticamente os recursos, evitando
que as empresas percam dados ou fiquem com serviços inativos. Acesse o site dessas
corporações, referenciados anteriormente, e conheça as soluções que elas podem oferecer.

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.

GO. Disponível em: https://golang.org/. 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.

2. A linguagem C, em comparação com outras, é muito robusta e possui a característica


de poder operar em níveis mais baixos de hardware, ou seja, com ela é possível
desenvolver código em assembly e, assim, tornar uma aplicação de software embarcado
mais eficiente. Como a linguagem C pode operar mais próximo de hardware do que
outras linguagens, também é considerada uma das principais para o desenvolvimento
de sistemas operacionais.

3. Ao contrário das linguagens de programação, a linguagem de marcação de texto (no caso,


HTML) é utilizada para a apresentação de elementos textuais e gráficos dentro de um
navegador web, não sendo possível desenvolver um software a partir dela. Também é
utilizada na formatação da apresentação de informações em páginas web com HTML, mais
uma característica que faz com que não seja definida como linguagem de programação.

2 Tipos de linguagens de programação


a) De acordo com sites de ranking de linguagens, como o TIOBE Software BV, estas
figuram entre as mais utilizadas: Java, PHP, C#, Python.
b) Grandes corporações utilizam algumas destas linguagens devido à grande quantidade
de bibliotecas: Java, C#, C++, Delphi.
c) Estas linguagens são comumente aplicadas em sistemas de gestão devido à facilidade
de integração com sistemas já existentes, e por possuir conectividade com os
principais bancos de dados do mercado: Java, C#, Delphi, C++, Visual Basic.

4. A linguagem de programação C é uma das mais robustas para utilizar em hardware


devido a sua característica de operar em alto e baixo nível. Normalmente, dispositivos
de hardware possuem recursos limitados, o que acaba restringindo o uso de outros
paradigmas de programação ou pelo simples fato de outras linguagens não conseguirem
operar em nível baixo. Java, por exemplo, é uma linguagem de programação sem grandes
capacidades de operar em baixo nível, comunicando-se diretamente com hardware.

5. Python, Ruby, Earlang, Elixir, JavaScript.

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

3 Tipos de dados em linguagens de programação


1. As variáveis e constantes têm funcionamento similar: ambas possuem um nome e um tipo
de dado associado, além de armazenarem dados em memória. A diferença está no fato de
que a variável tem seu conteúdo modificado ao longo do funcionamento de um programa, e
as constantes possuem valor fixo, nunca se alterando durante o funcionamento do programa.

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.

3. Os tipos de dados primitivos de uma linguagem de programação definem um conjunto de


dados para identificação e realização dos principais cálculos aritméticos e lógicos. Dados
primitivos normalmente são os números inteiros e reais, tipos lógicos, caracteres e sequências
de caracteres.

4 Introdução à linguagem de programação Java


1. As linguagens de programação fortemente tipadas obrigam que as variáveis sempre sejam
declaradas informando, de forma explícita, o seu tipo, ou seja, antes do nome da variável é
obrigatório escrever o tipo de dado da mesma.

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.

3. JVM é um programa que faz a interpretação de um bytecode Java, que é a compilação do


código-fonte, para execução em um sistema operacional. Em teoria, o código‑fonte Java
é sempre o mesmo, o que mudam são as opções de JVM para cada sistema operacional,
fazendo com que o Java tenha essa característica multiplataforma.

5 Estruturas de dados com linguagem de programação Java


1. As duas declarações estão corretas e funcionaram perfeitamente, porém, em ambos os
exemplos, será possível armazenar apenas um valor. No vetor, o valor será identificado pelo
índice [0] e o conteúdo da matriz pelo índice [0][0].

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

3. O funcionamento básico de uma pilha é um conjunto de endereços de memória gerenciado


de modo que, quando um novo dado é inserido, este terá preferência em relação ao anterior,
ou seja, o primeiro dado inserido em uma pilha será o último dado a ser lido pelo sistema.

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.

3. As linguagens de programação imperativas determinam que um programa seja realizado


linha a linha, ou seja, em sequência. Todas as instruções devem ser organizadas em uma
sequência ordenada de comandos, declaração de variáveis e atribuição de valores.

7 Paradigma de programação orientada a objetos


1. Classes representam a modelagem de coisas e objetos do mundo real, ou seja, uma classe
agregará todas as características e funcionalidades que identificam o objeto (ou a coisa) em
questão; objetos são os itens que as classes estão modelando; e as instâncias de classes são,
em si, um objeto criado com base em uma classe que carrega informação em seus atributos.

2. Exemplo de resolução:

1 public class Aluno


Aluno
2 {

-String: nome 3 private String nome;


4 private String matricula;
-String: matricula
5 private int idade;
-int: idade 6 }

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

1 public class ContaBancaria


2 {
3 private String cliente;
4 private String nroConta;
5 }
6
7 public class ContaCorrente extends ContaBancaria
8 {
9 private double saldo;
10 private String pagamentos;
11 }
12
13 public class ContaPoupana extends ContaBancaria
14 {
15 private double saldo;
16 private double taxaJuros;
17 }

8 Tendências em linguagens de programação


1. A linguagem Python teve uma grande adesão em projetos de ciência de dados e Big Data ao
longo dos anos, devido à facilidade de aprendizagem, à simplicidade na escrita de códigos e
às bibliotecas que auxiliam na manipulação de grandes volumes de dados e cálculos.

2. A linguagem Java é bastante importante para o mercado, devido à aplicação em sistemas


de vários níveis e tamanhos. Estudar Java pode ser uma boa oportunidade considerando a
quantidade de sistemas existentes que foram desenvolvidos nessa linguagem e que, por isso,
necessitam de manutenção e desenvolvimento de melhorias.

3. Para o profissional de desenvolvimento de sistemas, é importante conhecer SQL


porque praticamente todos os sistemas existentes, independentemente da linguagem de
programação utilizada, irão gerar dados que precisam ser armazenados em um banco de
dados. SQL é um padrão de linguagem para banco de dados, portanto é de fundamental
domínio.
LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO
VALDINEI J. SAUGO

Código Logístico Fundação Biblioteca Nacional


ISBN 978-85-387-6523-3

58843 9 788538 765233

Você também pode gostar