Você está na página 1de 11

FATECS

FACULDADE DE
TECNOLOGIA E
CIÊNCIAS SOCIAIS
DISCIPLINA: SISTEMAS DISTRIBUÍDOS
PROFESSOR: FABIANO MARIATH D`OLIVEIRA

Revisão de Linguagens de Programação


Introdução
A tarefa de processamento de dados consiste em tomar certa informação processá-la e
obter o resultado. Os primeiros computadores utilizavam circuitos eletromecânicos e
válvulas. Depois apareceu o transistor e posteriormente os circuitos integrados. Os
computadores aumentaram a sua capacidade de processamento e manipulação de dados.
Ao mesmo tempo as telecomunicações se desenvolveram e a integração foi inevitável.

Basicamente existem 02 tipos de computadores:

• Analógicos: um dos primeiros computadores foi construído por Lord Kevin em


1872 e tinha por finalidade prever a altura das marés nos portos ingleses.
• Digitais: Ao contrário de computadores analógicos que trabalham com
grandezas físicas, eles são capazes de efetuar operações aritméticas através de
diferença de potencial (ausência = 0 ou presença = 1 de energia)

Um problema era como fazer para que o computador realizasse ações pré-definidas para
se obter resultados esperados. Uma solução é através do algoritmo que é um conjunto
de regras que permite a resolução de um problema ou a execução de um trabalho através
de um número finito de operações. Os algoritmos devem ser especificados em uma
linguagem de programação que obrigatoriamente seguem um paradigma de
programação.

Para que servem as linguagens?

A linguagem é o veículo pela qual expressamos nossos pensamentos e a relação entre


esses pensamentos. Nossa linguagem é sutil e complexa. A natureza da linguagem
realmente molda e modela a maneira como pensamos. Se fornecermos construções
lingüísticas apropriadas, podemos melhorar os programas escritos usando estas
estruturas. Um projeto de linguagem deve pelo menos fornecer meios que permitam a
expressão compreensível de algoritmos; idealmente uma linguagem sugere formas de
expressão. Mas a linguagem não é uma panacéia. Uma linguagem não pode, por
exemplo, evitar a criação de programas obscuros ; um programador engenhoso sempre
encontrará um número infinito de caminhos para a confusão

O que é paradigma ?

Paradigma . [Do gr. Parádeigma, pelo lat. paradigma] S. m. 1. modelo, padrão, estalão:
"D. Luís de Meneses ....parece constituir o paradigma da síntese ideal .... entre a
coragem militar e o academismo cultural." (Antônio José Saraiva e Oscar Lopes,
História da Literatura Portuguesa, pp. 455-456.) 2. Gram. Modelo ou tipo de conjugação
ou declinação gramatical.
FATECS
FACULDADE DE
TECNOLOGIA E
CIÊNCIAS SOCIAIS
DISCIPLINA: SISTEMAS DISTRIBUÍDOS
PROFESSOR: FABIANO MARIATH D`OLIVEIRA

Histórico das Linguagens

ANO LINGUAGEM PROPÓSITO DO PROCESSAMENTO


1954-57 FORTRAN Numérico
1958-60 ALGOL 60 Numérico
1959-60 COBOL Comercial
1956-60 APL Vetorial
1956-62 LISP Simbólico
1963-64 PL/I Genérico
1964 BASIC Interação Educativa
1967 SIMULA 67 Simulação
1971 PASCAL Educativa
1972 PROLOG Inteligência Artificial
1974-77 CLU Programação ADT
1979 ADA Sistemas Embarcados
1971-1980 SmallTalk Sistemas Pessoais
1984 C++ Genérica
1987 Perl Scripts
1995 Java Redes de computadores WWW
1995 Ruby Multiparadigma

O processo de Tradução

Os programas escritos em linguagens de alto-nível são traduzidas em uma linguagem de


máquina equivalente antes de serem executadas pela máquina. Um tradutor executa os
seguintes passos:

