poo introdução

42
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

Upload: lucas-tsunami

Post on 24-Dec-2015

25 views

Category:

Documents


1 download

DESCRIPTION

Porgramação orientada a objetos

TRANSCRIPT

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