You are on page 1of 127

Introduo a Programao Orientada a Objetos com JAVA Anderson Belgamo

Contedo do Curso
Fundamentos da Orientao a Objetos Introduo a Linguagem JAVA JAVA e Orientao a Objetos Erros, Excees, Fluxos de Entrada e Sada Introduo a Aplicaes Grficas em JAVA
AWT SWING

JAVA para quem conhece C


Qual a diferena entre JAVA e C?
Resposta: O paradigma de programao!!!

Estruturado versus Orientado a Objetos


Caractersticas comuns:
Seqncia Seleo Repetio

JAVA para quem conhece C


Estruturas
Seleo

SWITCH/CASE
switch(variavel){ case valor1: instrues; break; case valor2: instrues break; default: instrues; };

IF/ELSE
if(condio){ instrues } else{ instrues }

JAVA para quem conhece C


Estruturas
Alm de utilizarmos o if/else, podemos fazer uso do operador ? para testar se uma condio ser satisfeita ou no. Sintaxe: (condio a ser avaliada) ? ValorSeVerdadeira:ValorSeFalsa; Exemplo: int a = 2; int b = 3; int c = 4; a = (b>c)? b:c;
Nesta instruo est sendo testado se b>c. Caso a condio b>c for verdadeira, ento a receber b Caso a condio b>c for falsa, ento a receber c. Esta instruo equivale :

Seleo

if(b>c){ a =b; } else{ a =c; }

JAVA para quem conhece C


Estruturas
Repetio

WHILE
while(condio) { instrues; }

DO WHILE
do {

Instrues; } while(condio);

FOR
for(incializao;condio; incremento) { instrues; }

JAVA para quem conhece C


Estruturas
Repetio
for(int a = 0; a<10; a++) { System.out.println(a); } int a=0; while (a<10) { System.out.println(a); a++; } int a = 0; do { System.out.println(a); a++; } while(a<10);

Tecnologia JAVA
O nome "Java" usado para referir-se a Uma linguagem de programao orientada a objetos Uma coleo de APIs (classes, componentes, frameworks) para o desenvolvimento de aplicaes multiplataforma Um ambiente de execuo presente em browsers, mainframes, SOs, celulares, palmtops, cartes inteligentes, eletrodomsticos Java foi lanada pela Sun em 1995. Trs grandes revises Java Development Kit (JDK) 1.0/1.0.2 Java Development Kit (JDK) 1.1/1.1.8 Java 2 Platform (Java 2 SDK e JRE 1.2, 1.3, 1.4, 1.5) A evoluo da linguagem controlada pelo Java Community Process (www.jcp.org) formado pela Sun e usurios Java Ambientes de execuo e desenvolvimento so fornecidos por fabricantes de hardware e software (MacOS, Linux, etc.)

Histria da Linguagem Java


Em 1991, SUN Microsytems financia o projeto Green Criao de dispositivos eletrnicos inteligentes James Gosling cria uma linguagem orientada a objetos e que executasse em diferente plataformas e a denomina de Oak (carvalho). Desenvolvimento do * 7, controle remoto com uma interface grfica touchscreen. J existia linguagem com nome Oak. O nome Java vem de origem do caf apreciado pelos autores. Em 1993, a popularidade da World Wide Web aumenta. Interesse em desenvolver aplicativos Web baseado em Java Em 1995, em uma conferencia Java formalmente apresentada e desperta interesse pelo seu uso em criar pginas Web com contedo dinmico.

Principais Caractersticas da Linguagem Java


Orientada a Objetos Portvel Independncia de plataforma - " write once run anywhere! " Vasto Recursos de Rede Possui extensa biblioteca de rotinas que facilitam a cooperao com protocolosTCP/IP, e outros. Segura Sintaxe similar a Linguagem C/C++ Coleta automtica de lixo (Garbage Collector)

Linguagem Compilada e Interpretada


Linguagem Compilada Compilador traduz o cdigo fonte uma vez para o cdigo executvel. Linguagem Interpretada O interpretador, durante toda a execuo do programa, faz a traduo simultnea linha a linha.

JAVA compilado ou interpretado?

JAVA: Compilando e interpretando


Inst 001

Cdigo Fonte

Compilador

Bytecode

Interpretador

Inst 002

.... .java .class Instrues de mquina

Ambiente JAVA
Editor Compilador disco disco
Memria Principal

Programa criado no editor e armazenado no disco

Compilador cria bytecodes e armazena no disco

Class Loader
disco
Memria Principal

Class Loader coloca bytecodes na memria

Verificador de ByteCode
Memria Principal

Verificador de bytecode confirma que tudo bytecodes esto vlidos e no violam restries de segurana do Java
Interpretador l bytecodes e os traduz em linguagem que o computador entende

Interpretador

????Ambiente JAVA ???? PORTABILIDADE


Editor Compilador disco disco
Memria Principal

Programa criado no editor e armazenado no disco

Compilador cria bytecodes e armazena no disco

Class Loader
disco
Memria Principal

Class Loader coloca bytecodes na memria

Verificador de ByteCode
Memria Principal

Verificador de bytecode confirma que tudo bytecodes esto vlidos e no violam restries de segurana do Java
Interpretador l bytecodes e os traduz em linguagem que o computador entende

