Vous êtes sur la page 1sur 7

DCC / ICEx / UFMG

Tpicos da Aula
Conceitos de classe

Classes e Objetos

Membros

Eduardo Figueiredo
http://www.dcc.ufmg.br/~figueiredo

Construtores, mtodos de classe e


mtodos de objeto, atributos de classe e
atributos de objeto

Relacionamentos entre classes


Associao e Herana

Classe Pblica em Java


Declarao de uma classe pblica
(public) deve ser feita em um arquivo
de mesmo nome

Classes em Java

Com a extenso
.java

public class Carro {


String cor;
int velocidadeAtual;

Modificador public
permite acesso /
chamadas de
qualquer outra classe

Corpo de Classes e Mtodos


O corpo de uma classe delimitado
por chaves { }
O corpo de um mtodo
tambm delimitado
por chaves { }

public class Carro {


String cor;
int velocidadeAtual;
void acelerar() {...}
void frear() {...}
}

void acelerar() {}
void frear() {}
}
Arquivo Carro.java

Assinatura de Mtodos
Modificador + Tipo de Retorno +
Nome do Mtodo + Lista de Parmetros
Modificador: public | private | protected | ...
Tipo de Retorno: void | int | String | ...
Nome:
acelerar | frear | ...
Parmetros:
delimitado por
parnteses

public class Carro {


private String cor;
private int velocidadeAtual;
public void acelerar() {}
public void frear() {}
}

Visibilidade em UML

Visibilidade UML x Java

Pblica (+)
public class Pessoa {

O atributo ou mtodo pode ser


utilizado por qualquer classe

protected String nome;


private String email;

Protegida (#)

public void enviarMensagem() {


...
}

Somente a classe ou
sub-classes tero acesso
}

Privada (-)
Somente a classe ter acesso

Membros de Uma Classe


Construtor
Mtodos

Construtores de Objetos

De classe
De objeto

Variveis
De classe
De Objeto

Constantes

Construtor Padro

Exemplo: Time1
public class Time1 {

Toda classe deve ter pelo menos um


construtor

private int hour; // 0 - 23


private int minute; // 0 - 59
private int second; // 0 - 59

Responsvel pela criao do objeto


A chamada do construtor deve ser
precedida pela palavra reservada new

public void setTime( int h, int m, int s ) {


hour = ( ( h >= 0 && h < 24 ) ? h : 0 );
minute = ( ( m >= 0 && m < 60 ) ? m : 0 );
second = ( ( s >= 0 && s < 60 ) ? s : 0 );
}

Se nenhum construtor for declarado, o


compilador adiciona automaticamente o
construtor padro
Construtor vazio e sem parmetros

Construtor vazio da classe


no precisa ser declarado.
public Time1 ( ) {
}

public String toString() {


return ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 ) + ":" +
minute + ":" + second + " " + ( hour < 12 ? "AM" : "PM" );
}
}

Construtores Sobrecarregados

Exemplo: Time1Test
public class Time1Test {
public static void main( String[] args ) {
Time1 time = new Time1();
System.out.print( "Hora inicial: " );
System.out.println( time.toString() );
System.out.println();

Pode-se definir vrios construtores


para uma classe

Chamada ao
construtor padro
cria um objeto Time1.

Construtores devem ter assinaturas


diferentes (parmetros)

time.setTime( 13, 27, 6 );


System.out.print( "Hora apos setTime: " );
System.out.println( time.toString() );
System.out.println();

Se for declarado algum construtor, o


vazio s existe quando declarado

time.setTime( 99, 99, 99 );


System.out.println( "Apos definir hora invalida." );
System.out.print( "Hora: " );
System.out.println( time.toString() );

Construtor vazio s no precisa ser


declarado se no existe outro construtor

}
}

Exemplo: Time2

Exemplo: Time2

