PLC – Introdução a POO Java

Slides:



Advertisements
Apresentações semelhantes
Programação orientada a objetos
Advertisements

Programação em Java Prof. Maurício Braga
Paulo Marques Hernâni Pedroso
Modificadores Marco Antonio. Introdução Em todas as linguagens de programação o acesso a classes/métodos deve seguir algumas regras.
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 3 – Introdução às classes Capitulo 3 Introdução às classes.
Prof. Thiago Pereira Rique
Orientação a Objetos: Encapsulamento e Classificação
Java: Pacotes e Modificadores de Visibilidade
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
Generalização, Especialização e Conceitos
Iniciação ao Java – Márcio F. Campos
Programação Básica em Java
O Paradigma de Orientação a Objetos
Linguagem de Programação II
Wagner Santos C. de Jesus
Classes & Objectos em JAVA5
Métodos Programação II
Métodos Programação II 1 Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Elementos de Classe, class wrappers.
Classes e objetos Arrays e Sobrecarga
Classes e objetos P. O. O. Prof. Grace.
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
Sobrecarga e Encapsulamento
Interfaces.
Programação I Aula 2 (Métodos)
Entendendo as definições de classe
Introdução à Programação Orientada a Objetos com Java
Classes, Objetos, Atributos e Métodos JAVA
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Classes Abstratas e Interfaces.
Orientação a Objetos e Java Graduação em Ciência da Computação
Professora Lucélia Oliveira
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
Programação Orientada à Objetos
INTRODUÇÃO À ORIENTAÇÃO A OBJETOS EM JAVA
Linguagem II Exceções.
Wagner Santos C. de Jesus
Aula prática 14 Orientação a Objetos – C++ Parte 2
Programação Orientada a Objetos - Java
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Orientação a Objetos usando Java
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Java Kickstart, day 2 Semelhanças com linguagem C.
Aula Prática 4 Monitoria IP/CC (~if669).
Prof.: Bruno Rafael de Oliveira Rodrigues. Construtor é bloco declarado que é chamado no momento em que o Objeto é criado (instanciado). Todas as classes.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
1 Marcio de Carvalho Victorino JAVA. 2 Declaração de Atributos [ ] [transient] [volatile] [static] [final] ; controle de acesso –public, package (default),
Interfaces POO Avançado.
Classes Abstratas e Interface
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Herança e Arquitetura em camadas
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Bruno Inojosa MCP .NET Framework
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Módulo II Capítulo 1: Orientação a Objetos
Implementação Orientada a Objetos – Aula 08 Herança, sobrescrita de métodos e polimorfismo Prof. Danielle Martin Universidade de Mogi das Cruzes
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
CURSO JAVA BÁSICO Módulo 9 – slide 1 Módulo 10 Threads.
Noções de projeto orientado a objetos - camadas Prof. Gustavo Wagner (alterações) Prof. Tiago Massoni (Slides originais) Desenvolvimento de Sistemas FATEC-PB.
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Strings e Arrays Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Herança e Polimorfismo Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

PLC – Introdução a POO Java Paulo de Barros (pbsf@cin.ufpe.br) Professor: Fernando Castor Slides cedidos por Sérgio Soares e Ricardo Massa

O que é um objeto? É o agrupamento dos dados e operações que representam um conceito Conta bancária número e saldo creditar e debitar Aluno da UFPE (cadastrado no Sig@) nome, cpf, endereço ... corrigir nome, atualizar endereço Produto (de supermecado) código, descrição, valor ... atualizar estoque, remarcar preço...

Objetos Blocos básicos para construção de um programa Contém dados que podem ser usados e modificados Possuem Identidade (identificação única) Estado (os valores armazenados) Interface (como se comunicar com ele) Comportamento (operações que pode executar)

Objetos Um carro pode ser considerado um objeto Identidade (“1”) Estado (sua cor, tipo de pneu, etc) Interface (volante, pedal do freio, etc) Comportamento (respostas ao giro do volante, ao pisar o pedal do freio) Muitos textos definem um objeto como possuindo duas características apenas: estado e comportamento Nesses casos, a identidade é parte do estado e a interface é parte do comportamento

Objeto Conta Bancária Número Saldo "123-x" 354,78 Comportamento: creditar Comportamento: operações que uma conta pode executar Número Saldo "123-x" 354,78 O estado atual da conta debitar

Estados do Objeto Conta Comportamento mudou o estado do objeto conta creditar(20) creditar creditar Número Saldo "123-x" 354,78 Número Saldo "123-x" 374,78 debitar debitar