Interpretador

????Ambiente JAVA ???? PORTABILIDADE


Editor Compilador disco disco
Memria Principal

Programa criado no editor e armazenado no disco

Compilador cria bytecodes e armazena no disco

Class Loader
disco
Memria Principal

Class Loader coloca bytecodes na memria

Verificador de ByteCode
Memria Principal

Verificador de bytecode confirma que tudo bytecodes esto vlidos e no violam restries de segurana do Java
Interpretador l bytecodes e os traduz em linguagem que o computador entende

Interpretador

????Ambiente JAVA ???? PORTABILIDADE


Editor Compilador disco disco
Memria Principal

Programa criado no editor e armazenado no disco

Compilador cria bytecodes e armazena no disco

Class Loader
disco
Memria Principal

BYTECODE
Verificador de bytecode confirma que tudo bytecodes esto vlidos e no violam restries de segurana do Java
Interpretador l bytecodes e os traduz em linguagem que o computador entende

Class Loader coloca bytecodes na memria

Verificador de ByteCode
Memria Principal

Interpretador

Plataforma de Desenvolvimento JAVA


J2SE
Java 2 Standard Edition
ferramentas e APIs essenciais para qualquer aplicao Java

J2EE
Java 2 Enterprise Edition
ferramentas e APIs para o desenvolvimento de aplicaes distribudas

J2ME
Java 2 Micro Edition
ferramentas e APIs para o desenvolvimento de aplicaes para aparelhos portteis

JAVA 2 Standard Development Kit J2SDK Composto por:


Ferramentas para desenvolvimento: Compilador (javac.exe), Debugger (jdb.exe), Gerador de documentao (javadoc.exe), Ferramenta para execuo (java.exe)
Ambiente de execuo Java Runtime Environment APIs Application Programming Interface Conjunto de classes padronizadas Java que oferecem funes especficas e podem ser utlizadas pelo desenvolvedor. Cdigo-fonte das classes Demonstraes de uso das APIs O download do JDK pode ser feito a partir de: http://java.sun.com

Plataforma J2SE

Algumas IDEs
O JDK no uma ambiente com interfaces grficas.
Para habilitar o ambiente via linha de comando preciso colocar o caminho $JAVA_HOME/bin no PATH do sistema

Para facilitar o desenvolvimento, pode-se contar com algumas IDEs (Integrated Development Environment):
NetBeans (www.netbeans.org) Eclipse (www.eclipse.org) JBuilder (www.borland.com) JEdit (www.jedit.org) JDeveloper(www.oracle.com)

Ambiente de Execuo
J2SDK
Para habilitar o ambiente via linha de comando preciso colocar o caminho $JAVA_HOME/bin no PATH do sistema.

Java Runtime Environment (JRE)


Necessrio para executar aplicaes JAVA Parte do J2SDK e das principais distribuies Linux, MacOS X, Solaris, Windows 98/ME/2000.

Varivel JAVA_HOME (opcional: usada por vrios frameworks)


Defina com o local de instalao do JAVA no seu sistema Exemplo: set JAVA_HOME=c:\j2sdk1.4.0

Mquina Virtual JAVA (JVM)


"Mquina imaginria implementada como uma aplicao de software em uma mquina real" [JVMS] A forma de execuo de uma aplicao depende ...
... da origem do cdigo a ser executado (remoto ou local) ... da forma como foi implementada a JVM pelo fabricante

(usando tecnologia JIT, HotSpot, etc.)

Mquina Virtual JAVA (JVM)


JAVA
ByteCode Class Loader
Classe Remota?

sim

Bytecode Verifier

no

Tradutor JIT: Just-In-Time Compiler. Gera cdigo nativo a partir de bytecodes para maior desempenho

Tempo de Execuo Tradutor JIT


Cdigo Nativo

Interpretador

HARDWARE

Class Loader e CLASSPATH


Primeira tarefa executada pela JVM: carregamento das classes necessrias para rodar a aplicao. O Class Loader
1. Carrega primeiro as classes nativas do JRE (APIs) 2. Depois carrega extenses do JRE: JARs em $JAVA_HOME/jre/lib/ext e classes em $JAVA_HOME/jre/lib/classes 3. Carrega classes do sistema local (a ordem dos caminhos no CLASSPATH define a precedncia) 4. Por ltimo, carrega possveis classes remotas

Class Loader e CLASSPATH


CLASSPATH: varivel de ambiente local que contm todos os caminhos locais onde o Class Loader pode localizar classes
A CLASSPATH lida depois, logo, suas classes nunca substituem as classes do JRE (no possvel tirar classes JRE do CLASSPATH) Classes remotas so mantidas em rea sujeita verificao CLASSPATH pode ser redefinida atravs de parmetros durante a execuo do comando java

Bytecode Verifier
Etapa que antecede a execuo do cdigo em classes carregadas atravs da rede
Class Loader distingue classes locais (seguras) de classes remotas (potencialmente inseguras)

Verificao garante
Aderncia ao formato de arquivo especificado [JVMS] No-violao de polticas de acesso estabelecidas pela aplicao No-violao da integridade do sistema Ausncia de estouros de pilha Tipos de parmetros corretamente especificados e ausncia de converses ilegais de tipos

