SlideShare uma empresa Scribd logo
Programação Orientada a Objectos
      (OOP) - Part 1: Java
     Cursos de Verão na Católica 2011




        Jorge C. S. Cardoso, Luís Gustavo Martins
      jorgecardoso@ieee.org, lmartins@porto.ucp.pt
Conteúdo

● Objectos
● Classes
● Construtores
● Destrutores
● Encapsulamento
● Herança
● Method overriding
● Strings
Objectos no mundo real
                Objectos 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
Objectos no mundo real
                              Outro 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.)
Classes no mundo real
               O 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.
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
Um exemplo concreto: Classe Veículo
   Atributos:                           Comportamento:
   - Cor                                - Arrancar
   - Marca                              - Travar
   - Modelo                             - Acelerar
   - Peso                               - Buzinar
   - Vel. Máx.                          - Encher Depósito
   - Vel. Actual                        - *Parado?
   - Num. Rodas                         - *Mostrar Estado
   - Num. lugares
   - Kilómetros
   - Litros de Combustvel


              * Em OOP não temos de nos cingir à realidade :)
Um exemplo concreto: Classe Veículo
                                             Atributos:
 Design Phase                                - Cor
                                             - Marca
                                             - Modelo
                                             - Peso
                                             - Vel. Máx.
  ● Criar uma classe                         - Vel. Actual
                                             - Num. Rodas
      ○ Veículo                              - Num. lugares
                                             - Kilómetros
                                             - Litros de Combustível
  ● Determinar a "superclass" (classe pai)
      ○ ObjC => NSObject
                                             Comportamento:
      ○ Java => Object (implicitamente)      - Arrancar
                                             - Travar
                                             - Acelerar
  ● Que propriedades deve ter a classe?      - Buzinar
                                             - Encher Depósito
                                             - *Parado?
  ● Que acções deve ela implementar?         - *Mostrar Estado
Classe Veículo em Java
     public class Veiculo { // ficheiro Veiculo.java

     int velMax = 120; // em Km/h
     int 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() {//... }
     }
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)
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).
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
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
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");
    }
}
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!
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.
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.
Construtores em Java
Projecto Java-Construtor
                                               public static void main(String args[]) {
public class Veiculo {                           Veiculo v = new Veiculo();
// Atributos aqui                                Veiculo v1 = new Veiculo(130, 0, 3, 2);
   public Veiculo() {                            v.mostrarEstado();
   velMax = 120;                                 v1.mostrarEstado();
   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;
   }
}
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
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.
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.
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);
Herança em Java
Projecto Java-Heranca
public 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() { }
}
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").
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").
Method overriding em Java
    Projecto Java-Overriding
                                                                 Automovel a = new Automovel(130, 20, 4, 4);
                                                                 a.buzinar();
public class Veiculo {
                                                                 Bicicleta b = new Bicicleta();
  // Atributos aqui
                                                                 b.buzinar();
    // 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!");
        }
    }
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
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;
     }
Exercício
public 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;
}
}
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();
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ção
nome = nome + " Cardoso";

System.out.println(nome);
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.
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
Fim

Cursos de Verão na Católica 2011
     http://porto.ucp.pt/cvc/

  Jorge C. S. Cardoso, Luís Gustavo Martins
jorgecardoso@ieee.org, lmartins@porto.ucp.pt



http://slideshare.net/jorgecardoso (tag: cvc2011)

Mais conteúdo relacionado

Mais procurados

Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
Pedro De Almeida
 
Aula 09 - introducao oo
Aula 09 - introducao ooAula 09 - introducao oo
Aula 09 - introducao oo
Moacir Jóse Ferreira Junior Ferreira
 
Java 02
Java 02Java 02
Java 02
samuelthiago
 
Poo padadigmas
Poo padadigmasPoo padadigmas
Poo padadigmas
rafa nonato
 
Java - Boas práticas
Java - Boas práticasJava - Boas práticas
Java - Boas práticas
Felippe Rodrigo Puhle
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
Ludimila Monjardim Casagrande
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
Tony Alexander Hild
 
Introdução à Orientação a Objeto em Java
Introdução à Orientação a Objeto em JavaIntrodução à Orientação a Objeto em Java
Introdução à Orientação a Objeto em Java
Bruno Machado
 
Programação Orientada A Objectos (Poo)
Programação Orientada A Objectos (Poo)Programação Orientada A Objectos (Poo)
Programação Orientada A Objectos (Poo)
guest18b3c00
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
Cleyton Ferrari
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
Marconi Rodrigues
 
