0% acharam este documento útil (0 voto)
8 visualizações

JavaIntro POO

para iniciantes
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
8 visualizações

JavaIntro POO

para iniciantes
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 70

Java - Introdução

BCC 221 - Programação Orientada a Objectos(POO)

Guillermo Cámara-Chávez

Departamento de Computação - UFOP


Introdução

I A Sun Microsystems financiou uma pesquisa corporativa


interna em 1991, com codinome Green

I Microprocessadores;

I O foco eram dispositivos eletrônicos inteligentes destinados ao


consumidor final.

I O projeto resultou em uma linguagem de programação


baseada em C e C++

I Oak (Carvalho): já existia;

I Java: a cidade, o café.

1/69
Introdução (cont.)

2/69
Principais Caracterı́sticas

I Orientação a objetos;

I Portabilidade;

I Facilidades para criação de programas com recursos de rede;

I Sintaxe similar a C/C++;

3/69
Principais Caracterı́sticas (cont.)

I Facilidades para criação de programas distribuı́dos e


multitarefa;

I Desalocação automática de memória;

I Vasta coleção de bibliotecas (ou APIs);

I Frameworks.

4/69
APIs

I As bibliotecas de classes Java são também conhecidas como


APIs (Applications Programming Interface)

I Fornecidas por compiladores;

I Fornecidas por fornecedores independentes de software

I Aplicações gráficas;

I Estruturas de dados;

I Acessibilidade;

5/69
APIs (cont.)

I Sons;

I Programação distribuı́da e paralela;

I Bancos de dados

I Jogos

I E-mail

I Etc.

6/69
Criação de um Programa Java

I Cria-se um código fonte com a extensão .java;

I O programa é compilado
j a v a c meuPrograma . j a v a

I É gerado o bytecode (arquivo .class), que será interpretado


durante a execução;

7/69
Criação de um Programa Java (cont.)

I O(s) arquivo(s) .class são carregados para a memória ;

I O interpretador (ou Java Virtual Machine) Java executa os


programas carregados
j a v a meuPrograma

8/69
Bytecode

I Os programas em Java são compilados para bytecode

I Uma forma intermediária de código, a ser interpretada pela


máquina virtual Java (Java Virtual Machine - JVM).

I Isto permite maior portabilidade dos códigos Java

I Qualquer sistema que inclua uma JVM executa qualquer


código Java.

I A JVM é responsável pelo gerenciamento dos aplicativos,


à medida em que estes são executados

9/69
Bytecode (cont.)

10/69
Bytecode (cont.)

11/69
Instruções de Saı́da

p u b l i c c l a s s Welcome1
{
//o método main inicia a execução da aplicação Java
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] )
{
//Java é case sensitive, cuidado com as letras maiúsculas
System . o u t . p r i n t l n ( " Welcome to Java
Programming !" ) ;
}
}

12/69
Instruções de Saı́da (cont.)

I Todo programa em Java consiste de pelo menos uma classe


definida pelo programador

I Padrão de nomenclatura igual ao C++;

I As definições de classe que começam com o especificador


public devem ser armazenadas em arquivos que possuam
o mesmo nome da classe

I Definir mais de uma classe public no mesmo arquivo é um erro


de sintaxe.

13/69
Instruções de Saı́da (cont.)

I A assinatura do método main é invariável


p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) ;

I O static indica que o método será executado


automaticamente pela JVM, sem necessidade de instanciar.

14/69
Instruções de Saı́da (cont.)

Especificador Descrição
public Acessı́vel a todos os membros do programa
private Acessı́vel apenas internamente à classe
protected Acessı́vel internamente à classe, às subclas-
ses e por classes do mesmo pacote
Acesso de pacote Atribuı́do quando nenhum especificador é
determinado.
Acessı́vel a todas as classes do mesmo pa-
cote, através de uma referência a um objeto
da classe.

15/69
Instrução de Saı́da

I System.out é conhecido como objeto de saı́da padrão


System . o u t . p r i n t l n ( " Welcome to Java Programming !"
);

I O método println imprime a string e quebra a linha ao final

I Para não quebrar a linha, utiliza-se o método print.

I Ambos também aceitam ’\n’ como caractere de nova linha.

16/69
Instrução de Saı́da (cont.)

Caractere de Escape Descrição


\n Nova linha
\t Tabulação horizontal
\r Retorno de carro
\\ Barra invertida
\" Aspas duplas

17/69
printf em Java

