Objeto (ciência da computação)

Da Wikipédia, a enciclopédia livre
Ir para a navegação Saltar para pesquisar

Na ciência da computação , um objeto pode ser uma variável , uma estrutura de dados , uma função ou um método . Como regiões de memória , elas contêm valor e são referenciadas por identificadores .

No paradigma de programação orientada a objetos , objeto pode ser uma combinação de variáveis, funções e estruturas de dados; em particular em variações baseadas em classes do paradigma, refere-se a uma instância particular de uma classe .

No modelo relacional de gerenciamento de banco de dados , um objeto pode ser uma tabela ou coluna , ou uma associação entre dados e uma entidade de banco de dados (como relacionar a idade de uma pessoa a uma pessoa específica). [1]

Linguagens baseadas em objetos

Uma distinção importante em linguagens de programação é a diferença entre uma linguagem orientada a objetos e uma linguagem baseada em objetos. Uma linguagem geralmente é considerada baseada em objetos se incluir os recursos básicos de um objeto: identidade, propriedades e atributos. Uma linguagem é considerada orientada a objetos se for baseada em objetos e também tiver a capacidade de polimorfismo , herança, encapsulamento e, possivelmente, composição. Polimorfismo refere-se à capacidade de sobrecarregar o nome de uma função com vários comportamentos com base em quais objetos são passados ​​para ela. A passagem de mensagens convencional discrimina apenas no primeiro objeto e considera que está "enviando uma mensagem" para esse objeto. No entanto, algumas linguagens OOP, como Flavors e Common Lisp Object System(CLOS) permitem discriminar mais do que o primeiro parâmetro da função. [2] Herança é a habilidade de criar uma subclasse de uma classe de objeto, para criar uma nova classe que é uma subclasse de uma existente e herda todas as restrições de dados e comportamentos de seus pais, mas também adiciona novas e/ou altera uma ou mais delas . [3] [4]

Programação orientada a objetos

A programação orientada a objetos é uma abordagem para projetar sistemas de software reutilizáveis ​​modulares. A abordagem orientada a objetos é uma evolução das boas práticas de design que remontam aos primórdios da programação de computadores. A orientação a objetos é simplesmente a extensão lógica de técnicas mais antigas, como programação estruturada e tipos de dados abstratos . Um objeto é um tipo de dados abstrato com a adição de polimorfismo e herança .

Em vez de estruturar programas como código e dados, um sistema orientado a objetos integra os dois usando o conceito de "objeto". Um objeto tem estado (dados) e comportamento (código). Objetos podem corresponder a coisas encontradas no mundo real. Assim, por exemplo, um programa gráfico terá objetos como circle , square , menu . Um sistema de compras online terá objetos como carrinho de compras, cliente, produto . O sistema de compras suportará comportamentos como fazer pedidos , efetuar pagamentos e oferecer descontos . Os objetos são projetados como hierarquias de classe. Assim, por exemplo, com o sistema de compras, pode haver classes de alto nível, como produtos eletrônicos, produto de cozinha e livro . Pode haver outros refinamentos, por exemplo, em produtos eletrônicos : CD Player, DVD player , etc. Essas classes e subclasses correspondem a conjuntos e subconjuntos em lógica matemática. [5] [6]

Objetos especializados

Um conceito importante para objetos é o padrão de projeto . Um padrão de design fornece um modelo reutilizável para resolver um problema comum. As descrições de objetos a seguir são exemplos de alguns dos padrões de design mais comuns para objetos. [7]

  • Objeto de função : um objeto com um único método (em C++, esse método seria o operador de função, "operator()") que atua como uma função (como um ponteiro C/C++ para uma função).
  • Objeto imutável : um objeto configurado com um estado fixo no momento da criação e que não muda posteriormente.
  • Objeto de primeira classe : um objeto que pode ser usado sem restrições.
  • Objeto recipiente : um objeto que pode conter outros objetos.
  • Objeto de fábrica : um objeto cuja finalidade é criar outros objetos.
  • Metaobjeto : um objeto a partir do qual outros objetos podem ser criados (compare com uma classe , que não é necessariamente um objeto).
  • Objeto protótipo : um metaobjeto especializado a partir do qual outros objetos podem ser criados copiando
  • Objeto de Deus : um objeto que sabe ou faz demais (é um exemplo de antipadrão ).
  • Objeto singleton : um objeto que é a única instância de sua classe durante o tempo de vida do programa.
  • Filter object : um objeto que recebe um fluxo de dados como entrada e o transforma na saída do objeto. Freqüentemente, os fluxos de entrada e saída são fluxos de caracteres, mas também podem ser fluxos de objetos arbitrários. Eles são geralmente usados ​​em wrappers, pois ocultam a implementação existente com a abstração necessária no lado do desenvolvedor.