v
vv
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
Rodrigo Vieira
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetos
Nécio de Lima Veras
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
Charles Jungbeck
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
Ludimila Monjardim Casagrande
 
Aula orientação a objetos
Aula orientação a objetosAula orientação a objetos
Aula orientação a objetos
Gardênia Santana
 
Orientação a Objetos - Conceitos
Orientação a Objetos - ConceitosOrientação a Objetos - Conceitos
Orientação a Objetos - Conceitos
Mayron Cachina
 
Fundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosFundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetos
Evandro Agnes
 
Apresentação programação orientada à objetos
Apresentação   programação orientada à objetosApresentação   programação orientada à objetos
Apresentação programação orientada à objetos
soncino
 

Mais procurados (20)

Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
Aula 09 - introducao oo
Aula 09 - introducao ooAula 09 - introducao oo
Aula 09 - introducao oo
 
Java 02
Java 02Java 02
Java 02
 
Poo padadigmas
Poo padadigmasPoo padadigmas
Poo padadigmas
 
Java - Boas práticas
Java - Boas práticasJava - Boas práticas
Java - Boas práticas
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
Introdução à Orientação a Objeto em Java
Introdução à Orientação a Objeto em JavaIntrodução à Orientação a Objeto em Java
Introdução à Orientação a Objeto em Java
 
Programação Orientada A Objectos (Poo)
Programação Orientada A Objectos (Poo)Programação Orientada A Objectos (Poo)
Programação Orientada A Objectos (Poo)
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
v
vv
v
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetos
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
 
Aula orientação a objetos
Aula orientação a objetosAula orientação a objetos
Aula orientação a objetos
 
Orientação a Objetos - Conceitos
Orientação a Objetos - ConceitosOrientação a Objetos - Conceitos
Orientação a Objetos - Conceitos
 
Fundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosFundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetos
 
Apresentação programação orientada à objetos
Apresentação   programação orientada à objetosApresentação   programação orientada à objetos
Apresentação programação orientada à objetos
 

Semelhante a Oop java

10 - JS OOP.pptx
10 - JS OOP.pptx10 - JS OOP.pptx
10 - JS OOP.pptx
gabriel-colman
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Sérgio Souza Costa
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
Endel Silva
 
Poo
PooPoo
Java Básico :: Orientação a objetos
Java Básico :: Orientação a objetosJava Básico :: Orientação a objetos
Java Básico :: Orientação a objetos
Wesley R. Bezerra
 
Java7
Java7Java7
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
AndreCosta502039
 
Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0
Thiago Dieb
 
jQuery básico (parte 1)
jQuery básico (parte 1)jQuery básico (parte 1)
jQuery básico (parte 1)
Luís Cobucci
 
Minicurso javascript
Minicurso javascriptMinicurso javascript
Minicurso javascript
Lucas Aquiles
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem III
Juliano Weber
 
Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)
jose-junior89
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
Daniel Brandão
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
Luís Cobucci
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
Frederico Maia Arantes
 
3 orientacao-objetos
3 orientacao-objetos3 orientacao-objetos
3 orientacao-objetos
Thiago Oliveira
 
ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#
biandamakengo08
 
Padrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonPadrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - Singleton
Eduardo Nicola F. Zagari
 
Desenvolvimento em .Net - Programaçao Orientada a Objectos
Desenvolvimento em .Net - Programaçao Orientada a ObjectosDesenvolvimento em .Net - Programaçao Orientada a Objectos
Desenvolvimento em .Net - Programaçao Orientada a Objectos
Vitor Silva
 
Visao geralti netshoes03
Visao geralti netshoes03Visao geralti netshoes03
Visao geralti netshoes03
Ale Uehara
 

Semelhante a Oop java (20)

10 - JS OOP.pptx
10 - JS OOP.pptx10 - JS OOP.pptx
10 - JS OOP.pptx
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
 
Poo
PooPoo
Poo
 
Java Básico :: Orientação a objetos
Java Básico :: Orientação a objetosJava Básico :: Orientação a objetos
Java Básico :: Orientação a objetos
 
Java7
Java7Java7
Java7
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0
 
jQuery básico (parte 1)
jQuery básico (parte 1)jQuery básico (parte 1)
jQuery básico (parte 1)
 
Minicurso javascript
Minicurso javascriptMinicurso javascript
Minicurso javascript
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem III
 
Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
3 orientacao-objetos
3 orientacao-objetos3 orientacao-objetos
3 orientacao-objetos
 
ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#
 
Padrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonPadrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - Singleton
 
Desenvolvimento em .Net - Programaçao Orientada a Objectos
Desenvolvimento em .Net - Programaçao Orientada a ObjectosDesenvolvimento em .Net - Programaçao Orientada a Objectos
Desenvolvimento em .Net - Programaçao Orientada a Objectos
 
Visao geralti netshoes03
Visao geralti netshoes03Visao geralti netshoes03
Visao geralti netshoes03
 

Mais de Jorge Cardoso

Criação de Ambientes de Realidade Virtual usando A-Frame - CubeCraft Toys -...
Criação de Ambientes  de Realidade Virtual  usando A-Frame - CubeCraft Toys -...Criação de Ambientes  de Realidade Virtual  usando A-Frame - CubeCraft Toys -...
Criação de Ambientes de Realidade Virtual usando A-Frame - CubeCraft Toys -...
Jorge Cardoso
 
Criação de Ambientes de Realidade Virtual usando A-Frame
Criação de Ambientes  de Realidade Virtual  usando A-FrameCriação de Ambientes  de Realidade Virtual  usando A-Frame
Criação de Ambientes de Realidade Virtual usando A-Frame
Jorge Cardoso
 
Journal of Science and Technology of the Arts
Journal of Science and Technology of the ArtsJournal of Science and Technology of the Arts
Journal of Science and Technology of the Arts
Jorge Cardoso
 
Evaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic Augmentation
Evaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic AugmentationEvaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic Augmentation
Evaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic Augmentation
Jorge Cardoso
 
ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...
ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...
ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...
Jorge Cardoso
 
Digital tools for exploring roman mosaic
Digital tools for exploring roman mosaicDigital tools for exploring roman mosaic
Digital tools for exploring roman mosaic
Jorge Cardoso
 
Interaction techniques for locomotion in virtual reality
Interaction techniques for locomotion in virtual realityInteraction techniques for locomotion in virtual reality
Interaction techniques for locomotion in virtual reality
Jorge Cardoso
 
Interacção em ambientes de realidade virtual
Interacção em ambientes de realidade virtualInteracção em ambientes de realidade virtual
Interacção em ambientes de realidade virtual
Jorge Cardoso
 
PhD defense presentation
PhD defense presentationPhD defense presentation
PhD defense presentation
Jorge Cardoso
 
Dynamic graphical user interface generation for web-based public display appl...
Dynamic graphical user interface generation for web-based public display appl...Dynamic graphical user interface generation for web-based public display appl...
Dynamic graphical user interface generation for web-based public display appl...
Jorge Cardoso
 
Evaluation of a programming toolkit for interactive public display applications
Evaluation of a programming toolkit for interactive public display applicationsEvaluation of a programming toolkit for interactive public display applications
Evaluation of a programming toolkit for interactive public display applications
Jorge Cardoso
 
Interaction modalities, technologies and tools for interactive art
Interaction modalities, technologies and tools for interactive artInteraction modalities, technologies and tools for interactive art
Interaction modalities, technologies and tools for interactive art
Jorge Cardoso
 
PuReWidgets toolkit
PuReWidgets toolkitPuReWidgets toolkit
PuReWidgets toolkit
Jorge Cardoso
 
PuReWidgets presentation at EICS 2012
PuReWidgets presentation at EICS 2012PuReWidgets presentation at EICS 2012
PuReWidgets presentation at EICS 2012
Jorge Cardoso
 
PuReWidgets toolkit
PuReWidgets toolkit PuReWidgets toolkit
PuReWidgets toolkit
Jorge Cardoso
 
Assessing Feedback for Indirect Shared Interaction
Assessing Feedback for Indirect Shared InteractionAssessing Feedback for Indirect Shared Interaction
Assessing Feedback for Indirect Shared Interaction
Jorge Cardoso
 
Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao
Jorge Cardoso
 
Computer vision techniques for interactive art
Computer vision techniques for interactive artComputer vision techniques for interactive art
Computer vision techniques for interactive art
Jorge Cardoso
 
Introdução à Programacao em Processing
Introdução à Programacao em Processing Introdução à Programacao em Processing
Introdução à Programacao em Processing
Jorge Cardoso
 
Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)
Jorge Cardoso
 

Mais de Jorge Cardoso (20)

