Вы находитесь на странице: 1из 12

1

Universidade Católica de
Moçambique

Centro de Ensino á Distância


Coordenação dos Cursos Online

LINK:
http://portal.ucm.ac.mz

FACEBOOK:
Linguagem de Programação https://www.facebook.com/ceducm
Fundamentos de Programação EMAIL:
ced-online@ucm.ac.mz
2

Índice

1 INTRODUÇÃO ............................................................................................................................. 3
2 ORGANIZAÇÃO BÁSICA DE UM COMPUTADOR ............................................................. 3
3 PROGRAMAS DE COMPUTADORES..................................................................................... 4
3.1 Linguagem de Máquina .................................................................................................... 4
3.2 Linguagem de Programação ............................................................................................ 5
3.3 Compilador ........................................................................................................................ 5
4 SISTEMAS OPERACIONAIS .................................................................................................... 5
5 MÁQUINAS VIRTUAIS .............................................................................................................. 7
6 QUAIS SÃO OS TIPOS DE LINGUAGEM DE PROGRAMAÇÃO ...................................... 9
6.1 Programação estruturada ..................................................................................................... 9
6.2 Programação modular ......................................................................................................... 9
6.3 Programação orientada a objetos ........................................................................................ 9
6.4 Programação linear ........................................................................................................... 10
7 CLASSIFIÇÃO PARA ESTRUTURA DE TIPOS .................................................................. 10
7.1 Estáticaticamente Tipadas ................................................................................................ 11
7.2 Dinâmica ........................................................................................................................... 11
7.3 Vantagens e desvantagens................................................................................................ 11
3

1 INTRODUÇÃO
O computador é uma máquina capaz de seguir uma certa espécie de algoritmos chamados
Programas. Possui uma memória para armazenar dados e uma unidade aritmética capaz de causar
mudanças nos dados armazenados na memória.

Os computadores só entendem os algoritmos escritos em linguagem de máquina (de leitura difícil para
nós). Para podermos fazer com que o computador “entenda” uma linguagem próxima da linguagem
natural, utilizaremos programas chamados Compiladores.

2 ORGANIZAÇÃO BÁSICA DE UM COMPUTADOR


Um computador é constituído de quatro unidades básicas: unidade de entrada, unidade de saída,
unidade de processamento central e memória. Como indica sua denominação, uma unidade de
entrada é um dispositivo que permite que o usuário interaja com o computador, fornecendo-lhe
dados e informações que serão processadas, sendo o teclado o seu exemplo mais trivial.

Uma unidade de saída, por seu turno, serve para que sejam fornecidos ao usuário do computador os
resultados do processamento realizado. O monitor de vídeo e uma impressora são exemplos de
unidades de saída.

A unidade central de processamento (o processador) é responsável por todo o processamento


requerido, sendo muito conhecida por cpu, acrossemia de central processing unit.

Já a memória armazena dados e informações que serão utilizados no processamento, armazenamento


temporário, pois quando o computador é desligado tudo que está nela armazenado deixa de sê-lo
(dizemos que toda a memória é "apagada").
4

3 PROGRAMAS DE COMPUTADORES
Para que um computador tenha alguma utilidade, ele deve executar um programa que tenha uma
finalidade específica. Games são programas que têm como objetivo propiciar entretenimento aos
seus usuários. Processadores de texto (exemplo Word) são programas que permitem que textos
sejam digitados, impressos e armazenados para futuras modificações ou impressões. Planilhas
electrónicas (exemplo Excel) são programas que oferecem recursos para manipulação de tabelas de
valores numéricos. Navegadores (exemplo Internet Explorer, Firefox, google Chrome) permitem
acessos a páginas da internet, a rede mundial de computadores.

Estes programas destinam-se a usuários finais, aquelas pessoas que vão utilizar o computador com
um determinado objetivo específico, usando para tal um programa que ela aprendeu a usar, não
tendo nenhuma preocupação relativa ao funcionamento interno do sistema computador/programa.
Por exemplo, um usuário de word deve aprender o que fazer para que o processador destaque em
negrito alguma parte do texto ou localize uma palavra, não havendo necessidade de saber como o
programa realiza estas ações.

Na verdade, para que um processador de texto propicie ao usuário a possibilidade de que textos sejam
digitados, corrigidos, gravados, inseridos em outros textos e de que palavras sejam localizadas dentro
de um texto, é necessária a execução de muitas instruções com objetivos bem mais específicos e
restritos. Um programa de computador é, na realidade, um conjunto de instruções que podem ser
executadas pelo computador, de tal forma que a execução de subconjuntos destas instruções
permitem a realização de ações mais genéricas.