Coleta de Lixo
Memria alocada em Java no liberada pelo programador
Ou seja, objetos criados no so destrudos pelo programador

A criao de objetos em Java consiste de


1. Alocar memria no heap para armazenar os dados do objeto 2. Inicializar o objeto (via construtor) 3. Atribuir endereo de memria a uma varivel (referncia)

Mais de uma referncia pode apontar para o mesmo objeto

Coleta de Lixo
Mensagem m,n,p;
m = new Mensagem("A"); n = m; p = new Mensagem("B");

heap
m

pilha
n
p

"A"
GC

objetos

"B"
processo interno (thread) do garbage collector

Coleta de Lixo
Quando um objeto no tem mais referncias apontando para ele, seus dados no mais podem ser usados, e a memria deve ser liberada. O coletor de lixo ir liberar a memria na primeira heap oportunidade
n = null; p = new Mensagem("C");

pilha
m

"A"
GC

n
p

"B"
objeto sem referncias candidato remoo pelo GC

O que Java no faz


Java no suporta herana mltipla de implementao
Herana mltipla tem vantagens porm aumenta a complexidade Java oferece uma soluo que preserva as principais vantagens da herana mltipla e evita os problemas

Java no suporta aritmtica de ponteiros


Com ponteiros, em vez de copiar uma informao de um lugar para outro, copia-se apenas o seu endereo Em linguagens como C, o programador pode manipular o endereo (que dependente de plataforma) diretamente Isto aumenta a complexidade e diminui a portabilidade

Compilando e Executando
Via linha de comando:
Compilao:
javac NomePrograma.java

Execuo:
java NomePrograma

Identificando Erros
Durante o desenvolvimento, erros podem ocorrer em dois domnios: tempo de compilao e tempo de execuo Erros ocorridos durante a fase de compilao ocorrem quando se
executa o javac, e so fceis de corrigir. H dois tipos:
Erros de processamento do arquivo (parsing): ponto-e-vrgula faltando, parnteses, aspas, chaves ou colchetes descasados. Identifica apenas o arquivo e a linha onde o erro pode ter iniciado. Um erro causa vrios outros e nem sempre a mensagem precisa. Erros de compilao do cdigo, realizada depois do parsing: alm da linha e do arquivo, identificam a classe e mtodo. Geralmente as mensagens so bastante elucidativas.

Como compreender o erro:


LEIA a mensagem e localize a linha onde o erro foi detectado Corrija os erros na ordem em que eles aparecerem Sempre recompile depois de corrigir cada erro de parsing (ponto e vrgula, etc.) j que eles causam mensagens de erro falsas.

Erros de Compilao Comuns


Cannot resolve symbol: compilador incapaz de localizar uma definio do smbolo encontrado. Causas comuns: Erro de sintaxe no nome de varivel ou mtodo Varivel/mtodo no declarado Classe usada no possui varivel, mtodo ou construtor Nmero ou tipo de argumentos do mtodo ou construtor incorretos Definio de classe no encontrada no CLASSPATH Class Hello is public, should be declared in a file named Hello.java: nome do arquivo tem que ser igual ao nome da classe pblica*: Nome tem que ser Hello.java, literalmente. O nome hello.java causa este erro porque o "h" est minsculo. Para consertar altere o nome da classe no cdigo ou no nome do arquivo para que sejam iguais.

Paradigmas de Programao
A introduo de uma nova forma de programar altera todo o desenvolvimento
Anlise, Projeto, Implementao

Surgimento do paradigma da programao estruturada

(trs construes bsicas)


Esse paradigma enfoca a decomposio funcional do

problema focando muito mais nos processos do que


nos dados
Esse desequilbrio de importncia que ocasiona problemas
diversos

Estruturado X OO
Principal diferena
Forma pela qual os dados e procedimentos intercomunicam-se

Estruturado
Os procedimentos so implementados em mdulos separados e a comunicao se d pela passagem de dados atravs desses procedimentos

OO
Dados e procedimentos fazem parte de um s mdulo (classe/objeto) Encapsula-se dados e os procedimentos que atuam sobre seus dados em um nico mdulo

Orientao a Objetos
Definio:
Uma nova maneira de pensar os problemas utilizando modelos organizados a partir de conceitos do mundo real. O componente base o objeto que combina estrutura e comportamento em uma nica entidade.

Orientao a Objetos uma metodologia de programao, assim como a procedimental, orientada eventos, etc. Tudo objeto

Conceitos da OO
Classe/Objeto
Mensagem

Encapsulamento
Herana

Polimorfismo

Classe/Objeto

Classe Pessoa

Cada objeto possui seu prprio nome, endereco, cpf e rg

Anderson

Joo

Pedro

Objetos - instncias

Encapsulamento
Com o advento da Internet e a exposio de

sistemas nessa grande rede, a segurana


tornou-se algo fundamental. Esse conceito est relacionado proteger os

dados da classe

Encapsulamento

Agrupa seus registradores internos e disponibiliza ao usurio apenas as funes necessrias. No se tem acesso ao seu Interior. uma caixa preta

Encapsulamento