Classe Agrupamento de objetos que têm propriedades comuns e realizam as mesmas operações Descreve como os objetos daquela classe são estruturados internamente (propriedades e operações) Classe é um conceito, o objeto é uma instância deste conceito Portanto, podemos ter vários objetos pertencentes a mesma classe Todos os objetos conta de um banco (um para cada conta) Classe é uma forma, objetos são os bolos

Múltiplos objetos são criados à partir da mesma classe Classe x Objeto Conta creditar Número Saldo ”367-1" 12,98 creditar creditar Número Saldo "123-x" 374,78 Número Saldo ”888-0" 122,00 debitar debitar creditar creditar debitar Número Saldo ”279-8" 900,00 Número Saldo "134-6" 22,77 debitar debitar Múltiplos objetos são criados à partir da mesma classe

Mas como declarar uma classe em Java? Exemplo: Temos uma aplicação bancária que deverá armazenar os dados de todas as contas correntes de um banco Contas têm saldo e número e podemos realizar créditos e débitos nas mesmas

Definindo Classes em Java public class Conta { CorpoDaClasse } O corpo de uma classe pode conter atributos (dados) métodos (operações) construtores (inicializadores) outras classes...

Definindo Atributos em Java public class Conta { private String numero; private double saldo; ... } cada atributo tem um tipo específico que caracteriza as propriedades dos objetos da classe double e String denotam os tipos cujos elementos são reais e strings (texto)

Tipos em Java Primitivos Referência char int boolean double ... classes (String, Object, Livro, Conta, etc.) interfaces arrays Os elementos de um tipo primitivo são valores, enquanto os elementos de um tipo referência são (referências para) objetos!

Antes de criar objetos... Precisamos criar um método especial nas classes que será responsável por inicializar os atributos dos objetos que criaremos Estes métodos especiais são chamados de construtores

Construtores construtores Além de métodos e atributos, o corpo de uma classe pode conter construtores definindo como os atributos de um objeto são inicializados <nome da classe> (<lista de parâmetros>) { <corpo do construtor> }

Construtor default <nome da classe>(){} Um construtor sem parâmetros Caso não seja definido um construtor, um construtor implícito default, equivalente a <nome da classe>(){} é fornecido, inicializando os atributos com seus valores default Conta() { saldo = 0; ... }

Valores default para atributos 0 para int, double, etc. false para boolean null para tipos referência null denota uma referência nula, não existente, para um objeto de qualquer tipo

