Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes [email protected] Aulas 10 e 11 - Programação Orientada a Objetos http://www.ufpa.br/sampaio/bd2003/lpoo Prof. Marco Fagundes 1 de 20 Roteiro Introdução Classes e Objetos Atributos Métodos Instanciando Classes Mensagens Construtores e Finalizadores Encapsulamento 2 de 20 Introdução Programação Orientada a Objetos (POO) surgiu desde a introdução da linguagem Simula em 1967 Entretanto, ela veio tornar-se um paradigma de programação nos meados da década de 1980 POO difere da programação tradicional (programação estruturada) devido colocar dados e operações que manipulam estes dados em uma simples estutura de dados Este modelo assemelha-se ao mundo real, onde todos os objetos tem atributos e atividades associadas a eles Java é uma linguagem orientada a objetos pura, o que significa que tudo em Java é acessado através de classes e objetos. Diferente de linguagens híbridas tais como C++ e Object Pascal 3 de 20 Classes e Objetos Uma Classe é uma definição de tipo Um Objeto é uma declaração de variável Uma vez criada a Classe pode-se criar vários objetos desta Classe O processo de criação do Objeto a partir de uma Classe é denominado instanciando um Objeto ou criando uma instância de uma Classe Objetos são elementos de software compostos de dados e operações que atuam sobre estes dados. As operações são implementadas através dos métodos e determinam o comportamento do objeto. Objeto = dado + método Objeto = estado + comportamento 4 de 20 Classes e Objetos Objetos Op1 operações/métodos/ comporamento Um Objeto Op2 Op4 propriedades/dados/ variáveis Op3 Todo acesso aos dados ou propriedades do objeto é feito através de sua interface (Op1,Op2,Op3 e Op4), o que caracteriza o encapsulamento (visto adiante) Por exemplo: O objeto DVD Player da Marca xxx .... Neste caso a Classe seria DVD Player, sem especficar Marca... 5 de 20 Classes e Objetos Classes Uma classe de objetos descreve um grupo de objetos com: • Propriedades e comportamentos semelhantes • Relacionamentos comuns com outros objetos Classificação Instanciação Objetos/Instâncias Aeronave capacidade prefixo ... decolar manter pousar ... 6 de 20 Classes e Objetos Em uma Análise OO de um dado problema, substantivos são classes potenciais e verbos podem ser métodos A UML é uma linguagem padrão para especificar, visualizar, documentar e construir artefatos de um sistema e pode ser utilizada ao longo de todo o ciclo de desenvolvimento e através de diferente tecnologias de implementação Uma classe UML apresenta a seguinte representação gráfica: Implementação em Java Nome da Classe (obrigatório) public class Sala{ int codigoSala; public void consultarSalas(){...} Atributos da Classe (opcional) } Implementação em Delphi Operações da Classe (opcional) type TSala = class private codigoSala: integer; public procedure consultarSala; 7 de 20 Classes e Objetos Por exemplo em um sistema de controle acadêmico podemos considerar o seguinte: • Possíveis Classes: Aluno, Sala, Turma, Disciplina ... • Possíveis Métodos: Incluir Aluno(classe Aluno), Consultar Sala(classe Sala), Criar Turma (Classe Turma)... 8 de 20 Classes e Objetos Declarando e Instanciando Classes Java considerada uma classe vazia como válida. Por exemplo: class Aluno{ Aluno } Para criar uma instância da classe deve-se inicialmente criar uma referência através de uma variável do tipo definido pela classe Aluno al; Em seguida, deve-se alocar recursos para a referência criada(no caso acima “al”). Esta alocação é feita pelo operador new al = new Aluno(); 9 de 20 Classes e Objetos O operador new chama o construtor, que é similar a um método Uma vez criado o objeto, as variáveis membro (ou de instância) e métodos da classe podem ser acessados usando o operador “.” Não se deve preocupar em destruir um objeto, isto é feito automaticamente pelo garbage collector 10 de 20 Atributos Com dito anteriormente uma classe contém dados e métodos Atributos são variáveis membro que retêm informações de estado/propriedades do objeto Aluno Aluno codMatricula:String nome: String anoIngresso:integer class Aluno{ String codMatricula, nome; int anoIngresso; } 11 de 20 Métodos Métodos implementam as operações que agem sobre os atributos do objeto class Aluno{ String codMatricula, nome; Por exemplo: int anoIngresso; Aluno Aluno Aluno(pMat:String, pNome:String,pAnoIng:int) { codMatricula = pMat; nome = pNome; anoIngresso = pAnoIng; } int permanenciaInst() {return(2003 - anoIngresso); } codMatricula:String nome: String anoIngresso:integer Aluno(pMat:String, pNome:String, pAnoIng:integer) permanenciaInst( ) Construtor Obs:Apenas para ilustração } 12 de 20 Instanciando Classes Como visto anteriormente dois passos são envolvidos na criação de uma instância da classe 1º Passo: Criação da referência para o objeto Aluno aluno01; 2º Passo: Criação da instância da classe (objeto) aluno01 = new Aluno(“0001”,“alTeste01”,1999); Deve-se passar os argumentos, caso a definição requeira 13 de 20 Mensagens Objetos interagem e comunicam-se através de mensagens As mensagens identificam os métodos a serem executados no objeto receptor permanenciaInst() Emissor Receptor vPermInst = aluno01.permanenciaInst(); Esta variável deve ser declarada, sendo do mesmo tipo do retorno do método: int vPermInst; Indica o envio de mensagem para o objeto “aluno01” 14 de 20 Construtores e Finalizadores Construtores: • Servem como interfaces para inicializar objetos • Sempre têm o mesmo nome da classe • Similar a um método, mas não pode especificar um valor de retorno • Cuida da alocação de todos os recursos necessários para o objeto e retorna uma instância do objeto • Podem ou não conter parâmetros • Pode haver mais de um por classe (overloading sobrecarga) Aluno(pMat:String,pNome:String, Por Exemplo: pAnoIng:int) { codMatricula = pMat; nome = pNome; anoIngresso = pAnoIng;} 15 de 20 Construtores e Finalizadores Finalizadores: • Muitas linguagens OO têm métodos chamados de destrutores, que desalocam todos os recursos alocados pelo construtor • Java cuida de liberar todos os recursos alocados para um objeto que não é mais referenciado através do garbage collector (GC) • Existem algumas situações de limpeza que o GC não efetua. Por exemplo, arquivos abertos ou conexão com Banco de Dados • Neste caso pode-se definir um método chamado de finalizer. Este método é chamado imediatamente pelo GC antes do objeto ser destruído 16 de 20 Encapsulamento Conforme citado anteriormente (no exemplo do DVD Player), o encapsulamento objetiva esconder detalhes de implementação Métodos Públicos Métodos Privados Atributos Públicos Atributos Privados 17 de 20 Encapsulamento Controle de Acesso: em geral, é conveniente proibir o acesso a alguns atributos ou métodos de uma classe. Java fornece os seguintes modificadores de acesso: • public - permite acesso a partir de qualquer classe • private - permite acesso apenas na própria classe • protected e acesso de pacote (a serem estudado no módulo avançado) 18 de 20 Encapsulamento Consequências de tornar um atributo privado • O componente privado quando acessado de fora da classe ocasiona um erro de compilação • Para tornar um atributo privado acessível, deve-se definir um método público na própria classe, que retorne o valor do atributo 19 de 20 Encapsulamento Classe Aluno com atributos privados class Aluno{ private String codMatricula; private String nome; private int anoIngresso; Aluno(pMat:String,pNome:String,pAnoIng:int) { codMatricula = pMat; nome = pNome; anoIngresso = pAnoIng;} int permanenciaInst() {return(2003 - anoIngresso);} public String codMatricula(){return codMatricula;} public String nome(){return nome;} public int anoIngresso(){return anoIngresso;} } 20 de 20