Para utilizar a classe deve-se conhecer apenas a interface pblica que ela fornece.

Herana
Um mdulo (classe) pode ser quase o que queremos... Simplifica a definio de classes que so quase iguais s que j foram definidas Permite a reutilizao de definies comuns Geralmente identifica-se uma herana quando diz-se a palavra um Por exemplo:
Bicicleta um veculo Carro um veculo Caminho um veculo

Herana
Classe Pai
Bicicleta, Carro e Caminho so veculos. Sendo assim, eles possuem seu comportamento (atributos + mtodos) especfico mais o comportamento herdado. Esse tipo de relacionamento entre classes tambm conhecido como generalizao/especializao. Pois, analisando-se as classes filhas pode-se generalizar o comportamento na Pai. Do mesmo modo analisando-se a classe Pai pode-se especializar classes filhas.

Especializao

Generalizao

Classes Filhas

Mensagens
Objetos se comunicam por meio de mensagens

Um mensagem um sinal enviado um objeto requisitando a execuo de um servio atravs da execuo de uma operao
Essa operao executada dentro do objeto que recebe a mensagem com base nos dados de seus alcance na hierarquia de classes Sender e receiver

As mais conhecidas so: Agregao e Associao

Mensagens

Cala.getPreco()

enviada uma Mensagem ao Objeto cala Pedindo o seu preo.

Ex. Um objeto Joo necessita atualizar seu atributo divida. Para isso h necessidade de saber o preo do produto que o Joo comprou. Sendo assim, o mtodo getPreco() da classe Produto deve ser invocado (mensagem) para obter o preo do produto.

Todo-Parte (Agregao)
Esse conceitos permite a construo de uma classe agregada a partir de outras classes componentes. Usa-se dizer que um objeto da classe Agregada (Todo) tem objetos da classe componente (Parte) Por exemplo: Pode-se imaginar esse tipo de relacionamento como uma casa, que composta por portas, janelas, paredes, etc. A pergunta a ser feita para identificar um relacionamento de agregao : parte de ?

Todo-Parte (Agregao)
TODO

PARTES

Todo-Parte (Agregao)

Dessa forma representa-se que um objeto Casa composto pelos objetos Janela, Porta e Parede

Associao
Usada para agrupar objetos que ocorrem sob algumas circunstncias similares ou um ponto especfico no tempo Associao um relacionamento estrutural que ocorre entre classes; Esse relacionamento existe porque um objeto necessita de outros para cumprir certas responsabilidades;

Associao

Cliente

Estudante

Faz

Teste

Sala

Faz

Pedido

Associao - Exemplo

Uma compra um evento que relaciona uma pessoa e um produto e que ocorre em algum ponto do tempo

Polimorfismo
Refere-se diferentes formas de um objeto

Polimorfismo refere-se a capacidade de uma mesma operao realizar funes diferentes dependendo do objeto que a recebe e dos parmetros que lhes so passados.
Por exemplo, pode-se ter em uma classe uma operao denominada calcularDivida(). Caso essa operao seja invocada sem parmetros ela realizar algo, caso seja invocada passando um determinado parmetro realizar algo diferente.

Polimorfismo

Trs mtodos com o mesmo nome, porm, so diferenciados devido a quantidade de parmetros passados

Polimorfismo

Dependendo de quem invoca a msg area, ela ir calcular a rea do objeto correto.

JAVA versus C++


Principais diferenas entre Java e C++ No lida com ponteiros Interpretada Memria no precisa ser gerenciada quem faz o intrprete Java o que fato e o que promessa? Independncia das mquinas uma nova plataforma mais segurana nas operaes pela internet Mais produtividade na Programao

Estrutura de um programa JAVA


O cdigo fonte de um programa Java consiste de uma ou mais unidades de compilao. Cada unidade de compilao pode conter somente o seguinte (alm dos espaos em branco e comentrios ):
Declarao

de pacote (opcional) Declaraes de importao (opcional) Declarao de Classe Pblica Declarao de Classes de Pacotes Particulares (opcional)

Questes Lxicas
Comentrios Identificadores Palavras-Chave Reservadas Literais Literais Inteiros Literais de Ponto Flutuante Literais Booleanos Literais de Caracteres Separadores

Durante a compilao, os caracteres no cdigo Java so reduzidos a uma srie de tokens. O compilador Java reconhece cinco tipos de tokens : identificadores, palavras-chave, literais, operadores e separadores. Comentrios e espaos em branco, como tabulao , so usados para separar os tokens.

Questes Lxicas - continuao


Comentrios // texto Todos os caracteres de // para o final da linha so ignorados. /* texto */ Todos os caracteres de /* para */ so ignorados. /** texto * @ consulte java.appplet.Applet */ Comentrio de documentao : uma forma especial de comentrio usado pela ferramenta javadoc. Deve ser usado antes da classe pblica, do mtodo e das declaraes de variveis. O javadoc reconhece diversas variveis especiais, as quais so denotadas por @ (sinal de arroba) dentro desses comentrios. Identificadores Devem comear com uma letra, sublinhado (_) ou sinal de cifro ($). Java sensvel a maisculas e minsculas.

Questes Lxicas - continuao


