Curso Java - Básico - Introdução a Linguagem Java

O que é Java?

  • Linguagem de programação orientada a objetos.
  • Definida pela Sun Microsystems.

Características da Linguagem

  • Orientada a Objetos
    • Java é pura, totalmente OO, e possui grande diversidade de bibliotecas de classes disponíveis;
    • Simples
      • Java é mais simples que outras linguagens OO, como C++, e possui facilidades como Garbage Collector;
    • Distribuída
      • Suporta aplicações em rede e objetos distribuídos. Java também suporta aplicações multi-tarefa, podendo executar diversas threads simultaneamente;

Características da Linguagem 2

  • Independente de Plataforma
    • Java é interpretada, podendo rodar em qualquer plataforma;
  • Robusta
    • Java suporta o tratamento de exceções. O interpretador não permite que uma aplicação paralise o sistema;
  • Performance
    • Mais rápida que linguagens script, porém mais lenta que as linguagens compiladas.

Programas Java

  • Applets
    • São programas Java que seguem um padrão específico
      • Este padrão permite que o programa execute em um browser
  • Aplicações Stand-alone
    • Similares a programas convencionais
    • Necessitam do interpretador Java para executarem

Portabilidade

  • Aplicações Java são facilmente portáveis.
  • Programa Java pode ser executado em diversas plataformas.
  • Programa compilado e interpretado.
  • Compilação transforma o programa em bytecodes.
  • Bytecodes são interpretados pela Java Virtual Machine (VM).
    • Browser Web, no caso de applets.
      • Interpretador stand-alone, no caso de aplicações.
    • Existem Java VM’s para diversas plataformas.

Java é feito com Classes

  • Todo o comportamento é programado em classes e invocado diretamente na classe ou nas suas instâncias.
    • A especificação de uma classe é feita declarando seus membros: atributos e métodos.

    ./images/classes.jpg

Declaração de Classes

  • Contém declarações de variáveis, que determinam o estado da classe e de suas instâncias,
    • Os métodos, que irão definir o comportamento das suas instâncias
    • E os construtores que inicializam novos objetos.

    ./images/declaracaoclasses.jpg

Membros: atributos e métodos

  • Atributos constituem a área de dados de uma classe.
  • Um método é formado por um nome, argumentos, tipo de retorno e corpo:

./images/declaracaometodos.jpg

  • O nome do método e sua lista de argumentos o definem unicamente e a isso se dá o nome de assinatura.

Declarando atributos

  • Atributos determinam as informações mantidas pelo objeto, em outras palavras, determinam o estado do objeto.
    • tipoDoAtributo nomeDoAtributo;
  • O tipo do atributo pode ser um tipo primitivo ou uma classe.

./images/declaracaoatributos.jpg

  • Visibilidade
    • friendly
    • private
    • public
    • protected

Escopo e Acesso de Atributos

  • É possível declarar variáveis locais a métodos.
  • O escopo da variável local é determinado pelo bloco de comandos onde ela foi declarada.
  • Um bloco de comandos é uma lista de comandos delimitada por chaves .

Modificadores de Atributos

  • final
  • transient
  • volatile
  • static
  • synchronized

Referencias para objetos

  • Um atributo pode ser do tipo de qualquer classe conhecida. Neste caso, ele é uma referência para um objeto:
    • MinhaClasse meuAtributo;
  • Para ser acessado esse atributo precisa ser inicializado.
  • Para tal, usa-se uma função especial chamada construtor:
    • meuAtributo = new MinhaClasse( );
  • Um objeto pode ser constituído de outros objetos.

Declaração de Método

  • Métodos determinam as mensagens que o objeto pode receber.

./images/declaracaometodos.jpg

  • O tipo de retorno é o tipo do valor obtido da execução do método.
  • A lista de argumentos tem os tipos e nomes correspondentes à informação necessária a execução do método.

Visibilidade e Acesso de Métodos

  • friendly
  • private
  • protected
  • public

Modificadores de Métodos

  • final
  • native
  • static
    • synchronized
  • abstract

Overloading e Redefinição

  • Em Java, o que identifica unicamente o método é o nome e a lista de argumentos.
  • A técnica de definir métodos de mesmo nome, com listas de argumentos diferentes é chamado de "method overloading".
  • Quando uma classe B define um método usando o mesmo nome, tipo de retorno e argumentos de um método de uma classe ancestral A, este método redefine o método da classe ancestral.

Métodos Construtores

  • A inicialização de uma classe é feita através da chamada de um método especial chamado de construtor:

./images/metodosconstrutores.jpg

  • Como o objeto é criado: new UmaClasse();
    • O espaço de memória é reservado e o construtor é chamado.
    • O nome do construtor deve ser exatamente igual ao nome da Classe.

