Skip to content

Latest commit

 

History

History
210 lines (186 loc) · 4.39 KB

oo.org

File metadata and controls

210 lines (186 loc) · 4.39 KB

Introdução à OO

1 Sumário de tipos

Tipos compostos podem não ser suficientes

  • \pause A linguagem permite operações sobre eles?
  • \pause A linguagem faz validação e testes sobre eles?
  • \pause Podem representar qualquer elemento do mundo real?

\pause Alternativa

  • Encapsulamento de dados e suas operações
  • \pause Permite definir Tipos Abstratos de Dados
  • \pause Paradigma Orientado a Objetos

2 Tipos Abstratos de Dados

Compreendem

  • Tipo de dado
  • Conjunto de operações sobre o tipo

Escondem os mecanismos internos

Definidos pelo usuário

Elementos de primeira ordem

Exemplo?

  • \pause Classe

3 Classe

Define como um objeto vai parecer e se comportar

Estado é representado por atributos (variáveis)

Operações são representadas por métodos (funções)

Parecido com uma \texttt{struct} em C

  • Mas com os benefícios da orientação a objeto
    struct pessoa {
      char nome[100];
      int idade;
      float peso;
      void (*setPeso) (struct pessoa *p, float npeso);
      void (*setIdade) (struct pessoa *p, int nidade);
      float (*getPeso) (struct pessoa *p);
      int (*getIdade) (struct pessoa *p);
    };
        

4 Objeto

Instância de uma classe

Uma cópia construída a partir da classe

5 Exemplo de classe em C++

\small

class Pessoa {
   std::string nome;
   int idade;
   float peso;

   Pessoa ();
   ~Pessoa ();

   std::string getNome ();
   int getIdade ();
   float getPeso ();

   void setNome (std::string nnome);
   void setIdade (int nidade);
   void setPeso (float npeso);
};

6 Exemplo de classe em Objective-C

\small

@interface Pessoa : NSObject
{
   NSString *nome;
   int idade;
   float peso;
}
- (id) init;
- (void) dealloc;

- (NSString*) getNome;
- (int) getIdade;
- (float) getPeso;

- (void) setNome: (NSString*) nnome;
- (void) setIdade: (int) nidade;
- (void) setPeso: (float) npeso;
@end

7 Encapsulamento

Interface visível e consistente

Detalhes de implementação escondidos

\pause Contraponto com tipos primitivos

8 Especificadores de acesso

Controle de acesso aos atributos

Níveis de visibilidade

  • Públicos – por todo mundo
  • Protegidos – na classe e subclasses
  • Privados – na classe

9 Especificadores de acesso – Exemplo 1

Utilizando \texttt{struct} em C++ \small

struct Pessoa {
   std::string nome;
   int idade;
   float peso;
   Pessoa();
};

10 Especificadores de acesso – Exemplo 2

Utilizando \texttt{class} em C++ \small

class Pessoa {
  public:
   std::string nome;
  protected:
   int idade;
  private:
   float peso;
  public:
   Pessoa();
   ~Pessoa();
};

11 Especificadores de acesso – Exemplo 3

Objective-C \small

@interface Pessoa : NSObject
{
   @public
   NSString *nome;

   @private
   int idade;
   float peso;

   @protected
   NSString *sobrenome;
}
- (id) init;
- (void) dealloc;
...
@end

12 Métodos Especiais

Construtor

  • Faz a inicialização da instância da classe

\pause Java, C++

  • Sempre tem o mesmo nome da classe
  • Sempre é chamado quando um objeto é instanciado

\pause Objective-C

  • Existem diferentes formas de funcionamento

\pause Destrutor

  • Chamado quando o objeto é destruído (liberado)

\pause C++

  • Nome da classe antecedido por ~

\pause Objective-C

  • Método \texttt{dealoc} é chamado pelo ambiente de execução

13 Herança

Definir uma classe a partir de outra (classe pai)

A classe filha herda todos os atributos e métodos do pai

Exemplo em Objective-C \small

@interface VeiculoTerrestre : Veiculo
{
   float velocidadeMaxima;
   ...
}
...
@end

Exemplo em Smalltalk

Veiculo subclass: #VeiculoTerrestre
     instanceVariableNames: 'velocidadeMaxima ' 
     category: 'OnSmalltalk'