1. Módulos de programa devem ser traduzidos em código de máquina


2. Estes módulos são ligados (linked) em um único código de máquina
3. O programa é carregado na memória do computador como código executável.

Na prática muitas linguagens são implementadas usando as duas técnicas . Um


programa pode ser traduzido em um código intermediário que será interpretado.
A linguagem JAVA é a mais conhecida e a mais promissora . Java é primeiramente
traduzido em um código intermediário denominado bytecode, que é interpretado por
uma máquina Virtual (Java Virtual Machine) . Interpretadores podem ganhar em
armazenamento e perder em velocidade de execução. Tradutores podem ganhar em
velocidade e perder em armazenamento de memória.

Pontos comuns em linguagens

Constantes
FATECS
FACULDADE DE
TECNOLOGIA E
CIÊNCIAS SOCIAIS
DISCIPLINA: SISTEMAS DISTRIBUÍDOS
PROFESSOR: FABIANO MARIATH D`OLIVEIRA

Uma constante é um determinado valor fixo que não se modifica ao longo do tempo,
durante a execução do programa. As constantes podem ser divididas em simbólicas e
literais. As constantes simbólicas são determinadas por possuirem nomes que são
substituídos pelo seu valor correspondente ao longo do programa exemplo:

constante inteira meses = 12;


constante presidente = "LULA"

As constantes literais são valores fixos distribuídos ao longo do programa. exemplo:

imprima ("LULA") ao invés de imprima(presidente)

Uma vantagem em se usar constantes simbólicas é a facilidade de manutenção posterior


no código gerado.

Variáveis e tipos de dados

Variáveis correspondem a posições de memória, as quais o programador tem acesso


através de um algoritmo. Qualquer referência ao seu identificador significa ler o
conteúdo desta posição. Na verdade a memória física de um computador é um
repositório energizado em que determinadas posições eletricamente ativas representam
a abstração do nº 1 e locais eletricamente inativos representam o 0 (zero).

Uma variável é um conjunto de posições (denominada de bit) em que a combinação


(nos referimos em conjuntos de 8, que são chamados de byte) de valores zeros e uns
representam um valor para o programador.

Além da agregação de 8 posições para se formar um byte , possuímos abstrações para


elementos do nosso mundo real de informações. Por exemplo, os números inteiros, reais
e literais. Dependendo da arquiteura de máquina e do compilador utilizado, esses
conjuntos de bytes podem variar. Por exemplo, um conjunto de 02 bytes (ou 16 bits)
pode representar um número inteiro.

Portanto, as variáveis estão associadas a tipos de dados que são uma abstração de
posições físicas na memória do computador. Nesse raciocínio podemos observar que o
dado se torna informação (dado contextualizado) e esta informação se torna novamente
dado. Exemplo: o dado 00001001 pode ser interpretado como a informação decimal 9
que é dado e pode ser interpretado como a informação 9 anos de profissão.

Comentários de programas

A escrita de algoritmos geralmente pode se tornar extensa e como as linguagens de


programação trabalham com palavras chave para representar instruções pré-
determinadas ou através de mnemônicos, o entendimento pode se tornar um pouco
confuso comprometendo a legibilidade do código em questão. Uma boa prática a adotar
é o uso de comentários, mas como tudo devemos conter os exageros. Bons comentários
FATECS
FACULDADE DE
TECNOLOGIA E
CIÊNCIAS SOCIAIS
DISCIPLINA: SISTEMAS DISTRIBUÍDOS
PROFESSOR: FABIANO MARIATH D`OLIVEIRA

são aqueles que agregam entendimento ao código e não aqueles que simplesmente
traduzem a informação seguinte. Por exemplo : evite colocar comentários como :

/* "Aqui iremos limpar a tela" */


clsrscr();
/* "Fazendo uma iteração de 10 elementos" */
for (int i = 0 ; i < 10; i++) {
foo;
}

Estes comentários são descartáveis pois os próprios comandos - clrscr() e for -


