Objeto (ciência da computação) - Object (computer science)

Na ciência da computação , um objeto pode ser uma variável , uma estrutura de dados , uma função ou um método e, como tal, é um valor na memória referenciado por um identificador .

No paradigma da programação orientada a objetos , objeto pode ser uma combinação de variáveis, funções e estruturas de dados; em particular nas variações do paradigma baseadas em classe, ele se refere 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).

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 objeto se inclui 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 se refere à capacidade de sobrecarregar o nome de uma função com vários comportamentos com base nos objetos que são passados ​​para ela. A passagem de mensagem 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. Herança é a capacidade de criar uma subclasse de uma classe de objeto, de 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 novos e / ou altera um ou mais deles.

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 ao início 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 dado 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). Os objetos podem corresponder a coisas encontradas no mundo real. Assim, por exemplo, um programa gráfico terá objetos como círculo , quadrado , 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 classes. Assim, por exemplo, com o sistema de compras, pode haver classes de alto nível, como produtos eletrônicos , produtos de cozinha e livros . Pode haver refinamentos adicionais, 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.

Objetos especializados

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

  • 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 depois.
  • Objeto de primeira classe : um objeto que pode ser usado sem restrição.
  • Objeto Container : 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 de protótipo : um metaobjeto especializado a partir do qual outros objetos podem ser criados copiando
  • Objeto de Deus : um objeto que sabe ou faz muito (é um exemplo de um antipadrão ).
  • Objeto singleton : um objeto que é a única instância de sua classe durante o tempo de vida do programa.
  • Objeto de filtro : 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 geralmente são usados ​​em wrappers, pois ocultam a implementação existente com a abstração necessária do 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, mais duradouros e mais orientados a serviços do que os objetos de programação.

Um método padrão para empacotar objetos distribuídos é por meio de uma linguagem de definição de interface (IDL). Um IDL protege o cliente de todos os detalhes do objeto de 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 para todos os objetos de maneira uniforme. Dois dos padrões mais populares para objetos distribuídos são o Object Management Group 's CORBA padrão e Microsoft ' s DCOM.

Além de objetos distribuídos, uma série de 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 protocolo que envolve a comunicação de rede em uma interface orientada a objetos.
  • Os 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 incluemobjetos CORBA tolerantes a falhas.
  • Objetos Live distribuídos (ou simplesmente objetos Live ) generalizam oconceito de objeto replicado para grupos de réplicas que podem usar internamente qualquer protocolo distribuído, talvez resultando em apenas uma fraca consistência 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 chamada 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 de consistência fraca 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 a Resource Description Framework (RDF). O RDF oferece a capacidade de definir objetos básicos - nomes, propriedades, atributos, relações - que podem ser acessados ​​pela Internet. O OWL adiciona um modelo de objeto mais rico, baseado na teoria dos conjuntos, que fornece recursos de modelagem adicionais, como herança múltipla .

Os objetos OWL não são como objetos distribuídos de granulação grande padrão acessados ​​por meio de uma linguagem de definição de interface. Essa 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 orientada a objetos tradicionais. Os objetos tradicionais são compilados em hierarquias estáticas geralmente com herança única, mas os objetos OWL são dinâmicos. Um objeto OWL pode alterar 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 maneira 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 for conhecido pelo sistema, ele será 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 é falsa, caso contrário, é considerada desconhecida, nem verdadeira nem falsa.

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

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

Objetos OOP Objetos da Web Semântica
As classes são consideradas tipos de instâncias. As classes são consideradas conjuntos de indivíduos.
As instâncias não podem alterar seu tipo em tempo de execução. A associação da 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 construção. Erros de tempo de compilação indicam problemas. Reasoners podem ser usados ​​para classificação e verificação de consistência em tempo de execução ou 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 tratadas 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, ela é considerada falsa. Mundo aberto: se não houver informações suficientes para provar a veracidade de uma afirmação, ela pode ser verdadeira ou falsa.

Veja também

Referências

links externos