Linguagens Poo

2,425 views
2,307 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,425
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Linguagens Poo

  1. 1. Linguagens Típicas <ul><li>Classificação das linguagens com relação ao suporte a objetos: </li></ul><ul><ul><li>não baseadas em objetos </li></ul></ul><ul><ul><ul><li>não suporta objetos </li></ul></ul></ul><ul><ul><ul><li>Pascal, C, FORTRAN e COBOL. </li></ul></ul></ul><ul><ul><li>baseadas em objetos </li></ul></ul><ul><ul><ul><li>suporte a objetos </li></ul></ul></ul><ul><ul><ul><li>Modula-2, ADA, CLU, Simula, SmallTalk, C++ e Object Pascal </li></ul></ul></ul>
  2. 2. Linguagens Típicas <ul><li>Classificação das linguagens com relação ao suporte a objetos: </li></ul><ul><ul><li>baseadas em classes </li></ul></ul><ul><ul><ul><li>todo objeto deve pertencer a uma classe </li></ul></ul></ul><ul><ul><ul><li>CLU, Simula, SmallTalk, C++, Java e Object Pascal </li></ul></ul></ul><ul><ul><ul><li>ADA e Modula-2 não possuem classes </li></ul></ul></ul><ul><ul><li>orientadas a objetos </li></ul></ul><ul><ul><ul><li>hierarquia de classes (herança) </li></ul></ul></ul><ul><ul><ul><li>ADA-95, SmallTalk, C++, Java e Object Pascal </li></ul></ul></ul>
  3. 3. Relacionamento entre classes de linguagens baseadas em objetos
  4. 4. A linguagem SmallTalk <ul><li>O paradigma de objetos é levado às últimas conseqüências </li></ul><ul><ul><li>A idéia fundamental: uniformidade </li></ul></ul><ul><li>Um objeto representa um componente do sistema: números, filas, diretórios de discos, compiladores, etc. </li></ul><ul><li>A maioria dos conceitos de POO são derivados de SmallTalk </li></ul><ul><li>Todas as classes são descendentes da classe Object </li></ul>
  5. 5. A linguagem SmallTalk <ul><li>Toda classe é instância de uma metaclasse </li></ul><ul><ul><li>Todas as metaclasses são instâncias de uma classe chamada Metaclass </li></ul></ul><ul><li>Um objeto é alocado explicitamente através da mensagem new </li></ul><ul><li>Não há mecanismos para destruição de um objeto </li></ul><ul><ul><li>Uso de garbage collection </li></ul></ul>
  6. 6. A linguagem SmallTalk <ul><li>Não implementa herança múltipla </li></ul><ul><li>Associação de mensagem com método em tempo de execução </li></ul><ul><li>P rograma em SmallTalk é formado por uma expressão ou uma seqüência de expressões separadas por “.” </li></ul><ul><li>Expressões podem ser: </li></ul><ul><ul><li>um literal </li></ul></ul><ul><ul><li>uma variável (referência a um objeto) </li></ul></ul><ul><ul><li>um envio de mensagem </li></ul></ul><ul><ul><li>um bloco (uma seqüência, entre colchetes, de expressões separadas por “.”) </li></ul></ul>
  7. 7. Definição de classes em SmallTalk <ul><li>class name </li></ul><ul><li>Empregado </li></ul><ul><li>superclass </li></ul><ul><li>  Object </li></ul><ul><li>Instance variable names </li></ul><ul><li>nome </li></ul><ul><li>salario </li></ul><ul><li>class variable names </li></ul><ul><li>NumEmpregados </li></ul><ul><li>class methods </li></ul><ul><li>initialize </li></ul><ul><li>NumEmpregados := 0 </li></ul>
  8. 8. Definição de classes em SmallTalk <ul><li>new </li></ul><ul><li>| newEmp | </li></ul><ul><li>newEmp := super new. </li></ul><ul><li>NumEmpregados := NumEmpregados + 1. </li></ul><ul><li>^newEmp </li></ul><ul><li>instance methods </li></ul><ul><li>n ome: umNome </li></ul><ul><li>nome := umNome </li></ul><ul><li>nome </li></ul><ul><li>^nome </li></ul><ul><li>s alario: umSalario </li></ul><ul><li>salario := umSalario </li></ul><ul><li>salario </li></ul><ul><li>^salario </li></ul>
  9. 9. Definição de classes em SmallTalk <ul><li>class name </li></ul><ul><li>Gerente </li></ul><ul><li>superclass </li></ul><ul><li>Empregado </li></ul><ul><li>i nstance variable names </li></ul><ul><li>comissao </li></ul><ul><li>instance methods </li></ul><ul><li>c omissao: umaComissao </li></ul><ul><li>comissao := umaComissao </li></ul><ul><li>salario </li></ul><ul><li>^(salario + comissao) </li></ul><ul><li>  </li></ul>
  10. 10. Controle de fluxo em SmallTalk <ul><li>Comandos de controle de fluxo são realizados através de mensagens </li></ul><ul><li>Exemplo de if </li></ul><ul><li>( numero 2 ) = 0 ifTrue: [paridade := 'par'] ifFalse: [paridade := 'impar'] </li></ul><ul><li>Exemplo de Loop While </li></ul><ul><li>i := 1. </li></ul><ul><li>[ i <= lista size ] whileTrue: [ </li></ul><ul><ul><li>lista at: i put: 0. </li></ul></ul><ul><ul><li>i := i + 1 </li></ul></ul><ul><li>] </li></ul>
  11. 11. Programa exemplo em SmallTalk <ul><li>Contagem da quantidade de números ímpar em um vetor </li></ul><ul><ul><li>1ª linha: declaração de duas variáveis sem tipo </li></ul></ul><ul><ul><li>2ª linha: “v” torna-se o apontador para um vetor </li></ul></ul><ul><ul><li>3ª linha: “nOdd” recebe o objeto zero </li></ul></ul><ul><ul><li>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” </li></ul></ul><ul><ul><li>5ª linha: atribui “nOdd” para a primeira posição de “v” </li></ul></ul><ul><ul><li>6ª linha: retorna “nOdd ” </li></ul></ul>
  12. 12. A linguagem Object Pascal <ul><li>Desenvolvida a partir da linguagem Pascal: Objetos, Classes Herança </li></ul><ul><li>Teve grande destaque com o Delphi </li></ul><ul><li>Não permite herança múltipla </li></ul><ul><li>Não suporta polimorfismo paramétrico </li></ul><ul><li>Possui encapsulamento a nível de objeto e de Unit </li></ul><ul><li>Pode ser u s ada para várias aplicações: depende das bibliotecas de classes </li></ul>
  13. 13. A linguagem Object Pascal <ul><li>Em Delphi, bibliotecas para RAD </li></ul><ul><li>Todas as classes são subclasses de TObject </li></ul><ul><li>Componentes de uma classe: </li></ul><ul><ul><li>Campos : itens de dados </li></ul></ul><ul><ul><li>Métodos : subrotinas que efetuam alguma operação em um objeto. Usa construtor e destrutor </li></ul></ul><ul><ul><li>Propriedades : atributos para os quais são definidas ações para a sua leitura e escrita </li></ul></ul>
  14. 14. A linguagem Object Pascal <ul><li>Cinco níveis de visibilidade: </li></ul><ul><ul><li>Public : nenhuma restrição </li></ul></ul><ul><ul><li>Protected : descendentes </li></ul></ul><ul><ul><li>Private : dentro da Unit </li></ul></ul><ul><ul><li>Published : igual a public, com informação de tipagem em tempo de execução </li></ul></ul><ul><ul><li>Automated : igual a public, servidor OLE </li></ul></ul>
  15. 15. C lasses em Object Pascal <ul><li>unit Exemplo </li></ul><ul><li>interface </li></ul><ul><li>type </li></ul><ul><li>TEmpregado = class </li></ul><ul><li>protected </li></ul><ul><li>Nome: string[30]; </li></ul><ul><li>Salario: real; </li></ul><ul><li>public </li></ul><ul><li>constructor Create; </li></ul><ul><li>destructor Destroy; </li></ul><ul><li>procedure AtualizaNome (umNome: string); </li></ul><ul><li>function ObtemNome: string; </li></ul><ul><li>procedure AtualizaSalario (umSalario: real); </li></ul>
  16. 16. C lasses em Object Pascal <ul><li>function ObtemSalario: real; virtual ; </li></ul><ul><li>procedure AtualizaComissao( umaComissao: real); virtual ; abstract ; </li></ul><ul><li>class procedure Inicializa; </li></ul><ul><li>end ; </li></ul><ul><li>  TGerente = class (TEmpregado) </li></ul><ul><li>privat e </li></ul><ul><li>Comissao: real; </li></ul><ul><li>public </li></ul><ul><li>construtor Create; </li></ul><ul><li>procedure AtualizaComissao( umaComissao: real); override ; </li></ul><ul><li>function ObtemSalario; real; override ; </li></ul><ul><li>end ; </li></ul>
  17. 17. C lasses em Object Pascal <ul><li>var </li></ul><ul><li>Empregado: TEmpregado; </li></ul><ul><li>Gerente: TGerente; </li></ul><ul><li>implementation </li></ul><ul><li>var </li></ul><ul><li>NumeroDeEmpregados; </li></ul><ul><li>class procedure TEmpregado.Inicializa; </li></ul><ul><li>begin </li></ul><ul><li>NumeroDeEmpregados := 0; </li></ul><ul><li>end ; </li></ul>
  18. 18. C lasses em Object Pascal <ul><li>constructor TEmpregado.Create; </li></ul><ul><li>begin </li></ul><ul><li>inherited Create; </li></ul><ul><li>Nome := ‘’; </li></ul><ul><li>Salario := 0.0; </li></ul><ul><li>NumeroDeEmpregados := NumerosDeEmpregados + 1; </li></ul><ul><li>end ; </li></ul><ul><li>destructor TEmpregado.Destroy; </li></ul><ul><li>begin </li></ul><ul><li>inherited Destroy; </li></ul><ul><li>NumeroDeEmpregados := NumerosDeEmpregados - 1; </li></ul><ul><li>end ; </li></ul>
  19. 19. C lasses em Object Pascal <ul><li>procedure TEmpregado.AtualizaNome (umNome: string); </li></ul><ul><li>begin </li></ul><ul><li>Nome := umNome; </li></ul><ul><li>end ; </li></ul><ul><li>function TEmpregado.ObtemNome : string; </li></ul><ul><li>begin </li></ul><ul><li>ObtemNome := Nome; </li></ul><ul><li>end ; </li></ul><ul><li>procedure TEmpregado.AtualizaSalario (umSalario: real); </li></ul><ul><li>begin </li></ul><ul><li>Salario := umSalario; </li></ul><ul><li>end ; </li></ul>
  20. 20. C lasses em Object Pascal <ul><li>function TEmpregado.ObtemSalario : real; </li></ul><ul><li>begin </li></ul><ul><li>ObtemSalario := Salario; </li></ul><ul><li>end ; </li></ul><ul><li>constructor TGerente.Create; </li></ul><ul><li>begin </li></ul><ul><li>inherited Create; </li></ul><ul><li>Comissao := 0.0; </li></ul><ul><li>end ; </li></ul>
  21. 21. C lasses em Object Pascal <ul><li>procedure TGerente.AtualizaComissao (umaComissao: real); </li></ul><ul><li>begin </li></ul><ul><li>Comissao := umaComissao; </li></ul><ul><li>end ; </li></ul><ul><li>function TGerente.ObtemSalario : real; </li></ul><ul><li>begin </li></ul><ul><li>ObtemSalario := Salario + Comissao; </li></ul><ul><li>end ; </li></ul>
  22. 22. A linguagem de programação C++ <ul><li>Desenvolvida a partir da linguagem C, acrescentando: </li></ul><ul><ul><li>conceitos de tipos abstratos de dados </li></ul></ul><ul><ul><li>mecanismo de herança </li></ul></ul><ul><li>As classes não são descendentes de uma classe única </li></ul><ul><li>Visibilidade dos elementos da classe: </li></ul><ul><ul><li>Privada (“private”): dentro da classe </li></ul></ul><ul><ul><li>Protegida (“protected”): descendentes </li></ul></ul><ul><ul><li>Pública (“public”): todos </li></ul></ul>
  23. 23. A linguagem de programação C++ <ul><li>Variáveis de classe implementadas através da cláusula static </li></ul><ul><li>Permite polimorfismo paramétrico </li></ul><ul><ul><li>Sobrecarga de operadores </li></ul></ul><ul><li>Introduz classes “amigas”: violação do encapsulamento </li></ul><ul><li>Possui métodos construtores e destrutores </li></ul>
  24. 24. A linguagem de programação C++ <ul><li>Um objeto pode ser criado como: </li></ul><ul><ul><li>Automático : sempre na declaração </li></ul></ul><ul><ul><li>Estático: no início do programa somente </li></ul></ul><ul><ul><li>Dinâmico: criado com o operador new e destruído com delete </li></ul></ul><ul><ul><li>Membro: membro de outra classe </li></ul></ul><ul><li>Possui métodos virtuais para a ligação dinâmica </li></ul><ul><li>Permite a herança múltipla </li></ul>
  25. 25. Definição de classes em C++ <ul><li>class E mpregado { </li></ul><ul><li>string nome; </li></ul><ul><li>float salario; </li></ul><ul><li>static int numeroDeEmpregados; </li></ul><ul><li>public: </li></ul><ul><li>E mpregado( string nome ); </li></ul><ul><li>~ E mpregado(){--numeroDeEmpregados;} </li></ul><ul><li>void atualizaNome(string & umNome){ nome = umNome; </li></ul><ul><li>} </li></ul><ul><li>string& obtemNome() { return nome; } </li></ul>
  26. 26. Definição de classes em C++ <ul><li>void atualizaSalario(float umSalario){ </li></ul><ul><li>salario = umSalario; </li></ul><ul><li>} </li></ul><ul><li>virtual float obtemSalario(){ </li></ul><ul><li>return salario; </li></ul><ul><li>} </li></ul><ul><li>}; </li></ul><ul><li>int E mpregado::numeroDeEmpregados = 0; </li></ul><ul><li>E mpregado:: E mpregado( string umNome ) { </li></ul><ul><li>nome = umNome ; </li></ul><ul><li>salario = 0.0; </li></ul><ul><li>++numeroDeEmpregados; </li></ul><ul><li>} </li></ul>
  27. 27. Definição de classes em C++ <ul><li>class Gerente : public Empregado { </li></ul><ul><li>float comissao; </li></ul><ul><li>public: </li></ul><ul><li>G erente( string nome ) ; </li></ul><ul><li>void atualizaComissao(float ); virtual float obtemSalario(); </li></ul><ul><li>} ; </li></ul><ul><li>Gerente::G erente( string nome ) </li></ul><ul><li>:Empregado(nome) { </li></ul><ul><li>comissao = 0.0; </li></ul><ul><li>} </li></ul>
  28. 28. Definição de classes em C++ <ul><li>void Gerente:: </li></ul><ul><li>atualizaComissao(float umaComissao){ </li></ul><ul><li>comissao = umaComissao; </li></ul><ul><li>} </li></ul><ul><li>float Gerente::obtemSalario() { </li></ul><ul><li>return (Empregado::obtemSalario() + </li></ul><ul><li>comissao); </li></ul><ul><li>} </li></ul>
  29. 29. A l inguagem Java <ul><li>Sintaxe similar a C++ </li></ul><ul><li>Elementos básicos da linguagem são: o bjetos, classes e interfaces </li></ul><ul><li>Bytecode interpretado sobre máquina virtual </li></ul><ul><ul><li>Independência de ambiente operacional </li></ul></ul><ul><li>Herança simples e múltiplas interfaces </li></ul><ul><ul><li>Simulação de herança múltipla através das interfaces </li></ul></ul>
  30. 30. A l inguagem Java <ul><li>Tipos fortes, com ligação dinâmica </li></ul><ul><li>Coleta de lixo </li></ul><ul><li>Sem aritmética de ponteiros </li></ul><ul><li>Bibliotecas portáveis </li></ul><ul><li>Threads e monitores </li></ul><ul><ul><li>Programação concorrente </li></ul></ul><ul><li>Integração com C/C++ </li></ul><ul><ul><li>Métodos nativos </li></ul></ul>
  31. 31. A l inguagem Java <ul><li>Classes armazenadas em pacotes </li></ul><ul><li>Uso de tipos primitivos </li></ul><ul><ul><li>boolean, char, int, float </li></ul></ul><ul><li>Uso de comandos de controle de fluxo </li></ul><ul><ul><li>if, switch, while, for, do…while </li></ul></ul><ul><li>Modificadores de Visibilidade </li></ul><ul><ul><li>p rivate </li></ul></ul><ul><ul><li>protected </li></ul></ul><ul><ul><li>public </li></ul></ul><ul><ul><li>friendly </li></ul></ul>
  32. 32. A l inguagem Java <ul><li>private </li></ul><ul><ul><li>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. </li></ul></ul><ul><ul><li>Aplicado à declaração de uma classe ou interface torna esta classe ou interface inacessível fora do arquivo onde está declarada. </li></ul></ul><ul><li>protected </li></ul><ul><ul><li>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. </li></ul></ul>
  33. 33. A l inguagem Java <ul><li>protected </li></ul><ul><ul><li>Aplicado à declaração de uma classe ou interface torna esta classe ou interface visível apenas no escopo do pacote onde está declarada. </li></ul></ul><ul><li>public </li></ul><ul><ul><li>Aplicado à declaração de um método, variável, classe ou interface elimina qualquer restrição de visibilidade a este elemento. </li></ul></ul><ul><li>friendly (Default) </li></ul><ul><ul><li>Aplicado à declaração de um método, variável, classe ou interface torna o elemento acessível no pacote onde foi declarado. </li></ul></ul>
  34. 34. Definição de classes em Java <ul><li>class E mpregado { </li></ul><ul><li>private string nome; </li></ul><ul><li>private float salario; </li></ul><ul><li>private static int numeroEmpregados = 0 ; </li></ul><ul><li>public E mpregado( String nome ) { </li></ul><ul><li>nome = umNome ; </li></ul><ul><li>salario = 0.0; </li></ul><ul><li>++numeroDeEmpregados; </li></ul><ul><li>} </li></ul><ul><li>public void set Nome( S tring umNome){ nome = umNome; </li></ul><ul><li>} </li></ul>
  35. 35. Definição de classes em Java <ul><li>public String obtemNome() { </li></ul><ul><li>return nome; </li></ul><ul><li>} </li></ul><ul><li>public void setSalario (float s alario ) { </li></ul><ul><li>this. salario = umSalario; </li></ul><ul><li>} </li></ul><ul><li>public float obtemSalario(){ </li></ul><ul><li>return salario; </li></ul><ul><li>} </li></ul><ul><li>}; </li></ul>
  36. 36. Definição de classes em Java <ul><li>class Gerente extends Empregado { </li></ul><ul><li>private float comissao; </li></ul><ul><li>public G erente( String nome ) { </li></ul><ul><li>super(nome); </li></ul><ul><li>comissao = 0.0; </li></ul><ul><li>} </li></ul><ul><li>public void set Comissao(float valor) { </li></ul><ul><li>comissao = valor; </li></ul><ul><li>} </li></ul><ul><li>public float obtemSalario() { </li></ul><ul><li>return super. obtemSalario()+comissao; </li></ul><ul><li>} </li></ul><ul><li>} ; </li></ul>

×