I Também há o método System.out.printf (a partir do Java


SE 5.0) para exibição de dados formatados

I Similar ao printf de C/C++.

18/69
printf em Java (cont.)

p u b l i c c l a s s Welcome4
{
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] )
{
System . o u t . p r i n t f ( " %s\n %s\n" , " Welcome to " , "
Java Programming " ) ;
}
}

19/69
Importanto Classes

I O compilador utiliza instruções import para identificar e


carregar classes usadas em um programa Java

I As instruções de importação são divididas em dois grupos:

I Núcleo do Java (nomes que começam com java);

I Extensões do Java (nomes que começam com javax).

20/69
Importanto Classes (cont.)

I Java possui um rico conjunto de classes predefinidas

I Agrupadas em pacotes;

I Por padrão, o pacote java.lang é importado automaticamente

I Classe System

21/69
Classe Scanner

import java . u t i l . Scanner ;

p u b l i c c l a s s Adicao {
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) {
S c a n n e r e n t r a d a = new S c a n n e r ( System . i n ) ;

i n t numero1 , numero2 , soma ;

System . o u t . p r i n t l n ( " Informe o primeiro inteiro " )


;
numero1 = e n t r a d a . n e x t I n t ( ) ; //lê o primeiro inteiro
System . o u t . p r i n t l n ( " Informe o segundo inteiro " ) ;
numero2 = e n t r a d a . n e x t I n t ( ) ; //lê o segundo inteiro

soma = numero1+numero2 ;
System . o u t . p r i n t f ( "A soma é %d\n" , soma ) ;
}
}

22/69
Classe Scanner (cont.)

I Um Scanner permite que o programa leia dados

I Deve ser criado um objeto desta classe;

I Os dados podem vir de diferentes fontes

I Disco

I Teclado

I Etc.

23/69
Classe Scanner (cont.)

I Antes de utilizar um Scanner, o programa deve especificar


qual é a origem dos dados

I No nosso exemplo, System.in indica a entrada padrão.

I O método nextInt() lê o próximo número inteiro da entrada;

I É possı́vel evitar a importação da classe Scanner, se


utilizarmos o nome completo da classe
j a v a . u t i l . S c a n n e r e n t r a d a = new j a v a . u t i l . S c a n n e r (
System . i n ) ;

24/69
Classe Scanner (cont.)

I Outros métodos úteis da classe Scanner são:

I next();

I nextByte();

I nextDouble();

I nextFloat();

I nextLine();

25/69
Classe Scanner (cont.)

I Estes métodos ainda possuem métodos similares hasNext, que


determinam se ainda há possı́veis tokens a serem lidos

I Por exemplo, hasNextInt() .

26/69
Classe Scanner (cont.)
import java . u t i l . ∗ ;

p u b l i c c l a s s HasNext {

p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
S t r i n g s = " Hello World ! \n 23 " ;

// create a new scanner with the specified String Object


S c a n n e r s c a n n e r = new S c a n n e r ( s ) ;

// check if the scanner has a token


System . o u t . p r i n t l n ( "" + s c a n n e r . h a s N e x t ( ) ) ;

// print the rest of the string


System . o u t . p r i n t l n ( "" + s c a n n e r . n e x t L i n e ( ) ) ;

// check if the scanner has a token after printing the line


System . o u t . p r i n t l n ( "" + s c a n n e r . h a s N e x t I n t ( ) ) ;
}
}
27/69
Classe Scanner (cont.)

true
H e l l o World !
true

28/69
Caixas de Diálogo

I Caixas de diálogo são janelas utilizadas para informar ou obter


dados ao usuário

I Fornecem uma interface mais amigável que o terminal;

I Janelas simples.

I No exemplo a seguir, será importada a classe JOptionPane,


que oferece caixas de diálogo

I A classe está contida no pacote javax.swing.

29/69
Exemplo 3

// Pacotes de extensão Java


i m p o r t j a v a x . s w i n g . JO pt io nP a ne ;
//importa a classe JOptionPane

p u b l i c c l a s s Welcome4 {
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) {
//o parâmetro null posiciona a janela no meio da tela
JOptionPane . showMessageDialog ( n u l l ,
" Welcome \ nto \ nJava \ nProgramming !" ) ;
//necessário em aplicações gráficas
System . e x i t ( 0 ) ; //termina o programa
}
}

30/69
Exemplo 3 (cont.)

31/69
Exemplo 4

i m p o r t j a v a x . s w i n g . JO pt io nP a ne ;