Criação de Ambientes de Realidade Virtual usando A-Frame - CubeCraft Toys -...
Criação de Ambientes  de Realidade Virtual  usando A-Frame - CubeCraft Toys -...Criação de Ambientes  de Realidade Virtual  usando A-Frame - CubeCraft Toys -...
Criação de Ambientes de Realidade Virtual usando A-Frame - CubeCraft Toys -...
 
Criação de Ambientes de Realidade Virtual usando A-Frame
Criação de Ambientes  de Realidade Virtual  usando A-FrameCriação de Ambientes  de Realidade Virtual  usando A-Frame
Criação de Ambientes de Realidade Virtual usando A-Frame
 
Journal of Science and Technology of the Arts
Journal of Science and Technology of the ArtsJournal of Science and Technology of the Arts
Journal of Science and Technology of the Arts
 
Evaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic Augmentation
Evaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic AugmentationEvaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic Augmentation
Evaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic Augmentation
 
ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...
ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...
ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...
 
Digital tools for exploring roman mosaic
Digital tools for exploring roman mosaicDigital tools for exploring roman mosaic
Digital tools for exploring roman mosaic
 
Interaction techniques for locomotion in virtual reality
Interaction techniques for locomotion in virtual realityInteraction techniques for locomotion in virtual reality
Interaction techniques for locomotion in virtual reality
 
Interacção em ambientes de realidade virtual
Interacção em ambientes de realidade virtualInteracção em ambientes de realidade virtual
Interacção em ambientes de realidade virtual
 
PhD defense presentation
PhD defense presentationPhD defense presentation
PhD defense presentation
 
Dynamic graphical user interface generation for web-based public display appl...
Dynamic graphical user interface generation for web-based public display appl...Dynamic graphical user interface generation for web-based public display appl...
Dynamic graphical user interface generation for web-based public display appl...
 
Evaluation of a programming toolkit for interactive public display applications
Evaluation of a programming toolkit for interactive public display applicationsEvaluation of a programming toolkit for interactive public display applications
Evaluation of a programming toolkit for interactive public display applications
 
Interaction modalities, technologies and tools for interactive art
Interaction modalities, technologies and tools for interactive artInteraction modalities, technologies and tools for interactive art
Interaction modalities, technologies and tools for interactive art
 
PuReWidgets toolkit
PuReWidgets toolkitPuReWidgets toolkit
PuReWidgets toolkit
 
PuReWidgets presentation at EICS 2012
PuReWidgets presentation at EICS 2012PuReWidgets presentation at EICS 2012
PuReWidgets presentation at EICS 2012
 
PuReWidgets toolkit
PuReWidgets toolkit PuReWidgets toolkit
PuReWidgets toolkit
 
Assessing Feedback for Indirect Shared Interaction
Assessing Feedback for Indirect Shared InteractionAssessing Feedback for Indirect Shared Interaction
Assessing Feedback for Indirect Shared Interaction
 
Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao
 
Computer vision techniques for interactive art
Computer vision techniques for interactive artComputer vision techniques for interactive art
Computer vision techniques for interactive art
 
Introdução à Programacao em Processing
Introdução à Programacao em Processing Introdução à Programacao em Processing
Introdução à Programacao em Processing
 
Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)
 

Último

O sentimento nacional brasiliero, segundo o historiador Jose Murlo de Carvalho
O sentimento nacional brasiliero, segundo o historiador Jose Murlo de CarvalhoO sentimento nacional brasiliero, segundo o historiador Jose Murlo de Carvalho
O sentimento nacional brasiliero, segundo o historiador Jose Murlo de Carvalho
analuisasesso
 
CADERNO DE CONCEITOS E ORIENTAÇÕES DO CENSO ESCOLAR 2024.pdf
CADERNO DE CONCEITOS E ORIENTAÇÕES DO CENSO ESCOLAR 2024.pdfCADERNO DE CONCEITOS E ORIENTAÇÕES DO CENSO ESCOLAR 2024.pdf
CADERNO DE CONCEITOS E ORIENTAÇÕES DO CENSO ESCOLAR 2024.pdf
NatySousa3
 
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdfCaderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
enpfilosofiaufu
 
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
LucianaCristina58
 
UFCD_5420_Integração de sistemas de informação - conceitos_índice.pdf
UFCD_5420_Integração de sistemas de informação - conceitos_índice.pdfUFCD_5420_Integração de sistemas de informação - conceitos_índice.pdf
UFCD_5420_Integração de sistemas de informação - conceitos_índice.pdf
Manuais Formação
 
