Quem sou eu?

DAniel Oliveira Araújo

  • Graduando em  Tecnologia em Telemática no IFCE
  • Tutor a distância do Projeto E-Tec pelo IFCE
  • Tutor do E-jovem

Daniel Oliveira Araújo

  • Sou ciclista urbano
  • Troquei o conforto do ônibus pela prazer da bicicleta

Aula 01

O que é uma linguagem java?

O que é java?

  • Java é uma linguagem de programação desenvolvida pela SUN (Hoje pertencente a Oracle) com o objetivo de manter o poder
    computacional de C++, agregando características de segurança, robusteza e portabilidade.
  • A linguagem é orientada a
    objetos, fortemente tipada, independente de arquitetura, robusta, segura, portável, bem
    estruturada, suporta programação distribuída, multithreaded e conta com garbage collection.

Um pouco de história

  • O Java foi desenvolvido por James Gosling lider do projeto Green Team da Sun Microsystems , projeto este responsável pelas inovações tecnológicas da empresa.
  • O time teve a ideia de criar um interpretador para pequenos dispositivos, facilitando a reescrita de softŸware para aparelhos eletrônicos, como vídeo cassete, televisão e aparelhos de TV a cabo.

Linguagem OAK

  • Antes de ser chamada de Java, a linguagem possuia outro nome, se chamava Oak (Carvalho) referente há um jarro da planta que James Gosling posuia em sua janela no escritório.
  • Mas já existia uma linguagem com esse nome e depois mudaram o nome para Java em referência a ilha de Java na Polinésia Francesa.

Desenvolvimento da linguagem

  • Desenvolver software para aparelhos eletrônicos não deu muito certo. 
  • Tentaram fechar diversos contratos com grandes fabricantes de eletrônicos, como Panasonic, mas não houve êxito devido ao conžflito de interesses e custos.
  • Com o advento da web, a Sun percebeu que poderia utilizar a ideia para rodar pequenas aplicações dentro do browser. A semelhança era que na internet havia uma grande quantidade de sistemas operacionais e browsers, e com isso seria grande vantagem poder programar numa única linguagem, independente da plataforma.

Applet Java

  • Applet: é um pequeno software que executa uma atividade específica, dentro de outro programa, geralmente como um Plugin. Geralmente têm algum tipo de interface de usuário ou fazem parte de uma destas dentro de uma página web.
  • Os Applets Java podem rodar em um web browser usando uma JVM (Java Virtual Machine).
  • Applets em Java podem adicionar recursos que não são possíveis em HTML.
  • Comparando com o Javascript, as appçets Java possuem a vantagem de serem independentes do Sistema Operacional, Por outro lado são processados mais lentamente.

Novos Rumos

  • Em 2009 a Oracle comprou a Sun Microsystems fortalecando a marca. O desenvolvimento de appplets foi deixado de lado e o foco maior ficou no desenvovimento de aplicações no lado do servidor.

Máquina Virtual

  • Veja a seguinte observação:

Código binário para windows

Código binário para linux

Sistema Operacional Windows

Sistema Operacional Linux

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 softŸware possa ser utilizado em várias plataformas. 

Máquina Virtual

  • As aplicações se utilizam das bibliotecas do sistema operacional, como, por exemplo, a de interface gráfica para desenhar as “telas”. A biblioteca de interface gráfica do Windows é bem diferente das do Linux: como criar então uma aplicação que rode de forma parecida nos dois sistemas operacionais? 
  • 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 “traduzir” o que sua aplicação deseja fazer para as respectivas chamadas do sistema operacional onde ela está rodando no momento

Máquina Virtual

Código binário para Windows

Código binário para linux

Máquina Virtual Java para Windows

Máquina Virtual Java para Linux

Sistema Operacional Windows

Sistema Operacional Linux

Máquina Virtual

  • Dessa forma, a maneira com a qual você abre uma janela no Linux ou no Windows é a mesma: você 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.
  • Sua aplicação roda sem nenhum envolvimento como sistema operacional! Sempre conversando apenas com a Java Virtual Machine (JVM).
  • A JVM, ela pode decidir onde é melhor alocar a memória, entre outros. Uma JVM isola totalmente a aplicação do sistema operacional. Se uma JVM termina abruptamente, só as aplicações que estavam rodando nela irão terminar: isso não afetará outras JVMs que estejam rodando no mesmo computador, nem afetará o sistema operacional.

Write once, run anywhere 

Escreva uma vez, execute em qualquer lugar

Ambientes e ferramentas de Desenvolvimento Java

  • A tecnologia java fornece como ambiente de desenvolvimento um grande conjunto de ferramentas que engloba: um compilador, um interpretador, um gerador de documentação, ferramenta de empacotamento de classes de arquivos e outros

Java Runtime Evironment (JRE)

  • Ambiente de execução Java, formado pela JVM e bibliotecas, tudo que você precisa para executar uma aplicação Java

Java Virtual Machine (Jvm)

  • É a máquina virtual Java, ela é instalada junto com a JRE

Java Development Kit (JDK)

  • É um pacote para desenvolvedores programarem suas aplicações em Java, possuindo vários utilitários, inclusive compilador e bibliotecas.

Meu Primeiro Programa Java

  • Para compilar e executar um programa Java, devemos construir um arquivo com o código fonte que deve ter uma extensão .java. Em seguida um arquivo .class é gerado. Este arquivo é um bytecode  no qual será lido e executado pela máquina virtual (JVM).

Meu Primeiro Programa Java

public class Hello World {
    public static void main(String[] args) {
        System.out.println("Hello World!");
        }
    }
  1. Salve o arquivo como HelloWorld.java
  2. Abra o terminal e execute o seguinte comando javac HelloWorld.java
  3. Se não aconteceu nada é porque funcionou não se preocupe
  4. Em seguida execute o seguinte comando no terminal java HelloWorld
  5. Observe o Resultado

Integrated Development Environment (IDE)

  • É um programa de computador que reune características e ferramentas de apoio ao desenvolvimento de software com objetivo de agilizar este processo.

NetBeans

  • É um ambiente de desenvolvimento integrado e está disponível para Windows, Mac e Linux. O projeto NetBeans consiste em um IDE de códigofonte aberto e uma plataforma de aplicações que
    permitem que os desenvolvedores criem rapidamente aplicativos web, corporativos, desktop e aplicações móveis utilizando a plataforma Java, bem como JavaFX, PHP, JavaScript e Ajax Ruby e Ruby on Rails , Groovy e Grails, e C / C + +. 
  • O projeto do NetBeans é apoiado por uma vibrante comunidade de desenvolvedores e oferece uma extensa documentação e
    treinamento de recursos, bem como uma diversificada seleção de terceiros plugins .

