Download - Oop java
![Page 1: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/1.jpg)
Programação Orientada a Objectos (OOP) - Part 1: Java
Jorge C. S. Cardoso, Luís Gustavo [email protected], [email protected]
Cursos de Verão na Católica 2011
![Page 2: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/2.jpg)
Conteúdo
● Objectos● Classes● Construtores● Destrutores● Encapsulamento● Herança● Method overriding● Strings
![Page 3: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/3.jpg)
Objectos no mundo realObjectos no mundo real podem ser descritos através de duas características essenciais: atributos (estado) e comportamento. Por exemplo, o cão do João tem:
● atributos:○ Cor: castanho○ Tamanho pêlo: curto○ Raça: Rafeiro○ Idade: 3 anos○ Nome: Bobi
● comportamento○ corre○ ladra○ senta-se○ come○ dorme
![Page 4: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/4.jpg)
Objectos no mundo realOutro exemplo: o automóvel do Jorge
● Atributos:○ Cor: azul escuro○ Marca: Opel○ Modelo: Corsa○ Velocidade: parado○ Combustível: 30%
● Comportamento:○ arrancar○ acelerar○ travar
(O comportamento não se refere necessariamente a comportamento autónomo, mas simplesmente a acções que o objecto pode realizar.)
![Page 5: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/5.jpg)
Classes no mundo realO exemplo anterior, automóvel, referia-se a um objecto concreto (o automóvel do Jorge).
No entanto, existem milhares de automóveis diferentes, com o mesmo comportamento e com os mesmos atributos (cor, marca, modelo, etc - embora não com os mesmos valores)
A este conjunto genérico de comportamentos e atributos dá-se o nome de classe.
![Page 6: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/6.jpg)
Classes em OOP
● Uma classe é, basicamente, um molde para a criação de objectos.
● Em OOP, ao processo de criar um objecto a partir de uma classe dá-se o nome de instanciação.
○ Usando o exemplo anterior, o objecto "Automóvel do Jorge" seria uma instância da classe "Automóvel".
● Os atributos são representados através de variáveis e o comportamento através de métodos.
http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2010-winter
![Page 7: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/7.jpg)
Um exemplo concreto: Classe Veículo
Atributos:- Cor- Marca- Modelo- Peso- Vel. Máx.- Vel. Actual- Num. Rodas- Num. lugares- Kilómetros- Litros de Combustvel
Comportamento:- Arrancar- Travar- Acelerar- Buzinar- Encher Depósito- *Parado?- *Mostrar Estado
* Em OOP não temos de nos cingir à realidade :)
![Page 8: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/8.jpg)
Um exemplo concreto: Classe VeículoAtributos:- Cor- Marca- Modelo- Peso- Vel. Máx.- Vel. Actual- Num. Rodas- Num. lugares- Kilómetros- Litros de Combustível
Comportamento:- Arrancar- Travar- Acelerar- Buzinar- Encher Depósito- *Parado?- *Mostrar Estado
Design Phase
● Criar uma classe○ Veículo
● Determinar a "superclass" (classe pai)○ ObjC => NSObject○ Java => Object (implicitamente)
● Que propriedades deve ter a classe?
● Que acções deve ela implementar?
![Page 9: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/9.jpg)
Classe Veículo em Java
public class Veiculo { // ficheiro Veiculo.java
int velMax = 120; // em Km/hint velActual = 0;int numRodas = 4;int numLugares = 5;public void arrancar() { // implementação do método arrancar}
public void travar() {//... }public void acelerar() {//... }public void buzinar() {//... }public boolean estaParado() {//... }public void mostrarEstado() {//... }}
![Page 10: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/10.jpg)
Encapsulamento● Uma das vantagens da programação orientada a objectos é a de
permitir o encapsulamento dos dados/comportamento:
○ Por um lado, permite agrupar numa unidade lógica dados associados a um determinado conceito e operações sobre esses dados.
○ Por outro lado, permite "esconder" informação do exterior, prevenindo erros e estados inconsistentes.
■ (Dentro do possível as classes devem ser implementadas de forma a não ser possível que código externo à classe altere dados, colocando o objecto num estado de erro)
![Page 11: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/11.jpg)
Encapsulamento● Estas duas propriedades facilitam o trabalho do
programador que utiliza os objectos: tal como no caso das funções, não é necessário compreender o funcionamento interno do objecto para tirar partido dele.
● A estruturação de um programa em classes/objectos permite também ao programador definir e restringir as interdependências entre código, tornando-o mais robusto e compreensível.
● (Sem objectos teríamos programas em que o estado e comportamento de diferentes componentes estariam todos misturados).
![Page 12: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/12.jpg)
Encapsulamento em Java ● A linguagem Java não força o encapsulamento na
perspectiva do "esconder" a informação do exterior● O programador escolhe:
○ Os atributos podem ser declarados como vísiveis do exterior (access modifier)
■ keyword public ○ Ou podem ser declarados como visíveis apenas pela
classe■ keyword private
![Page 13: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/13.jpg)
Java: Variáveis e Métodos de Classe e de Instância
● Apesar de isto não acontecer com objectos no mundo real, em OOP é possível modelar atributos (variáveis) e comportamento (métodos) como pertencentes à classe ou à instância da classe (objecto)
○ Variáveis e métodos de classe: podem ser usados mesmo sem criarmos um objectos dessa classe
○ Variáveis e métodos de instância: apenas podemos usá-los depois de instanciarmos o objecto (caso mais comum)
● Por omissão as variáveis e métodos são de instância, para os tornarmos de classe usamos o "access modifier"
○ static
![Page 14: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/14.jpg)
Java: Variáveis e Métodos de Classe e de Instância
public classe XPTO { public int var1 = 1; public static int var2 = 2;
public void metodo1() { System.out.println("Instancia"); } public static void metodo2() { System.out.println("Static"); }}
![Page 15: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/15.jpg)
Java: Variáveis e Métodos de Classe e de Instância
● Para usarmos variáveis/métodos de classe usamos a notação "." directamente no nome da classe
XPTO.var2 = 3; XPTO.metodo2(); //XPTO.metodo1(); // Erro!
![Page 16: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/16.jpg)
Construtores
● Para instanciar um objecto é necessário inicializar os seus atributos (variáveis) e, possivelmente, iniciar outras acções como estabelecer comunicações de rede, inicializar sensores, etc. Este tipo de inicialização só pode ser feita pelo próprio objecto que está a ser instanciado - encapsulamento.
● Por isso, quando um objecto é criado, é invocado um método especial chamado construtor.
![Page 17: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/17.jpg)
Construtores em Java
● Em Java, o construtor é um método com o mesmo nome da classe, mas sem tipo de retorno.
● Uma classe pode definir vários construtores com parâmetros diferentes (número e/ou tipo).
○ Chamado constructor overloading
● É o nome do construtor (e parâmetros) que colocamos a seguir à keyword 'new' quando criamos um objecto.
![Page 18: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/18.jpg)
Construtores em Java
public class Veiculo {// Atributos aqui public Veiculo() { velMax = 120; velActual = 0; numRodas = 4; numLugares = 5; } public Veiculo(int velMax, int velActual, int numRodas, int numLugares) {
this.velMax = velMax; this.velActual = velActual;this.numRodas = numRodas;this.numLugares = numLugares; } }
public static void main(String args[]) { Veiculo v = new Veiculo(); Veiculo v1 = new Veiculo(130, 0, 3, 2); v.mostrarEstado(); v1.mostrarEstado();}
Projecto Java-Construtor
![Page 19: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/19.jpg)
Destrutores
● Um destrutor é o oposto de um construtor: é um método especial invocado quando o objecto é destruído.
● O destrutor é usado para dar oportunidade ao objecto de libertar recursos (por exemplo memória).
● Em Java não existem destrutores porque a gestão de memória é feita automaticamente pelo garbage collector.
○ Em Obj-C existem destrutores
![Page 20: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/20.jpg)
Herança● Em muitos casos existe uma relação entre
classes diferentes num programa. ● Voltando aos veículos, o nosso programa
poderia necessitar de trabalhar com bicicletas e automóveis.
● Apesar de ambos serem veículos, uma parte do estado e alguns comportamentos são completamente diferentes.
![Page 21: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/21.jpg)
Herança● Nestes casos, faz mais sentido
modelar três classes: Automóvel e Bicicleta como classes derivadas da classe Veículo.
● Desta forma, evita-se repetir o estado e comportamento partilhados.
● Nesta situação, as classes Automóvel e Bicicleta, herdam o estado e comportamento de Veículo, podendo estendê-los.
● A classe Veículo é a superclasse e as classes Automóvel e Bicicleta as subclasses.
![Page 22: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/22.jpg)
Herança● As subclasses herdam todos os atributos e métodos da
superclasse, excepto os construtores.
● O construtor da subclasse deve invocar o construtor da superclasse
● (se a superclasse tiver um construtor vazio - sem parâmetros, este é invocado automaticamente).
● Para invocarmos o construtor da classe mãe usa-se a instrução
○ super()○ super(param1, param2, etc);
![Page 23: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/23.jpg)
Herança em JavaProjecto Java-Herancapublic class Automovel extends Veiculo {int numPortas;public Automovel() {// Não é necessário, o construtor vazio é invocado automaticamente, se não // o invocarmos nós //super();System.out.println("Automovel()");}public Automovel(int velMax, int velActual, int numRodas, int numLugares) {super(velMax, velActual, numRodas, numLugares);numPortas = 4;
System.out.println("Automovel(velMax, velActual, numRodas, numLugares)");}public void abrirPorta() { }public void ligarMotor() { }public void trocarOleo() { }}
![Page 24: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/24.jpg)
Method Overriding● Method overriding ("sobreposição de método") é uma
funcionalidade das linguagens OOP que permite a uma subclasse definir uma implementação mais específica de um método da superclasse.
○ Por exemplo, a classe Veículo define um método buzinar() com uma implementação genérica para todos os tipos de veículo ("horn"). No entanto, faz mais sentido a uma Bicicleta proporcionar uma implementação mais específica deste método ("ring ring").
![Page 25: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/25.jpg)
Method overridingMethod overriding permite à classe Bicicleta re-implementar um método da classe Veículo.
A classe Automóvel, como não re-implementa o método buzinar(), usa a implementação de Veículo ("horn").
![Page 26: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/26.jpg)
Method overriding em JavaProjecto Java-Overriding
public class Veiculo { // Atributos aqui
// Construtores
// outros métodos
public void buzinar() {System.out.println("Buzinar veículo: horn!"); }
}
public class Bicicleta extends Veiculo{ // Construtores // Outros métodos
@Override public void buzinar() { System.out.println("Buzinar bicicleta: ring ring!"); }}
Automovel a = new Automovel(130, 20, 4, 4);a.buzinar();Bicicleta b = new Bicicleta();b.buzinar();
![Page 27: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/27.jpg)
Exercício● Reimplementar o problema das operações sobre fracções com
objectos● Classe Fraction
○ Atributos: ?○ Construtores: ?○ Métodos: 4 métodos para efectuar as 4 operações aritméticas
■ Parametro: outra Fraction■ Retorno: uma Fraction que resulta da operação da própria
com o parâmetro● Classe Calculator
○ Atributos: duas Fraction, um operador (char)○ Construtores: ?○ Métodos: 1 método para efectuar a operação correspondente
sobre as duas Fraction
![Page 28: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/28.jpg)
Exercíciopublic class Fraction {
int numerator;int denominator;public void setTo(int n, int d) {this.numerator = n;this.denominator = d;}public Fraction add(Fraction f) {Fraction result = new Fraction();int resultNum, resultDenom;
resultNum = this.numerator*f.denominator + this.denominator*f.numerator;resultDenom = this.denominator * f.denominator;result.setTo(resultNum, resultDenom);result.reduce();return result; }
![Page 29: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/29.jpg)
Exercíciopublic class Calculator {
Fraction operand1, operand2;public Calculator(Fraction frac1, Fraction frac2) {operand1 = frac1;operand2 = frac2;}public Fraction performOperation(char op) {Fraction result = new Fraction();switch(op) {case '+':result = operand1.add(operand2);break;case '-':result = operand1.subtract(operand2);break;case '*':result = operand1.multiply(operand2);break;case '/':result = operand1.divide(operand2);break;}return result;}}
![Page 30: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/30.jpg)
Exercício Fraction f1 = new Fraction();Fraction f2 = new Fraction();Fraction result;f1.setTo(1, 4);f2.setTo(1, 4);Calculator calc = new Calculator(f1, f2);result = calc.performOperation('+');result.print();
![Page 31: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/31.jpg)
Strings● strings (texto)● Para guardarmos texto num programa usamos o tipo
○ String
String nome = "Jorge";
System.out.println(nome);
// aplicado a Strings o operador + // significa concatenaçãonome = nome + " Cardoso";
System.out.println(nome);
![Page 32: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/32.jpg)
Strings● As strings em Java são implementadas como objectos
String nome = "jorge";
● é o mesmo que char data[] = {'j', 'o', 'r', 'g', 'e'};String str = new String(data);
● Como as strings são tipos de dados muito comuns, para facilitar a sua utilização, apesar de internamente serem representadas como objectos, podemos nalguns aspectos usá-las como tipos primitivos.
![Page 33: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/33.jpg)
Referências
http://download.oracle.com/javase/tutorial/java/concepts/
http://en.wikipedia.org/wiki/Object-oriented_programming
http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)
http://en.wikipedia.org/wiki/Method_overriding
![Page 34: Oop java](https://reader033.vdocuments.com.br/reader033/viewer/2022042623/54bbf5274a79594b2e8b4601/html5/thumbnails/34.jpg)
Fim
Cursos de Verão na Católica 2011http://porto.ucp.pt/cvc/
Jorge C. S. Cardoso, Luís Gustavo [email protected], [email protected]
http://slideshare.net/jorgecardoso (tag: cvc2011)