Progettazione SW - 19 introduzione a java come linguaggio oop. lezione 9
OOP Java
-
Upload
jorge-c-s-cardoso -
Category
Education
-
view
2.246 -
download
0
description
Transcript of OOP Java
![Page 1: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/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 2010
![Page 2: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/2.jpg)
Conteúdo
• Objectos• Classes• Construtores• Destrutores• Encapsulamento• Herança• Method overriding• Strings
![Page 3: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/3.jpg)
Objectos no mundo realObjectos no mundo real podem ser descritos através de duas características essenciais: estado e comportamento.
Por exemplo, o cão do João tem: • estado (atributos):
o Cor: castanhoo Tamanho pêlo: curtoo Raça: Rafeiroo Idade: 3 anoso Nome: Bobi
• comportamentoo correo ladrao senta-seo comeo dorme
![Page 4: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/4.jpg)
Objectos no mundo realOutro exemplo: o automóvel do Jorge
• Atributos:o Cor: azul escuroo Marca: Opelo Modelo: Corsao Velocidade: paradoo Combustível: 30%
• Comportamento:o arrancaro aceleraro 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.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/5.jpg)
Classes no mundo realOs dois exemplos anteriores, cão e automóvel, referiam-se a objectos concretos (o cão do João e 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.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/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.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.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/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.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/8.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 Combustível
Comportamento:- Arrancar- Travar- Acelerar- Buzinar- Encher Depósito- *Parado?- *Mostrar Estado
Design Phase• Criar uma classe
o Veículo• Determinar a "superclass" (classe pai)
o ObjC => NSObjecto Java => Object (implicitamente)
• Que propriedades deve ter a classe?• Que acções deve ela implementar?
![Page 9: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/9.jpg)
OOP Concepts
Encapsulationkeep implementation private and separate from interface• Polymorphismdifferent objects, same interface• Inheritancehierarchical organization, share code, customize or extend behaviors
![Page 10: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/10.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 11: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/11.jpg)
Encapsulamento• Uma das vantagens da programação orientada a objectos é a de
permitir o encapsulamento dos dados/comportamento:o Por um lado, permite agrupar numa unidade lógica dados
associados a um determinado conceito e operações sobre esses dados.
o 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 12: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/12.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 13: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/13.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:o Os atributos podem ser declarados como vísiveis do
exterior (access modifier) keyword public
o Ou podem ser declarados como visíveis apenas pela classe keyword private
![Page 14: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/14.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)o Variáveis e métodos de classe: podem ser usados
mesmo sem criarmos um objectos dessa classeo 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"o static
![Page 15: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/15.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 16: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/16.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 17: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/17.jpg)
Construtores
• Muitas vezes, a inicialização do objecto é complexa (pode envolver mais do que apenas inicialização de variáveis) e apenas faz sentido ser realizada pelo próprio objecto que está a ser criado (em vez de ser feita pelo código que está a criar o objecto).
• Por isso, quando um objecto é criado, é invocado um método especial chamado construtor.
![Page 18: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/18.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).
• É o nome do construtor (e parâmetros) que colocamos a seguir à keyword 'new' quando criamos um objecto.
![Page 19: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/19.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 20: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/20.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.o Existe um método que é invocado antes de o objecto ser
recolhido pelo garbage colector mas raramente se usa.
![Page 21: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/21.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 22: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/22.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 23: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/23.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 o super()o super(param1, param2, etc);
![Page 24: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/24.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 25: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/25.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.o 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 26: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/26.jpg)
Method overriding
Method 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 27: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/27.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 28: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/28.jpg)
Exercício• Reimplementar o problema das operações sobre fracções com
objectos• Classe Fraction
o Atributos: ?o Construtores: ?o 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
o Atributos: duas Fraction, um operador (char)o Construtores: ?o Métodos: 1 método para efectuar a operação correspondente
sobre as duas Fraction
![Page 29: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/29.jpg)
Exercício
public 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 30: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/30.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 31: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/31.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 32: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/32.jpg)
Strings
• strings (texto)• Para guardarmos texto num programa usamos o tipo
o String
String nome = "Jorge";
System.out.println(nome);
// aplicado a Strings o operador + // significa concatenaçãonome = nome + " Cardoso";
System.out.println(nome);
![Page 33: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/33.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 34: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/34.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 35: OOP Java](https://reader033.fdocument.pub/reader033/viewer/2022061220/54bbf5384a7959a7388b4595/html5/thumbnails/35.jpg)
Fim
Cursos de Verão na Católica 2010http://porto.ucp.pt/cvc/
Jorge C. S. Cardoso, Luís Gustavo [email protected], [email protected]
http://slideshare.net/jorgecardoso (tag: cvc2010)
Código fonte: http://db.tt/AOFOfA2