Neste caso, o construtor implícito é descartado! Outros construtores public class Conta { ... public Conta(String numeroInicial, double saldoInicial) { numero = numeroInicial; saldo = saldoInicial; } Neste caso, o construtor implícito é descartado!

Criação de objetos Um objeto é criado através do operador new Conta c;... c = new Conta("12345",100.0); Atribui à variável c a referência para o objeto criado cria um objeto do tipo Conta em memória responsável por inicializar os atributos do objeto criado new <nome da classe>(lista de argumentos)

Exemplo de classe public class Conta { private String numero; private double saldo; public Conta(String numeroInicial) { numero = numeroInicial; saldo = 0.0; } public void creditar(double valor) { saldo = saldo + valor; } ... public String getNumero() { return numero; Essa classe não tem main!!! Método main inicia a execução de toda aplicação Java Portanto, essa classe não é uma aplicação

Introdução a herança Imagine que temos uma aplicação bancária com Uma classe Conta, que possui número, saldo, e os métodos creditar e debitar Uma classe Banco que possui um array de Conta (lembra das classes repositório?), que armazena as contas do banco

Estados do Objeto Conta creditar(20) creditar Creditar creditar Creditar Saldo Número Saldo Número 875,32 21.342-7 895,32 21.342-7 debitar debitar

Motivação Imagine agora que surge um novo requisito O QUE FAZER? O banco precisa trabalhar com poupanças que rendem juros uma vez por mês O QUE FAZER?

Objeto Poupança creditar Creditar Saldo Número renderJuros Creditar 875,32 21.342-7 debitar

Estados do Objeto Poupança creditar(20) creditar Creditar creditar Creditar Saldo Número Saldo Número renderJuros Creditar renderJuros Creditar 875,32 21.342-7 895,32 21.342-7 debitar debitar

Estados do Objeto Poupança renderJuros(0.01) creditar Creditar creditar Creditar Saldo Número Saldo Número renderJuros Creditar renderJuros Creditar 875,32 21.342-7 884,07 21.342-7 debitar debitar

Classe de Poupanças: Assinatura public class PoupancaD { public PoupancaD (String n) {} public void creditar(double valor) {} public void debitar(double valor) {} public String getNumero() {} public double getSaldo() {} public void renderJuros(double taxa) {} }

Classe de Poupanças: Descrição public class PoupancaD { private String numero; private double saldo; public void creditar (double valor) { saldo = saldo + valor; } // ... public void renderJuros(double taxa) { this.creditar(saldo * taxa); }

E a aplicação bancária? Precisamos alterar a classe Banco (que tem um array de Conta) para trabalhar com objetos Poupanca

Classe de Bancos: Assinatura public class BancoD { public BancoD() {} public void cadastrarConta(Conta c) {} public void creditarConta(String numero, double valor) {} public void cadastrarPoupanca(PoupancaD p) {} public void creditarPoupanca(String numero, // ... }

Classe de Bancos: Descrição (1) public class BancoD { private Conta[] contas; private int indiceC; private PoupancaD[] poupancas; private int indiceP;

Classe de Bancos: Descrição (2) public void cadastrarConta(Conta c) { contas[indiceC] = c; indiceC = indiceC + 1; } public void cadastrarPoupanca(PoupancaD p) { poupancas[indiceP] = p; indiceP = indiceP + 1; qual a diferença?

Classe de Bancos: Descrição (3) private Conta procurarConta(String numero) { int i = 0; boolean achou = false; Conta resposta = null; while ((! achou) && (i < indiceC)) { if (contas[i].getNumero().equals(numero)) { achou = true; resposta = contas[i]; } else { i = i + 1; } } if (!achou) throw new RuntimeException(“Não achou”); return resposta; } Atenção: Por enquanto vamos indicar erros assim, mas isso vai mudar

Classe de Bancos: Descrição (4) public void debitarConta(String numero, double valor) { Conta c; c = this.procurarConta(numero); c.debitar(valor); } public void creditarConta(String numero, c.creditar(valor);

Problemas Duplicação desnecessária de código: a definição de PoupancaD é uma simples extensão da definição de Conta clientes de Conta que precisam trabalhar também com PoupancaD terão que ter código especial para manipular poupanças Falta refletir relação entre tipos do “mundo real”

Subtipos e Subclasses Poupanca Conta

Herança Necessidade de estender classes alterar classes já existentes e adicionar propriedades ou comportamentos para representar outra classe de objetos criar uma hierarquia de classes que “herdam” propriedades e comportamentos de outra classe e definem novas propriedades e comportamentos

Subclasses Comportamento Substituição objetos da subclasse comportam-se como os objetos da superclasse Substituição objetos da subclasse podem ser usados no lugar de objetos da superclasse

Herança Reuso de Código Extensibilidade a descrição da superclasse pode ser usada para definir a subclasse Extensibilidade algumas operações da superclasse podem ser redefinidas na subclasse

Classe de Poupanças: Com herança public class Poupanca extends Conta { public Poupanca (String numero) { super(numero); } public void renderJuros(double taxa) { double juros = this.getSaldo() * taxa; this.creditar(juros); Construtores da superclasse não são herdados, mas devem ser utilizados (via super)

Extends subclasse extends superclasse Mecanismo para definição de herança e subtipos Herança simples: só pode-se herdar uma classe por vez

Interfaces Através do encapsulamento, os atributos e a implementação dos métodos de uma certa classe não são visíveis ao usuário da classe Conhecendo-se apenas a interface de uma classe, podemos utilizar seus objetos sem conhecer detalhes de implementação Uma interface inclui os métodos disponíveis e suas respectivas assinaturas Além disto, existem casos, onde existe a necessidade de se ter uma classe mas não queremos implementá-la pode-se terceirizar a implementação, fornecendo como especificação a interface desejada.

Interfaces - Exemplo Implementar um zoológico virtual com vários tipos de animais Você gostaria de enviar as seguintes mensagens a cada animal: nasça() passeie() durma() peso() Vamos pedir ajuda a programadores especialistas em cada tipo de animal

Interfaces - Exemplo

Interfaces - Exemplo O programador que for implementar o morcego terá que dizer explicitamente que vai usar a interface Animal palavra chave implements A palavra chave implements obriga o programador a escrever o código de todos os métodos na assinatura Todos os métodos da interface devem ser públicos

Interfaces - Exemplo

Interfaces - Exemplo

Interfaces - Observação Em cada arquivo deve existir no máximo uma classe pública! Logo, as classes Ornitorrinco, Morcego e Zebra devem estar em arquivos separados, com os respectivos nomes Zebra.java Ornitorrinco.java Morcego.java

Interfaces Cada um dos animais, além de ser um objeto da própria classe, também é um objeto do tipo Animal z1.contaListras() - Válido z2.contaListras() - Inválido