Princípios de Orientação por Objectos

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

Classes e Objetos. Sintaxe de classe em Java

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

Programação por Objectos. Java

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

Linguagem de Programação III

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

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

4 Conceito de Herança

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Linguagem de Programação II Implementação

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

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

Familiarização com o processo de implementação de classes. Comentários. Métodos simples, construtores e acesso a membros de dados. Variáveis locais.

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

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

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

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

Conceitos de Programação Orientada a Objetos

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

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

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

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

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

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

Programação Java (nível intermediário) 4. Polimorfismo

UNIFEI Disciplina Professor

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

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

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

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

Laboratório de programação II

AULA TEÓRICA 9. Tema 8. Herança (continuação) Ø Sobreposição de métodos. Ø Variáveis e métodos estáticos. Ø Hierarquia de classes.

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

Linguagem de Programação III

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

Instituto de Informática Estrutura de Dados II

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Programação OO em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM

Java para Desktop. Programação Orientada à Objetos 2 JSE

Modificadores de Acesso JAVA

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

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

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

Linguagem de Programação III

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

Conceitos Básicos da Programação OO

Linguagem de Programação II Implementação

Desenvolvimento Modular de Procedimentos

9 Classes Abstractas e Interfaces

Programação Orientada aos Objectos I

Classes, Métodos e Propriedades

Relacionamentos entre objetos

Programação Orientada a Objetos II

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

CPP. C plus plus versus Java

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

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

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

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

AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos

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

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

Namespaces, Classes e Métodos.

Programação Orientada a Objetos SANTOS, Rafael

Lição 11 Herança, polimorfismo e interfaces

Tema da aula Introdução ao paradigma de programação: Orientado a Objetos

Linguagem de programação Programação Orientada a objetos

Programação Orientada a Objetos em Java

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

Polimorfismo e Ligação Dinâmica. Alcides Pamplona Polimorfismo e Ligação Dinâmica

Introdução à Programação Orientada por Objectos em Java. Enquadramento e Objectivos Abstracção Encapsulamento Herança Polimorfismo Conclusão

Interfaces e Classes Abstratas

Orientação a Objetos e Java

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

Orientação a Objetos (OO) LPG II - Java. Orientação a Objetos (OO) Programação Orientada a Objetos. Programação Procedimental

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

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

1 Introdução e Conceitos básicos

Programação Orientada a Objetos

Palavras Reservadas da Linguagem Java

Programação por Objectos. Java

Orientação a Objetos Básica

Sistemas de Objetos DistribuídosPrimeira Aplicação Java ORB p.1/21

Herança e Polimorfismo - Parte II -

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

Classe Abstrata e Interface

Análise de Programação

Programação Orientada a Objetos (DPADF 0063)

Construtores e Especificadores de Acesso

Linguagens de Programação Aula 12

Transcrição:

Princípios de Orientação por Objectos 84 Objectivos Ser capaz de: Descrever abstracção Descrever conceitos de orientação por objectos: herança, encapsulamento, polimorfismo Identificar objectos e classes simples 85

Orientação por Objectos OO é um paradigma diferente para desenho e programação de software OO baseia-se na construção de modelos de objectos reais OO cria programas que são reutilizáveis e facilmente adaptáveis Os objects são autónomos e incluem informação e comportamento 86 O que é um Objecto? Definição filosófica: uma entidade que pode ser identificada Na terminologia OO: uma abstracção de um objecto real empresarial: uma entidade relevante para o domínio de aplicação software: uma estrutura de dados e as funções associadas 87

Os Objectos executam Operações Um objecto existe para contribuir com funcionalidade (comportamento) a um sistema. Cada comportamento distinto é dado o nome de operação. Objecto: A minha caneta azul Operação: escrever Objecto: Caixa Multibanco Operação: levantamento 88 Os Objectos memorizam Valores Os objects têm conhecimento (informação) sobre o seu estado actual. Cada elemento de informação é dado o nome de atributo. Tinta Objecto: A minha caneta azul Atributo: Volume de tinta Objecto: Caixa Multibanco Atributo: Dinheiro levantado 89