É muito grande o número de instruções dos programas citados acima, chegando à casa dos milhares.

Rigorosamente falando, um programa dos acima citados são conjunto de programas menores, cada
um deles com objetivos mais restritos, e que podem ser executados de forma integrada. É comum se
utilizar a palavra inglesa software para designar um conjunto de programas com objetivos mais
restritos que, sendo executados de forma integrada, propiciam a execução de ações bem mais
genéricas.

A parte da Ciência da Computação que trata do desenvolvimento de softwares é denominada


Engenharia de Software. Naturalmente, o estudo da Engenharia de Software deve ser precedido da
aprendizagem do desenvolvimento de programas “menores”, ação que comumente é denominada de
Programação de Computadores.

3.1 Linguagem de Máquina


Os processadores só entendem operações definidas em formato binário (código de máquina).

O formato dos comandos que um computador pode executar depende basicamente da arquitetura
do seu processador. Como existem diversas arquiteturas diferentes, um mesmo comando pode
funcionar em um computador e não funcionar em outro. O formato dos comandos aceitos por um
determinado processador define a linguagem de máquina.

Comandos definidos em linguagem de máquina são perfeitos para os computadores processarem. Por
outro lado, eles são extremamente complexos para as pessoas entenderem. Podemos verificar essa
complexidade observando o trecho do programa Chrome exibido em baixo:

000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000010000000000100000000
000000000000111000011111101110100000111000000000101101000000100
111001101001000011011100000000001010011001100110100100001010101
5

000110100001101001011100110010000001110000011100100110111101100
111011100100110000101101101001000000110001101100001011011100110
111001101111011101000010000001100010011001010010000001110010011

3.2 Linguagem de Programação


È extremamente complexo para uma pessoa escrever um programa diretamente em linguagem de
máquina. Para tornar o desenvolvimento de programas uma tarefa viável, foram criadas as linguagens
de programação. Essas linguagens permitem que pessoas possam criar programas de uma forma
muito mais simples. Confira um trecho de código escrito com a linguagem de programação Java:

1 double soma = 0;
2 for ( int i = 0; i < numeros . length ; i ++) {
3 soma += numeros [i];
5 }
6 System . out . println ("A soma é " + soma );

Por enquanto, você não precisa se preocupar em entender o que está escrito no código acima.
Observe apenas que um programa escrito em linguagem de programação é bem mais fácil de ser
compreendido do que um programa escrito em linguagem de máquina.

3.3 Compilador
Vimos que os computadores são capazes de processar o código escrito em linguagem de máquina.
Também vimos que é inviável desenvolver um programa em linguagem de máquina. Por isso, existem
as linguagens de programação. Daí surge uma pergunta: se os computadores entendem apenas
comandos em linguagem de máquina, como eles podem executar código escrito em linguagem de
programação?

Na verdade, os computadores não executam código escrito em linguagem de programação. Esse


código que é denominado código fonte deve ser traduzido para código em linguagem de máquina.
Essa tradução é realizada por programas especiais chamados compiladores.

4 SISTEMAS OPERACIONAIS
Normalmente, os programas instalados em um computador são armazenados no disco rígido. Para
executar um programa, as instruções que definem esse programa devem ser copiadas do disco
rígido para a memória RAM. Essa cópia é realizada através dos comandos oferecidos pelo
processador.

Geralmente, as pessoas não possuem conhecimentos técnicos suficientes para utilizar os comandos
dos processadores. Dessa forma, elas não conseguiriam copiar as instruções de um programa do
6

disco rígido para a memória RAM. Consequentemente, elas não conseguiriam executar programas
através dos computadores.

Para facilitar a interação entre os usuários e os computadores, foram criados programas especiais
denominados sistemas operacionais. Os sistemas operacionais funcionam como intermediários
entre os usuários e os computadores. Os principais sistemas operacionais atuais oferecem uma
interface visual. Através dessa interface os usuários podem controlar o funcionamento dos
computadores.

Em sistemas operacionais como o Windows, geralmente, o usuário clica duas vezes em um ícone
correspondente ao programa que ele deseja executar e o Windows se encarrega de copiar as
instruções desse programa do disco rígido para a memória RAM. Dessa forma, o usuário não precisa
conhecer os comandos dos processadores para executar um programa.