Palavras-Chave Reservadas Usadas para identificar tipos, modificadores e mecanismo de controle de fluxo.
abstract boolean break byte byvalue* case catch char class const* continue default do double else extends false final finally float for new switch goto* null synchronized if package this implements private threadsafe import protected throw instanceof public transient int return true interface short try long static void native super while * Palavras reservadas mas no usadas

Literais Um valor constante em Java criado com o uso de uma representao literal do valor. Os inteiros, nmeros de ponto flutuante, valores booleanos, caracteres e strings podem ser colocados em qualquer lugar no cdigo fonte. Um literal representa um valor de determinado tipo, enquanto o tipo em si descreve como aquele valor se comporta e como ele armazenado.

Tipos
Declarao de variveis tipo identificador [ = valor] [, identificador [= valor ... ]; Escopo: Blocos de declarao composta so demarcados por {}. As variveis so vlidas a partir do ponto onde so declaradas at o final da declarao composta. Cada declarao composta pode conter conjunto de declaraes de variveis locais. No permitido declarar duas variveis distintas com o mesmo nome, como no C++. class Escopo{ public static void main(String args[ ]) () { int var = 10; { // cria um novo escopo int var = 20; //Erro de tempo de compilao... } } }

Tipos
Tipos Simples byte short int long float double char boolean Tipos Compostos Array Largura 8 16 32 64 32 64 16 Faixa -128 a 127 -32768 a 32767 -2.147.483.648 a 2.147.483.647 -9.223.372.036.854.775.808... 9.223.372.036.854.775.807 3,4e - 308..1,7e + 308 1,7e - 038..3,4e + 038 0 a 65536 true ou false

Expresses
Operadores Os operadores, da precedncia mais alta a mais baixa so:
. [] ++ -* / + >> >>> > >= == != & ^ | && || ?: = op= () ! % << < ~ instanceof

<=

Operadores
Operador + * / % + += -= *=

Aritmticos

/=
%=

Ao Adio Subtrao e menos unrio Multiplicao Diviso Mdulo (resto da diviso) Incremento Atribuio Aditiva Atribuio Subtrativa Atribuio de Multiplicao Atribuio de Diviso Atribuio de Mdulo (resto de diviso)

Relacionais
Operador == != > < >= <= Ao Igual a Diferente Maior do que Menor do que Maior ou igual a Menor ou igual a

Operadores
Lgico
Operador & | ^ || && ! &= |= ^= == != ?: Ao AND lgico Lgico OR Lgico XOR (OR exclusivo) OR dinmico AND dinmico NOT unrio lgico Atribuio de AND Atribuio de OR Atribuio de XOR Igual a Diferente de if-then-else ternrio

Classe
A forma geral de uma definio de classe aparece a seguir: class nome-classe extends nome-superclasse { tipo var-instancia1; tipo var-instancia2; tipo var-instanciaN; tipo nome-mtodo1 (lista-de-parametros) { corpo do mtodo;
}

tipo nome-mtodo2 (lista-de-parametros) { corpo do mtodo;


}

tipo nome-mtodoN (lista-de-parametros) { corpo do mtodo;


} }

Uma outra maneira de representar uma classe da seguinte forma: class nome-classe { }

Estrutura de um programa JAVA


Um nmero de classes

H mo mnimo uma classe em cada programa JAVA Tipicamente, coloca-se o cdigo do programa para cada classe em um arquivo separado Arquivo fonte JAVA deve ter extenso .java
Biblioteca de Classes = coleo de classes java.lang (apiam as caractersticas bsicas da linguagem) java.io (classes para operaes de E/S de dados java.swing (classes GUI)

Biblioteca de Classes
java.lang raiz java

lang Classe 1 Classe n-1 Classe n

Biblioteca de Classes
java.lang raiz java Programa JAVA

import java.lang.*;
import java.lang.Classe;

lang Classe 1 Classe n-1 Classe n

Aplicao JAVA
public class PrimeiroPrograma
{ public static void main(String args[]) { System.out.println(Primeiro Programa);

}
}

Aplicao JAVA
public class PrimeiroPrograma
{ public static void main(String args[]) { System.out.println(Primeiro Programa); Definio do mtodo main

Definio da Classe

}
}

Aplicao JAVA
public class PrimeiroPrograma
{ public static void main(String args[]) { System.out.println(Primeiro Programa); Definio do mtodo main

Definio da Classe

}
} Globalmente acessvel

Aplicao JAVA
public class PrimeiroPrograma
{ public static void main(String args[]) { System.out.println(Primeiro Programa); Definio do mtodo main

Definio da Classe

}
} Globalmente acessvel Ainda acessvel embora no h objeto da classe

Aplicao JAVA
public class PrimeiroPrograma
{ public static void main(String args[]) { System.out.println(Primeiro Programa); Definio do mtodo main

Definio da Classe

}
} Globalmente acessvel No retorna valor Ainda acessvel embora no h objeto da classe

Aplicao JAVA
public class PrimeiroPrograma
{ public static void main(String args[]) { System.out.println(Primeiro Programa); Parmetros necessrios No retorna valor Ainda acessvel embora no h objeto da classe Definio do mtodo main

Definio da Classe

}
} Globalmente acessvel

Exerccio de Fixao
Faa um programa em Java para imprimir o seu respectivo nome e RA Exemplo: nome: Anderson ra: 123456 Faa um programa que de acordo com um nmero inteiro, imprima se ele par ou mpar.

Faa um programa que leia um nmero e imprima o nome do ms correspondente.

Definindo Classes
class Esfera

{
static final double PI = 3.14; static int count = 0;

double raio; double centroX; double centroY;

double centroZ;
}

Definindo Classes
class Esfera

{
static final double PI = 3.14; static int count = 0; varivel de classe

double raio; double centroX; double centroY;

double centroZ;
}

Definindo Classes
class Esfera

{
static final double PI = 3.14; static int count = 0; varivel com valor fixo

double raio; double centroX; double centroY;

double centroZ;
}

Definindo Classes
class Esfera

{
static final double PI = 3.14; static int count = 0;

double raio; double centroX; double centroY; Variveis de Instncia

double centroZ;
}

Definindo Mtodos - Exemplo


public static void main (String args[])

{
x = obj.media(3.0, 5.0); } double media (double valor1, double valor2)

{
double resultado = (valor1 + valor2)/2.0; return resultado; }

Definindo Mtodos - Exemplo


public static void main (String args[])

{
x = obj.media(3.0, 5.0); } double media (double valor, double valor2) 1) Qual valor de x?

{
double resultado = (valor1 + valor2)/2.0; return resultado; }

Definindo Mtodos - Exemplo


public static void main (String args[])

{
x = obj.media(3.0, 5.0); } double media (double valor1, double valor2) { double resultado = (valor1 + valor2)/2.0; return resultado; } 2) Qual valor de valor1 e valor2? 1) Qual valor de x?

Definindo Mtodos - Exemplo


public static void main (String args[])

{
x = obj.media(3.0, 5.0); } double media (double valor1, double valor2) { double resultado = (valor1 + valor2)/2.0; return resultado; } 3) Qual valor de resultado? 2) Qual valor de valor1 e valor2? 1) Qual valor de x?

