Baixe o app para aproveitar ainda mais
Prévia do material em texto
PROGRAMAÇÃO JAVA • CONCEITOS DE PROGRAMAÇÃO • ORIENTAÇÃO A OBJETOS O QUE É PROGRAMAÇÃO Uma linguagem de programação é um método padronizado para expressar instruções para um computador. É um conjunto de regras sintáticas e semânticas usadas para definir um programa de computador. Uma linguagem permite que um programador especifique precisamente sobre quais dados um computador vai atuar, como estes dados serão armazenados ou transmitidos e quais ações devem ser tomadas sob várias circunstâncias. O conjunto de palavras constitui o código fonte de um software. Esse código fonte é depois traduzido para código de máquina, que é executado pelo processador. Uma das principais metas das linguagens de programação é permitir que programadores tenham mais produtividade, permitindo expressar suas intenções mais facilmente do que quando comparado com a linguagem de máquina. Assim, linguagens de programação são projetadas para que possam ser mais facilmente entendidas por programadores, sendo ferramentas para que programadores possam escrever programas mais organizados e com maior rapidez. INTERPRETAÇÃO E COMPILAÇÃO Uma linguagem de programação pode ser convertida, ou traduzida, em código de máquina por compilação ou interpretação, que juntas podem ser chamadas de tradução. Se o método utilizado traduz todo o texto do programa (também chamado de código), para só depois executar o programa, então diz- se que o programa foi compilado e que o mecanismo utilizado para a tradução é um compilador (que por sua vez nada mais é do que um programa). A versão compilada do programa tipicamente é armazenada, de forma que o programa possa ser executado um número indefinido de vezes sem que seja necessária nova compilação, o que compensa o tempo gasto na compilação. CONCEITOS DE PROGRAMAÇÃO 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: seqüência, decisão e iteração. 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. 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. Cobol, PHP, Perl e Python C são exemplos. PROGRAMAÇÃO ORIENTADA A OBJETOS Orientação a objetos, também conhecida como Programação Orientada a Objetos é 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. Em alguns contextos, prefere-se usar modelagem orientada ao objeto, em vez de programação. 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 através de métodos e atributos de seus objetos, assim como o relacionamento com outros objetos. C++, C♯, VB.NET, Java, Object Pascal, Objective-C, SuperCollider, Ruby e Smalltalk são exemplos. JAVA É uma linguagem de programação orientada a objetos desenvolvida na década de 1990 por uma equipe de programadores chefiada por James Gosling, na empresa Sun Microsystems. Hoje, vendida para a Oracle. Diferentemente das linguagens convencionais, que são compiladas para código nativo, a linguagem Java é compilada para um bytecode que é executado por uma máquina virtual. A linguagem de programação Java é a linguagem convencional da Plataforma Java, mas não sua única linguagem. ESTRUTURA DE UM BYTECODE APPLETS, APLICAÇÃO E APPLETVIEWER O que é uma APPLET? Applet é um programa especial escrito em Java adaptado para instalação e execução dentro de páginas HTML. Estas páginas podem então ser visualizadas num browser. O que é uma APLICAÇÃO? Aplicação é um programa mais geral escrito na linguagem Java. Não requer um browser para sua execução. De fato, Java pode ser usada para criar todo tipo de aplicações que usualmente você implementa com outras linguagens mais convencionais. O que é o APPLETVIEWER? O Appletviewer que mostra apenas a área onde é executada applet. Depois de testar bem seu código com o Appletviewer. APPLET EM HTML <HTML> <HEAD> <TITLE> Java </TITLE> </HEAD> <BODY> <APPLET CODE=”nome.class” WIDTH=300 HEIGHT=100> </APPLET> </BODY> </HTML> Disparadas quando se carrega a página HTML EXERCÍCIO Criar no Notepad (Bloco de notas) um arquivo que contenha o seguinte conteúdo: class helloworld { public static void main (String args[]) { System.out.println(“Hello World!”); } } Não se esqueça de salvar o arquivo como “todos os arquivos” com o seguinte nome: helloworld.java COMPILANDO Para compilar a aplicação, basta digitar o comando no prompt: javac helloworld.java Este comando irá gerar o arquivo helloworld.class, que é o bytecode da aplicação. Para executar o bytecode , basta digitar o comando: java helloworld CASO SEJA NECESSÁRIO Configure o caminho do Java no prompt ou na variáveis de ambiente em “sistema” painel de controle do Windows: Ex: set path=%path%;C:\Program Files\Java\jdk1.7.0_07\bin Variáveis de ambiente: path=%path%;C:\Program Files\Java\jdk1.7.0_07\bin MÁQUINA VIRTUAL Em uma linguagem de programação como C e Pascal, temos a seguinte situação quando vamos compilar um programa: CÓDIGO FONTE O código fonte é compilado para código de máquina específico de uma Plataforma sistema operacional. Muitas vezes o próprio código fonte é desenvolvido visando uma única plataforma! Esse código executável (binário) resultante será executado pelo sistema operacional e, por esse motivo, ele deve saber conversar com o sistema operacional em questão. UM POUCO MAIS SOBRE ORIENTAÇÃO A OBJETOS Existem, basicamente, duas metodologias de desenvolvimento de software: a Programação Estruturada e a Programação Orientada a Objetos. Na primeira, o objetivo consiste em separar os dados da funcionalidade do programa. Neste caso, as entidades são representadas de forma tal que satisfaçam as restrições da linguagem de programação utilizada. Isso acaba gerando programas que são difíceis de manter e compreender, principalmente se eles forem muito grandes. Na segunda, a linguagem de programação é que tem de satisfazer as restrições e requisitos das entidades. Isso permite a construção de modelos mais realísticos do mundo, e, portanto, mais fáceis de serem mantidos e compreendidos. EXEMPLO – REPRESENTAÇÃO DE UM CARRO Vamos tomar como exemplo a representação de um carro. Vamos descobrir que cada metodologia modela de forma diferente esse carro. Na Programação Estruturada, por exemplo, um carro é representado por um conjunto de funções responsáveis por ligar, frear, estacionar, acelerar e assim por diante. Um conjunto separado de variáveis define a cor do carro, seu modelo, fabricante e demais características. Você deve então inicializar (atribuir valores) às variáveis do carro e chamar algumas das funções para manipular estas variáveis para que o carro funcione. Já na Programação Orientada a Objetos, o carro é vistocomo uma integração de seus comportamentos (suas funções) e atributos (variáveis) que mantêm o estado atual do carro. A integração destes atributos e comportamentos resulta em um objeto. A criação deste objeto é simples e faz com que ele seja inicializado ao mesmo tempo sem comandos adicionais. BIBLIOTECAS Isto é, temos um código executável para cada sistema operacional. É necessário compilar uma vez para Windows, outra para o Linux, e assim por diante, caso a gente queira que esse nosso software possa ser utilizado em várias plataformas. Esse é o caso de aplicativos como o OpenOffice, Firefox e outros. A sua aplicação se utiliza das bibliotecas do sistema operacional, como, por exemplo, a de interface gráfica para desenhar as “telas”. A biblioteca de interface gráfi•ca do Windows é bem diferente das do Linux. Precisamos então reescrever um mesmo pedaço da aplicação para diferentes sistemas operacionais, já que eles não são compatíveis. BYTECODE JAVA E SUA VANTAGEM Já o Java utiliza do conceito de máquina virtual, onde existe entre o sistema operacional e a aplicação, uma camada extra responsável por interpretar o que sua aplicação deseja fazer para as respectivas chamadas do sistema operacional onde ela está rodando no momento. DIAGRAMA BYTECODE JVM – JAVA VIRTUAL MACHINE Seu programa ganha independência de sistema operacional. Ou, melhor ainda, independência de plataforma em geral: não é preciso se preocupar em qual sistema operacional sua aplicação está rodando, nem em que tipo de Máquina, confi•gurações, etc. Máquina virtual é um conceito bem mais amplo que o de um interpretador. Como o próprio nome diz, uma máquina virtual é como um “computador de mentira": tem tudo que um computador tem. Sua aplicação roda sem nenhum envolvimento com o sistema operacional! Apenas conversando com a Java Virtual Machine (JVM). VARIÁVEIS Variáveis são alocações de memória nas quais podemos guardar dados. Elas têm um nome, tipo e valor. Toda vez que necessite usar de uma variável você precisa declará-la e só então poderá atribuir valores a mesma. DECLARANDO VARIÁVEIS As declarações de variáveis consistem de um tipo e um nome de variável: como segue o exemplo: int idade; String nome; boolean existe; Os nomes de variáveis podem começar com uma letra, um sublinhado ( _ ), ou um cifrão ($). Elas não podem começar com um número. Depois do primeiro caracter pode-se colocar qualquer letra ou número. DECLARANDO VARIÁVEIS • Int a ; // declaração de uma variável 'a' //iniciada a 0 (valor por padrão). • Int b = 8; // declaração de uma variável 'b' iniciada a 8. TIPOS DE VARIÁVEIS Toda variável deve possuir um tipo. Os tipos que uma variável pode assumir são uma das três “coisas” a seguir: • Uma das oito primitivas básicas de tipos de dados. (tipos de informação mais usuais e básicos – boolean “true or false”, char UNICODE 16 bits, inteiros e Reais) • O nome de uma classe ou interface. • Um Array. (checaremos mais adiante) TIPOS DE VARIÁVEIS Os oito tipos de dados básicos são: inteiros, números de ponto- flutuante, caracteres e booleanos (verdadeiro ou falso). Tipo Tamanho Alcance (tipos inteiros) byte 8 bits - 128 até 127 short 16 bits - 32.768 até 32.767 int 32 bits - 2.147.483.648 até 2.147.483.647 long 64 bits - 9223372036854775808 até 9223372036854775807. “Existem dois tipos de números de ponto-flutuante: float ( 32 bits, precisão simples) e double (64 bits, precisão dupla).” ATRIBUIÇÕES A VARIÁVEIS Após declarada uma variável a atribuição é feita simplesmente usando o operador ‘=’: Exemplo: idade = 18; existe = true; CARACTERES ESPECIAIS Caracter Significado \n Nova Linha \t Tab \b Backspace \r Retorno do Carro \f “Formfeed” (avança página na impressora) \\ Barra invertida \’ Apóstrofe \” Aspas \ddd Octal \xdd Hexadecimal OPERADORES ARITMÉTICOS Operador Significado Exemplo + soma 3 + 4 - subtração 5 -7 * multiplicação 5 * 5 / divisão 14 / 7 % módulo 20 % 7 COMENTÁRIOS Java possui três tipos de comentário, o /* e */ como no C e C++. Tudo o que estiver entre os dois delimitadores será ignorado: /* Este comentário ficará visível somente no código o compilador ignorará completamente este trecho entre os delimitadores */ Duas barras (//) também podem ser usadas para se comentar uma linha: Exemplo: int idade; // este comando declara a variável idade /** e */ E finalmente os comentários podem começar também com /** e terminar com */. Este comentário é especial e é usado pelo javadoc e para gerar uma documentação API do código. EXERCÍCIO //A (public static void main( String args[] )) corresponde à declaração de um método. Classes podem ter um ou mais métodos. //Para a execução de um aplicativo deve sempre existir pelo menos o método main. Como os métodos podem retornar //informações, a palavra-chave void é empregada e nenhuma informação é devolvida. Este método possui ainda, entre parêntesis, //parâmetros de entrada dados por String args[]. //O comando da linha 5 realiza a impressão de uma cadeia de caracteres contidas entre as aspas duplas, empregando um objeto //de saída padrão, o System.out. Portanto, o método System.out.println exibe uma linha de texto na janela de comando. //É importante notar, também, que esta instrução, assim como todas as outras, é seguida de ponto-e-vírgula (;). Declaração da //classe testamensagem com apenas um método. Esta classe deve estar em um arquivo testamensagem1.class. Salve primeiro como testamensagem1.java public class testamensagem1 { // Exibe uma mensagem. public static void main (String[] args) { System.out.println(“Java Rules the Universe!"); }// fim do método. } // fim da classe. CLASSES E OBJETOS Classes são como moldes que geram instâncias de um certo tipo. Para definir uma classe, use a palavra chave class e o nome da classe. Exemplo: class Minhaclasse{ ... } Se esta classe é uma subclasse de outra classe, use extends para indicar a superclasse. Exemplo: class Minhaclasse extends SuperClasse{ ... } DEFININDO VARIÁVEIS DE INSTÂNCIA As variáveis de instância, aparentemente, são declaradas e definidas quase exatamente da mesma forma que as variáveis locais, a principal diferença é que a alocação delas é na definição da classe. Exemplo: class Bike extends Veículo { String tipo; int correia; int pedal; } DEFININDO VARIÁVEIS DE INSTÂNCIA • Variáveis de instância de classe são como as variáveis de classe, exceto que cada subclasse possui sua própria cópia. Como é uma variável privada, a variável de instância de classe deve começar com uma letra minúscula. Variáveis de instância de classe suportam o comportamento de uma classe herdada, com cada classe possuindo seu próprio estado. OBJETOS Objetos são instâncias de uma classe. Quando um objeto é criado ele precisa ser inicializado, ou seja para umaúnica classe de nome • Estudante de Graduação podemos ter vários objetos durante a execução de um programa. • Estudante de graduação André; Identificação 940718; Curso Computação / Estudante de graduação Luiza , Identificação 893249, Curso Medicina... A classe representa somente o molde para a criação dos objetos, estes sim contém Informação. O atributo Identificação pode ter o valor 940718 por exemplo para a instância (objeto) André da classe Estudantes de Graduação. REPRESENTAÇÃO GRÁFICA Uma classe e suas instâncias REPRESENTAÇÃO 2 Cada estudante (ou instância) poderia ser modelado, desenhado como: MAIS SOBRE CLASSES Uma classe é um modelo usado para definir vários objetos com características semelhantes. Um programa é constituído de uma classe ou de um conjunto de classes. Os elementos básicos de uma classe são chamados membros da classe e podem ser divididos em duas categorias: As variáveis, que especificam o estado da classe ou de um objeto instância desta classe. Os métodos, que especificam os mecanismos pelos quais a classe ou um objeto instância desta classe podem operar. O esqueleto de uma classe apresenta-se da seguinte maneira: class NomeDaClasse { TipoDaVariahvel1 variahvel1; TipoDaVariahvel2 variahvel2; ... TipoDeRetorno1 mehtodo1() { ... } TipoDeRetorno2 mehtodo2() { ... } ... } MAIS SOBRE OBJETOS Um Objeto é uma instância de uma classe. Um objeto precisa ser declarado e criado. Na declaração, a seguinte instrução declara que a variável nomeDoObjeto refere-se a um objeto instância da classe NomeDaClasse: NomeDaClasse nomeDoObjeto; Na criação, a seguinte instrução cria (em memória) um novo objeto instância da classe NomeDaClasse, que será referenciado pela variável nomeDoObjeto previamente declarada : nomeDoObjeto = new NomeDaClasse(); As duas instruções acima podem ser combinadas numa só: NomeDaClasse nomeDoObjeto = new NomeDaClasse(); EXEMPLO DE UMA CLASSE (INSTÂNCIA) // Classe class animal { // Atributo protected string especie; // Construtor public animal(string especie) { this.especie = especie; } // Execução static void Main(string[] args) { // Instâncias cachorro = new animal("Canis lupus familiaris"); gato = new animal("Felis catus"); lobo = new animal("Canis lupus"); } } REPRESENTAÇÃO DE HERANÇA Uma subclasse só pode herdar de uma única superclasse diretamente. CONSTANTES Para declarar uma constante, use a palavra chave final antes da declaração da variável e inclua um valor inicial para esta variável. Exemplo: final float pi=4.141592; final boolean debug=false; final int maxsize = 40000; CONSTANTES – CONTINUA Você pode alterar o seu valor apenas uma vez... ou na hora da declaração da variável, ou posteriormente no código, desde que seja uma única vez. final int a = 2; a = 3; Não compila porque você já atribui um valor 2 para a variável a. CONSTANTES - CONTINUA Constantes são o oposto das variáveis. A diferença está em não podermos atribuir um novo valor, pois ele recebe um valor final imutável. Isso ajuda na hora que temos que lembrar de algum número muito grande ou muito pequeno, ou até mesmo um valor que aparentemente não nos diz nada, mas que significa alguma coisa. Um exemplo bem simples seria 000000. Mas, o que é 000000? É difícil saber o que ele significa, mas é muito mais fácil entender que preto em Java é Color.BLACK. Ou seja BLACK é uma constante que guarda sempre o mesmo valor (000000). Para criarmos uma constante em Java é muito simples. Primeiro nos atemos ao fato de que uma constante criada dentro de uma classe deve ser acessada por qualquer membro da classe, então, por definição, essa constante é também global ou estática (static). Como uma constante não muda seu valor, então, marcamos ela com a palavra chave final, que fará com que o valor nunca seja modificado. Toda constante é um dado, portanto, o seu tipo de dado também é obrigatório declarar. Então, para declarar uma constante faríamos: static final long CONST1 = 1L; ou final long CONST2 = 1L; No qual, CONST1 seria uma constante global (ou seja, foi declarada no corpo da classe) e CONST2 seria uma constante local (ou seja, foi declarada no corpo de alguma função ou método, por exemplo, dentro de main) CONSTANTES - CONTINUA No qual, CONST1 seria uma constante global (ou seja, foi declarada no corpo da classe) e CONST2 seria uma constante local (ou seja, foi declarada no corpo de alguma função ou método, por exemplo, dentro de main) Para ilustrar bem o uso de constantes, vamos calcular a área e o comprimento de um círculo. O porque deste cálculo é que necessitaremos de um número constante chamado PI. PI é um número irracional, ou seja, não há uma representação exata dele, mas, para o nosso exemplo, usaremos ele com uma precisão de 8 casas decimais. Portanto, nosso pi será do tipo double que valerá 3,14159265. Então, perceba que é muito mais fácil se lembrar da palavra pi do que do número 3,14159265. Além de, obviamente, digitarmos bem menos. Então, só para esclarecer o que irá acontecer: O cálculo da área do círculo equivale a raio² × pi, e o comprimento é medido em 2 × raio × pi, no qual o raio é a distância entre a borda do círculo e seu centro. Vamos usar um raio de 25cm. Vejamos o resultado a seguir. CONSTANTES - CÓDIGO public class Constantes { static final float PI = 3.14159265f; public static void main(String args[]) { float raio = 25f; float comprimento = raio * 2 * PI; float area = (raio * raio) * PI; System.out.println("Dados de um círculo de " + raio + "cm:\n“ + "comprimento: " + comprimento + "cm\n“ + "Área: " + area + "cm²"); } } ANATOMIA DE UMA CLASSE (livro “Use a Cabeça Java” MÉTODOS E ATRIBUTOS STATIC Métodos e atributos estáticos só podem acessar outros métodos e atributos estáticos da mesma classe, o que faz todo sentido já que dentro de um método estático não temos acesso à referência this, pois um método estático é chamado através da classe, e não de um objeto. ARRAYS Dentro de um bloco, podemos declarar diversas variáveis e usá-las: int idade1; int idade2; int idade3; int idade4; Isso pode se tornar um problema quando precisamos mudar a quantidade de variáveis a serem declaradas de acordo com um parâmetro. Esse parâmetro pode variar como por exemplo a quantidade de números contidos num bilhete de loteria. Um jogo simples possui 6 números mas podemos comprar um Bilhete mais caro com 7 números ou mais. CRIANDO UMA ARRAY Para facilitar esse tipo de caso podemos declarar um vetor (array) de Inteiros. Assim criando um objeto de array: int[] idades; O int[] é um tipo. Uma array é sempre um objeto, portanto, a variável idades é uma referência. Vamos precisar criar um objeto para poder usar a array. idades = new int[10]; RESULTADO O que •fizemos foi criar uma array de int de 10 posições e atribuir o endereço no qual ela foi criada. No caso do bilhete de loteria, podemos utilizar o mesmo recurso. Mais ainda, a quantidade de números do nosso bilhete pode ser defi•nida por uma variável. Considere que n indica quantos números nosso bilhete terá, podemos então fazer: int numerosDoBilhete[] = new int[n]; ARRAYS - DIFICULDADES • Aprender a usar arrays pode ser um problema em qualquerlinguagem. Isso porque envolve uma série de conceitos, sintaxe e outros. No Java, muitas vezes utilizamos outros recursos em vez de arrays, em especial os pacotes de coleções do Java. (Java collections framework) CONDICIONAIS O condicional contém a palavra chave if, seguido por um teste booleano. Um opcional else como palavra chave pode ser executado no caso do teste ser falso, Exemplo: if ( x < y) System.out.println(“ x e menor do que y”); else System.out.println(“ y e maior); Nota técnica: A diferença entre o if em Java e C ou C++ é que o teste deve retornar um valor booleano(true ou false). CONDIÇÃO BOOLEANA if (condicaoBooleana) { codigo; } Uma condição booleana é qualquer expressão que retorne true ou false. Para isso, você pode usar os operadores <, >, <=, >= e outros. Um exemplo: int idade = 15; if (idade < 18) { System.out.println("Não pode entrar"); } BLOCO Um bloco é definido por ({}) e contém um grupo de outros blocos. Quando um novo bloco é criado, um novo escopo local é aberto e permite a definição de variáveis locais. As variáveis definidas dentro de um bloco só podem ser vistas internamente a este, e são terminadas ou extintas no final da execução deste(}). void testblock(){ int x = 10, w=1; if (x> w) { // inicio do bloco int y=50; System.out.println(“dentro do bloco”); System.out.println(“x:” + x); System.out.println(“y:” + y); } // final do bloco System.out.println(“w:” + w); System.out.println(“y:” + y); // erro variável não conhecida } STRING A String guarda uma cadeia de caracteres, uma frase completa. Strings São objetos que contém uma cadeia de caracteres. São imutáveis, portanto uma vez criadas não podem ser alteradas. Caso ocorra uma concatenação de Strings, um novo objeto é criado, e o antigo, automaticamente removido. class Conta { int numero; String dono; ... EXERCÍCIO Crie um arquivo testaidade.java e o compile para calcular a idade seguinte de alguém com 20 anos: class testaidade { public static void main(String[] args) { // imprime a idade int idade = 20; System.out.println(idade); // gera uma idade no ano seguinte int idadeNoAnoQueVem; idadeNoAnoQueVem = idade + 1; // imprime a idade System.out.println(idadeNoAnoQueVem); } } IDEs JCreator é um poderoso Ambiente de desenvolvimento integrado criado pela Xinox Software tendo as versões Pro e LE(Learn Edition) que suporta o desenvolvimento em Java,JavaScript,XML, HTML. Um interativo entorno de desenvolvimento (IDE) para JAVA que com algumas características como as que se seguem: • Manuseamento de projetos em uma interface semelhante à do Microsoft Visual Studio; • Definição de esquemas de cor XML; • Reutilização de código de projetos existentes usando diferentes versões do JDK; • Modelos pré-definidos; • Permite manusear e intercâmbiar código com sua integração entre Ant e CVS. • Personalização da interface do usuário. Além desse IDE há diversos outros conhecidos também como o Netbeans e o Eclipse. EXERCÍCIO – USANDO O JCREATOR Botão Iniciar e localize o Jcreator. Clique nele. Na janela que abrir, selecione New project... e Basic Java Applet. Coloque o nome como ola_internet.java Na janela que abrir construa a seguinte applet. Logo após, compile, clicando em play. import java.awt.*; import java.applet.*; public class ola_internet extends Applet { public void init() { } public void paint(Graphics g) { g.drawString(“Ola internet!!", 50, 60 ); } } EIS NA SEGUINTE HTML CRIADA <HTML> <HEAD> </HEAD> <BODY BGCOLOR="000000"> <CENTER> <APPLET code = “ola_internet.class" width = "500" height = "300" > </APPLET> </CENTER> </BODY> </HTML> JCREATOR E NETBEANS • Nesses ambientes de desenvolvimento integrado (IDE) você poderá desenvolver os mesmos exercícios já realizados no bloco de notas. ENCAPSULAMENTO O encapsulamento é a técnica para agregação das partes de um subprograma (dados e códigos) numa forma que seja tratada como uma unidade indivisível pelas demais partes do programa. Quando queremos que o objeto retorne o nome da referencia desse objeto, por exemplo, deixamos com que um atributo chamado Nome possa ser acessado de qualquer parte do programa e não sabemos se ele é de um atributo de retorno ou de modificação, utilizamos os métodos assessores Get e Set. Por exemplo, quando queremos receber algum valor utilizamos o método get + o nome do atributo com a inicial capitalizada, como vemos no exemplo getNome já quando queremos modificar ou repassar um valor utilizamos o set da mesma forma como apresentada acima, exemplo setNome os padrões gets sempre retornam algum valor já os sets geralmente somente modificam estes valores. Vamos ver um método get: MÉTODO ENCAPSULADO public String getNome () { return nome; } • Então para ter um método encapsulado utilizamos um modificador de acesso que geralmente é public o tipo de retorno que ele terá que neste caso é String e o nome do método e o tipo de retorno dele. Uma coisa que devemos saber é que o retorno sempre tem que ser alcançável e do mesmo tipo. MÉTODO ENCAPSULADO public String getNome(){ if (this.nome == null){ return 1; } else { return 2; } } ESCONDER A idéia de ENCAPSULAR é esconder todos os membros de uma classe, além de esconder como funcionam as rotinas (no caso métodos) do nosso sistema. Encapsular é fundamental para que seu sistema seja suscetível a mudanças: Não precisaremos mudar uma regra de negócio em vários lugares, mas sim em apenas um único lugar, já que essa regra está encapsulada. (veja o caso do método saca) MÉTODO SACA CONSTRUTORES Quando usamos a palavra chave new, estamos construindo um objeto. Sempre quando o new é chamado, ele executa o construtor da classe. O construtor da classe é um bloco declarado com o mesmo nome que a classe: class Conta { int numero; Cliente titular; double saldo; double limite; // construtor Conta() { System.out.println("Construindo uma conta."); } // .. } CONSTRUTORES - CONTINUAÇÃO Então, quando •fizermos: Conta c = new Conta(); A mensagem “construindo uma conta” aparecerá na tela. É como uma rotina de inicialização que é chamada sempre que um novo objeto é criado. Um construtor pode parecer, mas não é um método. CONSTRUTORES - CONCLUSÃO O interessante é que um construtor pode receber um argumento, podendo assim inicializar algum tipo de informação: class Conta { int numero; Cliente titular; double saldo; double limite; // construtor Conta(Cliente titular) { this.titular = titular; } // .. } Recapitulando: ATRIBUTOS E MÉTODOS Atributos: Definem características de objetos, e.g., a classe Pessoa tem os Atributos Nome, Endereço, Telefone e Sexo. Métodos: Definem o comportamento (funções) dos objetos, tendo seus nomes normalmente definidos por verbos, ações. Para a classe Pessoa, por exemplo, podem haver os métodos Comprar, Vender e Alugar. EXERCÍCIO Utilize um IDE ou o bloco de notas para criar um programa que faz um carro andar. Você vai precisar criar duas classes em arquivos diferentes para poder executar o projeto. Uma classe será o carro, propriamente dito,a outra será o executor da primeira (a chave do carro). Compile as duas classes .java e rode o executor. Os dados são Carro.java e TestaCarro.java e devem estar na mesma pasta. IDES recomendados: Eclipse, Jcreator e Netbeans. O código fonte segue a seguir como exemplo: class Carro.java class Carro { String cor; String modelo; double velocidadeAtual; double velocidadeMaxima; //liga o carro void liga() { System.out.println("O carro esta ligado"); } //acelera uma certa quantidade void acelera(double quantidade) { double velocidadeNova = this.velocidadeAtual + quantidade; this.velocidadeAtual = velocidadeNova; } //devolve a marcha do carro int pegaMarcha() { if (this.velocidadeAtual < 0) { return -1; } if (this.velocidadeAtual >= 0 && this.velocidadeAtual < 40) { return 1; } if (this.velocidadeAtual >= 40 && this.velocidadeAtual < 80) { return 2; } return 3; } } class TestaCarro.java class TestaCarro { public static void main(String[] args) { Carro meuCarro; meuCarro = new Carro(); meuCarro.cor = “Vermelho"; meuCarro.modelo = "Ferrari"; meuCarro.velocidadeAtual = 0; meuCarro.velocidadeMaxima = 300; // liga o carro meuCarro.liga(); // acelera o carro meuCarro.acelera(100); System.out.println(meuCarro.velocidadeAtual); } } Duke – mascote do java POR QUE JAVA? Por que Java? Linguagem muito poderosa embora simples Permite portabilidade Muito usada em programação em rede Server Programming Aplicações de e-commerce, e-business, etc. Aplicações para acesso via Internet, intranet, etc HISTÓRICO DO JAVA Em 1991, na Sun Microsystems, foi iniciado o Green Project, o berço do Java, uma linguagem de programação orientada a objetos. Os mentores do projeto eram Patrick Naughton, Mike Sheridan, e James Gosling. O objetivo do projeto não era a criação de uma nova linguagem de programação, mas antecipar e planejar a “próxima onda” do mundo digital. Eles acreditavam que em algum tempo haveria uma convergência dos computadores com os equipamentos e eletrodomésticos comumente usados pelas pessoas no seu dia-a-dia. Para provar a viabilidade desta idéia, 13 pessoas trabalharam arduamente durante 18 meses. No verão de 1992 eles emergiram de um escritório de Sand Hill Road no Menlo Park com uma demonstração funcional da idéia inicial. O protótipo se chamava *7, um controle remoto com uma interface gráfica touchscreen. Para o *7 foi criado um mascote, hoje amplamente conhecido no mundo Java, o Duke. O trabalho do Duke no *7 era ser um guia virtual ajudando e ensinando o usuário a utilizar o equipamento. O *7 tinha a habilidade de controlar diversos dispositivos e aplicações. James Gosling especificou uma nova linguagem de programação para o *7. Gosling decidiu batizá-la de “Oak”, que quer dizer carvalho, uma árvore que ele podia observar quando olhava pela sua janela. HISTÓRICO DO JAVA – PARTE 2 O próximo passo era encontrar um mercado para o *7. A equipe achava que uma boa idéia seria controlar televisões e vídeo por demanda com o equipamento. Eles construíram um demo chamado MovieWood, mas infelizmente era muito cedo para que o vídeo por demanda bem como as empresas de TV a cabo pudessem viabilizar o negócio. A idéia que o *7 tentava vender, hoje já é realidade em programas interativos e também na televisão digital. Permitir ao telespectador interagir com a emissora e com a programação em uma grande rede cabos, era algo muito visionário e estava muito longe do que as empresas de TV a cabo tinham capacidade de entender e comprar. A idéia certa, na época errada. A sorte é que o boom da Internet aconteceu, e rapidamente uma grande rede interativa estava se estabelecendo. Era este tipo de rede interativa que a equipe do *7 estava tentando vender para as empresas de TV a cabo. E, da noite para o dia, não era mais necessário construir a infra-estrutura para a rede, em um golpe de sorte, ela simplesmente estava lá. Gosling foi incumbido de adaptar o Oak para a Internet e em janeiro 1995 foi lançada uma nova versão do Oak que foi rebatizada para Java. A tecnologia Java tinha sido projetada para se mover por meio das redes de dispositivos heterogêneos, redes como a Internet. Agora aplicações poderiam ser executadas dentro dos Browsers nos Applets Java e tudo seria disponibilizado pela Internet instantaneamente. Foi o estático HTML dos Browsers que promoveu a rápida disseminação da dinâmica tecnologia Java. HISTÓRICO DO JAVA - CONCLUSÃO A velocidade dos acontecimentos seguintes foi assustadora, o número de usuários cresceu rapidamente, grandes players, como a IBM anunciaram suporte para a tecnologia Java. Desde seu lançamento, em maio de 1995, a plataforma Java foi adotada mais rapidamente do que qualquer outra linguagem de programação na história da computação. Em 2003 Java atingiu a marca de 4 milhões de desenvolvedores em todo mundo. Hoje são cerca de 9 milhões de desenvolvedores. Java continuou e continua crescendo e hoje é com certeza um padrão para o mercado oferecendo qualidade, performance e segurança ainda sem nenhum competidor a altura. Java tornou-se popular pelo seu uso na Internet e hoje possui seu ambiente de execução presente em web browsers, mainframes, SOs, celulares, palmtops e cartões inteligentes, entre outros. VÍDEOS ASSISTA OS VÍDEOS SOBRE O HISTÓRICO DO JAVA HERANÇA E POLIMORFISMO Herança: É a capacidade de criar subclasses a partir de uma superclasse. Essas subclasses herdam, então, todas as características da superclasse. É normalmente definida como uma associação do tipo "é um", e.x., Cliente é uma Pessoa. Polimorfismo: É o princípio pelo qual uma subclasse sobrescreve um comportamento (método) herdado de sua superclasse. Por exemplo, a classe Pessoa implementa o método Comprar, mas a classe Cliente, derivada da classe Pessoa, precisa de algo mais específico, envolvendo mais dados. Então a classe Cliente sobrescreve o método Comprar, tornando-o mais específico. HERANÇA Primeiramente cria-se a classe Pessoa.java com o código abaixo: package heranca; Pessoa.java public class Pessoa { String nome, idade, endereco= "R: Java ,501"; public void ImprimeNome(){ System.out.println("o nome é:"); System.out.println("Endereco: " + endereco); } } HERANÇA Cria-se a classe Fornecedor.java: package heranca; Fornecedor.java public class Fornecedor extends Pessoa { String cnpj; public void ImprimeNome (){ System.out.println("O nome do fornecedor é : " + nome + "\n Cnpj: " + cnpj); } } HERANÇA Cria-se a classe Cliente.java: package heranca; public class Cliente extends Pessoa { String cpf; public void ImprimeNome (){ System.out.println("Nome do cliente é : " + nome + "\n Nº CPF: " + cpf + "\n Seu endereco :" + endereco); } } HERANÇA - CONCLUSÃO A classe Principal será a executora. package heranca; public class Principal { public static void main(String[] args) { Cliente c = new Cliente(); c.nome="Luiz"; c.cpf="073.777.796-21"; c.ImprimeNome(); Fornecedor f = new Fornecedor (); f.nome="Deltatronic";f.cnpj="073.856.9856.52-10"; f.ImprimeNome(); } } HERANÇA - EXERCÍCIO • Faça o exemplo como exercício através do Netbeans/Eclipse e execute o programa. HERANÇA – OUTRO EXEMPLO A classe herda (têm) todos atributos e métodos visíveis em outra classe: Exemplo: class a { public void metodo1() { } private void metodo2() { } } class b extends a { //b tem metodo1 porque herdou //b não tem metodo2 porque não é visivel para herança } POLIMORFISMO OU SOBRECARGA Os métodos em Java podem ser sobrecarregados, ou seja, podem-se criar métodos com o mesmo nome, mas com diferentes assinaturas (parâmetros) e diferentes definições. Quando se chama um método em um objeto, o Java casa o nome do método, o número de argumentos e o tipo dos argumentos e escolhe qual a definição do método a executar. Para criar um método sobrecarregado, é necessário criar diferentes definições de métodos na sua classe, todos com o mesmo nome, mas com diferentes parâmetros (número de argumentos ou tipos). No exemplo a seguir veremos a definição da classe Retângulo, a qual define um Retângulo plano. A classe Retângulo têm quatro variáveis para instanciar, as quais definem o canto superior esquerdo e o canto inferior direito do retângulo: x1, y1, x2 e y2. POLIMORFISMO OU SOBRECARGA class Retangulo { int x1 = 0; int y1 = 0; int x2 = 0; int y2 = 0; } Quando uma nova instância da classe Retângulo for criada, todos as suas variáveis são inicializadas com 0. Definindo um método construaRetang (): este método recebe quatro inteiros e faz um “resize” do retângulo de acordo com as novas coordenadas e retorna o objeto retângulo resultante ( note que os argumentos possuem o mesmo nome das variáveis instanciáveis, portanto deve-se usar o this para referenciá-las ): POLIMORFISMO OU SOBRECARGA Retangulo construaRetang ( int x1, int y1, int x2, int y2 ) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; return this; } Querendo-se definir as dimensões do retângulo de outra forma, por exemplo pode-se usar o objeto Point ao invés de coordenadas individuais. Faremos a sobrecarga do método construaRetang (), passando agora como parâmetro dois objetos Point: POLIMORFISMO OU SOBRECARGA Retangulo construaRetang (Point superiorEsquerdo, Point inferiorDireito) { x1 = superiorEsquerdo.x; y1 = superiorEsquerdo.y; x2 = inferiorDireito.x; y2 = inferiorDireito.y; return this; } Porém querendo-se definir um retângulo usando somente o canto superior esquerdo e uma largura e altura do retângulo pode-se ainda definir mais um método construaRetang (): POLIMORFISMO OU SOBRECARGA Retangulo construaRetang (Point superiorEsquerdo, int largura, int altura) { x1 = superiorEsquerdo.x; y1 = superiorEsquerdo.y; x2 = (x1 + largura); y2 = (y1 + altura); return this; } POLIMORFISMO OU SOBRECARGA - CONCLUSÃO Para finalizar o exemplo mostra-se a seguir um método para imprimir as coordenadas do retângulo e um main para fazer o teste: import java.awt.Point; class Retangulo { int x1 = 0; int y1 = 0; int x2 = 0; int y2 = 0; Retangulo construaRetang ( int x1, int y1, int x2, int y2 ) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; return this; } Retangulo construaRetang (Point superiorEsquerdo, Point inferiorDireito) { x1 = superiorEsquerdo.x; y1 = superiorEsquerdo.y; x2 = inferiorDireito.x; y2 = inferiorDireito.y; return this; } public static void main ( String args[] ) { Retangulo retang = new Retangulo(); System.out.println ( “Chamando construaRetang com coordenadas 25, 25, 50, 50 :” ); retang.construaRetang ( 25, 25, 50, 50 ); retang.imprimaRetangulo (); System.out.println ( “--------------------------------------------“); System.out.println ( “Chamando construaRetang com os pontos (10, 10) , (20, 20) :” ); retang.construaRetang ( new Point (10,10) , new Point (20, 20) ); retang.imprimaRetangulo (); System.out.println ( “--------------------------------------------“); System.out.println ( “Chamando construaRetang com os pontos (10, 10) , largura (50) e altura (50) :” ); retang.construaRetang ( new Point (10,10) , 50, 50); retang.imprimaRetangulo (); System.out.println ( “--------------------------------------------“); }} POLIMORFISMO OU SOBRECARGA - CONCLUSÃO Retangulo construaRetang (Point superiorEsquerdo, int largura, int altura) { x1 = superiorEsquerdo.x; y1 = superiorEsquerdo.y; x2 = (x1 + largura); y2 = (y1 + altura); return this; } void imprimaRetangulo () { System.out.print ( “Retângulo: < “ + x1 + “, “ + y1 ); System.out.println ( “, “ + x2 + “, “ + y2 + “>”); } EXERCÍCIO Descubra os dados de salário do Funcionário Zeus construindo duas classes do Java. Salve-as como Funcionario.java e TestaFuncionario.java e depois as compile. Faça isso utilizando um IDE ou mesmo o bloco de notas se preferir. Execute o programa. class Funcionario.java class Funcionario { double salario; String nome; //seus outros atributos e métodos void bonifica(double aumento) { //o que fazer aqui dentro } double calculaGanhoAnual() { return 0; //o que fazer aqui dentro } } class TestaFuncionario.java class TestaFuncionario { public static void main(String[] args) { Funcionario f1 = new Funcionario(); f1.nome = "Zeus"; f1.salario = 100; f1.bonifica(50); System.out.println("salario atual:" + f1.salario); System.out.println("ganho anual:" + f1.calculaGanhoAnual()); } } ÁREAS DE APLICAÇÃO DO JAVA Até hoje, a plataforma Java já atraiu mais de 9 milhões de desenvolvedores de software. Ele é usado em todo grande segmento do setor e está presente em uma grande gama de dispositivos, computadores e redes. A versatilidade, eficiência, portabilidade de plataforma e segurança da tecnologia Java, a tornam a tecnologia ideal para a computação de rede. De laptops a datacenters, consoles de games a supercomputadores científicos, telefones celulares à Internet, o Java está em todos os lugares! ÁREAS DE APLICAÇÃO DO JAVA • 1,1 bilhão de desktops executam Java; • 930 milhões de download do Java Runtime Environment a cada ano; • 3 bilhões de telefones celulares executam Java; • Telefones Java são lançados a cada ano em um número 31 vezes maior que a Apple e a Android juntas; • 100% de Blu-ray players executam Java; • 1,4 bilhões de Placas Java são fabricadas a cada ano; • Decodificadores Java, impressoras, câmeras Web, games, sistemas de navegação automotiva, casas lotéricas, dispositivos médicos, estações de pagamento de estacionamento, etc; Para conhecer mais informações sobre as áreas de aplicação Java, explore o java.com. OS DESENVOLVEDORES ESCOLHEM JAVA O Java foi testado, refinado, estendido e comprovado por uma comunidade dedicada. Mais de 9 milhões de desenvolvedores Java fazem dele tornam a maior e a mais ativa comunidade de desenvolvimento do planeta. Com sua versatilidade, eficiência e portabilidade, o Java tornou-se inestimável para os desenvolvedores permitindo que eles: • Gravem um software em uma plataforma e o executem virtualmente em qualquer outra plataforma. • Criem programas que possam ser executados dentro em um web browser e acessem web services disponíveis. • Desenvolvam aplicações do servidor para fórunson-line, armazenamentos, pesquisas, processamento de forms HTML e mais. • Combinem aplicações ou serviços usando a linguagem Java para criar aplicações ou serviços altamente personalizáveis. • Gravem aplicações potentes e eficientes para telefones celulares, processadores remotos, produtos de consumo de baixo custo e praticamente qualquer outro dispositivo com pulso digital. CRESCIMENTO DO JAVA Atualmente, o Java tem crescido muito na área de engenharia e sistemas de informação. O conceito de aplicação Java para o desenvolvimento de outros softwares não poderia ser diferente, com isso levou as universidades a realizar a implantação em seu ensino de softwares de simulação como exemplo, C & C++ com o intuito de transformar o aluno em um bom profissional de mercado. Nesse crescente mercado, várias empresas buscam desenvolver softwares para as mais diversas aplicações. É aí que surgem os grandes desafios, como o de permitir a interoperabilidade entre os múltiplos dispositivos distintos e o de desenvolver núcleos de aplicações que possam ser usados em aparelhos computacionais diversos, como exemplo, as câmeras digitais, os PDAs, os celulares, os novos aparelhos de TV digital, entre muitos outros. Nesse contexto, a linguagem Java surge como uma solução poderosa no desenvolvimento de aplicações multiplataforma, devido a fornecer uma quantidade de pacotes para as mais diversas necessidades tecnológicas dos dias atuais. CRESCIMENTO DO JAVA – PARTE 2 Java tem como eficiência, devido sua criação ter sido realizada para ser utilizada em computadores pequenos, ela exige pouco espaço e pouca memória. Java é muito mais eficiente que grande parte das linguagens de “scripting” existentes, embora seja cerca de 20 vezes mais lenta que C, o que não é um marco definitivo. Com a evolução da linguagem, serão criados geradores de “byte-codes” cada vez mais otimizados que trarão as marcas de performance da linguagem mais próximas das de C++ e C. É perceptível que a linguagem Java é excelente para desenvolver aplicações comerciais e para ser usada em universidades. Java pode ser vista como uma fusão de várias tecnologias que vêm sendo desenvolvidas na área de computação, de modo que estudantes dessa linguagem tem a oportunidade de tomar contato com vários tópicos recentes: programação concorrente, sistemas distribuídos, orientação a objetos, protocolos da Internet, e uma série de outros assuntos fáceis de praticar nessa linguagem. Com isso o aluno provido do conhecimento de linguagem Java, aplica, toma decisões, modela informações ao ponto de ter o resultado esperado ou exato, se a construção dos parâmetros e a programação estiverem corretos. SEMELHANÇAS Java tem a aparência de C ou de C++, embora a filosofia da linguagem seja diferente, havendo grandes semelhanças entre alguma destas linguagens. O aluno de Engenharia por exemplo que programa em qualquer uma delas, ou em uma linguagem orientada a objetos, se tornará um bom programador Java em menos tempo. Java também possui características herdadas de muitas outras linguagens de programação: Smalltalk, Eiffel, Modula-3, etc. Muitas das características desta linguagem não são totalmente novas. Java é uma feliz união de tecnologias testadas por vários centros de pesquisa e desenvolvimento de software. ESTRUTURAS DAS APLICAÇÕES JAVA • Agora você entenderá a estrutura básica do Java (Arquivo fonte , classes, métodos , método main), assim como a anatomia básica dessas respectivas estruturas. ARQUIVOS FONTE (SOURCE FILE) Em Java, cada classe (class) é colocada em um arquivo source, esses arquivos representam partes de uma aplicação ou toda a aplicação(no caso de programas muito pequenos). Arquivos source são gerados com a extensão .java e podem ser facilmente criados utilizando o notepad por exemplo. Esses arquivos devem possuir o mesmo nome da classe que possuem. CLASSES Em uma classe Java são colocados os métodos (methods), funções ou procedimentos. Todo o código deve estar em alguma classe, pois quando executamos algum aplicativo java nós estamos, na verdade, executando uma classe. Diferentemente de um arquivo fonte que só pode conter uma classe, uma classe pode conter vários métodos. Em java a classe deve estar em um Arquivo Fonte (Source File) e deve ir com um par de chaves “{}”, são nessas chaves que serão colocados os métodos. Lembrando que uma classe sempre inicia com letra maiúscula. Listagem 1: Exemplo de uma classe contida em um Source File MyClass.java 1 2 3 public class MyClass{ // código vai aqui } MÉTODOS (METHODS) Os métodos, funções ou procedimentos são onde declararemos o código das nossas aplicações java. Assim como classes, os métodos em java devem ser escritos acompanhados de um par de chaves “{}” no final. Lembrando que um método sempre inicia com letra minúscula. Listagem 2: Exemplo de um método contido em uma Classe public class MyClass{ public void meuMetodo(/*argumentos*/){ } } Agora que vimos a estrutura básica do código em java, vamos analisar melhor o código e tentar entender o que declaramos quando criamos classes ou métodos. ANATOMIA DE UMA CLASSE EM JAVA public class MyClass{ public void meuMetodo (/*argumentos*/){ } } public = Refere-se a visibilidade desta classe. Quando dizemos que uma classe é de visibilidade “public” , estamos dizendo que esta classe poderá ser acessada por outras classes. class = Mostramos que estamos criando uma classe. MyClass = Refere-se ao nome da classe que estamos criando. Nesse caso , o nome da minha classe será “MyClass”. { } = As chaves indicam até onde certa classe ou método se estende. O código que queremos inserir nesta classe deverá ser escrito dentro do espaço das chaves. ANATOMIA DE UM MÉTODO public class MyClass{ public void meuMetodo(/*argumentos*/){ } } public = Do mesmo modo que uma classe, refere-se a visibilidade deste método. Quando dizemos que o método é de visibilidade “public” , estamos dizendo que este método poderá ser acessado por outras classes. void = Refere-se ao tipo de retorno que esse método terá. Nesse caso, como o tipo de retorno é “void”, ou seja , “vazio”, esse método não retornará valor nenhum. meuMetodo = Assim como numa classe, refere-se ao nome do método que estamos criando. Nesse caso, o nome do meu método será “meuMetodo”. (/*argumentos*/ ) = Refere-se aos argumentos que serão passados para esse método, sendo opcional. Caso não seja necessário passar argumentos, simplesmente deixaríamos os parênteses vazios “( ) “. De contrário énecessário escrever o tipo da variável a ser passada e um nome para essa variável “(int valor)”. { } = As chaves indicam até onde certa classe ou método se estende. O código que queremos inserir nesta classe deverá ser escrito dentro do espaço das chaves. O MÉTODO MAIN Quando o java virtual machine (JVM) inicia, ele procura na sua classe principal (executora) por um método muito específico, chamado de método main. Uma aplicação Java obrigatoriamente deverá possuir pelo menos uma classe e um método main, pois é por esse método main que o JVM começará a executar. Como o método main é padrão para qualquer aplicação java, há algumas regras que devem ser cumpridas para o funcionamento desse método. Por regra , todo método main deverá ser : Público, estático , sem retorno(void), com nome de “main”, e deverá receber como argumento um array do tipo String. Exemplo de um método main contido em uma Classe:public class MyClass{ public static void main(String[] args){ } } ANATOMIA DO MÉTODO MAIN public class MyClass{ public static void main(String[] args){ } } public = Do mesmo modo que um método comum, refere-se a visibilidade deste método. Quando dizemos que o método é de visibilidade “public” , estamos dizendo que este método poderá ser acessado por outras classes. static = Nos garante que somente haverá uma, e não mais que uma, referência para nosso método, main, ou seja, todas as instâncias da classe irão compartilhar a mesma cópia do método main. void = Assim como um método comum, refere-se ao tipo de retorno que esse método terá. Nesse caso, como o tipo de retorno deve ser “void”, ou seja , “vazio”, esse método não retornará valor nenhum. (String[] args ) = Refere-se aos argumentos que serão passados para esse método, sendo obrigatório no caso do método Main. {} = Assim como um método comum , As chaves indicam até onde certa classe ou método se estende. O código que queremos inserir neste método deverá ser escrito dentro do espaço das chaves. DE MANEIRA MAIS CLARA E MAIS public significa que a classe pode ser acessível a qualquer parte do código class para introduzirmos o nome da classe static significa que não é necessário criar um objeto para usar esse método. void significa que esse método realiza uma tarefa mas não retorna nenhuma informação ao completá-la. main (pronuncia men) (Para um aplicativo ser executado, um dos métodos deve se chamar main. O parâmetro "String [] args" indica que o método main recebe significa um array de Strings. Double é o tipo de dado mais complexo que há em Java e o maior valor possível de se armazenar é 1,797.693.134.862.315.7E+308. Muito mais que qualquer programador precisa. extends está informando que a classe herda métodos e atributos de determinada classe. DE MANEIRA MAIS CLARA E MAIS protected oculta as informações para as classes que instanciarem os métodos e atributos dela, portanto eles são acessíveis diretamente pelas classes que herdam as informações delas. private indica que a classe ou o pacote está encapsulado, por herança, oculta completamente. construtor - todas as informações que serão iniciadas junto com o projeto estarão no construtor. ex: initcomponents (definir posições da tela por exemplo, titulo, tamanho, etc). instanciar - criar objeto. Instancia é a declaração de um objeto que foi definido por uma classe. Objeto é a concretização da classe e Classe é a abstração de objetos que tenham atributos comuns. Buffer é uma região da memória, temporária, para armazenar informações. DE MANEIRA MAIS CLARA E MAIS classe - molde objeto - produto desse molde. Objeto é uma representação computacional de uma entidade do mundo real. import - os termos que seguem o import são as bibliotecas utilizadas. Return serve para a mesma finalidade que no DOS. Return (ou teclar ENTER, por exemplo) é um comando que instrui o programa para executar algo que ele está aguardando ou mesmo não executar nada. o return serve para encerrar um método, retornando o que a assinatura disse que iria retornar. Por exemplo: public int metodo(){ return 1; // porque o método retorna int } } DE MANEIRA MAIS CLARA E MAIS Ou no caso de void, não retornaria nada... só seria usado caso quisesse finalizar o método por alguma condição. public void qualquercoisa (int numero){ if(numero == 1) return; else numero = 1; //agora nao precisa de return pois o método já chegou ao fim. } MÉTODOS E CONSTRUTORES Uma das dúvidas entre métodos e construtores é de que se são a mesma coisa ou não. A resposta simples é essa: Qualquer método que não seja o construtor é um método comum. Os métodos comuns devem ser executados explicitamente. Os métodos construtores são executados na instanciação de um objeto. No exemplo: public class Gato { public void Gato() { system.out.println("Um gato foi criado"); } public void miar() { system.out.println("MIAU"); } } A classe Gato tem um construtor, que deve ser de mesmo nome, isto é a função Gato ... quando você instancia o objeto Gato g = new Gato(); o construtor é executado e um gato foi criado e impresso no console. Para executar o método comum Miar, chame gato.miar(); POLÊMICAS SOBRE O “MÉTODO CONSTRUTOR ESPECIAL” • O construtor não é um método: Não é herdado, não pode ser chamado duas vezes, não existe invocação virtual. Mas, internamente, na JVM (Java Virtual Machine), ele é tratado como um método especial, sem essas características. IMPORTANDO BIBLIOTECA DE ENTRADA/SAÍDA • Agora vocês poderão inserir e receber dados em seu programa Java. • Façam isso começando com: import java.io.*; no início do código. EXERCÍCIO Crie um novo programa Hello para a inserção de dados, com uma entrada interativa de string. Salve-o como Hello.java import java.io.*; class Hello { public static void main(String[] args) throws IOException { BufferedReader in; in = new BufferedReader (new InputStreamReader (System.in)); System.out.print("Digite o seu nome: "); String name = in.readLine(); System.out.println("Hello, " + name); } } DESCREVENDO O CÓDIGO O comando import é necessário para indicar ao compilador onde encontrar as definições das classes IOException, InputStreamReader e BufferedReader. A cláusula throws IOException é necessária porque o método main() está usando construtores e métodos que disparam esta exceção. Em Java, esta espécie de exceção deve ser capturada ou novamente disparada como está aqui. O construtor da classe InputStreamReader cria um objeto InputStreamReader, anexado ao objeto System.in que representa o teclado de entrada. Este objeto controla cada caracter que é digitado no teclado. O construtor de classe BufferedReader guarda cada caracter que provém do objeto anônimo InputStreamReader, acumulando-os como um string em seu buffer. O método readLine() retorna o string que foi acumulado no buffer do objeto. EXERCÍCIO Crie um programa em Java que adivinha o ano que você nasceu, com uma entrada interativa numérica. Declare as Variáveis necessárias. Ao término, salve-o como YearOfBirth.java e o compile: import java.io.*; class YearOfBirth { public static void main(String[] args) throws IOException { BufferedReader in; in = new BufferedReader (new InputStreamReader (System.in)); System.out.print("Digite sua idade: "); String input = in.readLine(); int age = Integer.parseInt(input); System.out.println("você tem " + age + " anos agora."); int year = 2013 - age; System.out.println("Assim, você provavelmente nasceu em " + year); } } RESUMO O que é código fonte? Código fonte é o código do programa ainda aberto num formato em que um compilador possa abrir e alterá-lo. O que é linguagem de alto nível? É aquela linguagem q se aproxima da linguagem humana. E linguagem de baixo nível? Seria uma linguagem que se assemelha a linguagem da máquina. Ex. O Assembly. O que é compilador? É um programa para escrever e abrir códigos que criam um programa ou arquivo. RESUMO – PARA FIXAR (ALGORITMO) EXEMPLO DE UM ALGORITMO QUE CALCULA A MÉDIA ARITMÉTICA: INÍCIO (início do programa) DECLARE NOME COMO STRING ( declarando como uma cadeira de caracteres) DECLARE N1,N2,N3,N4, MA COMO REAL (declarando como númerosreais) LEIA NOME, N1, N2, N3, N4 (lendo as variáveis declaradas) MA<-(N1+N2+N3+N4)/4 (fórmula para o cálculo) ESCREVA MA, N1, N2, N3, N4, NOME (escrevendo os resultados) FINAL ALGORITMO (fim do programa) RESUMO – PARA FIXAR (ALGORITMO) 2 EXEMPLO DE UM ALGORITMO QUE CALCULA A BASE DO RETÂNGULO: INÍCIO (início do programa) DECLARE A, B, H COMO REAL (declarando as variáveis como números reais) LEIA B, H (lendo as variáveis declaradas) A<-(B*H) (fórmula para cálculo) ESCREVA B, H, A (escrevendo os resultados) FINAL ALGORITMO (fim do programa) O QUE BAIXAR DO SITE DA ORACLE/SUN? • JVM = É a virtual machine, esse download não existe, ela sempre vem acompanhada. • JRE = Java Runtime Environment, ambiente de execução Java, formado pela JVM e bibliotecas, tudo que você precisa para executar uma aplicação Java. Mas nós precisamos de mais. • JDK = Java Development Kit: Nós, desenvolvedores, faremos o download do JDK do Java SE (Standard Edition). Ele é formado pela JRE somado a ferramentas, como o compilador. Tanto o JRE e o JDK podem ser baixados do site http://java.sun.com, hoje gerenciado pela Oracle. Para encontrá-los, acesse o link Java SE dentro dos top downloads. Consulte o apêndice de instalação do JDK para maiores detalhes. INSTALAÇÃO DO JAVA Como já foi visto anteriormente, a VM é apenas uma especificação e devemos baixar uma implementação. Há muitas empresas que implementam uma VM, como a própria Oracle, a IBM, a Apache e outros. A da Oracle é a mais usada e possui versões para Windows, Linux e Solaris. Você pode baixar o SDK acessando: http://www.oracle.com/technetwork/java/ Nesta página da Oracle, você deve escolher o Java SE, dentro dos top downloads. Depois, escolha o JDK e seu sistema operacional. INSTALAÇÃO DO JAVA • O Java Software Development Kit (SDK) reúne em um só pacote todas as bibliotecas de classes e outras ferramentas de software que você necessita para desenvolver programas em Java. O SDK é fornecido sem custo algum, e on-line pela Sun/Oracle. INSTALAÇÃO NO UBUNTU Cada distribuição Linux tem sua própria forma de instalação. Algumas já trazem o Java junto, outras possibilitam que você instale pelos repositórios ofi•ciais e em alguns casos você precisa baixar direto da Oracle e con•figurar tudo manualmente. No Ubuntu, basta ir no terminal e digitar: sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java7-installer Caso queira utilizar o openjdk, a distribuição opensource, basta fazer sudo apt-get install openjdk-7-jdk INSTALAÇÃO NO FEDORA No linux fedora, você faria com su -c "yum install java-1.7.0-openjdk". Se você já tiver outras versões instaladas no seu Ubuntu, pode utilizar: sudo update-alternatives –config java para escolher entre elas. Uma instalação mais braçal, sem usar repositório , pode ser feita baixando o instalador no próprio site da Oracle. É um tar.gz que possui um .bin que deve ser executado. Depois, é necessário apontar JAVA_HOME para esse diretório e adicionar JAVA_HOME/bin no seu PATH. INSTALAÇÃO ATRAVÉS DO WINDOWS Para instalar o JDK no Windows, primeiro baixe-o no site da Oracle. É um simples arquivo executável que contém o Wizard de instalação: http://www.oracle.com/technetwork/java/ PROCEDIMENTOS DA INSTALAÇÃO 1 - Dê um clique duplo no arquivo jdk-<versão>-windows-i586-p.exe e espere até ele entrar no wizard de instalação. 2 - Aceite os próximos dois passos clicando em Next. Após um tempo, o instalador pedirá para escolher em que diretório instalar o SDK. Pode ser onde ele já oferece como padrão. Anote qual foi o diretório escolhido, vamos utilizar esse caminho mais adiante. A cópia de arquivos iniciará: PROCESSO DA INSTALAÇÃO 3 - O instalador instalará também o JavaFX. Após isso, você será direcionado à uma página onde você pode, opcionalmente, criar uma conta na Oracle para registrar sua instalação. CONFIGURANDO O AMBIENTE Precisamos con•figurar algumas variáveis de ambiente após a instalação, para que o compilador seja acessível via linha de comando. Caso você vá utilizar diretamente algum IDE, provavelmente não será necessário realizar esses passos. 1) Clique com o botão direito em cima do ícone Computador e selecione a opção Propriedades. 2) Escolha a aba “Configurações Avançadas de Sistema” e depois clique no botão “Variáveis de Ambiente” CONFIGURANDO VARIÁVEL DE AMBIENTE FINALIZANDO A CONFIGURAÇÃO 3) Nesta tela, você verá, na parte de cima, as variáveis de ambiente do usuário corrente e, embaixo, as variáveis de ambiente do computador. Clique no botão Novo... da parte de baixo. 4) Em Nome da Variável digite JAVA_HOME e, em valor da variável, digite o caminho que você utilizou na instalação do Java. Provavelmente será algo como: C:\Program Files\Java\jdk1.7.0_07\bin ou a versão referente à sua JDK. Depois clique em OK. FINALIZANDO A INSTALAÇÃO 5) Abra o prompt, indo em Iniciar, Executar e digite cmd. No console, digite javac -version. O comando deve mostrar a versão do Java Compiler e algumas opções javac -version. 6) No console, digite javac -version. O comando deve mostrar a versão do Java Compiler e algumas opções. INSTALAÇÃO NO MAC OS X • O Mac OS X já traz o Java instalado junto como sistema operacional até a versão 10.6. As versões mais novas, do Lion em diante, o instalador do Mac vai perguntar se você deseja baixá-lo quando for rodar sua primeira aplicação Java, Algum IDE. IMPLEMENTAÇÃO DE ORIENTAÇÃO A OBJETO EM JAVA CLASSES E OBJETOS Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de estoque de uma livraria pode conter vários clientes e vários livros. As classes descrevem as informações armazenadas e os serviços providos por um objeto. Em outras palavras, são padrões a partir dos quais os objetos são criados (código). Em um programa orientado a objetos, um objeto é uma instância de uma classe. Os objetos que são instâncias de uma mesma classe armazenam os mesmos tipos de informações e apresentam o mesmo comportamento. Em Java uma classe é definida pela palavra-chave class seguida do nome da classe. Para ilustrar os novos conceitos, vejamos o exemplo da conta corrente. A conta corrente é uma classe que é definida da seguinte maneira: class ContaCorrente { // Definição dos métodos e atributos } VARIÁVEIS Cada variável tem um nome e um tipo que define o comportamento estático do objeto. Em Java para cada variável são especificados: um modificador (opcional), o nome, o tipo e o valor inicial (opcional) do atributo. Por exemplo, a classe ContaCorrente possui as variáveis saldo (saldo da conta corrente) e nome (nome do dono da conta). As variáveis de uma classe podem ser de instância ou de classe. Cada classe possui as suas próprias cópias das variáveis de instância, enquanto que as variáveis de classe são compartilhadas. VARIÁVEIS CLASSE ContaCorrente Cada instância da classe ContaCorrente (objeto) terá as mesmas variáveis (saldo e nome), porém, elas podem ter valores diferentes em cada instância. A variável de classe (dinheiroTotal), porém, é compartilhada por todos os objetos. Por isso, possui o mesmo valor para todos os objetos e se um objeto modificar o seu valor, o novo valor é visto por todos os outros objetos. MÉTODOS Os métodosdefinem os serviços que podem ser solicitados a uma instância (objeto), ou seja, o comportamento dinâmico de um objeto. A definição de um método em Java inclui um modificador (opcional), o tipo do dado retornado após a execução do método, o nome do método, o nome e tipo dos parâmetros e o código delimitado por chaves ( { } ). Por exemplo, na classe ContaCorrente podem ser definidos os métodos: verificaSaldo: retorna o saldo da conta corrente; depositaValor: deposita um valor especificado x na conta; retiraValor: retira um valor especificado x da conta; A definição da classe ContaCorrente com as variáveis e métodos é a seguinte: CLASSE ContaCorrente COM OS MÉTODOS E VARIÁVEIS class ContaCorrente { static float dinheiroTotal; float saldo; String nome; float verificaSaldo ( ) { return saldo; } void depositaValor (float valor) { saldo = saldo + valor; dinheiroTotal += valor; } void retiraValor (float valor) { if (saldo>=valor) { saldo = saldo – valor; dinheiroTotal -= valor; } } } INSTANCIANDO UMA CLASSE Em um programa Java, os objetos são criados (as classes são instanciadas) através do operador new. A execução do comando new cria um objeto de um determinado tipo (classe) e retorna uma referência a este objeto. Por exemplo: ContaCorrente minhaConta; minhaConta = new ContaCorrente (“Maria”); Na primeira linha tem-se o nome da variável (minhaConta) na qual o identificador do objeto será armazenado. Na segunda linha é criado o objeto do tipo ContaCorrente com o comando new que retorna o identificador do objeto que é armazenado na variável minhaConta. O enunciado acima poderia ser escrito também da seguinte maneira: ContaCorrente minhaConta = new ContaCorrente (“Maria”); O OPERADOR THIS Java inclui um valor de referência especial, chamado this, que é usado dentro de qualquer método para referir-se ao objeto corrente. O valor de this refere-se ao objeto do qual o método corrente foi chamado. Em Java é permitido que variáveis locais (dentro de um método) tenham o mesmo nome de variáveis de instância. Para definir que se está acessando a variável de instância, usa-se o this. Por exemplo, a classe ContaCorrente poderia ter os seus métodos construtores declarados da seguinte maneira: class ContaCorrente { static float dinheiroTotal; float saldo; String nome; public ContaCorrente (String nome) { this.nome = nome; saldo = 0; } ... // restante do código } ITERAÇÃO A maior parte dos programas úteis utilizam objetos de dados que contêm seqüências de elementos numerados. Essas seqüências são facilmente processadas pela iteração (repetição) de blocos de comandos. Tais comandos de programação são denominados de laços, porque o fluxo de execução “faz a volta” para o início do bloco. Como a maioria das linguagens de programação modernas, Java possui três comandos de laços: o comando for, o comando while e o comando do ...while. A sintaxe do comando for é: for ( expr1; expr2; expr3 ) comando; ITERAÇÃO - CONTINUAÇÃO • Onde que expr1 e expr3 são expressões quaisquer, expr2 é uma expressão booleana e comando é qualquer comando ou bloco de comando. As três expressões são usadas para controlar a iteração do comando ou bloco nessa ordem: 1. Avaliar expr1; isto é chamado de expressão de inicialização. 2. Avaliar a condição expr2; essa é chamada de condição de continuação. 3. Se esse valor booleano é falso, sair imediatamento do laço. 4. Executar comando; esse é chamado de corpo do laço. 5. Avaliar expr3; essa é a chamada de expressão de atualização. 6. Voltar ao passo 2. EXERCÍCIO Charles Babbage solicitou apoio financeiro ao governo britânico para construir seu computador . Ao descrever como seu computador poderia tabular funções, ele forneceu explicitamente o exemplo da função f(x) = x ao quadrado + x + 41. Esse polinômio é curioso porque parece gerar apenas números primos. Esse é o programa que a máquina diferencial de Babbage teria executado. Crie esse mesmo programa de laço em Java e o execute, após a compilação: Class Babbage //programa que gera apenas números primos na função f(x) = X ao quadrado + x + 41 dos //100.000 primeiros números primos. class Babbage { public static void main (String[] args){ for (int x = 0; x < 100001; x++) { int y = x*x + x + 41; System.out.println("\t" + x + "\t" + y); } } } LAÇOS – LAÇOS ANINHADOS Laços são repetições de uma ou mais instruções até que uma condição seja satisfeita. O comando dentro de um laço pode ser de qualquer tipo. Geralmente ele é um bloco de comandos, freqüentemente alguns desses comandos são também laços. Nesse caso eles são chamados de laços aninhados. Essa área é relacionada à matemática e portanto a prática é importante. Tem haver com a Álgebra linear. EXERCÍCIO Crie um programa que imprima na tela uma Tabela de Multiplicação de 1 a 9. Utilize as variáveis necessárias. class MultiplicationTable { public static void main(String[] args) { //Final indica que a entidade não pode ser alterada e ter outro valor e que a classe final não pode ser //uma subclasse final int SIZE = 9; for (int x = 1; x <= SIZE; x++) { for (int y = 1; y <= SIZE; y++) { int z = x*y; System.out.print((z<10?" ":" ") + z); } System.out.println(); } } } O COMANDO WHILE O while é um comando usado para fazer um laço (loop), isto é, repetir um trecho de código algumas vezes. A idéia é que esse trecho de código seja repetido enquanto uma determinada condição permanecer verdadeira. int idade = 15; while (idade < 18) { System.out.println(idade); idade = idade + 1; } O COMANDO WHILE - CONTINUAÇÃO O trecho dentro do bloco do while será executado até o momento em que a condição idade < 18 passe a ser falsa. E isso ocorrerá exatamente no momento em que idade == 18, o que não o fará imprimir 18. int i = 0; while (i < 10) { System.out.println(i); i = i + 1; } Já o while acima imprime de 0 a 9. O COMANDO WHILE - CONCLUSÃO • O while é o mais simples de todos os ciclos: Exemplo: while ( boolean_expr ) statement; Ou seja: int i = 0; while (i < 10) { System.out.println("i = " + i); i++; } DO... WHILE • Os ciclos do… while têm o teste no fim do ciclo: Exemplo: do statement; while ( termination ); Ou seja: int i = 0; do { System.out.println("i = " + i); i++; } while (i < 10); DO... WHILE X WHILE while(CONDIÇÃO){ COMANDO(S); } do{ COMANDO(S); } while(CONDIÇÃO); • Ele funciona exatamente igual ao comando "while". A diferença é que a CONDIÇÃO só é analisada depois que os comandos são executados. Isso significa que o comando "do-while" sempre executa o conjunto de comandos ao menos uma vez. Mesmo que a condição seja inicialmente falsa. EXEMPLOS DO... WHILE Ex 1: while(true){ System.out.println("Estou preso!"); //Como aqui CONDIÇÃO sempre é verdadeira, este comando sempre será executado. } Ex 2: while(variavel==4){ variavel+=(variavel*3); //O numero de vezes que este comando será executado depende do valor inicial da variável } DIFERENÇAS ENTRE SUPERCLASSE E SUBCLASSE • Super classe é a classe pai.
Compartilhar