linguagens poo

36
Linguagens Típicas Linguagens Típicas Classificação das linguagens com relação ao suporte a objetos: não baseadas em objetos não suporta objetos Pascal, C, FORTRAN e COBOL. baseadas em objetos suporte a objetos Modula-2, ADA, CLU, Simula, SmallTalk, C++ e Object Pascal

Upload: infogenius

Post on 06-Jun-2015

2.218 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Linguagens Poo

Linguagens TípicasLinguagens Típicas

Classificação das linguagens com relação ao suporte a objetos:

não baseadas em objetos

• não suporta objetos

• Pascal, C, FORTRAN e COBOL.

baseadas em objetos

• suporte a objetos

• Modula-2, ADA, CLU, Simula, SmallTalk, C++ e Object Pascal

Page 2: Linguagens Poo

Linguagens TípicasLinguagens Típicas

Classificação das linguagens com relação ao suporte a objetos:

baseadas em classes• todo objeto deve pertencer a uma classe• CLU, Simula, SmallTalk, C++, Java e

Object Pascal• ADA e Modula-2 não possuem classes

orientadas a objetos• hierarquia de classes (herança)• ADA-95, SmallTalk, C++, Java e Object

Pascal

Page 3: Linguagens Poo

Relacionamento entre classes de Relacionamento entre classes de linguagens baseadas em objetoslinguagens baseadas em objetos

Baseadas em Objetos

Baseadas em ClassesModula-2

Orientadas a ObjetosCLU

Java C++SmallTalk

+Classes

+Herança

Page 4: Linguagens Poo

A linguagem SmallTalkA linguagem SmallTalk

O paradigma de objetos é levado às últimas conseqüências

A idéia fundamental: uniformidade

Um objeto representa um componente do sistema: números, filas, diretórios de discos, compiladores, etc.

A maioria dos conceitos de POO são derivados de SmallTalk

Todas as classes são descendentes da classe Object

Page 5: Linguagens Poo

A linguagem SmallTalkA linguagem SmallTalk

Toda classe é instância de uma metaclasse

Todas as metaclasses são instâncias de uma classe chamada Metaclass

Um objeto é alocado explicitamente através da mensagem new

Não há mecanismos para destruição de um objeto

Uso de garbage collection

Page 6: Linguagens Poo

A linguagem SmallTalkA linguagem SmallTalk Não implementa herança múltipla Associação de mensagem com método

em tempo de execução Programa em SmallTalk é formado por

uma expressão ou uma seqüência de expressões separadas por “.”

Expressões podem ser: um literal uma variável (referência a um objeto) um envio de mensagem um bloco (uma seqüência, entre colchetes,

de expressões separadas por “.”)

Page 7: Linguagens Poo

Definição de classes em SmallTalkDefinição de classes em SmallTalkclass name

Empregado

superclass

  Object

Instance variable names

nome

salario

class variable names

NumEmpregados

class methods

initialize

NumEmpregados := 0

Page 8: Linguagens Poo

Definição de classes em SmallTalkDefinição de classes em SmallTalknew

| newEmp | newEmp := super new.NumEmpregados := NumEmpregados + 1.^newEmp

instance methodsnome: umNome

nome := umNomenome

^nomesalario: umSalario

salario := umSalariosalario

^salario

Page 9: Linguagens Poo

Definição de classes em SmallTalkDefinição de classes em SmallTalkclass name

Gerente

superclass

Empregado

instance variable names

comissao

instance methods

comissao: umaComissao

comissao := umaComissao

salario

^(salario + comissao)

 

Page 10: Linguagens Poo

Controle de fluxoControle de fluxo em SmallTalk em SmallTalk Comandos de controle de fluxo são realizados através de mensagens Exemplo de if

(numero \\ 2) = 0 ifTrue: [paridade := 'par'] ifFalse: [paridade := 'impar']

Exemplo de Loop While

i := 1.

[i <= lista size] whileTrue: [

lista at: i put: 0.

i := i + 1

]

Page 11: Linguagens Poo

Programa exemplo em SmallTalkPrograma exemplo em SmallTalk Contagem da quantidade de números ímpar em um

vetor

» 1ª linha: declaração de duas variáveis sem tipo

» 2ª linha: “v” torna-se o apontador para um vetor

» 3ª linha: “nOdd” recebe o objeto zero

» 4ª linha: envia a mensagem “do” para “v” executar uma expressão. Para cada elemento verifica se é ímpar; testa se o resultado é verdadeiro; se for, incrementa “nOdd”

