Você está na página 1de 20

Orientação a objetos

em Java

Parte 1

Aline de Campos / alinedecampos[a]gmail.com


LINGUAGENS DE PROGRAMAÇÃO II
breve histórico
Teve início nos anos 60 com o surgimento da
linguagem Simula.
Entre a década de 60 e 70 surgiu a linguagem Lisp,
proveniente do Algol, a qual foi desenvolvida
vagarosamente em relação as demais linguagens.
Surgimento da linguagem Smalltalk, considerada a
primeira linguagem “autentica” OO.

Aline de Campos / alinedecampos[a]gmail.com


A partir da década de 80 a linguagem C foi
expandida, criando-se assim o C++.
Na década de 90 surgiu a linguagem Java
(Primeira versão em 23.01.1996).

LINGUAGENS DE PROGRAMAÇÃO II
paradigma de orientação a objetos

Paradigma de programação que mais influencia


novas linguagens, atualmente

Conceitos básicos
Algumas linguagens não suportam a orientação à
objetos - C, Pascal
Algumas linguagens suportam mas não obrigam -
C++, PHP

Aline de Campos / alinedecampos[a]gmail.com


Algumas linguagens exigem o uso da técnica – Java

LINGUAGENS DE PROGRAMAÇÃO II
Objetos... ?
“Objetos são coisas que podem ser manipuladas.”
Martin, R.C.

Paradigma: objetos entendem mensagens


particulares e reagem sobre elas. Objetos são
compostos por: estado, operações e

Aline de Campos / alinedecampos[a]gmail.com


identidade. Cada objeto é uma instância de
uma classe.

LINGUAGENS DE PROGRAMAÇÃO II
Objetos... ?
Objeto é uma abstração dos objetos reais existentes.
Exemplo: sala de aula há alunos, cadeiras, mesas, lousas. Para controlar este objeto
seria possível desenvolver algo que manipulasse suas características e ações.

Aos objetos estão Considerando um


associados: objeto carro:

estados: estados:
conjunto de propriedades cor, modelo, ano

Aline de Campos / alinedecampos[a]gmail.com


comportamentos: comportamentos:
ações possíveis acelerar, frear, verificar
velocidade

LINGUAGENS DE PROGRAMAÇÃO II
Objetos... ?
Para armazenar um estado Um objeto
um objeto utiliza de uma ou operações
diversas variáveis

O comportamento de um Estrutura
de dados
objeto é definido pelo
conjunto de métodos possui.
Um círculo

Aline de Campos / alinedecampos[a]gmail.com


move(x,y) aumenta(raio)
x,y: coordendadas do Raio
X
centro do círculo
Y
calculaArea() mostra()

LINGUAGENS DE PROGRAMAÇÃO II
então...

Classe
É aquilo que caracteriza um conjunto de
objetos semelhantes

Objeto
É algo que existe em determinado momento

Aline de Campos / alinedecampos[a]gmail.com


É uma instância de uma classe
Cada objeto apresenta um estado
independente de outro objeto

LINGUAGENS DE PROGRAMAÇÃO II
mensagens
Objetos se comunicam trocando mensagens.
É a chamada de um método de um objeto.

Uma mensagem consiste em:


– o objeto de destino
– o nome do método a ser executado
– os parâmetros necessários pelo método

Aline de Campos / alinedecampos[a]gmail.com


Quando o objeto A deseja que o objeto B faça um de seus métodos, A envia uma
mensagem para B. Às vezes o objeto que recebe a mensagem necessita de mais
informações sobre o que ele deve realmente fazer, por exemplo, quando você
quiser trocar a marcha de seu automóvel, precisa informar que marcha deseja.
Essas informações são passadas junto com a mensagem como parâmetros.

LINGUAGENS DE PROGRAMAÇÃO II
mensagens

Mensagens oferecem dois grandes benefícios:

1) o comportamento e a funcionalidade do objeto