Objetos distribuídos

A abordagem orientada a objetos não é apenas um modelo de programação. Ele pode ser usado igualmente bem como uma linguagem de definição de interface para sistemas distribuídos. Os objetos em um modelo de computação distribuída tendem a ser mais granulados, duradouros e mais orientados a serviços do que objetos de programação.

Um método padrão para empacotar objetos distribuídos é por meio de uma Interface Definition Language (IDL). Um IDL protege o cliente de todos os detalhes do objeto servidor distribuído. Detalhes como em qual computador o objeto reside, qual linguagem de programação ele usa, qual sistema operacional e outros problemas específicos da plataforma. O IDL também costuma fazer parte de um ambiente distribuído que fornece serviços como transações e persistência a todos os objetos de maneira uniforme. Dois dos padrões mais populares para objetos distribuídos são o padrão CORBA do Object Management Group e o DCOM da Microsoft . [8]

Além dos objetos distribuídos, várias outras extensões ao conceito básico de um objeto foram propostas para permitir a computação distribuída:

  • Objetos de protocolo são componentes de uma pilha de protocolos que encerram a comunicação de rede em uma interface orientada a objetos.
  • Objetos replicados são grupos de objetos distribuídos (chamados de réplicas ) que executam um protocolo multipartidário distribuído para obter alta consistência entre seus estados internos e que respondem às solicitações de maneira coordenada. Os exemplos incluem objetos CORBA tolerantes a falhas
  • Objetos distribuídos ao vivo (ou simplesmente objetos ao vivo ) [9] generalizam o conceito de objeto replicado para grupos de réplicas que podem usar internamente qualquer protocolo distribuído, talvez resultando em apenas uma consistência fraca entre seus estados locais.

Algumas dessas extensões, como objetos distribuídos e objetos de protocolo , são termos específicos de domínio para tipos especiais de objetos "comuns" usados ​​em um determinado contexto (como invocação de método remoto ou composição de protocolo ). Outros, como objetos replicados e objetos distribuídos ao vivo , são mais fora do padrão, pois abandonam o caso usual de um objeto residir em um único local por vez e aplicam o conceito a grupos de entidades (réplicas) que podem abranger em vários locais, pode ter apenas um estado fracamente consistente e cuja associação pode mudar dinamicamente.

A Web Semântica

A Web Semântica é essencialmente uma estrutura de objetos distribuídos. Duas tecnologias chave na Web Semântica são a Web Ontology Language (OWL) e o Resource Description Framework (RDF). O RDF fornece a capacidade de definir objetos básicos – nomes, propriedades, atributos, relações – que são acessíveis pela Internet. OWL adiciona um modelo de objeto mais rico, baseado na teoria dos conjuntos, que fornece recursos de modelagem adicionais, como herança múltipla .

Objetos OWL não são como objetos distribuídos de grande granularidade padrão acessados ​​por meio de uma linguagem de definição de interface. Tal abordagem não seria apropriada para a Internet porque a Internet está em constante evolução e a padronização em um conjunto de interfaces é difícil de alcançar. Os objetos OWL tendem a ser semelhantes aos tipos de objetos usados ​​para definir modelos de domínio de aplicativo em linguagens de programação como Java e C++ .

No entanto, existem distinções importantes entre objetos OWL e objetos de programação orientados a objetos tradicionais. Objetos tradicionais são compilados em hierarquias estáticas geralmente com herança única, mas objetos OWL são dinâmicos. Um objeto OWL pode mudar sua estrutura em tempo de execução e pode se tornar uma instância de classes novas ou diferentes.

Outra diferença crítica é a forma como o modelo trata as informações que atualmente não estão no sistema. Objetos de programação e a maioria dos sistemas de banco de dados usam a " suposição de mundo fechado ". Se um fato não é conhecido pelo sistema, esse fato é considerado falso. Os objetos da Web Semântica usam a suposição de mundo aberto , uma declaração só é considerada falsa se houver informações reais relevantes de que ela é falsa, caso contrário, é considerada desconhecida, nem verdadeira nem falsa.

Os objetos OWL são, na verdade, mais parecidos com objetos em linguagens de quadro de inteligência artificial , como KL-ONE e Loom.

A tabela a seguir contrasta objetos tradicionais de linguagens de programação orientadas a objetos, como Java ou C++, com objetos da Web semântica: [10] [11]