“A classe operária vai ao paraíso os modos de produzir e trabalhar ao longo ...
“A classe operária vai ao paraíso  os modos de produzir e trabalhar ao longo ...“A classe operária vai ao paraíso  os modos de produzir e trabalhar ao longo ...
“A classe operária vai ao paraíso os modos de produzir e trabalhar ao longo ...
AdrianoMontagna1
 
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Biblioteca UCS
 
Caderno de Formação_PORTUGUÊS ESTRAN.pdf
Caderno de Formação_PORTUGUÊS ESTRAN.pdfCaderno de Formação_PORTUGUÊS ESTRAN.pdf
Caderno de Formação_PORTUGUÊS ESTRAN.pdf
carlaslr1
 
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxSlides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
LuizHenriquedeAlmeid6
 
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoAtividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
MateusTavares54
 
Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)
Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)
Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)
Centro Jacques Delors
 
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdfAPOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
RenanSilva991968
 
Vogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantilVogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantil
mamaeieby
 
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdfAPOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
RenanSilva991968
 
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
MessiasMarianoG
 
Apresentação_Primeira_Guerra_Mundial 9 ANO-1.pptx
Apresentação_Primeira_Guerra_Mundial 9 ANO-1.pptxApresentação_Primeira_Guerra_Mundial 9 ANO-1.pptx
Apresentação_Primeira_Guerra_Mundial 9 ANO-1.pptx
JulianeMelo17
 
A dinâmica da população mundial de acordo com as teorias populacionais.pptx
A dinâmica da população mundial de acordo com as teorias populacionais.pptxA dinâmica da população mundial de acordo com as teorias populacionais.pptx
A dinâmica da população mundial de acordo com as teorias populacionais.pptx
ReinaldoSouza57
 
Sócrates e os sofistas - apresentação de slides
Sócrates e os sofistas - apresentação de slidesSócrates e os sofistas - apresentação de slides
Sócrates e os sofistas - apresentação de slides
jbellas2
 
Estrutura Pedagógica - Laboratório de Educação a Distância.ppt
Estrutura Pedagógica - Laboratório de Educação a Distância.pptEstrutura Pedagógica - Laboratório de Educação a Distância.ppt
Estrutura Pedagógica - Laboratório de Educação a Distância.ppt
livrosjovert
 
0002_matematica_6ano livro de matemática
0002_matematica_6ano livro de matemática0002_matematica_6ano livro de matemática
0002_matematica_6ano livro de matemática
Giovana Gomes da Silva
 

Último (20)

O sentimento nacional brasiliero, segundo o historiador Jose Murlo de Carvalho
O sentimento nacional brasiliero, segundo o historiador Jose Murlo de CarvalhoO sentimento nacional brasiliero, segundo o historiador Jose Murlo de Carvalho
O sentimento nacional brasiliero, segundo o historiador Jose Murlo de Carvalho
 
CADERNO DE CONCEITOS E ORIENTAÇÕES DO CENSO ESCOLAR 2024.pdf
CADERNO DE CONCEITOS E ORIENTAÇÕES DO CENSO ESCOLAR 2024.pdfCADERNO DE CONCEITOS E ORIENTAÇÕES DO CENSO ESCOLAR 2024.pdf
CADERNO DE CONCEITOS E ORIENTAÇÕES DO CENSO ESCOLAR 2024.pdf
 
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdfCaderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
 
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
 
UFCD_5420_Integração de sistemas de informação - conceitos_índice.pdf
UFCD_5420_Integração de sistemas de informação - conceitos_índice.pdfUFCD_5420_Integração de sistemas de informação - conceitos_índice.pdf
UFCD_5420_Integração de sistemas de informação - conceitos_índice.pdf
 
“A classe operária vai ao paraíso os modos de produzir e trabalhar ao longo ...
“A classe operária vai ao paraíso  os modos de produzir e trabalhar ao longo ...“A classe operária vai ao paraíso  os modos de produzir e trabalhar ao longo ...
“A classe operária vai ao paraíso os modos de produzir e trabalhar ao longo ...
 
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
 
Caderno de Formação_PORTUGUÊS ESTRAN.pdf
Caderno de Formação_PORTUGUÊS ESTRAN.pdfCaderno de Formação_PORTUGUÊS ESTRAN.pdf
Caderno de Formação_PORTUGUÊS ESTRAN.pdf
 
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxSlides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
 
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoAtividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
 
Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)
Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)
Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)
 
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdfAPOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
 
Vogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantilVogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantil
 
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdfAPOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
 
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
 