são expressados pelos seus métodos, por isso a
troca de mensagens suporta todas as possíveis
interações entre objetos.

2) os objetos não precisam estar no mesmo

Aline de Campos / alinedecampos[a]gmail.com


processo, nem mesmo na mesma máquina, para
enviar ou receber mensagens.

LINGUAGENS DE PROGRAMAÇÃO II
utilização de objetos
Uma classe permite criar objetos que serão utilizados por outras classes.

1) Declaração do objeto: padrão de declaração para tipos primitivos,


ou seja, <nome-do-classe nome-do-objeto> Ex.: Produto1 produto1

2) Instância do objeto: criação do objeto, alocação de memória para


armazenamento de informações. Utilizando o operador new.
<nome-do-objeto = new(“inicialização-do-objeto”)>

3) Inicialização do objeto: definição de valores iniciais para as


variáveis do objeto. Utiliza-se do pseudo-métodos construtor.

Aline de Campos / alinedecampos[a]gmail.com


nome-da-classe nome-do-objeto = new nome-do-construtor();

Ou

nome-da-classe nome-do-objeto;
nome-do-objeto = new nome-do-construtor();

LINGUAGENS DE PROGRAMAÇÃO II
class UsaProduto1 { public class Produto1 {
public static void main (String args[]) { String nome;
double preco;
Produto1 produto1 = new Produto1(); }
Produto1 produto2 = new Produto1();
Produto1 produto3 = new Produto1();

System.out.println("nome do produto1 = " + produto1.nome);


System.out.println("preco do produto1 = " + produto1.preco);

produto1.nome = "Shampoo";
produto1.preco = 1.34;
System.out.println(produto1.nome + " - " + produto1.preco);

produto2.nome = "Sabonete";

Aline de Campos / alinedecampos[a]gmail.com


produto2.preco = 2.58;
System.out.println(produto2.nome + " - " + produto2.preco);

produto3.nome = "Detergente";
produto3.preco = 3.89;
System.out.println(produto3.nome + " - " + produto3.preco);
}
}
LINGUAGENS DE PROGRAMAÇÃO II
compartilhamento de variáveis entre objetos

Cada objeto criado trata as variáveis de instância de forma


exclusiva, isto é, cada objeto possui uma variável atrelada a
si próprio.

Há casos em que se necessita que o conteúdo da variável


seja controlado pela classe e não por seus objetos. Para
isso basta declarar a variável como static, ou seja, uma
“variável de classe”.

Aline de Campos / alinedecampos[a]gmail.com


LINGUAGENS DE PROGRAMAÇÃO II
public class Produto2 {
class UsaProduto2 {
String nome;
public static void main (String args[]) { double preco;
Produto2 produto1 = new Produto2(); static double
Produto2 produto2 = new Produto2(); total;
Produto2 produto3 = new Produto2(); }

produto1.preco = 1;
produto1.total = produto1.total + produto1.preco;
System.out.println("Total = " + produto1.total);

produto2.preco = 2; Total: 1.0


produto2.total = produto2.total + produto2.preco; Total: 3.0
System.out.println("Total = " + produto2.total);

Aline de Campos / alinedecampos[a]gmail.com


Total: 6.0
produto3.preco = 3;
produto3.total = produto3.total + produto3.preco;
System.out.println("Total = " + produto3.total);
}
}

LINGUAGENS DE PROGRAMAÇÃO II
declaração de métodos de uma classe
A partir da definição de uma classe podem ser criados inúmeros objetos
que passam a conter o estado e o comportamento declarados na classe.

Para utilizar métodos de uma classe em objetos, temos o exemplo:

public class Produto3


{
String nome;
double preco;
static double total;

Aline de Campos / alinedecampos[a]gmail.com


public void atualizaPreco(double
porc) {
preco = preco + (preco *
porc / 100);
}
}
LINGUAGENS DE PROGRAMAÇÃO II
declaração de métodos de uma classe