têm semântica bem definida. Utilize comentários como :

/*Caso o funcionário possua dependentes verificar se o mesmo possui


convênio médico*/
void calcula_salario( int matricula){...}

/*Programa realizado em : dd/mm/aaaa*/


/*Elaborado por : XYZ Sistemas*/
/*Última revisão : dd/mm/aaaa para alteração de: xxxxxx */
/*Programador : Fulano da Silva 61 299-9999*/

Paradigma Estruturado
No paradigma estruturado alguns pontos podem ser destacados como:

No paradigma estruturado observa-se duas principais características: as estruturas de


controle e as estruturas de dados. As estruturas de controle podem ser divididas em
estruturas de decisão e estruturas de iteração. As estruturas de dados podem ser
divididas em:

Estruturas de Controle

Fluxos de controle são estruturas feitas no compilador para que possamos otimizar
desvios de formas diferentes.

Estruturas de Decisão

Os fluxos condicionais seguem a estrutura de avaliação de uma condição para


determinar quais caminhos serão tomados.

Exemplo:

if (idade > 21) {


...}
else {
...
}
FATECS
FACULDADE DE
TECNOLOGIA E
CIÊNCIAS SOCIAIS
DISCIPLINA: SISTEMAS DISTRIBUÍDOS
PROFESSOR: FABIANO MARIATH D`OLIVEIRA

switch (i)
case 1:...
case 2:...
default: ....
}

Estruturas de Iteração

Os fluxos iterativos servem para realizar repetições dependendo de uma avaliação


lógica, a ser feita como pré ou pós-condição da repetição

Exemplo:

for (int i = 0 ; i < 10 ; i ++) {


...
} ou,

do {
...
} while (i < 10)

Estrutura de Dados

Assim como as estruturas de controle que compõe a base da programação estruturada é


imprescindível que tenhamos estruturas para abstrair o conteúdo da memória e assim
agilizarmos o processo de desenvolvimento. As estruturas de dados incrementam a
semântica do código, aumentam a legibilidade e redigibilidade e consequentemente
evitam esforços de manutenção excessiva. Contudo, a simples existência destas
estruturas não impede que o programador possa cometer erros, portanto é indispensável
que saibamos a finalidade e a forma de uso de cada uma destas estruturas.

No sistema de tipos de uma linguagem, poodemos classificar os tipos de duas formas :

Tipos primitivos

São tipos embutidos que não derivam de outros tipos exemplo int e char

Tipos embutidos

São tipos reconhecidos pela linguagem e que podem ser primitivos ou derivados
exemplo : String, um derivado de char e que a linguagem já reconhece por
padrão.Portanto todo tipo primitivo é um tipo embutido mas nem todo tipo embutido é
um tipo primitivo.

Entretanto, existem algumas estruturas que através de construtores específicos podem


significar mais do que tipos simples como int e char. Estes construtores abstraem
FATECS
FACULDADE DE
TECNOLOGIA E
CIÊNCIAS SOCIAIS
DISCIPLINA: SISTEMAS DISTRIBUÍDOS
PROFESSOR: FABIANO MARIATH D`OLIVEIRA

estruturas como coleções finitas, matrizes , estruturas cartesianas, etc. Estas estruturas
também são chamadas de agregadas opdendo ser conjuntivas ou disjuntivas.

Mapeamentos finitos unidimensionais

São mapeamentos finitos que possuem apenas uma dimensão. Exemplo os vetores em C

char[10] vetor;

Mapeamentos finitos multidimensionais

São mapeamentos finitos que possuem mais de uma dimensão. Exemplo as matrizes em
C

char[10,20] matriz;

Produtos Cartesianos

Os produtos cartesianos são estruturas agregadas com um ou mais tipos de dados.


Exemplo de Estrutura em C

Struct {
int pontoX;
int pontoY
}reta

Uniões simples

As uniões são agregados disjuntivos, o compilador é responsável pelos requisitos de