Os Objectos são Abstracções No modelo de um objecto, apenas é necessário incluir operações e atributos que são importantes para o problema em questão. Exemplo de uma operação que não interessa incluir: apontar-a Exemplos de atributos que não interessam incluir: comprimento do bico fabricante da tinta idade 90 Encapsulamento O encapsulamento permite ocultar como as coisas funcionam e o que se sabe para além da interface as operações de um objecto. Uma caixa Multibanco é um objecto que entrega dinheiro aos seus utilizadores: A caixa MB encapsula isto para os seus utilizadores. Violar o encapsulamento é considerado um roubo ao banco. Violar o encapsulamento em programação orientada por objectos é impossível. 91

Exercício: descobrir as operações e atributos 92 Hierarquias de objectos Os objectos são compostos por outros objectos. Os objectos podem fazer parte de outros objectos. Esta relação entre objectos é conhecida por agregação. Um banco pode ser um objecto. Uma caixa MB pode ter um teclado, leitor de cartões, dispensador de notas, todos podendo ser objectos. Um banco pode ter uma caixa MB que também pode ser um objecto. 93

O que é uma Classe? Uma classe é uma especificação de objectos. Uma definição de uma classe especifica as operações e atributos para todas as instâncias de uma classe. Quando se cria a minha caneta azul, não é necessário especificar as suas operações e atributos. Basta simplesmente indicar a classe a que pertence. 94 Porque necessitamos de classes? Uma classe descreve o tipo de um objecto. Uma classe define o comportamento (operações) e estrutura (atributos) de um grupo de objectos: Pode-se reduzir a complexidade utilizando classes. No mundo existem imensos objectos, razão pela qual as pessoas os agrupam em tipos. Se se compreender o tipo, pode-se aplicá-lo a vários objectos. 95

Como identificar uma classe? Identificar a estrutura e comportamento comum de um grupo de objectos. Identificar um único conceito coerente. Ambos objectos pertencem à classe Caneta. A minha caneta azul A tua caneta azul ops: atribs: ops: atribs: escrever, recarregar volume de tinta côr da tinta escrever, recarregar volume de tinta 96 Classes versus Objectos As classes são definições estáticas que nos permitem compreender todos os objectos de uma classe. Os objectos são as entidades dinâmicas que existem no mundo real e em suas simulações. Nota em OO as pessoas frequentemente utilizam ambas as palavras classes e objectos de forma indiferente; é necessário utilizar o contexto para distinguir entre os dois significados possíveis. 97

Herança Podem existir semelhanças entre classes distintas. Deve-se definir as propriedades comuns (atributos, operações) entre classes numa superclasse comum. Conta Conta Poupança Conta Depósitos à Ordem As subclasses utilizam herança para incluir as propriedades comuns entre elas. 98 Relação Is-a-Kind-of Um objecto de uma subclasse é-um-tipo-de objecto de uma superclasse. Uma subclasse deve ter todo o comportamento da superclasse. Conta Caneta Conta Poupança Lápis 99

Polimorfismo O polimorfismo é a capacidade de um único nome poder referir objectos de classes diferentes, se relacionadas por uma subclasse comum O polimorfismo surge quando a linguagem de programação simultaneamente suporta herança e a associação dinâmica de tipos (late binding) 100 Polimorfismo... O polimorfismo permite que uma operação possa existir em diferentes classes. Cada operação tem um mesmo significado mas é executada de forma particular. Transportar passageiros 101

Resumo Um objecto é uma abstracção de objecto real. Uma classe é um molde ou fôrma de objectos. As classes formam árvores de herança; as operações definidas numa classe são herdadas por todas as suas subclasses. O polimorfismo liberta quem invoca uma operação de conhecer a classe exacta do objecto que a irá receber. 102 Exercício Prático: Identificar classes no exemplo do WebCrawler II Identificar métodos para as classes Identificar atributos para as classes Procurar relações de herança entre as classes 103

Manipulação de Classes e Objectos 104 Objectivos Ser capaz de: Utilizar packages para agrupar classes relacionadas Definir variáveis e métodos de instâncias Criar objectos e invocar métodos Utilizar as palavras public, private e protected Redefinir métodos de uma classe (overloading) Escrever construtores Utilizar variáveis e métodos de classes 105

Contéudos As classes definem as características, atributos e comportamento dos objectos. Todo o código Java reside em classes. Toda a informação dos objectos é armazenada em variáveis. Os packages auxiliam a controlar o acesso a classes. O overloading permite ter interfaces simples. Os construtores garantem consistência na criação de objectos. 106 Classes Java Objectos Métodos Package Atributos Referências para Objectos 107

Packages AcmeVideo Copy Title Rental AcmeVideo Game Member Movie 108 Controlo de Acesso AcmeVideo AcmeTools protected private public public 109

