Qual è il termine che descrive gli oggetti che rappresentano sia la logica che i dati?

5

Il motivo per cui sto facendo questa domanda è che voglio sapere come chiamare correttamente un'architettura in cui le classi hanno dati o logica ma non entrambi. So che questo va contro l'orientamento agli oggetti e l'incapsulamento. Voglio usare i termini corretti per discutere di questa architettura.

EDIT: Leggendo le risposte che ho ricevuto, posso vedere che la mia domanda non era chiara. Sento anche che la modifica che è stata apportata non ha spinto la domanda nella direzione in cui stavo andando.

Ripeterò la domanda in altri termini.

Supponi di lavorare in C #, in Java o in qualche altro linguaggio OO.

Hai 2 design:

DESIGN A:

class Car
{
     // data
     int numberOfWheels; 
     Engine carEngine;

     // methods
     public void StartCar();
}

DESIGN B:

class Car
{
     // this class contains only data (be it entity, DTO, whatever)
     int numberOfWheels;
     Engine carEngine;
}

class CarStarter
{
     public void StartCar(Car aCar);
}

Nel DESIGN B, alcune classi sono usate come strutture dati / DTO / entità (contengono solo dati e non devono contenere metodi). Altre classi contengono la logica e funzionano con le classi di dati.

Ora supponiamo di avere un design / architettura in cui la DESIGN B, dovrebbe essere applicata in tutto e non al design A.

Stavo cercando un termine che descrivesse il DESIGN B, o il termine / nozione OOP che consisteva nel DESIGN A. Preferibilmente entrambi.

Per il termine OOP immagino che potrebbe essere l'incapsulamento. Da Wikipedia Incapsulamento

A language construct that facilitates the bundling of data with the methods (or other functions) operating on that data.

Ancora non so come chiamare DESIGN B però.

    
posta Gilles 16.09.2011 - 18:00
fonte

8 risposte

4

Vedi quante risposte diverse stai ottenendo qui?

Sai qual è la conclusione?

Non ci sono nomi standard, ben noti e in realtà comuni per questo tipo di cose.

Se vuoi che le persone ti capiscano, chiamali semplicemente così come sono: strutture e classi di dati (o regole aziendali). Se vuoi fare una chiara distinzione da qualche parte, spiegala - a parole.

Attenersi a termini extra-formali mi sembra sempre così poco pratico.

    
risposta data 16.09.2011 - 23:49
fonte
30

What is the term, in relation to OO programming, to describe objects that represent both logic and data.

Oggetto

The question could be turned upside down, what would be the term to describe objects that contain only logic

Procedura se ha effetti collaterali, Funzione se è referenzialmente trasparente.

or only data.

Dati

The reason I am asking this question is I want to discuss an architecture where objects only either have data or only have logic and I want to use the proper terms to do so.

Questa è chiamata programmazione funzionale se la logica è referenzialmente trasparente e i dati sono immutabili, e programmazione procedurale altrimenti.

    
risposta data 16.09.2011 - 18:09
fonte
5

Gli oggetti hanno sia stato che comportamento.

Gli oggetti che hanno solo stato e nessun comportamento sono oggetti di trasferimento dati o dati. Li ho anche sentiti riferiti, erroneamente, come entità.

Gli oggetti che hanno solo un comportamento ma nessuno stato sono servizi.

    
risposta data 16.09.2011 - 21:00
fonte
3

Gli oggetti solo dati sono comunemente noti come Oggetti di trasferimento dati .

Gli oggetti senza dati sono probabilmente i migliori chiamati oggetti stateless, poiché non esiste uno stato al loro interno da mantenere.

    
risposta data 16.09.2011 - 18:24
fonte
2

Classi contengono sia la logica in forma di Membri (funzioni) che i dati in forma di Campi (variabili) . L'oggetto che rappresenta la classe in fase di esecuzione è denominato Istanza

    
risposta data 16.09.2011 - 18:51
fonte
2

Gli oggetti che contengono ed espongono sia la logica (metodi, proprietà) che i dati (campi) sono semplicemente "oggetti". Spesso, il comportamento generale di questo oggetto è un modello per un concetto o una cosa del mondo reale (questo è dopotutto il punto della progettazione OO; per strutturare i programmi in termini di oggetti di codice che modellano le idee del mondo reale), il che significa che un l'oggetto deve incapsulare sia i dati sullo stato di una particolare istanza di quell'oggetto, sia la logica che rappresenta ciò che un oggetto può fare; questi oggetti "ricchi" di stato, come una raccolta nella base di codice, vengono solitamente chiamati "dominio" o "modello".

Un oggetto che contiene solo la logica è raro; la maggior parte degli oggetti ha bisogno di memorizzare una sorta di stato. Se hai bisogno di un termine per tutti questi, ci sono tre sottocategorie principali che posso pensare che sono più comunemente sentito parlare di:

  • Classi statiche che organizzano metodi di utilità "puri" (senza stato e / o senza effetti collaterali); questi sono generalmente "aiutanti" o "classi di utilità".
  • Classi di istanze che esistono come "ponti" per le comunicazioni tra classi o livelli architetturali; questi sono spesso chiamati "controller" perché la loro funzione abituale è quella di dirigere più oggetti stateful per eseguire compiti sovraordinati che gli oggetti stateful non dovrebbero sapere da soli.
  • Classi di istanze che forniscono un mezzo per ottenere informazioni sullo stato da una risorsa esterna. La classe di istanza stessa non "possiede" i dati di stato che vengono esposti; è semplicemente un mezzo per un fine. Questi sono generalmente chiamati "repository"; alcuni di essi possono essere chiamati "proxy" a seconda del modello di progettazione di base in cui viene utilizzato l'oggetto.

Le classi che contengono solo dati sono generalmente denominate DTO o Oggetti di trasferimento dati. Potresti anche sentirli chiamati "structs", ma quel termine è solitamente riservato nei linguaggi in stile C per "tipi di valore complessi" come DateTime, Money, Point, Vector, ecc. Talvolta, le classi di soli dati vengono utilizzate come " dominio ", con altre classi costruite per eseguire tutte le manipolazioni di quei dati, ma questo è noto come un" modello di dominio anemico "ed è generalmente considerato un anti-modello.

    
risposta data 16.09.2011 - 21:06
fonte
1

Né il design fa nulla con Car che non lo fa riferimento. Car è una rappresentazione in black box. Presumo che sia solo un'omissione.

Dovresti chiamare il secondo design Programmazione procedurale , poiché è ciò che è senza un dubbio.

    
risposta data 18.09.2011 - 21:35
fonte
0

Homoiconicity .

In computer programming, homoiconicity is a property of some programming languages, in which the primary representation of programs is also a data structure in a primitive type of the language itself, from the Greek words homo meaning the same and icon meaning representation. This makes metaprogramming easier than in a language without this property. To put that another way, homoiconicity is where a program's source code is written as a basic data structure that the programming language knows how to access.

L'esempio più ovvio è Lisp. "Il codice è dati".

    
risposta data 21.03.2013 - 16:45
fonte

Leggi altre domande sui tag