Programação Orientada a Objetos em Java

Documentos relacionados
Classes e Objetos. Sintaxe de classe em Java

Linguagem de Programação II Implementação

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

UNIFEI Disciplina Professor

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

Programação Orientada a Objetos. Métodos e Atributos. Métodos. Métodos. Alexandre César Muniz de Oliveira. Parte III

Algoritmos e Programação 2. Objetos e Classes em Java. Classes. Revisão. Definições de classes incluem (geralmente):

Introdução. Atributos em Java. Atributos. Acesso à atributos em Java. Atributo versus variável. Atributos, métodos e encapsulamento.

Atributos e Métodos Estáticos

Conceitos Básicos da Programação OO

Conceitos de Programação Orientada a Objetos

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

Linguagem de Programação II Implementação

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Programação Orientada a Objetos C ++ 4 Conceitos de OO em Java Classes e Objetos. Departamento de Informática Prof. Anselmo C.

Classes e Objetos. Prof. Fernando V. Paulovich 9 de agosto de 2010

Classes e Objetos INTRODUÇÃO À ORIENTAÇÃO A OBJETOS COM JAVA - MÓDULO II. Classes. Objetos. Um modelo para a criação de objetos

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Palavras Reservadas da Linguagem Java

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Análise de Programação

E N C A P S U L A M E N T O P R O F. M E. H É L I O E S P E R I D I Ã O

Programação Orientada a Objetos II

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Linguagem de Programação IV Introdução

Programação Orientada a Objetos

Modelo do Mundo Real. Abstração. Interpretação

Introdução. LP OO desenvolvida pela Sun no início da década de 90 com sintaxe semelhente a C\C++. C C++.

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Programação Orientada a Objetos

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Paradigmas de Linguagens de Programação. Tipos de Dados Abstratos

Programação Orientada a Objetos (DPADF 0063)

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

Dados armazenados em um objeto podem ser tanto primitivos, tais como inteiros ou caracteres, ou referências para outros objetos.

Visibilidade e Encapsulamento

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

Instituto de Informática Estrutura de Dados II

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Namespaces, Classes e Métodos.

Programação Orientada a Objetos. SANTOS, Rafael (PLT) e Guia de Estudo SCJP. SIERRA, Kathy e BATES, Bert

Variáveis primitivas e Controle de fluxo

Relacionamentos entre objetos

Linguagem de Programação III

Aula 03 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

O PARADIGMA ORIENTADO POR OBJETOS

Orientação a Objetos e Java

Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação

Programação Orientada a Objetos. Aula 1.9 this e static. Prof. Bruno Moreno

Linguagem de Programação III

CA: Cidade: UF CARTÃO RESPOSTA QUESTÃO RESPOSTA QUESTÃO RESPOSTA A F B G C H D I

Linguagens de Programação Aula 12

Classes, Métodos e Propriedades

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.

Classe Abstrata e Interface

Modificadores de Acesso JAVA

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

Técnicas de Programação:

Linguagem de Programação Orientada a Objeto Construtores e Sobrecarga

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

Programação Orientada a Objetos

Encapsulamento. Alberto Costa Neto DComp - UFS

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Estrutura de Dados Funções e Procedimentos

Introdução a Orientação a Objetos

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Curso de PHP. - Início 22 de agosto - Término 20 de outubro. -Aulas: segunda e quinta-feira -Horário:18h às 20h. -Carga horária do curso: 40h

Desenvolvimento Web TCC Turma A-1

ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Introdução. Programação Orientada a Objetos (POO) João Paulo Q. dos Santos

Herança. Fátima L. S. Nunes Luciano A. Digiampietri Norton T. Roman SISTEMAS DE INFORMAÇÃO 1

Programação Orientada a Objetos

Encapsulamento e Modularização

Java - Sobrecarga/Composição

Encapsulamento e Modularização

Introdução à Programação. Encapsulamento e Herança

CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO

EXPRESSÕES BOOLEANAS. Ex: boolean b = false; // declara uma variável do tipo boolean e atribui false

Laboratório de programação II

Módulo 5. Programação Orientada a Objetos. Programação Orientada a Objetos I Java (Rone Ilídio)