Apresentação_Primeira_Guerra_Mundial 9 ANO-1.pptx
Apresentação_Primeira_Guerra_Mundial 9 ANO-1.pptxApresentação_Primeira_Guerra_Mundial 9 ANO-1.pptx
Apresentação_Primeira_Guerra_Mundial 9 ANO-1.pptx
 
A dinâmica da população mundial de acordo com as teorias populacionais.pptx
A dinâmica da população mundial de acordo com as teorias populacionais.pptxA dinâmica da população mundial de acordo com as teorias populacionais.pptx
A dinâmica da população mundial de acordo com as teorias populacionais.pptx
 
Sócrates e os sofistas - apresentação de slides
Sócrates e os sofistas - apresentação de slidesSócrates e os sofistas - apresentação de slides
Sócrates e os sofistas - apresentação de slides
 
Estrutura Pedagógica - Laboratório de Educação a Distância.ppt
Estrutura Pedagógica - Laboratório de Educação a Distância.pptEstrutura Pedagógica - Laboratório de Educação a Distância.ppt
Estrutura Pedagógica - Laboratório de Educação a Distância.ppt
 
0002_matematica_6ano livro de matemática
0002_matematica_6ano livro de matemática0002_matematica_6ano livro de matemática
0002_matematica_6ano livro de matemática
 

Oop java

  • 1. Programação Orientada a Objectos (OOP) - Part 1: Java Cursos de Verão na Católica 2011 Jorge C. S. Cardoso, Luís Gustavo Martins jorgecardoso@ieee.org, lmartins@porto.ucp.pt
  • 2. Conteúdo ● Objectos ● Classes ● Construtores ● Destrutores ● Encapsulamento ● Herança ● Method overriding ● Strings
  • 3. Objectos no mundo real Objectos 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
  • 4. Objectos no mundo real Outro 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.)
  • 5. Classes no mundo real O 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.
  • 6. 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
  • 7. Um exemplo concreto: Classe Veículo Atributos: Comportamento: - Cor - Arrancar - Marca - Travar - Modelo - Acelerar - Peso - Buzinar - Vel. Máx. - Encher Depósito - Vel. Actual - *Parado? - Num. Rodas - *Mostrar Estado - Num. lugares - Kilómetros - Litros de Combustvel * Em OOP não temos de nos cingir à realidade :)
  • 8. Um exemplo concreto: Classe Veículo Atributos: Design Phase - Cor - Marca - Modelo - Peso - Vel. Máx. ● Criar uma classe - Vel. Actual - Num. Rodas ○ Veículo - Num. lugares - Kilómetros - Litros de Combustível ● Determinar a "superclass" (classe pai) ○ ObjC => NSObject Comportamento: ○ Java => Object (implicitamente) - Arrancar - Travar - Acelerar ● Que propriedades deve ter a classe? - Buzinar - Encher Depósito - *Parado? ● Que acções deve ela implementar? - *Mostrar Estado
  • 9. Classe Veículo em Java public class Veiculo { // ficheiro Veiculo.java int velMax = 120; // em Km/h int 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() {//... } }
  • 10. 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)
  • 11. 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).
  • 12. 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
  • 13. 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
  • 14. 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"); } }
  • 15. 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!
  • 16. 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.
  • 17. 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.
  • 18. Construtores em Java Projecto Java-Construtor public static void main(String args[]) { public class Veiculo { Veiculo v = new Veiculo(); // Atributos aqui Veiculo v1 = new Veiculo(130, 0, 3, 2); public Veiculo() { v.mostrarEstado(); velMax = 120; v1.mostrarEstado(); 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; } }
  • 19. 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
  • 20. 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.
  • 21. 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.
  • 22. 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);
  • 23. Herança em Java Projecto Java-Heranca public 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() { } }
  • 24. 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").
  • 25. 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").
  • 26. Method overriding em Java Projecto Java-Overriding Automovel a = new Automovel(130, 20, 4, 4); a.buzinar(); public class Veiculo { Bicicleta b = new Bicicleta(); // Atributos aqui b.buzinar(); // 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!"); } }
  • 27. 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
  • 28. 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; }
  • 29. Exercício public 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; } }
  • 30. 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();
  • 31. 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ção nome = nome + " Cardoso"; System.out.println(nome);
  • 32. 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.
  • 34. Fim Cursos de Verão na Católica 2011 http://porto.ucp.pt/cvc/ Jorge C. S. Cardoso, Luís Gustavo Martins jorgecardoso@ieee.org, lmartins@porto.ucp.pt http://slideshare.net/jorgecardoso (tag: cvc2011)