Definição do estado de um objeto no OOP

11

Eu preciso de uma definição concisa do "estado de um objeto" na programação orientada a objetos (para um artigo).

Por cerca de metade do dia, procurei um artigo que pudesse citar sobre esse tópico, mas não o encontrei. Todos os artigos que encontrei foram principalmente artigos gerais sobre programação orientada a objetos e não definiram o estado de um objeto.

Não tenho certeza, mas meu melhor palpite é algo como: O estado de um objeto é definido pelo estado das variáveis ​​de instância do objeto.

Estou procurando uma definição do estado de um objeto e / ou uma referência sobre o tópico.

(btw, eu poderia me referir ao conceito como "estado do objeto" ou isso é incomum?)

Mrsteve
fonte
Acho que há espaço para ambiguidade aqui, de modo que você deveria ter declarado em seu artigo exatamente o que você quer dizer com 'estado'; se você não pudesse fazer isso, talvez não estivesse em condições de divulgar seu trabalho.
PJTraill

Respostas:

9

Você pode dar uma olhada (e citar) no livro "Análise e Design Orientado a Objetos", de G. Booch :

... Um objeto é uma entidade que possui estado, comportamento e identidade. A estrutura e o comportamento de objetos semelhantes são definidos em sua classe comum. Os termos instância e objeto são intercambiáveis.

Consideraremos os conceitos de estado, comportamento e identidade em mais detalhes nas seções a seguir. ...

E há toda uma subseção que descreve o conceito de estado :

... A partir deste exemplo, podemos formar a seguinte definição de baixo nível.

O estado de um objeto abrange todas as propriedades (geralmente estáticas) do objeto mais os valores atuais (geralmente dinâmicos) de cada uma dessas propriedades ...

Vor
fonte
4
Difusa, como sempre. O que Booth provavelmente quis dizer: um estado é uma atribuição de valores para essas variáveis.
Reinierpost
3

Você também deve ter em mente que o estado de um objeto é uma entidade "abstrata", conforme determinado pelo que é observável pelos métodos. Por exemplo, um objeto que implementa uma tabela de hash tem como estado, a coleção de valores armazenados na tabela de hash, nem todos os detalhes da representação interna.

Uday Reddy
fonte
2

O termo ' estado ' pode ser usado em vários sentidos, que podem nem ser suscetíveis a uma definição precisa. Foi, portanto, importante que você inclua uma definição em seu jornal, para tornar claro como você estava usando o termo. A seguir, não ofereço uma definição única do estado de um objeto, mas tento esboçar várias maneiras de pensar sobre ele, que podem ser apropriadas em diferentes contextos.

Primeiro, no entanto, você precisa pensar no que você quer dizer com ' objeto ': você está pensando em um objeto conceitual, ou seja, em alguma entidade que está tentando modelar ou em uma instância de uma classe em um programa específico; talvez você também queira pensar no estado de uma variável que, em momentos diferentes, pode se referir a objetos diferentes ou a um sistema, talvez acessado por uma determinada interface do usuário.

Parte da dificuldade em definir o estado de um objeto no OOP é que, quando modelamos entidades em uma linguagem específica, essa linguagem geralmente não nos permite distinguir atributos de objetos que fazem parte da mesma entidade conceitualmente de outros que não são. Por exemplo, uma lista vinculada de Carconsistirá em vários Linkobjetos, que contêm ponteiros para o próximo (e talvez anterior), Linkembora conceitualmente a lista seja um único objeto; os links também podem ser incorporadosCar-objetos ou contêm ponteiros para eles, mas, neste caso, os objetos vinculados são conceitualmente separados, e não parte da lista; em uma lista de alterações recentes, em qualquer lugar, as alterações podem estar presentes apenas na lista e consideradas como parte dela. Nesses vários casos, devemos decidir se consideramos o estado de um objeto para incluir o estado dos objetos vinculados. Além disso, um Carpode ter um link para um Registering_Authority- provavelmente não consideramos o estado do carro alterado quando sua autoridade de registro altera o URL do site. A menos que a linguagem de implementação nos permita distinguir diferentes tipos de link, não será possível fazer uma definição geral do estado de um objeto apenas em termos da linguagem.