Encapsulamento. Separa a interface de um objeto dos detalhes de seu funcionamento interno. Caixa preta 2/27

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Construtores e Especificadores de Acesso

Linguagem de Programação III

Singleton e Adapter. Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

Transcrição:

Universidade Federal do Amazonas Departamento de Ciência da Computação IEC481 Projeto de Programas Programação Orientada a Objetos em Java Classes e Objetos, Construtores e Desconstrutores, Atributos e Métodos de Classe Professor: César Melo Slides baseados em materiais preparados pela Profa. Rosiane Freitas e Prof. Horácio Fernandes.

POO em Java Questões a serem respondidas... Como encontrar objetos em um sistema? O que são mensagens? O que são construtores e destrutores? Para que servem? Defina encapsulamento? Quais suas vantagens?

Classes x Objetos Instâncias da classe (objetos) Classe (abstração)

Objetos Questões importantes como encontrar objetos? como descrever objetos? como descrever os relacionamentos entre objetos? como usar os objetos para estruturar programas?

Como encontrar Objetos? O sistema computacional deve: Fornecer respostas a questões do mundo exterior. ex. computação para resolver um problema. Interagir com o mundo exterior. ex. sistema de controle de processo. Criar novas entidades no mundo exterior. ex. editor de texto.

Como encontrar Objetos? Sistema de software é um Modelo Operacional, baseado na interpretação do mundo. Os objetos que compõem o software devem ser a representação dos objetos relevantes que constituem o mundo exterior. Devem mapear os objetos reais em objetos computacionais e escrever programas que dão vida a estes objetos em um sistema computacional. Conclusão: os objetos estão por aí; é só pegá-los.

Como descrever Objetos? A descrição de objetos deve ser: Completa & precisa não ambígua independente de representação física Uma solução é: A teoria de Tipos Abstratos de Dados TAD

Implementando uma Classe Classe Representação de um TAD. Estrutura de dados (características) e suas operações (comportamento). Notações: atributos (dados); métodos (operações ou procedimentos). Objetos são as instâncias de uma classe. Os Objetos são criados em tempo de execução

Implementando uma Classe - Métodos São formados por: interface (nome, tipo de dados dos argumentos e valores retornados); implementação (algoritmo do método). Métodos são executados pela requisição de uma mensagem. Mensagens possibilitam a interação entre os objetos. A resposta a uma mensagem é o resultado da execução do método correspondente. Objeto 4 Objeto 1 Dados Objeto 3 Dados Objeto 2 Dados Dados

Exemplo de Classe class Circulo { double x, y; double r; } double circunferencia() { return 2 * 3.14159 * r; } double area() { return 3.14159 * r * r; } Instanciando a classe (i.e., criando um objeto): Uso do operador new: Circulo c; c = new Circulo(); class Circulo double circunferencia() double area() Acessando os dados: c.x = 7.5; c.r = 2.5; x= 0.0 y= 0.0 r = 0.0 x = 7.5 y = 0.0 r = 2.5

Criação de Objetos A seguinte sentença realiza três ações: Circulo c = new Circulo(); Declaração Declarações não criam objetos! Instanciação new é um operador que cria dinamicamente um novo objeto. Ele requer um único argumento: uma chamada a um construtor (próx. slide). Inicialização Chamada ao construtor da classe Circulo.

Criação de Objetos Construtores e Sobrecarga Métodos Especiais Construtor: executado quando um novo objeto daquela classe é criado. Método que atribui valores default (padrões) para os atributos de um objeto. Destrutor: executado quando o coletor de lixo vai desalocar (retirar) o objeto da memória. Libera o espaço ocupado pelo objeto na memória. class Circulo { double x, y, r; Circulo(double x, double y, double r) { this.x = x; this.y = y; this.r = r; } Circulo(double r) { x = 0.0; y = 0.0; this.r = r; } Circulo() { x = 0.0; y = 0.0; r = 0.0; } } //...o restante da classe...