Eclipse

  • É uma IDE para o desenvolvimento aplicações Java, ele também pode ser usado para o desenvolvimento de aplicações utilizando outras linguagens como PHP, C++, etc. O Ambiente de desenvolvimento multilinguagens de programação cujo projeto é patrocinado pela IBM.

Bluej

  • BlueJ é um ambiente de desenvolvimento java projetado especificamente para o ensino em um nível introdutório. BlueJ foi projetado e implementado pelas equipes das universidades Monash.
  • O BlueJ é um excelente ambiente para o fim a que se destina: a aprendizagem da programação orientada pelos objetos utilizando a linguagem Java. 

Aula 02

Variáveis primitivas e controle de fluxo

Declarando e usando variáveis

  • Podemos declarar variáveis e usá-las. Em Java, toda variável tem um tipo que não pode ser mudado, uma vez que declarado:
tipoDaVariavel nomeDaVariavel;

int idade;

idade = 15;

System.out.println(idade);

Tipos Primitivos

  • A linguagem Java utiliza oito tipos primitivos de dados e um tipo especial. Esses tipos primitivos podem ser utilizados para declarar constantes ou variáveis utilizadas em programas Java. Os tipos primitivos estão divididos em quatro categorias:
    • Lógicos
    • Textuais
    • Numéricos inteiros
    • Numéricos de ponto flutuante.

Tipos Primitivos

Operadores

Produzem novos valores a partir de um ou mais valores. O resultado da
maioria das operações é um valor boleano ou numérico.

Operadores de comparação

  • São utilizados dois operadores de comparação(chamados também de operadores de igualdade ou desigualdade) que compara dois itens semelhantes e retornam um valor booleano que representa o que é verdadeiro sobre os dois itens serem iguais.
int x = 21;
int y = 21;

if(x == y){
    System.out.println("O Valor de x é igual ao valor de Y");
}

Incremento e decremento

  • São os operadores que nos permitem incrementar as variáveis em uma unidade. Podem ser usados diante ou atrás da variável dependendo das necessidades, ou seja, se precisarmos que se incremente ou vice-versa antes de utilizar ou o contrário.
int x = 5;

x++;
System.out.println("Pós incremento");

++x;
System.out.println("Pré incremento");

x--;
System.out.println("Pós decremento");

--x;
System.out.println("Pré decremento");

Casting e promoção

  • Alguns valores são incompatíveis se você tentar fazer uma atribuição direta. Enquanto um número real costuma ser representado emuma variável do tipo double, tentar atribuir ele auma variável int não funciona.

Vamos fazer um teste

double d = 3.1415;
int i = d;

//Será que compila??

double d = 5; 
int i = d;

// E agora?

int i = 5;
double d2 = i;

Title Text

double d3 = 3.14;
int i = (int) d3;

long x = 10000;
int i = (int) x;
  • Às vezes, precisamos que um número quebrado seja arredondado e armazenado num número inteiro. Para fazer isso sem que haja o erro de compilação, é preciso ordenar que o número quebrado seja moldado (casted) como um número inteiro. Esse processo recebe o nome de casting.

Casting Possíveis

Controle de fluxo

  • As estruturas de controle definem a sequência de execução das instruções. Podem ser divididas em seleção, repetição e sequência. 

Comando if

Comando if

if (condicaoBooleana) {
codigo;
}

Exemplo

int idade = 15;
if (idade < 18) {
System.out.println("Não pode entrar");
}

Comando If-Else

Exemplo

int idade = 15;
if (idade < 18) {
System.out.println("Não pode entrar");
} else {
System.out.println("Pode entrar");
}

operadores Lógicos

  • Expressões lógicas são aquelas que realizam uma operação lógica (ou, e, não, etc...) e retorna verdadeiro ou falso.

Exemplo

int idade = 15;
boolean amigoDoDono = true;
if (idade < 18 || amigoDoDono == false) {
    System.out.println("Não pode entrar");
}
    else {
        System.out.println("Pode entrar");
}

Switch e case

Exemplo

int menu = 0;
switch(menu){
    case 1 : System.out.println("Últimas ligações"); break;
    case 2 : System.out.println("Ligações perdidas"); break;
    case 3 : System.out.println("Configurações"); break;
    case 4 : System.out.println("Vídeos / Imagens"); break;
    default : System.out.println("Mensagens"); break;

While

  • É um comando usado para fazer um laço (loop), isto é, repetir um trecho de código algumas vezes. A ideia é 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;
}

dO wHILE

  • A declaração dowhile é similar ao while. As instruções dentro do laço dowhile serão executadas pelo menos uma vez. Inicialmente, as instruções dentro do laço dowhile
    são executadas. Então, a condição na expressão lógica é avaliada. Se for verdadeira, as instruções dentro do laço dowhile serão executadas novamente.
int x = 0;
do {
    System.out.println("Loop do While");
    x++;
} while (x < 5);

Controle de fluxo

  • A ideia é a mesma do while: fazer um trecho de código ser repetido enquanto uma condição continuar verdadeira. Mas além disso, o for isola também um espaço para inicialização de variáveis e o modificador dessas variáveis. Isso faz com que quem mais legíveis, as variáveis que são relacionadas ao loop:
for (int i = 0; i < 10; i = i + 1) {
    System.out.println("olá!");
}
for (int i = x; i < y; i++) {
    if (i % 19 == 0) {
        System.out.println("Achei um número divisível por 19 entre x e y");
    break;
    }
}

Exercícios de Revisão

  1. Imprima todos os números de 150 a 300.
  2. Imprima a soma de 1 até 100.
  3. Imprima todos os múltiplos de 3, entre 1 e 100.
  4. Imprima os primeiros números da série de Fibonacci até passar de 100. A série de Fibonacci é a seguinte: 0, 1, 1, 2, 3, 5, 8˜, 13, 21, etc... Para calculá-la, o primeiro elemento vale 0, o segundo vale 1, daí por diante, o n-ésimo elemento vale o (n-1)-ésimo elemento somado ao (n-2)-ésimo elemento (ex: ˜8 = 5 + 3).

Aula 03

Programação Orientada à Objetos

Programação Orientada à objetos

  • Orientação a objetos é uma maneira de programar que ajuda na organização na escrita do código.

Criando um objeto

  • Para facilitar o nosso entendimento vamos criar um sistema simples de um banco.
  • Vamos analisar e verificar o que temos em um banco.
  • O mais importante do banco é que todos eles tem conta.
  • Analisando a conta de um banco
    • Número da conta
    • Nome do dono da Conta
    • Saldo
    • Limite
  • O que a conta faz?
    • saca uma quantidade x
    • deposita uma quantidade x
    • imprime o nome do dono da conta
    • devolve o saldo atual
    • transfere uma quantidade x para uma outra conta y
    • devolve o tipo de conta