Classes e Objectos Cada objecto é uma instância de uma classe. Movie public void displaydetails() public void setrating() private String title; private String rating; title: Gone with rating: PG title: Last Action rating: PG-13 110 Criação de Objectos Os objectos são criados pelo operador new: objectref = new ClassName(); Por exemplo, para criar dois objectos Movie: Movie mov1 = new Movie("Gone..."); Movie mov2 = new Movie("Last..."); title: Gone with rating: PG title: Last Action rating: PG-13 111

new O operador new realiza o seguinte: Aloca memória para o novo objecto Invoca um método especial da classe para inicialização de objectos, um constructor Retorna uma referência para o novo objecto Movie mov1 = new Movie("Gone..."); mov1 title: Gone... rating: PG 112 Objectos e valores primitivos As variáveis de tipos primitivos armazenam valores. As variáveis de tipos de classes armazenam referências para objectos. int i; Movie mov1; i 0 mov1 null int j = 3; Movie mov1 = new Movie(); j 3 mov1 title: null rating: null 113

A referência null As referências para objectos têm o valor null até serem inicializadas. É possível comparar referências de objectos a null. Pode-se eliminar um objecto pela atribuição do valor null a uma referência. Movie mov1 = null; //Declare object reference if (mov1 == null) //Ref not initialized? mov1 = new Movie(); //Create a Movie object mov1 = null; //Forget the Movie object 114 Atribuição de Referências A atribuição de uma referência a outra resulta em duas referências para o mesmo objecto: Movie mov1 = new Movie("Gone..."); mov1 Movie mov2 = mov1; title: Gone... rating: PG mov2 115