» 5ª linha: atribui “nOdd” para a primeira posição de “v”

» 6ª linha: retorna “nOdd”

| v n O d d |v : = # (1 5 2 3 6 ) .n O d d : = 0 .v d o : [ : e le m | e le m o d d ifT r u e : [n O d d : = n O d d + 1 ] ] .v a t : 1 p u t: n O d d .^ n O d d

Page 12: Linguagens Poo

A linguagem Object PascalA linguagem Object Pascal

Desenvolvida a partir da linguagem Pascal: Objetos, Classes Herança

Teve grande destaque com o Delphi

Não permite herança múltipla

Não suporta polimorfismo paramétrico

Possui encapsulamento a nível de objeto e de Unit

Pode ser usada para várias aplicações: depende das bibliotecas de classes

Page 13: Linguagens Poo

A linguagem Object PascalA linguagem Object Pascal

Em Delphi, bibliotecas para RAD

Todas as classes são subclasses de TObject

Componentes de uma classe: Campos: itens de dados

Métodos: subrotinas que efetuam alguma operação em um objeto. Usa construtor e destrutor

Propriedades: atributos para os quais são definidas ações para a sua leitura e escrita

Page 14: Linguagens Poo

A linguagem Object PascalA linguagem Object Pascal

Cinco níveis de visibilidade: Public: nenhuma restrição

Protected: descendentes

Private: dentro da Unit

Published: igual a public, com informação de tipagem em tempo de execução

Automated: igual a public, servidor OLE

Page 15: Linguagens Poo

CClasses em Object Pascallasses em Object Pascalunit Exemplo

interface

type

TEmpregado = class

protected

Nome: string[30];

Salario: real;

public

constructor Create;

destructor Destroy;

procedure AtualizaNome (umNome: string);

function ObtemNome: string;

procedure AtualizaSalario (umSalario: real);

Page 16: Linguagens Poo

CClasses em Object Pascallasses em Object Pascalfunction ObtemSalario: real; virtual;

procedure AtualizaComissao( umaComissao: real); virtual; abstract;

class procedure Inicializa;

end;

  TGerente = class (TEmpregado)

private

Comissao: real;

public

construtor Create;

procedure AtualizaComissao( umaComissao: real); override;

function ObtemSalario; real; override;

end;

Page 17: Linguagens Poo

CClasses em Object Pascallasses em Object Pascal

var

Empregado: TEmpregado;

Gerente: TGerente;

implementation

var

NumeroDeEmpregados;

class procedure TEmpregado.Inicializa;

begin

NumeroDeEmpregados := 0;

end;

Page 18: Linguagens Poo

CClasses em Object Pascallasses em Object Pascal

constructor TEmpregado.Create;

begin

inherited Create;

Nome := ‘’;

Salario := 0.0;

NumeroDeEmpregados := NumerosDeEmpregados + 1;

end;

destructor TEmpregado.Destroy;

begin

inherited Destroy;

NumeroDeEmpregados := NumerosDeEmpregados - 1;

end;

Page 19: Linguagens Poo

CClasses em Object Pascallasses em Object Pascal

procedure TEmpregado.AtualizaNome (umNome: string);

begin

Nome := umNome;

end;

function TEmpregado.ObtemNome : string;

begin

ObtemNome := Nome;

end;

procedure TEmpregado.AtualizaSalario (umSalario: real);

begin

Salario := umSalario;

end;

Page 20: Linguagens Poo

CClasses em Object Pascallasses em Object Pascal

function TEmpregado.ObtemSalario : real;

begin

ObtemSalario := Salario;

end;

constructor TGerente.Create;

begin

inherited Create;

Comissao := 0.0;

end;

Page 21: Linguagens Poo

CClasses em Object Pascallasses em Object Pascal

procedure TGerente.AtualizaComissao (umaComissao: real);

begin

Comissao := umaComissao;

end;

function TGerente.ObtemSalario : real;

begin

ObtemSalario := Salario + Comissao;

end;

Page 22: Linguagens Poo

A linguagem de programação C++A linguagem de programação C++

Desenvolvida a partir da linguagem C, acrescentando:

conceitos de tipos abstratos de dados

mecanismo de herança

As classes não são descendentes de uma classe única

Visibilidade dos elementos da classe: Privada (“private”): dentro da classe

Protegida (“protected”): descendentes

Pública (“public”): todos

Page 23: Linguagens Poo

A linguagem de programação C++A linguagem de programação C++

Variáveis de classe implementadas através da cláusula static

Permite polimorfismo paramétrico

