Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Linguagens Poo

2,673 views

Published on

  • Be the first to comment

  • Be the first to like this

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>

×