Definizione dello stato di un oggetto in OOP


11

Ho bisogno di una definizione concisa dello "stato di un oggetto" nella programmazione orientata agli oggetti (per un documento).

Per circa mezza giornata ho cercato un documento che posso citare su questo argomento, ma non sono riuscito a trovarne uno. Tutti gli articoli che ho trovato erano per lo più articoli generali sulla programmazione orientata agli oggetti e non definivano lo stato di un oggetto.

Non sono sicuro, ma la mia ipotesi migliore è qualcosa di simile: lo stato di un oggetto è definito dallo stato delle variabili di istanza dell'oggetto.

Sto cercando una definizione dello stato di un oggetto e / o un riferimento sull'argomento.

(a proposito, potrei riferirmi al concetto come "stato dell'oggetto" o è insolito?)


Penso che qui ci sia spazio per l'ambiguità, quindi dovresti aver scritto nel tuo documento esattamente cosa intendevi per "stato"; se non potevi farlo, forse non eri in grado di rilasciare il tuo documento.
PJTraill

Risposte:


9

Puoi dare un'occhiata (e citare) il libro "Analisi e progettazione orientate agli oggetti" di G. Booch :

... Un oggetto è un'entità che ha stato, comportamento e identità. La struttura e il comportamento di oggetti simili sono definiti nella loro classe comune. I termini istanza e oggetto sono intercambiabili.

Considereremo i concetti di stato, comportamento e identità in modo più dettagliato nelle sezioni che seguono. ...

E c'è un'intera sottosezione che descrive il concetto di stato :

... Da questo esempio, possiamo formare la seguente definizione di basso livello.

Lo stato di un oggetto comprende tutte le proprietà (solitamente statiche) dell'oggetto più i valori correnti (solitamente dinamici) di ciascuna di queste proprietà ...


4
Fuzzy, come al solito. Cosa probabilmente intendeva dire Booth: uno stato è un'assegnazione di valori a quelle variabili.
reinierpost,

3

Dovresti anche tenere presente che lo stato di un oggetto è un'entità "astratta", come determinato da ciò che è osservabile dai metodi. Ad esempio, un oggetto che implementa una tabella hash ha come stato, la raccolta di valori memorizzati nella tabella hash, non tutti i dettagli della rappresentazione interna.


2

Il termine " stato " può essere usato in vari sensi, il che potrebbe non essere neppure suscettibile di una definizione precisa. Era quindi importante che tu includessi una definizione nel tuo documento, per chiarire come stavi usando il termine. Di seguito non offro una definizione univoca dello stato di un oggetto, ma piuttosto provo a delineare una serie di modi di pensarlo, che possono essere appropriati in contesti diversi.

Per prima cosa, tuttavia, devi pensare a cosa intendi per " oggetto ": stai pensando a un oggetto concettuale, ad esempio un'entità che stai cercando di modellare o a un'istanza di una classe in un programma specifico; forse vuoi anche pensare allo stato di una variabile che potrebbe, in momenti diversi, riferirsi a oggetti diversi o a un sistema, magari accessibile tramite una certa interfaccia utente.

Parte della difficoltà nel definire lo stato di un oggetto in OOP è che quando modelliamo entità in un particolare linguaggio, quel linguaggio spesso non ci permette di distinguere gli attributi dell'oggetto che sono concettualmente parte della stessa entità da altri che non lo sono. Ad esempio, un elenco collegato Carsarà costituito da un numero di Linkoggetti, che contengono puntatori al successivo (e forse precedente) Linksebbene concettualmente l'elenco sia un singolo oggetto; i collegamenti possono anche essere incorporati inCar-oggetto o contiene puntatori ad essi, ma in questo caso gli oggetti collegati sono concettualmente separati piuttosto che parte dell'elenco; in un elenco di modifiche recenti, tuttavia, le modifiche possono essere presenti nell'elenco e considerate come parte di esso. In questi vari casi dobbiamo decidere se consideriamo lo stato di un oggetto per includere quello degli oggetti collegati. Inoltre, a Carpotrebbe avere un collegamento a un Registering_Authority- probabilmente non consideriamo lo stato della macchina cambiare quando la sua autorità di registrazione cambia l'URL del suo sito Web. A meno che il linguaggio di implementazione non ci consenta di distinguere diversi tipi di collegamento, non sarà possibile fare una definizione generale dello stato di un oggetto in termini di solo linguaggio.

