Pesquisar este blog

segunda-feira, 28 de março de 2016

Paradigmas de programação





   Os paradigmas de programação são formas de abstrair um problema para depois implementar uma solução em alguma linguagem de programação. Eles definem como o programador deve interpretar um certo problema do mundo real ou como deve interpretar um software que fora criado por outra pessoa que usou este mesmo paradigma como base.

   Segundo Ascencio e Campos (1995 - 2010) no seu livro Fundamentos da programação de computadores,  " um paradigma de programação está intimamente relacionado à forma de pensar do programador e como ele busca a solução para os problemas. É o paradigma que permite ou proíbe a utilização de algumas técnicas de programação. Ele é capaz de mostrar como o programador analisou e abstraiu o problema a resolver ".

Aqui estão os paradigmas mais conhecidos:

- Paradigma Estruturado (Imperativo);
- Paradigma Funcional;
- Paradigma Orientado a Objetos;
- Paradigma Orientado a Eventos;

Paradigma Estruturado

Segue a concepção de executar as instruções do computador um depois do outro. Também divide o problema em partes menores que podem ser reutilizadas em outros momentos do código, também conhecido como modularização. Exemplos de  linguagens que melhor representam este conceito são Pascal, C, Cobol, Fortran.


Paradigma Funcional

Subdivide o problema em várias funções que serão utilizadas para compor o resultado. Usam expressamente o conceito de função matemática, que recebe um dado como entrada e retorna uma saída. Exemplos de linguagens: Haskel, F#, APL...

Paradigma Orientado a Objetos

Divide um problema em partes menores que interagem entre si, estas partes menores são chamadas por este paradigma de objeto. Um objeto é composto por código de uma linguagem de programação que pode ser reutilizado, pode ser criado cópias deste objeto, pode deixar de existir sem que prejudique os resto do programa, ou seja, é tratado como uma peça que tem um propósito dentro de um sistema. Exemplos de linguagens: Java,C++, C#, Python...

Paradigma Orientado a Eventos

  O programa deve se adaptar as ações do mundo exterior. A depender dos estímulos que o problema fornecer, o programa deverá corresponder da forma correta. Funciona na lei da ação e reação, um clique na tela que um usuário faz, pode ser considerado como uma ação e a reação pode ser abrir uma janela ou redirecionar o usuário para outra tela.
Exemplos de linguagens: VB, Javascript...


  As linguagens de programação utilizam pelo menos um paradigma para a construção de softwares. Dizer que uma linguagem de programação usa um paradigma não quer dizer que esta linguagem só poderá usar um paradigma. Na verdade o que ocorre hoje é o uso de algumas definições de outros paradigmas, pois desta forma, as linguagens de programação conseguem abranger um maior volume de soluções possíveis para os problemas do nosso mundo.

quarta-feira, 2 de março de 2016

Variáveis - JAVA -

Olhar geral

    Vamos discutir sobre um dos componentes principais de todas as linguagens de programação, que são as variáveis. Veremos as suas regras de nomenclatura adotadas pelos desenvolvedores em Java como padrão e código, suas classificações quanto aos usos e ciclo de vida no programa, bem como compreender como o computador entende quando esta estrutura é executada.

Conceitos

Em java as variáveis são classificadas em variáveis de instância, variáveis de classe, variáveis locais e parâmetros.

- Variáveis de instância: são variáveis que são definidas fora de métodos (métodos serão abordados no post sobre funções e procidures) e que são visíveis em todo o código da classe (Veja o post sobre Classes que será publicado em breve). Cada instância de uma classe possui uma cópia das  variáveis de instância, mas não é possível que uma classe enxergue as variáveis de outras classes.

- Variáveis de classe: são variáveis que contém em sua declaração a palavra static, ela é compartilhada por todas as instancias daquela classe, ou seja, o valor armazenado é visível à todas as classes instanciadas.