public class Time2 {

public class Time2 {

Se outros construtores forem

public Time2() {
declarados, o construtor
this( 0, 0, 0 );
padro (sem argumentos) no
}
fornecido automaticamente.
public Time2( int h ) {
this( h, 0, 0 );
}
public Time2( int h, int m ) {
this( h, m, 0 );
}
public Time2( int h, int m, int s ) {
setTime( h, m, s );
}
public Time2( Time2 time ) {
this( time.getHour(), time.getMinute(), time.getSecond() );
}
...

public Time2() {
this( 0, 0, 0 );
}
public Time2( int h ) {
this( h, 0, 0 );
}
public Time2( int h, int m ) {
this( h, m, 0 );
}
public Time2( int h, int m, int s ) {
Construtores da
setTime( h, m, s );
classe Time2.
}
public Time2( Time2 time ) {
this( time.getHour(), time.getMinute(), time.getSecond() );
}
...
}

Exemplo: Time2

Exemplo: Time2Test

public class Time2 {


public Time2() {
A referncia this indica a
this( 0, 0, 0 );
chamada do construtor
}
correspondente.
public Time2( int h ) {
this( h, 0, 0 );
}
public Time2( int h, int m ) {
this( h, m, 0 );
}
public Time2( int h, int m, int s ) {
setTime( h, m, s );
}
public Time2( Time2 time ) {
this( time.getHour(), time.getMinute(), time.getSecond() );
}
...
}

public class Time2Test {


public static void main( String[] args ) {
Time2 t1 = new Time2();
Time2 t2 = new Time2( 2 );
Time2 t3 = new Time2( 21, 34 );
Time2 t4 = new Time2( 12, 25, 42 );
Time2 t5 = new Time2( 27, 74, 99 );
Time2 t6 = new Time2( t4 );

Criao de 6 objetos
usando diferentes
construtores.

System.out.print( "t1: " ); System.out.println( t1.toString() );


System.out.print( "t2: " ); System.out.println( t2.toString() );
System.out.print( "t3: " ); System.out.println( t3.toString() );
System.out.print( "t4: " ); System.out.println( t4.toString() );
System.out.print( "t5: " ); System.out.println( t5.toString() );
System.out.print( "t6: " ); System.out.println( t6.toString() );
}
}

Mtodo finalize
O mtodo finalize esta disponvel em
todo objeto

Mtodos, Variveis e
Constantes

Ele pertence a classe Object, que toda


classe estende direta ou indiretamente

Antes de um objeto ser descartado pelo


coletor de lixo, o mtodo finalize
chamado
Este mtodo pode ser sobrescrito por
qualquer objeto (o que deve ser evitado)

Membros Estticos

Exemplo: Employee
Varivel de classe conta o
public class Employee {
private String firstName;
nmero de objetos Employee.
private String lastName;
protected static int count = 0;

Varivel de Classe
Usada quando apenas uma varivel
compartilhada pelos objetos da classe

public Employee( String first, String last ) {


firstName = first;
lastName = last;
Um mtodo esttico s pode acessar
++count;
}
diretamente membros estticos.

Mtodo de Classe
Funes que podem ser executadas
independente de um objeto

public String getFirstName() { return firstName; }


public String getLastName() { return lastName; }

Variveis e mtodos estticos podem


ser usados mesmo sem nenhum objeto

public static int getCount() {


return count;
}
}

Exemplo: EmployeeTest

Exemplo: EmployeeTest

public class EmployeeTest {


public static void main( String[] args ) {
System.out.println( "Incio do programa, count: " + Employee.count);
Employee e1 = new Employee( "Susan", "Baker" );
Cria Employee
System.out.println( "Criou Susan" );
Susan.
System.out.println( "e1.count: " + e1.count);
Employee e2 = new Employee( "Bob", "Blue" );
System.out.println( "Criou Bob" );
System.out.println( "e2.count: " + e2.count);

public class EmployeeTest {


public static void main( String[] args ) {
System.out.println( "Incio do programa, count: " + Employee.count);
Employee e1 = new Employee( "Susan", "Baker" );
System.out.println( "Criou Susan" );
System.out.println( "e1.count: " + e1.count);
Employee e2 = new Employee( "Bob", "Blue" );
Os
valores so o mesmos (2) porque os objetos
System.out.println( "Criou Bob" );
compartilham
a mesma
varivel count
System.out.println(
"e2.count:
" + e2.count);

Cria Employee
Bob.

System.out.println( "" );
System.out.println( "Employee.count: " + Employee.count);
System.out.println( "e1.count: " + e1.count);
System.out.println( "e2.count: " + e2.count);

System.out.println( "" );
System.out.println( "Employee.count: " + Employee.count);
System.out.println( "e1.count: " + e1.count);
System.out.println( "e2.count: " + e2.count);

}
}

}
}

Constantes

Exemplo: Increment

O modificador final usado para indicar


constantes do programa

public class Increment {


private int total = 0;
private final int INCREMENT;

Os valores no podem ser modificados

A padronizao do nome de
constantes MAIUSCULO.

public Increment( int incrementValue ) {


INCREMENT = incrementValue;
}

O uso do modificador final torna o


programa mais robusto

public void addIncrementToTotal() {


total += INCREMENT;
}

Evita que o valor seja acidentalmente


modificado

public String toString() {


return "total = " + total;
}

O valor de uma
constante s pode ser
alterado no construtor.
Constantes podem ser
acessadas da mesma
forma que variveis.

Exemplo: IncrementTest
public class IncrementTest {
public static void main( String[] args ) {
Increment value = new Increment( 5 );

Associao e Herana

System.out.println( "Before incrementing: " + value );


for ( int i = 1; i <= 3; i++ ) {
value.addIncrementToTotal();
System.out.println( "After increment " + i + ": " + value );
}
}
}

Associao e Composio
Uma classe pode ter referncias para
objetos de outras classes
Exemplo, para saber quando despertar,
um relgio tem que saber a hora
AlarmClock

setAlarm()

Time
hour
minute
second
...

Associao em Java
public class AlarmClock {
protected Time alarm;
public void setAlarm(Time1 time) { alarm = time; }
...
}
AlarmClock

setAlarm()

Time
hour
minute
second
...

Especializao / Generalizao

Herana em UML

Identificar super-classe (geral) e subclasses (especializadas)

Pessoa
nome
email

Semntica um
Tudo que a classe geral pode fazer,
as classes especficas tambm podem

Atributos e mtodos definidos na


classe-me so herdados pelas
classes-filhas

Herana em Java

Professor

Aluno
matricula

Outro Exemplo UML

// Pessoa.java
public class Pessoa {
protected String nome;
private String email;
public void enviarMensagem() { ... }
}
// Aluno.java
public class Aluno extends Pessoa {
private String matricula;
}
// Professor.java
public class Professor extends Pessoa {
}

Vantagens da Herana
O grfico de herana uma fonte de
conhecimento sobre o domnio do
sistema
um mecanismo de abstrao usado
para classificar entidades
Mecanismo de reuso em vrios nveis
Tanto na fase de projeto como na
programao

Principal Problema
Classes de objetos no so autocontidas
No podem ser compreendidas sem
olhar para as suas super-classes

Membros Protegidos
Podem ser acessados por sub-classes
mesmo que estejam em pacotes
diferentes
public class Pessoa {
Acessvel s classes
protected String nome;
Aluno e Professor
private String email;
public void enviarMensagem() { ... }
}
public class Aluno extends Pessoa { ... }
public class Professor extends Pessoa { ... }

Bibliografia da Aula
DEITEL, H. M.; DEITEL P. J. Java:
Como Programar, 8a. Edio.
Pearson, 2010.
Captulo 8 Classes e Objetos
Captulo 9 Herana

Vous aimerez peut-être aussi