linguagens poo

Post on 06-Jun-2015

2.218 Views

Category:

Documents

5 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

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

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

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 “.”)

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

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

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)

 

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

]

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

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

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

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

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);

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;

CClasses em Object Pascallasses em Object Pascal

var

Empregado: TEmpregado;

Gerente: TGerente;

implementation

var

NumeroDeEmpregados;

class procedure TEmpregado.Inicializa;

begin

NumeroDeEmpregados := 0;

end;

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;

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;

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;

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;

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

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

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

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; }

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;

}

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; }

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);

}

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

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

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

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.

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.

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;

}

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;

}

};

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;

}};

top related