O ' externo ou' ' funcional ' estado poderia ser definido como 'como ele se comporta', ee.g. como ele reage a invocações de métodos ou a uma interface do usuário. Para um objeto como instância de classe, essa definição depende do tipo ao qual o objeto é visto como pertencente: visto como a Circle, a cor de umColoured_Circlenão é visível e, portanto, irrelevante para o seu estado. Uma dificuldade disso é que 'como ele reage' pode precisar ser definido em termos de valores retornados, e esses 'valores' podem ser os estados de outros objetos. Uma maneira de formalizar isso é dizer que dois estados de um objeto são os mesmos, se todas as execuções futuras possíveis de algum sistema no qual ele está incorporado resultam no mesmo mapeamento de entradas para esse sistema e saídas a partir dele. Pode ser necessário que esse sistema anexo seja um sistema autônomo, capaz de executar independentemente de seu ambiente; por outro lado, pode-se permitir que seja tão pequeno quanto o objeto em questão. Em qualquer caso, uma abordagem matemática é então definir um estado como uma classe de equivalência de

O estado ' interno ' pode ser definido como o estado da representação. Uma primeira tentativa é aparentemente circular, mas talvez útil: 'O estado interno de um objeto é o estado de seus membros'. Aqui, precisamos ter o cuidado de distinguir aspectos significativos da representação de aspectos insignificantes: no nível mais baixo, a representação de um objeto pode muito bem incluir endereços de outros objetos, mas é improvável que seja útil considerar uma alteração nesse endereço. como uma mudança de estado. Por outro lado, uma alteração no estado de um cache para o resultado de uma consulta, embora não faça diferença para o estado funcional (conforme descrito acima), será importante ao considerar os testes de desempenho.

PJTraill
fonte
Esta é uma das respostas mais úteis sobre o estado do objeto que encontrei. Existe um documento PDF on-line e é basicamente esse. Especialmente a parte sobre representação (estado interno). Abre meus olhos e me faz pensar sobre o objeto de maneira diferente.
carrossel
1

A IBM possui um glossário que define a palavra "estado" em várias definições diferentes muito semelhantes umas às outras. Eles não afirmam especificamente que estão relacionados à Programação Orientada a Objetos, mas é possível extrapolar e usá-los nesse contexto.

Def 3: um estágio no ciclo de vida de um objeto que identifica o status desse objeto.

Def 5: Uma condição ou situação durante a vida de um objeto, durante a qual ele satisfaz alguma condição, realiza alguma atividade ou espera por algum evento.

Def 8: característica de um objeto que se manifesta em seus membros de dados públicos e privados e pode ser dividida em duas categorias: estado essencial e estado não essencial.

Def 9: Em uma máquina de estado comercial, um dos vários estágios individuais discretos organizados em sequência para compor uma transação comercial.

Def 10: Uma condição na qual o circuito permanece até a aplicação de um pulso adequado.

O New World College Dictionary de Webster define 'estado' como:

Um conjunto de circunstâncias ou atributos que caracterizam uma pessoa ou coisa em um determinado momento; modo ou forma de ser: condição

O denominador comum de tudo isso é tempo. O estado muda à medida que o tempo avança. Essa é a natureza das variáveis. Se alguém perguntasse: "Qual é o seu estado atual?" Você poderia dizer hoje que é casado e amanhã poderá ser solteiro.

Considerando todas essas definições, pode-se extrapolar que 'estado' é a maneira que um objeto existe em um determinado momento determinado pelos valores de seus atributos, ou seja, suas propriedades / variáveis.

Eu não acho que fica mais simples do que isso.

Robert Rocha
fonte
Isso vale alguns votos, pois torna o potencial de ambiguidade mais claro do que as outras respostas.
PJTraill
Com relação ao meu comentário anterior: desde então, adicionei uma resposta minha para descrever a ambiguidade mais profundamente.
PJTraill
0

Um sistema orientado a objetos integra os termos de código e dados usando o conceito de "objeto". Um objeto possui estado (dados) e comportamento (código). Portanto, os estados do objeto são as instâncias (variáveis) dentro do objeto que contém os dados.

Syed MEhran Hussain
fonte
Isso é verdade, mas não parece acrescentar muito às respostas existentes.
precisa saber é o seguinte
1
Talvez seja fácil de entender para alguém :)
Syed Mehran Hussain
2
Isto está errado. O que você quer dizer, eu acho: um estado é uma atribuição de valores para essas variáveis.
Reinierpost