Criando um objeto

Criando uma classe

public class Conta {
    int numero;
    String dono;
    double saldo;
    double limite;

}

Criando a classe principal

public class Programa {
    public static void main(String[] args) {
    Conta minhaConta;
    minhaConta = new Conta();
    minhaConta.dono = "Duke";
    minhaConta.saldo = 1000.0;
    System.out.println("Saldo atual: " + minhaConta.saldo);
    }
}

métodos

  • Declararemos o que cada conta faz e como isto é feito - os comportamentos que cada classe tem, isto é, o que ela faz. Por exemplo, de que maneira que uma Conta saca dinheiro? Especicaremos isso dentro da própria classe Conta, e não em um local desatrelado das informações da própria Conta.

Métodos

public class Conta {
    int numero;
    String dono;
    double saldo;
    double limite;


    void saca(double quantidade) {
        double novoSaldo = this.saldo - quantidade;
        this.saldo = novoSaldo;
˜ }

}

Métodos

public class Conta {
    int numero;
    String dono;
    double saldo;
    double limite;


    void saca(double quantidade) {
        double novoSaldo = this.saldo - quantidade;
        this.saldo = novoSaldo;
˜ }
    void deposita(double quantidade) {
        this.saldo += quantidade;
 }

}

Testando a Classe principal

public class Programa {
    public static void main(String[] args) {
        // criando a conta
        Conta minhaConta;
        minhaConta = new Conta();

        // alterando os valores de minhaConta
        minhaConta.dono = "Duke";
        minhaConta.saldo = 1000;

        // saca 200 reais
        minhaConta.saca(200);

        // deposita 500 reais
        minhaConta.deposita(500);
        System.out.println(minhaConta.saldo);
    }
}

métodos com retorno

  • Um método sempre tem que denir o que retorna, nem que dena que não há retorno, como nos exemplos anteriores onde estávamos usando o void.

método com retorno

public class Conta {
    int numero;
    String dono;
    double saldo;
    double limite;


    boolean saca(double valor) {
        if (this.saldo < valor) {
            return false;
    } else {
        this.saldo = this.saldo - valor;
        return true;
    }
˜ }
    void deposita(double quantidade) {
        this.saldo += quantidade;
 }

}

Objetos são acessados por referência

  • Quando declaramos uma variável para associar a um objeto, na verdade, essa variável não guarda o objeto, e sim uma maneira de acessá-lo, chamada de referência.
public static void main(String args[]) {
    Conta c1;
    c1 = new Conta();

    Conta c2;
    c2 = new Conta();
}

Objetos são acessados por referência

Qual seria o resultado?

class TestaReferencias {
    public static void main(String args[]) {
    Conta c1 = new Conta();
    c1.deposita(100);

    Conta c2 = c1; // linha importante!
    c2.deposita(200);
˜
    System.out.println(c1.saldo);
    System.out.println(c2.saldo);
    }
}

Conclusão

e agora?

public static void main(String args[]) {
    Conta c1 = new Conta();
    c1.dono = "Duke";
    c1.saldo = 227;

    Conta c2 = new Conta();
    c2.dono = "Duke";
    c2.saldo = 227;

    if (c1 == c2) {
    System.out.println("Contas iguais");
    }
}

Atividade

  1. Desenvolva um métoda transfere no seu sistema do banco.
  2. Crie um novo projeto Java chamado "Atividade prática"
    1. Crie uma classe chamado Carro
      • Nesta classe coloque os seguintes atributos
      • String Cor
      • String modelo
      • double velocidadeAtual
      • double velocidadeMaxima
    2. Crie um método que indica que o carro está ligado
    3. Crie um método acelera
    4. Crie um método pegaMArcha indicando a marcha do carro de acordo com a velocidade

Atividade

  • Crie um método pegaMArcha indicando a marcha do carro de acordo com a velocidade.
    • Se a velocidade for menor que 0 retorne -1
    • Se a velocidade for maior igual 0 e menor que 20 retorne 1
    • Se a velocidade for maior igual 20 e menor que 40 retorne 2 
    • Se a velocidade for maior igual 40 e menor que 60 retorne 3
    • Se a velocidade for maior igual 60 e menor que 80 retorne 4
    •  Se a velocidade for maior igual 80 e menor que 100 retorne 5 

Atividade

public class TestaCarro {
	public static void main(String[] args){
		Carro meuCarro = new Carro();
		meuCarro.cor = "Verde";
		meuCarro.modelo = "Fusca";
		meuCarro.velocidadeAtual = 25;
		meuCarro.velocidadeMaxima = 120;
		
		//liga o carro
		meuCarro.liga();
		
		//acelera o carro
		meuCarro.acelera(35);
		System.out.println("O carro está com: " +meuCarro.velocidadeAtual+" km/h");
		
		//Marcha do Carro
		meuCarro.pegaMarcha();
	}

}
  1. Crie a classe testaCarro e faça de acordo com o código abaixo:

Aula 04

Arrays

Imaginemos um seguinte problema

  • Faremos a seguinte declaração de variáveis de idade
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.

Vetor array

  • Uma array é sempre um objeto, portanto, a variável idades é uma referência.
int[] idades;
  • Criando um objeto-array
idades = new int[10];

//acessando a posição do array

idades[5] = 10;

Para entender melhor

Erro de exception

  • No Java, os índices do array vão de 0 a n-1, onde n é o tamanho
    dado no momento em que você criou o array. Se você tentar acessar uma posição fora desse alcance, um erro ocorrerá durante a execução.

Arrays de referência

  • Ao criamos um objeto com array as referências do objeto criado fica no array.
Conta[] minhasContas;
minhasContas = new Conta[10];

// também pode ser desse jeito

Conta[] minhasContas = new Conta[10];
  • Aqui não foi criado nenhuma conta, apenas foram criados 10 espaços para guardar referências de uma conta.

Para entender melhor

Percorrer uma array

public static void main(String args[]) {
    int[] idades = new int[10];
    for (int i = 0; i < 10; i++) {
        idades[i] = i * 10;
    }
    for (int i = 0; i < 10; i++) {
        System.out.println(idades[i]);
}
}

enhanced-for

public static void main(String args[]) {
    int[] idades = new int[10];
    for (int i = 0; i < 10; i++) {
        idades[i] = i * 10;
    }
    // imprimindo toda a array
    for (int x : idades) {
        System.out.println(x);
    }
}

Aula 05

Modificadores de acesso e atributos de classe

Controle de acesso

  • Os modificadores de acesso em Java, também conhecidos como modificadores de visibilidade, permitem controlar o acesso a classes, atributos, métodos e construtores.