Criação de Objetos Sobrecarga Podemos criar uma instância da classe Circulo usando qualquer um dos construtores: Circulo c = new Circulo( ); Circulo d = new Circulo(3.0); Circulo e = new Circulo(1.0, 3.4, 7.5); OBS: Java automaticamente cria o construtor padrão (sem parâmetros) caso nenhum seja definido!

Criação de Objetos Sobrecarga Encadeamento de Construtores: class Circulo { double x, y, r; } Circulo(double x, double y, double r) { this.x = x; this.y = y; this.r = r; } Circulo(double r) { this(0.0, 0.0, r); } Circulo() { this(0.0, 0.0, 0.0); } //...o restante da classe...

Destruição de Objetos Em Java, não podemos destruir objetos! Java utiliza um Coletor de Lixo (Garbage Collector). O coletor se encarrega de se livrar (liberar memória) dos objetos que não são mais necessários no programa. Podemos ajudar o coletor indicando uma coleta prévia: int grande_vetor [] = new int[1000000]; //.. alguma computação... grande_vetor = null; Da mesma forma que o método construtor inicializa um objeto, o método destrutor (finalize()) realiza a finalização do mesmo: // Fecha um arquivo quando o lixo for coletado protected void finalize() {...}

Destruição de Objetos - Considerações O método destrutor é invocado antes do sistema realizar a coleta de lixo. Java pode terminar o programa sem realizar a coleta de lixo: neste caso, o sistema operacional se encarrega de liberar os recursos utilizados pelo programa. Java não garante que a coleta irá ocorrer, nem a ordem de chamada dos destrutores. O objeto não é liberado imediatamente após a execução do método destrutor.

Destruição de Objetos - Considerações O destrutor pode ressuscitar o objeto!: Porém, ele só é invocado uma única vez. Se alguma exceção ocorrer durante o método destrutor, ela será simplesmente ignorada pelo sistema. Este é o único tipo de método que não pode ser sobreposto!

Sobrecarga Permite a criação de métodos polimórficos. É possível utilizar a sobrecarga com qualquer método. Métodos são diferenciados pelos parâmetros: int soma(int a, int b) int soma(int a) int soma(double b) Também existe sobrecarga nos operadores: 1 + 2 3.1 + 4.7 Concatenação + de + strings A A soma é igual a + (3 + 4)

