Você está na página 1de 73

Programao de Computadores II - Linguagem Java Alexandre Sztajnberg

Roteiro
Introduo Noes de Orientao a Objeto Primeiros exemplos Sintaxe e estruturas Mtodos, controle Excees Threads Serializao Reflexo RMI

Slides baseados em...


David J. Barnes & Michael Klling, Programao orientada a

objetos com Java, Pearson Education do Brasil, 2004

Introduction to Programming, David J. Barnes Michael Klling The University of North Carolina at Chapel Hill, Programming

Language Concepts, Spring 2002, Felix Hernandez-Campos

Nell Dale, Chip Weems and Mark Headington, Programming

and Problem Solving with Java, Editora Jones and Bartlett Publishers. Usando Java Wiley, 2002.

Rafael Santos Introduo Programao Orientada a Objetos Cay Horstmann, Big Java: Programming and Practice, Ed.

Exerccios, Projetos, Provas


Programas pequenos (muitos!)

em dupla (pair programming)

Projetos (programas um pouco maiores)


um ou dois

Provas: P1 e P2 Obs1: tudo vale nota! Obs2: plgio (cola) - 0,0 (zero) para TODOS

envolvidos

Ferramentas
JDK Editores IDEs No LabIME

JCreator JDK 1.4 Eclipse?

www.ime.uerj.br/~alexszt/cursos/pc2

Ambientes de Programao
Alm de compiladores e interpretadores

Assemblers, debuggers, pr-processadores e ligadores (linkers) Editores Style Checkers Version management Profilers Beyond a simple bus error Emacs

Integrated environments

IDE: Integrated Development Environment

Eclipse

Compilao x Interpretao

Do Programa-fonte para o Cdigo Executvel


