Quando é um objeto do mundo real um objeto (computacional) no mundo OOP?

5

Em uma estratégia de fase de design de OOP,

Qualquer objeto físico / conceitual de um sistema pode ser modelado (considerado) como objeto computacional em seu programa projetado para OOP com base em duas condições abaixo:

First case: That physical/conceptual object of a system must have it's local state and that state changes over time.

ou

Second case: that physical/conceptual object of a system may or may not have it's local state but that same object must influence the state of other physical/conceptual object of a system through interactions.

Acima de dois casos também há suporte aqui , que diz: Viewing objects as finite state machines

Para ilustrar os dois casos acima, abaixo está o diagrama object model e class diagram do jogo de lançamento de moedas.

Os objetos

class Coin e class Player type têm o estado local coinOption , conforme mencionado no primeiro caso . O objeto class CoinGame type não tem estado local, mas influencia o estado de outros objetos (do tipo Player e Coin ), como mencionado em segundo caso .

Comosegundocaso,oobjetoclassCoinGametypeinfluenciaoestadodeoutrosobjetosdotipoPlayereCoinatravésdasinteraçõesabaixo,masoobjetoclassCoinGametypenãotemlocalestadoporcontaprópria.

Portanto, class CoinGame não mantém nenhum estado local e tem composite relação com Player e Coin , conforme o código Java abaixo.

public class CoinGame {

        Player[] players = new Player[2];

        Coin theCoin = new Coin();

        CoinGame(String player1Name, String player2Name){

            players[0] = new Player(player1Name);
            players[1] = new Player(player2Name);

        }
       .....
}

Aqui está o código completo em java. Acima de dois casos são válidos, quando você seleciona objetos do mundo real. Meu entendimento está correto?

    
por overexchange 27.05.2015 / 18:52
fonte

3 respostas

3

Em SICP § 1.1.2 , diz:

A critical aspect of a programming language is the means it provides for using names to refer to computational objects. We say that the name identifies a variable whose value is the object.

Assim, um objeto computacional é simplesmente aquele que é apontado por uma variável. Pode ser um objeto, uma função de primeira classe ou até mesmo um número. Isso é tudo que você precisa para ter um objeto computacional.

Quanto às suas duas primeiras asserções, que um objeto pode modelar as mudanças no tempo alterando seu estado e / ou passando mensagens para outros objetos, essas duas afirmações são ambas verdadeiras.

    
por 27.05.2015 / 19:11
fonte
3

Is my understanding correct?

Não, como objetos imutáveis (como strings em Java ou C #, ou tuplas em Python), não alteram seu estado ao longo do tempo, são exemplos perfeitamente válidos para objetos (computacionais) em qualquer tipo de definição OOP que eu conheça. No entanto, esse tipo de objeto pode influenciar o estado de outros objetos por meio de interações.

Só porque os objetos podem ter um estado mutável, não é obrigatório que eles tenham um por ser um "objeto válido no sentido da OOP".

    
por 27.05.2015 / 21:23
fonte
1

Os dois casos / condições, por minha leitura, esclarecem quais objetos mundo real e conceitual são candidatos significativos para modelar objetos computacionais depois; não se um objeto ou variável in-code é um objeto computacional. E há um grande grau de subjetividade aí - é tudo sobre se você, o programador, pode reconhecer um estado significativo ou interação para modelar algum código depois.

Considere dois objetos:

Uma taça: Um atributo de uma taça é a sua plenitude , que pode variar ao longo do tempo. Portanto, podemos modelar um objeto "computacional" cup , em que nosso objeto cup armazenaria fullness valores que podem mudar [com o tempo]. Por exemplo, se precisarmos de um contêiner pequeno e finito para proteger nosso consumo de um recurso, um cup poderia ser um modelo legítimo.

Seu primo Ed : Não faz nada. Apenas senta, não se move. E nunca incomoda ninguém. Daí ... nenhum valor particular como modelo computacional.

    
por 28.05.2015 / 00:35
fonte