Pregunta

Cuando comencé a programar OO hace muchos años, tuve la impresión de que las variables (si esa es la palabra correcta) eran "primitivas" (int, double, etc.) u objetos de primera clase (String, JPane, etc.).Esto se ve reforzado por una respuesta reciente sobre primitivas en Java y C# (@Daniel Pryden: ¿Son los tipos primitivos diferentes en Java y C#?).Sin embargo, no sé si los ValueTypes de C# son primitivos, objetos o alguna otra bestia, como objetos de segunda clase.Veo que SO tiene solo un uso del first-class etiqueta, por lo que tal vez ya no sea un término útil.

No encontré el artículo de Wikipedia útil ("Este artículo necesita la atención de un experto en el tema").Agradecería una taxonomía y el uso actual de los términos, principalmente relacionados con Java y C# (aunque tal vez otros lenguajes aporten información).

Aclaración:Me gustaría entender el término. primera clase y cuál es su rango de uso.

¿Fue útil?

Solución

El problema es que "el objeto de primera clase" no es un concepto bien definido.

El uso normal es que alguien dice que un "objeto" es una clase de cosa que debe tienen todas las propiedades X, Y y Z. Pero hay otras cosas que no tienen todas esas propiedades, sino que son una especie de objeto-ish. Así que vamos a llamar a los antiguos objetos de "primera clase" y no el resto "de primera clase" ... y no puede ser objetos.

El problema es que hay cualquier cantidad de puntos de vista sobre las propiedades que una cosa tiene que tener para que sea un objeto "de primera clase". Y ninguna perspectiva de las personas con puntos de vista opuestos de llegar a un consenso. (Por ejemplo, un experto en lenguaje Javascript podría argumentar enérgicamente que un objeto es sólo la primera clase si está basado en la plantilla.)

Los únicos puntos de vista muy sólidos sobre "primera conciencia de clase" serán los que se puede deducir de las respectivas especificaciones del lenguaje de Java y C #. Y que sólo se aplican realmente en el ámbito de los sistemas de idiomas / Tipo respectivos ... y no a través de múltiples idiomas.

Así "primera clase de objeto Java" o "primera clase C # objeto" podría ser significativo, pero "objeto de primera clase" sacado de contexto no lo es.

Bueno esa es mi opinión ...

Otros consejos

La noción de "ciudadano de primera" o "elemento de primera" en un lenguaje de programación fue introducido por un informático británico Christopher Strachey en los años 60 en el contexto de funciones de primera clase.La formulación más famosa de este principio se encuentra probablemente en Estructura e interpretación de programas informáticos. por Gerald Jay Sussman y Harry Abelson:

  • Pueden ser nombrados por variables.
  • Pueden pasarse como argumentos para los procedimientos.
  • Podrán ser devueltos como resultado de procedimientos.
  • Pueden estar incluidos en estructuras de datos.

Básicamente, significa que puedes hacer con este elemento del lenguaje de programación todo lo que puedes hacer con todos los demás elementos del lenguaje de programación.

En .NET no tiene los tipos primitivos vs clases. En su lugar, usted tiene estructuras vs clases, pero estructuras comparte muchas de las características de las clases (tales como la capacidad de tener propiedades y métodos), y heredan de la clase Object también.

Cuando se escribe int en C #, por ejemplo, es sólo un atajo idioma de la estructura Int32. Se puede hacer por ejemplo int i=int.Parse("34"), o incluso string s=1234.ToString(). Con el fin de instancias struct asignar a las variables de tipo Object, hay del boxeo / unboxing mecanismo .

En Java, por el contrario, tiene de hecho los tipos primitivos vs clases dicotomía. Así, por ejemplo, para realizar operaciones en una variable de tipo int, debe utilizar la clase Integer auxiliar. Esa es una de las cosas que no me gusta de Java en comparación con .NET.

Editar . Cuando uno lee acerca de los "objetos de primera clase" (o clases), que significa "objetos totalmente con alimentación", es decir, clases que tienen las mismas capacidades que las otras clases o categorías hechos por los usuarios. Se trata de distinguir entre "tipos primitivos limitados".