Controle de acesso

  • Uma classe é um projeto de um objeto
  • Objeto moto pode acessar o método acelera do objeto carro?
  • Um atributo sendo acessado ou modificado por qualquer classe, torna-se o seu controle descentralizado. Com isso a manutenção torna-se menos eficiente.
  • Usando o controle de acesso, o atributo irá possuir um controle centralizado, tornando-se mais eficiente a sua manutenção.

Modificador de acesso public

  • Quando o modificador de acesso public é usado em uma classe, ela fica visível (acessível) para todas as outras classes.
public class Produto {
}

Atributo privado

class Funcionario {
    private double salario ;
        void aumentaSalario ( double aumento ) {
        
        // lógica para aumentar o salário
        }
    }

atributo privado

  • Um atributo privado só pode ser acessado ou alterado por código escrito dentro da classe na qual ele foi definido. Se algum código fora da classe Funcionário tentar acessar ou alterar o valor do atributo privado salario, um erro de compilação será gerado.

Encapsulamento

  • Esconder todos os membros de uma classe, além de esconder como funcionam as rotinas 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.

Getters e Setters

  • O modificador private faz com que ninguém consiga modificar, nem mesmo ler, o atributo em questão. Com isso, temos um problema: como fazer para mostrar o saldo de uma Conta, já que nem mesmo podemos acessá-lo para leitura?

Getters e setters

class Conta {
    private double saldo;
    private double limite;
    private Cliente titular;
    public double getSaldo() {
        return this.saldo;
    }
    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }
    public double getLimite() {
        return this.limite;
    }
    public void setLimite(double limite) {
        this.limite = limite;
    }
    public Cliente getTitular() {
        return this.titular;
    }
    public void setTitular(Cliente titular) {
        this.titular = titular;
    }
}

Construtor

  • O construtor da classe é um bloco declarado com o mesmo nome que a classe.
  • Quando usamos a palavra chave new, estamos construindo um objeto. Sempre quando o new é chamado, ele executa o construtor da classe.
class Conta {
    int numero;
    Cliente titular;
    double saldo;
    double limite;

    // construtor
    Conta() {
        System.out.println("Construindo uma conta.");
    }
}

Construtor

  • 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;
    }
}

Construtor

Cliente carlos = new Cliente();
carlos.nome = "Carlos";
Conta c = new Conta(carlos);
System.out.println(c.titular.nome);

Aula 06

Herança e polimorfismo

Herança

  • Adiciona a capacidade de uma classe filha estender/herdar atributos e métodos de uma classe mãe.

Classe mãe

Classe filha

classe mãe

class Funcionario {
    String nome;
    String cpf;
    double salario;
}

Classe filha

class Gerente extends Funcionario {
    int senha;
    int numeroDeFuncionariosGerenciados;
    public boolean autentica(int senha) {
        if (this.senha == senha) {
            System.out.println("Acesso Permitido!");
        return true;
            } else {
                System.out.println("Acesso Negado!");
        return false;
            }
        }
}

Herança

  • Dizemos que a classe Gerente herda todos os atributos e métodos da classe mãe, no nosso caso, a Funcionario. Para ser mais preciso, ela também herda os atributos e métodos privados, porém não consegue acessá-los diretamente.
  • Para acessar um membro privado na filha indiretamente, seria necessário que a mãe expusesse um outro método visível que invocasse esse atributo ou método privado.

Atributo protect

  • O atributo protect só pode ser acessado (visível) pela própria classe e por suas subclasses.
class Funcionario {
    protected String nome;
    protected String cpf;
    protected double salario;
}

Uma classe pode ter várias filhas, mas pode ter apenas uma mãe, é a chamada herança simples do java.
 

Reescrevendo o código

  • No Java, quando herdamos um método, podemos alterar seu comportamento. Podemos reescrever (reescrever,
    sobrescrever, override) este método.
class Gerente extends Funcionario {
    int senha;
    int numeroDeFuncionariosGerenciados;
    public double getBonificacao() {
        return this.salario * 0.15;
    }

}

Polimorfismo

  • É a capacidade de um objeto poder ser referenciado de várias formas.
  • Na herança, vimos que todo Gerente é um Funcionário, pois é uma extensão deste. Podemos nos referir a um Gerente como sendo um Funcionário. Se alguém precisa falar com um Funcionário do banco, pode falar com um Gerente! Porque? Pois Gerente é um Funcionário. Essa é a semântica da herança.

UML

Linguagem de Modelagem unificada

UML

  • Surgiu da fusão de três grandes métodos, do BOOCH, OMT (Rumbaugh) e OOSE (Jacobson). Esta linguagem de modelagem não é proprietária, não é um método de desenvolvimento. Têm como papel auxiliar a visualizar o desenho e a comunicação entre objetos. Ela permite que desenvolvedores visualizem os produtos de seu trabalho em diagramas padronizados, e é muito usada para criar modelos de sistemas de software.
  • A Linguagem Unificada de Modelagem possui diagramas (representações gráficas do modelo parcial de um sistema) que são usados em combinação, com a finalidade de obter todas as visões e aspectos do sistema.

Diagramas estruturais

  • De Classe: Este diagrama é fundamental e o mais utilizado na UML e serve de apoio aos outros diagramas. O Diagrama de Classe mostra o conjunto de classes com seus atributos e métodos e os relacionamentos entre classes.

Diagramas estruturais

  • De Objeto: O diagrama de objeto esta relacionado com o diagrama de classes e, é praticamente um complemento dele. Fornece uma visão dos valores armazenados pelos objetos de um Diagrama de Classe em um determinado momento da execução do processo do software.

Diagramas estruturais

  • De Componentes: Está associado à linguagem de programação e tem por finalidade indicar os componentes do software e seus relacionamentos.

Diagramas estruturais

  • De implantação: Determina as necessidades de hardware e características físicas do Sistema.
  • De Pacotes: Representa os subsistemas englobados de forma a determinar partes que o compõem.
  • De Estrutura: Descreve a estrutura interna de um classificador.

Diagrama estrutural de Classe

  • Graficamente, as classes são representadas por retângulos incluindo nome, atributos e métodos.

NomeDaClasse

+ Atributo1

- Atributo2

# Atributo3

+ Método1

- Método2

Visibilidade

  • + público: visível em qualquer classe de qualquer pacote
  • # protegido: visível para classes do mesmo pacote
  • - privado: visível somente para classe 

Relacionamentos

  • Nome: descrição dada ao relacionamento (faz, tem, possui,...)
  • Navegabilidade: indicada por uma seta no fim do relacionamento
  • Multiplicidade: 0..1, 0..*, 1, 1..*, 2, 3..7
  • Tipo: associação (agregação, composição), generalização e dependência
  • Papéis: desempenhados por classes em um relacionamento