Objetos OOP Objetos da Web Semântica
As classes são consideradas como tipos para instâncias. As classes são consideradas como conjuntos de indivíduos.
As instâncias não podem alterar seu tipo em tempo de execução. A associação de classe pode mudar em tempo de execução.
A lista de classes é totalmente conhecida em tempo de compilação e não pode ser alterada depois disso. As classes podem ser criadas e alteradas em tempo de execução.
Compiladores são usados ​​em tempo de compilação. Erros em tempo de compilação indicam problemas. Raciocinadores podem ser usados ​​para classificação e verificação de consistência em tempo de execução ou em tempo de construção.
As classes codificam muito de seu significado e comportamento por meio de funções e métodos imperativos. As classes tornam seu significado explícito em termos de declarações OWL. Nenhum código imperativo pode ser anexado.
As instâncias são anônimas na medida em que não podem ser facilmente endereçadas de fora de um programa em execução. Todos os recursos RDF e OWL nomeados têm um URI exclusivo sob o qual podem ser referenciados.
Mundo fechado: se não houver informações suficientes para provar que uma afirmação é verdadeira, então assume-se que ela é falsa. Mundo aberto: se não houver informações suficientes para provar que uma afirmação é verdadeira, então ela pode ser verdadeira ou falsa. [12]

Veja também

Referências

  1. ^ Oppel, Andy (2005). SQL Desmistificado . Monte McGraw. pág. 7. ISBN 0-07-226224-9.
  2. ^ Gabriel, Ricardo; Linda G. De Michie (1987). "O sistema de objetos Common Lisp: uma visão geral" (PDF) . Relatório Técnico da Lucid Inc. Notas de aula em Ciência da Computação. 276 : 151. Bibcode : 1987LNCS..276..151D . doi : 10.1007/3-540-47891-4_15 . ISBN  978-3-540-18353-2.
  3. ^ Wegner, Peter (dezembro de 1987). Meyrowitz, Norman (ed.). "Dimensões do Design de Linguagem Baseado em Objetos". Anais da Conferência OOPSLA'87 . 22 (12): 168–182. doi : 10.1145/38807.38823 .
  4. ^ Barbey, S; M. Kempe; A. Strohmeier (1993). "Programação Orientada a Objetos com Ada 9X" . Projeto de Relatório Técnico . Instituto Federal Suíço de Tecnologia em Laboratório de Engenharia de Software de Lausanne . Recuperado em 15 de dezembro de 2013 . O próprio Ada 83 geralmente não é considerado orientado a objetos; em vez disso, de acordo com a terminologia de Wegner [Weg 87], diz-se que é baseado em objetos, uma vez que fornece apenas uma forma restrita de herança e carece de polimorfismo.
  5. ^ Jacobsen, Ivar; Magnus Christerson; Patrik Jonsson; Gunnar Overgaard (1992). Engenharia de Software Orientada a Objetos . Addison-Wesley ACM Press. ISBN 0-201-54435-0.
  6. ^ "O que é um objeto?" . oracle . com . Corporação Oracle . Recuperado em 13 de dezembro de 2013 .
  7. ^ Martin, Robert C. "Princípios de design e padrões de design" (PDF) . Arquivado do original (PDF) em 6 de setembro de 2015 . Recuperado em 28 de abril de 2017 .
  8. ^ Orfali, Robert (1996). O Guia de Sobrevivência do Cliente/Servidor Essencial . Nova York: Wiley Computer Publishing. págs.  399–403 . ISBN 0-471-15325-7.
  9. Ostrowski, K., Birman, K., Dolev, D., e Ahnn, J. (2008). "Programação com Objetos Distribuídos ao Vivo", Anais da 22ª Conferência Europeia sobre Programação Orientada a Objetos , Paphos, Chipre, 07 a 11 de julho de 2008, J. Vitek, Ed., Lecture Notes in Computer Science , vol. 5142, Springer-Verlag, Berlim, Heidelberg, 463-489, http://portal.acm.org/citation.cfm?id=1428508.1428536 .
  10. ^ Berners-Lee, Tim; James Hendler; Ora Lassila (17 de maio de 2001). "A Web Semântica Uma nova forma de conteúdo da Web significativa para os computadores desencadeará uma revolução de novas possibilidades" . Científico Americano . 284 : 34-43. doi : 10.1038/scientificamerican0501-34 . Arquivado a partir do original em 24 de abril de 2013.
  11. ^ Knublauch, Holger; Oberle, Daniel; Tetlow, Phil; Wallace, Evan (2006-03-09). "Um Primer da Web Semântica para Desenvolvedores de Software Orientados a Objetos" . W3C . Recuperado em 30-07-2008 .
  12. ^ Tabela extraída de tabelas em: http://www.w3.org/2001/sw/BestPractices/SE/ODSD/

Links externos

0.05768609046936