Classes e Herança

  • Herança
    • É uma forma de se obter organização na elaboração de sistemas evitando redundância de código através do reaproveitamento do mesmo.
      • Uma subclasse herda o estado e comportamento de todas as suas classes antecessoras. O termo superclass se refere a classe que é antecessor direto de uma outra classe.
    • Java possui uma grande quantidade de classes padrão que fazem parte do próprio sistema e que estão organizadas em forma de árvores de classes e subclasses.
      • A raiz dessa árvore é a classe Object.

Classe Abstrata

  • Classes Abstrata não podem ser instanciadas.

./images/classesabstratas-1.jpg

./images/classesabstratas-2.jpg

./images/classesabstratas-3.jpg

Interface

  • A declaração da interface é muito parecida com a declaração de classe, apenas trocando a palavra reservada class por interface.

./images/interface.jpg

Definindo Contrato com Interfaces

  • Membros de Interface
    • Os membros de uma interface são compostos por métodos abstratos e constantes (static final variables). A declaração de uma interface cria um tipo de dado
    • Interfaces não podem ser instanciadas, pois elas se comportam como classes abstratas.
    • As interfaces fornecem apenas definições de método abstratas, é preciso implementar esses métodos nas classes que implementam essas interfaces, usando a mesma assinatura do método definido na interface.

Usando Interfaces

  • Para usar uma interface, inclui-se a palavra reservada "implements" como parte da declaração da classe que irá implementar essa interface. Veja o exemplo:

./images/usandointerfaces.jpg

Abstração

  • Abstração significa supressão de detalhes, ponto de vista elevado.
  • A abstração OO permite modelar elementos no espaço de problema.
    • Um tipo abstrato define a interface do objeto desconsiderando a implementação.
  • Uma abstração se concentra no serviço que o objeto presta, não como executá-lo.

Encapsulamento

  • Suprime o acesso externo aos detalhes internos do objeto.
  • Os procedimentos OO (métodos) tem acesso garantido aos dados do objeto.
  • Observe no código que os atributos do objeto estão no escopo do método.

./images/encapsulamento.jpg

Polimorfismo

  • O polimorfismo combina abstração, encapsulamento e herança para uma generalização comportamental.
  • O tipo de uma classe derivada é compatível com o tipo da classe de onde deriva, e uma pode ser usada no lugar da outra.

Associação

  • Um programa OO é um conjunto de objetos relacionados entre si.
  • Objetos se associam para trocar mensagens, distribuindo entre eles as tarefas apropriadas a cada um.
  • Em termos práticos, a associação é feita através da obtenção de uma referência válida para o outro objeto.
  • Uma associação é obtida atribuindo-se uma instância a essa variável de referência ou passando-a como um parâmetro.

Radiciação Singular x Múltipla

  • O processo de derivação vai criando árvores de classes.
  • Na raiz da árvore fica a classe da qual todas as outras derivam.
  • Em linguagens como o C++ não existe uma classe única da qual todas as outras derivam ? várias raízes.
  • O Java é uma linguagem de raíz singular. Todos as árvores de classes e interfaces convergem para uma única classe de nome Object.
  • A classe Object reúne um conjunto de métodos muito importantes para a flexibilidade da linguagem.
    • Propriedades como serialização, segurança, sincronização e reflexão são ortogonais na linguagem Java, i.e., se aplicam a todos os objetos.

java.lang.Object

  • Raiz da hierarquia de classes da API Java
  • Toda classe estende Object, direta ou indiretamente
  • Classes que não declaram estender ninguém, estendem Object diretamente.

./images/java.lang.jpg

  • Classes que declaram estender outra classe, herdam de Object pela outra classe cuja hierarquia começa em Object.
  • Todos os métodos de Object estão automaticamente disponíveis para qualquer objeto.
    • Porém, as implementações são default, e geralmente inúteis para objetos específicos.

Herança Singular x Múltipla

  • Só existe herança plena
  • Seria interessante poder herdar de mais de uma classe.
  • Uma classe PoupancaCorrente funcionaria como uma conta corrente com rendimentos de poupança.
  • As classes Poupança e ContaCorrente possuem ambas atributo saldo. Qual dos dois saldos seria usado? Como ficaria o saldo não utilizado?

Herança Singular x Múltipla 2

  • Linguagens que permitem herança múltipla como C++ definem um conjunto de regras complicadas para resolver isso, como herança virtual.
  • Java só permite herança múltipla de interfaces.
  • Como interfaces não tem atributos ou implementações, o problema de herança múltipla fica minimizado.
  • O reuso, neste caso, fica restrito a uma única classe herdada.

Exercicio

  • Implementar o sistema de cadastramento de cliente modelado na aula anterior.