Os sistemas operacionais controlam a execução dos programas. Inclusive, eles permitem que vários
programas sejam executados simultaneamente. Além disso, oferecem diversas funcionalidades aos
usuários, como controlar o volume das caixas de som, o brilho do monitor, o acesso à internet entre
outros.

Os sistemas operacionais também oferecem diversos serviços aos próprios programas. Por exemplo,
as impressoras configuradas pelos usuários são gerenciadas pelos sistemas operacionais. Qualquer
programa que deseja interagir com uma impressora pode utilizar os recursos oferecidos pelos
sistemas operacionais para esse propósito. Sendo assim, os sistemas operacionais funcionam como
intermediários entre os programas e os computadores.

As principais tarefas de umsistema operacional são:

 Gerenciar a execução dos programas.


7

 Controlar o acesso à memória RAM e ao disco rígido.


 Administrar os dispositivos conectados ao computador.
 Simplificar a interação entre os programas e o computador.
 Simplificar a interação entre o usuário e o computador.

Sistemas operacionais diferentes podem oferecer recursos diferentes para os programas. No processo
de compilação, geralmente, os programas são preparados para utilizar os recursos de um determinado
sistema operacional. Dessa forma, um programa que funciona em um determinado sistema
operacional pode não funcionar em outro sistema operacional.

5 MÁQUINAS VIRTUAIS
Como vimos anteriormente, o código fonte de um programa deve ser compilado para que esse
programa possa ser executado por um computador. Além disso, vimos que os compiladores geram
executáveis específicos para um determinado sistema operacional e uma determinada arquitetura
de processador. Qual é o impacto disso para quem desenvolve sistemas para múltiplas plataformas?

A empresa que deseja ter uma aplicação disponível para diversos sistemas operacionais (Windows,
Linux, OS X, etc) e diversas arquitecturas de processadores (x86, x86_64, ARM, etc) deverá
desenvolver e manter um programa para cada plataforma (a combinação de um sistema operacional
e uma arquitectura de processador). Consequentemente, os custos dessa empresa seriam muito
altos.

Para diminuir os custos e aumentar a produtividade, podemos utilizar as chamadas máquinas virtuais.
As máquinas virtuais são programas especiais que permitem que um programa possa ser executado
8

em diversas plataformas diferentes. Nesse cenário, o desenvolvimento e a execução de um programa


são realizados através dos seguintes passos:

1. O programador escreve o código fonte do programa utilizando uma linguagem de


programação.
2. O compilador traduz o código fonte para um código intermediário escrito em uma linguagem
que a máquina virtual entende.
3. A máquina virtual processa o código intermediário e o traduz para código de máquina.
4. O código de máquina é executado no computador.

Na analogia da Figura, o programa seria o plugue, as máquinas virtuais seriam os adaptadores e as


plataformas seriam as tomadas. Como as tomadas seguem padrões diferentes, são necessários
adaptadores para encaixar o mesmo plugue em todas as tomadas. Analogamente, como as
plataformas seguem padrões diferentes, são necessárias máquinas virtuais para executar o mesmo
programa em todas as plataformas.

Para cada plataforma, uma máquina virtual específica é necessária. Todas as máquinas virtuais devem
saber ler as instruções do programa que desejamos executar para depois traduzi-las para a linguagem
de máquina da plataforma correspondente. Dessa forma, as máquinas virtuais atuam como
tradutores.

Assim como qualquer coisa, alguém precisa desenvolver as máquinas virtuais. Qualquer pessoa pode
desenvolver uma máquina virtual. Contudo, essa é uma tarefa que exige conhecimento técnico muito
avançado. Por isso, normalmente, os programadores que desenvolvem os programas não
desenvolvem as máquinas virtuais. Geralmente, as máquinas virtuais são desenvolvidas por grandes
empresas ou são projetos de código aberto que envolvem programadores experientes do mundo
inteiro.
9

As máquinas virtuais podem ser gratuitas ou pagas. Os maiores exemplos de máquinas virtuais são a
Oracle JVM (Java Virtual Machine), a OpenJDK JVM, a Microsoft CLR (Common Language Runtime) e
a Mono CLR.

A nossa explicação sobre máquinas virtuais pode dar a entender que elas funcionam apenas como
meros tradutores ou adaptadores. Contudo, é importante destacar que as máquinas virtuais oferecem
diversos outros recursos como gerenciamento de memória e otimização em tempo de execução.