tamanho e alinhamento. As uniões podem manipular tipos de dados diferentes em uma
mesma área de memória

A União permite que um objeto seja formado pela disjunção de seus campos. A
declaração de uma Union é muito similar a um produto cartesiano. A diferença é que os
campos são mutuamente exclusivos.

Exemplo em C:

union {
int vali ;
float valf;
char *valc;
}

Uniões discriminadas

A união discriminada difere da União pois os elementos da união discriminada possuem


um tag para indicar qual o conjunto de valores está escolhido
FATECS
FACULDADE DE
TECNOLOGIA E
CIÊNCIAS SOCIAIS
DISCIPLINA: SISTEMAS DISTRIBUÍDOS
PROFESSOR: FABIANO MARIATH D`OLIVEIRA

Exemplo em Pascal :

type TX = Array [0..10] of integer;


type TZ = Record
case kind : boolean of
TRUE : (a : integer);
FALSE : (b : TX)
end;

Sequências

Uma seqüência consiste de um número arbitrário de ocorrências de elementos de um


certo tipo T. A propriedade mais importante de um construtor de seqüência é que o
número de ocorrências do componente pode ser não especificado. Portanto as
seqüências podem ser usadas para representar objetos de tamanho arbitrário. Os
arquivos seqüenciais são um exemplo de agregado de seqüência.
Não é muito comum às L.P. fornecerem construtores para arquivos ao invés disso o que
é feito é uma chamada ao sistema operacional para acessar o sistema de arquivo

Enumerados e Conjuntos

É muito comum definirmos variáveis cujos valores podem ser um conjunto de


elementos de um determinado tipo T. Tais valores podem são portanto um conjunto
potência de T.

O Tipo T é denominado de tipo base.

Para exemplificar, tomemos a linguagem Pascal e seus tipos de dados como exibido na
figura abaixo:

Modularidade
FATECS
FACULDADE DE
TECNOLOGIA E
CIÊNCIAS SOCIAIS
DISCIPLINA: SISTEMAS DISTRIBUÍDOS
PROFESSOR: FABIANO MARIATH D`OLIVEIRA

Com o crescimento dos algoritmos em consequência das novas necessidades do mundo


real, tornou-se necessário fazer uma divisão logica das ações que um programa executa,
tanto para facilitar a manutenção quanto para dar uma maior clareza na implementação.

A modularuidade pode se dar de duas formas:

Lógica

Qualquer trecho de código separado logicamente em um bloco dentro de um programa


com atividades afins pode ser chamado de um módulo lógico.

Existem regras para que essa divisão seja feita de forma corretam. Para isso existem
dois conceitos básicos da modularidade chamados de Acoplamento e Coesão.

Física

Da mesma forma que a necessidade se fez presente e obrigou a modularidade lógica dos
programas. A quantidade de código a ser administrada se tornou um problema. Um
modo de contornar este problema é fazer com que os módulos lógicos separados em um
mesmo arquivo de programa passasse a estar implementado em arquivos físicos
diferentes. Com isso podemos ter equipes de desenvolvimento responsáveis por um
conjunto determinado de arquivos e implementando módulos semelhantes.

Procedimentos e Funções

Um modo de modularizar programas é através da confecção de procedimentos e


funções.

Uma pequena diferença entre procedimentos e funções é que os procedimentos não


possuem valor de retorno previsto ao passo que as funções devem retornar um valor.

Em C os procedimentos se caracterizam por ter seu valor de retorno nulo ou VOID

Paradigma Orientado a Objeto


As linguagens orientadas a objeto vieram preencher uma lacuna no desenvolvimento de
sistemas.

Objetos

Um objeto na visão do software é um conceito, abstração ou elemento que possui


interfaces bem definidas e significado para a aplicação.

Um objeto possui estado, comportamento e identidade.


