Post on 24-Dec-2015
description
Programação Orientada a Objeto em JAVA -
Fundamentos
Programação Orientada a Objeto Prof. Udo Fritzke Jr. Curso de Ciência da Computação PUC-Minas, Campus de Poços de Caldas
1
História
• 1991: Projeto de uma linguagem (na Sun, por Patrick Naughton e James Gosling) para equipamentos de consumo (Projeto Green) – Linguagem “enxuta”
– e independente de arquitetura de hardware
• Independência de arquitetura : inspiração no UCSD Pascal – Máquina Virtual: máquina hipotética para a qual é
gerado código intermediário (ou bytecode)
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 2
História
• Orientação a objeto: inspiração no C++, devido a experiência com Unix
• Primeiros protótipos: – Controle remoto (com poder de processamento de
uma Sparc Station)
– Comutador de TV a cabo
• 1994 : A empresa que comercializou o projeto Green (First Person, Inc.) foi dissolvida
• Construção de um navegador (HotJava) capaz de entender os bytecodes do Java
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 3
História
• 1995: início do uso de Java na Internet
– Por ser uma linguagem multi-plataforma e incluir aspectos específicos como
• Programação em rede
• Conectividade com BD
• Multi-processamento
• Segurança, etc
• Uso de bytecodes Java no Netscape 2.0 : início da popularização da linguagem
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 4
História
• Versões do Java SE: – J2SE 1.02 de 1996
• Invocação remota de métodos (objetos distribuídos)
• Conectividade com bancos de dados
– J2SE 1.1 de 1997 • Modelo de componentes JavaBeans
– J2SE 1.2 de 1998 • Toolkit de GUI (Swing)
– J2SE 1.3, J2SE 1.4, J2SE 5
– Atualmente: Java SE 7
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 5
Plataformas
• Java SE (Standard Edition) – Para aplicações em desktops e servidores – java.sun.com/javase/
• Java EE (Enterprise Edition) – Para construção de aplicações empresariais
orientadas a serviço (SOA – Service Oriented Architectures)
– java.sun.com/javaee/
• Java ME (Micro Edition) – Para aplicações em dispositivos móveis – java.sun.com/javame/index.jsp
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 6
Arquivo com código executável (extensão .exe)
int outras_funcoes()
{
...
}
Compilador
Linguagem C
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 7
/* código-fonte C */
int main()
{
Mova(personagem1, ...);
system("pause");
}
void outras_funcoes()
{
...
}
Editor de ligações (linkeditor)
ou
ou
…
Exclusivo para uma arquitetura específica
01011101 10010101 10111010 10010011
Arquivos com código-objeto (extensão .obj)
01011101 10010101 10111010 10010011
01011101 10010101 10111010 10010011
01011101 10010101 10111010 10010011
int outras_funcoes()
{
...
}
Máquina Virtual Java (JVM)
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 8
/* código-fonte Java */
class Personagem
{
int nr_passos;
Personagem(int np){}
void mova(){}
}
class OutraClasse()
{
...
}
Máquina Virtual Java
Carga e execução de classes
Compilador
01011101 10010101 10111010 10010011
01011101 10010101 10111010 10010011
01011101 10010101 10111010 10010011
Arquivos com bytecode
(extensão .java)
(extensões .class ou .jar)
Máquina Virtual Java (JVM)
• JVM – Java Virtual Machine
• Trata-se de um programa que executa bytecodes
• Para isso, a JVM provê um ambiente de execução com componentes como
– Carregador de classes
– Verificador de bytecode
– Interpretador de bytecode / compilador JIT
– Gerenciador de memória (coletor de lixo)
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 9
BlueJ
• Ferramenta para desenvolvimento em Java que tem como objetivo oferecer um contato direto do programador com objetos
• Foi desenvolvida pela Deakin University, Melbourne (Australia) e pela University of Kent at Canterbury (Reino Unido)
• www.bluej.org
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 10
Classes
Forma geral de uma definição de classe em Java
class nome-classe {
tipo var-instancia1;
tipo var-instancia2;
tipo var-instanciaN;
tipo nome-método1 (lista-de-parametros) {
corpo do método;
}
tipo nome-método2 (lista-de-parametros) {
corpo do método;
}
tipo nome-métodoN (lista-de-parametros) {
corpo do método;
}
}
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 11
Atributos
Métodos
Atributos
• Atributos são variáveis de instância de uma classe
• São declaradas como variáveis (similar ao C)
tipo nome_var_instancia;
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 12
Tipo primitivo (int, long, float, double, byte, char, etc.) ou Tipo classe (Produto, String, etc.)
Nome (ou identificador) da variável (preço, código, etc.)
Atributos
• O conteúdo destas variáveis definem valores para os atributos de uma instância de classe
• Ao conjunto de valores dos atributos de uma classe podemos chamar de “estado do objeto”
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 13
Métodos
• Os métodos de uma classe definem o comportamento dos objetos de uma classe
• Por isso são implementados de forma similar a funções em C
• Métodos são implementações das operações definidas em um modelo de classes
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 14
Métodos
T Metodo(T1 p1, T2 p2, ...){
... Texto ...
}
onde
T é o tipo do valor retornado (return valor;)
T1, T2,... são os tipos dos parâmetros formais p1, p2 , ...
Texto define o comportamento (instruções e definição de variáveis locais) do método Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 15
Classe de Objetos
• Diagrama UML (Unified Modeling Language) para classes
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 16
nome da classe
atributo
operação/método
classe de objetos
Classe de Objetos
• Diagrama UML para classes
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 17
nome da classe
atributos
operações/métodos
classe de objetos
Objetos
• Um objeto é uma instância de uma classe
• Em um programa em Java, um objeto é normalmente representado como uma estrutura de dados e funções mantidas na memória do sistema
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 18
Objetos
• A partir de uma classe podem ser instanciados tantos objetos quanto forem necessários
– Desde que as restrições de espaço em memória sejam respeitados
• Os objetos “reaproveitam” as variáveis e os métodos definidos na sua classe
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 19
Construção de Objetos
• Carregar o exemplo BlueJ_exec_1
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 20
Classe
Objeto (ou instância de classe)
BlueJ_exec_1 BlueJ
Construção de Objetos class Produto
{
float preco;
String tipo;
String descricao;
String codigo;
Produto p;
Produto(String tip, String descr){
tipo=tip;
descricao=descr;
}
String getDescricao(){ return descricao; }
void setDescricao(String d) {descricao = d;}
String getTipo(){return tipo;}
void setTipo(String t){tipo = t;}
...
}
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 21
Métodos/Operações
Atributos / Propriedades /Características
BlueJ_exec_1 BlueJ
Construção de Objetos
• Observar o comando de instanciação de classes
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 22
• O operador new do Java cria uma nova instância de uma classe
BlueJ_exec_1 BlueJ
Construção de Objetos
• Instanciar a classe Produto algumas vezes e observar as diferenças entre classe e objeto (instância de classe):
–A classe Produto define as características de um produto
–As instâncias (objetos) representam os produtos propriamente ditos (livros, CDs, DVDs, etc.)
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 23
BlueJ_exec_1 BlueJ
Construção de Objetos
• Observar os estados de cada instância utilizando o comando “Inspect” do BlueJ
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 24
• Neste exemplo, cada Produto tem um estado, definido por valores de seus atributos
BlueJ_exec_1 BlueJ
Construção de Objetos
• Quando um objeto é criado pelo operador new, é executado o método construtor definido na classe do objeto
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 25
BlueJ_exec_1 BlueJ
Construção de Objetos
• Nos métodos construtores são definidos procedimentos de inicialização do objeto, como por exemplo
– Definição de valores iniciais de atributos
– Alocação de recursos que o objeto necessita (arquivos, conexões com banco de dados, etc.)
– Criação de outros objetos, etc.
• Estes métodos levam o nome da sua classe
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 26
BlueJ_exec_1 BlueJ
Construção de Objetos class Produto
{
...
Produto(String tip, String descr)
{
tipo=tip;
descricao=descr;
}
Produto(String tip, String descr, float pr)
{
tipo=tip;
descricao=descr;
preco = pr;
codigo = "1";
}
...
}
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 27
Métodos construtores
BlueJ_exec_1 BlueJ
Construção de Objetos
• Se não for programado um construtor para uma classe, o Java providenciará um construtor padrão, sem parâmetros
• Quando o objeto é criado com new o construtor padrão inicializará
– todos os campos numéricos com zero
– todas as variáveis objeto referenciarão null
– e todas as variáveis lógicas serão false
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 28
BlueJ_exec_1 BlueJ
Construção de Objetos
class Teste
{
Teste(){
Produto p1 = new Produto("Eletrodomestico",
"Liquidificador");
Produto p2 = new Produto("Eletrodomestico",
"Liquidificador", 100.00F);
}
}
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 29
• Desta forma, o programador pode definir variáveis-objeto e inicializá-las com novos objetos
• Uma variável-objeto é uma variável, cujo tipo é uma classe
Variáveis- objeto
Tipo das variáveis BlueJ_exec_1 BlueJ
Responda
• De acordo com o código-fonte da classe Produto, quais comandos de instanciação de objeto são corretos?
a) Produto p1 = new Produto("Eletrodomestico", "Liquidificador");
b) Produto p2 = new Produto("Eletrodomestico", "Liquidificador",
100.00F);
c) Produto p3 = new Produto("Eletrodomestico");
d) Produto p4 = new Produto();
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 30
BlueJ_exec_1 BlueJ
Referência para Objeto
• A declaração e a construção de objetos são coisas distintas
• A declaração associa um tipo a um identificador
Produto p1
• Uma declaração de uma variável de tipo classe, ou variável-objeto, define uma referência de objeto
– A referência é o endereço de um objeto na memória
• Uma declaração de objeto não inicializada associa ao identificador uma referência null
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 31
BlueJ_exec_1 BlueJ
Referência para Objeto
• Declaração não inicializada de variável-objeto
Produto p1;
• Declaração inicializada
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 32
p1
Produto p2 =
new Produto(
"Limpeza",
"Detergente");
p2
null
BlueJ_exec_1 BlueJ
Operador .
• Permite o acesso a atributos e métodos de instância de uma classe
– referência-a-objeto . nome-atributo
– referência-a-objeto . nome-método
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 33
p2.preco = 155;
p2.setDescricao(“pneu 195/55/r15”);
BlueJ_exec_1 BlueJ
Chamada de métodos
• Observar o uso dos métodos “get” e “set” a partir de instâncias da classe Produto
– Tente invocá-los a partir da classe
– Tente invocá-los a partir de uma instância
• Os métodos são invocados a partir de um objeto
• O BlueJ mostra com isso que precisamos de uma instância de uma classe para executar um método
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 34
BlueJ_exec_1 BlueJ
Chamada de métodos
• Esta instância é considerada como o “objeto alvo” do método
• Quando um método é executado, as variáveis de instância pertencem a este objeto alvo, neste caso chamado de instância corrente
• Posteriormente veremos que alguns métodos não precisam de um objeto alvo: os métodos estáticos
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 35
Objeto
• Representação UML
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 36
nome da classe do objeto
nome da instância
atributos
Responda
• Quantas referências para objetos são definidas pelo trecho de programa em Java abaixo?
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 37
BlueJ_exec_1 BlueJ
Responda
• Quantas instâncias de objeto são criadas pelo trecho de programa em Java abaixo?
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 38
BlueJ_exec_1 BlueJ
Responda
• Quantos objetos alvo são manipulados pelas chamadas de método do trecho de programa em Java abaixo?
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 39
BlueJ_exec_1 BlueJ
Responda
• Quais das afirmações sobre classes e objetos abaixo são CORRETAS?
I. O estado de um objeto é definido pelos valores dos atributos do objeto.
II. O estado de um objeto pode ser alterado pelos métodos da classe do objeto.
III. O número de objetos de uma classe que podem ser instanciados é limitado a um objeto por classe.
IV. As operações de uma classe de objetos podem ser utilizadas para definir o comportamento dos objetos desta classe.
V. Dois objetos que têm estados iguais sempre se referem a mesma instância da classe.
VI. Uma classe de objetos pode ser instanciada apenas uma vez em um programa Java.
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 40
Bibliografia
• Barnes, D. J., Kölling, M.. Programação orientada a objetos com Java – Uma introdução prática usando o BlueJ. 4a. Edição. Pearson-Prentice Hall. Capítulo 2. 2009.
• Horstmann C. S, Cornell, G.. Core Java 2, Volume 1 – Fundamentos. Makron Books. Capítulo 4. 1999.
• Cornell, Gary; Horstmann, Cay S. Core Java - Volume 1 - Fundamentos - 8ª Ed. São Paulo. Pearson Education do Brasil. Capítulo 4. 2010.
Programação Orientada a
Objetos Udo Fritzke Jr. - PUC-Minas 41
Material Complementar
• Tutoriais Java: http://docs.oracle.com/javase/tutorial/
• http://en.wikipedia.org/wiki/Java_virtual_machine
Programação Orientada a
Objeto Udo Fritzke Jr. – PUC Minas 42