Definindo Mtodos - Exemplo


public static void main (String args[])

{
x = obj.media(3.0, 5.0); } double media (double valor1, double valor2) { double resultado = (valor1 + valor2)/2.0; return resultado; } 3) Qual valor de resultado? 2) Qual valor de valor1 e valor2? 1) Qual valor de x? 4) Qual valor de x?

Definindo Mtodos - Exemplo


public static void main (String args[])

{
x = obj.media(3.0, 5.0); } 1) Qual valor de x? 4) Qual valor de x?

5) Qual valor de resultado? 2) Qual valor de double media (double valor1, double valor2) valor1 e valor2? {
double resultado = (valor1 + valor2)/2.0; return resultado; } 3) Qual valor de resultado?

Definindo Mtodos - Exemplo


public static void main (String args[])

{
x = obj.media(3.0, 5.0); } 1) Qual valor de x? 4) Qual valor de x?

5) Qual valor de resultado? 2) Qual valor de double media (double valor1, double valor2) valor1 e valor2? {

Como os valores dos double resultado = (valor1 + valor2)/2.0;

return resultado; argumentos }

so passados?

3) Qual valor de resultado?

Definindo Mtodos de Classe


class Esfera

{
//Aqui deve ser inserido o cdigo j mostrado static int getCount() { return count; Por que esse mtodo esttico?

}
}

Definindo Mtodos de Membros da Classe


class Esfera

{
//Aqui deve ser inserido o cdigo j mostrado double volume() { return 4.0/3.0*PI*raio*raio*raio;

}
}

A varivel this
Cada mtodo de instncia tem uma varivel com o nome, this, a qual refere-se ao objeto corrente para qual o mtodo foi chamado. Exemplo: mtodo volume( )

Fonte: return 4.0/3.0*PI*raio*raio*raio;


Compilador: return 4.0/3.0*PI*this.raio*this.raio*this.braio;

A varivel this
Cada mtodo de instncia tem uma varivel com o nome, this, a qual refere-se ao objeto corrente para qual o mtodo foi chamado. Exemplo: mtodo volume( )

Fonte: return 4.0/3.0*PI*raio*raio*raio;


Compilador: return 4.0/3.0*PI*this.raio*this.raio*this.braio; Outro exemplo: void mudarRaio(double raio) {

this.raio = raio;
}

A varivel this
Cada mtodo de instncia tem uma varivel com o nome, this, a qual refere-se ao objeto corrente para qual o mtodo foi chamado. Exemplo: mtodo volume( )

Fonte: return 4.0/3.0*PI*raio*raio*raio;


Compilador: return 4.0/3.0*PI*this.raio*this.raio*this.braio; Outro exemplo: void mudarRaio(double raio) {

this.raio = raio;
}

Construtores
Propsito: inicializar as variveis de instncia de um objeto Caractersticas: Nunca retorna um valor No deve especificar um tipo de retorno

Sempre possui o mesmo nome da classe