class UsaProduto3
{
public static void main (String args[])
{
Produto3 produto = new Produto3();
produto.preco = 100.00;
System.out.println("Preco inicial = " + produto.preco);
produto.atualizaPreco(20); // 20% sobre o preco
System.out.println("Preco com aumento = " +

Aline de Campos / alinedecampos[a]gmail.com


produto.preco);
}
}

LINGUAGENS DE PROGRAMAÇÃO II
sobre o construtor

Determina que ações devem ser executadas quando da criação de


um objeto. Definido como um método deve ter o mesmo nome da
classe e sem indicação do tipo de retorno (nem mesmo void).

O construtor é chamado no momento da criação do objeto através do


operador new. O retorno é uma referência para o objeto recém-
criado.

O construtor pode receber argumentos. Usando o mecanismo de


sobrecarga, mais de um construtor pode ser definido para uma

Aline de Campos / alinedecampos[a]gmail.com


classe.

Toda classe tem pelo menos um construtor sempre definido. Se


nenhum construtor for definido, um construtor padrão, que não
recebe argumentos, é incluído para a classe pelo compilador Java.

LINGUAGENS DE PROGRAMAÇÃO II
sobre o construtor
No momento em que um construtor é invocado, a seguinte
seqüência de ações é executada para a criação de um objeto:

1) O espaço para o objeto é alocado e seu conteúdo é inicializado


com zeros.

2) Os membros da classe são inicializados para o objeto, seguindo


a ordem em que foram declarados na classe.

3) O restante do corpo do construtor é executado.

Aline de Campos / alinedecampos[a]gmail.com


Seguir essa seqüência é uma necessidade de forma a garantir que, quando o
corpo de um construtor esteja sendo executado, o objeto já terá à disposição
as funcionalidades mínimas necessárias, quais sejam aquelas definidas por
seus ancestrais. O primeiro passo garante que nenhum campo do objeto terá
um valor arbitrário, que possa tornar erros de não inicialização difíceis de
detectar.

LINGUAGENS DE PROGRAMAÇÃO II
class Cliente {
int codigo;
String nome;
String cidade;

public Cliente() {
}

public Cliente(int codigo) {


this.codigo = codigo;
}

public Cliente(String nome) {


this.nome = nome;

Aline de Campos / alinedecampos[a]gmail.com


}

public Cliente(int codigo, String nome) {


this.codigo = codigo;
this.nome = nome;
this.cidade = "Indaiatuba";
}
}

LINGUAGENS DE PROGRAMAÇÃO II
class UsaCliente
{
public static void main(String args[])
{
Cliente c1 = new Cliente();
Cliente c2 = new Cliente(1);
Cliente c3 = new Cliente(“João");
Cliente c4 = new Cliente(2,“Nestor");
System.out.println(c1.codigo + " - " + c1.nome + " - " + c1.cidade);
System.out.println(c2.codigo + " - " + c2.nome + " - " + c2.cidade);
System.out.println(c3.codigo + " - " + c3.nome + " - " + c3.cidade);

Aline de Campos / alinedecampos[a]gmail.com


System.out.println(c4.codigo + " - " + c4.nome + " - " + c4.cidade);
}
}

LINGUAGENS DE PROGRAMAÇÃO II
sobre o destrutor

Responsáveis por liberar recursos usados pelos objetos


durante a execução do programa.

Para isso java conta com a “Coleta automática de lixo”, o


automatic garbage collection.

Assim que o programa ficar ocioso, o gerenciador


automático de memória destrói os objetos perdidos,

Aline de Campos / alinedecampos[a]gmail.com


liberando os recursos ao sistema. Com esse processo
torna-se desnecessário liberar a memória explicitamente
em um programa em Java, uma vez que isso é feito
automaticamente.

LINGUAGENS DE PROGRAMAÇÃO II