6 QUAIS SÃO OS TIPOS DE LINGUAGEM DE PROGRAMAÇÃO


6.1 Programação estruturada
Programação estruturada é uma forma de programação de computadores que preconiza que todos
os programas possíveis podem ser reduzidos a apenas três estruturas: sequência, decisão e
repetição. Um dos primeiros a preconizar a programação estruturada foi Haskell B. Curry. Tendo, na
prática, sido transformada na Programação modular, a Programação estruturada orienta os
programadores para a criação de estruturas simples em seus programas, usando as sub-rotinas e as
funções. Foi a forma dominante na criação de software entre a programação linear e a programação
orientada por objetos.Apesar de ter sido sucedida pela programação orientada por objetos, pode-se
dizer que a programação estruturada ainda é marcantemente influente, uma vez que grande parte
das pessoas ainda aprendem programação através dela. Porém, a orientação a objetos superou o uso
das linguagens estruturadas no mercado.

6.2 Programação modular


Programação modular é uma forma de programação no qual o desenvolvimento das rotinas de
programação é feito através de módulos, que são interligados entre si através de uma interface
comum. Foi apresentado originalmente pela Information & Systems Institute, Inc. no National
Symposium on Modular Programming em 1968, com a liderança de Larry Constantine. Exemplos de
linguagens que orientaram seu projeto para este aspecto estão as linguagens Modula-2,desenvolvida
por Niklaus Wirth e a Modula-3.
6.3 Programação orientada a objetos
Orientação a objetos, também conhecida como Programação Orientada a Objetos (POO), ou ainda
em inglês Object-Oriented Programming (OOP) é um paradigma de análise, projeto e programação de
sistemas de software baseado na composição e interação entre diversas unidades de software
chamadas de objetos. O extensivo uso de objetos, particularmente em conjunção com o mecanismo
de herança, caracteriza o estilo de programação orientada a objetos. Em alguns contextos, prefere-se
usar modelagem orientada ao objeto (UML), em vez de programação. De fato, o paradigma
"orientação a objetos" tem bases conceituais e origem no campo de estudo da cognição, que
influenciou a área de inteligência artificial e da lingüística no campo da abstração de conceitos do
mundo real. Na qualidade de método de modelagem, é tida como a melhor estratégia, e mais natural,
para se eliminar o "gap semântico", dificuldade recorrente no processo de modelar o mundo real, no
domínio do problema, em um conjunto de componentes de software que seja o mais fiel na sua
representação deste domínio. Facilitaria a comunicação do profissional modelador e do usuário da
área alvo, na medida em que a correlação da simbologia e conceitos abstratos do mundo real e da
ferramenta de modelagem (conceitos, terminologia, símbolos, grafismo e estratégias) fosse a mais
óbvia, natural e exata possível. A análise e projeto orientados a objetos tem como meta identificar o
melhor conjunto de objetos para descrever um sistema de software. O funcionamento deste sistema
se dá através do relacionamento e troca de mensagens entre estes objetos. Na programação
orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no
sistema de software. Cada classe determina o comportamento (definido nos métodos) e estados
possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos.[
10

6.4 Programação linear


Em matemática, problemas de Programação Linear são problemas de otimização nos quais a função
objetivo e as restrições são todas lineares. Programação Linear é uma importante área da otimização
por várias razões. Muitos problemas práticos em pesquisa operacional podem ser expressos como
problemas de programação linear. Certos casos especiais de programação linear, tais como problemas
de network flow e problemas de multicommodity flow são considerados importantes o suficiente para
que se tenha gerado muita pesquisa em algoritmos especializados para suas soluções. Vários
algoritmos para outros tipos de problemas de otimização funcionam resolvendo problemas de PL
como sub-problemas. Historicamente, ideias da programação linear inspiraram muitos dos conceitos
centrais de teoria da otimização, tais como dualidade, decomposição, e a importância da convexidade
e suas generalizações.

7 CLASSIFIÇÃO PARA ESTRUTURA DE TIPOS

As linguagens de programação podem ser classificadas de acordo com o tipo de sistema que elas
usam. O tipo de sistema define como são os métodos e as variáveis da linguagem.

Em uma linguagem de tipo estático, o compilador deve conhecer o tipo de uma variável ou método
antes da execução do programa (por isso, o tipo de uma variável normalmente é explicitamente
declarado). Em uma linguagem de tipo dinâmico, o tipo de uma variável ou método é desconhecido
até a execução do programa.

 Fracamente tipada, como PHP e Smalltalk, onde o tipo da variável muda dinamicamente
conforme a situação.
 Fortemente tipada, como Java e Ruby, onde o tipo da variável, uma vez atribuído, se mantém o
mesmo até ser descartada da memória.
 Dinamicamente tipada, como SNOBOL, APL, Awk, Perl, Python e Ruby, onde o tipo da variável é
definido em tempo de execução.
 Estaticamente tipada, como Java e C, onde o tipo da variável é definido em tempo de
compilação.

Um conceito que muita gente confunde com tipo dinâmico ou estático é se uma linguagem é
fortemente ou fracamente tipada.

A definição de fortemente ou fracamente tipada tem relação com quão profundamente um sistema
verifica as operações que podem ser feitas sobre uma estrutura de dados.

Em linguagens fortemente tipadas, as operações são aplicadas para estruturas de dados bem
definidas e cada operação define os tipos de dados que deve receber. Em linguagens fracamente
tipadas, as operações são aplicadas para qualquer estrutura de dados; porém, essas operações podem
falhar em tempo de execução caso a estrutura não suporte a operação.

Em uma linguagem fortemente tipada o sistema tem garantias sobre o comportamento do programa.
Em uma linguagem fracamente tipada, essa garantia não existe porque uma estrutura de dados pode
receber novas funcionalidades em tempo de execução.
11

7.1 Estáticaticamente Tipadas


A definição básica da tipagem estática que uma linguagem de programação pode ter como
característica é que há uma verificação dos tipos usados em dados e variáveis para garantir que
sempre está sendo usado um tipo que é esperado em todas as situações. Esta verificação é feita no
código fonte pelo processo de compilação. Esta análise ajuda na chamada segurança de tipos na
utilização dos dados pelo programa permitindo que o programador se preocupe menos com esta
questão. O compilador fornece garantias que alguns problemas não poderão ocorrer após o
programa passar por esta verificação, ou seja, erros são detectados logo, antes do programa ser
efeticamente executado.
Uma variável não pode mudar seu tipo.

No entanto a tipagem estática pode causar uma falsa sensação de segurança. Só uma parte dos
erros podem ser descobertos antecipadamente.

var x = 1;
x = "1"; //erro de compilação, não pode trocar o tipo da variável

7.2 Dinâmica
Na tipagem dinâmica esta verificação também ocorre mas ela é feita em cima do dado em si, já que
as variáveis podem conter qualquer tipo de dado. Claro que em determinado momento uma variável
só pode conter um tipo de dado e isto é verificado. Mas a principal diferença é que a esta verificação
é feita em tempo de execução. Isto é feito através de uma infraestrutura auxiliar (uma máquina
virtual ou uma biblioteca normalmente chamada de runtime). É comum o programador ter que fazer
suas próprias verificações no programa ou em códigos externos de teste para garantir que todos os
tipos estão corretos nos momentos certos. O programador tem que se preocupar mais com os tipos
embora em soluções simples pode parecer que a preocupação não seja necessária.
O que é dinâmico efetivamente é o tipo da variável.

var x = 1;
x = "1"; //operação normal, o tipo que era um number passa ser string

7.3 Vantagens e desvantagens


Muitas vezes as vantagens e desvantagens variam de acordo com os olhos de quem vê.
Programadores discordam do que realmente seja uma vantagem, até porque quase tudo é uma
questão de trade-off, então [é mais fácil falar em diferenças. Algumas delas podem ser:
12

As principais vantagens das "linguagens estáticas" são a segurança, performance e auxílio em tempo
de desenvolvimento (refatoração, completação de código, informação auxiliar, cobertura de código
etc.).
As "linguagens dinâmicas" são flexíveis, rápidas para prototipar, concisas.

É bom entender que os bugs mais complicados continuam complicados igualmente nas duas tipagens.
Certamente há uma vantagem nas "linguagens dinâmicas" quando se pensa no desenvolvimento da
própria linguagem. Definir a linguagem e criar uma implementação básica é muito mais simples que
uma "linguagem estática". Porém para criar uma implementação poderosa, que possa resolver
algumas das suas desvantagens, se torna um trabalho dificílimo. Até hoje ninguém resolveu todas
desvantagens.