-Variáveis locais: a nomenclatura é idêntica a das variáveis de instancia, a única diferença é que estas variáveis são instanciadas dentro de métodos e construtores (construtores serão abordados mais tarde no post de Classes). Estas variáveis são somente visíveis dentro dos métodos em que foram declarados, elas são excluídas ao fim da execução do método (leia mais sobre escorpos de variáveis).

- Parâmetros: são variáveis que são declaradas junto com a assinatura do método (leia o post sobre funções e procidures). Elas são instanciadas com valores que são passados quando o método é chamado. O seu ciclo de vida é igual a das variáveis locais, apesar dos parâmetros serem instanciados fora do escorpo do método.

Léxico

    
     Java é case-sensitive, ou seja, ele diferencias os nomes de variáveis pelas letras maiúsculas e minúsculas: "Carro" e "carro" são dois nomes diferentes para o java.
     Os nomes de variáveis podem ser iniciados com uma letra Unicode, "$" ou um underscore ("_") e seguir com uma sequencia de dígitos, letras , "$" e undescores.
     Como padrão, é aconselhável que as variáveis sejam nomeadas com palavras que sejam auto-explicativas quanto a função que ela desempenhará durante o seu ciclo de vida.
     Se o nome da variável for só uma palavra, esta deve ser escrita  em letras minúsculas. Já se o nome for formado por mais de uma palavra, a partir da segunda palavra inicia-se  com uma letra maiúscula e as outras devem ser minúsculas.

                   Ex:   int idade = 19;
                           double  mesadaAnual = 1200.00;

     Não é aconselhável usar undescores para separar o nome das variáveis como em "casa_aluguel", pois esse isto caiu em desuso. É conveniente utilizar o underscore para separar nomes compostos de variáveis constantes, (será abordado o termo variáveis estáticas na secção Sintaxe logo abaixo) como em:

                   Ex:  public static  final int  CODIGO_ALIMENTO;
                           public static  final  String  NOME_DEPARTAMENTO;     
 
     Nomes de variáveis constantes devem ser escritas em letras maiúsculas.       
                       

Sintaxe


figura 1 - Exemplo de sintaxe completa de uma variável.


  

Semântico

     Quando estamos criando uma variável no nosso código java, estamos dizendo ao computador para criar um espaço na memória do tamanho que o tipo da variável sugere (veja  o post Tipo de variaveis - Java -).
     Na figura 1 o endereço da memória é então mapeado para o nome desta variável (que no nosso exemplo  é mensagem) para dentro de uma tabela de variáveis. Esta tabela é guardada pelo compilador até o fim do escorpo da variável. Quando digitar o nome da variável, o compilador irá buscar a posição da tabela que contém esse nome como nome da variável, logo depois de encontrada, ele obtém o valor que está vinculada a ela.
      As variáveis do java podem receber dois tipos de dados: os tipos primitivos e os por referência (veja em Tipo de variaveis - Java -).

Primitivos:  são as variáveis que recebem valores de tipos primitivos, esses valores são armazenados na posição da memória no formato binário, de tal modo que, se recuperarmos esta sequencia binária e convertermos no mesmo tipo, o valor será o mesmo.

Figura 2 - Esquema de uma variável primitiva

Referencia: variáveis que recebem um tipo de dado por referencia, ela não necessariamente guarda os dados que lhe são atribuídos, ela na verdade guarda um ponteiro que nada mais é que um endereço de memória que levará ao valor primitivo ou a um conjunto de valores primitivos ou até mesmo outros dados por referência.

Figura 3 - Esquema de uma variável por referência


     A diferenciação entre tipos de referência e tipos primitivos é muito importante para a programação em java (para muitas coisas também!), este conceito é o motivo de vários bugs na vida de vários programadores do mundo, então fique alerta!


Referências

DEITEL, Paul; DEITEL, Harvey. Java - como programar. 8. ed. São Paulo: Pearson, 2009.

ORACLE AND/OR ITS AFFILIATES. Variables. 2015. Disponível em: <https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html>. Acesso em: 29 fev. 2016.