Variáveis de Classe x Variáveis de Instância Atributos (Variáveis) de Classe Existe apenas uma única cópia da variável associada à classe. Atributos (Variáveis) de Instância possuem várias cópias associadas a cada instância da classe. class Circulo { static int num_circ = 0; double x, y, r; // Atributo de Classe // Atributos de Inst. Circulo(double x, double y, double r) { this.x = x; this.y = y; this.r = r; num_circ ++; } }

Variáveis de Classe Devemos acessá-la através da classe: System.out.println( Número de círculos criados: + Circulo.num_circ); Não há a necessidade de se criar um objeto para acessar (ler ou modificar) a variável. Constantes: class Circulo { static final double PI = 3.1415926535897; // etc.. }

Métodos de Classe São semelhantes a variáveis de classe. são declarados usando a palavra-chave static. são invocados através da classe. são semelhantes ao conceito de métodos globais, porém sem o risco de conflito de nomes. Se houver métodos com mesmo nome, as classes aos quais eles pertencem farão a devida distinção. não podem usar os métodos nem variáveis *de instância* de uma classe (não recebe o this como argumento). Entretanto, pode acessar os métodos e variáveis de classe (também declarados como static).

Métodos de Classe Exemplo Acessando o método de classe sqrt da classe Math: class Circulo { double x, y, r; } // o ponto (a,b) pertence ao círculo? boolean pertence(double a, double b) { double dx = a - x; double dy = b - y; double dist = Math.sqrt(dx*dx - dy*dy); if(dist <= r) return true; else return false; }

POO em Java Questões: Como encontrar objetos em um sistema? O que são mensagens? O que são construtores e destrutores? Para que servem?

Universidade Federal do Amazonas Departamento de Ciência da Computação IEC481 Projeto de Programas Programação Orientada a Objetos em Java Encapsulamento

Encapsulamento Agrupamento de elementos (tipos, variáveis, funções, procedimentos,...) em um módulo. Módulo: Unidade de programação que pode ser implementada de forma independente. Um módulo usualmente é projetado com uma finalidade específica. Um Módulo possui dois papéis importantes: coloca os dados e funções sob um único escopo. permite o ocultamento dos dados. Não me interessa saber como é feito. Somente interessa-me que seja feito!

Encapsulamento Relambrando que...o mundo vê um objeto pelo que ele pode fazer, e não como ele faz. ao dirigir um carro, não precisamos saber se ele possui tração traseira ou dianteira. temos de saber que o pedal do acelerador faz o carro se mover. Um aspecto essencial à modularidade é permitir a tal da abstração. Separação entre: Qual a finalidade do módulo? Como tal finalidade pode ser alcançada?

Encapsulamento Motivação para se usar módulos: simplificar a compreensão pela divisão do problema. mecanismo para facilitar a reusabilidade. mecanismo para facilitar a manutenção de programas. Encapsulamento está ligado ao conceito de esconder informação (information hiding). define quais partes de um objeto estão visíveis (pública) e quais partes estão escondidas (privada).

Encapsulamento Java suporta o conceito de módulos, possibilitando a carga dinâmica destes de qualquer parte da Internet. preocupação com conflito no espaço de nome; Já temos uma dica de como resolver... Em Java, todo atributo (variável) e método são declarados dentro de classes. Toda classe faz parte de um pacote (package). Não existência de variáveis e funções / procedimentos globais.

Pacotes Agrupam um conjunto de classes. grupo de classes relacionadas e, possivelmente, cooperantes. o pacote de uma classe é definido pela palavra-chave package. package br.edu.ufam.dcc.pp2010.geo; class Circulo {... } O arquivo que contém a classe (Circulo.java) deve estar no diretório br/edu/ufam/dcc/pp2010/geo. Padronização: começam com letras minúsculas. Pacotes podem conter outros pacotes: java.lang java.io company.library.graphic

Pacotes As classes que estão no mesmo pacote podem ser utilizadas diretamente no código fonte. package br.edu.ufam.dcc.pp2010.geo; class Teste { public static void main(string[] args) { Circulo c = new Circulo(); } } Para usar as classes de outros pacotes, deve-se indicar onde elas estão: package exemplo; import br.edu.ufam.dcc.pp2010.geo.circulo;.circulo; class Teste { public static void main(string[] args) { Circulo c = new Circulo(); } }

Modificadores de Classes Os modificadores de classes e de interfaces permitem definir a visibilidade e as possibilidades de estender classes. Se uma classe ou uma interface são declaradas public, elas são acessíveis por todo o código que pode acessar o pacote onde elas foram declaradas. Se elas não foram declaradas public, elas só podem ser acessadas por código do próprio pacote onde elas foram declaradas.

Modificadores de Classes Além disto, só pode haver uma classe public em cada arquivo. Uma classe declarada final não pode ser estendida, isto é, não é possível declara uma nova classe que estenda uma classe final. Uma classe declarada abstract, por outro lado, nunca pode ter um objeto instanciado. Ela serve para ser a classe pai de outras que vão ser estendidas a partir dela.

Visibilidade public class MaquinaDeLavar { // todos podem usar esta classe private Roupas[] sujas; // eles não vêm este atributo // public void lavar(); public void secar(); // mas podem ver estes métodos // públicos para manipular a // variável }

Visibilidade

Visibilidade

Encapsulamento - Resumo private : esconde os membros do resto do mundo. Faça isso para os membros que são usados apenas pela própria classe. public : membros serão visíveis por todos. protected : membros visíveis para as subclasses e para as classes dentro de um mesmo pacote. Sem modificador (padrão) : esconder os membros de todas as classes fora do pacote. (Verificar!) Se quiser que as subclasses que estão fora do pacote também tenham acesso a esses membros, use o modificador protected.

Fim do Mistério Agora podemos entender melhor a instrução: System.out.println( Um String aqui! ); classe definida em java.lang Método de instância da classe PrintStream variável de classe do tipo PrintStream Todas as classes que estão no pacote java.lang são automaticamente importadas.

POO em Java Questão: Defina encapsulamento? Quais suas vantagens?