Baixe o app para aproveitar ainda mais
Prévia do material em texto
Desenvolvimento de sistemas web Aula 1 – Revisão da Sintaxe Java Introdução Nesta aula, veremos a diferenciação superficial dos três ambientes para a linguagem Java: JME, JSE e JEE. Serão abordadas as diferentes formas de atribuição de valores, bem como os controles de fluxo. Serão abordados, também, os conceitos básicos de orientação a objetos, aliados diretamente às palavras reservadas da linguagem Java. Finalmente, serão apresentados os elementos básicos utilizados no controle de erros, particularmente as palavras-chave utilizadas no controle do fluxo de erros, como try, catch e finally. Java é uma linguagem de programação lançada pela primeira vez pela Sun Microsystems, em 1995, com o objetivo de criar uma linguagem orientada a objetos dinâmica, para uso nos mesmos tipos de aplicações desenvolvidas em C e C++, mas sem as dificuldades e os erros mais comuns destas linguagens. Conforme a experiência dos projetistas da linguagem, as escolhas realizadas adicionaram novas características ou suprimiram outras do C++, visando criar uma linguagem que facilitasse a geração de código robusto, confiável, facilmente utilizável em plataformas diversas. A linguagem permite o desenvolvimento de aplicações em diversos ambientes. Existe software Java, desde, para dispositivos pequenos como, também, para mainframes. Por essa razão, a linguagem oferece 3 (três) ambientes de desenvolvimento: JDBC (Para acesso a banco de dados) JSP (Um tipo de servidor web) Servlets (Para o desenvolvimento de aplicações Web) Atribuição de valores A linguagem Java fornece vários operadores para operações aritméticas e booleanas. Possui os operadores +, -, *, / normais para operações aritméticas. Suporta, também, o operador de módulo ou resto (%). Por exemplo: Observe a tabela abaixo: Incrementar uma variável é adicionar uma unidade ao seu valor original. Por exemplo: x = x + 1; ou x += 1; ou x++; O mesmo ocorre com o operador de decremento: x--; Atenção! O posicionamento do operador de incremento/decremento tem importância. Quando colocado após a variável, esta é usada e só depois ocorre o incremento. Por exemplo: int x = 2; y = x++; No final y armazenará o valor 2 e x armazenará o valor 3. Ou seja, a variável x foi primeiramente usada, sendo armazenada na variável y e só depois foi incrementada. Observe agora: int x = 2; y = ++x; Agora, y armazenará 3 e x armazenará 3 porque primeiro a variável x será incrementada e, só depois, será usada e armazenada em y. Ou seja, em uma operação aritmética, colocar o operador antes da variável incrementará (ou decrementará) a variável primeiro, antes da avaliação da expressão. Agora, se você colocar o operador depois da variável, a expressão será avaliada primeiramente. Exemplos: int x = 5; int y = 6; int r = ++x; // após esta expressão, r = 6 e x = 6 int s = y++; // após esta expressão, s = 6 e y = 7 Atenção! Se você utilizar == por engano, para comparar dois objetos, isso, na verdade, irá comparar a referência dos dois objetos e não os objetos reais. A não ser que você esteja comparando as mesmas referências de objetos, esta operação retornará falsa: String x = new String (“My String”); String y = new String (“My String”); boolean z = (x == y); // z = falso boolean w = (x.equals(y)); // w = verdadeiro A comparação pode ser realizada entre tipos primitivos, como valores inteiros, long, double, caracteres etc. Exemplos: int r = 3; int s = 7; boolean t = r < s; // t = verdadeiro Você pode, também, utilizar && e || para verificar condicionais (operações and (e) e or (ou), respectivamente). Estruturas de controle de fluxo Estruturas condicionais if (condição) { ... // comportamento para quando a condição for verdadeira } else { ... // comportamento para quando a condição for falsa } Você pode optar por ter um único if, if/else ou if com vários else: if (x < -1) y = x + 2; else if (x < = 0) y = 1; else y = x * x; Estruturas de repetição Java fornece uma série de mecanismos de laço, assim como outras linguagens de programação. Exemplos: Laço for: for (int x = 0; x < 4; x++) { //... } Laço while: while (se a condição for verdadeira) { // ... } public class Teste { public static void main( String args[] ){ int n = 10; while( n > 0 ){ System.out.println( n ); n--; } } } Operador ternário A linguagem Java fornece um operador ternário (?) para reduzir a expressão if/else, assim como C e C++. Por exemplo: r = (x > y) ? 3: 1; Onde (x > y) é o teste condicional. O primeiro valor após ? representa o valor de r, se a condicional for verdadeira. O segundo valor representa o valor de r, se a condicional for falsa. Estrutura de seleção múltipla: switch Essa estrutura é usada, quando cada alternativa corresponde a valores distintos de um só indicador, isto é, quando cada teste compara o valor do indicador fornecido por uma variável ou expressão com um grupo de constantes diferentes. switch([expressão]) { case [constante 1]: [comando 1] break; case [constante 2]: [comando 2] break; . . . case [constante n]: [de comando n] break; default: [comando] } Orientação a objetos O termo "orientação a objetos", ou "baseado em objetos", significa que o software é organizado como uma coleção de objetos separados que incorporam tanto a estrutura quanto o comportamento dos dados. Essa concepção difere, em parte, da programação convencional, segundo a qual a estrutura e o comportamento dos dados têm pouca vinculação entre si. Trata-se de um paradigma para o desenvolvimento de software, que se baseia na utilização de componentes individuais (objetos) que colaboram para construir sistemas mais complexos. A colaboração entre os objetos é feita através do envio de mensagens. Segundo Martins, eis algumas características da tecnologia orientada a objetos: Consiste em buscar apenas os aspectos essenciais de uma entidade, ignorando suas propriedades acidentais. Ou seja, concentrar-se no que o objeto é e faz, antes de decidir como ele deve ser implementado. O uso da abstração preserva a liberdade de se tomar decisões mais importantes, evitando, tanto quanto possível, preocupações com detalhes prematuros. Consiste na separação dos aspectos externos de um objeto, acessíveis por outros objetos, dos detalhes internos da implementação daquele objeto, que ficam ocultos dos demais objetos. O encapsulamento impede que um programa se torne tão independente que uma pequena modificação possa causar grandes efeitos de propagação. A implementação de um objeto pode ser modificada sem que isso afete as aplicações que o utilizam. O encapsulamento não é exclusivo das linguagens orientadas a objetos, porém a capacidade de combinar estruturas de dados e seu comportamento em uma única entidade torna-a mais completa e mais poderosa do que as linguagens convencionais. A herança da estrutura de dados e do seu comportamento permite que a estrutura comum seja compartilhada por diversas subclasses semelhantes, sem redundâncias. O compartilhamento de código é uma das principais vantagens das linguagens orientadas a objetos. Mais importante que a redução do trabalho decodificação é a clareza conceitual proveniente de reconhecimento de que diferentes operações são, na realidade, a mesma. A possibilidade da reutilização de modelos e códigos em projetos futuros é enfatizada como uma justificativa para a tecnologia orientada a objetos. O desenvolvimento baseado em objetos fornece ferramentas como abstração, o encapsulamento e a herança que permitem "montar bibliotecas" de componentes reutilizáveis. Ênfase na estrutura de objetos, e não na estrutura de procedimentos, significa preocupar-se em especificar o que um objeto é, e não como ele é utilizado. A figura 1 mostra a estrutura de um objeto. O uso de um objeto é altamente dependente dos detalhes da aplicação, os quais, frequentemente, mudam durante o desenvolvimento. O desenvolvimento baseado em objetos coloca maior ênfase na estrutura dos dados e menor ênfase na estrutura de procedimentos, diferente do desenvolvimento tradicional baseado na decomposição funcional. Implementação de herança e polimorfismo Herança: Podemos afirmar que é o principio pelo qual classes semelhantes são agrupadas em hierarquias. Veja o exemplo: Uma empresa X possui funcionários. E possui, também, um ou mais gerentes (que não deixam de ser funcionários também). Polimorfismo: Princípio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar métodos que possuem a mesma assinatura, entretanto comportamentos diferentes. Significa ter ‘muitas formas’, que significa um único nome representando um código diferente, selecionado por algum mecanismo automático. Na linguagem Java, a invocação de método sempre vai ser decidida em tempo de execução. Vejamos exemplos: Controle de erros Blocos try-catch A captura e o tratamento de exceções ocorre através da especificação de blocos try, catch e finally, definidos através destas mesmas palavras reservadas da linguagem Java. Um comando try/catch/finally obedece à seguinte sintaxe: O bloco finally é opcional. Em geral, ele inclui comandos que liberam recursos que, eventualmente, possam ter sido alocados durante o processamento do bloco try e que podem ser liberados, independentemente da execução ter encerrado com sucesso ou ter sido interrompida por uma condição de exceção. Exemplo de Tratamento de Erro:
Compartilhar