Variáveis de instância As variáveis de instância são declaradas na classe: public class Movie { public String title; public String rating; mov1 title: null rating: null Criação de vários movie : Movie mov1 = new Movie(); Movie mov2 = new Movie(); mov2 title: null rating: null 116 Acesso a variáveis de instância As variáveis públicas de instância podem ser acedidas através do operador. : public class Movie { public String title; public String rating; Movie mov1 = new Movie(); mov1.title = "Gone..."; if ( mov1.title.equals("gone... ") ) mov1.rating = "PG"; Será isto interessante? NÃO! 117

Exercício: Criar e manipular objectos public class MovieTest { public static void main(string[] args) { Movie mov1, mov2;? mov1.title = "Gone with the Wind"; mov2 = mov1; mov2.title = "Last Action Hero"; public class Movie { public String title; System.out.println("Movie 1 is " +? ); System.out.println("Movie 2 is " +? ); 118 Métodos Um método é equivalente a uma função ou subrotina de outras linguagens: modifier returntype methodname (argumentlist) { // method body Um método apenas pode ser definido na definição de uma classe. 119

Argumentos de Métodos public void setrating(string newrating) { rating = newrating; public void displaydetails() { System.out.println("Title is " + title); System.out.println("Rating is " + rating); 120 Retorno de valores dum método public class Movie { private String rating; public String getrating () { return rating; public void setrating (String r) { this.rating = r; 121

Invocar métodos a uma instância public class Movie { private String title, rating; public String getrating(){ return rating; public void setrating(string newrating){ rating = newrating; Movie mov1 = new Movie(); Operador. : if (mov1.getrating().equals("g")) 122 Encapsulamento As variáveis de instância devem ser declaradas private. Apenas métodos de instância podem ter acesso a variáveis de instância. O encapsulamento permite isolar a interface d uma classe da sua implementação interna. Movie mov1 = new Movie(); if ( mov1.rating.equals("pg") ) // Error mov1.setrating("pg"); // OK 123

Passagem de valores a métodos Quando um valor primitivo é passado a um método, é gerada uma cópia do valor: int num = 150; anobj.amethod(num); public void amethod(int arg) { if (arg < 0 arg > 100) arg = 0; num 150 System.out.println("num: " + num); arg 150 System.out.println("arg: " + arg); 124 Passagem de objectos a métodos Quando um objecto é passado a um método, o argumento refere o objecto original: Movie mov1 = new Movie("Gone "); mov1.setrating("pg"); anobj.amethod(mov1); mov1 title: "Gone " rating: "R" ref2 public void amethod(movie ref2) { ref2.setrating("r"); 125

Overloading de métodos Diversos métodos de uma classe podem ter o mesmo nome. Os métodos devem ter diferentes assinaturas. public class Movie { public void setprice() { price = 3.50; public void setprice(float newprice) { price = newprice; Movie mov1 = new Movie(); mov1.setprice(); mov1.setprice(3.25); 126 Inicialização de atributos As variáveis de instância podem ser inicializadas na sua declaração. public class Movie { private String title; private String rating = "G"; private int numofoscars = 0; A inicialização é feita na criação do objecto. Inicializações mais complexas devem ser colocadas num método construtor. 127

Construtores Para uma inicialização adequada, a classe deve fornecer construtores. O construtor é invocado automaticamente quando o objecto é criado: Normalmente declarado public Tem o mesmo nome da classe Não especifica nenhum tipo de retorno O compilador automaticamente fornece um construtor por defeito sem argumentos. 128 Definição de Construtores public class Movie { private String title; private String rating = "PG"; public Movie() { A classe Movie fornece title = "Last Action "; dois construtores public Movie(String newtitle) { title = newtitle; Movie mov1 = new Movie(); Movie mov2 = new Movie("Gone "); Movie mov3 = new Movie("The Good "); 129

A referência this Os métodos de instância recebem um argumento com o nome this, que refere para o objecto corrente. public class Movie { public void setrating(string newrating) { this.rating = newrating; this void anymethod() { Movie mov1 = new Movie(); Movie mov2 = new Movie(); mov1.setrating("pg"); mov1 mov2 title : null rating: PG title: null rating: null 130 Partilha de código entre construtores public class Movie { private String title; private String rating; Um construtor pode invocar outro através de this() public Movie() { this("g"); public Movie(String newrating) { rating = newrating; Movie mov2 = new Movie(); 131

Variáveis de Classe As variáveis de classe pertencem a uma classe e são comuns a todas as instâncias dessa classe. As variáveis de classe são declaradas como static na definição da classe. public class Movie { private static double minprice; // class var private String title, rating; // inst vars minprice title rating title rating title rating classe Movie objectos Movie 132 Inicialização de variáveis de classe As variáveis de classe podem ser inicializadas na declaração. A inicialização é realizada quando a classe é carregada. public class Movie { private static double minprice = 1.29; private String title, rating; private int length = 0; 133

Métodos de Classe Os métodos de classe são partilhados por todas as instâncias. São úteis para manipular variáveis de classe: public static void increaseminprice(double inc) { minprice += inc; Um método de classe pode ser invocado utilizando o nome da classe ou uma referência para um objecto. Movie.increaseMinPrice(.50); mov1.increaseminprice(.50); 134 Exercício: métodos de classe ou de instância? public class Movie { private static float price = 3.50f; private String rating; public static void setprice(float newprice) { price = newprice; public float getprice() { return price; Movie.setPrice(3.98f); Movie mov1 = new Movie( ); mov1.setprice(3.98f); float a = Movie.getPrice(); float b = mov1.getprice(); 135

Exemplos de Java Exemplos de métodos e variáveis static : main() Math.sqrt() System.out.println() public class MyClass { public static void main(string[] args) { double num, root; root = Math.sqrt(num); System.out.println("Root is " + root); 136 Variáveis final Uma variável declarada final é uma constante. Uma variável final não pode ser modificada. Uma variável final deve ser inicializada. Uma variável final é normalmente pública para permitir acesso externo. public final class Color { public final static Color black=new Color(0,0,0); 137

Garbage Collection Quando todas as referência para um objecto são eliminadas, o objecto é marcado para ser destruído. Garbage collection liberta a memória utilizada pelo objecto. Garbage collection é automática. Não existe necessidad de intervenção do programador, mas não possui qualquer controlo sobre quando o objecto é realmente destruído 138 O método finalize() Se um objecto utilizar um outro recurso (p.e. Um ficheiro), o objecto deve libertá-lo. Pode ser fornecido um método finalize(). O método finalize() é invocado antes do objecto ser destruído. public class Movie { public void finalize() { System.out.println("Goodbye"); 139

Resumo A definição de uma classe especifica as características comuns de um conjunto de objectos. Um objecto é uma instância de uma classe particular: Criam-se objectos através do operador new. Manipula-se um objecto através da invocação de métodos públicos de instância. Os métodos de instância recebem a referência this Os métodos podem ter diferentes implementações As classes fornecem um ou mais construtores para inicializar objectos. Podem ser definidos variáveis e métodos para implementar comportamentos globais à classe. 140