Para cada tipo de datos primitivo en Java, la biblioteca núcleo clase proporciona una clase contenedora que la representa como un objeto Java. Por ejemplo, la clase Int32 envuelve el tipo de datos int, y la clase doble envuelve el tipo de datos doble.

Por otro lado, todos los tipos de datos primitivos en C # son los objetos en el espacio de nombres System. Para cada tipo de datos, un nombre corto, o alias, se proporciona. Por ejemplo, int es el nombre corto para System.Int32 y doble es la forma corta de System.Double.

La lista de tipos de datos de C # y sus alias se proporciona en la tabla siguiente. Como se puede ver, los ocho primeros de éstos corresponden a los tipos primitivos disponibles en Java. Tenga en cuenta, sin embargo, que booleano de Java se llama bool en C #.

De: http: // MSDN .microsoft.com / es-es / library / ms228360% 28VS.80, ligero% 29.aspx

http://onjava.com/onjava/2003/05/21 /delegates.html

en otras palabras c métodos # son objeto de primera clase, ya que podemos pasar en otro método. podemos utilizar métodos como cualquier otro valor (cadenas, números, objeto creado por el usuario).

Otro ejemplo de primera clase de objetos que u puede encontrar poco común en otros idiomas, pero es c # Expresiones

Francamente, no tengo ni idea de lo que es un "objeto de primera clase" ...
Pero encontré primer uso de un lenguaje similar en la documentación Lua y lista de correo, diciendo que las funciones son ciudadanos de primera clase, o valores de primera clase.

Me dejó uno de los autores de Lua para explicar lo que es: Programación en Lua: 6 - Más información sobre las funciones

  

Esto significa que, en Lua, una función es una   valor con los mismos derechos que   valores convencionales como números y   instrumentos de cuerda. Las funciones pueden ser almacenados en   variables (globales y locales) y   en las tablas, se pueden pasar como argumentos,   y puede ser devuelto por otra   funciones.

De alguna manera, esta definición se aplica a objetos en Java: se puede almacenar en variables, en las matrices, los utilizan como parámetros de la función y devolverlos, los utilizan como clave de la HashMap y otras colecciones, etc.
No estoy seguro si así es como se utiliza el término para los objetos, pero al menos tiene sentido ...: -)

En un lenguaje como C, los objetos tienen que ser hechas desde cero, utilizando algunos trucos (re-creación de C ++, de alguna manera ...), por lo que no son de primera clase: hay que pasar punteros en torno a manipularlos.

Cuando hablamos de "objetos de primera clase", de "objetos" nos referimos a algunos conceptos de la lengua, no los objetos que creamos en ese idioma. Por eso, también hay tales términos como "ciudadanos de primera clase".

Así, por ejemplo, Java ha siguientes conceptos - Java-objetos Java, primitivas, campos, métodos y otros (por I-objetos de Java significa nada que es instancia de tipo de objeto). Yo diría que en Java Java ambos objetos Java y primitivas son ciudadanos de primera clase en el idioma.

En C # tenemos algunos conceptos adicionales que podemos "prueba" para las propiedades de primera clase. Por ejemplo, los delegados. Podemos asignar delegado ot variable (darle un nombre), pasarlo al método como argumento, volverlo a partir de método, incorporar en las estructuras de datos (tener un diccionario de delegados, por ejemplo). Así que creo que podemos decir que los delegados son objetos de primera clase en C #. Puede seguir para otros conceptos de C # - eventos, propiedades ...

Los lenguajes funcionales tienen concepto de "función" y por supuesto que es un ciudadano de primera clase en el lenguaje funcional ninguna. Yo diría que podemos llamar el lenguaje un lenguaje funcional si tiene "función" como un concepto de primera clase (nombre, pase, a cambio, incorporan ...).

Por lo tanto, si alguna lengua traer algunos conceptos que pueden "medir" el poder de estos conceptos en el lenguaje en sí.

objetos de primera clase son aquellos objetos que creamos sin utilizar 'nueva' palabra clave. Normalmente creamos un objeto utilizando 'nueva' palabra clave, pero algún objeto en el lenguaje de programación que creamos sin utilizar 'nueva' palabra clave.

En java 'cadena' es un objeto de primera clase. Es un concepto de Java y no es un concepto bipedestador para todos los lenguajes de programación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top