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?)
Respostas:
Você pode dar uma olhada (e citar) no livro "Análise e Design Orientado a Objetos", de G. Booch :
E há toda uma subseção que descreve o conceito de estado :
fonte
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.
fonte
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
Car
consistirá em váriosLink
objetos, que contêm ponteiros para o próximo (e talvez anterior),Link
embora 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, umCar
pode ter um link para umRegistering_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_Circle
nã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 deO 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.
fonte
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.
O New World College Dictionary de Webster define 'estado' como:
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.
fonte
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.
fonte