Exemplo: Construtor da classe Esfera Esfera(double oRaio, double x, double y, double z) { raio = oRaio; centroX = x; centroY = y; centroZ = y; count++;

Criando objetos de uma classe


Esfera bola; //varivel declarada bola = new Esfera(10.0, 1.0, 1.0, 1.0) //esfera criada OU Esfera bola = new Esfera(10.0, 1.0, 1.0, 1.0)

Criando objetos de uma classe


Esfera bola; //varivel declarada bola = new Esfera(10.0, 1.0, 1.0, 1.0); //esfera criada OU Esfera bola = new Esfera(10.0, 1.0, 1.0, 1.0);

O que acontece com o cdigo abaixo?


Esfera bola = new Esfera(10.0, 1.0, 1.0, 1.0); Esfera minhaBola = bola;

Programa 1

Exerccio de Fixao
Um retngulo pode ser descrito pelos valores de suas dimenses como base e altura. Com os valores dessas dimenses pode ser calculada a rea. Sabendo-se disso faa: a) Uma classe que represente um retngulo, nela deve haver um mtodo para o clculo da rea. b) Uma classe de teste para ler as informaes de um retngulo e imprimir o valor de sua rea

Exerccio de Fixao
Em uma disciplina, um aluno descrito por nome, ra, e o valor de suas duas notas bimestrais. a) Faa uma classe para representar um aluno e nela implemente um mtodo para retornar se o aluno foi aprovado ou no (mdia > 7). b) Faa uma classe de teste para ler as informaes de dois alunos e imprimir a situao deles.

Exerccio de Fixao
Em uma cidade est sendo feita uma pesquisa sobre restaurantes. Para cada restaurante cadastrado o nome, o nome do dono, e o preo de 2 pratos mais vendidos. Sabendo-se disso, faa: a) Uma classe para representar o restaurante e nela inclua: Um mtodo que efetua o clculo do valor mdio de um prato. b) Faa uma classe de teste que leia as informaes de 2 restaurantes e imprima o nome do restaurante e o nome do dono do restaurante.

Exerccio de Fixao
Para cada funcionrio de um empresa so registrados o seu nome, o seu cpf e o valor total efetuado na venda durante um ms. O valor do salrio de um funcionrio de R$600 acrescido de uma comisso de 35% sobre o valor total da venda efetuada no ms. a) Faa uma classe para representar um funcionrio e nela implemente um mtodo que efetua o calculo o salrio do funcionrio. b) Faa uma classe teste que leia as informaes de um funcionrio e imprima o valor de seu salrio.

Sobrecarga de Mtodos
Exemplo: Mltiplos Construtores Esfera(double oRaio, double x, double y, double z)

{
raio = oRaio; centroX = x; } centroY = y; centroZ = y; count++;

Esfera()
{ centroX = 0; centroY = 0; centroZ = 0;

raio = 1.0; count++;


}

O que acontece com os cdigos abaixo? Sobrecarga de Mtodos


Exemplo: Mltiplos Construtores Esfera(double oRaio, double x, double y, double z)

{
raio = oRaio; centroX = x; } centroY = y; centroZ = y; count++;

Esfera(double diametro, double x, double y, double z)


{ raio = oRaio; centroY = y; count++;

centroX = x;
}

centroZ = y;

Usando Objetos
Exemplo: Classes Ponto e Linha
class Ponto{ double x, y;

class Linha {
Ponto inicio, fim; Linha(final Ponto inicio, final Ponto fim)

Ponto(double valorX, double valorY)


{ x = valorX; y = valorY; } Ponto(final Point pontoVelho) { x = pontoVelho.x; y = pontoVelho.y;

{
this.inicio = new Ponto(inicio); this.fim = new Ponto(fim); } Linha (double inicioX, double inicioY, double fimX, double fimY)

{
inicio = new Ponto(inicioX, fimX); fim = new Ponto(inicioY, fimY); } }

}
}

Usando Objetos
Exemplo: Classes Ponto e Linha
public class Geometrico{ public static void main(String args[])

{
Ponto inicio = new Ponto(0.0, 1.0); Ponto fim = new Ponto(5.0, 6.0); System.out.println(Pontos criados so + inicio e + fim);

Linha linha1 = new Linha(inicio, fim); Linha linha2 = new Linha(0.0, 3.0, 3.0, 0.0); System.out.println(Linhas criadas so + linha1 e + linha2);

}
}

Programa 2

Exerccio de Fixao
Exemplo: Cliente e Endereo

Implemente um programa em JAVA que cadastre clientes para uma loja. Utilize o diagrama de classes abaixo para entender o projeto do programa.

Herana
Possibilidade de criao de uma nova classe baseada em uma classe j definida.

public class Cachorro


{ //Membros da classe cachorro
}

class PitBull extends Cachorro