public class Addition {


p u b l i c s t a t i c v o i d main ( String args [ ] )
{
String firstNumber ; //primeira string digitada pelo usuário
S t r i n g secondNumber ; //segunda string digitada pelo usuário
i n t number1 ; //primeiro número
i n t number2 ; //segundo número
i n t sum ; //soma

//lê o primeiro número como uma string


f i r s t N u m b e r = JO p ti on Pa n e . s h o w I n p u t D i a l o g ( " Enter
first integer " ) ;

//lê o segundo número como uma string


secondNumber = J Op ti o nP an e . s h o w I n p u t D i a l o g ( " Enter
second integer " ) ;

32/69
Exemplo 4 (cont.)

// converte os números de String para int


number1 = I n t e g e r . p a r s e I n t ( f i r s t N u m b e r ) ;
number2 = I n t e g e r . p a r s e I n t ( secondNumber ) ;

// adiciona os numeros
sum = number1 + number2 ;

// mostra o resultado
J O p t i o n P a n e . s h o w M e s s a g e D i a l o g ( n u l l , " The sum is "
+ sum , " Results " , JO pt io n Pa ne . PLAIN MESSAGE ) ;

System . e x i t ( 0 ) ;
}
}

33/69
Exemplo 4 (cont.)

34/69
Constantes JOptionPane

35/69
Exemplo 4

I A InputDialog é outra caixa predefinida na JOptionPane

I Caixa de diálogo de entrada;

I O método showInputDialog() a mostra na tela.

I Os dados são lidos como strings, e depois convertidos para


inteiros

I As classes String e Integer são do pacote java.lang.

I O mesmo pode ser feito com as classes Float (parseFloat) e


Double (parseDouble).

36/69
Erro Comum

I Separamos texto e o conteúdo de variáveis pelo operador +

I Converte o valor da variável e a concatena no texto.

I Suponha y = 5:

I “y+2 = ”+y+2 imprime “y+2 = 52”;

I “y+2 = ”+(y+2) imprime “y+2 = 7”.

37/69
Operadores e Palavras Reservadas

38/69
Palavras Reservadas

39/69
Similaridades com C/C++

I Comentários;

I Operadores relacionais;

I Atribuições simplificadas;

I Incremento e decremento;

I Operadores lógicos;

40/69
Similaridades com C/C++ (cont.)

I Desvio Condicional

I if , if −else, operador ternário ( ?: ) e aninhamentos.

I Estrutura de seleção

I switch−case

I Estruturas de repetição

I while , do−while, for e aninhamentos

41/69
Vetores

I Em Java, os vetores são muito semelhantes aos de C++

I O primeiro ı́ndice é zero.

i n t c [ ] ; //declara um vetor
c = new i n t [ 12 ] ; //cria o vetor e o associa a uma variável

42/69
Vetores (cont.)

I Os vetores possuem o atributo público length, que armazena o


tamanho do vetor
i n t TAMANHO = 1 2 ;
i n t c [ ] = new i n t [TAMANHO ] ;

f o r ( i n t i = 0 ; i <c . l e n g t h ; i ++)
System . o u t . p r i n t f ( " %d " , c [ i ] ) ;

43/69
Vetores (cont.)

I Caso seja acessada uma posição fora dos limites de um vetor,


a exceção IndexOutOfBoundsException ocorre;

I Uma das formas de evitar este tipo de exceção é utilizar o for


aprimorado

I O contador é baseado no conteúdo do vetor

44/69
Vetores (cont.)

p u b l i c c l a s s ForAprimorado
{
p u b l i c s t a t i c v o i d main ( S t r i n g A r g s [ ] )
{
//cria e inicializa o vetor
int vet [ ] = {1 , 2 , 5 , 10 , 15 , 20 , 32};

//o contador do for é associado aos elementos do vetor


for ( int i : vet )
//imprime cada elemento do vetor
System . o u t . p r i n t f ( " %d\n" , i ) ;
}
}

45/69
Matrizes

I Matrizes, ou vetores multidimensionais em Java são


semelhantes às matrizes em C++;

I As declarações abaixo são válidas tanto em Java quanto em


C++:

int a [ ] [ ] = { { 1 , 2 } , { 3 , 4 , 5 } };

i n t b [ ] [ ] = new i n t [ 3 ] [ 4 ] ;

i n t c [ ] [ ] = new i n t [ 2 ] [ ] ; //cria duas linhas


c [ 0 ] = new i n t [ 5 ] ; //cria 5 colunas para a linha 0
c [ 1 ] = new i n t [ 3 ] ; //cria 3 colunas para a linha 1

46/69
Matrizes (cont.)

public class VetorBidimensional


{
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] )
{
//matriz estática
i n t [ ] [ ] t a b u l e i r o = new i n t [ 8 ] [ 8 ] ;
i n t [ ] [ ] dinamico ;

//aloca a primeira dimensão


d i n a m i c o = new i n t [ 1 0 ] [ ] ;

//aloca a segunda dimensão


f o r ( i n t i =0; i < d i n a m i c o . l e n g t h ; i ++)
d i n a m i c o [ i ] = new i n t [ i + 1 ] ;
}
}