Realcionamentos

Relacionamento de associação

  • Uma associação é um relacionamento estrutural que indica que os objetos de uma classe estão vinculados a objetos de outra classe.
  • Uma associação é representada por uma linha sólida conectando duas classes.

Indicadores de Multiplicidade

  • 1 Exatamente um
  • 1..* Um ou mais
  • 0..* Zero ou mais (muitos)
  • * Zero ou mais (muitos)
  • 0..1 Zero ou um
  • m..n Faixa de valores (por exemplo: 4..7)

Exemplo

  • Um Estudante pode ser
    • um aluno de uma Disciplina
    • e um jogador da Equipe de Futebol
  • Cada Disciplina deve ser cursada por no mínimo 1 aluno
  • Um aluno pode cursar de 0 até 8 disciplinas

RELACIONAMENTO DE Agregação

  • É um tipo especial de associação
  • Utilizada para indicar “todo-parte”
  • Um objeto “parte” pode fazer parte de vários objetos “todo”

Composição

  • É uma variante semanticamente mais “forte” da agregação
  • Os objetos “parte” só podem pertencer a um único objeto “todo” e têm o seu tempo de vida coincidente com o dele
  • Quando o “todo” morre todas as suas “partes” também morrem

Diagramas Comportamentais

  • De Caso de Uso (Use Case): Geral e informal para fases de levantamento e análise de Requisitos do Sistema.
  • Utilizam como primitivas Atores, Casos de Uso
    e Relacionamentos. Como ocorre tambü m com outros diagramas.

Diagramas Caso de Uso

  • Atores são representacões de entidades externas mas que interagem com o sistema durante sua execução. Basicamente, a interação de atores com o sistema se da através de comunicações (troca de mensagens). As entidades externas representadas pelos atores podem ser :
  • Pessoas: usuário, secretária, aluno, professor, administrador, etc.
  • Dispositivos: impressora, máquina ou outro equipamentos externo.
  • Hardwares: placa de modem, placa de controle, etc.
  • Software: sistema de banco de dados, aplicativos, etc.

Atores

Atores

Relação entre casos de usos e atores

Relação entre casos de usos e atores

Collections framework

simplificando arrays

Como sabemos

  • Não podemos redimensionar arrays em java
  • É impossível buscar diretamente por um determinado elemento cujo índice não se sabe;

API collections

  • É robusta e possui diversas classes que representam estruturas de dados avançadas.

Listas

  • É uma coleção que permite elementos duplicados e mantém uma ordenação específica entre os elementos.
  • Os elementos serão encontrados em uma ordem pré-determinada, definida na hora da inserção dos mesmos.
  • A API de Collections traz a interface java.util.List, que específica o que uma classe deve ser capaz de fazer para ser uma lista.

ArrayList

  • trabalha com um array interno para gerar uma lista. Ela é mais rápida na pesquisa do que sua concorrente, a LinkedList, que é mais rápida na inserção e remoção de itens nas pontas.
List lista = new ArrayList();
lista.add("Manoel");
lista.add("Joaquim");
lista.add("Maria");

Criando uma lista de objetos

ContaCorrente c1 = new ContaCorrente();
    c1.deposita(100);
ContaCorrente c2 = new ContaCorrente();
    c2.deposita(200);
ContaCorrente c3 = new ContaCorrente();
    c3.deposita(300);
List contas = new ArrayList();
    contas.add(c1);
    contas.add(c3);
    contas.add(c2);
System.out.println(contas.size());
for (int i = 0; i < contas.size(); i++) {
ContaCorrente cc = (ContaCorrente) contas.get(i);
System.out.println(cc.getSaldo());
}

Outros métodos

  • remove() -  que recebe um objeto que se deseja remover da lista
  • contains() - que recebe um objeto como argumento e devolve true ou false, indicando se o elemento está ou não na lista

Conjunto Java.util.set

  • Funciona de forma análoga aos conjuntos da matemática, ele é uma coleção que não permite elementos duplicados.
  • Outra característica fundamental dele é o fato de que a ordem em que os elementos são armazenados pode não ser a ordem na qual eles foram inseridos no conjunto. A interface não dene como deve ser este comportamento.
    Tal ordem varia de implementação para implementação.

Hashset

import java.util.HashSet;
import java.util.Set;

public class Cargos {

	public static void main(String[] args) {
		Set<String> cargos = new HashSet<>();
		cargos.add("Gerente");
		cargos.add("Diretor");
		cargos.add("Presidente");
		cargos.add("Secretária");
		cargos.add("Funcionário");
		cargos.add("Diretor"); // repetido!
		// imprime na tela todos os elementos
		System.out.println(cargos);
	}

}

Percorrer uma coleção

  • Se for uma lista pode-se usar um laço for invocando um método get para cada elemento.
import java.util.ArrayList;
import java.util.List;

public class Lista {

	public static void main(String[] args) {
		
		List lista = new ArrayList();
		
		lista.add("Manoel");
		lista.add("Joaquim");
		lista.add("Maria");
		lista.add("João");
		lista.add("Raimundo");
		lista.add("José");
		lista.add("Francisco");
		
		for (int i = 0; i < lista.size(); i++) {
			System.out.println(lista.get(i));
			}
	}

}

Percorrer uma coleção

  • Set não possui um método para pegar o primeiro, o segundo ou o quinto elemento do conjunto, já que um conjunto não possui o conceito de “ordem”.
import java.util.HashSet;
import java.util.Set;

public class Linguagem {

	public static void main(String[] args) {
		Set<String> conjunto = new HashSet<>();
		conjunto.add("Java");
		conjunto.add("PHP");
		conjunto.add("Vraptor");
		conjunto.add("Scala");
		conjunto.add("Ruby");
		conjunto.add("Angular");
		
		for(String palavra : conjunto){
			System.out.println(palavra);
		}
	}
}

Iterator

  • Toda coleção fornece acesso a um iterator, um objeto que implementa a interface Iterator, que conhece internamente
    a coleção e dá acesso a todos os seus elementos.
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Lista2 {

	public static void main(String[] args) {
		
		Set<String> lista = new HashSet<>();
		
		lista.add("Manoel");
		lista.add("Joaquim");
		lista.add("Maria");
		lista.add("João");
		lista.add("Raimundo");
		lista.add("José");
		lista.add("Francisco");
		
		Iterator<String> i = lista.iterator();
		while (i.hasNext()) {
			// recebe a palavra
			String palavra = i.next();
			System.out.println(palavra);
			}
		}
	}