{ ///Membros da classe PitBull }

Herana
Possibilidade de criao de uma nova classe baseada em uma classe j definida.

public class Pessoa


{ Pessoa pessoa = new Pessoa();
}

class Alunos extends Pessoa


{ Alunos aluno = new Alunos() } aluno = pessoa; pessoa = aluno;

Herana
Possibilidade de criao de uma nova classe baseada em uma classe j definida.

public class Pessoa


{ Pessoa pessoa = new Pessoa();
}

class Alunos extends Pessoa


{ Alunos aluno = new Alunos() } aluno = pessoa; pessoa = aluno;

Herana

pblico protegido privado

Herana
pblico protegido privado

Herana
Exemplo: classe Animal public class Animal { private String tipo; public Animal(String oTipo) { tipo = oTipo; } }

Exemplo: classe Animal public class Cachorro extends Animal { private String nome, raca; public Cachorro(String oNome) { super(Cachorro); nome = oNome; raca = desconhecida; } public Cachorro(String oNome, String aRaca) { super(Cachorro); nome = oNome; raca = aRaca; } }

Herana

Programa 3

Exemplo: definir um mtodo na classe derivada com a mesma assinatura de um mtodo da classe base
public class Animal { public String toString() { return Isso um: + tipo; } } public class Cachorro extends Animal { public String toString() { return Nome: + nome + Raa: + raca; } }

Herana

Programa 3

Exemplo: definir um mtodo na classe derivada com a mesma assinatura de um mtodo da classe base mas ainda usando a sada da classe base
public class Animal { public String toString() { return Isso um: + tipo; } } public class Cachorro extends Animal { public String toString() { return super.toString() + Nome: + nome + Raa: + raca; } } Programa 3

Herana

Exerccio de Fixao
Exemplo: Cliente especializado em Fsico ou Jurdico Implemente um programa em JAVA que cadastre clientes para uma loja. Esse clientes podem ser do tipo fsico ou jurdico. Utilize o diagrama de classes abaixo para entender o projeto do programa.

Exerccio de Fixao
Exemplo: Cliente especializado em Fsico ou Jurdico Implemente um programa em JAVA que cadastre clientes para uma loja. Esse clientes podem ser do tipo fsico ou jurdico. Utilize o diagrama de classes abaixo para entender o projeto do programa.

Lembre-se, todo Fisico ou Juridico so Clientes. Sendo assim, qualquer mtodo que tiver um parmetro Cliente pode receber tanto um cliente Fisico quanto um Juridico.

Usando Polimorfismo
Condies para ter um polimorfismo: A chamada do mtodo para um objeto de classe derivada deve ser atravs de uma varivel do tipo da classe base. O mtodo chamado deve ser tambm um membro da classe base. A assinatura do mtodo deve ser a mesma nas classes base e derivada. O tipo de retorno do mtodo deve ser o mesmo nas classes base e derivada. Exemplo: Exemplo dos Animais

Programa 4

Mltiplos Nveis de Herana


Exemplo: Exemplo dos Animais especializando a classe Cachorro
Animal

Cachorro

Gato

Pato

Poodle

Programa 5

Classes Abstratas
Definio: uma classe na qual um ou mais mtodos so declarados, mas no definidos. Exemplo: mtodo som( ) da classe Animal

class Animal { public void som( ) { } }

abstract class Animal { public abstract void som( ); }

Classes Abstratas
Definio: uma classe na qual um ou mais mtodos so declarados, mas no definidos. Exemplo: mtodo som( ) da classe Animal

class Animal { public void som( ) { } }

abstract class Animal { public abstract void som( ); }

Poderia ser privado?

Exerccio de Fixao
Implementar o diagrama ao lado utilizando a classe abstrata Funcionrio e o mtodo abstrato calcularSalario( ).

A SuperClasse Universal
Definio: todo classe criada herda as caractersticas da classe Object. Exemplo: class Animal extends Object
Object

Object obj = new Classe1();

Classe 1

Classe 2

Se quero fazer algo especfico com o objeto da classe1, utilizo cast Classe1 c = (Classe1) obj;
Exemplo: mtodo toString()

Classe 1.1

Classe 1.2

Usando o Modificador final


final pode ser aplicado para um mtodo ou para uma classe. mtodo: no pode ser redefinido. classe: no pode ter subclasses derivada dela.

Uma classe abstrata pode ser declarada como final?

Interfaces
Definio: uma coleo de constantes e mtodos abstratos. Como utilizar: implementando a interface em uma classe. Propsito: as interfaces so geralmente utilizadas para duas coisas: 1. Uma alternativa para falta de herana mltipla 2. Restringir o nmero de mtodos que uma classe pode invocar

Interfaces
Alternativa para Herana Mltipla

Interfaces
Restringir acesso

Sistema Atual

Interfaces
Restringir acesso Com interface

Interface que restringe a visibilidade da classe Departamento sobre a classe Funcionrio.

Interfaces
Declarao:

public interface IFuncDepto { public int calcularSalario(int diasUteis); }


Implementando:

public class Funcionario implements IFuncDepto { ... public abstract int calcularSalario(int diasUteis); } Veja Exemplo dos Animais

Exerccio de Fixao

Funcionario
codigo : int nome : String endereco : Endereco salarioMensal : int situacaoTrabalhista : boolean calcularSalario() getSituacaoTrabalhista() getQualificacoes() calcularTempoDependencia() getExperienciaProfissional() getFormacaoAcademica()

Departamento
codigo : int descricao : String funcionarios : Vector calcularFolhaPagamento() admitirFuncionario() demitirFuncionario() listarNomeFuncionarioESalarioFixo() listarNomeFuncionarioEsalario()

Endereco
rua : String numero : int bairro : String cidade : String

IFuncDepto

calcularSalario(diasUteis : Integer)

Assalariado

Comissionado
porcentagem = 0.20

You might also like