47/69
API Java

I A especificação da API Java pode ser encontrada em:


http://download.oracle.com/javase/8/docs/api/

I Descrição de todos os pacotes e suas respectivas classes,


interfaces, exceções e erros.

48/69
API Java (cont.)
I java.awt: interfaces gráficas;

I java.io: entrada e saı́da;

I java.lang: classes básicas para programas Java;

I java.math: operações matemáticas com precisão arbitrária;

I java.net: aplicações que utilizam rede;

I java.rmi: programação distribuı́da;

I java.sql: banco de dados;

I java.util: coleções, utilidades de data e hora,


internacionalização e miscelânea (tokenizer, números
aleatórios, etc.). 49/69
Classes e Métodos

I Vejamos um exemplo conhecido sobre classes e métodos

I GradeBook (diário de classe).

I Notem que há algumas semelhanças com a sintaxe de C++

I E algumas diferenças.

50/69
Classes e Métodos (cont.)
p u b l i c c l a s s GradeBook
{
public void displayMessage ()
{
System . o u t . p r i n t l n ( " Bem vindo ao Diario de
Classe " ) ;
}
}

p u b l i c c l a s s DriverGradeBook
{
p u b l i c s t a t i c v o i d main ( S t r i n g A r g s [ ] )
{
GradeBook m e u D i a r i o = new GradeBook ( ) ;

meuDiario . displayMessage () ;
}
}
51/69
Classes e Métodos (cont.)

I Classes públicas são armazenadas em arquivos diferentes;

I O main fica dentro de uma classe, obrigatoriamente

I Logo, é um método;

I O static em seu cabeçalho indica que será executado


automaticamente.

I Para instanciar um objeto, é necessário utilizar o operador


new()

I Não é necessário importar a classe GradeBook.java no driver

I Automático, pois estão no mesmo pacote – o pacote padrão.

52/69
Classes e Métodos (cont.)

I Vamos alterar o exemplo anterior para agora considerar um


parâmetro para o método displayMessage()

53/69
Classes e Métodos (cont.)

p u b l i c c l a s s GradeBook
{
p u b l i c v o i d d i s p l a y M e s s a g e ( S t r i n g nomeCurso )
{
//o println foi substituı́do, porque gera erro de compilação
System . o u t . p r i n t f ( " Bem vindo ao Diario de
Classe de %s" , nomeCurso ) ;
}
}

54/69
Classe String

I Java trata cadeias de caracteres utilizando a classe String

I Com ’S’;

I Incluı́da no pacote java.lang

I Não é necessário importar.

55/69
Classe String (cont.)

I Possui 65 métodos (Java SE 7.0) para manipular Strings

I Sintaxe diferente de C++;

I + 15 construtores diferentes;

I + operadores sobrecarregados.

56/69
Lendo String

p u b l i c c l a s s GradeBook
{
p u b l i c v o i d d i s p l a y M e s s a g e ( S t r i n g nomeCurso )
{
//o println foi substituı́do, porque gera erro de compilação
System . o u t . p r i n t f ( " Bem vindo ao Diario de
Classe de %s" , nomeCurso ) ;
}
}

57/69
Lendo String (cont.)

import java . u t i l . Scanner ;

p u b l i c c l a s s DriverGradeBook
{
p u b l i c s t a t i c v o i d main ( S t r i n g A r g s [ ] )
{
GradeBook m e u D i a r i o = new GradeBook ( ) ;
S c a n n e r e n t r a d a = new S c a n n e r ( System . i n ) ;
S t r i n g nome ;

System . o u t . p r i n t l n ( " Digite o nome do curso " ) ;


//Lê a linha inteira, inclusive espaços
nome = e n t r a d a . n e x t L i n e ( ) ;

m e u D i a r i o . d i s p l a y M e s s a g e ( nome ) ;
}
}

58/69
Lista de Argumentos de Tamanho Variável

I Com Listas de Argumentos de Tamanho Variável ou


varargs, podemos criar métodos que recebem um número
não especificado de argumentos;

I Um tipo seguido de . . . na lista de parâmetros de um método


indica que este recebe um número de variáveis daquele tipo

I Só pode ser feito uma vez por método;

I Sempre no final da lista de parâmetros.

59/69
Lista de Argumentos de Tamanho Variável (cont.)
p u b l i c c l a s s VarArgs {
p u b l i c s t a t i c d o u b l e media ( d o u b l e . . . numeros ) {
double t o t a l = 0;

f o r ( d o u b l e d : numeros )
t o t a l+=d ;

r e t u r n t o t a l / numeros . l e n g t h ;
}

public static v o i d main ( S t r i n g a r g s [ ] ) {


d o u b l e d1 = 10.0;
d o u b l e d2 = 1.0;
d o u b l e d3 = 15.0;
d o u b l e d4 = 99.0;

System . o u t . p r i n t f ( " %lf " , media ( d1 , d2 , d3 , d4 ) )


;
}
}
60/69
Passagem de Parâmetros

I Duas formas de passar parâmetros para métodos ou funções


são:

I Por valor ou cópia (alterações não afetam a variável ou objeto


original);

I Por referência (alterações afetam a variável ou objeto original).

61/69
Passagem de Parâmetros (cont.)

I Java não permite que o usuário escolha qual será a forma de


passagem dos parâmetros:

I Tipos primitivos são sempre passados por valor;

I Objetos e vetores são passados por referência

I Vetores são passados por referência por uma questão de


desempenho.

62/69
Escopo de Variáveis e Atributos

I As regras para o escopo de variáveis e atributos são as


mesmas em Java:

I Variáveis locais só existem dentro do bloco de código ao qual


pertencem, delimitados por { e };

I Atributos são declarados dentro das classes e fora dos métodos;

63/69
Escopo de Variáveis e Atributos (cont.)

I Os especificadores de acesso determinam a visibilidade dos


atributos

I public , private e protected

I Consequentemente, o uso de getters e setters também é


mantido;

I Em Java, os especificadores não delimitam regiões de uma


classe (como em C++)

I São definidos membro a membro.

64/69
Exemplo GradeBook
p u b l i c c l a s s GradeBook {
p r i v a t e S t r i n g courseName ;

// método para definir o nome da disciplina


p u b l i c v o i d s et CourseName ( S t r i n g name ) {
courseName = name ; // store the course name
}

// método para recuperar o nome da disciplina


p u b l i c S t r i n g getCourseName ( ) {
r e t u r n courseName ;
}

// mostra a mensagem de bem vindas


public void displayMessage () {
// mostra a mensagem
System . o u t . p r i n t f ( " Welcome to the grade book
for \n %s !\ n" , getCourseName ( ) ) ;
}
} // fim classe GradeBook
65/69
Exemplo GradeBook (cont.)

// biblioteca de entrada de dados


import java . u t i l . Scanner ;

p u b l i c c l a s s GradeBookTest {
// método principal que inicia a execução
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s )
{
// permite a captura de dados de entrada
S c a n n e r i n p u t = new S c a n n e r ( System . i n ) ;

// cria um objeto da classe GradeBook


GradeBook myGradeBook = new GradeBook ( ) ;

System . o u t . p r i n t f ( " Initial course name is :


%s\n\n" , myGradeBook . getCourseName ( ) ) ;

66/69
Exemplo GradeBook (cont.)

// prompt for and read course name


System . o u t . p r i n t l n ( " Please enter the
course name :" ) ;

// lê uma linha de texto


S t r i n g theName = i n p u t . n e x t L i n e ( ) ;

// set courseName
myGradeBook . setCourseName ( theName ) ;

System . o u t . p r i n t l n ( ) ; // imprime uma linha em branco

// mostra a mensagem de boas vindas


myGradeBook . d i s p l a y M e s s a g e ( ) ;
}
} // fim classe GradeBookTest

67/69
Exemplo GradeBook (cont.)

I n i t i a l c o u r s e name i s : n u l l
P l e a s e e n t e r t h e c o u r s e name :
BCC Programacao O r i e n t a d a a O b j e t o s
Welcome t o t h e GradeBook f o r
BCC Programacao O r i e n t a d a a O b j e t o s

68/69
FIM

69/69

Você também pode gostar