Mapas

  • Um mapa é composto por um conjunto de associações entre um objeto chave a um objeto valor.

MApa

ContaCorrente c1 = new ContaCorrente();
    c1.deposita(10000);
ContaCorrente c2 = new ContaCorrente();
    c2.deposita(3000);
// cria o mapa
Map<String, ContaCorrente> mapaDeContas = new HashMap<>();
// adiciona duas chaves e seus respectivos valores
    mapaDeContas.put("diretor", c1);
    mapaDeContas.put("gerente", c2);

ContaCorrente contaDoDiretor = mapaDeContas.get("diretor");
    System.out.println(contaDoDiretor.getSaldo());

Properties

  • Um mapa importante é a tradicional classe Properties, que mapeia strings e é muito utilizada para a configuração de aplicações.
Properties config = new Properties();
config.setProperty("database.login", "scott");
config.setProperty("database.password", "tiger");
config.setProperty("database.url","jdbc:mysql:/localhost/teste");

String login = config.getProperty("database.login");
String password = config.getProperty("database.password");
String url = config.getProperty("database.url");
DriverManager.getConnection(url, login, password);

Pacote java.io

Entrada e saída de dados

API java.io

  • Assim como todo o resto das bibliotecas em Java, a parte de controle de entrada e saída de dados (conhecido como io) é orientada a objetos e usa os principais conceitos mostrados até agora: interfaces, classes abstratas e polimorfismo.
  • A ideia atrás do polimorfismo no pacote java.io é de utilizar žuxos de entrada (InputStream) e de saída (OutputStream) para toda e qualquer operação, seja ela relativa a um arquivo, a um campo blob do banco de dados, a uma conexão remota via sockets, ou até mesmo às entrada e saída padrão de um programa (normalmente o teclado e o console).

Classe inputstream

  • A classe InputStream é genérica e modela um fluxo de entrada sem uma fonte específica definida. Diversas classes herdam direta ou indiretamente da classe InputStream para especificar um determinado tipo de fonte de dados.
class TestaEntrada {
    public static void main(String[] args) throws IOException {
        InputStream is = new FileInputStream("arquivo.txt");
        int b = is.read();
            }
        }

Classe Scanner

  • Possui métodos mais sofisticados para obter os dados de uma entrada.
  • A classe Scanner tem como objetivo separar a entrada dos textos em blocos, gerando os conhecidos tokens, que são sequências de caracteres separados por delimitadores que por padrão correspondem aos espaços em branco, tabulações e mudança de linha.
InputStream entrada = System .in;
Scanner scanner = new Scanner ( entrada );

while ( scanner . hasNextLine ()) {
    String linha = scanner . nextLine ();
    System . out. println ( linha );
}

Exemplo

import java.io.InputStream;
import java.util.Scanner;

public class LeituraDoTeclado {

	public static void main(String[] args) {
		InputStream teclado = System.in;
		Scanner scanner = new Scanner(teclado);
		
		while (scanner.hasNextLine()){
			String linha = scanner.nextLine();
			System.out.println(linha);
		}
		scanner.close();

	}

}

PrintStream

  • A classe PrintStream faz parte da biblioteca de entrada e saída de recursos dentro da linguagem Java. A classe PrintStream fornece funcionalidade de saída de dados em conjunto com outros objectos de saída
Scanner s = new Scanner(System.in);
PrintStream ps = new PrintStream("arquivo.txt");
while (s.hasNextLine()) {
    ps.println(s.nextLine());
}

Sockets

Comunicação em rede

TCP

  • Da necessidade de dois computadores se comunicarem, surgiram diversos protocolos que permitissem tal troca de informação: o protocolo mais conhecido e usado é o TCP (Transmission Control Protocol).

Porta

  • Diversos computadores podem se conectar a um só, mas, na realidade, é muito comum encontrar máquinas clientes com uma só conexão física. Então, como é possível se conectar a dois pontos? Como é possível ser conectado por diversos pontos?
  • Como existe o IP (Protocol Internet) para identicar uma máquina, a porta é a solução para identicar diversas aplicações em uma máquina. Esta porta é identificada por  número bytes que  varia de 0 a 65535. Se todas as portas de uma máquina estiverem ocupadas, não é possível se conectar a ela enquanto nenhuma for liberada.

sERVIDOR

  • Iniciando um modelo de servidor de chat, o serviço do computador que funciona como base deve, primeiro, abrir uma porta e ficar ouvindo até alguém tentar se conectar.

sERVIDOR

import java.net.*;

public class Servidor {
    public static void main(String args[]) throws IOException {

    ServerSocket servidor = new ServerSocket(12345);
    System.out.println("Porta 12345 aberta!");
    Socket cliente = servidor.accept();
    System.out.println("Nova conexão com o cliente " +˜ 
              cliente.getInetAddress().getHostAddress());
    Scanner s = new Scanner(cliente.getInputStream());
    while (s.hasNextLine()) {
        System.out.println(s.nextLine());
        }
    s.close();
    servidor.close();
    cliente.close();
    }
}

Cliente

public class Cliente {
    public static void main(String[] args)
    throws UnknownHostException, IOException {
        Socket cliente = new Socket("127.0.0.1", 12345);
        System.out.println("O cliente se conectou ao servidor!");
    
        Scanner teclado = new Scanner(System.in);
        PrintStream saida = new PrintStream(cliente.getOutputStream());

        while (teclado.hasNextLine()) {
            saida.println(teclado.nextLine());
            }

        saida.close();
        teclado.close();
        cliente.close();
        }
    }

Interface Gráfica com o usuário

  • Também conhecido como GUI (Graphical User Interface), em Java, é feita através de bibliotecas de classes, sendo que a primeira a surgir foi a AWT(Abstract Window Toolkit).
  • AWT surgiu já na versão 1.0, mas se tornou confiável a partir da versão 1.1.
  • A partir da versão 2 do Java, a JFC (Java Foundation Classes) apresentou novos recursos para a construção da GUI das aplicações.
    •  Swing: biblioteca de classes extensão da AWT, onde são apresentados novos
      componentes de interface

Janela JFrame

import java.awt.Color;

import javax.swing.JFrame;

public class Tela {

	public static void main(String[] args) {
		JFrame tela = new JFrame("Primeira tela");
		tela.setBounds(100, 100, 400, 300);
		tela.getContentPane().setBackground(Color.RED);
		tela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		tela.setLayout(null);
		tela.setVisible(true);

	}

}