Il ' esterna ' o ' funzionale ' stato potrebbe essere definito come 'come si comporta', ee.g. come reagisce alle invocazioni del metodo o all'interfaccia utente. Per un oggetto come istanza di classe questa definizione dipende dal tipo a cui l'oggetto è visto come appartenente: visto come a Circle, il colore di unColoured_Circlenon è visibile, e quindi irrilevante per il suo stato. Una difficoltà in questo è che potrebbe essere necessario definire "come reagisce" in termini di valori restituiti e questi "valori" potrebbero essere gli stati di altri oggetti. Un modo per formalizzare ciò è quello di dire che due stati di un oggetto sono uguali se tutte le possibili esecuzioni future di un sistema in cui è incorporato comportano la stessa mappatura dagli input a quel sistema agli output da esso. È possibile che questo sistema di chiusura sia un sistema autonomo, in grado di essere eseguito indipendentemente dal suo ambiente; d'altra parte, si potrebbe consentire che sia piccolo quanto l'oggetto in questione stesso. In ogni caso, un approccio matematico consiste nel definire uno stato come una classe di equivalenza di

Il ' interno ' stato potrebbe essere definito come lo stato della rappresentazione. Un primo tentativo è apparentemente circolare ma forse utile: "Lo stato interno di un oggetto è lo stato dei suoi membri". Qui dobbiamo fare attenzione a distinguere gli aspetti significativi della rappresentazione da quelli insignificanti: al livello più basso, la rappresentazione di un oggetto può ben includere indirizzi di altri oggetti, ma è improbabile che sia utile considerare un cambiamento in tale indirizzo come un cambiamento di stato. D'altra parte, una modifica dello stato di una cache per il risultato di una query, sebbene non faccia alcuna differenza per lo stato funzionale (come descritto sopra), sarà importante quando si considerano i test delle prestazioni.


Questa è una delle risposte più utili sullo stato dell'oggetto che ho trovato. C'è un documento PDF online e questo è per lo più. Soprattutto la parte sulla rappresentazione (stato interno). Mi apre gli occhi e mi rende l'oggetto sull'oggetto in modo diverso.
Miroslav Trninic,

1

IBM ha un glossario che definisce la parola "stato" in diverse definizioni molto simili tra loro. Non affermano specificamente di essere collegati alla programmazione orientata agli oggetti, ma si possono estrapolare e usarli in quel contesto.

Def 3: una fase del ciclo di vita di un oggetto che identifica lo stato di tale oggetto.

Def 5: una condizione o una situazione durante la vita di un oggetto durante la quale soddisfa una condizione, esegue un'attività o aspetta un evento.

Def 8: caratteristica di un oggetto che si manifesta nei suoi membri di dati pubblici e privati ​​e può essere divisa in due categorie: stato essenziale e stato non essenziale.

Def 9: in una macchina dello stato aziendale, una delle diverse fasi individuali separate organizzate in sequenza per comporre una transazione commerciale.

Def 10: una condizione in cui il circuito rimane fino all'applicazione di un impulso adatto.

Il dizionario del New World College di Webster definisce "stato" come:

Una serie di circostanze o attributi che caratterizzano una persona o cosa in un determinato momento; modo o forma dell'essere: condizione

Il comune denominatore di tutti questi è il tempo. Lo stato cambia con il passare del tempo. Questa è la natura delle variabili. Se qualcuno dovesse chiedere: "Qual è il tuo stato attuale?" Oggi potresti dire che sei sposato e domani potresti essere single.

Considerando tutte queste definizioni si può estrapolare che "stato" è il modo in cui un oggetto esiste in un determinato momento nel tempo determinato dai valori dei suoi attributi, vale a dire le sue proprietà / variabili.

Non penso che sia più semplice di così.


Questo vale alcuni voti, in quanto rende più chiaro il potenziale di ambiguità rispetto alle altre risposte.
PJTraill

Per quanto riguarda il mio commento precedente: da allora ho aggiunto una mia risposta per descrivere l'ambiguità in modo più intenso.
PJTraill,

0

Un sistema orientato agli oggetti integra i termini di codice e dati usando il concetto di "oggetto". Un oggetto ha stato (dati) e comportamento (codice). Quindi, gli stati dell'oggetto sono le istanze (variabili) all'interno dell'oggetto che contiene i dati.


Questo è vero ma non sembra aggiungere molto alle risposte esistenti.
David Richerby,

1
Forse sarà facile da capire per qualcuno :)
Syed MEhran Hussain il

2
Questo è sbagliato. Quello che intendi dire, penso: uno stato è un'assegnazione di valori a quelle variabili.
reinierpost,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.