Post on 06-Jun-2015
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;
}};