Sobrecarga de operadores

Introduz classes “amigas”: violação do encapsulamento

Possui métodos construtores e destrutores

Page 24: Linguagens Poo

A linguagem de programação C++A linguagem de programação C++

Um objeto pode ser criado como: Automático: sempre na declaração

Estático: no início do programa somente

Dinâmico: criado com o operador new e destruído com delete

Membro: membro de outra classe

Possui métodos virtuais para a ligação dinâmica

Permite a herança múltipla

Page 25: Linguagens Poo

Definição de classes em C++Definição de classes em C++

class Empregado {

string nome;

float salario;

static int numeroDeEmpregados;

public:

Empregado(string nome);

~Empregado(){--numeroDeEmpregados;}

void atualizaNome(string& umNome){ nome = umNome;

}

string& obtemNome() { return nome; }

Page 26: Linguagens Poo

Definição de classes em C++Definição de classes em C++

void atualizaSalario(float umSalario){ salario = umSalario;

}virtual float obtemSalario(){return salario;

}};int Empregado::numeroDeEmpregados = 0;Empregado::Empregado(string umNome) {nome = umNome;salario = 0.0;++numeroDeEmpregados;

}

Page 27: Linguagens Poo

Definição de classes em C++Definição de classes em C++

class Gerente : public Empregado {float comissao;

public:Gerente(string nome);void atualizaComissao(float); virtual float obtemSalario();

};

Gerente::Gerente(string nome):Empregado(nome){

comissao = 0.0; }

Page 28: Linguagens Poo

Definição de classes em C++Definição de classes em C++

void Gerente::

atualizaComissao(float umaComissao){

comissao = umaComissao;

}

float Gerente::obtemSalario() {

return (Empregado::obtemSalario() +

comissao);

}

Page 29: Linguagens Poo

A lA linguagem Javainguagem Java

Sintaxe similar a C++

Elementos básicos da linguagem são: objetos, classes e interfaces

Bytecode interpretado sobre máquina virtual

Independência de ambiente operacional

Herança simples e múltiplas interfaces Simulação de herança múltipla através das

interfaces

Page 30: Linguagens Poo

A lA linguagem Javainguagem Java

Tipos fortes, com ligação dinâmica

Coleta de lixo

Sem aritmética de ponteiros

Bibliotecas portáveis

Threads e monitores Programação concorrente

Integração com C/C++ Métodos nativos

Page 31: Linguagens Poo

A lA linguagem Javainguagem Java

Classes armazenadas em pacotes

Uso de tipos primitivos boolean, char, int, float

Uso de comandos de controle de fluxo if, switch, while, for, do…while

Modificadores de Visibilidade private protected public friendly

Page 32: Linguagens Poo

A lA linguagem Javainguagem Java private

Aplicado à declaração de um método ou variável, o modificador private torna este elemento acessível apenas ao código da classe onde está declarado.

Aplicado à declaração de uma classe ou interface torna esta classe ou interface inacessível fora do arquivo onde está declarada.

protected Aplicado à declaração de um método ou variável

de uma classe, torna este elemento acessível apenas às classes que pertencem ao mesmo pacote desta classe, e ao código das classes que herdam desta primeira.

Page 33: Linguagens Poo

A lA linguagem Javainguagem Java protected

Aplicado à declaração de uma classe ou interface torna esta classe ou interface visível apenas no escopo do pacote onde está declarada.

public Aplicado à declaração de um método, variável,

classe ou interface elimina qualquer restrição de visibilidade a este elemento.

friendly (Default) Aplicado à declaração de um método, variável,

classe ou interface torna o elemento acessível no pacote onde foi declarado.

Page 34: Linguagens Poo

Definição de classes em Definição de classes em JavaJava

class Empregado {

private string nome;

private float salario;

private static int numeroEmpregados = 0;

public Empregado(String nome) {nome = umNome;salario = 0.0;++numeroDeEmpregados;

}

public void setNome(String umNome){ nome = umNome;

}

Page 35: Linguagens Poo

Definição de classes em Definição de classes em JavaJava

public String obtemNome() {

return nome;

}

public void setSalario(float salario){

this.salario = umSalario;

}

public float obtemSalario(){

return salario;

}

};

Page 36: Linguagens Poo

Definição de classes em Definição de classes em JavaJava

class Gerente extends Empregado {private float comissao;publicGerente(String nome) {super(nome);comissao = 0.0;

}publicvoid setComissao(float valor) {comissao = valor;

}publicfloat obtemSalario() {return super.obtemSalario()+comissao;

}};