FATECS
FACULDADE DE
TECNOLOGIA E
CIÊNCIAS SOCIAIS
DISCIPLINA: SISTEMAS DISTRIBUÍDOS
PROFESSOR: FABIANO MARIATH D`OLIVEIRA

Estado

O estado de um objeto é definido como uma das possíveis condições caracterizadas


pelos valores de seus atributos em um dado instante.

Comportamento

Definem as ações que um objeto responde em função de requisições feitas por outros
objetos.

Suas funcionalidades são expressas em forma de métodos que caracterizam o


comportamento de um objeto.

Identidade

Todo objeto é único para o sistema. Mesmo que seu comportamento e estado forem
iguais a de outro objeto, estes possuem identidades diferentes.

Classes

Descrição de um grupo de objetos com comportamento, característica e relacionamentos


comuns.

É uma template (molde) para a criação de novos objetos. Deve ser nomeada usando o
vocabulário do domínio do problema.

Deve capturar somente uma abstração.

Exemplo em Object Pascal

Type TPessoa = class(TObject)


private
nome : String;
idade : integer;
public
procedure setIdade(pIdade:integer);
function getIdade:integer;
procedure setNome(pNome:String);
function getNome:String;
end;

Exemplo em C++

Class CPessoa {
private:
int idade;
FATECS
FACULDADE DE
TECNOLOGIA E
CIÊNCIAS SOCIAIS
DISCIPLINA: SISTEMAS DISTRIBUÍDOS
PROFESSOR: FABIANO MARIATH D`OLIVEIRA

char nome;
public:
void setIdade(pIdade:integer);
int getIdade( );
void setNome(pNome:char);
char getNome( );
};

Visibilidade

A visibilidade é a política que determina como os objetos podem acessar atributos e


métodos de outros objetos. Existem 03 tipos de visibilidade, a saber:

• Privada: Somente o próprio objeto pode acessar seus atributos e métodos.


• Protegido: O Próprio objeto e seus descendentes podem acessar seus atributos e
métodos.
• Público: Tanto o próprio objeto quanto outros objetos, sejam descendentes ou
não podem acessar seus atributos e métodos

Atributos

Os atributos de um objeto caracterizam o seu estado em um determinado momento. Os


atributos podem ser quaisquer tipos reconhecidos pela linguagem.

Os atributos geralmente são declarados na classe com visibilidade privada.

Métodos

Os métodos defimem o comportamento do objeto. Os métodos são carregados por


classe e não por objeto, exemplo: para uma classe com 2 métodos e 3 atributos e com 10
objetos instanciados teremos 2 métodos e 30 atributos na memória.

Herança

Define um relacionamento entre classes onde uma classe compartilha a estrutura e


comportamento de uma ou mais classes.
É um relacionamento do tipo “é-um”.
É a chave para o reuso.
Geralmente de 3 a 5 níveis.
Generalizam ou especializam classes.

Generalização

Quando estamos caminhando para o mais alto nível na estrutura hierárquica estamos
generalizando.
Comum no começo da fase de análise.
FATECS
FACULDADE DE
TECNOLOGIA E
CIÊNCIAS SOCIAIS
DISCIPLINA: SISTEMAS DISTRIBUÍDOS
PROFESSOR: FABIANO MARIATH D`OLIVEIRA

Procurar atributos e métodos parecidos.


Definem superclasses.
Podemos definir métodos obrigatórios.

Especialização

Quando estamos caminhando para o nível mais baixo da estrutura hierárquica estamos
especializando.
Comum na fase de projeto.
Procurar atributos e métodos específicos.
Definem subclasses.
Podemos reescrever métodos.

Polimorfismo

Implementa um comportamento dinâmico entre os relacionamentos dos objetos.


Significa que o remetente de um estímulo não precisa saber qual objeto da classe está
ativo no momento.

Exercício para o aluno


Fazer um algoritmo que dados três números inteiros, não negativos e
distintos, diga qual é o de maior valor.

Fazer em três linguagens de programação quaisquer vistas nesta revisão.

Você também pode gostar