métodos

  • SetBounds: trabalha com a localização e tamanho da tela, sendo a seguinte ordem: distância do canto esquerdo da tela, distância do topo da tela, largura e altura.
  • getContentPane().setBackground(Color.RED): invoca o método que verifica qual é o campo de Content do JFrame, ou seja, a região onde não está o menu nem as bordas, e muda sua cor a partir do método setBackground.
  • setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE): Aqui, determina qual a ação a executar quando este JFrame for fechado. No caso, ele fecha o programa todo, num efeito de BREAK. A instrução DISPOSE_ON_CLOSE apenas levará o JFrame a fechar sem derrubar o programa todo.

métodos

  • setLayout(null): Aqui, escolhe um Layout para o JFrame. No exemplo não é escolhido nenhum layout. Existem Layouts prontos para JFrames, onde os botões ficam dispostos em forma de fileira, ou nos cantos, ou expandidos. Se quisermos desenhar nossa tela com liberdade para fazê-la bonita, temos que escolher o NULL;
    tela.setVisible(true): Depois de preparado, o JFrame pode já ficar visível. Este passo vem no final de toda a sua montagem.

Jlabel

  • É um pequeno componente com o qual colocamos pedaços de texto sem nenhuma função, a não ser a de indicar para quê servem os campos de uma tela qualquer.
import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class MinhaJanela extends JFrame {
	private JLabel lblNome;
	public MinhaJanela(String titulo){
		super(titulo);
		this.lblNome = new JLabel("Frase indicativa");
		this.lblNome.setBounds(100, 100, 200, 30);
		super.getContentPane().add(this.lblNome);
		super.setBounds(100, 100, 400, 300);
		super.getContentPane().setBackground(Color.GRAY);
		super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		super.setLayout(null);
		super.setVisible(true);
	}

}

JButton

  • O JButton poderá ser instanciado de três formas diferentes:
    1. JButton( ) – aqui, teremos depois que rodar um método setText(“algum texto”) para dar-lhe um conteúdo(um conteúdo que aparece para o usuário).
    2. JButton(String) – aqui, escrevemos algum texto para aparecer no botão e o usuário saber do que se trata.
    3. JButton(icon) – neste caso, adicionamos uma figura ao botão para darlhe uma aparência personalizada.

Jbutton

import java.awt.Color;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class MinhaJanela extends JFrame {
	
	private JLabel lblNome;
	private JButton btnOk;
	
	public MinhaJanela(String titulo){
		super(titulo);
		super.setLayout(null);
		this.lblNome = new JLabel("Java Com Banco de Dados");
		this.lblNome.setBounds(100, 100, 200, 30);
		this.btnOk = new JButton("OK");
		//definindo posição do Jbutton instanciado
		this.btnOk.setBounds(100, 150, 100, 30);
		//Adicionando Jlabel e JButton na Janela
		super.getContentPane().add(this.lblNome);
		super.getContentPane().add(this.btnOk);
		//Definindo janela
		super.setBounds(100, 100, 400, 300);
		super.getContentPane().setBackground(Color.GRAY);
		super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		super.setVisible(true);
	}

}

JTextField

  • É uma caixa utilizada para que o usuário possa escrever um texto de uma linha só. Tratasse de um componente bastante simples, que tem basicamente as mesmas especificações dos que acabamos de ver: setBounds, setBackground, etc.

JTEXTFIELD

private JTextField caixa;
this.caixa = new JTextField();
//posiciona a caixa dentro da janela
this.caixa.setBounds(100, 50, 100, 30);
//cor de fundo
this.caixa.setBackground(Color.RED);
//cor de Frente
this.caixa.setForeground(Color.WHITE);

super.getContentPane().add(this.caixa);

Métodos jtextfield

  • O tratamento do texto de um JTextField dar-se-á por meio de dois métodos bastante simples:
    • getText() – servirá para capturar o quê o usuário digitou no campo.
    • setText() – servirá para determinarmos que texto deve ir no campo. Muito útil quando se abre um registro de um banco de dados e o campo JTextField deve receber um campo de registro para alteração.

Icon

  • A classe Icon tem um uso bastante simples, mas muito importante. Com ela, podemos carregar uma imagem (devidamente criada em um arquivo JPG ou PNG), para dentro do programa, utilizando esta imagem como quisermos.
Icon imagem = new ImageIcon(“arquivo.jpg”);
JButton botao = new JButton();
botao.setIcon(imagem);
JLabel rotulo = new JLabel();
rotulo.setIcon(imagem);

Editando Fonte

//formatando fonte do texto
this.lblNome.setFont(new Font("Courier",Font.BOLD,18));
		
//formatando a fonte do botão
this.btnOk.setFont(new Font("Arial",Font.BOLD,30));

JMenuBar, JMenu e JMenuItem

  • Estas classes são utilizadas sempre em conjunto, para criar um menu na parte superior e deixar seu software com aquela facilidade de uso que os usuários modernos
    exigem.
  • O objeto que serve de base é o JMenuBar, adicionado diretamente ao JFrame, e sobre ele vão todas as coisas. Ele é a barra clara no alto do JFrame, dentro da qual os menus
    ficarão.

JMenuBar, JMenu e JMenuItem

import java.awt.Color;
import java.awt.Font;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextField;

public class MinhaJanela extends JFrame {
	
	private JLabel lblNome;
	private JButton btnOk;
	private JTextField caixa;
	private JMenuBar menu;
	private JMenu menuarquivo;
	private JMenu menuhelp;
	private JMenu menudentro;
	private JMenuItem itemnovo;
	private JMenuItem itemsalvar;
	private JMenuItem itemajuda;
	private JMenuItem itemsobre;
	private JMenuItem itempanico;
	private JMenuItem itemterror;

JMenuBar, JMenu e JMenuItem

public MinhaJanela(String titulo){
		super(titulo);
		super.setLayout(null);
		//Criando a barra de menu
		this.menu = new JMenuBar();
		//adicionando o menu na janela
		setJMenuBar(menu);
		//criando menus
		this.menuarquivo = new JMenu("Arquivo");
		this.menuhelp = new JMenu("Help");
		this.menudentro = new JMenu("Mais opções");
		//criando itens de menu
		this.itemnovo = new JMenuItem("Novo");
		this.itemsalvar = new JMenuItem("Salvar");
		this.itemajuda = new JMenuItem("Ajuda");
		this.itemsobre = new JMenuItem("Sobre");
		this.itempanico = new JMenuItem("CTRL+ALT+DEL");
		this.itemterror = new JMenuItem("Tela Azul da Morte");
		//adicionaros menus a barra de menu
		this.menu.add(menuarquivo);
		this.menu.add(menuhelp);
		

JMenuBar, JMenu e JMenuItem

//adicionando item de menu dentro de um menu
		this.menuarquivo.add(itemnovo);
		this.menuarquivo.add(itemsalvar);
		this.menuhelp.add(itemajuda);
		this.menuhelp.add(itemsobre);
		this.menudentro.add(itempanico);
		this.menudentro.add(itemterror);
		this.menuarquivo.add(menudentro);

JMenuBar, JMenu e JMenuItem

//criando um texto simples com Jlabel
		this.lblNome = new JLabel("Java Com Banco de Dados");
		//formatando fonte do texto
		this.lblNome.setFont(new Font("Courier",Font.BOLD,18));
		this.lblNome.setBounds(100, 100, 200, 30);
		this.btnOk = new JButton("OK");
		//formatando a fonte do botão
		this.btnOk.setFont(new Font("Arial",Font.BOLD,30));
		//definindo posição do Jbutton instanciado
		this.btnOk.setBounds(100, 150, 100, 30);
		//Cria um JTxtField
		this.caixa = new JTextField();
		//posiciona a caixa dentro da janela
		this.caixa.setBounds(100, 50, 100, 30);
		//cor de fundo
		this.caixa.setBackground(Color.RED);
		//cor de Frente
		

JMenuBar, JMenu e JMenuItem

this.caixa.setForeground(Color.WHITE);
		//Adicionando Jlabel, JButton, JTextField na Janela
		super.getContentPane().add(this.lblNome);
		super.getContentPane().add(this.btnOk);
		super.getContentPane().add(this.caixa);
		//Definindo janela
		super.setBounds(100, 100, 400, 300);
		super.getContentPane().setBackground(Color.GRAY);
		super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		super.setVisible(true);
	}

}