program , output); gcd(input program gcd(input, gcd(input, output); var var i, i, j: j: integer; integer; begin begin read(i, , read(i read(i, while i while i j); j); <> <> j j do do if if i i > > j j then then i i := := i i j; j; else else j j := := j j i; i; writeln(i) ) writeln(i writeln(i)

Compilao

end. end.

Compilao e Interpretao
O compilador o programa que traduz o cdigo em alto

nvel para o programa executvel

O interpretador o programa que executa outro programa

Diferena sutil:

Combinando Compilao e Interpretao


A linguagem interpretada quando a traduo inicial simples A linguagem compilada quando o processo de traduo complexo

Pr-processamento

Macros

#define <macro> <replacement name> #define FALSE 0 #define max(A,B) ( (A) > (B) ? (A):(B))

Ligao (Linking)
Bibliotecas e subrotinas

- Java Caractersticas e Portabilidade (JVM)

Linguagens de Alto Nvel


Are portable Are translated into machine code by compilers Instructions are written in language similar to natural language Examples -- FORTRAN, COBOL, Pascal, C, C++ Many are standardized by ISO/ANSI to provide an official description of the language

Estgios de um Programa em C++


myprog.cpp SOURCE
written writtenin in C++ C++

myprog.obj OBJECT
written writtenin in machine machine language language

myprog.exe EXECUTABLE
written writtenin in machine machine language language

via compiler

via linker

other othercode code from fromlibraries, libraries, etc. etc.

Linguagem Java
uma linguagem orientada a objetos. "Write once, run anywhere" . A linguagem Java

totalmente portvel. O programa compilado em "bytecodes", e a Java Virtual Machine (JVM) interpreta o cdigo (bytecode) para instrues da plataforma sobre a qual a JVM foi instalada. Ideal para aplicaes de Rede e Internet ( Applets ). Possui bibliotecas de apoio. Segurana. Como restries nas applets. Sem uso de ponteiros. Sintaxe semelhante a C / C++. Case sensitive.

Linguagem Java

Achieves portability by using both a compiler and an interpreter Java compiler translates a Java program into an intermediate Bytecode--not machine language An interpreter program called the Java Virtual Machine (JVM) translates each successive instruction in the Bytecode program to machine language and immediately runs it

Portabilidade de Java
EXECUTABLES Payroll.java SOURCE Java Java Program Program Payroll.class BYTECODE Java Java Bytecode Bytecode via interpretador JVM
Windows WindowsPC PC running runningJVM JVM

Unix Unixbox box running runningJVM JVM

via compilador

Macintosh Macintosh running runningJVM JVM

Ambiente de Programao Java

A seqncia de passos para desenvolver um programa em Java

A plataforma de Java
The byte code generated by the Java front-end is an intermediate form

Compact Platform-independent

O arquivo .class File


Java class file contains
Byte code for data and methods (intermediate form, platform

independent) (remember byte code? )

Symbolic references from one class file to another


Class names in text strings Decompiling/reverse engineering quite easy

Field names and descriptors (type info) Method names and descriptors (num args, arg types) Symbolic refs to other class methods/fields, own

methods/fields

Class Loaders
Bootstrap (default) loader (na JVM) Carregadores definidos pelo usurio (customizado)

Carga dinmica de classes


You don't have to know at compile-time all the

classes that may ultimately take part in a running Java application.

User-defined class loaders enable you to dynamically extend a Java app at run-time
As it runs, your app can determine what extra

classes it needs and load them


Custom loaders can download classes across a

network (applets), get them out of some kind of database, or even calculate them on the fly.

A mquina de execuo
JVM Simples

Interpretao do Byte Code

Just-in-time compiler

Mtodos em ByteCode so compilados em cdigo de mquina na primeira vez que so invocados O cdigo de mquina guardado para uma invocao subseqente Isto requer mais memria

Otimizao adaptativa

O interpretador monitora a atividade do programa, compilando a parte do cdigo mais usada do programa em cdigo de mquina Isto muito mais rpido do que uma simples interpretao, requer um pouco mais de memria A exigncia da memria somente ligeiramente maior devido regra de 20%/80% da execuo de programa (no geral, 20% do cdigo responsvel por 80% da execuo)

Al! Primeiro programa

Primero programa: Alo.java


1 public class Alo 2 { 3 public static void main(String[] args) 4 { 5 // Mostra uma frase no console 6 System.out.println("Al,Mundo!"); 7 /* Comentario 8 de mais de uma linha */ 9 } 10}

O que temos no programa?


public class ClassName public static void main(String[] args) // comentrio de uma linha e (/* */) de vrias linhas Chamada de mtodo

objeto.metodoName(parametros)
Classe System Objeto System.out Mtodo println

objeto.metodoName(parametros) Exemplo:
System.out.println("Hello,

Chamada (invocao) de mtodo

Dave!");

Objetivo:

Invocar um mtodo de um objeto e fornecer qualquer parmetro adicional.

Compilando e executando o exemplo


Escrever o programa em um editor de textos Salv-lo com o nameClass, e extenso .java Abrir o prompt (no windows o DOS) Compilar em byte codes

javac Alo.java Executar byte codes java Alo

Erros
Erros de sintaxe

System.ouch.print("..."); System.out.print("Hello);

Detectados pelo compilador

Erros lgicos

System.out.print("Hell");
Detectados (assim espero) na fase de teste

Breve introduo a Orientao a Objetos

Programao Orientada a Objetos (POO)


Objeto: Objeto de software modela objetos do mundo real, e possui estado (variveis) e aes (mtodos). Mtodos: So as aes que um objeto pode praticar, e o modo pelo qual os objetos se comunicam entre si. Classe: o modelo que descreve as variveis e mtodos comuns a todos os objetos de certo tipo. Herana: Ocorre quando uma classe "herda" o caractersticas e aes de uma superclasse. Interface: como um contrato, onde uma classe que implementa a interface, se compromete a implementar os mtodos declarados na interface.

Objetos e classes
Objetos

Representam coisas do mundo real ou do domnio de algum problema (exemplo: o carro vermelho ali no estacionamento). Representam todos os tipos de objetos (exemplo: carro).

Classes

Mtodos e parmetros
Objetos tm operaes que podem ser invocadas

(o Java as chama de mtodos).


Mtodos podem ter parmetros para passar

informaes adicionais necessrias para sua execuo.

Outras observaes
Vrias instncias podem ser criadas a partir de

uma nica classe.


Um objeto tem atributos: valores armazenados em

campos.

A classe define quais campos um objeto tem, mas

todo objeto armazena seu prprio conjunto de valores (o estado do objeto).

Estado

Dois objetos circle

instncia de... instncia de...

Um objeto da classe Time


Mtodos
Set Increment Write
. . .

Dados
Dados privados: hrs mins secs 8 25 42

Time

Caractersticas da POO
Encapsulamento

Abstrao dos Dados


Esconder informaes Reutilizao do Cdigo Polimorfismo Dynamic method binding

Encapsulamento
Permite ao programador esconder os detalhes da

representao dos dados por trs de um simples conjunto de operaes (como a interface).

Quais os benefcios da abstrao de dados?


Reduz a carga conceitual (ter que conhecer as internas) Programadores precisam conhecer menos sobre o resto do programa Encapsula falhas (dentro da classe/objeto) Bugs (erros) so localizados em componentes independentes Fornece um grau significativo de independncia de componentes do programa Separa os diferentes tipos de programadores

Encapsulamento, Classes, Objetos e Metdos


A unidade de encapsulamento na OOP a classe,

um tipo abstrato de dados O conjunto de valores o conjunto de objetos (ou instncias) Classes podem ter:

Conjunto de atributos de classes Conjunto de mtodos de classe Conjunto de atributos de instncias (que se relacionam) Conjunto de mtodos de instncias

Objetos podem ter:


Herana
O encapsulamento melhora a reusabilidade do

cdigo

Tipos de dados abstratos Mdulos Classes

geralmente o caso em que o cdigo que o

programador quer reusar, prximo mas no exatamente aquilo que ele necessita. Herana fornece um mecanismo para estender ou refinar unidades de encapsulamento

Adicionando ou sobrescrevendo mtodos Adicionando atributos

Polimorfismo
The is-a relationship supports the development of

generic operations that can be applied to objects of a class and all its subclasses

This feature is known as polymorphism E.g. paint() method

The binding of messages to method definition is

instance-dependent, and it is known as dynamic binding


It has to be resolved at run-time

Dynamic binding requires the virtual keyword in C++ Static binding requires the final keyword in Java

Java: Sintaxe, Classes, Objetos, etc.

Identificadores em Java

Nomes de variveis, objetos, constantes, mtodos, etc. O identificador em Java deve comear com uma letra ou underscore ou $, e deve ser seguido por zero ou mais letras (A-Z, a-z), dgitos (0-9), underscores ( _ ), ou $.

Vlidos:
age_of_dog ageOfDog taxRateY2K HourlyEmployee

Invlidos: (Por que?)


age# 2000TaxRate Age-Of-Dog

Outros aspectos dos identificadores



Java uma linguagem case-sensitive, ou seja, ela diferencia letras maisculas e minsculas. Ex: nome, Nome, nOMe so distintos. O uso de identificadores significativos uma boa prtica de programao.

51 Palavras Reservadas em Java


abstract catch default false goto int null return switch transient while boolean char do final if interface package short synchronized true break class double finally implements long private static this try byte const else float import native protected strictfp throw void case continue extends for instanceof new public super throws volatile

No podem ser usadas como identificadores.

Java tem tipos de dado primitivos


Tipos Inteiros

Podem representar nmeros positivos e negativos quando declarados como byte, int , short , ou long Podem representar caracteres simples quando declarados como char

Tipos de ponto-flutuante

Representam nmeros reais com ponto decimal

So declarados como float, ou double

Tipo Booleano

Recebe o valor verdadeiro (true) ou falso (false)

Declarado como boolean.

Tipos de dados primitivos em Java


primitive
integral boolean floating point

byte char

short

int

long

float

double

Exemplos de valores de dados em Java


int sample values 4578 -4578 0

double sample values 95.274 95. .265

float sample values 7.4f 95.2f -> Obs: f no final do n para indicar float.

char sample values B d 4 ? *

ASCII e Unicode

ASCII um antigo conjunto de caracteres usados para representar caracteres como inteiros. ASCII um subconjunto do novo conjunto de caracteres Unicode. O caractere A em Unicode internamente armazenado como inteiro 65, e as letras sucessivas do alfabeto so armazenadas como inteiros consecutivos. vlida a comparao de caracteres: A menor que B, etc.

Tipos de Inteiros
Tipo Tam. em Bits Valor Mnimo at Valor Mximo

byte short int long

8 16 32 64

-128

at

127 32,767

-32,768

at

-2,147,483,648 at 2,147,483,647 -9,223,372,036,854,775,808 at +9,223,372,036,854,775,807

Tipos de Ponto-flutuante
Tipo float Tam. em Bits 32 Alcance dos Valores +1.4E - 45 at +3.4028235E+38 double 64 +4.9E - 324 at +1.7976931348623157E+308

Java String Class


A string is a sequence of characters enclosed in double

quotes.

string sample values


Today and tomorrow His age is 23. A (a one character string)

The empty string contains no characters and is written

as

A Classe String
Ao contrrio de outras linguagens de programao, em Java String no um Array de caracteres mas uma classe. Porm sua declarao semelhante aos tipos de dados primitivos:
String nome = Sinforosa; ou String nome = new String(Sinforosa);

Como classe, uma string possui mtodos, exemplo: length() Retorna o n de caracteres da String charAt(int i) Retorna o caractere da posio i da String.

Mtodos de uma String

O mtodo length retorna um valor int que o nmero de caracteres da String. String nome = Donald Duck; int numChars; numChars = nome.length(); instncia mtodo length um mtodo da instncia

Mtodos de uma String (Cont.)


Mtodo indexOf procura na string uma

substring particular, e retorna um valor int que a posio inicial para a primeira ocorrncia da substring dentro da string. (zero), no 1.

Obs: Caracteres comeam na poso 0 O argumento substring pode ser uma String

literal, uma expresso String, ou um valor do tipo char. mtodo indexOf retorna 1.

Se a substring no for encontrada, o

Mtodo substring retorna a substring da string,

Mtodos de uma String (Cont.)

porm no altera a string.

O primeiro parmetro um int que especfica a

posio inicial dentro da string

O segundo parmetro um int que 1 unidade

maior que a posio final da substring

Lembre-se: posies de cracteres contidas na

string so numeradas iniciando-se a partir do 0, no de 1.

Actions of Javas String class


String operations include

joining one string to another (concatenation) converting number values to strings converting strings to number values comparing 2 strings

Declarao de tipos
Dentro de qualquer parte do cdigo a declarao feita da seguinte forma:
int a=1,b,c; //podem ser ou no inicializadas char ch1,ch2=b; //variveis separadas por vrgula String nome1, nome2=null; /*Em ambos a referncia nula */ String frase1 = Hoje acordei; String frase2 = new(Hoje acordei); /* as duas declaraes possuem o mesmo efeito */

Simples classe em Java


Cabealho

class FazNada {
Corpo

Cabealho da classe
Modificador de Acesso

Classe

Identificador

public class PrintName

Bloco (Compound Statement)


Bloco a seqncia de zero ou mais

instrues envolvidas por um par de chaves { }.


Bloco
{ Statement . . . }

What is a Variable?
A variable is a location in memory to which we can

refer by an identifier, and in which a data value that can be changed is stored
Declaring a variable means specifying both its name

and its data type or class

What Does a Variable Declaration Do?


int ageOfDog;
A declaration tells the compiler toallocate enough memory to hold a value of this data type, and to associate the identifier with this location.

4 bytes for ageOfDog

Syntax for Declarations


Variable Declaration Modifiers TypeName Identifier , Identifier . . . ;

Constant Declaration

Modifiers final TypeName Identifier = LiteralValue;

What is a Named Constant?


A named constant is a location in memory to which we can

be changed is stored.

refer by an identifier, and in which a data value that cannot

VALID NAMED CONSTANT DECLARATIONS final final final final final String float char int double STARS = ****; = 98.6;

NORMAL_TEMP BLANK = ; VOTING_AGE MAX_HOURS =

18; 40.0;

Giving a value to a variable


You can assign (give) a value to a variable by using the assignment operator = VARIABLE DECLARATIONS String firstName; char middleInitial; char letter; int ageOfDog; VALID ASSIGNMENT STATEMENTS firstName = Fido; middleInitial = X; letter = middleInitial; ageOfDog = 12;

Why is String uppercase and char lower

case?

char is a built in type String is a class that is provided Class names begin with uppercase by convention

Assignment Statement Syntax


Variable = Expression;
First, Expression on right is evaluated. Then the resulting value is stored in the memory location of Variable on left.

NOTE: The value assigned to Variable must be of the same type as Variable.

String concatenation (+)


Concatenation uses the + operator. A built-in type value can be concatenated with a string

because Java automatically converts the built-in type value for you to a string first.

Concatenation Example
final final final int DATE = 2003; phrase1 = Programming and Problem ; phrase2 = Solving in Java ; String String

String bookTitle;

bookTitle = phrase1 + phrase2; System.out.println(bookTitle + has copyright + DATE);

Usando os dispositivos de sada


SINTAXE NA CHAMADA DO MTODO System.out.print (StringValue); System.out.println (StringValue); Esses exemplos fornecem a mesma sada.
1) System.out.print(The answer is, );

System.out.println(Yes and No.);


2) System.out.println(The answer is, Yes and No.);

Entrada: argumentos da linha de comando


A chave para os argumentos da linha de comando est no mtodo main: public static void main(String[] args) String[ ] args , significa um array de Strings que so uma lista de argumentos da linha de comandos fornecida pelo usurio na chamada do programa. Como um exemplo veremos uma aplicao que recebe 2 nmeros reais para o clculo da rea de um retngulo.

public class Area { public static void main(String[] args) { //verifica se foi passado 2 argumentos if(args.length==2) { double a=Double.parseDouble(args[0]); double b=Double.parseDouble(args[1]); double area = a * b; System.out.println(Area = +area); } } } Na chamada do programa na linha de comandos: >java Area 2.5 5 >Area = 12.5

Exemplo de passagem de parmetros

Dispositivo de Entrada
Mais complexo que os dispositivos de sada Deve se ajustar mais de um dispositivo

primitivo

InputStreamReader inStream; inStream = new InputStreamReader(System.in); // declare device inData BufferedReader inData; inData = new BufferedReader(inStream)

Usando o dispositivo de entrada


//Criando o dispositivo em uma instruo inData = new BuffredReader(new InputStreamReader(System.in)); String umaLinha; // Armazena uma linha do texto em umaLinha umaLinha = inData.readLine();

Da onde o texto vem?

Interactive Input
readLine o valor retornado na classe BufferedReader readLine vai na janela do System.in e recebe como

entrada o que o usurio digitou

Como o usurio sabe o que digitar?


O programa (voc) informa o usurio

System.out.print(informe...);

Interactive Input (cont.)


BufferedReader inData; inData = new BufferedReader(new InputStreamReader(System.in)); String nome; System.out.print(Digite seu nome: ); nome = inData.readLine();

Nome contm o que o usurio digitou em resposta no prompt. Programa exemplo, calcula a rea de um retngulo.

import java.io.*; public class Area2 { public static void main(String[] args)throws IOException { BufferedReader inData; inData = new BufferedReader(new InputStreamReader(System.in)); String aux; double a,b,area; System.out.print("Digite um lado: "); aux = inData.readLine(); a = Double.parseDouble(aux); System.out.print("Digite outro lado: "); aux = inData.readLine(); b = Double.parseDouble(aux);

// continuacao area = a * b; System.out.println("Area = " +area); } } Na chamada do programa na linha de comandos: >java Area2 >Digite um lado: 2.5 >Digite outro lado: 5 >Area = 12.5

A Java Application
Must contain a method called main() Execution always begins with the first statement in

method main()

Any other methods in your program are subprograms

and are not executed until they are sent a message

Java Program
// ****************************************************** // PrintName prints a name in two different formats // ****************************************************** public class PrintName { public static void main (String[ ] args) { BufferedReader inData; String first; // Persons first name String last; // Persons last name String firstLast; // Name in first-last format String lastFirst; // Name in last-first format inData = new BufferedReader(new InputStreamReader(System.in));

Java program continued


System.out.print(Enter first name: ); first = inData.readLine(); System.out.print(Enter last name: ); last = inData.readLine(); firstLast = first + + last; System.out.println(Name in first-last format is + firstLast); lastFirst = last + , + first; System.out.println(Name in last-first format is + lastFirst); } }

Sintaxe da declarao de mtodos


Declarao de mtodo Modifiers void Identifier (ParameterList) { Statement }

Statement Syntax Template


Statement NullStatement LocalConstantDeclaration LocalVariableDeclaration AssignmentStatement MethodCall Block

NOTE: This is a partial list.

One Form of Java Comments


Comments between /* and */ can extend over several

lines.

/* This is a Java comment. It can extend over more than one line. */

/* In this second Java comment the asterisk on the next line * is part of the comment itself. */

Another Form of Java Comment


Using two slashes // makes the rest of the line become a

comment.

// ****************************************************** // PrintName prints a name in two different formats // ****************************************************** String first; String last; // Persons first name // Persons middle initial

Operadores
A linguagem Java fornece um conjunto amplo de operadores, sendo eles divididos nos grupos de :
Operadores Aritmticos Operadores Booleanos ou Lgicos

retornam os valores

true ou false.
Operadores de Atribuio Operador de String

Operadores Aritmticos
Operador * / + % + ++ -Significado Multiplicao Diviso Adio Subtrao Resto da diviso inteira Sinal negativo (- unrio) Sinal positivo (+ unrio) Incremento unitrio Decremento unitrio A * B A / B A + B A B A % B -A +A ++A ou A++ --A ou A-Exemplo

Operadores Aritmticos (cont.)


Diferena entre operadores sufixo e prefixo:
int w=7,x=18,y,z; y = w + x--; // operador sufixo: x-z = w + --x; // operador prefixo: --x

Na 1 expresso o valor resultante de y 7+18 = 25, depois x diminudo de 1, pois x diminudo com sufixo. Na 2 expresso o valor resultante de z 7+16 = 23, pois x que foi diminudo na expresso anterior diminudo novamente com prefixo.

Operadores Booleanos ou Lgicos


Operador == != > >= < <= && || ! Igual Diferente Maior que Maior ou Igual a Menor que Menor ou igual a E Lgico (AND) Ou Lgico (OR) Negao (NOT) Significado Exemplo A == B A != B A > B A >= B A < B A <= B A && B A || B !A

Operadores de Atribuio
Atribuio permite definir o valor de uma varivel atravs de uma constante, ou do resultado de uma expresso. Em JAVA vlida a atribuio do tipo: a=b=c=d=5;
Operador Significado Atribuio Simples Adio Subtrao Multiplicao Diviso Resto da diviso inteira A = B A+=B | A=A+B A-=B | A=A-B A*=B | A=A*B A/=B | A=A/B A%=B | A=A%B Exemplo

= += -= *= /= %=

Operador de String
O Operador de string o + que resulta na concatenao de Strings. Exemplo: String frase,nome=Almeida; int idade=56; frase=O nome dele +nome+, e sua idade de +idade+ anos.; Como resultado, frase fica com o texto: O nome dele Almeida, e sua idade de 56 anos..

Precedncia de Operadores
() ! unrio - unrio + ++ -- (pre) * / % + < <= > >= == != && || = ++ --(post)

Maior precedncia

Lowest precedence

Estruturas de Desvio de Fluxo

Estrutura de Controle if-else


Fornece a seleo em dois sentidos

verdade

expresso expression

falso

statement1A

statement1B

if uma instruo de seleo


Executa ou salta a instruo

expresso

verdade

falso

statement

if-else
if (Expresso) Statement1A else Statement1B
Obs: Statement1A e Statement1B cada um pode ser uma simples instruo, uma instruo nula, ou um bloco de instrues. if(Expresso) { } else { }

if-else aninhados
if (Expresso1 ) Bloco1 else if (Expresso2 ) Bloco2
...

else if (ExpressoN ) BlocoN else Bloco N+1 EXATAMENTE 1 desses blocos ser executado.

if-else Aninhados

Cada expresso avaliada em seqncia, at que uma expresso verdadeira seja encontrada. Apenas o bloco de intrues especfico que segue a expresso verdadeira executado. Se nenhuma expresso for verdadeira, o bloco seguinte ao else final executado. Realmente, o else final e o bloco final so opcionais. Se forem omitidos, e nenhuma expresso for verdadeira, ento nehuma instruo executada. UM EXEMPLO . . .

Uma nica resposta possvel


if (numero > 0) System.out.println(Positivo); else if (numero < 0) System.out.println(Negativo); else System.out.println(Zero);

Em ausncia de chaves: Um else forma par sempre com o if precedente mais prximo que no tenha um else emparelhado com ele.
double average=100.0; if (average >= 60.0) if (average < 70.0) // forma par com o else System.out.println(Marginal PASS); else System.out.println(FAIL);

Por que a Sada FAIL ?


O Compilador ignora a identao e emparelha o else com o segundo if

Verso Corrigida
double average; average = 100.0; if (average >= 60.0) { if(average < 70.0) System.out.println(Marginal PASS); } else System.out.println(FAIL);

Classes Revisited
class Name { String first; String second; }

Classes are active; actions, called methods, are bound (encapsulated) with the class variables

Methods
Method heading and block
void setName(String arg1, String arg2) { first = arg1; second = arg2; }

Method call (invocation)


Name myName; myName.setName(Nell, Dale);

Some Definitions
Instance field A field that exists in ever instance of a

class

String first; String second;

Instances method A method that exists in every instance

of a class

void setName(String arg1, String arg2); myName.setName(Chip, Weems); String yourName; yourName.setName(Mark, Headington);

More Definitions
Class method A method that belongs to a class rather than it

object instances; has modifier static

Date.setDefaultFormat(Date.MONTH_DAY_YEAR);
Class field A field that belongs to a class rather than its object

instances; has modifier static

More Definitions
Constructor method Special method with the same name

as the class that is used with new when a class is instantiated

public Name(String frst, String lst) { first = frst; last = lst; } Name name; name = new Name(John, Dewey);

Note: argument cannot be the same as field

Void Methods
Void method Does not return a value

System.out.print(Hello); System.out.println(Good bye); name.setName(Porky, Pig);

object method arguments

Value-Returning Methods
Value-returning method Returns a value to the calling

program
String first; String last; Name name; System.out.print(Enter first name: ); first = inData.readLine(); System.out.print(Enter last name: ); last = inData.readLine(); name.setName(first, last);

Value-returning example
public String firstLastFormat() { return first + + last; } System.out.print(name.firstLastFormat());

object

method

object method

Argument to print method is string returned from firstLastFormat method

Classe Automvel class Automvel { Atributos modelo ligado ano public String modelo; public int ano; private boolean ligado;

Automvel.java Automvel.java

Mtodos Instanciar novo Automvel public Automvel( ... )

// Instanciar novo automvel public Automvel( String m, int a ) { modelo = m; ano = a; ligado = false; } // Ligar automvel public void liga( ) { ligado = true; } // Desligar automvel public void desliga( ) { ligado = false; } }

Ligar Automvel public void liga()

Desligar Automvel public void desliga()

Classe Motorista class Motorista { Atributos nome carro private String nome; private Automvel carro;

Motorista.java Motorista.java

Mtodos Instanciar novo Motorista public Motorista( ... )

// Instanciar novo Motorista public Motorista( String n, Automvel a ) { nome = n; carro = a; } // Obter o nome do motorista public String obterNome( ) { return nome; } // Obter o carro do motorista public Automvel obterCarro( ) { return carro; }

Obter o nome public String obterNome()

Obter o carro
public Automvel obterCarro()

Classe MeuPrograma class MeuPrograma{ Atributos carro1 motorista1 motorista2 private Automvel carro1;

MeuPrograma.java MeuPrograma.java

private Motorista motorista1, motorista2; // Entry point do programa: public static void main( String args[ ] ) { // Instanciando novos objetos: carro1 = new Automvel( Chevette , 87 ); motorista1 = new Motorista( Joo, carro1 );

Mtodos

Entry Point public static void main(...)

motorista2 = new Motorista( Pedro ,carro1 ); // Imprimindo o nome dos motoristas: System.out.println( motorista1.obterNome( ) ); System.out.println( motorista2.obterNome( ) ); } }

Kjskskdfg Kjskskdfg Qwkj,ks Qwkj,ks Sdfglkm Sdfglkm sdfglkljp sdfglkljp wopiodf wopiodf Asdfkjasdf Asdfkjasdf Asdfkasdf Asdfkasdf Asdkfkajsdf Asdkfkajsdf Asdfasdf Asdfasdf asdfjkhdf asdfjkhdf fkjhasdf fkjhasdf dkfkajsdf dkfkajsdf

Automvel.java Motorista.java MeuPrograma.java

Criao dos arquivos fonte (.java), contendo a definio das classes.

Compilao dos arquivos fonte gerando bytecode pronto para ser executado na JVM. Arquivos .class. C:\>javac *.java C:\>dir/b Automvel.class MeuPrograma.class Motorista.class C:\>_ Execuo da JVM interpretando o programa:

Compilador Java
Automvel.class MeuPrograma.class Motorista.class

Java Virtual Machine C:\>java MeuPrograma Joo Pedro C:\>_

Plataforma Nativa

MeuPrograma.java MeuPrograma.java
class MeuPrograma{ private Automvel carro1; private Motorista motorista1, motorista2; // Entry point do programa: public static void main( String args[ ] ) { // Instanciando novos objetos: carro1 = new Automvel( Chevette , 87 ); motorista1 = new Motorista( Joo, carro1 ); motorista2 = new Motorista( Pedro ,carro1 ); // Imprimindo o nome dos motoristas: System.out.println( motorista1.obterNome( ) ); System.out.println( motorista2.obterNome( ) ); } }

Durante a execuo...

memria

objeto MeuPrograma Motorista1 = Motorista2 = Carro1 =

null null null

MeuPrograma.java MeuPrograma.java
class MeuPrograma{ private Automvel carro1; private Motorista motorista1, motorista2; // Entry point do programa: public static void main( String args[ ] ) { // Instanciando novos objetos: carro1 = new Automvel( Chevette , 87 ); motorista1 = new Motorista( Joo, carro1 ); motorista2 = new Motorista( Pedro ,carro1 ); // Imprimindo o nome dos motoristas: System.out.println( motorista1.obterNome( ) ); System.out.println( motorista2.obterNome( ) ); } }

Durante a execuo...

memria

Durante a execuo...

objeto MeuPrograma Motorista1 = Motorista2 = Carro1 =

null null

Objeto carro1 modelo = Chevette Ano = 87 Ligado = false

MeuPrograma.java MeuPrograma.java
class MeuPrograma{ private Automvel carro1; private Motorista motorista1, motorista2; // Entry point do programa: public static void main( String args[ ] ) { // Instanciando novos objetos: carro1 = new Automvel( Chevette , 87 ); motorista1 = new Motorista( Joo, carro1 ); motorista2 = new Motorista( Pedro ,carro1 ); // Imprimindo o nome dos motoristas: System.out.println( motorista1.obterNome( ) ); System.out.println( motorista2.obterNome( ) ); } }

Durante a execuo...

memria

Durante a execuo...

objeto MeuPrograma Motorista1 = Motorista2 = Carro1 =

Objeto motorista1 Nome = Joo Carro =

null

Objeto carro1 modelo = Chevette Ano = 87 Ligado = false

MeuPrograma.java MeuPrograma.java
class MeuPrograma{ private Automvel carro1; private Motorista motorista1, motorista2; // Entry point do programa: public static void main( String args[ ] ) { // Instanciando novos objetos: carro1 = new Automvel( Chevette , 87 ); motorista1 = new Motorista( Joo, carro1 ); motorista2 = new Motorista( Pedro ,carro1 ); // Imprimindo o nome dos motoristas: System.out.println( motorista1.obterNome( ) ); System.out.println( motorista2.obterNome( ) ); } }

Durante a execuo...

memria

Durante a execuo...

objeto MeuPrograma Motorista1 = Motorista2 = Carro1 =

Objeto motorista1 Nome = Joo Carro =

Objeto motorista2 Nome = Pedro Carro =

Objeto carro1 modelo = Chevette Ano = 87 Ligado = false

MeuPrograma.java MeuPrograma.java
class MeuPrograma{ private Automvel carro1; private Motorista motorista1, motorista2; // Entry point do programa: public static void main( String args[ ] ) { // Instanciando novos objetos: carro1 = new Automvel( Chevette , 87 ); motorista1 = new Motorista( Joo, carro1 ); motorista2 = new Motorista( Pedro ,carro1 ); // Imprimindo o nome dos motoristas: System.out.println( motorista1.obterNome( ) ); System.out.println( motorista2.obterNome( ) ); } }

Durante a execuo...

memria

Durante a execuo...

Classe System static PrintStream out . . . (mtodos) Objeto out

Classe PrintStream (atributos) void println( String x ) . . .

As trs caractersticas da orientao objetos:


(de forma simplificada e direta)

Encapsulamento
Classes so estruturas que definem e guardam tanto dados quanto os algoritmos para tratar esses dados.

Herana
Classes podem ser definidas a partir de outras classes.

Polimorfismo
Uma dada varivel pode em momentos distintos dentro da execuo de um programa guardar tipo de dados diferentes.

A linguagem Java e o encapsulamento: A linguagem Java e a herana: A linguagem Java e o polimorfismo:

Classe Automvel class Automvel { Atributos modelo ano Definio dos atributos... ligado public String modelo; public int ano; private boolean ligado;

Automvel.java Automvel.java

// Instanciar novo automvel Automvel ( String m, int a ) { Atributos epublic mtodos foram Atributos e mtodos foram modelo = m ; encapsulados na classe Automvel. encapsulados na classe ano = Automvel. a; ligado = false;

Mtodos

Qual a interface } da classe automvel Qual a interface da classe automvel Instanciar novo Automvel com o mundo externo? com o mundo externo? // Ligar automvel public Automvel( ... ) Definio dos mtodos... Ligar Automvel
public void liga() public void liga( ) { ligado = true; } // Desligar automvel public void desliga( ) { ligado = false; } }

Desligar Automvel public void desliga()

Classe Automvel Atributos modelo ligado ano

Viso externa da classe Automvel:

modelo

ano

Mtodos Instanciar novo Automvel public Automvel( ... ) Instanciar novo Automvel public Automvel( ... )

Ligar Automvel public void liga()

Ligar Automvel public void liga()

Desligar Automvel public void desliga()

Desligar Automvel public void desliga()

A linguagem Java e o encapsulamento:

A linguagem Java e a herana:


A linguagem Java e o polimorfismo:

Automvel.java Automvel.java
class Automvel { public String modelo; public int ano; private boolean ligado; // Instanciar novo automvel public Automvel( String m, int a ) { modelo = m; ano = a; ligado = false; } // Ligar automvel public void liga( ) { ligado = true; } // Desligar automvel public void desliga( ) { ligado = false; } } class Automvel { public int ano;

Automvel.java Automvel.java

private boolean ligado; // Instanciar novo automvel public Automvel( int a ) { ano = a; Re-modelando a classe Re-modelando a classe ligado Automvel: = false; Automvel: }

Como criar modelos de // Ligar automvel Como criar modelos de automvel public void liga( ) { automvel ligado = true ; elegante? de forma mais } de forma mais elegante?
// Desligar automvel public void desliga( ) { ligado = false; }

Classe Automvel Atributos ano ligado Mtodos Instanciar Ligar Desligar

Chevette.java Chevette.java
class Chevette extends Automvel { // Instanciar novo Chevette: public Chevette( int a ) { // Acessando o construtor da // classe Automvel: super( a ); }

Qual a cara de um objeto Chevette? Qual a cara de um objeto Chevette?


// Consertar o Chevette: public void conserta( ) { ligado = false; } }

Herana: Operao invlida!!! Operao invlida!!! O Atributo ligado privado na O Atributo ligado privado na Classe Chevette classe Automvel. Logo, a classe classe Automvel. Logo, a classe Mtodos Chevette no pode acess-lo Chevette no pode acess-lo mesmo sendo sua herdeira. mesmo sendoInstanciar sua herdeira.
Consertar

Objeto Chevette Atributos ano ligado

Atributos herdados da classe Automvel

Mtodos Instanciar novo Chevette public Chevette( ... ) Ligar Automvel public void liga() Desligar Automvel public void desliga() Consertar Chevette public void conserta()

Mtodo declarado na classe Chevette

Mtodos herdados da classe Automvel

Mtodo declarado na classe Chevette

Operaes Operaesvlidas vlidascom comum umobjeto objetoChevette: Chevette:

// Instanciando um novo Chevette: Chevette meuChevette = new Chevette( 88 ); // Acessando o mtodo declarado na classe Chevette: A classe Chevette definida a partir da classe meuChevette .conserta ( ); A classe Chevette definida a partir da classe

Automvel utilizando herana. A classe Automvel utilizando herana. A classe Automvel pode possuir outras herdeiras? // Acessando os mtodos declarados super Automvel pode possuir outrasna herdeiras?
// classe Automvel: meuChevette.liga( ); meuChevette.desliga( );

// Acessando os atributos declarados na super // classe Automvel: meuChevette.ano = 2005;

Classe Automvel Atributos ano ligado Mtodos Instanciar Ligar

DelRey.java DelRey.java
class DelRey extends Automvel { private String cor; // Instanciar novo DelRey: public DelRey( int a, String c ) {

A classe Chevette foi definida a partir o da classe da // Acessando construtor A classe Chevette foi definida a partir da classe Automvel utilizando herana. Podemos criar // classe Automvel: Automvel utilizando herana. Podemos criar Desligar agora classes herdeiras de ? super( a Chevette ); agora classes herdeiras de Chevette? Herana:
}
Classe DelRey

cor = c; }

Atributos
cor Mtodos Instanciar

Classe Automvel Herana:

ChevetteSL.java ChevetteSL.java
Classe Chevette Mtodos Instanciar Consertar

class ChevetteSL extends Chevette { boolean arLigado; // Instanciar novo ChevetteSL: public ChevetteSL( int a ) { // Acessando o construtor da // super classe Chevette: super( a ); } // Ligar ar-condicionado: public void ligaAr( ) { arLigado = true; } // Desligar ar-condicionado: public void desligaAr( ) { arLigado = false; }

Herana:
Classe ChevetteSL

Atributos
arLigado Mtodos Instanciar Ligar Ar Desligar Ar

Nossa Nossarvore rvoregenealgica genealgicaatual: atual:

Classe Automvel

Seria possvel uma classe Seria possvel uma classe herdar de duas outras classes? herdar de duas outras Java NOclasses? permite este recurso, Java NO permite este recurso, Classe Chevette conhecido como herana mltipla. conhecido como herana mltipla. Mtodos
Instanciar Classe ChevetteSL Consertar

Classe DelRey

Atributos
cor Mtodos Instanciar

Atributos
arLigado Mtodos Instanciar Ligar Ar Desligar Ar

Classe X Mtodos Instanciar

A linguagem Java e o encapsulamento: A linguagem Java e a herana:

A linguagem Java e o polimorfismo:

Classe Garagem Atributos vagas[ ] Mtodos Instanciar nova Garagem public Garagem( ) Obter Automvel public void obter...(int)

Garagem.java Garagem.java
class Garagem { private Automvel vagas[ ]; // Instanciar nova garagem public Garagem( ) { vagas = new Automvel [ 5 ]; vagas[ 0 ] = new Automvel( 76 ); vagas[ 1 ] = new Chevette( 88 ); vagas[ 2 ] = new Chevette( 93 );; vagas[ 3 ] = new ChevetteSL( 88 ); vagas[ 4 ] = new DelRey( 88, Branco ); } // Obter automvel public Automvel obterAutomvel( int posio ) { return vagas[ posio ]; } }

class MeuPrograma2 {

class Garagem {

MeuPrograma2.java MeuPrograma2.java

Garagem.java Garagem.java

private Automvel vagas[ ]; C:\>javac *.java ; private Garagem minhaGaragem // Instanciar nova garagem C:\>dir automvel; private Automvel public Garagem( ) { Automvel.class vagas = new Automvel [ 5 ]; Chevette.class // Entry point do programa: public static void main( String args[ ] ) { ChevetteSL.class vagas[ 0 ] = new Automvel( 76 ); DelRey.class // Instanciando um novo objeto Garagem:: Garagem.class minhaGaragem = new Garagem( ); vagas[ 1 ] = new Chevette( 88 ); vagas[ 2 ] = new Chevette( 93 );; MeuPrograma2.class

vagas[ 3 ] = new ChevetteSL( 88 ); // Imprimindo a classe de cada automvel: for ( int i = 0; i < 5; i++ ){ C:\>java MeuPrograma2 vagas[ 4 ] = new DelRey( 88, Branco ); } Automvel automvel = minhaGaragem.obterAutomvel ( i ); Chevette System .out.println( automvel.getClass( ).getName( ) ); } Chevette // Obter automvel ChevetteSL } public Automvel obterAutomvel( int posio ) { DelRey return vagas[ posio ]; } C:\>_ } }

MeuPrograma2.java MeuPrograma2.java
class MeuPrograma2 { private Garagem minhaGaragem; private Automvel automvel; // Entry point do programa: public static void main( String args[ ] ) { // Instanciando um novo objeto Garagem:: minhaGaragem = new Garagem( ); // Imprimindo a classe de cada automvel: for ( int i = 0; i < 5; i++ ){ automvel = minhaGaragem.obterAutomvel( i ); System.out.println( automvel.getClass( ).getName( ) );

} (continuando...) } }

MeuPrograma2.java MeuPrograma2.java
// Imprimindo a classe de cada automvel: for ( int i = 0; i < 5; i++ ){ automvel = minhaGaragem.obterAutomvel( i ); System.out.println( automvel.getClass( ).getName( ) );

} (continuando...)

// Sabemos que a posio 3 possui um ChevetteSL. // Vamos tentar obter esse carro e ligar o ar condicionado: automvel = minhaGaragem.obterAutomvel( 3 ); automvel.ligaAr( true );

// O cdigo correto seria: automvel = (ChevetteSL) automvel; automvel.ligaAr( true ); } }

ERRO DE COMPILAO!! ERRO DE COMPILAO!! Embora a runtime class da varivel automvel Embora a runtime class da varivel automvel seja ChevetteSL, essa varivel foi declarada como seja ChevetteSL, essa varivel foi declarada como sendo Automvel, e a classe Automvel no sendo Automvel, e a classe Automvel no possui o mtodo ligaAr(...) possui o mtodo ligaAr(...)