Quando è un oggetto del mondo reale un oggetto (computazionale) nel mondo OOP?

5

In una strategia di fase di progettazione OOP,

Qualsiasi oggetto fisico / concettuale di un sistema può essere modellato (considerato) come oggetto computazionale nel programma progettato da OOP in base a due condizioni seguenti:

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

o

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.

Anche sopra due casi sono supportati qui , che dice: Viewing objects as finite state machines

Per illustrare sopra due casi, di seguito è riportato il diagramma object model e class diagram del gioco di lancio delle monete.

class Coin e class Player digita oggetti, hanno lo stato locale coinOption , come menzionato in primo caso . class CoinGame tipo oggetto non ha stato locale ma influenza lo stato di altri oggetti (di tipo Player e Coin ), come menzionato in secondo caso .

Comepersecondocaso,l'oggettotipoclassCoinGameinfluenzalostatodialtrioggettiditipoPlayereCoinattraversoleinterazionisotto,maclassCoinGametipooggettostessononhalocalestatosuproprio.

Quindi, class CoinGame non mantiene nessuno stato locale e ha composite relazione con Player e Coin , come da codice java sotto.

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);

        }
       .....
}

Questo è il codice completo in java. Sopra due casi sono validi, quando selezioni oggetti dal mondo reale. La mia comprensione è corretta?

    
posta overexchange 27.05.2015 - 18:52
fonte

3 risposte

3

In SICP § 1.1.2 , dice:

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.

Quindi un oggetto computazionale è semplicemente ciò che è indicato da una variabile. Può essere un oggetto, una funzione di prima classe o persino un numero. Questo è tutto ciò di cui hai bisogno per avere un oggetto computazionale.

Per quanto riguarda le tue prime due asserzioni, che un oggetto può modellare le modifiche nel tempo modificando il suo stato e / o passando i messaggi ad altri oggetti, queste due affermazioni sono entrambe vere.

    
risposta data 27.05.2015 - 19:11
fonte
3

Is my understanding correct?

No, dal momento che oggetti immutabili (come le stringhe in Java o C #, o tuple in Python), non cambiano il loro stato nel tempo, tuttavia sono esempi perfettamente validi per oggetti (computazionali) in qualsiasi tipo di definizione OOP che conosco. Tuttavia, questo tipo di oggetti può influenzare lo stato di altri oggetti attraverso le interazioni.

Proprio perché gli oggetti possono avere uno stato mutabile, non è obbligatorio per loro avere uno per essere un "oggetto valido nel senso OOP".

    
risposta data 27.05.2015 - 21:23
fonte
1

I due casi / condizioni, secondo la mia lettura, chiariscono quali oggetti mondo reale e concettuali sono candidati significativi per modellare oggetti computazionali dopo; non se un oggetto o una variabile in-code sia un oggetto computazionale. E c'è un grande grado di soggettività - è tutto sul fatto che tu, il programmatore, puoi riconoscere uno stato o un'interazione significativa per modellare un codice dopo.

Considera due oggetti:

A Cup: un attributo di cup è la sua pienezza , che può variare nel tempo. Possiamo quindi modellare un oggetto "computazionale" cup , in quanto il nostro cup oggetto memorizzerebbe fullness valori che possono cambiare [nel tempo]. Ad esempio, se abbiamo bisogno di un contenitore piccolo e finito per tamponare il consumo di una risorsa, un cup potrebbe essere un modello legittimo.

tuo cugino Ed : non fa niente. Si siede, non si muove. E non disturba mai nessuno. Quindi ... nessun valore particolare come modello computazionale.

    
risposta data 28.05.2015 - 00:35
fonte