Gerenciadores de Layout

  • Gerenciamento de layout ( Layout Management ) é o processo de determinar o tamanho e a posição dos componentes na janela gráfica do programa. É ele o responsável por determinar onde o componente ficará, como ficará, qual o comportamento a ser tomado na hora de redimensionar a tela.

Gerenciadores de Layout

  • BorderLayout
  • BoxLayout
  • FlowLayout
  • GridBagLayout
  • GridLayout

BorderLayout

import javax.swing.*;
import java.awt.*;
public class BorderLayout {

	public static void main(String[] args) {
		JFrame tela = new JFrame("Combo");
		tela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		tela.setVisible(true);
		
		JButton botao1 = new JButton("Botão 01");
		JButton botao2 = new JButton("Botão 02");
		JButton botao3 = new JButton("Botão 03");
		JButton botao4 = new JButton("Botão 04");
		JButton botao5 = new JButton("Botão 05");
		
		tela.getContentPane().add(botao1, BorderLayout.NORTH);
		tela.getContentPane().add(botao2, BorderLayout.CENTER);
		tela.getContentPane().add(botao3, BorderLayout.WEST);
		tela.getContentPane().add(botao4, BorderLayout.SOUTH);
		tela.getContentPane().add(botao5, BorderLayout.EAST);
		
		tela.pack();
		
	}

}

Eventos

Listeners

ActionListener

  • Tratase de uma classe que detecta se houve uma ação no objeto a que ela está associada (um botão, por exemplo), e
    que, dependendo da ação executada, rodará uma função qualquer.

ACTIONLISTENER

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Tela2 implements ActionListener {
	
	private JButton botao;
	public void janela(){
		JFrame frame = new JFrame();
		botao = new JButton();
		
		//REGISTRA O EVENTO
		botao.addActionListener(this);

		frame.getContentPane().add(botao);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(300,100);
		frame.setVisible(true);
	}	
	@Override
	public void actionPerformed(ActionEvent evento) {
		botao.setText("Botão foi clicado!");
		
		//ALTERA A FONTE 
		botao.setFont(new Font("SansSerif", Font.BOLD, 20));	
	}	
	public static void main(String[] args) {
		Tela2 captura = new Tela2();
		captura.janela();
	}
}

ACTIONLISTENER

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class Tela {

	public static void main(String[] args) {
		JFrame tela = new JFrame("Primeira tela");
		JButton botao = new JButton("Aperte aqui");
		tela.setBounds(100, 100, 400, 300);
		botao.setBounds(100,100,150,35);
		tela.getContentPane().setBackground(Color.RED);
		tela.getContentPane().add(botao);
		tela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		ActionListener ac = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if ("botao".equals(e.getActionCommand())) {
					JOptionPane.showMessageDialog(null, "Apertou o botão!", "Olá!",
					JOptionPane.INFORMATION_MESSAGE);
					}
			}
		};
		botao.setActionCommand("botao");
		botao.addActionListener(ac);
		tela.setLayout(null);
		tela.add(botao);
		tela.setVisible(true);

	}

}

FocusListener

  • Se parece com o ActionListener em seu modo de construção, mas serve para detectar quando o foco (ou seja, o cursor, a seleção, não o ponteiro do mouse) está sobre um objeto ou não.

FocusListener

import java.awt.Color;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class ListaFocuo {

	public static void main(String[] args) {
		final JFrame tela = new JFrame("Teste");
		final JTextField tex = new JTextField();
		final JTextField tex2 = new JTextField();
		tela.setBounds(20, 20, 800, 600);
		tex.setBounds(50, 50, 300, 35);
		tex2.setBounds(50, 150, 300, 35);
		
		FocusListener foc = new FocusListener(){
			public void focusGained (FocusEvent e){
				tex.setBackground(Color.RED);
			}
			public void focusLost (FocusEvent e){
				tex.setBackground(Color.BLUE);
			}
		};
		tex.addFocusListener(foc);
		tela.setLayout(null);
		tela.add(tex);
		tela.add(tex2);
		tela.setVisible(true);

	}

}

Java Com Banco de Dados

jdbc

Por que usar Banco de Dados

  • Muitos sistemas precisam manter as informações com as quais eles trabalham.
  • Para que esses dados sejam mantidos para sempre, esses sistemas geralmente guardam essas informações em um banco de dados.

Banco de Dados Relacionais

  •  Modela os dados de uma forma que eles sejam percebidos pelo usuário como tabelas, ou mais formalmente relações

Banco de Dados não Relacionais

  • Não exigi esquemas de tabela fixa e, geralmente, não suportam instruções e operações de junção SQL

Persistência

  • É o processo de armazenamento de dados no banco.
  • A biblioteca de persistência em banco de dados relacionais do Java é chamada JDBC, e também existem diversas ferramentas do tipo ORM (Object Relational Mapping) que facilitam bastante o uso do JDBC.

Conexão com Java

  • JDBC é um conjunto de classes e interfaces (API) escritas em Java que possibilitam o envio de instruções SQL para qualquer banco de dados relacional.

 

  • http://dev.mysql.com/downloads/connector/j/

Curso Java Com Banco de Dados

By pakato

Curso Java Com Banco de Dados

Curso Java com Banco de Dados realizado na UTD.

  • 162